csmulcc.cgs 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380
  1. # frv testcase for csmulcc $GRi,$GRj,$GRk,$CCi,$cond
  2. # mach: all
  3. .include "testutils.inc"
  4. start
  5. .global csmulcc
  6. csmulcc:
  7. set_spr_immed 0x1b1b,cccr
  8. ; Positive operands
  9. set_gr_immed 3,gr7 ; multiply small numbers
  10. set_gr_immed 2,gr8
  11. set_icc 0xc,0
  12. csmulcc gr7,gr8,gr8,cc0,1
  13. test_icc 0 0 0 0 icc0
  14. test_gr_immed 0,gr8
  15. test_gr_immed 6,gr9
  16. set_gr_immed 1,gr7 ; multiply by 1
  17. set_gr_immed 2,gr8
  18. set_icc 0xd,0
  19. csmulcc gr7,gr8,gr8,cc0,1
  20. test_icc 0 0 0 1 icc0
  21. test_gr_immed 0,gr8
  22. test_gr_immed 2,gr9
  23. set_gr_immed 2,gr7 ; multiply by 1
  24. set_gr_immed 1,gr8
  25. set_icc 0xe,0
  26. csmulcc gr7,gr8,gr8,cc4,1
  27. test_icc 0 0 1 0 icc0
  28. test_gr_immed 0,gr8
  29. test_gr_immed 2,gr9
  30. set_gr_immed 0,gr7 ; multiply by 0
  31. set_gr_immed 2,gr8
  32. set_icc 0xb,0
  33. csmulcc gr7,gr8,gr8,cc4,1
  34. test_icc 0 1 1 1 icc0
  35. test_gr_immed 0,gr8
  36. test_gr_immed 0,gr9
  37. set_gr_immed 2,gr7 ; multiply by 0
  38. set_gr_immed 0,gr8
  39. set_icc 0x8,0
  40. csmulcc gr7,gr8,gr8,cc0,1
  41. test_icc 0 1 0 0 icc0
  42. test_gr_immed 0,gr8
  43. test_gr_immed 0,gr9
  44. set_gr_limmed 0x3fff,0xffff,gr7 ; 31 bit result
  45. set_gr_immed 2,gr8
  46. set_icc 0xd,0
  47. csmulcc gr7,gr8,gr8,cc0,1
  48. test_icc 0 0 0 1 icc0
  49. test_gr_immed 0,gr8
  50. test_gr_limmed 0x7fff,0xfffe,gr9
  51. set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result
  52. set_gr_immed 2,gr8
  53. set_icc 0xe,0
  54. csmulcc gr7,gr8,gr8,cc4,1
  55. test_icc 0 0 1 0 icc0
  56. test_gr_immed 0,gr8
  57. test_gr_limmed 0x8000,0x0000,gr9
  58. set_gr_limmed 0x4000,0x0000,gr7 ; 33 bit result
  59. set_gr_immed 4,gr8
  60. set_icc 0xf,0
  61. csmulcc gr7,gr8,gr8,cc4,1
  62. test_icc 0 0 1 1 icc0
  63. test_gr_immed 1,gr8
  64. test_gr_limmed 0x0000,0x0000,gr9
  65. set_gr_limmed 0x7fff,0xffff,gr7 ; max positive result
  66. set_gr_limmed 0x7fff,0xffff,gr8
  67. set_icc 0xc,0
  68. csmulcc gr7,gr8,gr8,cc0,1
  69. test_icc 0 0 0 0 icc0
  70. test_gr_limmed 0x3fff,0xffff,gr8
  71. test_gr_immed 0x00000001,gr9
  72. ; Mixed operands
  73. set_gr_immed -3,gr7 ; multiply small numbers
  74. set_gr_immed 2,gr8
  75. set_icc 0x5,0
  76. csmulcc gr7,gr8,gr8,cc0,1
  77. test_icc 1 0 0 1 icc0
  78. test_gr_immed -1,gr8
  79. test_gr_immed -6,gr9
  80. set_gr_immed 3,gr7 ; multiply small numbers
  81. set_gr_immed -2,gr8
  82. set_icc 0x6,0
  83. csmulcc gr7,gr8,gr8,cc4,1
  84. test_icc 1 0 1 0 icc0
  85. test_gr_immed -1,gr8
  86. test_gr_immed -6,gr9
  87. set_gr_immed 1,gr7 ; multiply by 1
  88. set_gr_immed -2,gr8
  89. set_icc 0x7,0
  90. csmulcc gr7,gr8,gr8,cc4,1
  91. test_icc 1 0 1 1 icc0
  92. test_gr_immed -1,gr8
  93. test_gr_immed -2,gr9
  94. set_gr_immed -2,gr7 ; multiply by 1
  95. set_gr_immed 1,gr8
  96. set_icc 0x4,0
  97. csmulcc gr7,gr8,gr8,cc0,1
  98. test_icc 1 0 0 0 icc0
  99. test_gr_immed -1,gr8
  100. test_gr_immed -2,gr9
  101. set_gr_immed 0,gr7 ; multiply by 0
  102. set_gr_immed -2,gr8
  103. set_icc 0x9,0
  104. csmulcc gr7,gr8,gr8,cc0,1
  105. test_icc 0 1 0 1 icc0
  106. test_gr_immed 0,gr8
  107. test_gr_immed 0,gr9
  108. set_gr_immed -2,gr7 ; multiply by 0
  109. set_gr_immed 0,gr8
  110. set_icc 0xa,0
  111. csmulcc gr7,gr8,gr8,cc4,1
  112. test_icc 0 1 1 0 icc0
  113. test_gr_immed 0,gr8
  114. test_gr_immed 0,gr9
  115. set_gr_limmed 0x2000,0x0001,gr7 ; 31 bit result
  116. set_gr_immed -2,gr8
  117. set_icc 0x7,0
  118. csmulcc gr7,gr8,gr8,cc4,1
  119. test_icc 1 0 1 1 icc0
  120. test_gr_limmed 0xffff,0xffff,gr8
  121. test_gr_limmed 0xbfff,0xfffe,gr9
  122. set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result
  123. set_gr_immed -2,gr8
  124. set_icc 0x4,0
  125. csmulcc gr7,gr8,gr8,cc0,1
  126. test_icc 1 0 0 0 icc0
  127. test_gr_limmed 0xffff,0xffff,gr8
  128. test_gr_limmed 0x8000,0x0000,gr9
  129. set_gr_limmed 0x4000,0x0001,gr7 ; 32 bit result
  130. set_gr_immed -2,gr8
  131. set_icc 0x5,0
  132. csmulcc gr7,gr8,gr8,cc0,1
  133. test_icc 1 0 0 1 icc0
  134. test_gr_limmed 0xffff,0xffff,gr8
  135. test_gr_limmed 0x7fff,0xfffe,gr9
  136. set_gr_limmed 0x4000,0x0000,gr7 ; 33 bit result
  137. set_gr_immed -4,gr8
  138. set_icc 0x6,0
  139. csmulcc gr7,gr8,gr8,cc4,1
  140. test_icc 1 0 1 0 icc0
  141. test_gr_limmed 0xffff,0xffff,gr8
  142. test_gr_limmed 0x0000,0x0000,gr9
  143. set_gr_limmed 0x7fff,0xffff,gr7 ; max negative result
  144. set_gr_limmed 0x8000,0x0000,gr8
  145. set_icc 0x7,0
  146. csmulcc gr7,gr8,gr8,cc4,1
  147. test_icc 1 0 1 1 icc0
  148. test_gr_limmed 0xc000,0x0000,gr8
  149. test_gr_limmed 0x8000,0x0000,gr9
  150. ; Negative operands
  151. set_gr_immed -3,gr7 ; multiply small numbers
  152. set_gr_immed -2,gr8
  153. set_icc 0xc,0
  154. csmulcc gr7,gr8,gr8,cc0,1
  155. test_icc 0 0 0 0 icc0
  156. test_gr_immed 0,gr8
  157. test_gr_immed 6,gr9
  158. set_gr_immed -1,gr7 ; multiply by 1
  159. set_gr_immed -2,gr8
  160. set_icc 0xd,0
  161. csmulcc gr7,gr8,gr8,cc0,1
  162. test_icc 0 0 0 1 icc0
  163. test_gr_immed 0,gr8
  164. test_gr_immed 2,gr9
  165. set_gr_immed -2,gr7 ; multiply by 1
  166. set_gr_immed -1,gr8
  167. set_icc 0xe,0
  168. csmulcc gr7,gr8,gr8,cc4,1
  169. test_icc 0 0 1 0 icc0
  170. test_gr_immed 0,gr8
  171. test_gr_immed 2,gr9
  172. set_gr_limmed 0xc000,0x0001,gr7 ; 31 bit result
  173. set_gr_immed -2,gr8
  174. set_icc 0xf,0
  175. csmulcc gr7,gr8,gr8,cc4,1
  176. test_icc 0 0 1 1 icc0
  177. test_gr_immed 0,gr8
  178. test_gr_limmed 0x7fff,0xfffe,gr9
  179. set_gr_limmed 0xc000,0x0000,gr7 ; 32 bit result
  180. set_gr_immed -2,gr8
  181. set_icc 0xc,0
  182. csmulcc gr7,gr8,gr8,cc0,1
  183. test_icc 0 0 0 0 icc0
  184. test_gr_immed 0,gr8
  185. test_gr_limmed 0x8000,0x0000,gr9
  186. set_gr_limmed 0xc000,0x0000,gr7 ; 33 bit result
  187. set_gr_immed -4,gr8
  188. set_icc 0xd,0
  189. csmulcc gr7,gr8,gr8,cc0,1
  190. test_icc 0 0 0 1 icc0
  191. test_gr_immed 1,gr8
  192. test_gr_immed 0x00000000,gr9
  193. set_gr_limmed 0x8000,0x0001,gr7 ; almost max positive result
  194. set_gr_limmed 0x8000,0x0001,gr8
  195. set_icc 0xe,0
  196. csmulcc gr7,gr8,gr8,cc4,1
  197. test_icc 0 0 1 0 icc0
  198. test_gr_limmed 0x3fff,0xffff,gr8
  199. test_gr_immed 0x00000001,gr9
  200. set_gr_limmed 0x8000,0x0000,gr7 ; max positive result
  201. set_gr_limmed 0x8000,0x0000,gr8
  202. set_icc 0xf,0
  203. csmulcc gr7,gr8,gr8,cc4,1
  204. test_icc 0 0 1 1 icc0
  205. test_gr_limmed 0x4000,0x0000,gr8
  206. test_gr_immed 0x00000000,gr9
  207. ; Positive operands
  208. set_gr_immed 3,gr7 ; multiply small numbers
  209. set_gr_immed 2,gr8
  210. set_icc 0x0,0
  211. csmulcc gr7,gr8,gr8,cc0,0
  212. test_icc 0 0 0 0 icc0
  213. test_gr_immed 2,gr8
  214. test_gr_immed 0,gr9
  215. set_gr_immed 1,gr7 ; multiply by 1
  216. set_gr_immed 2,gr8
  217. set_icc 0x1,0
  218. csmulcc gr7,gr8,gr8,cc0,0
  219. test_icc 0 0 0 1 icc0
  220. test_gr_immed 2,gr8
  221. test_gr_immed 0,gr9
  222. set_gr_immed 2,gr7 ; multiply by 1
  223. set_gr_immed 1,gr8
  224. set_icc 0x2,0
  225. csmulcc gr7,gr8,gr8,cc4,0
  226. test_icc 0 0 1 0 icc0
  227. test_gr_immed 1,gr8
  228. test_gr_immed 0,gr9
  229. set_gr_immed 0,gr7 ; multiply by 0
  230. set_gr_immed 2,gr8
  231. set_icc 0x3,0
  232. csmulcc gr7,gr8,gr8,cc4,0
  233. test_icc 0 0 1 1 icc0
  234. test_gr_immed 2,gr8
  235. test_gr_immed 0,gr9
  236. set_gr_immed 2,gr7 ; multiply by 0
  237. set_gr_immed 0,gr8
  238. set_icc 0x4,0
  239. csmulcc gr7,gr8,gr8,cc0,0
  240. test_icc 0 1 0 0 icc0
  241. test_gr_immed 0,gr8
  242. test_gr_immed 0,gr9
  243. set_gr_limmed 0x3fff,0xffff,gr7 ; 31 bit result
  244. set_gr_immed 2,gr8
  245. set_icc 0x5,0
  246. csmulcc gr7,gr8,gr8,cc0,0
  247. test_icc 0 1 0 1 icc0
  248. test_gr_immed 2,gr8
  249. test_gr_immed 0,gr9
  250. set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result
  251. set_gr_immed 2,gr8
  252. set_icc 0x6,0
  253. csmulcc gr7,gr8,gr8,cc4,0
  254. test_icc 0 1 1 0 icc0
  255. test_gr_immed 2,gr8
  256. test_gr_immed 0,gr9
  257. set_gr_limmed 0x4000,0x0000,gr7 ; 33 bit result
  258. set_gr_immed 4,gr8
  259. set_icc 0x7,0
  260. csmulcc gr7,gr8,gr8,cc4,0
  261. test_icc 0 1 1 1 icc0
  262. test_gr_immed 4,gr8
  263. test_gr_immed 0,gr9
  264. set_gr_limmed 0x7fff,0xffff,gr7 ; max positive result
  265. set_gr_limmed 0x7fff,0xffff,gr8
  266. set_icc 0x8,0
  267. csmulcc gr7,gr8,gr8,cc0,0
  268. test_icc 1 0 0 0 icc0
  269. test_gr_limmed 0x7fff,0xffff,gr8
  270. test_gr_immed 0,gr9
  271. ; Mixed operands
  272. set_gr_immed -3,gr7 ; multiply small numbers
  273. set_gr_immed 2,gr8
  274. set_icc 0x9,0
  275. csmulcc gr7,gr8,gr8,cc0,0
  276. test_icc 1 0 0 1 icc0
  277. test_gr_immed 2,gr8
  278. test_gr_immed 0,gr9
  279. set_gr_immed 3,gr7 ; multiply small numbers
  280. set_gr_immed -2,gr8
  281. set_icc 0xa,0
  282. csmulcc gr7,gr8,gr8,cc4,0
  283. test_icc 1 0 1 0 icc0
  284. test_gr_immed -2,gr8
  285. test_gr_immed 0,gr9
  286. set_gr_immed 1,gr7 ; multiply by 1
  287. set_gr_immed -2,gr8
  288. set_icc 0xb,0
  289. csmulcc gr7,gr8,gr8,cc4,0
  290. test_icc 1 0 1 1 icc0
  291. test_gr_immed -2,gr8
  292. test_gr_immed 0,gr9
  293. set_gr_immed -2,gr7 ; multiply by 1
  294. set_gr_immed 1,gr8
  295. set_icc 0xc,0
  296. csmulcc gr7,gr8,gr8,cc0,0
  297. test_icc 1 1 0 0 icc0
  298. test_gr_immed 1,gr8
  299. test_gr_immed 0,gr9
  300. set_gr_immed 0,gr7 ; multiply by 0
  301. set_gr_immed -2,gr8
  302. set_icc 0xd,0
  303. csmulcc gr7,gr8,gr8,cc0,0
  304. test_icc 1 1 0 1 icc0
  305. test_gr_immed -2,gr8
  306. test_gr_immed 0,gr9
  307. set_gr_immed -2,gr7 ; multiply by 0
  308. set_gr_immed 0,gr8
  309. set_icc 0xe,0
  310. csmulcc gr7,gr8,gr8,cc4,0
  311. test_icc 1 1 1 0 icc0
  312. test_gr_immed 0,gr8
  313. test_gr_immed 0,gr9
  314. set_gr_limmed 0x2000,0x0001,gr7 ; 31 bit result
  315. set_gr_immed -2,gr8
  316. set_icc 0xf,0
  317. csmulcc gr7,gr8,gr8,cc4,0
  318. test_icc 1 1 1 1 icc0
  319. test_gr_immed -2,gr8
  320. test_gr_immed 0,gr9
  321. set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result
  322. set_gr_immed -2,gr8
  323. set_icc 0x0,0
  324. csmulcc gr7,gr8,gr8,cc0,0
  325. test_icc 0 0 0 0 icc0
  326. test_gr_immed -2,gr8
  327. test_gr_immed 0,gr9
  328. set_gr_limmed 0x4000,0x0001,gr7 ; 32 bit result
  329. set_gr_immed -2,gr8
  330. set_icc 0x1,0
  331. csmulcc gr7,gr8,gr8,cc0,0
  332. test_icc 0 0 0 1 icc0
  333. test_gr_immed -2,gr8
  334. test_gr_immed 0,gr9
  335. set_gr_limmed 0x4000,0x0000,gr7 ; 33 bit result
  336. set_gr_immed -4,gr8
  337. set_icc 0x2,0
  338. csmulcc gr7,gr8,gr8,cc4,0
  339. test_icc 0 0 1 0 icc0
  340. test_gr_immed -4,gr8
  341. test_gr_immed 0,gr9
  342. set_gr_limmed 0x7fff,0xffff,gr7 ; max negative result
  343. set_gr_limmed 0x8000,0x0000,gr8
  344. set_icc 0x3,0
  345. csmulcc gr7,gr8,gr8,cc4,0
  346. test_icc 0 0 1 1 icc0
  347. test_gr_limmed 0x8000,0x0000,gr8
  348. test_gr_immed 0,gr9
  349. ; Negative operands
  350. set_gr_immed -3,gr7 ; multiply small numbers
  351. set_gr_immed -2,gr8
  352. set_icc 0x4,0
  353. csmulcc gr7,gr8,gr8,cc0,0
  354. test_icc 0 1 0 0 icc0
  355. test_gr_immed -2,gr8
  356. test_gr_immed 0,gr9
  357. set_gr_immed -1,gr7 ; multiply by 1
  358. set_gr_immed -2,gr8
  359. set_icc 0x5,0
  360. csmulcc gr7,gr8,gr8,cc0,0
  361. test_icc 0 1 0 1 icc0
  362. test_gr_immed -2,gr8
  363. test_gr_immed 0,gr9
  364. set_gr_immed -2,gr7 ; multiply by 1
  365. set_gr_immed -1,gr8
  366. set_icc 0x6,0
  367. csmulcc gr7,gr8,gr8,cc4,0
  368. test_icc 0 1 1 0 icc0
  369. test_gr_immed -1,gr8
  370. test_gr_immed 0,gr9
  371. set_gr_limmed 0xc000,0x0001,gr7 ; 31 bit result
  372. set_gr_immed -2,gr8
  373. set_icc 0x7,0
  374. csmulcc gr7,gr8,gr8,cc4,0
  375. test_icc 0 1 1 1 icc0
  376. test_gr_immed -2,gr8
  377. test_gr_immed 0,gr9
  378. set_gr_limmed 0xc000,0x0000,gr7 ; 32 bit result
  379. set_gr_immed -2,gr8
  380. set_icc 0x8,0
  381. csmulcc gr7,gr8,gr8,cc0,0
  382. test_icc 1 0 0 0 icc0
  383. test_gr_immed -2,gr8
  384. test_gr_immed 0,gr9
  385. set_gr_limmed 0xc000,0x0000,gr7 ; 33 bit result
  386. set_gr_immed -4,gr8
  387. set_icc 0x9,0
  388. csmulcc gr7,gr8,gr8,cc0,0
  389. test_icc 1 0 0 1 icc0
  390. test_gr_immed -4,gr8
  391. test_gr_immed 0,gr9
  392. set_gr_limmed 0x8000,0x0001,gr7 ; almost max positive result
  393. set_gr_limmed 0x8000,0x0001,gr8
  394. set_icc 0xa,0
  395. csmulcc gr7,gr8,gr8,cc4,0
  396. test_icc 1 0 1 0 icc0
  397. test_gr_limmed 0x8000,0x0001,gr8
  398. test_gr_immed 0,gr9
  399. set_gr_limmed 0x8000,0x0000,gr7 ; max positive result
  400. set_gr_limmed 0x8000,0x0000,gr8
  401. set_icc 0xb,0
  402. csmulcc gr7,gr8,gr8,cc4,0
  403. test_icc 1 0 1 1 icc0
  404. test_gr_limmed 0x8000,0x0000,gr8
  405. test_gr_immed 0,gr9
  406. ; Positive operands
  407. set_gr_immed 3,gr7 ; multiply small numbers
  408. set_gr_immed 2,gr8
  409. set_icc 0xc,1
  410. csmulcc gr7,gr8,gr8,cc1,0
  411. test_icc 0 0 0 0 icc1
  412. test_gr_immed 0,gr8
  413. test_gr_immed 6,gr9
  414. set_gr_immed 1,gr7 ; multiply by 1
  415. set_gr_immed 2,gr8
  416. set_icc 0xd,1
  417. csmulcc gr7,gr8,gr8,cc1,0
  418. test_icc 0 0 0 1 icc1
  419. test_gr_immed 0,gr8
  420. test_gr_immed 2,gr9
  421. set_gr_immed 2,gr7 ; multiply by 1
  422. set_gr_immed 1,gr8
  423. set_icc 0xe,1
  424. csmulcc gr7,gr8,gr8,cc5,0
  425. test_icc 0 0 1 0 icc1
  426. test_gr_immed 0,gr8
  427. test_gr_immed 2,gr9
  428. set_gr_immed 0,gr7 ; multiply by 0
  429. set_gr_immed 2,gr8
  430. set_icc 0xb,1
  431. csmulcc gr7,gr8,gr8,cc5,0
  432. test_icc 0 1 1 1 icc1
  433. test_gr_immed 0,gr8
  434. test_gr_immed 0,gr9
  435. set_gr_immed 2,gr7 ; multiply by 0
  436. set_gr_immed 0,gr8
  437. set_icc 0x8,1
  438. csmulcc gr7,gr8,gr8,cc1,0
  439. test_icc 0 1 0 0 icc1
  440. test_gr_immed 0,gr8
  441. test_gr_immed 0,gr9
  442. set_gr_limmed 0x3fff,0xffff,gr7 ; 31 bit result
  443. set_gr_immed 2,gr8
  444. set_icc 0xd,1
  445. csmulcc gr7,gr8,gr8,cc1,0
  446. test_icc 0 0 0 1 icc1
  447. test_gr_immed 0,gr8
  448. test_gr_limmed 0x7fff,0xfffe,gr9
  449. set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result
  450. set_gr_immed 2,gr8
  451. set_icc 0xe,1
  452. csmulcc gr7,gr8,gr8,cc5,0
  453. test_icc 0 0 1 0 icc1
  454. test_gr_immed 0,gr8
  455. test_gr_limmed 0x8000,0x0000,gr9
  456. set_gr_limmed 0x4000,0x0000,gr7 ; 33 bit result
  457. set_gr_immed 4,gr8
  458. set_icc 0xf,1
  459. csmulcc gr7,gr8,gr8,cc5,0
  460. test_icc 0 0 1 1 icc1
  461. test_gr_immed 1,gr8
  462. test_gr_limmed 0x0000,0x0000,gr9
  463. set_gr_limmed 0x7fff,0xffff,gr7 ; max positive result
  464. set_gr_limmed 0x7fff,0xffff,gr8
  465. set_icc 0xc,1
  466. csmulcc gr7,gr8,gr8,cc1,0
  467. test_icc 0 0 0 0 icc1
  468. test_gr_limmed 0x3fff,0xffff,gr8
  469. test_gr_immed 0x00000001,gr9
  470. ; Mixed operands
  471. set_gr_immed -3,gr7 ; multiply small numbers
  472. set_gr_immed 2,gr8
  473. set_icc 0x5,1
  474. csmulcc gr7,gr8,gr8,cc1,0
  475. test_icc 1 0 0 1 icc1
  476. test_gr_immed -1,gr8
  477. test_gr_immed -6,gr9
  478. set_gr_immed 3,gr7 ; multiply small numbers
  479. set_gr_immed -2,gr8
  480. set_icc 0x6,1
  481. csmulcc gr7,gr8,gr8,cc5,0
  482. test_icc 1 0 1 0 icc1
  483. test_gr_immed -1,gr8
  484. test_gr_immed -6,gr9
  485. set_gr_immed 1,gr7 ; multiply by 1
  486. set_gr_immed -2,gr8
  487. set_icc 0x7,1
  488. csmulcc gr7,gr8,gr8,cc5,0
  489. test_icc 1 0 1 1 icc1
  490. test_gr_immed -1,gr8
  491. test_gr_immed -2,gr9
  492. set_gr_immed -2,gr7 ; multiply by 1
  493. set_gr_immed 1,gr8
  494. set_icc 0x4,1
  495. csmulcc gr7,gr8,gr8,cc1,0
  496. test_icc 1 0 0 0 icc1
  497. test_gr_immed -1,gr8
  498. test_gr_immed -2,gr9
  499. set_gr_immed 0,gr7 ; multiply by 0
  500. set_gr_immed -2,gr8
  501. set_icc 0x9,1
  502. csmulcc gr7,gr8,gr8,cc1,0
  503. test_icc 0 1 0 1 icc1
  504. test_gr_immed 0,gr8
  505. test_gr_immed 0,gr9
  506. set_gr_immed -2,gr7 ; multiply by 0
  507. set_gr_immed 0,gr8
  508. set_icc 0xa,1
  509. csmulcc gr7,gr8,gr8,cc5,0
  510. test_icc 0 1 1 0 icc1
  511. test_gr_immed 0,gr8
  512. test_gr_immed 0,gr9
  513. set_gr_limmed 0x2000,0x0001,gr7 ; 31 bit result
  514. set_gr_immed -2,gr8
  515. set_icc 0x7,1
  516. csmulcc gr7,gr8,gr8,cc5,0
  517. test_icc 1 0 1 1 icc1
  518. test_gr_limmed 0xffff,0xffff,gr8
  519. test_gr_limmed 0xbfff,0xfffe,gr9
  520. set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result
  521. set_gr_immed -2,gr8
  522. set_icc 0x4,1
  523. csmulcc gr7,gr8,gr8,cc1,0
  524. test_icc 1 0 0 0 icc1
  525. test_gr_limmed 0xffff,0xffff,gr8
  526. test_gr_limmed 0x8000,0x0000,gr9
  527. set_gr_limmed 0x4000,0x0001,gr7 ; 32 bit result
  528. set_gr_immed -2,gr8
  529. set_icc 0x5,1
  530. csmulcc gr7,gr8,gr8,cc1,0
  531. test_icc 1 0 0 1 icc1
  532. test_gr_limmed 0xffff,0xffff,gr8
  533. test_gr_limmed 0x7fff,0xfffe,gr9
  534. set_gr_limmed 0x4000,0x0000,gr7 ; 33 bit result
  535. set_gr_immed -4,gr8
  536. set_icc 0x6,1
  537. csmulcc gr7,gr8,gr8,cc5,0
  538. test_icc 1 0 1 0 icc1
  539. test_gr_limmed 0xffff,0xffff,gr8
  540. test_gr_limmed 0x0000,0x0000,gr9
  541. set_gr_limmed 0x7fff,0xffff,gr7 ; max negative result
  542. set_gr_limmed 0x8000,0x0000,gr8
  543. set_icc 0x7,1
  544. csmulcc gr7,gr8,gr8,cc5,0
  545. test_icc 1 0 1 1 icc1
  546. test_gr_limmed 0xc000,0x0000,gr8
  547. test_gr_limmed 0x8000,0x0000,gr9
  548. ; Negative operands
  549. set_gr_immed -3,gr7 ; multiply small numbers
  550. set_gr_immed -2,gr8
  551. set_icc 0xc,1
  552. csmulcc gr7,gr8,gr8,cc1,0
  553. test_icc 0 0 0 0 icc1
  554. test_gr_immed 0,gr8
  555. test_gr_immed 6,gr9
  556. set_gr_immed -1,gr7 ; multiply by 1
  557. set_gr_immed -2,gr8
  558. set_icc 0xd,1
  559. csmulcc gr7,gr8,gr8,cc1,0
  560. test_icc 0 0 0 1 icc1
  561. test_gr_immed 0,gr8
  562. test_gr_immed 2,gr9
  563. set_gr_immed -2,gr7 ; multiply by 1
  564. set_gr_immed -1,gr8
  565. set_icc 0xe,1
  566. csmulcc gr7,gr8,gr8,cc5,0
  567. test_icc 0 0 1 0 icc1
  568. test_gr_immed 0,gr8
  569. test_gr_immed 2,gr9
  570. set_gr_limmed 0xc000,0x0001,gr7 ; 31 bit result
  571. set_gr_immed -2,gr8
  572. set_icc 0xf,1
  573. csmulcc gr7,gr8,gr8,cc5,0
  574. test_icc 0 0 1 1 icc1
  575. test_gr_immed 0,gr8
  576. test_gr_limmed 0x7fff,0xfffe,gr9
  577. set_gr_limmed 0xc000,0x0000,gr7 ; 32 bit result
  578. set_gr_immed -2,gr8
  579. set_icc 0xc,1
  580. csmulcc gr7,gr8,gr8,cc1,0
  581. test_icc 0 0 0 0 icc1
  582. test_gr_immed 0,gr8
  583. test_gr_limmed 0x8000,0x0000,gr9
  584. set_gr_limmed 0xc000,0x0000,gr7 ; 33 bit result
  585. set_gr_immed -4,gr8
  586. set_icc 0xd,1
  587. csmulcc gr7,gr8,gr8,cc1,0
  588. test_icc 0 0 0 1 icc1
  589. test_gr_immed 1,gr8
  590. test_gr_immed 0x00000000,gr9
  591. set_gr_limmed 0x8000,0x0001,gr7 ; almost max positive result
  592. set_gr_limmed 0x8000,0x0001,gr8
  593. set_icc 0xe,1
  594. csmulcc gr7,gr8,gr8,cc5,0
  595. test_icc 0 0 1 0 icc1
  596. test_gr_limmed 0x3fff,0xffff,gr8
  597. test_gr_immed 0x00000001,gr9
  598. set_gr_limmed 0x8000,0x0000,gr7 ; max positive result
  599. set_gr_limmed 0x8000,0x0000,gr8
  600. set_icc 0xf,1
  601. csmulcc gr7,gr8,gr8,cc5,0
  602. test_icc 0 0 1 1 icc1
  603. test_gr_limmed 0x4000,0x0000,gr8
  604. test_gr_immed 0x00000000,gr9
  605. ; Positive operands
  606. set_gr_immed 3,gr7 ; multiply small numbers
  607. set_gr_immed 2,gr8
  608. set_icc 0x0,1
  609. csmulcc gr7,gr8,gr8,cc1,1
  610. test_icc 0 0 0 0 icc1
  611. test_gr_immed 2,gr8
  612. test_gr_immed 0,gr9
  613. set_gr_immed 1,gr7 ; multiply by 1
  614. set_gr_immed 2,gr8
  615. set_icc 0x1,1
  616. csmulcc gr7,gr8,gr8,cc1,1
  617. test_icc 0 0 0 1 icc1
  618. test_gr_immed 2,gr8
  619. test_gr_immed 0,gr9
  620. set_gr_immed 2,gr7 ; multiply by 1
  621. set_gr_immed 1,gr8
  622. set_icc 0x2,1
  623. csmulcc gr7,gr8,gr8,cc5,1
  624. test_icc 0 0 1 0 icc1
  625. test_gr_immed 1,gr8
  626. test_gr_immed 0,gr9
  627. set_gr_immed 0,gr7 ; multiply by 0
  628. set_gr_immed 2,gr8
  629. set_icc 0x3,1
  630. csmulcc gr7,gr8,gr8,cc5,1
  631. test_icc 0 0 1 1 icc1
  632. test_gr_immed 2,gr8
  633. test_gr_immed 0,gr9
  634. set_gr_immed 2,gr7 ; multiply by 0
  635. set_gr_immed 0,gr8
  636. set_icc 0x4,1
  637. csmulcc gr7,gr8,gr8,cc1,1
  638. test_icc 0 1 0 0 icc1
  639. test_gr_immed 0,gr8
  640. test_gr_immed 0,gr9
  641. set_gr_limmed 0x3fff,0xffff,gr7 ; 31 bit result
  642. set_gr_immed 2,gr8
  643. set_icc 0x5,1
  644. csmulcc gr7,gr8,gr8,cc1,1
  645. test_icc 0 1 0 1 icc1
  646. test_gr_immed 2,gr8
  647. test_gr_immed 0,gr9
  648. set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result
  649. set_gr_immed 2,gr8
  650. set_icc 0x6,1
  651. csmulcc gr7,gr8,gr8,cc5,1
  652. test_icc 0 1 1 0 icc1
  653. test_gr_immed 2,gr8
  654. test_gr_immed 0,gr9
  655. set_gr_limmed 0x4000,0x0000,gr7 ; 33 bit result
  656. set_gr_immed 4,gr8
  657. set_icc 0x7,1
  658. csmulcc gr7,gr8,gr8,cc5,1
  659. test_icc 0 1 1 1 icc1
  660. test_gr_immed 4,gr8
  661. test_gr_immed 0,gr9
  662. set_gr_limmed 0x7fff,0xffff,gr7 ; max positive result
  663. set_gr_limmed 0x7fff,0xffff,gr8
  664. set_icc 0x8,1
  665. csmulcc gr7,gr8,gr8,cc1,1
  666. test_icc 1 0 0 0 icc1
  667. test_gr_limmed 0x7fff,0xffff,gr8
  668. test_gr_immed 0,gr9
  669. ; Mixed operands
  670. set_gr_immed -3,gr7 ; multiply small numbers
  671. set_gr_immed 2,gr8
  672. set_icc 0x9,1
  673. csmulcc gr7,gr8,gr8,cc1,1
  674. test_icc 1 0 0 1 icc1
  675. test_gr_immed 2,gr8
  676. test_gr_immed 0,gr9
  677. set_gr_immed 3,gr7 ; multiply small numbers
  678. set_gr_immed -2,gr8
  679. set_icc 0xa,1
  680. csmulcc gr7,gr8,gr8,cc5,1
  681. test_icc 1 0 1 0 icc1
  682. test_gr_immed -2,gr8
  683. test_gr_immed 0,gr9
  684. set_gr_immed 1,gr7 ; multiply by 1
  685. set_gr_immed -2,gr8
  686. set_icc 0xb,1
  687. csmulcc gr7,gr8,gr8,cc5,1
  688. test_icc 1 0 1 1 icc1
  689. test_gr_immed -2,gr8
  690. test_gr_immed 0,gr9
  691. set_gr_immed -2,gr7 ; multiply by 1
  692. set_gr_immed 1,gr8
  693. set_icc 0xc,1
  694. csmulcc gr7,gr8,gr8,cc1,1
  695. test_icc 1 1 0 0 icc1
  696. test_gr_immed 1,gr8
  697. test_gr_immed 0,gr9
  698. set_gr_immed 0,gr7 ; multiply by 0
  699. set_gr_immed -2,gr8
  700. set_icc 0xd,1
  701. csmulcc gr7,gr8,gr8,cc1,1
  702. test_icc 1 1 0 1 icc1
  703. test_gr_immed -2,gr8
  704. test_gr_immed 0,gr9
  705. set_gr_immed -2,gr7 ; multiply by 0
  706. set_gr_immed 0,gr8
  707. set_icc 0xe,1
  708. csmulcc gr7,gr8,gr8,cc5,1
  709. test_icc 1 1 1 0 icc1
  710. test_gr_immed 0,gr8
  711. test_gr_immed 0,gr9
  712. set_gr_limmed 0x2000,0x0001,gr7 ; 31 bit result
  713. set_gr_immed -2,gr8
  714. set_icc 0xf,1
  715. csmulcc gr7,gr8,gr8,cc5,1
  716. test_icc 1 1 1 1 icc1
  717. test_gr_immed -2,gr8
  718. test_gr_immed 0,gr9
  719. set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result
  720. set_gr_immed -2,gr8
  721. set_icc 0x0,1
  722. csmulcc gr7,gr8,gr8,cc1,1
  723. test_icc 0 0 0 0 icc1
  724. test_gr_immed -2,gr8
  725. test_gr_immed 0,gr9
  726. set_gr_limmed 0x4000,0x0001,gr7 ; 32 bit result
  727. set_gr_immed -2,gr8
  728. set_icc 0x1,1
  729. csmulcc gr7,gr8,gr8,cc1,1
  730. test_icc 0 0 0 1 icc1
  731. test_gr_immed -2,gr8
  732. test_gr_immed 0,gr9
  733. set_gr_limmed 0x4000,0x0000,gr7 ; 33 bit result
  734. set_gr_immed -4,gr8
  735. set_icc 0x2,1
  736. csmulcc gr7,gr8,gr8,cc5,1
  737. test_icc 0 0 1 0 icc1
  738. test_gr_immed -4,gr8
  739. test_gr_immed 0,gr9
  740. set_gr_limmed 0x7fff,0xffff,gr7 ; max negative result
  741. set_gr_limmed 0x8000,0x0000,gr8
  742. set_icc 0x3,1
  743. csmulcc gr7,gr8,gr8,cc5,1
  744. test_icc 0 0 1 1 icc1
  745. test_gr_limmed 0x8000,0x0000,gr8
  746. test_gr_immed 0,gr9
  747. ; Negative operands
  748. set_gr_immed -3,gr7 ; multiply small numbers
  749. set_gr_immed -2,gr8
  750. set_icc 0x4,1
  751. csmulcc gr7,gr8,gr8,cc1,1
  752. test_icc 0 1 0 0 icc1
  753. test_gr_immed -2,gr8
  754. test_gr_immed 0,gr9
  755. set_gr_immed -1,gr7 ; multiply by 1
  756. set_gr_immed -2,gr8
  757. set_icc 0x5,1
  758. csmulcc gr7,gr8,gr8,cc1,1
  759. test_icc 0 1 0 1 icc1
  760. test_gr_immed -2,gr8
  761. test_gr_immed 0,gr9
  762. set_gr_immed -2,gr7 ; multiply by 1
  763. set_gr_immed -1,gr8
  764. set_icc 0x6,1
  765. csmulcc gr7,gr8,gr8,cc5,1
  766. test_icc 0 1 1 0 icc1
  767. test_gr_immed -1,gr8
  768. test_gr_immed 0,gr9
  769. set_gr_limmed 0xc000,0x0001,gr7 ; 31 bit result
  770. set_gr_immed -2,gr8
  771. set_icc 0x7,1
  772. csmulcc gr7,gr8,gr8,cc5,1
  773. test_icc 0 1 1 1 icc1
  774. test_gr_immed -2,gr8
  775. test_gr_immed 0,gr9
  776. set_gr_limmed 0xc000,0x0000,gr7 ; 32 bit result
  777. set_gr_immed -2,gr8
  778. set_icc 0x8,1
  779. csmulcc gr7,gr8,gr8,cc1,1
  780. test_icc 1 0 0 0 icc1
  781. test_gr_immed -2,gr8
  782. test_gr_immed 0,gr9
  783. set_gr_limmed 0xc000,0x0000,gr7 ; 33 bit result
  784. set_gr_immed -4,gr8
  785. set_icc 0x9,1
  786. csmulcc gr7,gr8,gr8,cc1,1
  787. test_icc 1 0 0 1 icc1
  788. test_gr_immed -4,gr8
  789. test_gr_immed 0,gr9
  790. set_gr_limmed 0x8000,0x0001,gr7 ; almost max positive result
  791. set_gr_limmed 0x8000,0x0001,gr8
  792. set_icc 0xa,1
  793. csmulcc gr7,gr8,gr8,cc5,1
  794. test_icc 1 0 1 0 icc1
  795. test_gr_limmed 0x8000,0x0001,gr8
  796. test_gr_immed 0,gr9
  797. set_gr_limmed 0x8000,0x0000,gr7 ; max positive result
  798. set_gr_limmed 0x8000,0x0000,gr8
  799. set_icc 0xb,1
  800. csmulcc gr7,gr8,gr8,cc5,1
  801. test_icc 1 0 1 1 icc1
  802. test_gr_limmed 0x8000,0x0000,gr8
  803. test_gr_immed 0,gr9
  804. ; Positive operands
  805. set_gr_immed 3,gr7 ; multiply small numbers
  806. set_gr_immed 2,gr8
  807. set_icc 0x0,2
  808. csmulcc gr7,gr8,gr8,cc2,0
  809. test_icc 0 0 0 0 icc2
  810. test_gr_immed 2,gr8
  811. test_gr_immed 0,gr9
  812. set_gr_immed 1,gr7 ; multiply by 1
  813. set_gr_immed 2,gr8
  814. set_icc 0x1,2
  815. csmulcc gr7,gr8,gr8,cc2,1
  816. test_icc 0 0 0 1 icc2
  817. test_gr_immed 2,gr8
  818. test_gr_immed 0,gr9
  819. set_gr_immed 2,gr7 ; multiply by 1
  820. set_gr_immed 1,gr8
  821. set_icc 0x2,2
  822. csmulcc gr7,gr8,gr8,cc6,0
  823. test_icc 0 0 1 0 icc2
  824. test_gr_immed 1,gr8
  825. test_gr_immed 0,gr9
  826. set_gr_immed 0,gr7 ; multiply by 0
  827. set_gr_immed 2,gr8
  828. set_icc 0x3,2
  829. csmulcc gr7,gr8,gr8,cc6,1
  830. test_icc 0 0 1 1 icc2
  831. test_gr_immed 2,gr8
  832. test_gr_immed 0,gr9
  833. set_gr_immed 2,gr7 ; multiply by 0
  834. set_gr_immed 0,gr8
  835. set_icc 0x4,2
  836. csmulcc gr7,gr8,gr8,cc2,0
  837. test_icc 0 1 0 0 icc2
  838. test_gr_immed 0,gr8
  839. test_gr_immed 0,gr9
  840. set_gr_limmed 0x3fff,0xffff,gr7 ; 31 bit result
  841. set_gr_immed 2,gr8
  842. set_icc 0x5,2
  843. csmulcc gr7,gr8,gr8,cc2,1
  844. test_icc 0 1 0 1 icc2
  845. test_gr_immed 2,gr8
  846. test_gr_immed 0,gr9
  847. set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result
  848. set_gr_immed 2,gr8
  849. set_icc 0x6,2
  850. csmulcc gr7,gr8,gr8,cc6,1
  851. test_icc 0 1 1 0 icc2
  852. test_gr_immed 2,gr8
  853. test_gr_immed 0,gr9
  854. set_gr_limmed 0x4000,0x0000,gr7 ; 33 bit result
  855. set_gr_immed 4,gr8
  856. set_icc 0x7,2
  857. csmulcc gr7,gr8,gr8,cc6,0
  858. test_icc 0 1 1 1 icc2
  859. test_gr_immed 4,gr8
  860. test_gr_immed 0,gr9
  861. set_gr_limmed 0x7fff,0xffff,gr7 ; max positive result
  862. set_gr_limmed 0x7fff,0xffff,gr8
  863. set_icc 0x8,2
  864. csmulcc gr7,gr8,gr8,cc2,1
  865. test_icc 1 0 0 0 icc2
  866. test_gr_limmed 0x7fff,0xffff,gr8
  867. test_gr_immed 0,gr9
  868. ; Mixed operands
  869. set_gr_immed -3,gr7 ; multiply small numbers
  870. set_gr_immed 2,gr8
  871. set_icc 0x9,2
  872. csmulcc gr7,gr8,gr8,cc2,0
  873. test_icc 1 0 0 1 icc2
  874. test_gr_immed 2,gr8
  875. test_gr_immed 0,gr9
  876. set_gr_immed 3,gr7 ; multiply small numbers
  877. set_gr_immed -2,gr8
  878. set_icc 0xa,2
  879. csmulcc gr7,gr8,gr8,cc6,1
  880. test_icc 1 0 1 0 icc2
  881. test_gr_immed -2,gr8
  882. test_gr_immed 0,gr9
  883. set_gr_immed 1,gr7 ; multiply by 1
  884. set_gr_immed -2,gr8
  885. set_icc 0xb,2
  886. csmulcc gr7,gr8,gr8,cc6,0
  887. test_icc 1 0 1 1 icc2
  888. test_gr_immed -2,gr8
  889. test_gr_immed 0,gr9
  890. set_gr_immed -2,gr7 ; multiply by 1
  891. set_gr_immed 1,gr8
  892. set_icc 0xc,2
  893. csmulcc gr7,gr8,gr8,cc2,1
  894. test_icc 1 1 0 0 icc2
  895. test_gr_immed 1,gr8
  896. test_gr_immed 0,gr9
  897. set_gr_immed 0,gr7 ; multiply by 0
  898. set_gr_immed -2,gr8
  899. set_icc 0xd,2
  900. csmulcc gr7,gr8,gr8,cc2,0
  901. test_icc 1 1 0 1 icc2
  902. test_gr_immed -2,gr8
  903. test_gr_immed 0,gr9
  904. set_gr_immed -2,gr7 ; multiply by 0
  905. set_gr_immed 0,gr8
  906. set_icc 0xe,2
  907. csmulcc gr7,gr8,gr8,cc6,1
  908. test_icc 1 1 1 0 icc2
  909. test_gr_immed 0,gr8
  910. test_gr_immed 0,gr9
  911. set_gr_limmed 0x2000,0x0001,gr7 ; 31 bit result
  912. set_gr_immed -2,gr8
  913. set_icc 0xf,2
  914. csmulcc gr7,gr8,gr8,cc6,0
  915. test_icc 1 1 1 1 icc2
  916. test_gr_immed -2,gr8
  917. test_gr_immed 0,gr9
  918. set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result
  919. set_gr_immed -2,gr8
  920. set_icc 0x0,2
  921. csmulcc gr7,gr8,gr8,cc2,1
  922. test_icc 0 0 0 0 icc2
  923. test_gr_immed -2,gr8
  924. test_gr_immed 0,gr9
  925. set_gr_limmed 0x4000,0x0001,gr7 ; 32 bit result
  926. set_gr_immed -2,gr8
  927. set_icc 0x1,2
  928. csmulcc gr7,gr8,gr8,cc2,0
  929. test_icc 0 0 0 1 icc2
  930. test_gr_immed -2,gr8
  931. test_gr_immed 0,gr9
  932. set_gr_limmed 0x4000,0x0000,gr7 ; 33 bit result
  933. set_gr_immed -4,gr8
  934. set_icc 0x2,2
  935. csmulcc gr7,gr8,gr8,cc6,1
  936. test_icc 0 0 1 0 icc2
  937. test_gr_immed -4,gr8
  938. test_gr_immed 0,gr9
  939. set_gr_limmed 0x7fff,0xffff,gr7 ; max negative result
  940. set_gr_limmed 0x8000,0x0000,gr8
  941. set_icc 0x3,2
  942. csmulcc gr7,gr8,gr8,cc6,0
  943. test_icc 0 0 1 1 icc2
  944. test_gr_limmed 0x8000,0x0000,gr8
  945. test_gr_immed 0,gr9
  946. ; Negative operands
  947. set_gr_immed -3,gr7 ; multiply small numbers
  948. set_gr_immed -2,gr8
  949. set_icc 0x4,2
  950. csmulcc gr7,gr8,gr8,cc2,1
  951. test_icc 0 1 0 0 icc2
  952. test_gr_immed -2,gr8
  953. test_gr_immed 0,gr9
  954. set_gr_immed -1,gr7 ; multiply by 1
  955. set_gr_immed -2,gr8
  956. set_icc 0x5,2
  957. csmulcc gr7,gr8,gr8,cc2,0
  958. test_icc 0 1 0 1 icc2
  959. test_gr_immed -2,gr8
  960. test_gr_immed 0,gr9
  961. set_gr_immed -2,gr7 ; multiply by 1
  962. set_gr_immed -1,gr8
  963. set_icc 0x6,2
  964. csmulcc gr7,gr8,gr8,cc6,1
  965. test_icc 0 1 1 0 icc2
  966. test_gr_immed -1,gr8
  967. test_gr_immed 0,gr9
  968. set_gr_limmed 0xc000,0x0001,gr7 ; 31 bit result
  969. set_gr_immed -2,gr8
  970. set_icc 0x7,2
  971. csmulcc gr7,gr8,gr8,cc6,0
  972. test_icc 0 1 1 1 icc2
  973. test_gr_immed -2,gr8
  974. test_gr_immed 0,gr9
  975. set_gr_limmed 0xc000,0x0000,gr7 ; 32 bit result
  976. set_gr_immed -2,gr8
  977. set_icc 0x8,2
  978. csmulcc gr7,gr8,gr8,cc2,1
  979. test_icc 1 0 0 0 icc2
  980. test_gr_immed -2,gr8
  981. test_gr_immed 0,gr9
  982. set_gr_limmed 0xc000,0x0000,gr7 ; 33 bit result
  983. set_gr_immed -4,gr8
  984. set_icc 0x9,2
  985. csmulcc gr7,gr8,gr8,cc2,0
  986. test_icc 1 0 0 1 icc2
  987. test_gr_immed -4,gr8
  988. test_gr_immed 0,gr9
  989. set_gr_limmed 0x8000,0x0001,gr7 ; almost max positive result
  990. set_gr_limmed 0x8000,0x0001,gr8
  991. set_icc 0xa,2
  992. csmulcc gr7,gr8,gr8,cc6,1
  993. test_icc 1 0 1 0 icc2
  994. test_gr_limmed 0x8000,0x0001,gr8
  995. test_gr_immed 0,gr9
  996. set_gr_limmed 0x8000,0x0000,gr7 ; max positive result
  997. set_gr_limmed 0x8000,0x0000,gr8
  998. set_icc 0xb,2
  999. csmulcc gr7,gr8,gr8,cc6,0
  1000. test_icc 1 0 1 1 icc2
  1001. test_gr_limmed 0x8000,0x0000,gr8
  1002. test_gr_immed 0,gr9
  1003. ; Positive operands
  1004. set_gr_immed 3,gr7 ; multiply small numbers
  1005. set_gr_immed 2,gr8
  1006. set_icc 0x0,3
  1007. csmulcc gr7,gr8,gr8,cc3,0
  1008. test_icc 0 0 0 0 icc3
  1009. test_gr_immed 2,gr8
  1010. test_gr_immed 0,gr9
  1011. set_gr_immed 1,gr7 ; multiply by 1
  1012. set_gr_immed 2,gr8
  1013. set_icc 0x1,3
  1014. csmulcc gr7,gr8,gr8,cc3,1
  1015. test_icc 0 0 0 1 icc3
  1016. test_gr_immed 2,gr8
  1017. test_gr_immed 0,gr9
  1018. set_gr_immed 2,gr7 ; multiply by 1
  1019. set_gr_immed 1,gr8
  1020. set_icc 0x2,3
  1021. csmulcc gr7,gr8,gr8,cc7,0
  1022. test_icc 0 0 1 0 icc3
  1023. test_gr_immed 1,gr8
  1024. test_gr_immed 0,gr9
  1025. set_gr_immed 0,gr7 ; multiply by 0
  1026. set_gr_immed 2,gr8
  1027. set_icc 0x3,3
  1028. csmulcc gr7,gr8,gr8,cc7,1
  1029. test_icc 0 0 1 1 icc3
  1030. test_gr_immed 2,gr8
  1031. test_gr_immed 0,gr9
  1032. set_gr_immed 2,gr7 ; multiply by 0
  1033. set_gr_immed 0,gr8
  1034. set_icc 0x4,3
  1035. csmulcc gr7,gr8,gr8,cc3,0
  1036. test_icc 0 1 0 0 icc3
  1037. test_gr_immed 0,gr8
  1038. test_gr_immed 0,gr9
  1039. set_gr_limmed 0x3fff,0xffff,gr7 ; 31 bit result
  1040. set_gr_immed 2,gr8
  1041. set_icc 0x5,3
  1042. csmulcc gr7,gr8,gr8,cc3,1
  1043. test_icc 0 1 0 1 icc3
  1044. test_gr_immed 2,gr8
  1045. test_gr_immed 0,gr9
  1046. set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result
  1047. set_gr_immed 2,gr8
  1048. set_icc 0x6,3
  1049. csmulcc gr7,gr8,gr8,cc7,1
  1050. test_icc 0 1 1 0 icc3
  1051. test_gr_immed 2,gr8
  1052. test_gr_immed 0,gr9
  1053. set_gr_limmed 0x4000,0x0000,gr7 ; 33 bit result
  1054. set_gr_immed 4,gr8
  1055. set_icc 0x7,3
  1056. csmulcc gr7,gr8,gr8,cc7,0
  1057. test_icc 0 1 1 1 icc3
  1058. test_gr_immed 4,gr8
  1059. test_gr_immed 0,gr9
  1060. set_gr_limmed 0x7fff,0xffff,gr7 ; max positive result
  1061. set_gr_limmed 0x7fff,0xffff,gr8
  1062. set_icc 0x8,3
  1063. csmulcc gr7,gr8,gr8,cc3,1
  1064. test_icc 1 0 0 0 icc3
  1065. test_gr_limmed 0x7fff,0xffff,gr8
  1066. test_gr_immed 0,gr9
  1067. ; Mixed operands
  1068. set_gr_immed -3,gr7 ; multiply small numbers
  1069. set_gr_immed 2,gr8
  1070. set_icc 0x9,3
  1071. csmulcc gr7,gr8,gr8,cc3,0
  1072. test_icc 1 0 0 1 icc3
  1073. test_gr_immed 2,gr8
  1074. test_gr_immed 0,gr9
  1075. set_gr_immed 3,gr7 ; multiply small numbers
  1076. set_gr_immed -2,gr8
  1077. set_icc 0xa,3
  1078. csmulcc gr7,gr8,gr8,cc7,1
  1079. test_icc 1 0 1 0 icc3
  1080. test_gr_immed -2,gr8
  1081. test_gr_immed 0,gr9
  1082. set_gr_immed 1,gr7 ; multiply by 1
  1083. set_gr_immed -2,gr8
  1084. set_icc 0xb,3
  1085. csmulcc gr7,gr8,gr8,cc7,0
  1086. test_icc 1 0 1 1 icc3
  1087. test_gr_immed -2,gr8
  1088. test_gr_immed 0,gr9
  1089. set_gr_immed -2,gr7 ; multiply by 1
  1090. set_gr_immed 1,gr8
  1091. set_icc 0xc,3
  1092. csmulcc gr7,gr8,gr8,cc3,1
  1093. test_icc 1 1 0 0 icc3
  1094. test_gr_immed 1,gr8
  1095. test_gr_immed 0,gr9
  1096. set_gr_immed 0,gr7 ; multiply by 0
  1097. set_gr_immed -2,gr8
  1098. set_icc 0xd,3
  1099. csmulcc gr7,gr8,gr8,cc3,0
  1100. test_icc 1 1 0 1 icc3
  1101. test_gr_immed -2,gr8
  1102. test_gr_immed 0,gr9
  1103. set_gr_immed -2,gr7 ; multiply by 0
  1104. set_gr_immed 0,gr8
  1105. set_icc 0xe,3
  1106. csmulcc gr7,gr8,gr8,cc7,1
  1107. test_icc 1 1 1 0 icc3
  1108. test_gr_immed 0,gr8
  1109. test_gr_immed 0,gr9
  1110. set_gr_limmed 0x2000,0x0001,gr7 ; 31 bit result
  1111. set_gr_immed -2,gr8
  1112. set_icc 0xf,3
  1113. csmulcc gr7,gr8,gr8,cc7,0
  1114. test_icc 1 1 1 1 icc3
  1115. test_gr_immed -2,gr8
  1116. test_gr_immed 0,gr9
  1117. set_gr_limmed 0x4000,0x0000,gr7 ; 32 bit result
  1118. set_gr_immed -2,gr8
  1119. set_icc 0x0,3
  1120. csmulcc gr7,gr8,gr8,cc3,1
  1121. test_icc 0 0 0 0 icc3
  1122. test_gr_immed -2,gr8
  1123. test_gr_immed 0,gr9
  1124. set_gr_limmed 0x4000,0x0001,gr7 ; 32 bit result
  1125. set_gr_immed -2,gr8
  1126. set_icc 0x1,3
  1127. csmulcc gr7,gr8,gr8,cc3,0
  1128. test_icc 0 0 0 1 icc3
  1129. test_gr_immed -2,gr8
  1130. test_gr_immed 0,gr9
  1131. set_gr_limmed 0x4000,0x0000,gr7 ; 33 bit result
  1132. set_gr_immed -4,gr8
  1133. set_icc 0x2,3
  1134. csmulcc gr7,gr8,gr8,cc7,1
  1135. test_icc 0 0 1 0 icc3
  1136. test_gr_immed -4,gr8
  1137. test_gr_immed 0,gr9
  1138. set_gr_limmed 0x7fff,0xffff,gr7 ; max negative result
  1139. set_gr_limmed 0x8000,0x0000,gr8
  1140. set_icc 0x3,3
  1141. csmulcc gr7,gr8,gr8,cc7,0
  1142. test_icc 0 0 1 1 icc3
  1143. test_gr_limmed 0x8000,0x0000,gr8
  1144. test_gr_immed 0,gr9
  1145. ; Negative operands
  1146. set_gr_immed -3,gr7 ; multiply small numbers
  1147. set_gr_immed -2,gr8
  1148. set_icc 0x4,3
  1149. csmulcc gr7,gr8,gr8,cc3,1
  1150. test_icc 0 1 0 0 icc3
  1151. test_gr_immed -2,gr8
  1152. test_gr_immed 0,gr9
  1153. set_gr_immed -1,gr7 ; multiply by 1
  1154. set_gr_immed -2,gr8
  1155. set_icc 0x5,3
  1156. csmulcc gr7,gr8,gr8,cc3,0
  1157. test_icc 0 1 0 1 icc3
  1158. test_gr_immed -2,gr8
  1159. test_gr_immed 0,gr9
  1160. set_gr_immed -2,gr7 ; multiply by 1
  1161. set_gr_immed -1,gr8
  1162. set_icc 0x6,3
  1163. csmulcc gr7,gr8,gr8,cc7,1
  1164. test_icc 0 1 1 0 icc3
  1165. test_gr_immed -1,gr8
  1166. test_gr_immed 0,gr9
  1167. set_gr_limmed 0xc000,0x0001,gr7 ; 31 bit result
  1168. set_gr_immed -2,gr8
  1169. set_icc 0x7,3
  1170. csmulcc gr7,gr8,gr8,cc7,0
  1171. test_icc 0 1 1 1 icc3
  1172. test_gr_immed -2,gr8
  1173. test_gr_immed 0,gr9
  1174. set_gr_limmed 0xc000,0x0000,gr7 ; 32 bit result
  1175. set_gr_immed -2,gr8
  1176. set_icc 0x8,3
  1177. csmulcc gr7,gr8,gr8,cc3,1
  1178. test_icc 1 0 0 0 icc3
  1179. test_gr_immed -2,gr8
  1180. test_gr_immed 0,gr9
  1181. set_gr_limmed 0xc000,0x0000,gr7 ; 33 bit result
  1182. set_gr_immed -4,gr8
  1183. set_icc 0x9,3
  1184. csmulcc gr7,gr8,gr8,cc3,0
  1185. test_icc 1 0 0 1 icc3
  1186. test_gr_immed -4,gr8
  1187. test_gr_immed 0,gr9
  1188. set_gr_limmed 0x8000,0x0001,gr7 ; almost max positive result
  1189. set_gr_limmed 0x8000,0x0001,gr8
  1190. set_icc 0xa,3
  1191. csmulcc gr7,gr8,gr8,cc7,1
  1192. test_icc 1 0 1 0 icc3
  1193. test_gr_limmed 0x8000,0x0001,gr8
  1194. test_gr_immed 0,gr9
  1195. set_gr_limmed 0x8000,0x0000,gr7 ; max positive result
  1196. set_gr_limmed 0x8000,0x0000,gr8
  1197. set_icc 0xb,3
  1198. csmulcc gr7,gr8,gr8,cc7,0
  1199. test_icc 1 0 1 1 icc3
  1200. test_gr_limmed 0x8000,0x0000,gr8
  1201. test_gr_immed 0,gr9
  1202. pass