smsss.cgs 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  1. # frv testcase for smsss $GRi,$GRj
  2. # mach: fr405 fr450
  3. .include "../testutils.inc"
  4. start
  5. .global smsss
  6. smsss1:
  7. ; Positive operands
  8. set_gr_immed 3,gr7 ; multiply small numbers
  9. set_gr_immed 2,gr8
  10. set_spr_immed 0,iacc0h
  11. set_spr_immed 7,iacc0l
  12. smsss gr7,gr8
  13. test_gr_immed 3,gr7
  14. test_gr_immed 2,gr8
  15. test_spr_immed 1,iacc0l ; result 7-3*2
  16. test_spr_immed 0,iacc0h
  17. smsss2:
  18. set_gr_immed 1,gr7 ; multiply by 1
  19. set_gr_immed 2,gr8
  20. set_spr_immed 0,iacc0h
  21. set_spr_immed 3,iacc0l
  22. smsss gr7,gr8
  23. test_gr_immed 1,gr7
  24. test_gr_immed 2,gr8
  25. test_spr_immed 1,iacc0l ; result 3-1*2
  26. test_spr_immed 0,iacc0h
  27. smsss3:
  28. set_gr_immed 2,gr7 ; multiply by 1
  29. set_gr_immed 1,gr8
  30. set_spr_immed 0,iacc0h
  31. set_spr_immed 3,iacc0l
  32. smsss gr7,gr8
  33. test_gr_immed 1,gr8
  34. test_gr_immed 2,gr7
  35. test_spr_immed 1,iacc0l ; result 3-2*1
  36. test_spr_immed 0,iacc0h
  37. smsss4:
  38. set_gr_immed 0,gr7 ; multiply by 0
  39. set_gr_immed 2,gr8
  40. set_spr_immed 0,iacc0h
  41. set_spr_immed 1,iacc0l
  42. smsss gr7,gr8
  43. test_gr_immed 2,gr8
  44. test_gr_immed 0,gr7
  45. test_spr_immed 1,iacc0l ; result 1-0*2
  46. test_spr_immed 0,iacc0h
  47. smsss5:
  48. set_gr_immed 2,gr7 ; multiply by 0
  49. set_gr_immed 0,gr8
  50. set_spr_immed 0,iacc0h
  51. set_spr_immed 1,iacc0l
  52. smsss gr7,gr8
  53. test_gr_immed 0,gr8
  54. test_gr_immed 2,gr7
  55. test_spr_immed 1,iacc0l ; result 1-2*0
  56. test_spr_immed 0,iacc0h
  57. smsss6:
  58. set_gr_limmed 0x3fff,0xffff,gr7 ; 31 bit result
  59. set_gr_immed 2,gr8
  60. set_spr_immed -1,iacc0h
  61. set_spr_immed -1,iacc0l
  62. smsss gr7,gr8
  63. test_gr_immed 2,gr8
  64. test_gr_limmed 0x3fff,0xffff,gr7
  65. test_spr_limmed 0x8000,0x0001,iacc0l ; -1-3fffffff*2
  66. test_spr_immed -1,iacc0h
  67. smsss7:
  68. set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result
  69. set_gr_immed 2,gr8
  70. set_spr_immed -1,iacc0h
  71. set_spr_limmed 0x8000,0x0001,iacc0l
  72. smsss gr7,gr8
  73. test_gr_immed 2,gr8
  74. test_gr_limmed 0x4000,0x0000,gr7
  75. test_spr_immed 1,iacc0l ; ffffffff80000001-40000000*2
  76. test_spr_immed -1,iacc0h
  77. smsss8:
  78. set_gr_limmed 0x4000,0x0000,gr7 ; 33 bit result
  79. set_gr_immed 4,gr8
  80. set_spr_immed -1,iacc0h
  81. set_spr_immed 1,iacc0l
  82. smsss gr7,gr8
  83. test_gr_immed 4,gr8
  84. test_gr_limmed 0x4000,0x0000,gr7
  85. test_spr_immed 1,iacc0l ; ffffffff00000001-40000000*4
  86. test_spr_immed -2,iacc0h
  87. smsss9:
  88. set_gr_limmed 0x7fff,0xffff,gr7 ; max positive result
  89. set_gr_limmed 0x7fff,0xffff,gr8
  90. set_spr_limmed 0x7fff,0xffff,iacc0h
  91. set_spr_immed -1,iacc0l
  92. smsss gr7,gr8
  93. test_gr_limmed 0x7fff,0xffff,gr8
  94. test_gr_limmed 0x7fff,0xffff,gr7
  95. test_spr_limmed 0xffff,0xfffe,iacc0l ; 7fffffffffffffff-7fffffff*7fffffff
  96. test_spr_limmed 0x4000,0x0000,iacc0h
  97. smsss10:
  98. ; Mixed operands
  99. set_gr_immed -3,gr7 ; multiply small numbers
  100. set_gr_immed 2,gr8
  101. set_spr_immed -1,iacc0h
  102. set_spr_immed -5,iacc0l
  103. smsss gr7,gr8
  104. test_gr_immed 2,gr8
  105. test_gr_immed -3,gr7
  106. test_spr_immed 1,iacc0l ; -5-(-3*2)
  107. test_spr_immed 0,iacc0h
  108. smsss11:
  109. set_gr_immed 3,gr7 ; multiply small numbers
  110. set_gr_immed -2,gr8
  111. set_spr_immed -1,iacc0h
  112. set_spr_immed -5,iacc0l
  113. smsss gr7,gr8
  114. test_gr_immed -2,gr8
  115. test_gr_immed 3,gr7
  116. test_spr_immed 1,iacc0l ; -5-(3*-2)
  117. test_spr_immed 0,iacc0h
  118. smsss12:
  119. set_gr_immed 1,gr7 ; multiply by 1
  120. set_gr_immed -2,gr8
  121. set_spr_immed -1,iacc0h
  122. set_spr_immed -1,iacc0l
  123. smsss gr7,gr8
  124. test_gr_immed -2,gr8
  125. test_gr_immed 1,gr7
  126. test_spr_immed 1,iacc0l ; -1-(1*-2)
  127. test_spr_immed 0,iacc0h
  128. smsss13:
  129. set_gr_immed -2,gr7 ; multiply by 1
  130. set_gr_immed 1,gr8
  131. set_spr_immed -1,iacc0h
  132. set_spr_immed -1,iacc0l
  133. smsss gr7,gr8
  134. test_gr_immed 1,gr8
  135. test_gr_immed -2,gr7
  136. test_spr_immed 1,iacc0l ; -1-(-2*1)
  137. test_spr_immed 0,iacc0h
  138. smsss14:
  139. set_gr_immed 0,gr7 ; multiply by 0
  140. set_gr_immed -2,gr8
  141. set_spr_immed 0,iacc0h
  142. set_spr_immed 1,iacc0l
  143. smsss gr7,gr8
  144. test_gr_immed -2,gr8
  145. test_gr_immed 0,gr7
  146. test_spr_immed 1,iacc0l ; 1-(0*-2)
  147. test_spr_immed 0,iacc0h
  148. smsss15:
  149. set_gr_immed -2,gr7 ; multiply by 0
  150. set_gr_immed 0,gr8
  151. set_spr_immed 0,iacc0h
  152. set_spr_immed 1,iacc0l
  153. smsss gr7,gr8
  154. test_gr_immed 0,gr8
  155. test_gr_immed -2,gr7
  156. test_spr_immed 1,iacc0l ; 1-(-2*0)
  157. test_spr_immed 0,iacc0h
  158. smsss16:
  159. set_gr_limmed 0x2000,0x0000,gr7 ; 31 bit result
  160. set_gr_immed -2,gr8
  161. set_spr_immed 0,iacc0h
  162. set_spr_limmed 0x3fff,0xffff,iacc0l
  163. smsss gr7,gr8
  164. test_gr_immed -2,gr8
  165. test_gr_limmed 0x2000,0x0000,gr7
  166. test_spr_limmed 0x7fff,0xffff,iacc0l
  167. test_spr_immed 0,iacc0h ; 3fffffff-20000001*-2
  168. smsss17:
  169. set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result
  170. set_gr_immed -2,gr8
  171. set_spr_immed 0,iacc0h
  172. set_spr_immed 1,iacc0l
  173. smsss gr7,gr8
  174. test_gr_immed -2,gr8
  175. test_gr_limmed 0x4000,0x0000,gr7
  176. test_spr_limmed 0x8000,0x0001,iacc0l ; 1-40000000*-2
  177. test_spr_immed 0,iacc0h
  178. smsss18:
  179. set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result
  180. set_gr_immed -2,gr8
  181. set_spr_immed -1,iacc0h
  182. set_spr_immed -1,iacc0l
  183. smsss gr7,gr8
  184. test_gr_immed -2,gr8
  185. test_gr_limmed 0x4000,0x0000,gr7
  186. test_spr_limmed 0x7fff,0xffff,iacc0l
  187. test_spr_immed 0,iacc0h ; -1-40000000*-2
  188. smsss19:
  189. set_gr_limmed 0x4000,0x0000,gr7 ; 33 bit result
  190. set_gr_immed -4,gr8
  191. set_spr_immed 0,iacc0h
  192. set_spr_immed 1,iacc0l
  193. smsss gr7,gr8
  194. test_gr_immed -4,gr8
  195. test_gr_limmed 0x4000,0x0000,gr7
  196. test_spr_immed 1,iacc0l ; 200000001-(40000000*-4)
  197. test_spr_immed 1,iacc0h
  198. smsss20:
  199. set_gr_limmed 0x7fff,0xffff,gr7 ; max negative result
  200. set_gr_limmed 0x7fff,0xffff,gr8
  201. set_spr_limmed 0xbfff,0xffff,iacc0h
  202. set_spr_limmed 0x0000,0x0001,iacc0l
  203. smsss gr7,gr8
  204. test_gr_limmed 0x7fff,0xffff,gr8
  205. test_gr_limmed 0x7fff,0xffff,gr7
  206. test_spr_immed 0,iacc0l ; bfffffff00000001-(7fffffff*7fffffff)
  207. test_spr_limmed 0x8000,0x0000,iacc0h
  208. smsss21:
  209. ; Negative operands
  210. set_gr_immed -3,gr7 ; multiply small numbers
  211. set_gr_immed -2,gr8
  212. set_spr_immed 0,iacc0h
  213. set_spr_immed 7,iacc0l
  214. smsss gr7,gr8
  215. test_gr_immed -2,gr8
  216. test_gr_immed -3,gr7
  217. test_spr_immed 1,iacc0l ; 7-(-3*-2)
  218. test_spr_immed 0,iacc0h
  219. smsss22:
  220. set_gr_immed -1,gr7 ; multiply by 1
  221. set_gr_immed -2,gr8
  222. set_spr_immed 0,iacc0h
  223. set_spr_immed 3,iacc0l
  224. smsss gr7,gr8
  225. test_gr_immed -2,gr8
  226. test_gr_immed -1,gr7
  227. test_spr_immed 1,iacc0l ; 3-(-1*-2)
  228. test_spr_immed 0,iacc0h
  229. smsss23:
  230. set_gr_immed -2,gr7 ; multiply by 1
  231. set_gr_immed -1,gr8
  232. set_spr_immed 0,iacc0h
  233. set_spr_immed 3,iacc0l
  234. smsss gr7,gr8
  235. test_gr_immed -1,gr8
  236. test_gr_immed -2,gr7
  237. test_spr_immed 1,iacc0l ; 3-(-2*-1)
  238. test_spr_immed 0,iacc0h
  239. smsss24:
  240. set_gr_immed -32768,gr7 ; 31 bit result
  241. set_gr_immed -32768,gr8
  242. set_spr_immed 0,iacc0h
  243. set_spr_limmed 0xbfff,0xffff,iacc0l
  244. smsss gr7,gr8
  245. test_gr_immed -32768,gr8
  246. test_gr_immed -32768,gr7
  247. test_spr_limmed 0x7fff,0xffff,iacc0l ; 7ffffffb-(-2*-2)
  248. test_spr_immed 0,iacc0h
  249. smsss25:
  250. set_gr_immed 0xffff,gr7 ; 32 bit result
  251. set_gr_immed 0xffff,gr8
  252. set_spr_immed 1,iacc0h
  253. set_spr_limmed 0xfffe,0x0000,iacc0l
  254. smsss gr7,gr8
  255. test_gr_immed 0xffff,gr8
  256. test_gr_immed 0xffff,gr7
  257. test_spr_limmed 0xffff,0xffff,iacc0l ; 1fffe0000-ffff*ffff
  258. test_spr_immed 0,iacc0h
  259. smsss26:
  260. set_gr_limmed 0x0001,0x0000,gr7 ; 33 bit result
  261. set_gr_limmed 0x0001,0x0000,gr8
  262. set_spr_immed 2,iacc0h
  263. set_spr_immed 1,iacc0l
  264. smsss gr7,gr8
  265. test_gr_limmed 0x0001,0x0000,gr8
  266. test_gr_limmed 0x0001,0x0000,gr7
  267. test_spr_immed 1,iacc0l ; 0x200000001-0x10000*0x10000
  268. test_spr_immed 1,iacc0h
  269. smsss27:
  270. set_gr_immed -2,gr7 ; almost max positive result
  271. set_gr_immed -2,gr8
  272. set_spr_limmed 0x7fff,0xffff,iacc0h
  273. set_spr_limmed 0xffff,0xffff,iacc0l
  274. smsss gr7,gr8
  275. test_gr_immed -2,gr8
  276. test_gr_immed -2,gr7
  277. test_spr_limmed 0xffff,0xfffb,iacc0l ; maxpos - (-2*-2)
  278. test_spr_limmed 0x7fff,0xffff,iacc0h
  279. smsss28:
  280. set_gr_immed 0,gr7 ; max positive result
  281. set_gr_immed 0,gr8
  282. set_spr_limmed 0x7fff,0xffff,iacc0h
  283. set_spr_limmed 0xffff,0xffff,iacc0l
  284. smsss gr7,gr8
  285. test_gr_immed 0,gr8
  286. test_gr_immed 0,gr7
  287. test_spr_limmed 0xffff,0xffff,iacc0l ; maxpos-(0*0)
  288. test_spr_limmed 0x7fff,0xffff,iacc0h
  289. smsss29:
  290. set_gr_limmed 0x7fff,0xffff,gr7 ; not quite overflow (pos)
  291. set_gr_limmed 0x8000,0x0000,gr8
  292. set_spr_limmed 0x4000,0x0000,iacc0h
  293. set_spr_limmed 0x7fff,0xffff,iacc0l
  294. smsss gr7,gr8
  295. test_gr_limmed 0x8000,0x0000,gr8
  296. test_gr_limmed 0x7fff,0xffff,gr7
  297. test_spr_limmed 0xffff,0xffff,iacc0l ; 400000007fffffff -
  298. test_spr_limmed 0x7fff,0xffff,iacc0h ; 0x80000000*0x7fffffff
  299. smsss30:
  300. set_gr_limmed 0x7fff,0xffff,gr7 ; just barely overflow (pos)
  301. set_gr_limmed 0x8000,0x0000,gr8
  302. set_spr_limmed 0x4000,0x0000,iacc0h
  303. set_spr_limmed 0x8000,0x0000,iacc0l
  304. smsss gr7,gr8
  305. test_gr_limmed 0x8000,0x0000,gr8
  306. test_gr_limmed 0x7fff,0xffff,gr7
  307. test_spr_limmed 0xffff,0xffff,iacc0l ; 4000000080000000 -
  308. test_spr_limmed 0x7fff,0xffff,iacc0h ; 0x80000000*0x7fffffff
  309. smsss31:
  310. set_gr_limmed 0x7fff,0xffff,gr7 ; maximum overflow (pos)
  311. set_gr_limmed 0x8000,0x0000,gr8
  312. set_spr_limmed 0xffff,0xffff,iacc0l
  313. set_spr_limmed 0x7fff,0xffff,iacc0h
  314. smsss gr7,gr8
  315. test_gr_limmed 0x8000,0x0000,gr8
  316. test_gr_limmed 0x7fff,0xffff,gr7
  317. test_spr_limmed 0xffff,0xffff,iacc0l ; 7fffffffffffffff -
  318. test_spr_limmed 0x7fff,0xffff,iacc0h ; 80000000*80000000
  319. smsss32:
  320. set_gr_limmed 0x7fff,0xffff,gr7 ; not quite overflow (neg)
  321. set_gr_limmed 0x7fff,0xffff,gr8
  322. set_spr_immed 1,iacc0l
  323. set_spr_limmed 0xbfff,0xffff,iacc0h
  324. smsss gr7,gr8
  325. test_gr_limmed 0x7fff,0xffff,gr8
  326. test_gr_limmed 0x7fff,0xffff,gr7
  327. test_spr_limmed 0x0000,0x0000,iacc0l ; bfffffff00000001 -
  328. test_spr_limmed 0x8000,0x0000,iacc0h ; 0x7fffffff*0x7fffffff
  329. smsss33:
  330. set_gr_limmed 0x7fff,0xffff,gr7 ; just barely overflow (neg)
  331. set_gr_limmed 0x7fff,0xffff,gr8
  332. set_spr_immed 0,iacc0l
  333. set_spr_limmed 0xbfff,0xffff,iacc0h
  334. smsss gr7,gr8
  335. test_gr_limmed 0x7fff,0xffff,gr8
  336. test_gr_limmed 0x7fff,0xffff,gr7
  337. test_spr_limmed 0x0000,0x0000,iacc0l ; 7fffffff*7fffffff+
  338. test_spr_limmed 0x8000,0x0000,iacc0h ; bfffffff7fffffff
  339. smsss34:
  340. set_gr_limmed 0x7fff,0xffff,gr7 ; maximum overflow (neg)
  341. set_gr_limmed 0x7fff,0xffff,gr8
  342. set_spr_limmed 0x0000,0x0000,iacc0l
  343. set_spr_limmed 0x8000,0x0000,iacc0h
  344. smsss gr7,gr8
  345. test_gr_limmed 0x7fff,0xffff,gr8
  346. test_gr_limmed 0x7fff,0xffff,gr7
  347. test_spr_limmed 0x0000,0x0000,iacc0l ; 8000000000000000-
  348. test_spr_limmed 0x8000,0x0000,iacc0h ; 7fffffff*7fffffff+
  349. pass