smulicc.cgs 4.9 KB

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