cmcpxrs.cgs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649
  1. # frv testcase for cmcpxrs $GRi,$GRj,$ACCk,$CCi,$cond
  2. # mach: all
  3. .include "testutils.inc"
  4. start
  5. .global cmcpxrs
  6. cmcpxrs:
  7. set_spr_immed 0x1b1b,cccr
  8. ; Positive operands
  9. set_fr_iimmed 2,4,fr7 ; multiply small numbers
  10. set_fr_iimmed 3,5,fr8
  11. cmcpxrs fr7,fr8,acc0,cc0,1
  12. test_accg_immed 0xff,accg0
  13. test_acc_immed -14,acc0
  14. set_fr_iimmed 3,1,fr7 ; multiply by 0
  15. set_fr_iimmed 2,0,fr8
  16. cmcpxrs fr7,fr8,acc0,cc0,1
  17. test_accg_immed 0,accg0
  18. test_acc_immed 6,acc0
  19. set_fr_iimmed 2,1,fr7 ; multiply by 1
  20. set_fr_iimmed 1,1,fr8
  21. cmcpxrs fr7,fr8,acc0,cc0,1
  22. test_accg_immed 0,accg0
  23. test_acc_immed 1,acc0
  24. set_fr_iimmed 0x3fff,2,fr7 ; 15 bit result
  25. set_fr_iimmed 2,0x0007,fr8
  26. cmcpxrs fr7,fr8,acc0,cc0,1
  27. test_accg_immed 0,accg0
  28. test_acc_limmed 0,0x7ff0,acc0
  29. set_fr_iimmed 0x4000,2,fr7 ; 16 bit result
  30. set_fr_iimmed 2,0x2000,fr8
  31. cmcpxrs fr7,fr8,acc0,cc0,1
  32. test_accg_immed 0,accg0
  33. test_acc_limmed 0x0000,0x4000,acc0
  34. set_fr_iimmed 0x7fff,0x0000,fr7 ; max positive result
  35. set_fr_iimmed 0x7fff,0x7fff,fr8
  36. cmcpxrs fr7,fr8,acc0,cc0,1
  37. test_accg_immed 0,accg0
  38. test_acc_limmed 0x3fff,0x0001,acc0
  39. ; Mixed operands
  40. set_fr_iimmed 2,0xfffd,fr7 ; multiply small numbers
  41. set_fr_iimmed 0xfffd,1,fr8
  42. cmcpxrs fr7,fr8,acc0,cc0,1
  43. test_accg_immed 0xff,accg0
  44. test_acc_immed -3,acc0
  45. set_fr_iimmed 0xfffe,2,fr7 ; multiply by 1
  46. set_fr_iimmed 1,0xfffe,fr8
  47. cmcpxrs fr7,fr8,acc0,cc4,1
  48. test_accg_immed 0,accg0
  49. test_acc_immed 2,acc0
  50. set_fr_iimmed 0xfffe,0,fr7 ; multiply by 0
  51. set_fr_iimmed 1,0xfffe,fr8
  52. cmcpxrs fr7,fr8,acc0,cc4,1
  53. test_accg_immed 0xff,accg0
  54. test_acc_immed -2,acc0
  55. set_fr_iimmed 0x2001,0xfffe,fr7 ; 15 bit result
  56. set_fr_iimmed 0xfffe,0xfff9,fr8
  57. cmcpxrs fr7,fr8,acc0,cc4,1
  58. test_accg_immed 0xff,accg0
  59. test_acc_limmed 0xffff,0xbff0,acc0
  60. set_fr_iimmed 0x4000,0xfffe,fr7 ; 16 bit result
  61. set_fr_iimmed 0xfffe,0x0003,fr8
  62. cmcpxrs fr7,fr8,acc0,cc4,1
  63. test_accg_immed 0xff,accg0
  64. test_acc_limmed 0xffff,0x8006,acc0
  65. set_fr_iimmed 0x7fff,0x8000,fr7 ; max negative result
  66. set_fr_iimmed 0x8000,0x8000,fr8
  67. cmcpxrs fr7,fr8,acc0,cc4,1
  68. test_accg_immed 0xff,accg0
  69. test_acc_limmed 0x8000,0x8000,acc0
  70. set_fr_iimmed 0x8000,0x7fff,fr7 ; max positive result
  71. set_fr_iimmed 0x8000,0x8000,fr8
  72. cmcpxrs fr7,fr8,acc0,cc4,1
  73. test_accg_immed 0,accg0
  74. test_acc_limmed 0x7fff,0x8000,acc0
  75. ; Negative operands
  76. set_fr_iimmed 0xfffe,0xfffc,fr7 ; multiply small numbers
  77. set_fr_iimmed 0xfffd,0xfffb,fr8
  78. cmcpxrs fr7,fr8,acc0,cc4,1
  79. test_accg_immed 0xff,accg0
  80. test_acc_immed -14,acc0
  81. set_fr_iimmed 0xffff,0xffff,fr7 ; multiply by -1
  82. set_fr_iimmed 0xfffe,0xffff,fr8
  83. cmcpxrs fr7,fr8,acc0,cc4,1
  84. test_accg_immed 0,accg0
  85. test_acc_immed 1,acc0
  86. set_fr_iimmed 0x7fff,0x0000,fr7 ; almost max positive result
  87. set_fr_iimmed 0x7fff,0x8001,fr8
  88. cmcpxrs fr7,fr8,acc0,cc0,1
  89. test_accg_immed 0,accg0
  90. test_acc_immed 0x3fff0001,acc0
  91. set_fr_iimmed 0x8000,0x0000,fr7 ; max positive result
  92. set_fr_iimmed 0x8000,0x8000,fr8
  93. cmcpxrs fr7,fr8,acc0,cc4,1
  94. test_accg_immed 0,accg0
  95. test_acc_immed 0x40000000,acc0
  96. set_fr_iimmed 2,4,fr7 ; multiply small numbers
  97. set_fr_iimmed 3,5,fr8
  98. cmcpxrs fr7,fr8,acc0,cc1,0
  99. test_accg_immed 0xff,accg0
  100. test_acc_immed -14,acc0
  101. set_fr_iimmed 3,1,fr7 ; multiply by 0
  102. set_fr_iimmed 2,0,fr8
  103. cmcpxrs fr7,fr8,acc0,cc1,0
  104. test_accg_immed 0,accg0
  105. test_acc_immed 6,acc0
  106. set_fr_iimmed 2,1,fr7 ; multiply by 1
  107. set_fr_iimmed 1,1,fr8
  108. cmcpxrs fr7,fr8,acc0,cc1,0
  109. test_accg_immed 0,accg0
  110. test_acc_immed 1,acc0
  111. set_fr_iimmed 0x3fff,2,fr7 ; 15 bit result
  112. set_fr_iimmed 2,0x0007,fr8
  113. cmcpxrs fr7,fr8,acc0,cc1,0
  114. test_accg_immed 0,accg0
  115. test_acc_limmed 0,0x7ff0,acc0
  116. set_fr_iimmed 0x4000,2,fr7 ; 16 bit result
  117. set_fr_iimmed 2,0x2000,fr8
  118. cmcpxrs fr7,fr8,acc0,cc1,0
  119. test_accg_immed 0,accg0
  120. test_acc_limmed 0x0000,0x4000,acc0
  121. set_fr_iimmed 0x7fff,0x0000,fr7 ; max positive result
  122. set_fr_iimmed 0x7fff,0x7fff,fr8
  123. cmcpxrs fr7,fr8,acc0,cc1,0
  124. test_accg_immed 0,accg0
  125. test_acc_limmed 0x3fff,0x0001,acc0
  126. ; Mixed operands
  127. set_fr_iimmed 2,0xfffd,fr7 ; multiply small numbers
  128. set_fr_iimmed 0xfffd,1,fr8
  129. cmcpxrs fr7,fr8,acc0,cc1,0
  130. test_accg_immed 0xff,accg0
  131. test_acc_immed -3,acc0
  132. set_fr_iimmed 0xfffe,2,fr7 ; multiply by 1
  133. set_fr_iimmed 1,0xfffe,fr8
  134. cmcpxrs fr7,fr8,acc0,cc5,0
  135. test_accg_immed 0,accg0
  136. test_acc_immed 2,acc0
  137. set_fr_iimmed 0xfffe,0,fr7 ; multiply by 0
  138. set_fr_iimmed 1,0xfffe,fr8
  139. cmcpxrs fr7,fr8,acc0,cc5,0
  140. test_accg_immed 0xff,accg0
  141. test_acc_immed -2,acc0
  142. set_fr_iimmed 0x2001,0xfffe,fr7 ; 15 bit result
  143. set_fr_iimmed 0xfffe,0xfff9,fr8
  144. cmcpxrs fr7,fr8,acc0,cc5,0
  145. test_accg_immed 0xff,accg0
  146. test_acc_limmed 0xffff,0xbff0,acc0
  147. set_fr_iimmed 0x4000,0xfffe,fr7 ; 16 bit result
  148. set_fr_iimmed 0xfffe,0x0003,fr8
  149. cmcpxrs fr7,fr8,acc0,cc5,0
  150. test_accg_immed 0xff,accg0
  151. test_acc_limmed 0xffff,0x8006,acc0
  152. set_fr_iimmed 0x7fff,0x8000,fr7 ; max negative result
  153. set_fr_iimmed 0x8000,0x8000,fr8
  154. cmcpxrs fr7,fr8,acc0,cc5,0
  155. test_accg_immed 0xff,accg0
  156. test_acc_limmed 0x8000,0x8000,acc0
  157. set_fr_iimmed 0x8000,0x7fff,fr7 ; max positive result
  158. set_fr_iimmed 0x8000,0x8000,fr8
  159. cmcpxrs fr7,fr8,acc0,cc5,0
  160. test_accg_immed 0,accg0
  161. test_acc_limmed 0x7fff,0x8000,acc0
  162. ; Negative operands
  163. set_fr_iimmed 0xfffe,0xfffc,fr7 ; multiply small numbers
  164. set_fr_iimmed 0xfffd,0xfffb,fr8
  165. cmcpxrs fr7,fr8,acc0,cc5,0
  166. test_accg_immed 0xff,accg0
  167. test_acc_immed -14,acc0
  168. set_fr_iimmed 0xffff,0xffff,fr7 ; multiply by -1
  169. set_fr_iimmed 0xfffe,0xffff,fr8
  170. cmcpxrs fr7,fr8,acc0,cc5,0
  171. test_accg_immed 0,accg0
  172. test_acc_immed 1,acc0
  173. set_fr_iimmed 0x7fff,0x0000,fr7 ; almost max positive result
  174. set_fr_iimmed 0x7fff,0x8001,fr8
  175. cmcpxrs fr7,fr8,acc0,cc5,0
  176. test_accg_immed 0,accg0
  177. test_acc_immed 0x3fff0001,acc0
  178. set_fr_iimmed 0x8000,0x0000,fr7 ; max positive result
  179. set_fr_iimmed 0x8000,0x8000,fr8
  180. cmcpxrs fr7,fr8,acc0,cc5,0
  181. test_accg_immed 0,accg0
  182. test_acc_immed 0x40000000,acc0
  183. ; Positive operands
  184. set_accg_immed 0x00000011,accg0
  185. set_acc_immed 0x11111111,acc0
  186. set_fr_iimmed 2,4,fr7 ; multiply small numbers
  187. set_fr_iimmed 3,5,fr8
  188. cmcpxrs fr7,fr8,acc0,cc0,0
  189. test_accg_immed 0x00000011,accg0
  190. test_acc_immed 0x11111111,acc0
  191. set_fr_iimmed 3,1,fr7 ; multiply by 0
  192. set_fr_iimmed 2,0,fr8
  193. cmcpxrs fr7,fr8,acc0,cc0,0
  194. test_accg_immed 0x00000011,accg0
  195. test_acc_immed 0x11111111,acc0
  196. set_fr_iimmed 2,1,fr7 ; multiply by 1
  197. set_fr_iimmed 1,1,fr8
  198. cmcpxrs fr7,fr8,acc0,cc0,0
  199. test_accg_immed 0x00000011,accg0
  200. test_acc_immed 0x11111111,acc0
  201. set_fr_iimmed 0x3fff,2,fr7 ; 15 bit result
  202. set_fr_iimmed 2,0x0007,fr8
  203. cmcpxrs fr7,fr8,acc0,cc0,0
  204. test_accg_immed 0x00000011,accg0
  205. test_acc_immed 0x11111111,acc0
  206. set_fr_iimmed 0x4000,2,fr7 ; 16 bit result
  207. set_fr_iimmed 2,0x2000,fr8
  208. cmcpxrs fr7,fr8,acc0,cc0,0
  209. test_accg_immed 0x00000011,accg0
  210. test_acc_immed 0x11111111,acc0
  211. set_fr_iimmed 0x7fff,0x0000,fr7 ; max positive result
  212. set_fr_iimmed 0x7fff,0x7fff,fr8
  213. cmcpxrs fr7,fr8,acc0,cc0,0
  214. test_accg_immed 0x00000011,accg0
  215. test_acc_immed 0x11111111,acc0
  216. ; Mixed operands
  217. set_fr_iimmed 2,0xfffd,fr7 ; multiply small numbers
  218. set_fr_iimmed 0xfffd,1,fr8
  219. cmcpxrs fr7,fr8,acc0,cc0,0
  220. test_accg_immed 0x00000011,accg0
  221. test_acc_immed 0x11111111,acc0
  222. set_fr_iimmed 0xfffe,2,fr7 ; multiply by 1
  223. set_fr_iimmed 1,0xfffe,fr8
  224. cmcpxrs fr7,fr8,acc0,cc4,0
  225. test_accg_immed 0x00000011,accg0
  226. test_acc_immed 0x11111111,acc0
  227. set_fr_iimmed 0xfffe,0,fr7 ; multiply by 0
  228. set_fr_iimmed 1,0xfffe,fr8
  229. cmcpxrs fr7,fr8,acc0,cc4,0
  230. test_accg_immed 0x00000011,accg0
  231. test_acc_immed 0x11111111,acc0
  232. set_fr_iimmed 0x2001,0xfffe,fr7 ; 15 bit result
  233. set_fr_iimmed 0xfffe,0xfff9,fr8
  234. cmcpxrs fr7,fr8,acc0,cc4,0
  235. test_accg_immed 0x00000011,accg0
  236. test_acc_immed 0x11111111,acc0
  237. set_fr_iimmed 0x4000,0xfffe,fr7 ; 16 bit result
  238. set_fr_iimmed 0xfffe,0x0003,fr8
  239. cmcpxrs fr7,fr8,acc0,cc4,0
  240. test_accg_immed 0x00000011,accg0
  241. test_acc_immed 0x11111111,acc0
  242. set_fr_iimmed 0x7fff,0x8000,fr7 ; max negative result
  243. set_fr_iimmed 0x8000,0x8000,fr8
  244. cmcpxrs fr7,fr8,acc0,cc4,0
  245. test_accg_immed 0x00000011,accg0
  246. test_acc_immed 0x11111111,acc0
  247. set_fr_iimmed 0x8000,0x7fff,fr7 ; max positive result
  248. set_fr_iimmed 0x8000,0x8000,fr8
  249. cmcpxrs fr7,fr8,acc0,cc4,0
  250. test_accg_immed 0x00000011,accg0
  251. test_acc_immed 0x11111111,acc0
  252. ; Negative operands
  253. set_fr_iimmed 0xfffe,0xfffc,fr7 ; multiply small numbers
  254. set_fr_iimmed 0xfffd,0xfffb,fr8
  255. cmcpxrs fr7,fr8,acc0,cc4,0
  256. test_accg_immed 0x00000011,accg0
  257. test_acc_immed 0x11111111,acc0
  258. set_fr_iimmed 0xffff,0xffff,fr7 ; multiply by -1
  259. set_fr_iimmed 0xfffe,0xffff,fr8
  260. cmcpxrs fr7,fr8,acc0,cc4,0
  261. test_accg_immed 0x00000011,accg0
  262. test_acc_immed 0x11111111,acc0
  263. set_fr_iimmed 0x7fff,0x0000,fr7 ; almost max positive result
  264. set_fr_iimmed 0x7fff,0x8001,fr8
  265. cmcpxrs fr7,fr8,acc0,cc4,0
  266. test_accg_immed 0x00000011,accg0
  267. test_acc_immed 0x11111111,acc0
  268. set_fr_iimmed 0x8000,0x0000,fr7 ; max positive result
  269. set_fr_iimmed 0x8000,0x8000,fr8
  270. cmcpxrs fr7,fr8,acc0,cc4,0
  271. test_accg_immed 0x00000011,accg0
  272. test_acc_immed 0x11111111,acc0
  273. ; Positive operands
  274. set_accg_immed 0x00000011,accg0
  275. set_acc_immed 0x11111111,acc0
  276. set_fr_iimmed 2,4,fr7 ; multiply small numbers
  277. set_fr_iimmed 3,5,fr8
  278. cmcpxrs fr7,fr8,acc0,cc1,1
  279. test_accg_immed 0x00000011,accg0
  280. test_acc_immed 0x11111111,acc0
  281. set_fr_iimmed 3,1,fr7 ; multiply by 0
  282. set_fr_iimmed 2,0,fr8
  283. cmcpxrs fr7,fr8,acc0,cc1,1
  284. test_accg_immed 0x00000011,accg0
  285. test_acc_immed 0x11111111,acc0
  286. set_fr_iimmed 2,1,fr7 ; multiply by 1
  287. set_fr_iimmed 1,1,fr8
  288. cmcpxrs fr7,fr8,acc0,cc1,1
  289. test_accg_immed 0x00000011,accg0
  290. test_acc_immed 0x11111111,acc0
  291. set_fr_iimmed 0x3fff,2,fr7 ; 15 bit result
  292. set_fr_iimmed 2,0x0007,fr8
  293. cmcpxrs fr7,fr8,acc0,cc1,1
  294. test_accg_immed 0x00000011,accg0
  295. test_acc_immed 0x11111111,acc0
  296. set_fr_iimmed 0x4000,2,fr7 ; 16 bit result
  297. set_fr_iimmed 2,0x2000,fr8
  298. cmcpxrs fr7,fr8,acc0,cc1,1
  299. test_accg_immed 0x00000011,accg0
  300. test_acc_immed 0x11111111,acc0
  301. set_fr_iimmed 0x7fff,0x0000,fr7 ; max positive result
  302. set_fr_iimmed 0x7fff,0x7fff,fr8
  303. cmcpxrs fr7,fr8,acc0,cc1,1
  304. test_accg_immed 0x00000011,accg0
  305. test_acc_immed 0x11111111,acc0
  306. ; Mixed operands
  307. set_fr_iimmed 2,0xfffd,fr7 ; multiply small numbers
  308. set_fr_iimmed 0xfffd,1,fr8
  309. cmcpxrs fr7,fr8,acc0,cc1,1
  310. test_accg_immed 0x00000011,accg0
  311. test_acc_immed 0x11111111,acc0
  312. set_fr_iimmed 0xfffe,2,fr7 ; multiply by 1
  313. set_fr_iimmed 1,0xfffe,fr8
  314. cmcpxrs fr7,fr8,acc0,cc5,1
  315. test_accg_immed 0x00000011,accg0
  316. test_acc_immed 0x11111111,acc0
  317. set_fr_iimmed 0xfffe,0,fr7 ; multiply by 0
  318. set_fr_iimmed 1,0xfffe,fr8
  319. cmcpxrs fr7,fr8,acc0,cc5,1
  320. test_accg_immed 0x00000011,accg0
  321. test_acc_immed 0x11111111,acc0
  322. set_fr_iimmed 0x2001,0xfffe,fr7 ; 15 bit result
  323. set_fr_iimmed 0xfffe,0xfff9,fr8
  324. cmcpxrs fr7,fr8,acc0,cc5,1
  325. test_accg_immed 0x00000011,accg0
  326. test_acc_immed 0x11111111,acc0
  327. set_fr_iimmed 0x4000,0xfffe,fr7 ; 16 bit result
  328. set_fr_iimmed 0xfffe,0x0003,fr8
  329. cmcpxrs fr7,fr8,acc0,cc5,1
  330. test_accg_immed 0x00000011,accg0
  331. test_acc_immed 0x11111111,acc0
  332. set_fr_iimmed 0x7fff,0x8000,fr7 ; max negative result
  333. set_fr_iimmed 0x8000,0x8000,fr8
  334. cmcpxrs fr7,fr8,acc0,cc5,1
  335. test_accg_immed 0x00000011,accg0
  336. test_acc_immed 0x11111111,acc0
  337. set_fr_iimmed 0x8000,0x7fff,fr7 ; max positive result
  338. set_fr_iimmed 0x8000,0x8000,fr8
  339. cmcpxrs fr7,fr8,acc0,cc5,1
  340. test_accg_immed 0x00000011,accg0
  341. test_acc_immed 0x11111111,acc0
  342. ; Negative operands
  343. set_fr_iimmed 0xfffe,0xfffc,fr7 ; multiply small numbers
  344. set_fr_iimmed 0xfffd,0xfffb,fr8
  345. cmcpxrs fr7,fr8,acc0,cc5,1
  346. test_accg_immed 0x00000011,accg0
  347. test_acc_immed 0x11111111,acc0
  348. set_fr_iimmed 0xffff,0xffff,fr7 ; multiply by -1
  349. set_fr_iimmed 0xfffe,0xffff,fr8
  350. cmcpxrs fr7,fr8,acc0,cc5,1
  351. test_accg_immed 0x00000011,accg0
  352. test_acc_immed 0x11111111,acc0
  353. set_fr_iimmed 0x7fff,0x0000,fr7 ; almost max positive result
  354. set_fr_iimmed 0x7fff,0x8001,fr8
  355. cmcpxrs fr7,fr8,acc0,cc5,1
  356. test_accg_immed 0x00000011,accg0
  357. test_acc_immed 0x11111111,acc0
  358. set_fr_iimmed 0x8000,0x0000,fr7 ; max positive result
  359. set_fr_iimmed 0x8000,0x8000,fr8
  360. cmcpxrs fr7,fr8,acc0,cc5,1
  361. test_accg_immed 0x00000011,accg0
  362. test_acc_immed 0x11111111,acc0
  363. ; Positive operands
  364. set_accg_immed 0x00000011,accg0
  365. set_acc_immed 0x11111111,acc0
  366. set_fr_iimmed 2,4,fr7 ; multiply small numbers
  367. set_fr_iimmed 3,5,fr8
  368. cmcpxrs fr7,fr8,acc0,cc2,1
  369. test_accg_immed 0x00000011,accg0
  370. test_acc_immed 0x11111111,acc0
  371. set_fr_iimmed 3,1,fr7 ; multiply by 0
  372. set_fr_iimmed 2,0,fr8
  373. cmcpxrs fr7,fr8,acc0,cc2,1
  374. test_accg_immed 0x00000011,accg0
  375. test_acc_immed 0x11111111,acc0
  376. set_fr_iimmed 2,1,fr7 ; multiply by 1
  377. set_fr_iimmed 1,1,fr8
  378. cmcpxrs fr7,fr8,acc0,cc2,1
  379. test_accg_immed 0x00000011,accg0
  380. test_acc_immed 0x11111111,acc0
  381. set_fr_iimmed 0x3fff,2,fr7 ; 15 bit result
  382. set_fr_iimmed 2,0x0007,fr8
  383. cmcpxrs fr7,fr8,acc0,cc2,1
  384. test_accg_immed 0x00000011,accg0
  385. test_acc_immed 0x11111111,acc0
  386. set_fr_iimmed 0x4000,2,fr7 ; 16 bit result
  387. set_fr_iimmed 2,0x2000,fr8
  388. cmcpxrs fr7,fr8,acc0,cc2,1
  389. test_accg_immed 0x00000011,accg0
  390. test_acc_immed 0x11111111,acc0
  391. set_fr_iimmed 0x7fff,0x0000,fr7 ; max positive result
  392. set_fr_iimmed 0x7fff,0x7fff,fr8
  393. cmcpxrs fr7,fr8,acc0,cc2,1
  394. test_accg_immed 0x00000011,accg0
  395. test_acc_immed 0x11111111,acc0
  396. ; Mixed operands
  397. set_fr_iimmed 2,0xfffd,fr7 ; multiply small numbers
  398. set_fr_iimmed 0xfffd,1,fr8
  399. cmcpxrs fr7,fr8,acc0,cc2,1
  400. test_accg_immed 0x00000011,accg0
  401. test_acc_immed 0x11111111,acc0
  402. set_fr_iimmed 0xfffe,2,fr7 ; multiply by 1
  403. set_fr_iimmed 1,0xfffe,fr8
  404. cmcpxrs fr7,fr8,acc0,cc6,1
  405. test_accg_immed 0x00000011,accg0
  406. test_acc_immed 0x11111111,acc0
  407. set_fr_iimmed 0xfffe,0,fr7 ; multiply by 0
  408. set_fr_iimmed 1,0xfffe,fr8
  409. cmcpxrs fr7,fr8,acc0,cc6,1
  410. test_accg_immed 0x00000011,accg0
  411. test_acc_immed 0x11111111,acc0
  412. set_fr_iimmed 0x2001,0xfffe,fr7 ; 15 bit result
  413. set_fr_iimmed 0xfffe,0xfff9,fr8
  414. cmcpxrs fr7,fr8,acc0,cc6,1
  415. test_accg_immed 0x00000011,accg0
  416. test_acc_immed 0x11111111,acc0
  417. set_fr_iimmed 0x4000,0xfffe,fr7 ; 16 bit result
  418. set_fr_iimmed 0xfffe,0x0003,fr8
  419. cmcpxrs fr7,fr8,acc0,cc6,1
  420. test_accg_immed 0x00000011,accg0
  421. test_acc_immed 0x11111111,acc0
  422. set_fr_iimmed 0x7fff,0x8000,fr7 ; max negative result
  423. set_fr_iimmed 0x8000,0x8000,fr8
  424. cmcpxrs fr7,fr8,acc0,cc6,1
  425. test_accg_immed 0x00000011,accg0
  426. test_acc_immed 0x11111111,acc0
  427. set_fr_iimmed 0x8000,0x7fff,fr7 ; max positive result
  428. set_fr_iimmed 0x8000,0x8000,fr8
  429. cmcpxrs fr7,fr8,acc0,cc6,1
  430. test_accg_immed 0x00000011,accg0
  431. test_acc_immed 0x11111111,acc0
  432. ; Negative operands
  433. set_fr_iimmed 0xfffe,0xfffc,fr7 ; multiply small numbers
  434. set_fr_iimmed 0xfffd,0xfffb,fr8
  435. cmcpxrs fr7,fr8,acc0,cc6,1
  436. test_accg_immed 0x00000011,accg0
  437. test_acc_immed 0x11111111,acc0
  438. set_fr_iimmed 0xffff,0xffff,fr7 ; multiply by -1
  439. set_fr_iimmed 0xfffe,0xffff,fr8
  440. cmcpxrs fr7,fr8,acc0,cc6,1
  441. test_accg_immed 0x00000011,accg0
  442. test_acc_immed 0x11111111,acc0
  443. set_fr_iimmed 0x7fff,0x0000,fr7 ; almost max positive result
  444. set_fr_iimmed 0x7fff,0x8001,fr8
  445. cmcpxrs fr7,fr8,acc0,cc6,1
  446. test_accg_immed 0x00000011,accg0
  447. test_acc_immed 0x11111111,acc0
  448. set_fr_iimmed 0x8000,0x0000,fr7 ; max positive result
  449. set_fr_iimmed 0x8000,0x8000,fr8
  450. cmcpxrs fr7,fr8,acc0,cc6,1
  451. test_accg_immed 0x00000011,accg0
  452. test_acc_immed 0x11111111,acc0
  453. ;
  454. ; Positive operands
  455. set_accg_immed 0x00000011,accg0
  456. set_acc_immed 0x11111111,acc0
  457. set_fr_iimmed 2,4,fr7 ; multiply small numbers
  458. set_fr_iimmed 3,5,fr8
  459. cmcpxrs fr7,fr8,acc0,cc3,1
  460. test_accg_immed 0x00000011,accg0
  461. test_acc_immed 0x11111111,acc0
  462. set_fr_iimmed 3,1,fr7 ; multiply by 0
  463. set_fr_iimmed 2,0,fr8
  464. cmcpxrs fr7,fr8,acc0,cc3,1
  465. test_accg_immed 0x00000011,accg0
  466. test_acc_immed 0x11111111,acc0
  467. set_fr_iimmed 2,1,fr7 ; multiply by 1
  468. set_fr_iimmed 1,1,fr8
  469. cmcpxrs fr7,fr8,acc0,cc3,1
  470. test_accg_immed 0x00000011,accg0
  471. test_acc_immed 0x11111111,acc0
  472. set_fr_iimmed 0x3fff,2,fr7 ; 15 bit result
  473. set_fr_iimmed 2,0x0007,fr8
  474. cmcpxrs fr7,fr8,acc0,cc3,1
  475. test_accg_immed 0x00000011,accg0
  476. test_acc_immed 0x11111111,acc0
  477. set_fr_iimmed 0x4000,2,fr7 ; 16 bit result
  478. set_fr_iimmed 2,0x2000,fr8
  479. cmcpxrs fr7,fr8,acc0,cc3,1
  480. test_accg_immed 0x00000011,accg0
  481. test_acc_immed 0x11111111,acc0
  482. set_fr_iimmed 0x7fff,0x0000,fr7 ; max positive result
  483. set_fr_iimmed 0x7fff,0x7fff,fr8
  484. cmcpxrs fr7,fr8,acc0,cc3,1
  485. test_accg_immed 0x00000011,accg0
  486. test_acc_immed 0x11111111,acc0
  487. ; Mixed operands
  488. set_fr_iimmed 2,0xfffd,fr7 ; multiply small numbers
  489. set_fr_iimmed 0xfffd,1,fr8
  490. cmcpxrs fr7,fr8,acc0,cc3,1
  491. test_accg_immed 0x00000011,accg0
  492. test_acc_immed 0x11111111,acc0
  493. set_fr_iimmed 0xfffe,2,fr7 ; multiply by 1
  494. set_fr_iimmed 1,0xfffe,fr8
  495. cmcpxrs fr7,fr8,acc0,cc7,1
  496. test_accg_immed 0x00000011,accg0
  497. test_acc_immed 0x11111111,acc0
  498. set_fr_iimmed 0xfffe,0,fr7 ; multiply by 0
  499. set_fr_iimmed 1,0xfffe,fr8
  500. cmcpxrs fr7,fr8,acc0,cc7,1
  501. test_accg_immed 0x00000011,accg0
  502. test_acc_immed 0x11111111,acc0
  503. set_fr_iimmed 0x2001,0xfffe,fr7 ; 15 bit result
  504. set_fr_iimmed 0xfffe,0xfff9,fr8
  505. cmcpxrs fr7,fr8,acc0,cc7,1
  506. test_accg_immed 0x00000011,accg0
  507. test_acc_immed 0x11111111,acc0
  508. set_fr_iimmed 0x4000,0xfffe,fr7 ; 16 bit result
  509. set_fr_iimmed 0xfffe,0x0003,fr8
  510. cmcpxrs fr7,fr8,acc0,cc7,1
  511. test_accg_immed 0x00000011,accg0
  512. test_acc_immed 0x11111111,acc0
  513. set_fr_iimmed 0x7fff,0x8000,fr7 ; max negative result
  514. set_fr_iimmed 0x8000,0x8000,fr8
  515. cmcpxrs fr7,fr8,acc0,cc7,1
  516. test_accg_immed 0x00000011,accg0
  517. test_acc_immed 0x11111111,acc0
  518. set_fr_iimmed 0x8000,0x7fff,fr7 ; max positive result
  519. set_fr_iimmed 0x8000,0x8000,fr8
  520. cmcpxrs fr7,fr8,acc0,cc7,1
  521. test_accg_immed 0x00000011,accg0
  522. test_acc_immed 0x11111111,acc0
  523. ; Negative operands
  524. set_fr_iimmed 0xfffe,0xfffc,fr7 ; multiply small numbers
  525. set_fr_iimmed 0xfffd,0xfffb,fr8
  526. cmcpxrs fr7,fr8,acc0,cc7,1
  527. test_accg_immed 0x00000011,accg0
  528. test_acc_immed 0x11111111,acc0
  529. set_fr_iimmed 0xffff,0xffff,fr7 ; multiply by -1
  530. set_fr_iimmed 0xfffe,0xffff,fr8
  531. cmcpxrs fr7,fr8,acc0,cc7,1
  532. test_accg_immed 0x00000011,accg0
  533. test_acc_immed 0x11111111,acc0
  534. set_fr_iimmed 0x7fff,0x0000,fr7 ; almost max positive result
  535. set_fr_iimmed 0x7fff,0x8001,fr8
  536. cmcpxrs fr7,fr8,acc0,cc7,1
  537. test_accg_immed 0x00000011,accg0
  538. test_acc_immed 0x11111111,acc0
  539. set_fr_iimmed 0x8000,0x0000,fr7 ; max positive result
  540. set_fr_iimmed 0x8000,0x8000,fr8
  541. cmcpxrs fr7,fr8,acc0,cc7,1
  542. test_accg_immed 0x00000011,accg0
  543. test_acc_immed 0x11111111,acc0
  544. pass