head_em.s 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #include "system.h"
  2. #include "em_abs.h"
  3. #ifdef BSD42
  4. #include "/usr/include/syscall.h"
  5. #endif BSD42
  6. # $Header$
  7. .globl hol0
  8. .globl .reghp
  9. .globl .trppc
  10. .globl .trpim
  11. # run time startoff
  12. .word 0
  13. bispsw $0100 # set FU(0100)
  14. movl 4(sp),r0
  15. clrl -4(r0)
  16. movl sp,r0
  17. movl (r0)+,r1
  18. movl r0,r2
  19. a1:
  20. tstl (r0)+
  21. bneq a1
  22. cmpl r0,(r2)
  23. blssu a2
  24. tstl -(r0)
  25. a2:
  26. pushl r0
  27. pushl r2
  28. pushl r1
  29. movl $m1,ap
  30. chmk (ap)+ # catch floating point exception
  31. calls $3,_m_a_i_n
  32. movl $m2,ap
  33. movl r0,6(ap)
  34. chmk (ap)+
  35. halt
  36. .align 1
  37. sig8:
  38. .word 0x0000
  39. pushl 8(ap)
  40. movl (sp)+,ap
  41. pushl tab [ap]
  42. jsb .trp
  43. movl $m1,ap
  44. chmk (ap)+
  45. ret
  46. .data
  47. #ifdef BSD42
  48. m1:
  49. .word SYS_sigvec
  50. .long 3
  51. .long 8
  52. .long m1a
  53. .long 0
  54. m1a:
  55. .long sig8
  56. .long 0
  57. .long 0
  58. #else BSD42
  59. m1:
  60. .word 48
  61. .long 2
  62. .long 8
  63. .long sig8
  64. #endif BSD42
  65. m2:
  66. .word 1
  67. .long 1
  68. .long 0
  69. .reghp:
  70. .long _end
  71. hol0:
  72. .space 8
  73. .trppc:
  74. .space 4
  75. .trpim:
  76. .long 0
  77. tab:
  78. .long 0
  79. .long EIOVFL
  80. .long EIDIVZ
  81. .long EFOVFL
  82. .long EFDIVZ
  83. .long EFUNFL
  84. .long EILLINS
  85. .long EARRAY
  86. .long EFOVFL
  87. .long EFDIVZ
  88. .long EFUNFL