c_dsp32shift_lhalf_rp.s 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423
  1. //Original:/testcases/core/c_dsp32shift_lhalf_rp/c_dsp32shift_lhalf_rp.dsp
  2. // Spec Reference: dsp32shift lshift
  3. # mach: bfin
  4. .include "testutils.inc"
  5. start
  6. // lshift : positive data, count (+)=left (half reg)
  7. // d_lo = lshift (d_lo BY d_lo)
  8. // RLx by RLx
  9. imm32 r0, 0x00000000;
  10. R0.L = -1;
  11. imm32 r1, 0x00000001;
  12. imm32 r2, 0x00000002;
  13. imm32 r3, 0x00000003;
  14. imm32 r4, 0x00000004;
  15. imm32 r5, 0x00000005;
  16. imm32 r6, 0x00000006;
  17. imm32 r7, 0x00000007;
  18. //rl0 = lshift (rl0 by rl0);
  19. R1.L = LSHIFT R1.L BY R0.L;
  20. R2.L = LSHIFT R2.L BY R0.L;
  21. R3.L = LSHIFT R3.L BY R0.L;
  22. R4.L = LSHIFT R4.L BY R0.L;
  23. R5.L = LSHIFT R5.L BY R0.L;
  24. R6.L = LSHIFT R6.L BY R0.L;
  25. R7.L = LSHIFT R7.L BY R0.L;
  26. //CHECKREG r0, 0x00000000;
  27. CHECKREG r1, 0x00000000;
  28. CHECKREG r2, 0x00000001;
  29. CHECKREG r3, 0x00000001;
  30. CHECKREG r4, 0x00000002;
  31. CHECKREG r5, 0x00000002;
  32. CHECKREG r6, 0x00000003;
  33. CHECKREG r7, 0x00000003;
  34. imm32 r0, 0x00001001;
  35. R1.L = -1;
  36. imm32 r2, 0x00002002;
  37. imm32 r3, 0x00003003;
  38. imm32 r4, 0x00004004;
  39. imm32 r5, 0x00005005;
  40. imm32 r6, 0x00006006;
  41. imm32 r7, 0x00007007;
  42. R0.L = LSHIFT R0.L BY R1.L;
  43. //rl1 = lshift (rl1 by rl1);
  44. R2.L = LSHIFT R2.L BY R1.L;
  45. R3.L = LSHIFT R3.L BY R1.L;
  46. R4.L = LSHIFT R4.L BY R1.L;
  47. R5.L = LSHIFT R5.L BY R1.L;
  48. R6.L = LSHIFT R6.L BY R1.L;
  49. R7.L = LSHIFT R7.L BY R1.L;
  50. CHECKREG r0, 0x00000800;
  51. //CHECKREG r1, 0x00000001;
  52. CHECKREG r2, 0x00001001;
  53. CHECKREG r3, 0x00001801;
  54. CHECKREG r4, 0x00002002;
  55. CHECKREG r5, 0x00002802;
  56. CHECKREG r6, 0x00003003;
  57. CHECKREG r7, 0x00003803;
  58. imm32 r0, 0x00001001;
  59. imm32 r1, 0x00001001;
  60. R2.L = -15;
  61. imm32 r3, 0x00003003;
  62. imm32 r4, 0x00004004;
  63. imm32 r5, 0x00005005;
  64. imm32 r6, 0x00006006;
  65. imm32 r7, 0x00007007;
  66. R0.L = LSHIFT R0.L BY R2.L;
  67. R1.L = LSHIFT R1.L BY R2.L;
  68. //rl2 = lshift (rl2 by rl2);
  69. R3.L = LSHIFT R3.L BY R2.L;
  70. R4.L = LSHIFT R4.L BY R2.L;
  71. R5.L = LSHIFT R5.L BY R2.L;
  72. R6.L = LSHIFT R6.L BY R2.L;
  73. R7.L = LSHIFT R7.L BY R2.L;
  74. CHECKREG r0, 0x00000000;
  75. CHECKREG r1, 0x00000000;
  76. //CHECKREG r2, 0x0000000f;
  77. CHECKREG r3, 0x00000000;
  78. CHECKREG r4, 0x00000000;
  79. CHECKREG r5, 0x00000000;
  80. CHECKREG r6, 0x00000000;
  81. CHECKREG r7, 0x00000000;
  82. imm32 r0, 0x00001001;
  83. imm32 r1, 0x00001001;
  84. imm32 r2, 0x00002002;
  85. R3.L = -16;
  86. imm32 r4, 0x00004004;
  87. imm32 r5, 0x00005005;
  88. imm32 r6, 0x00006006;
  89. imm32 r7, 0x00007007;
  90. R0.L = LSHIFT R0.L BY R3.L;
  91. R1.L = LSHIFT R1.L BY R3.L;
  92. R2.L = LSHIFT R2.L BY R3.L;
  93. //rl3 = lshift (rl3 by rl3);
  94. R4.L = LSHIFT R4.L BY R3.L;
  95. R5.L = LSHIFT R5.L BY R3.L;
  96. R6.L = LSHIFT R6.L BY R3.L;
  97. R7.L = LSHIFT R7.L BY R3.L;
  98. CHECKREG r0, 0x00000000;
  99. CHECKREG r1, 0x00000000;
  100. CHECKREG r2, 0x00000000;
  101. //CHECKREG r3, 0x00000010;
  102. CHECKREG r4, 0x00000000;
  103. CHECKREG r5, 0x00000000;
  104. CHECKREG r6, 0x00000000;
  105. CHECKREG r7, 0x00000000;
  106. // d_lo = ashft (d_hi BY d_lo)
  107. // RHx by RLx
  108. imm32 r0, 0x00000000;
  109. imm32 r1, 0x00010000;
  110. imm32 r2, 0x00020000;
  111. imm32 r3, 0x00030000;
  112. imm32 r4, 0x00040000;
  113. imm32 r5, 0x00050000;
  114. imm32 r6, 0x00060000;
  115. imm32 r7, 0x00070000;
  116. R0.L = LSHIFT R0.H BY R0.L;
  117. R1.L = LSHIFT R1.H BY R0.L;
  118. R2.L = LSHIFT R2.H BY R0.L;
  119. R3.L = LSHIFT R3.H BY R0.L;
  120. R4.L = LSHIFT R4.H BY R0.L;
  121. R5.L = LSHIFT R5.H BY R0.L;
  122. R6.L = LSHIFT R6.H BY R0.L;
  123. R7.L = LSHIFT R7.H BY R0.L;
  124. CHECKREG r0, 0x00000000;
  125. CHECKREG r1, 0x00010001;
  126. CHECKREG r2, 0x00020002;
  127. CHECKREG r3, 0x00030003;
  128. CHECKREG r4, 0x00040004;
  129. CHECKREG r5, 0x00050005;
  130. CHECKREG r6, 0x00060006;
  131. CHECKREG r7, 0x00070007;
  132. imm32 r0, 0x10010000;
  133. R1.L = -1;
  134. imm32 r2, 0x20020000;
  135. imm32 r3, 0x30030000;
  136. imm32 r4, 0x40040000;
  137. imm32 r5, 0x50050000;
  138. imm32 r6, 0x60060000;
  139. imm32 r7, 0x70070000;
  140. R0.L = LSHIFT R0.H BY R1.L;
  141. //rl1 = lshift (rh1 by rl1);
  142. R2.L = LSHIFT R2.H BY R1.L;
  143. R3.L = LSHIFT R3.H BY R1.L;
  144. R4.L = LSHIFT R4.H BY R1.L;
  145. R5.L = LSHIFT R5.H BY R1.L;
  146. R6.L = LSHIFT R6.H BY R1.L;
  147. R7.L = LSHIFT R7.H BY R1.L;
  148. CHECKREG r0, 0x10010800;
  149. //CHECKREG r1, 0x00010001;
  150. CHECKREG r2, 0x20021001;
  151. CHECKREG r3, 0x30031801;
  152. CHECKREG r4, 0x40042002;
  153. CHECKREG r5, 0x50052802;
  154. CHECKREG r6, 0x60063003;
  155. CHECKREG r7, 0x70073803;
  156. imm32 r0, 0x10010000;
  157. imm32 r1, 0x10010000;
  158. R2.L = -15;
  159. imm32 r3, 0x30030000;
  160. imm32 r4, 0x40040000;
  161. imm32 r5, 0x50050000;
  162. imm32 r6, 0x60060000;
  163. imm32 r7, 0x70070000;
  164. R0.L = LSHIFT R0.H BY R2.L;
  165. R1.L = LSHIFT R1.H BY R2.L;
  166. //rl2 = lshift (rh2 by rl2);
  167. R3.L = LSHIFT R3.H BY R2.L;
  168. R4.L = LSHIFT R4.H BY R2.L;
  169. R5.L = LSHIFT R5.H BY R2.L;
  170. R6.L = LSHIFT R6.H BY R2.L;
  171. R7.L = LSHIFT R7.H BY R2.L;
  172. CHECKREG r0, 0x10010000;
  173. CHECKREG r1, 0x10010000;
  174. //CHECKREG r2, 0x2002000f;
  175. CHECKREG r3, 0x30030000;
  176. CHECKREG r4, 0x40040000;
  177. CHECKREG r5, 0x50050000;
  178. CHECKREG r6, 0x60060000;
  179. CHECKREG r7, 0x70070000;
  180. imm32 r0, 0x10010001;
  181. imm32 r1, 0x10010001;
  182. imm32 r2, 0x20020002;
  183. R3.L = -16;
  184. imm32 r4, 0x40040004;
  185. imm32 r5, 0x50050005;
  186. imm32 r6, 0x60060006;
  187. imm32 r7, 0x70070007;
  188. R0.L = LSHIFT R0.H BY R3.L;
  189. R1.L = LSHIFT R1.H BY R3.L;
  190. R2.L = LSHIFT R2.H BY R3.L;
  191. //rl3 = lshift (rh3 by rl3);
  192. R4.L = LSHIFT R4.H BY R3.L;
  193. R5.L = LSHIFT R5.H BY R3.L;
  194. R6.L = LSHIFT R6.H BY R3.L;
  195. R7.L = LSHIFT R7.H BY R3.L;
  196. CHECKREG r0, 0x10010000;
  197. CHECKREG r1, 0x10010000;
  198. CHECKREG r2, 0x20020000;
  199. //CHECKREG r3, 0x30030010;
  200. CHECKREG r4, 0x40040000;
  201. CHECKREG r5, 0x50050000;
  202. CHECKREG r6, 0x60060000;
  203. CHECKREG r7, 0x70070000;
  204. // d_hi = ashft (d_lo BY d_lo)
  205. // RLx by RLx
  206. imm32 r0, 0x00000001;
  207. imm32 r1, 0x00000001;
  208. imm32 r2, 0x00000002;
  209. imm32 r3, 0x00000003;
  210. imm32 r4, 0x00000000;
  211. imm32 r5, 0x00000005;
  212. imm32 r6, 0x00000006;
  213. imm32 r7, 0x00000007;
  214. R0.H = LSHIFT R0.L BY R4.L;
  215. R1.H = LSHIFT R1.L BY R4.L;
  216. R2.H = LSHIFT R2.L BY R4.L;
  217. R3.H = LSHIFT R3.L BY R4.L;
  218. //rh4 = lshift (rl4 by rl4);
  219. R5.H = LSHIFT R5.L BY R4.L;
  220. R6.H = LSHIFT R6.L BY R4.L;
  221. R7.H = LSHIFT R7.L BY R4.L;
  222. CHECKREG r0, 0x00010001;
  223. CHECKREG r1, 0x00010001;
  224. CHECKREG r2, 0x00020002;
  225. CHECKREG r3, 0x00030003;
  226. //CHECKREG r4, 0x00040004;
  227. CHECKREG r5, 0x00050005;
  228. CHECKREG r6, 0x00060006;
  229. CHECKREG r7, 0x00070007;
  230. imm32 r0, 0x00000001;
  231. imm32 r1, 0x00000001;
  232. imm32 r2, 0x00000002;
  233. imm32 r3, 0x00000003;
  234. imm32 r4, 0x00000004;
  235. R5.L = -1;
  236. imm32 r6, 0x00000006;
  237. imm32 r7, 0x00000007;
  238. R0.H = LSHIFT R0.L BY R5.L;
  239. R1.H = LSHIFT R1.L BY R5.L;
  240. R2.H = LSHIFT R2.L BY R5.L;
  241. R3.H = LSHIFT R3.L BY R5.L;
  242. R4.H = LSHIFT R4.L BY R5.L;
  243. //rh5 = lshift (rl5 by rl5);
  244. R6.H = LSHIFT R6.L BY R5.L;
  245. R7.H = LSHIFT R7.L BY R5.L;
  246. CHECKREG r0, 0x00000001;
  247. CHECKREG r1, 0x00000001;
  248. CHECKREG r2, 0x00010002;
  249. CHECKREG r3, 0x00010003;
  250. CHECKREG r4, 0x00020004;
  251. //CHECKREG r5, 0x00020005;
  252. CHECKREG r6, 0x00030006;
  253. CHECKREG r7, 0x00030007;
  254. imm32 r0, 0x00001001;
  255. imm32 r1, 0x00001001;
  256. imm32 r1, 0x00002002;
  257. imm32 r3, 0x00003003;
  258. imm32 r4, 0x00004004;
  259. imm32 r5, 0x00005005;
  260. R6.L = -15;
  261. imm32 r7, 0x00007007;
  262. R0.H = LSHIFT R0.L BY R6.L;
  263. R1.H = LSHIFT R1.L BY R6.L;
  264. R2.H = LSHIFT R2.L BY R6.L;
  265. R3.H = LSHIFT R3.L BY R6.L;
  266. R4.H = LSHIFT R4.L BY R6.L;
  267. R5.H = LSHIFT R5.L BY R6.L;
  268. //rh6 = lshift (rl6 by rl6);
  269. R7.H = LSHIFT R7.L BY R6.L;
  270. CHECKREG r0, 0x00001001;
  271. CHECKREG r1, 0x00002002;
  272. CHECKREG r2, 0x00000002;
  273. CHECKREG r3, 0x00003003;
  274. CHECKREG r4, 0x00004004;
  275. CHECKREG r5, 0x00005005;
  276. //CHECKREG r6, 0x00006006;
  277. CHECKREG r7, 0x00007007;
  278. imm32 r0, 0x00001001;
  279. imm32 r1, 0x00002001;
  280. imm32 r2, 0x00002002;
  281. imm32 r3, 0x00003003;
  282. imm32 r4, 0x00004004;
  283. imm32 r5, 0x00005005;
  284. imm32 r6, 0x00006006;
  285. R7.L = -16;
  286. R0.H = LSHIFT R0.L BY R7.L;
  287. R1.H = LSHIFT R1.L BY R7.L;
  288. R2.H = LSHIFT R2.L BY R7.L;
  289. R3.H = LSHIFT R3.L BY R7.L;
  290. R4.H = LSHIFT R4.L BY R7.L;
  291. R5.H = LSHIFT R5.L BY R7.L;
  292. R6.H = LSHIFT R6.L BY R7.L;
  293. R7.H = LSHIFT R7.L BY R7.L;
  294. CHECKREG r0, 0x00001001;
  295. CHECKREG r1, 0x00002001;
  296. CHECKREG r2, 0x00002002;
  297. CHECKREG r3, 0x00003003;
  298. CHECKREG r4, 0x00004004;
  299. CHECKREG r5, 0x00005005;
  300. CHECKREG r6, 0x00006006;
  301. //CHECKREG r7, 0x00007007;
  302. // d_lo = ashft (d_hi BY d_lo)
  303. // RHx by RLx
  304. imm32 r0, 0x00010000;
  305. imm32 r1, 0x00010000;
  306. imm32 r2, 0x00020000;
  307. imm32 r3, 0x00030000;
  308. R4.L = -1;
  309. imm32 r5, 0x00050000;
  310. imm32 r6, 0x00060000;
  311. imm32 r7, 0x00070000;
  312. R0.H = LSHIFT R0.H BY R4.L;
  313. R1.H = LSHIFT R1.H BY R4.L;
  314. R2.H = LSHIFT R2.H BY R4.L;
  315. R3.H = LSHIFT R3.H BY R4.L;
  316. //rh4 = lshift (rh4 by rl4);
  317. R5.H = LSHIFT R5.H BY R4.L;
  318. R6.H = LSHIFT R6.H BY R4.L;
  319. R7.H = LSHIFT R7.H BY R4.L;
  320. CHECKREG r0, 0x00000000;
  321. CHECKREG r1, 0x00000000;
  322. CHECKREG r2, 0x00010000;
  323. CHECKREG r3, 0x00010000;
  324. //CHECKREG r4, 0x00020000;
  325. CHECKREG r5, 0x00020000;
  326. CHECKREG r6, 0x00030000;
  327. CHECKREG r7, 0x00030000;
  328. imm32 r0, 0x10010000;
  329. imm32 r1, 0x10010000;
  330. imm32 r2, 0x20020000;
  331. imm32 r3, 0x30030000;
  332. imm32 r4, 0x40040000;
  333. R5.L = -1;
  334. imm32 r6, 0x60060000;
  335. imm32 r7, 0x70070000;
  336. R0.H = LSHIFT R0.H BY R5.L;
  337. R1.H = LSHIFT R1.H BY R5.L;
  338. R2.H = LSHIFT R2.H BY R5.L;
  339. R3.H = LSHIFT R3.H BY R5.L;
  340. R4.H = LSHIFT R4.H BY R5.L;
  341. //rh5 = lshift (rh5 by rl5);
  342. R6.H = LSHIFT R6.H BY R5.L;
  343. R7.H = LSHIFT R7.H BY R5.L;
  344. CHECKREG r0, 0x08000000;
  345. CHECKREG r1, 0x08000000;
  346. CHECKREG r2, 0x10010000;
  347. CHECKREG r3, 0x18010000;
  348. CHECKREG r4, 0x20020000;
  349. //CHECKREG r5, 0x28020000;
  350. CHECKREG r6, 0x30030000;
  351. CHECKREG r7, 0x38030000;
  352. imm32 r0, 0x10010000;
  353. imm32 r1, 0x10010000;
  354. imm32 r2, 0x20020000;
  355. imm32 r3, 0x30030000;
  356. imm32 r4, 0x40040000;
  357. imm32 r5, 0x50050000;
  358. R6.L = -15;
  359. imm32 r7, 0x70070000;
  360. R0.L = LSHIFT R0.H BY R6.L;
  361. R1.L = LSHIFT R1.H BY R6.L;
  362. R2.L = LSHIFT R2.H BY R6.L;
  363. R3.L = LSHIFT R3.H BY R6.L;
  364. R4.L = LSHIFT R4.H BY R6.L;
  365. R5.L = LSHIFT R5.H BY R6.L;
  366. //rl6 = lshift (rh6 by rl6);
  367. R7.L = LSHIFT R7.H BY R6.L;
  368. CHECKREG r0, 0x10010000;
  369. CHECKREG r1, 0x10010000;
  370. CHECKREG r2, 0x20020000;
  371. CHECKREG r3, 0x30030000;
  372. CHECKREG r4, 0x40040000;
  373. CHECKREG r5, 0x50050000;
  374. //CHECKREG r6, 0x60060000;
  375. CHECKREG r7, 0x70070000;
  376. imm32 r0, 0x10010000;
  377. imm32 r1, 0x10010000;
  378. imm32 r2, 0x20020000;
  379. imm32 r2, 0x30030000;
  380. imm32 r4, 0x40040000;
  381. imm32 r5, 0x50050000;
  382. imm32 r6, 0x60060000;
  383. R7.L = -16;
  384. R0.H = LSHIFT R0.H BY R7.L;
  385. R1.H = LSHIFT R1.H BY R7.L;
  386. R2.H = LSHIFT R2.H BY R7.L;
  387. R3.H = LSHIFT R3.H BY R7.L;
  388. R4.H = LSHIFT R4.H BY R7.L;
  389. R5.H = LSHIFT R5.H BY R7.L;
  390. R6.H = LSHIFT R6.H BY R7.L;
  391. //rh7 = lshift (rh7 by rl7);
  392. CHECKREG r0, 0x00000000;
  393. CHECKREG r1, 0x00000000;
  394. CHECKREG r2, 0x00000000;
  395. CHECKREG r3, 0x00000000;
  396. CHECKREG r4, 0x00000000;
  397. CHECKREG r5, 0x00000000;
  398. CHECKREG r6, 0x00000000;
  399. //CHECKREG r7, -16;
  400. pass