cmmulhs.cgs 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814
  1. # frv testcase for cmmulhs $GRi,$GRj,$ACCk,$CCi,$cond
  2. # mach: all
  3. .include "testutils.inc"
  4. start
  5. .global cmmulhs
  6. cmmulhs:
  7. set_spr_immed 0x1b1b,cccr
  8. ; Positive operands
  9. set_fr_iimmed 2,3,fr7 ; multiply small numbers
  10. set_fr_iimmed 3,2,fr8
  11. cmmulhs fr7,fr8,acc0,cc0,1
  12. test_accg_immed 0,accg0
  13. test_acc_immed 6,acc0
  14. test_accg_immed 0,accg1
  15. test_acc_immed 6,acc1
  16. set_fr_iimmed 0,1,fr7 ; multiply by 0
  17. set_fr_iimmed 2,0,fr8
  18. cmmulhs fr7,fr8,acc0,cc0,1
  19. test_accg_immed 0,accg0
  20. test_acc_immed 0,acc0
  21. test_accg_immed 0,accg1
  22. test_acc_immed 0,acc1
  23. set_fr_iimmed 2,1,fr7 ; multiply by 1
  24. set_fr_iimmed 1,2,fr8
  25. cmmulhs fr7,fr8,acc0,cc0,1
  26. test_accg_immed 0,accg0
  27. test_acc_immed 2,acc0
  28. test_accg_immed 0,accg1
  29. test_acc_immed 2,acc1
  30. set_fr_iimmed 0x3fff,2,fr7 ; 15 bit result
  31. set_fr_iimmed 2,0x3fff,fr8
  32. cmmulhs fr7,fr8,acc0,cc0,1
  33. test_accg_immed 0,accg0
  34. test_acc_limmed 0,0x7ffe,acc0
  35. test_accg_immed 0,accg1
  36. test_acc_limmed 0,0x7ffe,acc1
  37. set_fr_iimmed 0x4000,2,fr7 ; 16 bit result
  38. set_fr_iimmed 2,0x4000,fr8
  39. cmmulhs fr7,fr8,acc0,cc0,1
  40. test_accg_immed 0,accg0
  41. test_acc_limmed 0x0000,0x8000,acc0
  42. test_accg_immed 0,accg1
  43. test_acc_limmed 0x0000,0x8000,acc1
  44. set_fr_iimmed 0x7fff,0x7fff,fr7 ; max positive result
  45. set_fr_iimmed 0x7fff,0x7fff,fr8
  46. cmmulhs fr7,fr8,acc0,cc0,1
  47. test_accg_immed 0,accg0
  48. test_acc_limmed 0x3fff,0x0001,acc0
  49. test_accg_immed 0,accg1
  50. test_acc_limmed 0x3fff,0x0001,acc1
  51. ; Mixed operands
  52. set_fr_iimmed 2,0xfffd,fr7 ; multiply small numbers
  53. set_fr_iimmed 0xfffd,2,fr8
  54. cmmulhs fr7,fr8,acc0,cc0,1
  55. test_accg_immed 0xff,accg0
  56. test_acc_immed -6,acc0
  57. test_accg_immed 0xff,accg1
  58. test_acc_immed -6,acc1
  59. set_fr_iimmed 0xfffe,1,fr7 ; multiply by 1
  60. set_fr_iimmed 1,0xfffe,fr8
  61. cmmulhs fr7,fr8,acc0,cc0,1
  62. test_accg_immed 0xff,accg0
  63. test_acc_immed -2,acc0
  64. test_accg_immed 0xff,accg1
  65. test_acc_immed -2,acc1
  66. set_fr_iimmed 0xfffe,0,fr7 ; multiply by 0
  67. set_fr_iimmed 0,0xfffe,fr8
  68. cmmulhs fr7,fr8,acc0,cc4,1
  69. test_accg_immed 0,accg0
  70. test_acc_immed 0,acc0
  71. test_accg_immed 0,accg1
  72. test_acc_immed 0,acc1
  73. set_fr_iimmed 0x2001,0xfffe,fr7 ; 15 bit result
  74. set_fr_iimmed 0xfffe,0x2001,fr8
  75. cmmulhs fr7,fr8,acc0,cc4,1
  76. test_accg_immed 0xff,accg0
  77. test_acc_limmed 0xffff,0xbffe,acc0
  78. test_accg_immed 0xff,accg1
  79. test_acc_limmed 0xffff,0xbffe,acc1
  80. set_fr_iimmed 0x4000,0xfffe,fr7 ; 16 bit result
  81. set_fr_iimmed 0xfffe,0x4000,fr8
  82. cmmulhs fr7,fr8,acc0,cc4,1
  83. test_accg_immed 0xff,accg0
  84. test_acc_limmed 0xffff,0x8000,acc0
  85. test_accg_immed 0xff,accg1
  86. test_acc_limmed 0xffff,0x8000,acc1
  87. set_fr_iimmed 0x7fff,0x8000,fr7 ; max negative result
  88. set_fr_iimmed 0x8000,0x7fff,fr8
  89. cmmulhs fr7,fr8,acc0,cc4,1
  90. test_accg_immed 0xff,accg0
  91. test_acc_limmed 0xc000,0x8000,acc0
  92. test_accg_immed 0xff,accg1
  93. test_acc_limmed 0xc000,0x8000,acc1
  94. ; Negative operands
  95. set_fr_iimmed 0xfffe,0xfffd,fr7 ; multiply small numbers
  96. set_fr_iimmed 0xfffd,0xfffe,fr8
  97. cmmulhs fr7,fr8,acc0,cc4,1
  98. test_accg_immed 0,accg0
  99. test_acc_immed 6,acc0
  100. test_accg_immed 0,accg1
  101. test_acc_immed 6,acc1
  102. set_fr_iimmed 0xffff,0xfffe,fr7 ; multiply by -1
  103. set_fr_iimmed 0xfffe,0xffff,fr8
  104. cmmulhs fr7,fr8,acc0,cc4,1
  105. test_accg_immed 0,accg0
  106. test_acc_immed 2,acc0
  107. test_accg_immed 0,accg1
  108. test_acc_immed 2,acc1
  109. set_fr_iimmed 0x8001,0x8001,fr7 ; almost max positive result
  110. set_fr_iimmed 0x8001,0x8001,fr8
  111. cmmulhs fr7,fr8,acc0,cc4,1
  112. test_accg_immed 0,accg0
  113. test_acc_immed 0x3fff0001,acc0
  114. test_accg_immed 0,accg1
  115. test_acc_immed 0x3fff0001,acc1
  116. set_fr_iimmed 0x8000,0x8000,fr7 ; max positive result
  117. set_fr_iimmed 0x8000,0x8000,fr8
  118. cmmulhs fr7,fr8,acc0,cc4,1
  119. test_accg_immed 0,accg0
  120. test_acc_immed 0x40000000,acc0
  121. test_accg_immed 0,accg1
  122. test_acc_immed 0x40000000,acc1
  123. ; Positive operands
  124. set_fr_iimmed 2,3,fr7 ; multiply small numbers
  125. set_fr_iimmed 3,2,fr8
  126. cmmulhs fr7,fr8,acc0,cc1,0
  127. test_accg_immed 0,accg0
  128. test_acc_immed 6,acc0
  129. test_accg_immed 0,accg1
  130. test_acc_immed 6,acc1
  131. set_fr_iimmed 0,1,fr7 ; multiply by 0
  132. set_fr_iimmed 2,0,fr8
  133. cmmulhs fr7,fr8,acc0,cc1,0
  134. test_accg_immed 0,accg0
  135. test_acc_immed 0,acc0
  136. test_accg_immed 0,accg1
  137. test_acc_immed 0,acc1
  138. set_fr_iimmed 2,1,fr7 ; multiply by 1
  139. set_fr_iimmed 1,2,fr8
  140. cmmulhs fr7,fr8,acc0,cc1,0
  141. test_accg_immed 0,accg0
  142. test_acc_immed 2,acc0
  143. test_accg_immed 0,accg1
  144. test_acc_immed 2,acc1
  145. set_fr_iimmed 0x3fff,2,fr7 ; 15 bit result
  146. set_fr_iimmed 2,0x3fff,fr8
  147. cmmulhs fr7,fr8,acc0,cc1,0
  148. test_accg_immed 0,accg0
  149. test_acc_limmed 0,0x7ffe,acc0
  150. test_accg_immed 0,accg1
  151. test_acc_limmed 0,0x7ffe,acc1
  152. set_fr_iimmed 0x4000,2,fr7 ; 16 bit result
  153. set_fr_iimmed 2,0x4000,fr8
  154. cmmulhs fr7,fr8,acc0,cc1,0
  155. test_accg_immed 0,accg0
  156. test_acc_limmed 0x0000,0x8000,acc0
  157. test_accg_immed 0,accg1
  158. test_acc_limmed 0x0000,0x8000,acc1
  159. set_fr_iimmed 0x7fff,0x7fff,fr7 ; max positive result
  160. set_fr_iimmed 0x7fff,0x7fff,fr8
  161. cmmulhs fr7,fr8,acc0,cc1,0
  162. test_accg_immed 0,accg0
  163. test_acc_limmed 0x3fff,0x0001,acc0
  164. test_accg_immed 0,accg1
  165. test_acc_limmed 0x3fff,0x0001,acc1
  166. ; Mixed operands
  167. set_fr_iimmed 2,0xfffd,fr7 ; multiply small numbers
  168. set_fr_iimmed 0xfffd,2,fr8
  169. cmmulhs fr7,fr8,acc0,cc1,0
  170. test_accg_immed 0xff,accg0
  171. test_acc_immed -6,acc0
  172. test_accg_immed 0xff,accg1
  173. test_acc_immed -6,acc1
  174. set_fr_iimmed 0xfffe,1,fr7 ; multiply by 1
  175. set_fr_iimmed 1,0xfffe,fr8
  176. cmmulhs fr7,fr8,acc0,cc1,0
  177. test_accg_immed 0xff,accg0
  178. test_acc_immed -2,acc0
  179. test_accg_immed 0xff,accg1
  180. test_acc_immed -2,acc1
  181. set_fr_iimmed 0xfffe,0,fr7 ; multiply by 0
  182. set_fr_iimmed 0,0xfffe,fr8
  183. cmmulhs fr7,fr8,acc0,cc5,0
  184. test_accg_immed 0,accg0
  185. test_acc_immed 0,acc0
  186. test_accg_immed 0,accg1
  187. test_acc_immed 0,acc1
  188. set_fr_iimmed 0x2001,0xfffe,fr7 ; 15 bit result
  189. set_fr_iimmed 0xfffe,0x2001,fr8
  190. cmmulhs fr7,fr8,acc0,cc5,0
  191. test_accg_immed 0xff,accg0
  192. test_acc_limmed 0xffff,0xbffe,acc0
  193. test_accg_immed 0xff,accg1
  194. test_acc_limmed 0xffff,0xbffe,acc1
  195. set_fr_iimmed 0x4000,0xfffe,fr7 ; 16 bit result
  196. set_fr_iimmed 0xfffe,0x4000,fr8
  197. cmmulhs fr7,fr8,acc0,cc5,0
  198. test_accg_immed 0xff,accg0
  199. test_acc_limmed 0xffff,0x8000,acc0
  200. test_accg_immed 0xff,accg1
  201. test_acc_limmed 0xffff,0x8000,acc1
  202. set_fr_iimmed 0x7fff,0x8000,fr7 ; max negative result
  203. set_fr_iimmed 0x8000,0x7fff,fr8
  204. cmmulhs fr7,fr8,acc0,cc5,0
  205. test_accg_immed 0xff,accg0
  206. test_acc_limmed 0xc000,0x8000,acc0
  207. test_accg_immed 0xff,accg1
  208. test_acc_limmed 0xc000,0x8000,acc1
  209. ; Negative operands
  210. set_fr_iimmed 0xfffe,0xfffd,fr7 ; multiply small numbers
  211. set_fr_iimmed 0xfffd,0xfffe,fr8
  212. cmmulhs fr7,fr8,acc0,cc5,0
  213. test_accg_immed 0,accg0
  214. test_acc_immed 6,acc0
  215. test_accg_immed 0,accg1
  216. test_acc_immed 6,acc1
  217. set_fr_iimmed 0xffff,0xfffe,fr7 ; multiply by -1
  218. set_fr_iimmed 0xfffe,0xffff,fr8
  219. cmmulhs fr7,fr8,acc0,cc5,0
  220. test_accg_immed 0,accg0
  221. test_acc_immed 2,acc0
  222. test_accg_immed 0,accg1
  223. test_acc_immed 2,acc1
  224. set_fr_iimmed 0x8001,0x8001,fr7 ; almost max positive result
  225. set_fr_iimmed 0x8001,0x8001,fr8
  226. cmmulhs fr7,fr8,acc0,cc5,0
  227. test_accg_immed 0,accg0
  228. test_acc_immed 0x3fff0001,acc0
  229. test_accg_immed 0,accg1
  230. test_acc_immed 0x3fff0001,acc1
  231. set_fr_iimmed 0x8000,0x8000,fr7 ; max positive result
  232. set_fr_iimmed 0x8000,0x8000,fr8
  233. cmmulhs fr7,fr8,acc0,cc5,0
  234. test_accg_immed 0,accg0
  235. test_acc_immed 0x40000000,acc0
  236. test_accg_immed 0,accg1
  237. test_acc_immed 0x40000000,acc1
  238. ; Positive operands
  239. set_accg_immed 0x00000011,accg0
  240. set_acc_immed 0x11111111,acc0
  241. set_accg_immed 0x00000022,accg1
  242. set_acc_immed 0x22222222,acc1
  243. set_fr_iimmed 2,3,fr7 ; multiply small numbers
  244. set_fr_iimmed 3,2,fr8
  245. cmmulhs fr7,fr8,acc0,cc0,0
  246. test_accg_immed 0x00000011,accg0
  247. test_acc_immed 0x11111111,acc0
  248. test_accg_immed 0x00000022,accg1
  249. test_acc_immed 0x22222222,acc1
  250. set_fr_iimmed 0,1,fr7 ; multiply by 0
  251. set_fr_iimmed 2,0,fr8
  252. cmmulhs fr7,fr8,acc0,cc0,0
  253. test_accg_immed 0x00000011,accg0
  254. test_acc_immed 0x11111111,acc0
  255. test_accg_immed 0x00000022,accg1
  256. test_acc_immed 0x22222222,acc1
  257. set_fr_iimmed 2,1,fr7 ; multiply by 1
  258. set_fr_iimmed 1,2,fr8
  259. cmmulhs fr7,fr8,acc0,cc0,0
  260. test_accg_immed 0x00000011,accg0
  261. test_acc_immed 0x11111111,acc0
  262. test_accg_immed 0x00000022,accg1
  263. test_acc_immed 0x22222222,acc1
  264. set_fr_iimmed 0x3fff,2,fr7 ; 15 bit result
  265. set_fr_iimmed 2,0x3fff,fr8
  266. cmmulhs fr7,fr8,acc0,cc0,0
  267. test_accg_immed 0x00000011,accg0
  268. test_acc_immed 0x11111111,acc0
  269. test_accg_immed 0x00000022,accg1
  270. test_acc_immed 0x22222222,acc1
  271. set_fr_iimmed 0x4000,2,fr7 ; 16 bit result
  272. set_fr_iimmed 2,0x4000,fr8
  273. cmmulhs fr7,fr8,acc0,cc0,0
  274. test_accg_immed 0x00000011,accg0
  275. test_acc_immed 0x11111111,acc0
  276. test_accg_immed 0x00000022,accg1
  277. test_acc_immed 0x22222222,acc1
  278. set_fr_iimmed 0x7fff,0x7fff,fr7 ; max positive result
  279. set_fr_iimmed 0x7fff,0x7fff,fr8
  280. cmmulhs fr7,fr8,acc0,cc0,0
  281. test_accg_immed 0x00000011,accg0
  282. test_acc_immed 0x11111111,acc0
  283. test_accg_immed 0x00000022,accg1
  284. test_acc_immed 0x22222222,acc1
  285. ; Mixed operands
  286. set_fr_iimmed 2,0xfffd,fr7 ; multiply small numbers
  287. set_fr_iimmed 0xfffd,2,fr8
  288. cmmulhs fr7,fr8,acc0,cc0,0
  289. test_accg_immed 0x00000011,accg0
  290. test_acc_immed 0x11111111,acc0
  291. test_accg_immed 0x00000022,accg1
  292. test_acc_immed 0x22222222,acc1
  293. set_fr_iimmed 0xfffe,1,fr7 ; multiply by 1
  294. set_fr_iimmed 1,0xfffe,fr8
  295. cmmulhs fr7,fr8,acc0,cc0,0
  296. test_accg_immed 0x00000011,accg0
  297. test_acc_immed 0x11111111,acc0
  298. test_accg_immed 0x00000022,accg1
  299. test_acc_immed 0x22222222,acc1
  300. set_fr_iimmed 0xfffe,0,fr7 ; multiply by 0
  301. set_fr_iimmed 0,0xfffe,fr8
  302. cmmulhs fr7,fr8,acc0,cc4,0
  303. test_accg_immed 0x00000011,accg0
  304. test_acc_immed 0x11111111,acc0
  305. test_accg_immed 0x00000022,accg1
  306. test_acc_immed 0x22222222,acc1
  307. set_fr_iimmed 0x2001,0xfffe,fr7 ; 15 bit result
  308. set_fr_iimmed 0xfffe,0x2001,fr8
  309. cmmulhs fr7,fr8,acc0,cc4,0
  310. test_accg_immed 0x00000011,accg0
  311. test_acc_immed 0x11111111,acc0
  312. test_accg_immed 0x00000022,accg1
  313. test_acc_immed 0x22222222,acc1
  314. set_fr_iimmed 0x4000,0xfffe,fr7 ; 16 bit result
  315. set_fr_iimmed 0xfffe,0x4000,fr8
  316. cmmulhs fr7,fr8,acc0,cc4,0
  317. test_accg_immed 0x00000011,accg0
  318. test_acc_immed 0x11111111,acc0
  319. test_accg_immed 0x00000022,accg1
  320. test_acc_immed 0x22222222,acc1
  321. set_fr_iimmed 0x7fff,0x8000,fr7 ; max negative result
  322. set_fr_iimmed 0x8000,0x7fff,fr8
  323. cmmulhs fr7,fr8,acc0,cc4,0
  324. test_accg_immed 0x00000011,accg0
  325. test_acc_immed 0x11111111,acc0
  326. test_accg_immed 0x00000022,accg1
  327. test_acc_immed 0x22222222,acc1
  328. ; Negative operands
  329. set_fr_iimmed 0xfffe,0xfffd,fr7 ; multiply small numbers
  330. set_fr_iimmed 0xfffd,0xfffe,fr8
  331. cmmulhs fr7,fr8,acc0,cc4,0
  332. test_accg_immed 0x00000011,accg0
  333. test_acc_immed 0x11111111,acc0
  334. test_accg_immed 0x00000022,accg1
  335. test_acc_immed 0x22222222,acc1
  336. set_fr_iimmed 0xffff,0xfffe,fr7 ; multiply by -1
  337. set_fr_iimmed 0xfffe,0xffff,fr8
  338. cmmulhs fr7,fr8,acc0,cc4,0
  339. test_accg_immed 0x00000011,accg0
  340. test_acc_immed 0x11111111,acc0
  341. test_accg_immed 0x00000022,accg1
  342. test_acc_immed 0x22222222,acc1
  343. set_fr_iimmed 0x8001,0x8001,fr7 ; almost max positive result
  344. set_fr_iimmed 0x8001,0x8001,fr8
  345. cmmulhs fr7,fr8,acc0,cc4,0
  346. test_accg_immed 0x00000011,accg0
  347. test_acc_immed 0x11111111,acc0
  348. test_accg_immed 0x00000022,accg1
  349. test_acc_immed 0x22222222,acc1
  350. set_fr_iimmed 0x8000,0x8000,fr7 ; max positive result
  351. set_fr_iimmed 0x8000,0x8000,fr8
  352. cmmulhs fr7,fr8,acc0,cc4,0
  353. test_accg_immed 0x00000011,accg0
  354. test_acc_immed 0x11111111,acc0
  355. test_accg_immed 0x00000022,accg1
  356. test_acc_immed 0x22222222,acc1
  357. ; Positive operands
  358. set_accg_immed 0x00000011,accg0
  359. set_acc_immed 0x11111111,acc0
  360. set_accg_immed 0x00000022,accg1
  361. set_acc_immed 0x22222222,acc1
  362. set_fr_iimmed 2,3,fr7 ; multiply small numbers
  363. set_fr_iimmed 3,2,fr8
  364. cmmulhs fr7,fr8,acc0,cc1,1
  365. test_accg_immed 0x00000011,accg0
  366. test_acc_immed 0x11111111,acc0
  367. test_accg_immed 0x00000022,accg1
  368. test_acc_immed 0x22222222,acc1
  369. set_fr_iimmed 0,1,fr7 ; multiply by 0
  370. set_fr_iimmed 2,0,fr8
  371. cmmulhs fr7,fr8,acc0,cc1,1
  372. test_accg_immed 0x00000011,accg0
  373. test_acc_immed 0x11111111,acc0
  374. test_accg_immed 0x00000022,accg1
  375. test_acc_immed 0x22222222,acc1
  376. set_fr_iimmed 2,1,fr7 ; multiply by 1
  377. set_fr_iimmed 1,2,fr8
  378. cmmulhs fr7,fr8,acc0,cc1,1
  379. test_accg_immed 0x00000011,accg0
  380. test_acc_immed 0x11111111,acc0
  381. test_accg_immed 0x00000022,accg1
  382. test_acc_immed 0x22222222,acc1
  383. set_fr_iimmed 0x3fff,2,fr7 ; 15 bit result
  384. set_fr_iimmed 2,0x3fff,fr8
  385. cmmulhs fr7,fr8,acc0,cc1,1
  386. test_accg_immed 0x00000011,accg0
  387. test_acc_immed 0x11111111,acc0
  388. test_accg_immed 0x00000022,accg1
  389. test_acc_immed 0x22222222,acc1
  390. set_fr_iimmed 0x4000,2,fr7 ; 16 bit result
  391. set_fr_iimmed 2,0x4000,fr8
  392. cmmulhs fr7,fr8,acc0,cc1,1
  393. test_accg_immed 0x00000011,accg0
  394. test_acc_immed 0x11111111,acc0
  395. test_accg_immed 0x00000022,accg1
  396. test_acc_immed 0x22222222,acc1
  397. set_fr_iimmed 0x7fff,0x7fff,fr7 ; max positive result
  398. set_fr_iimmed 0x7fff,0x7fff,fr8
  399. cmmulhs fr7,fr8,acc0,cc1,1
  400. test_accg_immed 0x00000011,accg0
  401. test_acc_immed 0x11111111,acc0
  402. test_accg_immed 0x00000022,accg1
  403. test_acc_immed 0x22222222,acc1
  404. ; Mixed operands
  405. set_fr_iimmed 2,0xfffd,fr7 ; multiply small numbers
  406. set_fr_iimmed 0xfffd,2,fr8
  407. cmmulhs fr7,fr8,acc0,cc1,1
  408. test_accg_immed 0x00000011,accg0
  409. test_acc_immed 0x11111111,acc0
  410. test_accg_immed 0x00000022,accg1
  411. test_acc_immed 0x22222222,acc1
  412. set_fr_iimmed 0xfffe,1,fr7 ; multiply by 1
  413. set_fr_iimmed 1,0xfffe,fr8
  414. cmmulhs fr7,fr8,acc0,cc1,1
  415. test_accg_immed 0x00000011,accg0
  416. test_acc_immed 0x11111111,acc0
  417. test_accg_immed 0x00000022,accg1
  418. test_acc_immed 0x22222222,acc1
  419. set_fr_iimmed 0xfffe,0,fr7 ; multiply by 0
  420. set_fr_iimmed 0,0xfffe,fr8
  421. cmmulhs fr7,fr8,acc0,cc5,1
  422. test_accg_immed 0x00000011,accg0
  423. test_acc_immed 0x11111111,acc0
  424. test_accg_immed 0x00000022,accg1
  425. test_acc_immed 0x22222222,acc1
  426. set_fr_iimmed 0x2001,0xfffe,fr7 ; 15 bit result
  427. set_fr_iimmed 0xfffe,0x2001,fr8
  428. cmmulhs fr7,fr8,acc0,cc5,1
  429. test_accg_immed 0x00000011,accg0
  430. test_acc_immed 0x11111111,acc0
  431. test_accg_immed 0x00000022,accg1
  432. test_acc_immed 0x22222222,acc1
  433. set_fr_iimmed 0x4000,0xfffe,fr7 ; 16 bit result
  434. set_fr_iimmed 0xfffe,0x4000,fr8
  435. cmmulhs fr7,fr8,acc0,cc5,1
  436. test_accg_immed 0x00000011,accg0
  437. test_acc_immed 0x11111111,acc0
  438. test_accg_immed 0x00000022,accg1
  439. test_acc_immed 0x22222222,acc1
  440. set_fr_iimmed 0x7fff,0x8000,fr7 ; max negative result
  441. set_fr_iimmed 0x8000,0x7fff,fr8
  442. cmmulhs fr7,fr8,acc0,cc5,1
  443. test_accg_immed 0x00000011,accg0
  444. test_acc_immed 0x11111111,acc0
  445. test_accg_immed 0x00000022,accg1
  446. test_acc_immed 0x22222222,acc1
  447. ; Negative operands
  448. set_fr_iimmed 0xfffe,0xfffd,fr7 ; multiply small numbers
  449. set_fr_iimmed 0xfffd,0xfffe,fr8
  450. cmmulhs fr7,fr8,acc0,cc5,1
  451. test_accg_immed 0x00000011,accg0
  452. test_acc_immed 0x11111111,acc0
  453. test_accg_immed 0x00000022,accg1
  454. test_acc_immed 0x22222222,acc1
  455. set_fr_iimmed 0xffff,0xfffe,fr7 ; multiply by -1
  456. set_fr_iimmed 0xfffe,0xffff,fr8
  457. cmmulhs fr7,fr8,acc0,cc5,1
  458. test_accg_immed 0x00000011,accg0
  459. test_acc_immed 0x11111111,acc0
  460. test_accg_immed 0x00000022,accg1
  461. test_acc_immed 0x22222222,acc1
  462. set_fr_iimmed 0x8001,0x8001,fr7 ; almost max positive result
  463. set_fr_iimmed 0x8001,0x8001,fr8
  464. cmmulhs fr7,fr8,acc0,cc5,1
  465. test_accg_immed 0x00000011,accg0
  466. test_acc_immed 0x11111111,acc0
  467. test_accg_immed 0x00000022,accg1
  468. test_acc_immed 0x22222222,acc1
  469. set_fr_iimmed 0x8000,0x8000,fr7 ; max positive result
  470. set_fr_iimmed 0x8000,0x8000,fr8
  471. cmmulhs fr7,fr8,acc0,cc5,1
  472. test_accg_immed 0x00000011,accg0
  473. test_acc_immed 0x11111111,acc0
  474. test_accg_immed 0x00000022,accg1
  475. test_acc_immed 0x22222222,acc1
  476. ; Positive operands
  477. set_accg_immed 0x00000011,accg0
  478. set_acc_immed 0x11111111,acc0
  479. set_accg_immed 0x00000022,accg1
  480. set_acc_immed 0x22222222,acc1
  481. set_fr_iimmed 2,3,fr7 ; multiply small numbers
  482. set_fr_iimmed 3,2,fr8
  483. cmmulhs fr7,fr8,acc0,cc2,1
  484. test_accg_immed 0x00000011,accg0
  485. test_acc_immed 0x11111111,acc0
  486. test_accg_immed 0x00000022,accg1
  487. test_acc_immed 0x22222222,acc1
  488. set_fr_iimmed 0,1,fr7 ; multiply by 0
  489. set_fr_iimmed 2,0,fr8
  490. cmmulhs fr7,fr8,acc0,cc2,0
  491. test_accg_immed 0x00000011,accg0
  492. test_acc_immed 0x11111111,acc0
  493. test_accg_immed 0x00000022,accg1
  494. test_acc_immed 0x22222222,acc1
  495. set_fr_iimmed 2,1,fr7 ; multiply by 1
  496. set_fr_iimmed 1,2,fr8
  497. cmmulhs fr7,fr8,acc0,cc2,1
  498. test_accg_immed 0x00000011,accg0
  499. test_acc_immed 0x11111111,acc0
  500. test_accg_immed 0x00000022,accg1
  501. test_acc_immed 0x22222222,acc1
  502. set_fr_iimmed 0x3fff,2,fr7 ; 15 bit result
  503. set_fr_iimmed 2,0x3fff,fr8
  504. cmmulhs fr7,fr8,acc0,cc2,0
  505. test_accg_immed 0x00000011,accg0
  506. test_acc_immed 0x11111111,acc0
  507. test_accg_immed 0x00000022,accg1
  508. test_acc_immed 0x22222222,acc1
  509. set_fr_iimmed 0x4000,2,fr7 ; 16 bit result
  510. set_fr_iimmed 2,0x4000,fr8
  511. cmmulhs fr7,fr8,acc0,cc2,1
  512. test_accg_immed 0x00000011,accg0
  513. test_acc_immed 0x11111111,acc0
  514. test_accg_immed 0x00000022,accg1
  515. test_acc_immed 0x22222222,acc1
  516. set_fr_iimmed 0x7fff,0x7fff,fr7 ; max positive result
  517. set_fr_iimmed 0x7fff,0x7fff,fr8
  518. cmmulhs fr7,fr8,acc0,cc2,0
  519. test_accg_immed 0x00000011,accg0
  520. test_acc_immed 0x11111111,acc0
  521. test_accg_immed 0x00000022,accg1
  522. test_acc_immed 0x22222222,acc1
  523. ; Mixed operands
  524. set_fr_iimmed 2,0xfffd,fr7 ; multiply small numbers
  525. set_fr_iimmed 0xfffd,2,fr8
  526. cmmulhs fr7,fr8,acc0,cc2,1
  527. test_accg_immed 0x00000011,accg0
  528. test_acc_immed 0x11111111,acc0
  529. test_accg_immed 0x00000022,accg1
  530. test_acc_immed 0x22222222,acc1
  531. set_fr_iimmed 0xfffe,1,fr7 ; multiply by 1
  532. set_fr_iimmed 1,0xfffe,fr8
  533. cmmulhs fr7,fr8,acc0,cc2,0
  534. test_accg_immed 0x00000011,accg0
  535. test_acc_immed 0x11111111,acc0
  536. test_accg_immed 0x00000022,accg1
  537. test_acc_immed 0x22222222,acc1
  538. set_fr_iimmed 0xfffe,0,fr7 ; multiply by 0
  539. set_fr_iimmed 0,0xfffe,fr8
  540. cmmulhs fr7,fr8,acc0,cc6,1
  541. test_accg_immed 0x00000011,accg0
  542. test_acc_immed 0x11111111,acc0
  543. test_accg_immed 0x00000022,accg1
  544. test_acc_immed 0x22222222,acc1
  545. set_fr_iimmed 0x2001,0xfffe,fr7 ; 15 bit result
  546. set_fr_iimmed 0xfffe,0x2001,fr8
  547. cmmulhs fr7,fr8,acc0,cc6,0
  548. test_accg_immed 0x00000011,accg0
  549. test_acc_immed 0x11111111,acc0
  550. test_accg_immed 0x00000022,accg1
  551. test_acc_immed 0x22222222,acc1
  552. set_fr_iimmed 0x4000,0xfffe,fr7 ; 16 bit result
  553. set_fr_iimmed 0xfffe,0x4000,fr8
  554. cmmulhs fr7,fr8,acc0,cc6,1
  555. test_accg_immed 0x00000011,accg0
  556. test_acc_immed 0x11111111,acc0
  557. test_accg_immed 0x00000022,accg1
  558. test_acc_immed 0x22222222,acc1
  559. set_fr_iimmed 0x7fff,0x8000,fr7 ; max negative result
  560. set_fr_iimmed 0x8000,0x7fff,fr8
  561. cmmulhs fr7,fr8,acc0,cc6,0
  562. test_accg_immed 0x00000011,accg0
  563. test_acc_immed 0x11111111,acc0
  564. test_accg_immed 0x00000022,accg1
  565. test_acc_immed 0x22222222,acc1
  566. ; Negative operands
  567. set_fr_iimmed 0xfffe,0xfffd,fr7 ; multiply small numbers
  568. set_fr_iimmed 0xfffd,0xfffe,fr8
  569. cmmulhs fr7,fr8,acc0,cc6,1
  570. test_accg_immed 0x00000011,accg0
  571. test_acc_immed 0x11111111,acc0
  572. test_accg_immed 0x00000022,accg1
  573. test_acc_immed 0x22222222,acc1
  574. set_fr_iimmed 0xffff,0xfffe,fr7 ; multiply by -1
  575. set_fr_iimmed 0xfffe,0xffff,fr8
  576. cmmulhs fr7,fr8,acc0,cc6,0
  577. test_accg_immed 0x00000011,accg0
  578. test_acc_immed 0x11111111,acc0
  579. test_accg_immed 0x00000022,accg1
  580. test_acc_immed 0x22222222,acc1
  581. set_fr_iimmed 0x8001,0x8001,fr7 ; almost max positive result
  582. set_fr_iimmed 0x8001,0x8001,fr8
  583. cmmulhs fr7,fr8,acc0,cc6,0
  584. test_accg_immed 0x00000011,accg0
  585. test_acc_immed 0x11111111,acc0
  586. test_accg_immed 0x00000022,accg1
  587. test_acc_immed 0x22222222,acc1
  588. set_fr_iimmed 0x8000,0x8000,fr7 ; max positive result
  589. set_fr_iimmed 0x8000,0x8000,fr8
  590. cmmulhs fr7,fr8,acc0,cc6,0
  591. test_accg_immed 0x00000011,accg0
  592. test_acc_immed 0x11111111,acc0
  593. test_accg_immed 0x00000022,accg1
  594. test_acc_immed 0x22222222,acc1
  595. ; Positive operands
  596. set_accg_immed 0x00000011,accg0
  597. set_acc_immed 0x11111111,acc0
  598. set_accg_immed 0x00000022,accg1
  599. set_acc_immed 0x22222222,acc1
  600. set_fr_iimmed 2,3,fr7 ; multiply small numbers
  601. set_fr_iimmed 3,2,fr8
  602. cmmulhs fr7,fr8,acc0,cc3,1
  603. test_accg_immed 0x00000011,accg0
  604. test_acc_immed 0x11111111,acc0
  605. test_accg_immed 0x00000022,accg1
  606. test_acc_immed 0x22222222,acc1
  607. set_fr_iimmed 0,1,fr7 ; multiply by 0
  608. set_fr_iimmed 2,0,fr8
  609. cmmulhs fr7,fr8,acc0,cc3,0
  610. test_accg_immed 0x00000011,accg0
  611. test_acc_immed 0x11111111,acc0
  612. test_accg_immed 0x00000022,accg1
  613. test_acc_immed 0x22222222,acc1
  614. set_fr_iimmed 2,1,fr7 ; multiply by 1
  615. set_fr_iimmed 1,2,fr8
  616. cmmulhs fr7,fr8,acc0,cc3,1
  617. test_accg_immed 0x00000011,accg0
  618. test_acc_immed 0x11111111,acc0
  619. test_accg_immed 0x00000022,accg1
  620. test_acc_immed 0x22222222,acc1
  621. set_fr_iimmed 0x3fff,2,fr7 ; 15 bit result
  622. set_fr_iimmed 2,0x3fff,fr8
  623. cmmulhs fr7,fr8,acc0,cc3,0
  624. test_accg_immed 0x00000011,accg0
  625. test_acc_immed 0x11111111,acc0
  626. test_accg_immed 0x00000022,accg1
  627. test_acc_immed 0x22222222,acc1
  628. set_fr_iimmed 0x4000,2,fr7 ; 16 bit result
  629. set_fr_iimmed 2,0x4000,fr8
  630. cmmulhs fr7,fr8,acc0,cc3,1
  631. test_accg_immed 0x00000011,accg0
  632. test_acc_immed 0x11111111,acc0
  633. test_accg_immed 0x00000022,accg1
  634. test_acc_immed 0x22222222,acc1
  635. set_fr_iimmed 0x7fff,0x7fff,fr7 ; max positive result
  636. set_fr_iimmed 0x7fff,0x7fff,fr8
  637. cmmulhs fr7,fr8,acc0,cc3,0
  638. test_accg_immed 0x00000011,accg0
  639. test_acc_immed 0x11111111,acc0
  640. test_accg_immed 0x00000022,accg1
  641. test_acc_immed 0x22222222,acc1
  642. ; Mixed operands
  643. set_fr_iimmed 2,0xfffd,fr7 ; multiply small numbers
  644. set_fr_iimmed 0xfffd,2,fr8
  645. cmmulhs fr7,fr8,acc0,cc3,1
  646. test_accg_immed 0x00000011,accg0
  647. test_acc_immed 0x11111111,acc0
  648. test_accg_immed 0x00000022,accg1
  649. test_acc_immed 0x22222222,acc1
  650. set_fr_iimmed 0xfffe,1,fr7 ; multiply by 1
  651. set_fr_iimmed 1,0xfffe,fr8
  652. cmmulhs fr7,fr8,acc0,cc3,0
  653. test_accg_immed 0x00000011,accg0
  654. test_acc_immed 0x11111111,acc0
  655. test_accg_immed 0x00000022,accg1
  656. test_acc_immed 0x22222222,acc1
  657. set_fr_iimmed 0xfffe,0,fr7 ; multiply by 0
  658. set_fr_iimmed 0,0xfffe,fr8
  659. cmmulhs fr7,fr8,acc0,cc7,1
  660. test_accg_immed 0x00000011,accg0
  661. test_acc_immed 0x11111111,acc0
  662. test_accg_immed 0x00000022,accg1
  663. test_acc_immed 0x22222222,acc1
  664. set_fr_iimmed 0x2001,0xfffe,fr7 ; 15 bit result
  665. set_fr_iimmed 0xfffe,0x2001,fr8
  666. cmmulhs fr7,fr8,acc0,cc7,0
  667. test_accg_immed 0x00000011,accg0
  668. test_acc_immed 0x11111111,acc0
  669. test_accg_immed 0x00000022,accg1
  670. test_acc_immed 0x22222222,acc1
  671. set_fr_iimmed 0x4000,0xfffe,fr7 ; 16 bit result
  672. set_fr_iimmed 0xfffe,0x4000,fr8
  673. cmmulhs fr7,fr8,acc0,cc7,1
  674. test_accg_immed 0x00000011,accg0
  675. test_acc_immed 0x11111111,acc0
  676. test_accg_immed 0x00000022,accg1
  677. test_acc_immed 0x22222222,acc1
  678. set_fr_iimmed 0x7fff,0x8000,fr7 ; max negative result
  679. set_fr_iimmed 0x8000,0x7fff,fr8
  680. cmmulhs fr7,fr8,acc0,cc7,0
  681. test_accg_immed 0x00000011,accg0
  682. test_acc_immed 0x11111111,acc0
  683. test_accg_immed 0x00000022,accg1
  684. test_acc_immed 0x22222222,acc1
  685. ; Negative operands
  686. set_fr_iimmed 0xfffe,0xfffd,fr7 ; multiply small numbers
  687. set_fr_iimmed 0xfffd,0xfffe,fr8
  688. cmmulhs fr7,fr8,acc0,cc7,1
  689. test_accg_immed 0x00000011,accg0
  690. test_acc_immed 0x11111111,acc0
  691. test_accg_immed 0x00000022,accg1
  692. test_acc_immed 0x22222222,acc1
  693. set_fr_iimmed 0xffff,0xfffe,fr7 ; multiply by -1
  694. set_fr_iimmed 0xfffe,0xffff,fr8
  695. cmmulhs fr7,fr8,acc0,cc7,0
  696. test_accg_immed 0x00000011,accg0
  697. test_acc_immed 0x11111111,acc0
  698. test_accg_immed 0x00000022,accg1
  699. test_acc_immed 0x22222222,acc1
  700. set_fr_iimmed 0x8001,0x8001,fr7 ; almost max positive result
  701. set_fr_iimmed 0x8001,0x8001,fr8
  702. cmmulhs fr7,fr8,acc0,cc7,0
  703. test_accg_immed 0x00000011,accg0
  704. test_acc_immed 0x11111111,acc0
  705. test_accg_immed 0x00000022,accg1
  706. test_acc_immed 0x22222222,acc1
  707. set_fr_iimmed 0x8000,0x8000,fr7 ; max positive result
  708. set_fr_iimmed 0x8000,0x8000,fr8
  709. cmmulhs fr7,fr8,acc0,cc7,0
  710. test_accg_immed 0x00000011,accg0
  711. test_acc_immed 0x11111111,acc0
  712. test_accg_immed 0x00000022,accg1
  713. test_acc_immed 0x22222222,acc1
  714. pass