c_dsp32shiftim_ahalf_lp_s.s 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415
  1. //Original:/testcases/core/c_dsp32shiftim_ahalf_lp_s/c_dsp32shiftim_ahalf_lp_s.dsp
  2. // Spec Reference: dspshiftimm dreg_lo(hi) = ashift (dreg_lo(hi) by imm5) saturated
  3. # mach: bfin
  4. .include "testutils.inc"
  5. start
  6. imm32 r0, 0x00100a00;
  7. imm32 r1, 0x00100a01;
  8. imm32 r2, 0x00100a02;
  9. imm32 r3, 0x00100a03;
  10. imm32 r4, 0x00100a04;
  11. imm32 r5, 0x00100a05;
  12. imm32 r6, 0x00100a06;
  13. imm32 r7, 0x00100a07;
  14. R7.L = R0.L << 0 (S);
  15. R0.L = R1.L << 1 (S);
  16. R1.L = R2.L << 2 (S);
  17. R2.L = R3.L << 3 (S);
  18. R3.L = R4.L << 4 (S);
  19. R4.L = R5.L << 5 (S);
  20. R5.L = R6.L << 6 (S);
  21. R6.L = R7.L << 7 (S);
  22. CHECKREG r1, 0x00102808;
  23. CHECKREG r0, 0x00101402;
  24. CHECKREG r2, 0x00105018;
  25. CHECKREG r3, 0x00107FFF;
  26. CHECKREG r4, 0x00107FFF;
  27. CHECKREG r5, 0x00107FFF;
  28. CHECKREG r6, 0x00107FFF;
  29. CHECKREG r7, 0x00100A00;
  30. imm32 r0, 0x00200018;
  31. imm32 r1, 0x00200019;
  32. imm32 r2, 0x0020001a;
  33. imm32 r3, 0x0020001b;
  34. imm32 r4, 0x0020001c;
  35. imm32 r5, 0x0020001d;
  36. imm32 r6, 0x0020001e;
  37. imm32 r7, 0x0020001f;
  38. R2.L = R0.L << 8 (S);
  39. R3.L = R1.L << 9 (S);
  40. R4.L = R2.L << 10 (S);
  41. R5.L = R3.L << 11 (S);
  42. R6.L = R4.L << 12 (S);
  43. R7.L = R5.L << 13 (S);
  44. R0.L = R6.L << 14 (S);
  45. R1.L = R7.L << 15 (S);
  46. CHECKREG r0, 0x00207FFF;
  47. CHECKREG r1, 0x00207FFF;
  48. CHECKREG r2, 0x00201800;
  49. CHECKREG r3, 0x00203200;
  50. CHECKREG r4, 0x00207FFF;
  51. CHECKREG r5, 0x00207FFF;
  52. CHECKREG r6, 0x00207FFF;
  53. CHECKREG r7, 0x00207FFF;
  54. imm32 r0, 0x05002001;
  55. imm32 r1, 0x05002001;
  56. imm32 r2, 0x0500000f;
  57. imm32 r3, 0x05002003;
  58. imm32 r4, 0x05002004;
  59. imm32 r5, 0x05002005;
  60. imm32 r6, 0x05002006;
  61. imm32 r7, 0x05002007;
  62. R3.L = R0.L << 0 (S);
  63. R4.L = R1.L << 1 (S);
  64. R5.L = R2.L << 2 (S);
  65. R6.L = R3.L << 3 (S);
  66. R7.L = R4.L << 4 (S);
  67. R0.L = R5.L << 5 (S);
  68. R1.L = R6.L << 6 (S);
  69. R2.L = R7.L << 7 (S);
  70. CHECKREG r0, 0x05000780;
  71. CHECKREG r1, 0x05007FFF;
  72. CHECKREG r2, 0x05007FFF;
  73. CHECKREG r3, 0x05002001;
  74. CHECKREG r4, 0x05004002;
  75. CHECKREG r5, 0x0500003C;
  76. CHECKREG r6, 0x05007FFF;
  77. CHECKREG r7, 0x05007FFF;
  78. imm32 r0, 0x03000031;
  79. imm32 r1, 0x03000031;
  80. imm32 r2, 0x03000032;
  81. imm32 r3, 0x03000030;
  82. imm32 r4, 0x03000034;
  83. imm32 r5, 0x03000035;
  84. imm32 r6, 0x03000036;
  85. imm32 r7, 0x03000037;
  86. R4.L = R0.L << 8 (S);
  87. R5.L = R1.L << 9 (S);
  88. R6.L = R2.L << 10 (S);
  89. R7.L = R3.L << 11 (S);
  90. R0.L = R4.L << 12 (S);
  91. R1.L = R5.L << 13 (S);
  92. R2.L = R6.L << 14 (S);
  93. R3.L = R7.L << 15 (S);
  94. CHECKREG r0, 0x03007FFF;
  95. CHECKREG r1, 0x03007FFF;
  96. CHECKREG r2, 0x03007FFF;
  97. CHECKREG r3, 0x03007FFF;
  98. CHECKREG r4, 0x03003100;
  99. CHECKREG r5, 0x03006200;
  100. CHECKREG r6, 0x03007FFF;
  101. CHECKREG r7, 0x03007FFF;
  102. // RHx by RLx
  103. imm32 r0, 0x03000000;
  104. imm32 r1, 0x03000000;
  105. imm32 r2, 0x03000000;
  106. imm32 r3, 0x03000000;
  107. imm32 r4, 0x03003100;
  108. imm32 r5, 0x03006200;
  109. imm32 r6, 0x0300C800;
  110. imm32 r7, 0x03008000;
  111. R5.L = R0.H << 0 (S);
  112. R6.L = R1.H << 1 (S);
  113. R7.L = R2.H << 2 (S);
  114. R0.L = R3.H << 3 (S);
  115. R1.L = R4.H << 4 (S);
  116. R2.L = R5.H << 5 (S);
  117. R3.L = R6.H << 6 (S);
  118. R4.L = R7.H << 7 (S);
  119. CHECKREG r0, 0x03001800;
  120. CHECKREG r1, 0x03003000;
  121. CHECKREG r2, 0x03006000;
  122. CHECKREG r3, 0x03007FFF;
  123. CHECKREG r4, 0x03007FFF;
  124. CHECKREG r5, 0x03000300;
  125. CHECKREG r6, 0x03000600;
  126. CHECKREG r7, 0x03000C00;
  127. imm32 r0, 0x05018000;
  128. imm32 r1, 0x05018001;
  129. imm32 r2, 0x05028000;
  130. imm32 r3, 0x05038000;
  131. imm32 r4, 0x05048000;
  132. imm32 r5, 0x05058000;
  133. imm32 r6, 0x05068000;
  134. imm32 r7, 0x05078000;
  135. R6.L = R0.H << 8 (S);
  136. R7.L = R1.H << 9 (S);
  137. R0.L = R2.H << 10 (S);
  138. R1.L = R3.H << 11 (S);
  139. R2.L = R4.H << 12 (S);
  140. R3.L = R5.H << 13 (S);
  141. R4.L = R6.H << 14 (S);
  142. R5.L = R7.H << 15 (S);
  143. CHECKREG r0, 0x05017FFF;
  144. CHECKREG r1, 0x05017FFF;
  145. CHECKREG r2, 0x05027FFF;
  146. CHECKREG r3, 0x05037FFF;
  147. CHECKREG r4, 0x05047FFF;
  148. CHECKREG r5, 0x05057FFF;
  149. CHECKREG r6, 0x05067FFF;
  150. CHECKREG r7, 0x05077FFF;
  151. imm32 r0, 0x60019000;
  152. imm32 r1, 0x60019000;
  153. imm32 r2, 0x6002900f;
  154. imm32 r3, 0x60039000;
  155. imm32 r4, 0x60049000;
  156. imm32 r5, 0x60059000;
  157. imm32 r6, 0x60069000;
  158. imm32 r7, 0x60079000;
  159. R7.L = R0.H << 0 (S);
  160. R0.L = R1.H << 1 (S);
  161. R1.L = R2.H << 2 (S);
  162. R2.L = R3.H << 3 (S);
  163. R3.L = R4.H << 4 (S);
  164. R4.L = R5.H << 5 (S);
  165. R5.L = R6.H << 6 (S);
  166. R6.L = R7.H << 7 (S);
  167. CHECKREG r0, 0x60017FFF;
  168. CHECKREG r1, 0x60017FFF;
  169. CHECKREG r2, 0x60027FFF;
  170. CHECKREG r3, 0x60037FFF;
  171. CHECKREG r4, 0x60047FFF;
  172. CHECKREG r5, 0x60057FFF;
  173. CHECKREG r6, 0x60067FFF;
  174. CHECKREG r7, 0x60076001;
  175. imm32 r0, 0x70010001;
  176. imm32 r1, 0x70010001;
  177. imm32 r2, 0x70020002;
  178. imm32 r3, 0x77030010;
  179. imm32 r4, 0x70040004;
  180. imm32 r5, 0x70050005;
  181. imm32 r6, 0x70060006;
  182. imm32 r7, 0x70070007;
  183. R0.L = R0.H << 8 (S);
  184. R1.L = R1.H << 9 (S);
  185. R2.L = R2.H << 10 (S);
  186. R3.L = R3.H << 11 (S);
  187. R4.L = R4.H << 12 (S);
  188. R5.L = R5.H << 13 (S);
  189. R6.L = R6.H << 14 (S);
  190. R7.L = R7.H << 15 (S);
  191. CHECKREG r0, 0x70017FFF;
  192. CHECKREG r1, 0x70017FFF;
  193. CHECKREG r2, 0x70027FFF;
  194. CHECKREG r3, 0x77037FFF;
  195. CHECKREG r4, 0x70047FFF;
  196. CHECKREG r5, 0x70057FFF;
  197. CHECKREG r6, 0x70067FFF;
  198. CHECKREG r7, 0x70077FFF;
  199. // d_hi = lshft (d_lo BY d_lo)
  200. // RLx by RLx
  201. imm32 r0, 0xa8000000;
  202. imm32 r1, 0xa8000001;
  203. imm32 r2, 0xa8000002;
  204. imm32 r3, 0xa8000003;
  205. imm32 r4, 0xa8000004;
  206. imm32 r5, 0xa8000005;
  207. imm32 r6, 0xa8000006;
  208. imm32 r7, 0xa8000007;
  209. R0.H = R0.L << 0 (S);
  210. R1.H = R1.L << 1 (S);
  211. R2.H = R2.L << 2 (S);
  212. R3.H = R3.L << 3 (S);
  213. R4.H = R4.L << 4 (S);
  214. R5.H = R5.L << 5 (S);
  215. R6.H = R6.L << 6 (S);
  216. R7.H = R7.L << 7 (S);
  217. CHECKREG r0, 0x00000000;
  218. CHECKREG r1, 0x00020001;
  219. CHECKREG r2, 0x00080002;
  220. CHECKREG r3, 0x00180003;
  221. CHECKREG r4, 0x00400004;
  222. CHECKREG r5, 0x00A00005;
  223. CHECKREG r6, 0x01800006;
  224. CHECKREG r7, 0x03800007;
  225. imm32 r0, 0xf0090001;
  226. imm32 r1, 0xf0090001;
  227. imm32 r2, 0xf0090002;
  228. imm32 r3, 0xf0090003;
  229. imm32 r4, 0xf0090004;
  230. imm32 r5, 0xf0090005;
  231. imm32 r6, 0xf0000006;
  232. imm32 r7, 0xf0000007;
  233. R1.H = R0.L << 8 (S);
  234. R2.H = R1.L << 9 (S);
  235. R3.H = R2.L << 10 (S);
  236. R4.H = R3.L << 11 (S);
  237. R5.H = R4.L << 12 (S);
  238. R6.H = R5.L << 13 (S);
  239. R7.H = R6.L << 14 (S);
  240. R0.H = R7.L << 15 (S);
  241. CHECKREG r1, 0x01000001;
  242. CHECKREG r2, 0x02000002;
  243. CHECKREG r3, 0x08000003;
  244. CHECKREG r4, 0x18000004;
  245. CHECKREG r5, 0x40000005;
  246. CHECKREG r6, 0x7FFF0006;
  247. CHECKREG r7, 0x7FFF0007;
  248. CHECKREG r0, 0x7FFF0001;
  249. imm32 r0, 0x07000001;
  250. imm32 r1, 0x07000001;
  251. imm32 r2, 0x0700000f;
  252. imm32 r3, 0x07000003;
  253. imm32 r4, 0x07000004;
  254. imm32 r5, 0x07000005;
  255. imm32 r6, 0x07000006;
  256. imm32 r7, 0x07000007;
  257. R3.H = R0.L << 0 (S);
  258. R4.H = R1.L << 1 (S);
  259. R5.H = R2.L << 2 (S);
  260. R6.H = R3.L << 3 (S);
  261. R7.H = R4.L << 4 (S);
  262. R0.H = R5.L << 5 (S);
  263. R1.H = R6.L << 6 (S);
  264. R2.H = R7.L << 7 (S);
  265. CHECKREG r0, 0x00A00001;
  266. CHECKREG r1, 0x01800001;
  267. CHECKREG r2, 0x0380000F;
  268. CHECKREG r3, 0x00010003;
  269. CHECKREG r4, 0x00020004;
  270. CHECKREG r5, 0x003C0005;
  271. CHECKREG r6, 0x00180006;
  272. CHECKREG r7, 0x00400007;
  273. imm32 r0, 0x00000501;
  274. imm32 r1, 0x00000501;
  275. imm32 r2, 0x00000502;
  276. imm32 r3, 0x00000510;
  277. imm32 r4, 0x00000504;
  278. imm32 r5, 0x00000505;
  279. imm32 r6, 0x00000506;
  280. imm32 r7, 0x00000507;
  281. R4.H = R0.L << 8 (S);
  282. R5.H = R1.L << 9 (S);
  283. R6.H = R2.L << 10 (S);
  284. R7.H = R3.L << 11 (S);
  285. R0.H = R4.L << 12 (S);
  286. R1.H = R5.L << 13 (S);
  287. R2.H = R6.L << 14 (S);
  288. R3.H = R7.L << 15 (S);
  289. CHECKREG r0, 0x7FFF0501;
  290. CHECKREG r1, 0x7FFF0501;
  291. CHECKREG r2, 0x7FFF0502;
  292. CHECKREG r3, 0x7FFF0510;
  293. CHECKREG r4, 0x7FFF0504;
  294. CHECKREG r5, 0x7FFF0505;
  295. CHECKREG r6, 0x7FFF0506;
  296. CHECKREG r7, 0x7FFF0507;
  297. imm32 r0, 0x00a00800;
  298. imm32 r1, 0x00a10800;
  299. imm32 r2, 0x00a20800;
  300. imm32 r3, 0x00a30800;
  301. imm32 r4, 0x00a40800;
  302. imm32 r5, 0x00a50800;
  303. imm32 r6, 0x00a60800;
  304. imm32 r7, 0x00a70800;
  305. R5.H = R0.H << 0 (S);
  306. R6.H = R1.H << 1 (S);
  307. R7.H = R2.H << 2 (S);
  308. R0.H = R3.H << 3 (S);
  309. R1.H = R4.H << 4 (S);
  310. R2.H = R5.H << 5 (S);
  311. R3.H = R6.H << 6 (S);
  312. R4.H = R7.H << 7 (S);
  313. CHECKREG r0, 0x05180800;
  314. CHECKREG r1, 0x0A400800;
  315. CHECKREG r2, 0x14000800;
  316. CHECKREG r3, 0x50800800;
  317. CHECKREG r4, 0x7FFF0800;
  318. CHECKREG r5, 0x00A00800;
  319. CHECKREG r6, 0x01420800;
  320. CHECKREG r7, 0x02880800;
  321. imm32 r0, 0x0c010000;
  322. imm32 r1, 0x0c010001;
  323. imm32 r2, 0x0c020000;
  324. imm32 r3, 0x0c030000;
  325. imm32 r4, 0x0c040000;
  326. imm32 r5, 0x0c050000;
  327. imm32 r6, 0x0c060000;
  328. imm32 r7, 0x0c070000;
  329. R6.H = R0.H << 8 (S);
  330. R7.H = R1.H << 9 (S);
  331. R0.H = R2.H << 10 (S);
  332. R1.H = R3.H << 11 (S);
  333. R2.H = R4.H << 12 (S);
  334. R3.H = R5.H << 13 (S);
  335. R4.H = R6.H << 14 (S);
  336. R5.H = R7.H << 15 (S);
  337. CHECKREG r0, 0x7FFF0000;
  338. CHECKREG r1, 0x7FFF0001;
  339. CHECKREG r2, 0x7FFF0000;
  340. CHECKREG r3, 0x7FFF0000;
  341. CHECKREG r4, 0x7FFF0000;
  342. CHECKREG r5, 0x7FFF0000;
  343. CHECKREG r6, 0x7FFF0000;
  344. CHECKREG r7, 0x7FFF0000;
  345. imm32 r0, 0x00b10000;
  346. imm32 r1, 0x00b10000;
  347. imm32 r2, 0x00b2000f;
  348. imm32 r3, 0x00b30000;
  349. imm32 r4, 0x00b40000;
  350. imm32 r5, 0x00b50000;
  351. imm32 r6, 0x00b60000;
  352. imm32 r7, 0x00b70000;
  353. R7.L = R0.H << 0 (S);
  354. R0.L = R1.H << 1 (S);
  355. R1.L = R2.H << 2 (S);
  356. R2.L = R3.H << 3 (S);
  357. R3.L = R4.H << 4 (S);
  358. R4.L = R5.H << 5 (S);
  359. R5.L = R6.H << 6 (S);
  360. R6.L = R7.H << 7 (S);
  361. CHECKREG r0, 0x00B10162;
  362. CHECKREG r1, 0x00B102C8;
  363. CHECKREG r2, 0x00B20598;
  364. CHECKREG r3, 0x00B30B40;
  365. CHECKREG r4, 0x00B416A0;
  366. CHECKREG r5, 0x00B52D80;
  367. CHECKREG r6, 0x00B65B80;
  368. CHECKREG r7, 0x00B700B1;
  369. imm32 r0, 0x0a010700;
  370. imm32 r1, 0x0a010700;
  371. imm32 r2, 0x0a020700;
  372. imm32 r3, 0x0a030710;
  373. imm32 r4, 0x0a040700;
  374. imm32 r5, 0x0a050700;
  375. imm32 r6, 0x0a060700;
  376. imm32 r7, 0x0a070700;
  377. R0.H = R0.H << 8 (S);
  378. R1.H = R1.H << 9 (S);
  379. R2.H = R2.H << 10 (S);
  380. R3.H = R3.H << 11 (S);
  381. R4.H = R4.H << 12 (S);
  382. R5.H = R5.H << 13 (S);
  383. R6.H = R6.H << 14 (S);
  384. R7.H = R7.H << 15 (S);
  385. CHECKREG r0, 0x7FFF0700;
  386. CHECKREG r1, 0x7FFF0700;
  387. CHECKREG r2, 0x7FFF0700;
  388. CHECKREG r3, 0x7FFF0710;
  389. CHECKREG r4, 0x7FFF0700;
  390. CHECKREG r5, 0x7FFF0700;
  391. CHECKREG r6, 0x7FFF0700;
  392. CHECKREG r7, 0x7FFF0700;
  393. pass