blob: 45b2a7e44dbd6f2701bbc16817f5f4bc2bf26892 [file] [log] [blame]
//Original:/testcases/core/c_dsp32shiftim_ahalf_lp_s/c_dsp32shiftim_ahalf_lp_s.dsp
// Spec Reference: dspshiftimm dreg_lo(hi) = ashift (dreg_lo(hi) by imm5) saturated
# mach: bfin
.include "testutils.inc"
start
imm32 r0, 0x00100a00;
imm32 r1, 0x00100a01;
imm32 r2, 0x00100a02;
imm32 r3, 0x00100a03;
imm32 r4, 0x00100a04;
imm32 r5, 0x00100a05;
imm32 r6, 0x00100a06;
imm32 r7, 0x00100a07;
R7.L = R0.L << 0 (S);
R0.L = R1.L << 1 (S);
R1.L = R2.L << 2 (S);
R2.L = R3.L << 3 (S);
R3.L = R4.L << 4 (S);
R4.L = R5.L << 5 (S);
R5.L = R6.L << 6 (S);
R6.L = R7.L << 7 (S);
CHECKREG r1, 0x00102808;
CHECKREG r0, 0x00101402;
CHECKREG r2, 0x00105018;
CHECKREG r3, 0x00107FFF;
CHECKREG r4, 0x00107FFF;
CHECKREG r5, 0x00107FFF;
CHECKREG r6, 0x00107FFF;
CHECKREG r7, 0x00100A00;
imm32 r0, 0x00200018;
imm32 r1, 0x00200019;
imm32 r2, 0x0020001a;
imm32 r3, 0x0020001b;
imm32 r4, 0x0020001c;
imm32 r5, 0x0020001d;
imm32 r6, 0x0020001e;
imm32 r7, 0x0020001f;
R2.L = R0.L << 8 (S);
R3.L = R1.L << 9 (S);
R4.L = R2.L << 10 (S);
R5.L = R3.L << 11 (S);
R6.L = R4.L << 12 (S);
R7.L = R5.L << 13 (S);
R0.L = R6.L << 14 (S);
R1.L = R7.L << 15 (S);
CHECKREG r0, 0x00207FFF;
CHECKREG r1, 0x00207FFF;
CHECKREG r2, 0x00201800;
CHECKREG r3, 0x00203200;
CHECKREG r4, 0x00207FFF;
CHECKREG r5, 0x00207FFF;
CHECKREG r6, 0x00207FFF;
CHECKREG r7, 0x00207FFF;
imm32 r0, 0x05002001;
imm32 r1, 0x05002001;
imm32 r2, 0x0500000f;
imm32 r3, 0x05002003;
imm32 r4, 0x05002004;
imm32 r5, 0x05002005;
imm32 r6, 0x05002006;
imm32 r7, 0x05002007;
R3.L = R0.L << 0 (S);
R4.L = R1.L << 1 (S);
R5.L = R2.L << 2 (S);
R6.L = R3.L << 3 (S);
R7.L = R4.L << 4 (S);
R0.L = R5.L << 5 (S);
R1.L = R6.L << 6 (S);
R2.L = R7.L << 7 (S);
CHECKREG r0, 0x05000780;
CHECKREG r1, 0x05007FFF;
CHECKREG r2, 0x05007FFF;
CHECKREG r3, 0x05002001;
CHECKREG r4, 0x05004002;
CHECKREG r5, 0x0500003C;
CHECKREG r6, 0x05007FFF;
CHECKREG r7, 0x05007FFF;
imm32 r0, 0x03000031;
imm32 r1, 0x03000031;
imm32 r2, 0x03000032;
imm32 r3, 0x03000030;
imm32 r4, 0x03000034;
imm32 r5, 0x03000035;
imm32 r6, 0x03000036;
imm32 r7, 0x03000037;
R4.L = R0.L << 8 (S);
R5.L = R1.L << 9 (S);
R6.L = R2.L << 10 (S);
R7.L = R3.L << 11 (S);
R0.L = R4.L << 12 (S);
R1.L = R5.L << 13 (S);
R2.L = R6.L << 14 (S);
R3.L = R7.L << 15 (S);
CHECKREG r0, 0x03007FFF;
CHECKREG r1, 0x03007FFF;
CHECKREG r2, 0x03007FFF;
CHECKREG r3, 0x03007FFF;
CHECKREG r4, 0x03003100;
CHECKREG r5, 0x03006200;
CHECKREG r6, 0x03007FFF;
CHECKREG r7, 0x03007FFF;
// RHx by RLx
imm32 r0, 0x03000000;
imm32 r1, 0x03000000;
imm32 r2, 0x03000000;
imm32 r3, 0x03000000;
imm32 r4, 0x03003100;
imm32 r5, 0x03006200;
imm32 r6, 0x0300C800;
imm32 r7, 0x03008000;
R5.L = R0.H << 0 (S);
R6.L = R1.H << 1 (S);
R7.L = R2.H << 2 (S);
R0.L = R3.H << 3 (S);
R1.L = R4.H << 4 (S);
R2.L = R5.H << 5 (S);
R3.L = R6.H << 6 (S);
R4.L = R7.H << 7 (S);
CHECKREG r0, 0x03001800;
CHECKREG r1, 0x03003000;
CHECKREG r2, 0x03006000;
CHECKREG r3, 0x03007FFF;
CHECKREG r4, 0x03007FFF;
CHECKREG r5, 0x03000300;
CHECKREG r6, 0x03000600;
CHECKREG r7, 0x03000C00;
imm32 r0, 0x05018000;
imm32 r1, 0x05018001;
imm32 r2, 0x05028000;
imm32 r3, 0x05038000;
imm32 r4, 0x05048000;
imm32 r5, 0x05058000;
imm32 r6, 0x05068000;
imm32 r7, 0x05078000;
R6.L = R0.H << 8 (S);
R7.L = R1.H << 9 (S);
R0.L = R2.H << 10 (S);
R1.L = R3.H << 11 (S);
R2.L = R4.H << 12 (S);
R3.L = R5.H << 13 (S);
R4.L = R6.H << 14 (S);
R5.L = R7.H << 15 (S);
CHECKREG r0, 0x05017FFF;
CHECKREG r1, 0x05017FFF;
CHECKREG r2, 0x05027FFF;
CHECKREG r3, 0x05037FFF;
CHECKREG r4, 0x05047FFF;
CHECKREG r5, 0x05057FFF;
CHECKREG r6, 0x05067FFF;
CHECKREG r7, 0x05077FFF;
imm32 r0, 0x60019000;
imm32 r1, 0x60019000;
imm32 r2, 0x6002900f;
imm32 r3, 0x60039000;
imm32 r4, 0x60049000;
imm32 r5, 0x60059000;
imm32 r6, 0x60069000;
imm32 r7, 0x60079000;
R7.L = R0.H << 0 (S);
R0.L = R1.H << 1 (S);
R1.L = R2.H << 2 (S);
R2.L = R3.H << 3 (S);
R3.L = R4.H << 4 (S);
R4.L = R5.H << 5 (S);
R5.L = R6.H << 6 (S);
R6.L = R7.H << 7 (S);
CHECKREG r0, 0x60017FFF;
CHECKREG r1, 0x60017FFF;
CHECKREG r2, 0x60027FFF;
CHECKREG r3, 0x60037FFF;
CHECKREG r4, 0x60047FFF;
CHECKREG r5, 0x60057FFF;
CHECKREG r6, 0x60067FFF;
CHECKREG r7, 0x60076001;
imm32 r0, 0x70010001;
imm32 r1, 0x70010001;
imm32 r2, 0x70020002;
imm32 r3, 0x77030010;
imm32 r4, 0x70040004;
imm32 r5, 0x70050005;
imm32 r6, 0x70060006;
imm32 r7, 0x70070007;
R0.L = R0.H << 8 (S);
R1.L = R1.H << 9 (S);
R2.L = R2.H << 10 (S);
R3.L = R3.H << 11 (S);
R4.L = R4.H << 12 (S);
R5.L = R5.H << 13 (S);
R6.L = R6.H << 14 (S);
R7.L = R7.H << 15 (S);
CHECKREG r0, 0x70017FFF;
CHECKREG r1, 0x70017FFF;
CHECKREG r2, 0x70027FFF;
CHECKREG r3, 0x77037FFF;
CHECKREG r4, 0x70047FFF;
CHECKREG r5, 0x70057FFF;
CHECKREG r6, 0x70067FFF;
CHECKREG r7, 0x70077FFF;
// d_hi = lshft (d_lo BY d_lo)
// RLx by RLx
imm32 r0, 0xa8000000;
imm32 r1, 0xa8000001;
imm32 r2, 0xa8000002;
imm32 r3, 0xa8000003;
imm32 r4, 0xa8000004;
imm32 r5, 0xa8000005;
imm32 r6, 0xa8000006;
imm32 r7, 0xa8000007;
R0.H = R0.L << 0 (S);
R1.H = R1.L << 1 (S);
R2.H = R2.L << 2 (S);
R3.H = R3.L << 3 (S);
R4.H = R4.L << 4 (S);
R5.H = R5.L << 5 (S);
R6.H = R6.L << 6 (S);
R7.H = R7.L << 7 (S);
CHECKREG r0, 0x00000000;
CHECKREG r1, 0x00020001;
CHECKREG r2, 0x00080002;
CHECKREG r3, 0x00180003;
CHECKREG r4, 0x00400004;
CHECKREG r5, 0x00A00005;
CHECKREG r6, 0x01800006;
CHECKREG r7, 0x03800007;
imm32 r0, 0xf0090001;
imm32 r1, 0xf0090001;
imm32 r2, 0xf0090002;
imm32 r3, 0xf0090003;
imm32 r4, 0xf0090004;
imm32 r5, 0xf0090005;
imm32 r6, 0xf0000006;
imm32 r7, 0xf0000007;
R1.H = R0.L << 8 (S);
R2.H = R1.L << 9 (S);
R3.H = R2.L << 10 (S);
R4.H = R3.L << 11 (S);
R5.H = R4.L << 12 (S);
R6.H = R5.L << 13 (S);
R7.H = R6.L << 14 (S);
R0.H = R7.L << 15 (S);
CHECKREG r1, 0x01000001;
CHECKREG r2, 0x02000002;
CHECKREG r3, 0x08000003;
CHECKREG r4, 0x18000004;
CHECKREG r5, 0x40000005;
CHECKREG r6, 0x7FFF0006;
CHECKREG r7, 0x7FFF0007;
CHECKREG r0, 0x7FFF0001;
imm32 r0, 0x07000001;
imm32 r1, 0x07000001;
imm32 r2, 0x0700000f;
imm32 r3, 0x07000003;
imm32 r4, 0x07000004;
imm32 r5, 0x07000005;
imm32 r6, 0x07000006;
imm32 r7, 0x07000007;
R3.H = R0.L << 0 (S);
R4.H = R1.L << 1 (S);
R5.H = R2.L << 2 (S);
R6.H = R3.L << 3 (S);
R7.H = R4.L << 4 (S);
R0.H = R5.L << 5 (S);
R1.H = R6.L << 6 (S);
R2.H = R7.L << 7 (S);
CHECKREG r0, 0x00A00001;
CHECKREG r1, 0x01800001;
CHECKREG r2, 0x0380000F;
CHECKREG r3, 0x00010003;
CHECKREG r4, 0x00020004;
CHECKREG r5, 0x003C0005;
CHECKREG r6, 0x00180006;
CHECKREG r7, 0x00400007;
imm32 r0, 0x00000501;
imm32 r1, 0x00000501;
imm32 r2, 0x00000502;
imm32 r3, 0x00000510;
imm32 r4, 0x00000504;
imm32 r5, 0x00000505;
imm32 r6, 0x00000506;
imm32 r7, 0x00000507;
R4.H = R0.L << 8 (S);
R5.H = R1.L << 9 (S);
R6.H = R2.L << 10 (S);
R7.H = R3.L << 11 (S);
R0.H = R4.L << 12 (S);
R1.H = R5.L << 13 (S);
R2.H = R6.L << 14 (S);
R3.H = R7.L << 15 (S);
CHECKREG r0, 0x7FFF0501;
CHECKREG r1, 0x7FFF0501;
CHECKREG r2, 0x7FFF0502;
CHECKREG r3, 0x7FFF0510;
CHECKREG r4, 0x7FFF0504;
CHECKREG r5, 0x7FFF0505;
CHECKREG r6, 0x7FFF0506;
CHECKREG r7, 0x7FFF0507;
imm32 r0, 0x00a00800;
imm32 r1, 0x00a10800;
imm32 r2, 0x00a20800;
imm32 r3, 0x00a30800;
imm32 r4, 0x00a40800;
imm32 r5, 0x00a50800;
imm32 r6, 0x00a60800;
imm32 r7, 0x00a70800;
R5.H = R0.H << 0 (S);
R6.H = R1.H << 1 (S);
R7.H = R2.H << 2 (S);
R0.H = R3.H << 3 (S);
R1.H = R4.H << 4 (S);
R2.H = R5.H << 5 (S);
R3.H = R6.H << 6 (S);
R4.H = R7.H << 7 (S);
CHECKREG r0, 0x05180800;
CHECKREG r1, 0x0A400800;
CHECKREG r2, 0x14000800;
CHECKREG r3, 0x50800800;
CHECKREG r4, 0x7FFF0800;
CHECKREG r5, 0x00A00800;
CHECKREG r6, 0x01420800;
CHECKREG r7, 0x02880800;
imm32 r0, 0x0c010000;
imm32 r1, 0x0c010001;
imm32 r2, 0x0c020000;
imm32 r3, 0x0c030000;
imm32 r4, 0x0c040000;
imm32 r5, 0x0c050000;
imm32 r6, 0x0c060000;
imm32 r7, 0x0c070000;
R6.H = R0.H << 8 (S);
R7.H = R1.H << 9 (S);
R0.H = R2.H << 10 (S);
R1.H = R3.H << 11 (S);
R2.H = R4.H << 12 (S);
R3.H = R5.H << 13 (S);
R4.H = R6.H << 14 (S);
R5.H = R7.H << 15 (S);
CHECKREG r0, 0x7FFF0000;
CHECKREG r1, 0x7FFF0001;
CHECKREG r2, 0x7FFF0000;
CHECKREG r3, 0x7FFF0000;
CHECKREG r4, 0x7FFF0000;
CHECKREG r5, 0x7FFF0000;
CHECKREG r6, 0x7FFF0000;
CHECKREG r7, 0x7FFF0000;
imm32 r0, 0x00b10000;
imm32 r1, 0x00b10000;
imm32 r2, 0x00b2000f;
imm32 r3, 0x00b30000;
imm32 r4, 0x00b40000;
imm32 r5, 0x00b50000;
imm32 r6, 0x00b60000;
imm32 r7, 0x00b70000;
R7.L = R0.H << 0 (S);
R0.L = R1.H << 1 (S);
R1.L = R2.H << 2 (S);
R2.L = R3.H << 3 (S);
R3.L = R4.H << 4 (S);
R4.L = R5.H << 5 (S);
R5.L = R6.H << 6 (S);
R6.L = R7.H << 7 (S);
CHECKREG r0, 0x00B10162;
CHECKREG r1, 0x00B102C8;
CHECKREG r2, 0x00B20598;
CHECKREG r3, 0x00B30B40;
CHECKREG r4, 0x00B416A0;
CHECKREG r5, 0x00B52D80;
CHECKREG r6, 0x00B65B80;
CHECKREG r7, 0x00B700B1;
imm32 r0, 0x0a010700;
imm32 r1, 0x0a010700;
imm32 r2, 0x0a020700;
imm32 r3, 0x0a030710;
imm32 r4, 0x0a040700;
imm32 r5, 0x0a050700;
imm32 r6, 0x0a060700;
imm32 r7, 0x0a070700;
R0.H = R0.H << 8 (S);
R1.H = R1.H << 9 (S);
R2.H = R2.H << 10 (S);
R3.H = R3.H << 11 (S);
R4.H = R4.H << 12 (S);
R5.H = R5.H << 13 (S);
R6.H = R6.H << 14 (S);
R7.H = R7.H << 15 (S);
CHECKREG r0, 0x7FFF0700;
CHECKREG r1, 0x7FFF0700;
CHECKREG r2, 0x7FFF0700;
CHECKREG r3, 0x7FFF0710;
CHECKREG r4, 0x7FFF0700;
CHECKREG r5, 0x7FFF0700;
CHECKREG r6, 0x7FFF0700;
CHECKREG r7, 0x7FFF0700;
pass