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