c_dsp32shiftim_amix.s 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. //Original:/testcases/core/c_dsp32shiftim_amix/c_dsp32shiftim_amix.dsp
  2. # mach: bfin
  3. .include "testutils.inc"
  4. start
  5. // Spec Reference: dsp32shiftimm ashift: mix
  6. imm32 r4, 0x00000000;
  7. imm32 r5, 0x00000000;
  8. imm32 r6, 0x00000000;
  9. imm32 r7, 0x00000000;
  10. // Ashift : positive data, count (+)=left (half reg)
  11. imm32 r0, 0x00010001;
  12. imm32 r1, 1;
  13. imm32 r2, 0x00020002;
  14. imm32 r3, 2;
  15. R4.H = R0.H << 1;
  16. R4.L = R0.L << 1; /* r4 = 0x00020002 */
  17. R5.H = R2.H << 2;
  18. R5.L = R2.L << 2; /* r5 = 0x00080008 */
  19. R6 = R0 << 1 (V); /* r6 = 0x00020002 */
  20. R7 = R2 << 2 (V); /* r7 = 0x00080008 */
  21. CHECKREG r4, 0x00020002;
  22. CHECKREG r5, 0x00080008;
  23. CHECKREG r6, 0x00020002;
  24. CHECKREG r7, 0x00080008;
  25. imm32 r1, 3;
  26. imm32 r3, 4;
  27. R6 = R0 << 3; /* r6 = 0x00080010 */
  28. R7 = R2 << 4;
  29. CHECKREG r6, 0x00080008; /* r7 = 0x00100010 */
  30. CHECKREG r7, 0x00200020;
  31. A0 = 0;
  32. A0.L = R0.L;
  33. A0.H = R0.H;
  34. A0 = A0 << 3; /* a0 = 0x00080008 */
  35. R5 = A0.w; /* r5 = 0x00080008 */
  36. CHECKREG r5, 0x00080008;
  37. imm32 r4, 0x30000003;
  38. imm32 r1, 1;
  39. R5 = R4 << 1; /* r5 = 0x60000006 */
  40. imm32 r1, 2;
  41. R6 = ASHIFT R4 BY R1.L; /* r5 = 0xc000000c like LSHIFT */
  42. CHECKREG r5, 0x60000006;
  43. CHECKREG r6, 0xc000000c;
  44. // Ashift : count (-)=right (half reg)
  45. imm32 r0, 0x10001000;
  46. imm32 r1, -1;
  47. imm32 r2, 0x10001000;
  48. imm32 r3, -2;
  49. R4.H = R0.H >>> 1;
  50. R4.L = R0.L >>> 1; /* r4 = 0x08000800 */
  51. R5.H = R2.H >>> 2;
  52. R5.L = R2.L >>> 2; /* r4 = 0x04000400 */
  53. R6 = R0 >>> 1 (V); /* r4 = 0x08000800 */
  54. R7 = R2 >>> 2 (V); /* r4 = 0x04000400 */
  55. CHECKREG r4, 0x08000800;
  56. CHECKREG r5, 0x04000400;
  57. CHECKREG r6, 0x08000800;
  58. CHECKREG r7, 0x04000400;
  59. // Ashift : (full reg)
  60. imm32 r1, -3;
  61. imm32 r3, -4;
  62. R6 = R0 >>> 3; /* r6 = 0x02000200 */
  63. R7 = R2 >>> 4; /* r7 = 0x01000100 */
  64. CHECKREG r6, 0x02000200;
  65. CHECKREG r7, 0x01000100;
  66. // NEGATIVE
  67. // Ashift : NEGATIVE data, count (+)=left (half reg)
  68. imm32 r0, 0xc00f800f;
  69. imm32 r1, 1;
  70. imm32 r2, 0xe00fe00f;
  71. imm32 r3, 2;
  72. R4.H = R0.H << 1;
  73. R4.L = R0.L << 1 (S); /* r4 = 0x801e801e */
  74. R5.H = R2.H << 2;
  75. R5.L = R2.L << 2; /* r4 = 0x803c803c */
  76. CHECKREG r4, 0x801e8000;
  77. CHECKREG r5, 0x803c803c;
  78. imm32 r0, 0xc80fe00f;
  79. imm32 r2, 0xe40fe00f;
  80. imm32 r1, 4;
  81. imm32 r3, 5;
  82. R6 = R0 << 4; /* r6 = 0x80fe00f0 */
  83. R7 = R2 << 5; /* r7 = 0x81fc01e0 */
  84. CHECKREG r6, 0x80fe00f0;
  85. CHECKREG r7, 0x81fc01e0;
  86. imm32 r0, 0xf80fe00f;
  87. imm32 r2, 0xfc0fe00f;
  88. R6 = R0 << 4 (S); /* r6 = 0x80fe00f0 */
  89. R7 = R2 << 5 (S); /* r7 = 0x81fc01e0 */
  90. CHECKREG r6, 0x80fe00f0;
  91. CHECKREG r7, 0x81fc01e0;
  92. imm32 r0, 0xc80fe00f;
  93. imm32 r2, 0xe40fe00f;
  94. R6 = R0 << 4 (S); /* r6 = 0x80000000 zero bubble tru MSB */
  95. R7 = R2 << 5 (S); /* r7 = 0x80000000 */
  96. CHECKREG r6, 0x80000000;
  97. CHECKREG r7, 0x80000000;
  98. imm32 r0, 0xFFFFFFF4;
  99. imm32 r2, 0xFFF00001;
  100. R6 = R0 << 31 (S); /* r6 = 0x80000000 */
  101. R7 = R2 << 31 (S); /* r7 = 0x80000000 */
  102. CHECKREG r6, 0x80000000;
  103. CHECKREG r7, 0x80000000;
  104. // Ashift : NEGATIVE data, count (-)=right (half reg) Working ok
  105. imm32 r0, 0x80f080f0;
  106. imm32 r1, -1;
  107. imm32 r2, 0x80f080f0;
  108. imm32 r3, -2;
  109. R4.H = R0.H >>> 1;
  110. R4.L = R0.L >>> 1; /* r4 = 0xc078c078 */
  111. R5.H = R2.H >>> 2;
  112. R5.L = R2.L >>> 2; /* r4 = 0xe03ce03c */
  113. CHECKREG r4, 0xc078c078;
  114. CHECKREG r5, 0xe03ce03c;
  115. R6 = R0 >>> 1 (V); /* r6 = 0xc078c078 */
  116. R7 = R2 >>> 2 (V); /* r7 = 0xe03ce03c */
  117. CHECKREG r6, 0xc078c078;
  118. CHECKREG r7, 0xe03ce03c;
  119. imm32 r1, -3;
  120. imm32 r3, -4;
  121. R6 = R0 >>> 3; /* r6 = 0xf01e101e */
  122. R7 = R2 >>> 4; /* r7 = 0xf80f080f */
  123. CHECKREG r6, 0xf01e101e;
  124. CHECKREG r7, 0xf80f080f;
  125. pass