ifc.ssa 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. export
  2. function l $ifc1(l %v0, l %v1, w %c) {
  3. @start
  4. jnz %c, @true, @false
  5. @true
  6. %v =l copy %v1
  7. jmp @end
  8. @false
  9. %v =l copy %v0
  10. jmp @end
  11. @end
  12. ret %v
  13. }
  14. export
  15. function l $ifc2(l %v0, l %v1, w %p) {
  16. @start
  17. %c =w cnew %p, 42
  18. jnz %c, @true, @false
  19. @true
  20. %v =l copy %v1
  21. jmp @end
  22. @false
  23. %v =l copy %v0
  24. jmp @end
  25. @end
  26. ret %v
  27. }
  28. export
  29. function l $ifc3(l %v0, l %v1, w %p) {
  30. @start
  31. %c =w cugtw %p, 42
  32. jnz %c, @true, @false
  33. @true
  34. %v =l copy %v1
  35. jmp @end
  36. @false
  37. %v =l copy %v0
  38. jmp @end
  39. @end
  40. ret %v
  41. }
  42. export
  43. function l $ifclts(s %s0, s %s1, l %v0, l %v1) {
  44. @start
  45. %c =w clts %s0, %s1
  46. jnz %c, @true, @false
  47. @true
  48. %v =l copy %v1
  49. jmp @end
  50. @false
  51. %v =l copy %v0
  52. jmp @end
  53. @end
  54. ret %v
  55. }
  56. export
  57. function l $ifcles(s %s0, s %s1, l %v0, l %v1) {
  58. @start
  59. %c =w cles %s0, %s1
  60. jnz %c, @true, @false
  61. @true
  62. %v =l copy %v1
  63. jmp @end
  64. @false
  65. %v =l copy %v0
  66. jmp @end
  67. @end
  68. ret %v
  69. }
  70. export
  71. function l $ifcgts(s %s0, s %s1, l %v0, l %v1) {
  72. @start
  73. %c =w cgts %s0, %s1
  74. jnz %c, @true, @false
  75. @true
  76. %v =l copy %v1
  77. jmp @end
  78. @false
  79. %v =l copy %v0
  80. jmp @end
  81. @end
  82. ret %v
  83. }
  84. export
  85. function l $ifcges(s %s0, s %s1, l %v0, l %v1) {
  86. @start
  87. %c =w cges %s0, %s1
  88. jnz %c, @true, @false
  89. @true
  90. %v =l copy %v1
  91. jmp @end
  92. @false
  93. %v =l copy %v0
  94. jmp @end
  95. @end
  96. ret %v
  97. }
  98. export
  99. function l $ifceqs(s %s0, s %s1, l %v0, l %v1) {
  100. @start
  101. %c =w ceqs %s0, %s1
  102. jnz %c, @true, @false
  103. @true
  104. %v =l copy %v1
  105. jmp @end
  106. @false
  107. %v =l copy %v0
  108. jmp @end
  109. @end
  110. ret %v
  111. }
  112. export
  113. function l $ifcnes(s %s0, s %s1, l %v0, l %v1) {
  114. @start
  115. %c =w cnes %s0, %s1
  116. jnz %c, @true, @false
  117. @true
  118. %v =l copy %v1
  119. jmp @end
  120. @false
  121. %v =l copy %v0
  122. jmp @end
  123. @end
  124. ret %v
  125. }
  126. export
  127. function l $ifcos(s %s0, s %s1, l %v0, l %v1) {
  128. @start
  129. %c =w cos %s0, %s1
  130. jnz %c, @true, @false
  131. @true
  132. %v =l copy %v1
  133. jmp @end
  134. @false
  135. %v =l copy %v0
  136. jmp @end
  137. @end
  138. ret %v
  139. }
  140. export
  141. function l $ifcuos(s %s0, s %s1, l %v0, l %v1) {
  142. @start
  143. %c =w cuos %s0, %s1
  144. jnz %c, @true, @false
  145. @true
  146. %v =l copy %v1
  147. jmp @end
  148. @false
  149. %v =l copy %v0
  150. jmp @end
  151. @end
  152. ret %v
  153. }
  154. # >>> driver
  155. # extern long ifc1(long, long, int);
  156. # extern long ifc2(long, long, int);
  157. # extern long ifc3(long, long, int);
  158. # extern long ifclts(float, float, long, long);
  159. # extern long ifcles(float, float, long, long);
  160. # extern long ifcgts(float, float, long, long);
  161. # extern long ifcges(float, float, long, long);
  162. # extern long ifceqs(float, float, long, long);
  163. # extern long ifcnes(float, float, long, long);
  164. # extern long ifcos(float, float, long, long);
  165. # extern long ifcuos(float, float, long, long);
  166. # int main() {
  167. # return
  168. # ifc1(7, 5, 0) != 7
  169. # || ifc1(7, 5, 1) != 5
  170. # || ifc1(7, 5, 33) != 5
  171. # || ifc2(7, 5, 42) != 7
  172. # || ifc2(7, 5, 41) != 5
  173. # || ifc2(7, 5, 43) != 5
  174. # || ifc3(7, 5, 42) != 7
  175. # || ifc3(7, 5, 41) != 7
  176. # || ifc3(7, 5, 43) != 5
  177. # || ifclts(5.0f, 6.0f, 7, 5) != 5
  178. # || ifclts(5.0f, 5.0f, 7, 5) != 7
  179. # || ifclts(5.0f, 4.0f, 7, 5) != 7
  180. # || ifclts(5.0f, 0.0f/0.0f, 7, 5) != 7
  181. # || ifclts(0.0f/0.0f, 5.0f, 7, 5) != 7
  182. # || ifclts(0.0f/0.0f, 0.0f/0.0f, 7, 5) != 7
  183. # || ifcles(5.0f, 6.0f, 7, 5) != 5
  184. # || ifcles(5.0f, 5.0f, 7, 5) != 5
  185. # || ifcles(5.0f, 4.0f, 7, 5) != 7
  186. # || ifcles(5.0f, 0.0f/0.0f, 7, 5) != 7
  187. # || ifcles(0.0f/0.0f, 5.0f, 7, 5) != 7
  188. # || ifcles(0.0f/0.0f, 0.0f/0.0f, 7, 5) != 7
  189. # || ifcgts(5.0f, 6.0f, 7, 5) != 7
  190. # || ifcgts(5.0f, 5.0f, 7, 5) != 7
  191. # || ifcgts(5.0f, 4.0f, 7, 5) != 5
  192. # || ifcgts(5.0f, 0.0f/0.0f, 7, 5) != 7
  193. # || ifcgts(0.0f/0.0f, 5.0f, 7, 5) != 7
  194. # || ifcgts(0.0f/0.0f, 0.0f/0.0f, 7, 5) != 7
  195. # || ifcges(5.0f, 6.0f, 7, 5) != 7
  196. # || ifcges(5.0f, 5.0f, 7, 5) != 5
  197. # || ifcges(5.0f, 4.0f, 7, 5) != 5
  198. # || ifcges(5.0f, 0.0f/0.0f, 7, 5) != 7
  199. # || ifcges(0.0f/0.0f, 5.0f, 7, 5) != 7
  200. # || ifcges(0.0f/0.0f, 0.0f/0.0f, 7, 5) != 7
  201. # || ifceqs(5.0f, 6.0f, 7, 5) != 7
  202. # || ifceqs(5.0f, 5.0f, 7, 5) != 5
  203. # || ifceqs(5.0f, 4.0f, 7, 5) != 7
  204. # || ifceqs(5.0f, 0.0f/0.0f, 7, 5) != 7
  205. # || ifceqs(0.0f/0.0f, 5.0f, 7, 5) != 7
  206. # || ifceqs(0.0f/0.0f, 0.0f/0.0f, 7, 5) != 7
  207. # || ifcnes(5.0f, 6.0f, 7, 5) != 5
  208. # || ifcnes(5.0f, 5.0f, 7, 5) != 7
  209. # || ifcnes(5.0f, 4.0f, 7, 5) != 5
  210. # || ifcnes(5.0f, 0.0f/0.0f, 7, 5) != 5
  211. # || ifcnes(0.0f/0.0f, 5.0f, 7, 5) != 5
  212. # || ifcnes(0.0f/0.0f, 0.0f/0.0f, 7, 5) != 5
  213. # || ifcos(5.0f, 6.0f, 7, 5) != 5
  214. # || ifcos(5.0f, 5.0f, 7, 5) != 5
  215. # || ifcos(5.0f, 4.0f, 7, 5) != 5
  216. # || ifcos(5.0f, 0.0f/0.0f, 7, 5) != 7
  217. # || ifcos(0.0f/0.0f, 5.0f, 7, 5) != 7
  218. # || ifcos(0.0f/0.0f, 0.0f/0.0f, 7, 5) != 7
  219. # || ifcuos(5.0f, 6.0f, 7, 5) != 7
  220. # || ifcuos(5.0f, 5.0f, 7, 5) != 7
  221. # || ifcuos(5.0f, 4.0f, 7, 5) != 7
  222. # || ifcuos(5.0f, 0.0f/0.0f, 7, 5) != 5
  223. # || ifcuos(0.0f/0.0f, 5.0f, 7, 5) != 5
  224. # || ifcuos(0.0f/0.0f, 0.0f/0.0f, 7, 5) != 5
  225. # ;
  226. # }
  227. # <<<