m88k_b.s 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. /*
  2. * QuickThreads -- Threads-building toolkit.
  3. * Copyright (c) 1993 by David Keppel
  4. *
  5. * Permission to use, copy, modify and distribute this software and
  6. * its documentation for any purpose and without fee is hereby
  7. * granted, provided that the above copyright notice and this notice
  8. * appear in all copies. This software is provided as a
  9. * proof-of-concept and for demonstration purposes; there is no
  10. * representation about the suitability of this software for any
  11. * purpose.
  12. */
  13. .text
  14. .globl _b_call_reg
  15. .globl _b_call_imm
  16. .globl _b_add
  17. .globl _b_load
  18. _b_null:
  19. jmp r1
  20. _b_call_reg:
  21. subu r31, r31,8 /* Alloc ret pc save space. */
  22. st r1, r31,32 /* Save ret pc. */
  23. or.u r3, r0,hi16(_b_null) /* Put call addr in a reg. */
  24. or r3, r3,lo16(_b_null)
  25. jsr r3
  26. L0:
  27. jsr r3
  28. jsr r3
  29. jsr r3
  30. jsr.n r3
  31. subu r2, r2,5 /* Decrement #of iter to go. */
  32. bcnd.n gt0,r2,L0
  33. jsr r3
  34. ld r1, r31,32
  35. jmp r1
  36. _b_call_imm:
  37. subu r31, r31,8 /* Alloc ret pc save space. */
  38. st r1, r31,32 /* Save ret pc. */
  39. bsr _b_null
  40. L1:
  41. bsr _b_null
  42. bsr _b_null
  43. bsr _b_null
  44. bsr.n _b_null
  45. subu r2, r2,5 /* Decrement #of iter to go. */
  46. bcnd.n gt0,r2,L1
  47. bsr _b_null
  48. ld r1, r31,32
  49. jmp r1
  50. _b_add:
  51. add r0, r3,r4
  52. L2:
  53. add r3, r4,r5
  54. add r4, r5,r6
  55. add r5, r6,r7
  56. add r8, r9,r0
  57. add r0, r3,r4
  58. add r3, r4,r5
  59. add r4, r5,r6
  60. add r5, r6,r7
  61. add r8, r9,r0
  62. add r0, r3,r4
  63. add r3, r4,r5
  64. add r4, r5,r6
  65. add r5, r6,r7
  66. add r8, r9,r0
  67. add r0, r3,r4
  68. add r3, r4,r5
  69. add r4, r5,r6
  70. add r5, r6,r7
  71. add r8, r9,r0
  72. subu r2, r2,20 /* Decrement #of iter to go. */
  73. bcnd.n gt0,r2,L2
  74. add r0, r3,r4
  75. jmp r1
  76. _b_load:
  77. ld r0, r31,0
  78. L3:
  79. ld r3, r31,4
  80. ld r4, r31,8
  81. ld r5, r31,12
  82. ld r6, r31,16
  83. ld r0, r31,0
  84. ld r3, r31,4
  85. ld r4, r31,8
  86. ld r5, r31,12
  87. ld r6, r31,16
  88. ld r0, r31,0
  89. ld r3, r31,4
  90. ld r4, r31,8
  91. ld r5, r31,12
  92. ld r6, r31,16
  93. ld r0, r31,0
  94. ld r3, r31,4
  95. ld r4, r31,8
  96. ld r5, r31,12
  97. ld r6, r31,16
  98. subu r2, r2,20 /* Decrement #of iter to go. */
  99. bcnd.n gt0,r2,L3
  100. ld r0, r31,0
  101. jmp r1