smulcc.cgs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. # frv testcase for smulcc $GRi,$GRj,$GRk
  2. # mach: all
  3. .include "testutils.inc"
  4. start
  5. .global smulcc
  6. smulcc:
  7. ; Positive operands
  8. set_gr_immed 3,gr7 ; multiply small numbers
  9. set_gr_immed 2,gr8
  10. set_icc 0x0,0
  11. smulcc gr7,gr8,gr8,icc0
  12. test_icc 0 0 0 0 icc0
  13. test_gr_immed 0,gr8
  14. test_gr_immed 6,gr9
  15. set_gr_immed 1,gr7 ; multiply by 1
  16. set_gr_immed 2,gr8
  17. set_icc 0x1,0
  18. smulcc gr7,gr8,gr8,icc0
  19. test_icc 0 0 0 1 icc0
  20. test_gr_immed 0,gr8
  21. test_gr_immed 2,gr9
  22. set_gr_immed 2,gr7 ; multiply by 1
  23. set_gr_immed 1,gr8
  24. set_icc 0x2,0
  25. smulcc gr7,gr8,gr8,icc0
  26. test_icc 0 0 1 0 icc0
  27. test_gr_immed 0,gr8
  28. test_gr_immed 2,gr9
  29. set_gr_immed 0,gr7 ; multiply by 0
  30. set_gr_immed 2,gr8
  31. set_icc 0xb,0
  32. smulcc gr7,gr8,gr8,icc0
  33. test_icc 0 1 1 1 icc0
  34. test_gr_immed 0,gr8
  35. test_gr_immed 0,gr9
  36. set_gr_immed 2,gr7 ; multiply by 0
  37. set_gr_immed 0,gr8
  38. set_icc 0x8,0
  39. smulcc gr7,gr8,gr8,icc0
  40. test_icc 0 1 0 0 icc0
  41. test_gr_immed 0,gr8
  42. test_gr_immed 0,gr9
  43. set_gr_limmed 0x3fff,0xffff,gr7 ; 31 bit result
  44. set_gr_immed 2,gr8
  45. set_icc 0xd,0
  46. smulcc gr7,gr8,gr8,icc0
  47. test_icc 0 0 0 1 icc0
  48. test_gr_immed 0,gr8
  49. test_gr_limmed 0x7fff,0xfffe,gr9
  50. set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result
  51. set_gr_immed 2,gr8
  52. set_icc 0xe,0
  53. smulcc gr7,gr8,gr8,icc0
  54. test_icc 0 0 1 0 icc0
  55. test_gr_immed 0,gr8
  56. test_gr_limmed 0x8000,0x0000,gr9
  57. set_gr_limmed 0x4000,0x0000,gr7 ; 33 bit result
  58. set_gr_immed 4,gr8
  59. set_icc 0xf,0
  60. smulcc gr7,gr8,gr8,icc0
  61. test_icc 0 0 1 1 icc0
  62. test_gr_immed 1,gr8
  63. test_gr_limmed 0x0000,0x0000,gr9
  64. set_gr_limmed 0x7fff,0xffff,gr7 ; max positive result
  65. set_gr_limmed 0x7fff,0xffff,gr8
  66. set_icc 0xc,0
  67. smulcc gr7,gr8,gr8,icc0
  68. test_icc 0 0 0 0 icc0
  69. test_gr_limmed 0x3fff,0xffff,gr8
  70. test_gr_immed 0x00000001,gr9
  71. ; Mixed operands
  72. set_gr_immed -3,gr7 ; multiply small numbers
  73. set_gr_immed 2,gr8
  74. set_icc 0x5,0
  75. smulcc gr7,gr8,gr8,icc0
  76. test_icc 1 0 0 1 icc0
  77. test_gr_immed -1,gr8
  78. test_gr_immed -6,gr9
  79. set_gr_immed 3,gr7 ; multiply small numbers
  80. set_gr_immed -2,gr8
  81. set_icc 0x6,0
  82. smulcc gr7,gr8,gr8,icc0
  83. test_icc 1 0 1 0 icc0
  84. test_gr_immed -1,gr8
  85. test_gr_immed -6,gr9
  86. set_gr_immed 1,gr7 ; multiply by 1
  87. set_gr_immed -2,gr8
  88. set_icc 0x7,0
  89. smulcc gr7,gr8,gr8,icc0
  90. test_icc 1 0 1 1 icc0
  91. test_gr_immed -1,gr8
  92. test_gr_immed -2,gr9
  93. set_gr_immed -2,gr7 ; multiply by 1
  94. set_gr_immed 1,gr8
  95. set_icc 0x4,0
  96. smulcc gr7,gr8,gr8,icc0
  97. test_icc 1 0 0 0 icc0
  98. test_gr_immed -1,gr8
  99. test_gr_immed -2,gr9
  100. set_gr_immed 0,gr7 ; multiply by 0
  101. set_gr_immed -2,gr8
  102. set_icc 0x9,0
  103. smulcc gr7,gr8,gr8,icc0
  104. test_icc 0 1 0 1 icc0
  105. test_gr_immed 0,gr8
  106. test_gr_immed 0,gr9
  107. set_gr_immed -2,gr7 ; multiply by 0
  108. set_gr_immed 0,gr8
  109. set_icc 0xa,0
  110. smulcc gr7,gr8,gr8,icc0
  111. test_icc 0 1 1 0 icc0
  112. test_gr_immed 0,gr8
  113. test_gr_immed 0,gr9
  114. set_gr_limmed 0x2000,0x0001,gr7 ; 31 bit result
  115. set_gr_immed -2,gr8
  116. set_icc 0x7,0
  117. smulcc gr7,gr8,gr8,icc0
  118. test_icc 1 0 1 1 icc0
  119. test_gr_limmed 0xffff,0xffff,gr8
  120. test_gr_limmed 0xbfff,0xfffe,gr9
  121. set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result
  122. set_gr_immed -2,gr8
  123. set_icc 0x4,0
  124. smulcc gr7,gr8,gr8,icc0
  125. test_icc 1 0 0 0 icc0
  126. test_gr_limmed 0xffff,0xffff,gr8
  127. test_gr_limmed 0x8000,0x0000,gr9
  128. set_gr_limmed 0x4000,0x0001,gr7 ; 32 bit result
  129. set_gr_immed -2,gr8
  130. set_icc 0x5,0
  131. smulcc gr7,gr8,gr8,icc0
  132. test_icc 1 0 0 1 icc0
  133. test_gr_limmed 0xffff,0xffff,gr8
  134. test_gr_limmed 0x7fff,0xfffe,gr9
  135. set_gr_limmed 0x4000,0x0000,gr7 ; 33 bit result
  136. set_gr_immed -4,gr8
  137. set_icc 0x6,0
  138. smulcc gr7,gr8,gr8,icc0
  139. test_icc 1 0 1 0 icc0
  140. test_gr_limmed 0xffff,0xffff,gr8
  141. test_gr_limmed 0x0000,0x0000,gr9
  142. set_gr_limmed 0x7fff,0xffff,gr7 ; max negative result
  143. set_gr_limmed 0x8000,0x0000,gr8
  144. set_icc 0x7,0
  145. smulcc gr7,gr8,gr8,icc0
  146. test_icc 1 0 1 1 icc0
  147. test_gr_limmed 0xc000,0x0000,gr8
  148. test_gr_limmed 0x8000,0x0000,gr9
  149. ; Negative operands
  150. set_gr_immed -3,gr7 ; multiply small numbers
  151. set_gr_immed -2,gr8
  152. set_icc 0xc,0
  153. smulcc gr7,gr8,gr8,icc0
  154. test_icc 0 0 0 0 icc0
  155. test_gr_immed 0,gr8
  156. test_gr_immed 6,gr9
  157. set_gr_immed -1,gr7 ; multiply by 1
  158. set_gr_immed -2,gr8
  159. set_icc 0xd,0
  160. smulcc gr7,gr8,gr8,icc0
  161. test_icc 0 0 0 1 icc0
  162. test_gr_immed 0,gr8
  163. test_gr_immed 2,gr9
  164. set_gr_immed -2,gr7 ; multiply by 1
  165. set_gr_immed -1,gr8
  166. set_icc 0xe,0
  167. smulcc gr7,gr8,gr8,icc0
  168. test_icc 0 0 1 0 icc0
  169. test_gr_immed 0,gr8
  170. test_gr_immed 2,gr9
  171. set_gr_limmed 0xc000,0x0001,gr7 ; 31 bit result
  172. set_gr_immed -2,gr8
  173. set_icc 0xf,0
  174. smulcc gr7,gr8,gr8,icc0
  175. test_icc 0 0 1 1 icc0
  176. test_gr_immed 0,gr8
  177. test_gr_limmed 0x7fff,0xfffe,gr9
  178. set_gr_limmed 0xc000,0x0000,gr7 ; 32 bit result
  179. set_gr_immed -2,gr8
  180. set_icc 0xc,0
  181. smulcc gr7,gr8,gr8,icc0
  182. test_icc 0 0 0 0 icc0
  183. test_gr_immed 0,gr8
  184. test_gr_limmed 0x8000,0x0000,gr9
  185. set_gr_limmed 0xc000,0x0000,gr7 ; 33 bit result
  186. set_gr_immed -4,gr8
  187. set_icc 0xd,0
  188. smulcc gr7,gr8,gr8,icc0
  189. test_icc 0 0 0 1 icc0
  190. test_gr_immed 1,gr8
  191. test_gr_immed 0x00000000,gr9
  192. set_gr_limmed 0x8000,0x0001,gr7 ; almost max positive result
  193. set_gr_limmed 0x8000,0x0001,gr8
  194. set_icc 0xe,0
  195. smulcc gr7,gr8,gr8,icc0
  196. test_icc 0 0 1 0 icc0
  197. test_gr_limmed 0x3fff,0xffff,gr8
  198. test_gr_immed 0x00000001,gr9
  199. set_gr_limmed 0x8000,0x0000,gr7 ; max positive result
  200. set_gr_limmed 0x8000,0x0000,gr8
  201. set_icc 0xf,0
  202. smulcc gr7,gr8,gr8,icc0
  203. test_icc 0 0 1 1 icc0
  204. test_gr_limmed 0x4000,0x0000,gr8
  205. test_gr_immed 0x00000000,gr9
  206. pass