smuli.cgs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. # frv testcase for smuli $GRi,$GRj,$GRk
  2. # mach: all
  3. .include "testutils.inc"
  4. start
  5. .global smuli
  6. smuli:
  7. ; Positive operands
  8. set_gr_immed 3,gr7 ; multiply small numbers
  9. set_icc 0x0,0
  10. smuli gr7,2,gr8
  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. smuli gr7,2,gr8
  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. smuli gr7,1,gr8
  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. smuli gr7,2,gr8
  29. test_icc 0 0 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. smuli gr7,0,gr8
  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. smuli gr7,2,gr8
  41. test_icc 0 1 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. smuli gr7,2,gr8
  47. test_icc 0 1 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. smuli gr7,4,gr8
  53. test_icc 0 1 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. smuli gr7,0x7ff,gr8
  59. test_icc 1 0 0 0 icc0
  60. test_gr_immed 0x3ff,gr8
  61. test_gr_limmed 0x7fff,0xf801,gr9
  62. ; Mixed operands
  63. set_gr_immed -3,gr7 ; multiply small numbers
  64. set_icc 0x9,0
  65. smuli gr7,2,gr8
  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. smuli gr7,-2,gr8
  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. smuli gr7,-2,gr8
  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. smuli gr7,1,gr8
  84. test_icc 1 1 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. smuli gr7,-2,gr8
  90. test_icc 1 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. smuli gr7,0,gr8
  96. test_icc 1 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. smuli gr7,-2,gr8
  102. test_icc 1 1 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. smuli gr7,-2,gr8
  108. test_icc 0 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. smuli gr7,-2,gr8
  114. test_icc 0 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. smuli gr7,-4,gr8
  120. test_icc 0 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. smuli gr7,-2048,gr8
  126. test_icc 0 0 1 1 icc0
  127. test_gr_limmed 0xffff,0xfc00,gr8
  128. test_gr_limmed 0x0000,0x0800,gr9
  129. ; Negative operands
  130. set_gr_immed -3,gr7 ; multiply small numbers
  131. set_icc 0x4,0
  132. smuli gr7,-2,gr8
  133. test_icc 0 1 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. smuli gr7,-2,gr8
  139. test_icc 0 1 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. smuli gr7,-1,gr8
  145. test_icc 0 1 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. smuli gr7,-2,gr8
  151. test_icc 0 1 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. smuli gr7,-2,gr8
  157. test_icc 1 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. smuli gr7,-4,gr8
  163. test_icc 1 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. smuli gr7,-2048,gr8
  169. test_icc 1 0 1 0 icc0
  170. test_gr_limmed 0x0000,0x03ff,gr8
  171. test_gr_limmed 0xffff,0xf800,gr9
  172. set_gr_limmed 0x8000,0x0000,gr7 ; max positive result
  173. set_icc 0xb,0
  174. smuli gr7,-2048,gr8
  175. test_icc 1 0 1 1 icc0
  176. test_gr_limmed 0x0000,0x0400,gr8
  177. test_gr_limmed 0x0000,0x0000,gr9
  178. pass