//Original:/testcases/core/c_dsp32shiftim_lhalf_rn/c_dsp32shiftim_lhalf_rn.dsp // Spec Reference: dspshiftimm dreg_lo(hi) = lshift (dreg_lo(hi) by imm5) # mach: bfin .include "testutils.inc" start // lshift : neg data, count (+)=left (half reg) // d_lo = lshift (d_lo BY d_lo) // RLx by RLx imm32 r0, 0x00000000; R0.L = -1; imm32 r1, 0x00008001; imm32 r2, 0x00008002; imm32 r3, 0x00008003; imm32 r4, 0x00008004; imm32 r5, 0x00008005; imm32 r6, 0x00008006; imm32 r7, 0x00008007; R0.L = R0.L >> 1; R1.L = R1.L >> 2; R2.L = R2.L >> 3; R3.L = R3.L >> 4; R4.L = R4.L >> 5; R5.L = R5.L >> 6; R6.L = R6.L >> 7; R7.L = R7.L >> 8; CHECKREG r0, 0x00007FFF; CHECKREG r1, 0x00002000; CHECKREG r2, 0x00001000; CHECKREG r3, 0x00000800; CHECKREG r4, 0x00000400; CHECKREG r5, 0x00000200; CHECKREG r6, 0x00000100; CHECKREG r7, 0x00000080; imm32 r0, 0x00008001; R1.L = -1; imm32 r2, 0x00008002; imm32 r3, 0x00008003; imm32 r4, 0x00008004; imm32 r5, 0x00008005; imm32 r6, 0x00008006; imm32 r7, 0x00008007; R0.L = R0.L >> 9; R1.L = R1.L >> 10; R2.L = R2.L >> 11; R3.L = R3.L >> 12; R4.L = R4.L >> 13; R5.L = R5.L >> 14; R6.L = R6.L >> 15; R7.L = R7.L >> 10; CHECKREG r0, 0x00000040; CHECKREG r1, 0x0000003F; CHECKREG r2, 0x00000010; CHECKREG r3, 0x00000008; CHECKREG r4, 0x00000004; CHECKREG r5, 0x00000002; CHECKREG r6, 0x00000001; CHECKREG r7, 0x00000020; imm32 r0, 0x30008001; imm32 r1, 0x30008001; R2.L = -15; imm32 r3, 0x30008003; imm32 r4, 0x30008004; imm32 r5, 0x30008005; imm32 r6, 0x30008006; imm32 r7, 0x30008007; R7.L = R0.L >> 1; R6.L = R1.L >> 2; R5.L = R2.L >> 3; R4.L = R3.L >> 4; R3.L = R4.L >> 5; R2.L = R5.L >> 6; R0.L = R7.L >> 8; R1.L = R6.L >> 7; CHECKREG r0, 0x30000040; CHECKREG r1, 0x30000040; CHECKREG r2, 0x0000007F; CHECKREG r3, 0x30000040; CHECKREG r4, 0x30000800; CHECKREG r5, 0x30001FFE; CHECKREG r6, 0x30002000; CHECKREG r7, 0x30004000; imm32 r0, 0x00008001; imm32 r1, 0x00008001; imm32 r2, 0x00008002; R3.L = -16; imm32 r4, 0x00008004; imm32 r5, 0x00008005; imm32 r6, 0x00008006; imm32 r7, 0x00008007; R6.L = R0.L >> 13; R5.L = R1.L >> 13; R4.L = R2.L >> 13; R3.L = R3.L >> 13; R2.L = R4.L >> 13; R1.L = R5.L >> 13; R0.L = R6.L >> 13; R7.L = R7.L >> 13; CHECKREG r0, 0x00000000; CHECKREG r1, 0x00000000; CHECKREG r2, 0x00000000; CHECKREG r3, 0x30000007; CHECKREG r4, 0x00000004; CHECKREG r5, 0x00000004; CHECKREG r6, 0x00000004; CHECKREG r7, 0x00000004; // d_lo = lshift (d_hi BY d_lo) // RHx by RLx imm32 r0, 0x00000000; imm32 r1, 0x80010000; imm32 r2, 0x80020000; imm32 r3, 0x80030000; imm32 r4, 0x80040000; imm32 r5, 0x80050000; imm32 r6, 0x80060000; imm32 r7, 0x80070000; R0.L = R0.H >> 1; R1.L = R1.H >> 1; R2.L = R2.H >> 1; R3.L = R3.H >> 1; R4.L = R4.H >> 1; R5.L = R5.H >> 1; R6.L = R6.H >> 1; R7.L = R7.H >> 1; CHECKREG r0, 0x00000000; CHECKREG r1, 0x80014000; CHECKREG r2, 0x80024001; CHECKREG r3, 0x80034001; CHECKREG r4, 0x80044002; CHECKREG r5, 0x80054002; CHECKREG r6, 0x80064003; CHECKREG r7, 0x80074003; imm32 r0, 0x80010000; R1.L = -1; imm32 r2, 0x80020000; imm32 r3, 0x80030000; imm32 r4, 0x80040000; imm32 r5, 0x80050000; imm32 r6, 0x80060000; imm32 r7, 0x80070000; R1.L = R0.H >> 10; R2.L = R1.H >> 11; R3.L = R2.H >> 12; R4.L = R3.H >> 13; R5.L = R4.H >> 14; R6.L = R5.H >> 15; R0.L = R7.H >> 15; R7.L = R6.H >> 15; CHECKREG r0, 0x80010001; CHECKREG r1, 0x80010020; CHECKREG r2, 0x80020010; CHECKREG r3, 0x80030008; CHECKREG r4, 0x80040004; CHECKREG r5, 0x80050002; CHECKREG r6, 0x80060001; CHECKREG r7, 0x80070001; imm32 r0, 0xa0010000; imm32 r1, 0xa0010000; R2.L = -15; imm32 r3, 0xa0030000; imm32 r4, 0xa0040000; imm32 r5, 0xa0050000; imm32 r6, 0xa0060000; imm32 r7, 0xa0070000; R2.L = R0.H >> 2; R3.L = R1.H >> 2; R4.L = R2.H >> 2; R5.L = R3.H >> 2; R6.L = R4.H >> 2; R7.L = R5.H >> 2; R0.L = R6.H >> 2; R1.L = R7.H >> 2; CHECKREG r0, 0xA0012801; CHECKREG r1, 0xA0012801; CHECKREG r2, 0x80022800; CHECKREG r3, 0xA0032800; CHECKREG r4, 0xA0042000; CHECKREG r5, 0xA0052800; CHECKREG r6, 0xA0062801; CHECKREG r7, 0xA0072801; imm32 r0, 0xb0010001; imm32 r1, 0xb0010001; imm32 r2, 0xb0020002; R3.L = -16; imm32 r4, 0xb0040004; imm32 r5, 0xb0050005; imm32 r6, 0xb0060006; imm32 r7, 0xb0070007; R3.L = R0.H >> 13; R4.L = R1.H >> 13; R5.L = R2.H >> 13; R6.L = R3.H >> 13; R7.L = R4.H >> 13; R0.L = R5.H >> 13; R1.L = R6.H >> 13; R2.L = R7.H >> 13; CHECKREG r0, 0xB0010005; CHECKREG r1, 0xB0010005; CHECKREG r2, 0xB0020005; CHECKREG r3, 0xA0030005; CHECKREG r4, 0xB0040005; CHECKREG r5, 0xB0050005; CHECKREG r6, 0xB0060005; CHECKREG r7, 0xB0070005; // d_hi = lshift (d_lo BY d_lo) // RLx by RLx imm32 r0, 0x00000001; imm32 r1, 0x00000001; imm32 r2, 0x00000002; imm32 r3, 0x00000003; imm32 r4, 0x00000004; imm32 r5, 0x00000005; imm32 r6, 0x00000006; imm32 r7, 0x00000007; R0.H = R0.L >> 14; R1.H = R1.L >> 14; R2.H = R2.L >> 14; R3.H = R3.L >> 14; R4.H = R4.L >> 14; R5.H = R5.L >> 14; R6.H = R6.L >> 14; R7.H = R7.L >> 14; CHECKREG r0, 0x00000001; CHECKREG r1, 0x00000001; CHECKREG r2, 0x00000002; CHECKREG r3, 0x00000003; CHECKREG r4, 0x00000004; CHECKREG r5, 0x00000005; CHECKREG r6, 0x00000006; CHECKREG r7, 0x00000007; imm32 r0, 0x00008001; imm32 r1, 0x00008001; imm32 r2, 0x00008002; imm32 r3, 0x00008003; imm32 r4, 0x00008004; R5.L = -1; imm32 r6, 0x00008006; imm32 r7, 0x00008007; R1.H = R0.L >> 5; R0.H = R7.L >> 5; R2.H = R1.L >> 5; R3.H = R2.L >> 5; R4.H = R3.L >> 5; R5.H = R4.L >> 5; R6.H = R5.L >> 5; R7.H = R6.L >> 5; CHECKREG r0, 0x04008001; CHECKREG r1, 0x04008001; CHECKREG r2, 0x04008002; CHECKREG r3, 0x04008003; CHECKREG r4, 0x04008004; CHECKREG r5, 0x0400FFFF; CHECKREG r6, 0x07FF8006; CHECKREG r7, 0x04008007; imm32 r0, 0x00009001; imm32 r1, 0x00009001; imm32 r2, 0x00009002; imm32 r3, 0x00009003; imm32 r4, 0x00009004; imm32 r5, 0x00009005; R6.L = -15; imm32 r7, 0x00009007; R3.H = R0.L >> 14; R4.H = R1.L >> 14; R5.H = R2.L >> 14; R6.H = R3.L >> 14; R7.H = R4.L >> 14; R0.H = R5.L >> 14; R1.H = R6.L >> 14; R2.H = R7.L >> 14; CHECKREG r0, 0x00029001; CHECKREG r1, 0x00039001; CHECKREG r2, 0x00029002; CHECKREG r3, 0x00029003; CHECKREG r4, 0x00029004; CHECKREG r5, 0x00029005; CHECKREG r6, 0x0002FFF1; CHECKREG r7, 0x00029007; imm32 r0, 0x0000a001; imm32 r1, 0x0000a001; imm32 r2, 0x0000a002; imm32 r3, 0x0000a003; imm32 r4, 0x0000a004; imm32 r5, 0x0000a005; imm32 r6, 0x0000a006; R7.L = -16; R4.H = R0.L >> 15; R5.H = R1.L >> 15; R6.H = R2.L >> 15; R7.H = R3.L >> 15; R0.H = R4.L >> 15; R1.H = R5.L >> 15; R2.H = R6.L >> 15; R3.H = R7.L >> 15; CHECKREG r0, 0x0001A001; CHECKREG r1, 0x0001A001; CHECKREG r2, 0x0001A002; CHECKREG r3, 0x0001A003; CHECKREG r4, 0x0001A004; CHECKREG r5, 0x0001A005; CHECKREG r6, 0x0001A006; CHECKREG r7, 0x0001FFF0; // d_lo = lshft (d_hi BY d_lo) // RHx by RLx imm32 r0, 0x80010000; imm32 r1, 0x80010000; imm32 r2, 0x80020000; imm32 r3, 0x80030000; R4.L = -1; imm32 r5, 0x80050000; imm32 r6, 0x80060000; imm32 r7, 0x80070000; R0.H = R0.H >> 4; R1.H = R1.H >> 4; R2.H = R2.H >> 4; R3.H = R3.H >> 4; R4.H = R4.H >> 4; R5.H = R5.H >> 4; R6.H = R6.H >> 4; R7.H = R7.H >> 4; CHECKREG r0, 0x08000000; CHECKREG r1, 0x08000000; CHECKREG r2, 0x08000000; CHECKREG r3, 0x08000000; CHECKREG r4, 0x0000FFFF; CHECKREG r5, 0x08000000; CHECKREG r6, 0x08000000; CHECKREG r7, 0x08000000; imm32 r0, 0x80010000; imm32 r1, 0x80010000; imm32 r2, 0x80020000; imm32 r3, 0x80030000; imm32 r4, 0x80040000; R5.L = -1; imm32 r6, 0x80060000; imm32 r7, 0x80070000; R1.H = R0.H >> 15; R2.H = R1.H >> 15; R3.H = R2.H >> 15; R4.H = R3.H >> 15; R5.H = R4.H >> 15; R6.H = R5.H >> 15; R0.H = R7.H >> 15; R7.H = R6.H >> 15; CHECKREG r0, 0x00010000; CHECKREG r1, 0x00010000; CHECKREG r2, 0x00000000; CHECKREG r3, 0x00000000; CHECKREG r4, 0x00000000; CHECKREG r5, 0x0000FFFF; CHECKREG r6, 0x00000000; CHECKREG r7, 0x00000000; imm32 r0, 0xd0010000; imm32 r1, 0xd0010000; imm32 r2, 0xd0020000; imm32 r3, 0xd0030000; imm32 r4, 0xd0040000; imm32 r5, 0xd0050000; R6.L = -15; imm32 r7, 0xd0070000; R3.H = R0.H >> 6; R4.H = R1.H >> 6; R5.H = R2.H >> 6; R6.H = R3.H >> 6; R7.H = R4.H >> 6; R0.H = R5.H >> 6; R1.H = R6.H >> 6; R2.H = R7.H >> 6; CHECKREG r0, 0x000D0000; CHECKREG r1, 0x00000000; CHECKREG r2, 0x00000000; CHECKREG r3, 0x03400000; CHECKREG r4, 0x03400000; CHECKREG r5, 0x03400000; CHECKREG r6, 0x000DFFF1; CHECKREG r7, 0x000D0000; imm32 r0, 0xe0010000; imm32 r1, 0xe0010000; imm32 r2, 0xe0020000; imm32 r3, 0xe0030000; imm32 r4, 0xe0040000; imm32 r5, 0xe0050000; imm32 r6, 0xe0060000; R7.L = -16; R4.H = R0.H >> 7; R5.H = R1.H >> 7; R6.H = R2.H >> 7; R7.H = R3.H >> 7; R0.H = R4.H >> 7; R1.H = R5.H >> 7; R2.H = R6.H >> 7; R3.H = R7.H >> 7; CHECKREG r0, 0x00030000; CHECKREG r1, 0x00030000; CHECKREG r2, 0x00030000; CHECKREG r3, 0x00030000; CHECKREG r4, 0x01C00000; CHECKREG r5, 0x01C00000; CHECKREG r6, 0x01C00000; CHECKREG r7, 0x01C0FFF0; pass