sort.sbk 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. .section ".data"
  2. .global in
  3. .type in,#object
  4. .align 4
  5. in:
  6. .word 0xa
  7. .word 0x20
  8. .word 0xffffffff
  9. .word 0x237
  10. .word 0x3
  11. .word 0x12
  12. .word 0x1
  13. .word 0xffffffcd
  14. .word 0x315
  15. .word 0x0
  16. .size in,40
  17. .global main
  18. .section ".text"
  19. .align 4
  20. main:
  21. save %sp,-96,%sp
  22. set in,%o0
  23. set 10,%o1
  24. call sort; nop
  25. mov %g0,%i5
  26. ba .L5; nop
  27. .L2:
  28. sll %i5,2,%i4
  29. set in,%i3
  30. ld [%i4+%i3],%o0
  31. call putd; nop
  32. set 10,%o0
  33. call putchar; nop
  34. .L3:
  35. add %i5,1,%i5
  36. .L5:
  37. mov %i5,%i4
  38. set 10,%i3
  39. cmp %i4,%i3; blu .L2; nop
  40. mov %g0,%i0
  41. .L1:
  42. ret; restore
  43. .type main,#function
  44. .size main,.-main
  45. .global putd
  46. .align 4
  47. putd:
  48. save %sp,-96,%sp
  49. cmp %i0,0; bge .L7; nop
  50. set 45,%o0
  51. call putchar; nop
  52. neg %i0,%i0
  53. .L7:
  54. sra %i0,31,%g1; wr %g0,%g1,%y; nop; nop; nop; sdiv %i0,10,%i5
  55. cmp %i5,0; be .L9; nop
  56. sra %i0,31,%g1; wr %g0,%g1,%y; nop; nop; nop; sdiv %i0,10,%o0
  57. call putd; nop
  58. .L9:
  59. sra %i0,31,%g1; wr %g0,%g1,%y; nop; nop; nop; sdiv %i0,10,%g1
  60. ; smul %g1,10,%g1; sub %i0,%g1,%i5
  61. add %i5,48,%o0
  62. call putchar; nop
  63. mov %g0,%i0
  64. .L6:
  65. ret; restore
  66. .type putd,#function
  67. .size putd,.-putd
  68. .global sort
  69. .align 4
  70. sort:
  71. save %sp,-96,%sp
  72. set xx,%i5
  73. st %i0,[%i5]
  74. mov %i0,%o0
  75. mov %g0,%o1
  76. sub %i1,1,%i5
  77. mov %i5,%i1
  78. mov %i5,%o2
  79. call quick; nop
  80. mov %g0,%i0
  81. .L11:
  82. ret; restore
  83. .type sort,#function
  84. .size sort,.-sort
  85. .global quick
  86. .align 4
  87. quick:
  88. save %sp,-96,%sp
  89. cmp %i1,%i2; bl .L13; nop
  90. ba .L12; nop
  91. .L13:
  92. mov %i0,%o0
  93. mov %i1,%o1
  94. mov %i2,%o2
  95. call partition; nop
  96. mov %o0,%i5
  97. mov %i0,%o0
  98. mov %i1,%o1
  99. sub %i5,1,%o2
  100. call quick; nop
  101. mov %i0,%o0
  102. add %i5,1,%o1
  103. mov %i2,%o2
  104. call quick; nop
  105. mov %g0,%i0
  106. .L12:
  107. ret; restore
  108. .type quick,#function
  109. .size quick,.-quick
  110. .global partition
  111. .align 4
  112. partition:
  113. save %sp,-96,%sp
  114. add %i2,1,%i2
  115. mov %i1,%i4
  116. sll %i4,2,%i3
  117. ld [%i3+%i0],%i5
  118. ba .L17; nop
  119. .L16:
  120. add %i1,1,%i1
  121. ba .L20; nop
  122. .L19:
  123. add %i1,1,%i1
  124. .L20:
  125. sll %i1,2,%i3
  126. ld [%i3+%i0],%i3
  127. cmp %i3,%i5; bl .L19; nop
  128. sub %i2,1,%i2
  129. ba .L23; nop
  130. .L22:
  131. sub %i2,1,%i2
  132. .L23:
  133. sll %i2,2,%i3
  134. ld [%i3+%i0],%i3
  135. cmp %i3,%i5; bg .L22; nop
  136. cmp %i1,%i2; bge .L25; nop
  137. sll %i1,2,%i3
  138. add %i3,%i0,%o0
  139. sll %i2,2,%i3
  140. add %i3,%i0,%o1
  141. call exchange; nop
  142. .L25:
  143. .L17:
  144. cmp %i1,%i2; bl .L16; nop
  145. sll %i4,2,%i3
  146. add %i3,%i0,%o0
  147. sll %i2,2,%i3
  148. add %i3,%i0,%o1
  149. call exchange; nop
  150. mov %i2,%i0
  151. .L15:
  152. ret; restore
  153. .type partition,#function
  154. .size partition,.-partition
  155. .global exchange
  156. .align 4
  157. exchange:
  158. save %sp,-96,%sp
  159. set .L28,%o0
  160. set xx,%i4
  161. ld [%i4],%i4
  162. mov %i0,%i3
  163. sub %i3,%i4,%i3
  164. sra %i3,31,%g1; wr %g0,%g1,%y; nop; nop; nop; sdiv %i3,4,%o1
  165. mov %i1,%i3
  166. sub %i3,%i4,%i4
  167. sra %i4,31,%g1; wr %g0,%g1,%y; nop; nop; nop; sdiv %i4,4,%o2
  168. call printf; nop
  169. ld [%i0],%i5
  170. ld [%i1],%i4
  171. st %i4,[%i0]
  172. st %i5,[%i1]
  173. mov %g0,%i0
  174. .L27:
  175. ret; restore
  176. .type exchange,#function
  177. .size exchange,.-exchange
  178. .section ".bss"
  179. .global xx
  180. .type xx,#object
  181. .size xx,4
  182. .common xx,4,4
  183. .section ".rodata"
  184. .align 1
  185. .L28:
  186. .byte 101
  187. .byte 120
  188. .byte 99
  189. .byte 104
  190. .byte 97
  191. .byte 110
  192. .byte 103
  193. .byte 101
  194. .byte 40
  195. .byte 37
  196. .byte 100
  197. .byte 44
  198. .byte 37
  199. .byte 100
  200. .byte 41
  201. .byte 10
  202. .byte 0