queen.ssa 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. # eight queens program
  2. # generated by minic
  3. export function w $chk(w %t0, w %t1) {
  4. @l0
  5. %x =l alloc4 4
  6. storew %t0, %x
  7. %y =l alloc4 4
  8. storew %t1, %y
  9. %i =l alloc4 4
  10. %r =l alloc4 4
  11. storew 0, %i
  12. storew 0, %r
  13. @l1
  14. %t6 =w loadw %i
  15. %t7 =w loadw $glo1
  16. %t5 =w csltw %t6, %t7
  17. jnz %t5, @l2, @l3
  18. @l2
  19. %t10 =w loadw %r
  20. %t15 =l loadl $glo3
  21. %t16 =w loadw %x
  22. %t17 =l extsw %t16
  23. %t18 =l mul 8, %t17
  24. %t14 =l add %t15, %t18
  25. %t13 =l loadl %t14
  26. %t19 =w loadw %i
  27. %t20 =l extsw %t19
  28. %t21 =l mul 4, %t20
  29. %t12 =l add %t13, %t21
  30. %t11 =w loadw %t12
  31. %t9 =w add %t10, %t11
  32. storew %t9, %r
  33. %t24 =w loadw %r
  34. %t29 =l loadl $glo3
  35. %t30 =w loadw %i
  36. %t31 =l extsw %t30
  37. %t32 =l mul 8, %t31
  38. %t28 =l add %t29, %t32
  39. %t27 =l loadl %t28
  40. %t33 =w loadw %y
  41. %t34 =l extsw %t33
  42. %t35 =l mul 4, %t34
  43. %t26 =l add %t27, %t35
  44. %t25 =w loadw %t26
  45. %t23 =w add %t24, %t25
  46. storew %t23, %r
  47. %t39 =w loadw %x
  48. %t40 =w loadw %i
  49. %t38 =w add %t39, %t40
  50. %t41 =w loadw $glo1
  51. %t37 =w csltw %t38, %t41
  52. %t44 =w loadw %y
  53. %t45 =w loadw %i
  54. %t43 =w add %t44, %t45
  55. %t46 =w loadw $glo1
  56. %t42 =w csltw %t43, %t46
  57. %t36 =w and %t37, %t42
  58. jnz %t36, @l4, @l5
  59. @l4
  60. %t49 =w loadw %r
  61. %t54 =l loadl $glo3
  62. %t56 =w loadw %x
  63. %t57 =w loadw %i
  64. %t55 =w add %t56, %t57
  65. %t58 =l extsw %t55
  66. %t59 =l mul 8, %t58
  67. %t53 =l add %t54, %t59
  68. %t52 =l loadl %t53
  69. %t61 =w loadw %y
  70. %t62 =w loadw %i
  71. %t60 =w add %t61, %t62
  72. %t63 =l extsw %t60
  73. %t64 =l mul 4, %t63
  74. %t51 =l add %t52, %t64
  75. %t50 =w loadw %t51
  76. %t48 =w add %t49, %t50
  77. storew %t48, %r
  78. @l5
  79. %t68 =w loadw %x
  80. %t69 =w loadw %i
  81. %t67 =w add %t68, %t69
  82. %t70 =w loadw $glo1
  83. %t66 =w csltw %t67, %t70
  84. %t74 =w loadw %y
  85. %t75 =w loadw %i
  86. %t73 =w sub %t74, %t75
  87. %t71 =w cslew 0, %t73
  88. %t65 =w and %t66, %t71
  89. jnz %t65, @l7, @l8
  90. @l7
  91. %t78 =w loadw %r
  92. %t83 =l loadl $glo3
  93. %t85 =w loadw %x
  94. %t86 =w loadw %i
  95. %t84 =w add %t85, %t86
  96. %t87 =l extsw %t84
  97. %t88 =l mul 8, %t87
  98. %t82 =l add %t83, %t88
  99. %t81 =l loadl %t82
  100. %t90 =w loadw %y
  101. %t91 =w loadw %i
  102. %t89 =w sub %t90, %t91
  103. %t92 =l extsw %t89
  104. %t93 =l mul 4, %t92
  105. %t80 =l add %t81, %t93
  106. %t79 =w loadw %t80
  107. %t77 =w add %t78, %t79
  108. storew %t77, %r
  109. @l8
  110. %t98 =w loadw %x
  111. %t99 =w loadw %i
  112. %t97 =w sub %t98, %t99
  113. %t95 =w cslew 0, %t97
  114. %t102 =w loadw %y
  115. %t103 =w loadw %i
  116. %t101 =w add %t102, %t103
  117. %t104 =w loadw $glo1
  118. %t100 =w csltw %t101, %t104
  119. %t94 =w and %t95, %t100
  120. jnz %t94, @l10, @l11
  121. @l10
  122. %t107 =w loadw %r
  123. %t112 =l loadl $glo3
  124. %t114 =w loadw %x
  125. %t115 =w loadw %i
  126. %t113 =w sub %t114, %t115
  127. %t116 =l extsw %t113
  128. %t117 =l mul 8, %t116
  129. %t111 =l add %t112, %t117
  130. %t110 =l loadl %t111
  131. %t119 =w loadw %y
  132. %t120 =w loadw %i
  133. %t118 =w add %t119, %t120
  134. %t121 =l extsw %t118
  135. %t122 =l mul 4, %t121
  136. %t109 =l add %t110, %t122
  137. %t108 =w loadw %t109
  138. %t106 =w add %t107, %t108
  139. storew %t106, %r
  140. @l11
  141. %t127 =w loadw %x
  142. %t128 =w loadw %i
  143. %t126 =w sub %t127, %t128
  144. %t124 =w cslew 0, %t126
  145. %t132 =w loadw %y
  146. %t133 =w loadw %i
  147. %t131 =w sub %t132, %t133
  148. %t129 =w cslew 0, %t131
  149. %t123 =w and %t124, %t129
  150. jnz %t123, @l13, @l14
  151. @l13
  152. %t136 =w loadw %r
  153. %t141 =l loadl $glo3
  154. %t143 =w loadw %x
  155. %t144 =w loadw %i
  156. %t142 =w sub %t143, %t144
  157. %t145 =l extsw %t142
  158. %t146 =l mul 8, %t145
  159. %t140 =l add %t141, %t146
  160. %t139 =l loadl %t140
  161. %t148 =w loadw %y
  162. %t149 =w loadw %i
  163. %t147 =w sub %t148, %t149
  164. %t150 =l extsw %t147
  165. %t151 =l mul 4, %t150
  166. %t138 =l add %t139, %t151
  167. %t137 =w loadw %t138
  168. %t135 =w add %t136, %t137
  169. storew %t135, %r
  170. @l14
  171. %t153 =w loadw %i
  172. %t152 =w add %t153, 1
  173. storew %t152, %i
  174. jmp @l1
  175. @l3
  176. %t154 =w loadw %r
  177. ret %t154
  178. }
  179. export function w $go(w %t0) {
  180. @l16
  181. %y =l alloc4 4
  182. storew %t0, %y
  183. %x =l alloc4 4
  184. %t2 =w loadw %y
  185. %t3 =w loadw $glo1
  186. %t1 =w ceqw %t2, %t3
  187. jnz %t1, @l17, @l18
  188. @l17
  189. %t5 =w loadw $glo2
  190. %t4 =w add %t5, 1
  191. storew %t4, $glo2
  192. ret 0
  193. @l18
  194. storew 0, %x
  195. @l20
  196. %t10 =w loadw %x
  197. %t11 =w loadw $glo1
  198. %t9 =w csltw %t10, %t11
  199. jnz %t9, @l21, @l22
  200. @l21
  201. %t14 =w loadw %x
  202. %t15 =w loadw %y
  203. %t13 =w call $chk(w %t14, w %t15)
  204. %t12 =w ceqw %t13, 0
  205. jnz %t12, @l23, @l24
  206. @l23
  207. %t21 =l loadl $glo3
  208. %t22 =w loadw %x
  209. %t23 =l extsw %t22
  210. %t24 =l mul 8, %t23
  211. %t20 =l add %t21, %t24
  212. %t19 =l loadl %t20
  213. %t25 =w loadw %y
  214. %t26 =l extsw %t25
  215. %t27 =l mul 4, %t26
  216. %t18 =l add %t19, %t27
  217. %t28 =w loadw %t18
  218. %t17 =w add %t28, 1
  219. storew %t17, %t18
  220. %t31 =w loadw %y
  221. %t30 =w add %t31, 1
  222. %t29 =w call $go(w %t30)
  223. %t37 =l loadl $glo3
  224. %t38 =w loadw %x
  225. %t39 =l extsw %t38
  226. %t40 =l mul 8, %t39
  227. %t36 =l add %t37, %t40
  228. %t35 =l loadl %t36
  229. %t41 =w loadw %y
  230. %t42 =l extsw %t41
  231. %t43 =l mul 4, %t42
  232. %t34 =l add %t35, %t43
  233. %t44 =w loadw %t34
  234. %t33 =w sub %t44, 1
  235. storew %t33, %t34
  236. @l24
  237. %t46 =w loadw %x
  238. %t45 =w add %t46, 1
  239. storew %t45, %x
  240. jmp @l20
  241. @l22
  242. ret 0
  243. }
  244. export function w $main() {
  245. @l26
  246. %i =l alloc4 4
  247. storew 8, $glo1
  248. %t4 =w loadw $glo1
  249. %t3 =l call $calloc(w %t4, w 8)
  250. storel %t3, $glo3
  251. storew 0, %i
  252. @l27
  253. %t9 =w loadw %i
  254. %t10 =w loadw $glo1
  255. %t8 =w csltw %t9, %t10
  256. jnz %t8, @l28, @l29
  257. @l28
  258. %t13 =w loadw $glo1
  259. %t12 =l call $calloc(w %t13, w 4)
  260. %t16 =l loadl $glo3
  261. %t17 =w loadw %i
  262. %t18 =l extsw %t17
  263. %t19 =l mul 8, %t18
  264. %t15 =l add %t16, %t19
  265. storel %t12, %t15
  266. %t21 =w loadw %i
  267. %t20 =w add %t21, 1
  268. storew %t20, %i
  269. jmp @l27
  270. @l29
  271. %t22 =w call $go(w 0)
  272. %t25 =w loadw $glo2
  273. %t24 =w cnew %t25, 92
  274. ret %t24
  275. }
  276. data $glo1 = { w 0 }
  277. data $glo2 = { w 0 }
  278. data $glo3 = { l 0 }