X-Git-Url: https://oss.titaniummirror.com/gitweb?p=msp430-binutils.git;a=blobdiff_plain;f=gas%2Ftestsuite%2Fgas%2Fbfin%2Fshift2.s;h=99115a65b7f0daf1469f357866b4c0d62c6e9a9c;hp=69377bcd101e46e757728cb86acc6f90cec707e7;hb=88750007d7869f178f0ba528f41efd3b74c424cf;hpb=6df9443a374e2b81278c61b8afc0a1eef7db280b diff --git a/gas/testsuite/gas/bfin/shift2.s b/gas/testsuite/gas/bfin/shift2.s index 69377bc..99115a6 100755 --- a/gas/testsuite/gas/bfin/shift2.s +++ b/gas/testsuite/gas/bfin/shift2.s @@ -1,290 +1,290 @@ - -.EXTERN MY_LABEL2; -.section .text; - -// -//9 SHIFT/ROTATE OPERATIONS -// - -//Preg = ( Preg + Preg ) << 1 ; /* dest_reg = (dest_reg + src_reg) x 2 (a) */ -P0 = (P0+P0)<<1; -P0 = (P0+P1)<<1; -P2 = (P2+P0)<<1; -P1 = (P1+P2)<<1; - -//P0 = (P2+P0)<<1; - -//Preg = ( Preg + Preg ) << 2 ; /* dest_reg = (dest_reg + src_reg) x 4 (a) */ -P0 = (P0+P0)<<2; -P0 = (P0+P1)<<2; -P2 = (P2+P0)<<2; -P1 = (P1+P2)<<2; - -//P0 = (P2+P0)<<2; - -//Dreg = (Dreg + Dreg) << 1 ; /* dest_reg = (dest_reg + src_reg) x 2 (a) */ -R0 = (R0+R0)<<1; -R0 = (R0+R1)<<1; -R2 = (R2+R0)<<1; -R1 = (R1+R2)<<1; - -//R0 = (R2+R0)<<1; - - -//Dreg = (Dreg + Dreg) << 2 ; /* dest_reg = (dest_reg + src_reg) x 4 (a) */ -R0 = (R0+R0)<<2; -R0 = (R0+R1)<<2; -R2 = (R2+R0)<<2; -R1 = (R1+R2)<<2; - -//R0 = (R2+R0)<<2; - -//Preg = Preg + ( Preg << 1 ) ; /* adder_pntr + (src_pntr x 2) (a) */ -P0 = P0 + (P0 << 1); -P0 = P0 + (P1 << 1); -P0 = P0 + (P2 << 1); -P0 = P1 + (P2 << 1); -P0 = P2 + (P3 << 1); -P1 = P0 + (P0 << 1); -P1 = P0 + (P1 << 1); -P1 = P0 + (P2 << 1); -P1 = P1 + (P2 << 1); -P1 = P2 + (P3 << 1); - -//Preg = Preg + ( Preg << 2 ) ; /* adder_pntr + (src_pntr x 4) (a) */ -P0 = P0 + (P0 << 2); -P0 = P0 + (P1 << 2); -P0 = P0 + (P2 << 2); -P0 = P1 + (P2 << 2); -P0 = P2 + (P3 << 2); -P1 = P0 + (P0 << 2); -P1 = P0 + (P1 << 2); -P1 = P0 + (P2 << 2); -P1 = P1 + (P2 << 2); -P1 = P2 + (P3 << 2); - -//Dreg >>>= uimm5 ; /* arithmetic right shift (a) */ -R0 >>>= 0; -R0 >>>= 31; -R0 >>>= 5; -R5 >>>= 0; -R5 >>>= 31; -R5 >>>= 5; - -//Dreg <<= uimm5 ; /* logical left shift (a) */ -R0 <<= 0; -R0 <<= 31; -R0 <<= 5; -R5 <<= 0; -R5 <<= 31; -R5 <<= 5; -//Dreg_lo_hi = Dreg_lo_hi >>> uimm4 ; /* arithmetic right shift (b) */ -R0.L = R0.L >>> 0; -R0.L = R0.L >>> 15; -R0.L = R0.H >>> 0; -R0.L = R0.H >>> 15; -R0.H = R0.L >>> 0; -R0.H = R0.L >>> 15; -R0.H = R0.H >>> 0; -R0.H = R0.H >>> 15; - -R0.L = R1.L >>> 0; -R0.L = R1.L >>> 15; -R0.L = R1.H >>> 0; -R0.L = R1.H >>> 15; -R0.H = R1.L >>> 0; -R0.H = R1.L >>> 15; -R0.H = R1.H >>> 0; -R0.H = R1.H >>> 15; - -R0.L = R7.L >>> 0; -R1.L = R6.L >>> 15; -R2.L = R5.H >>> 0; -R3.L = R4.H >>> 15; -R4.H = R3.L >>> 0; -R5.H = R2.L >>> 15; -R6.H = R1.H >>> 0; -R7.H = R0.H >>> 15; - -//Dreg_lo_hi = Dreg_lo_hi << uimm4 (S) ; /* arithmetic left shift (b) */ -R0.L = R0.L << 0(S); -R0.L = R0.L << 15(S); -R0.L = R0.H << 0(S); -R0.L = R0.H << 15(S); -R0.H = R0.L << 0(S); -R0.H = R0.L << 15(S); -R0.H = R0.H << 0(S); -R0.H = R0.H << 15(S); - -R0.L = R1.L << 0(S); -R0.L = R1.L << 15(S); -R0.L = R1.H << 0(S); -R0.L = R1.H << 15(S); -R0.H = R1.L << 0(S); -R0.H = R1.L << 15(S); -R0.H = R1.H << 0(S); -R0.H = R1.H << 15(S); - -R0.L = R7.L << 0(S); -R1.L = R6.L << 15(S); -R2.L = R5.H << 0(S); -R3.L = R4.H << 15(S); -R4.H = R3.L << 0(S); -R5.H = R2.L << 15(S); -R6.H = R1.H << 0(S); -R7.H = R0.H << 15(S); -//Dreg = Dreg >>> uimm5 ; /* arithmetic right shift (b) */ -R0 = R0 >>> 0; -R0 = R0 >>> 31; -R0 = R1 >>> 0; -R0 = R1 >>> 31; -R7 = R0 >>> 0; -R6 = R1 >>> 31; -R5 = R2 >>> 0; -R4 = R3 >>> 31; -R3 = R4 >>> 0; -R2 = R5 >>> 31; -R1 = R6 >>> 0; -R0 = R7 >>> 31; - -//Dreg = Dreg << uimm5 (S) ; /* arithmetic left shift (b) */ -R0 = R0 << 0(S); -R0 = R0 << 31(S); -R0 = R1 << 0(S); -R0 = R1 << 31(S); -R7 = R0 << 0(S); -R6 = R1 << 31(S); -R5 = R2 << 0(S); -R4 = R3 << 31(S); -R3 = R4 << 0(S); -R2 = R5 << 31(S); -R1 = R6 << 0(S); -R0 = R7 << 31(S); -//A0 = A0 >>> uimm5 ; /* arithmetic right shift (b) */ -A0 = A0 >>> 0; -A0 = A0 >>> 15; -A0 = A0 >>> 31; - -//A0 = A0 << uimm5 ; /* logical left shift (b) */ -A0 = A0 << 0; -A0 = A0 << 15; -A0 = A0 << 31; - -//A1 = A1 >>> uimm5 ; /* arithmetic right shift (b) */ -A1 = A1 >>> 0; -A1 = A1 >>> 15; -A1 = A1 >>> 31; - -//A1 = A1 << uimm5 ; /* logical left shift (b) */ -A1 = A1 << 0; -A1 = A1 << 15; -A1 = A1 << 31; - -//Dreg >>>= Dreg ; /* arithmetic right shift (a) */ -R0 >>>= R0; -R0 >>>= R1; -R1 >>>= R0; -R1 >>>= R7; - -//Dreg <<= Dreg ; /* logical left shift (a) */ -R0 <<= R0; -R0 <<= R1; -R1 <<= R0; -R1 <<= R7; - -//Dreg_lo_hi = ASHIFT Dreg_lo_hi BY Dreg_lo (opt_sat) ; /* arithmetic right shift (b) */ -r3.l = ashift r0.h by r7.l ; /* shift, half-word */ -r3.h = ashift r0.l by r7.l ; -r3.h = ashift r0.h by r7.l ; -r3.l = ashift r0.l by r7.l ; -r3.l = ashift r0.h by r7.l(s) ; /* shift, half-word, saturated */ -r3.h = ashift r0.l by r7.l(s) ; /* shift, half-word, saturated */ -r3.h = ashift r0.h by r7.l(s) ; -r3.l = ashift r0.l by r7.l (s) ; - -//Dreg = ASHIFT Dreg BY Dreg_lo (opt_sat) ; /* arithmetic right shift (b) */ -r4 = ashift r2 by r7.l ; /* shift, word */ -r4 = ashift r2 by r7.l (s) ; /* shift, word, saturated */ - -//A0 = ASHIFT A0 BY Dreg_lo ; /* arithmetic right shift (b)*/ -A0 = ashift A0 by r7.l ; /* shift, Accumulator */ - -//A1 = ASHIFT A1 BY Dreg_lo ; /* arithmetic right shift (b)*/ -A1 = ashift A1 by r7.l ; /* shift, Accumulator */ - -p3 = p2 >> 1 ; /* pointer right shift by 1 */ -p3 = p3 >> 2 ; /* pointer right shift by 2 */ -p4 = p5 << 1 ; /* pointer left shift by 1 */ -p0 = p1 << 2 ; /* pointer left shift by 2 */ -r3 >>= 17 ; /* data right shift */ -r3 <<= 17 ; /* data left shift */ -r3.l = r0.l >> 4 ; /* data right shift, half-word register */ -r3.l = r0.h >> 4 ; /* same as above; half-word register combinations are arbitrary */ -r3.h = r0.l << 12 ; /* data left shift, half-word register */ -r3.h = r0.h << 14 ; /* same as above; half-word register combinations are arbitrary */ - -r3 = r6 >> 4 ; /* right shift, 32-bit word */ -r3 = r6 << 4 ; /* left shift, 32-bit word */ - -a0 = a0 >> 7 ; /* Accumulator right shift */ -a1 = a1 >> 25 ; /* Accumulator right shift */ -a0 = a0 << 7 ; /* Accumulator left shift */ -a1 = a1 << 14 ; /* Accumulator left shift */ - -r3 >>= r0 ; /* data right shift */ -r3 <<= r1 ; /* data left shift */ - -r3.l = lshift r0.l by r2.l ; /* shift direction controlled by sign of R2.L */ -r3.h = lshift r0.l by r2.l ; - -a0 = lshift a0 by r7.l ; -a1 = lshift a1 by r7.l ; - -r4 = rot r1 by 31 ; /* rotate left */ -r4 = rot r1 by -32 ; /* rotate right */ -r4 = rot r1 by 5 ; /* rotate right */ - -a0 = rot a0 by 22 ; /* rotate Accumulator left */ -a0 = rot a0 by -32 ; /* rotate Accumulator left */ -a0 = rot a0 by 31 ; /* rotate Accumulator left */ - -a1 = rot a1 by -32 ; /* rotate Accumulator right */ -a1 = rot a1 by 31 ; /* rotate Accumulator right */ -a1 = rot a1 by 22 ; /* rotate Accumulator right */ - -r4 = rot r1 by r2.l ; -a0 = rot a0 by r3.l ; -a1 = rot a1 by r7.l ; - -r0.l = r1.l << 0; -r0.l = r1.l << 1; -r0.l = r1.l << 2; -r0.l = r1.l << 4; -r0.l = r1.l >> 0; -r0.l = r1.l >> 1; -r0.l = r1.l >> 2; -r0.l = r1.l >> 4; -r0.l = r1.l >>> 1; -r0.l = r1.l >>> 2; -r0.l = r1.l >>> 4; - -r0.l = r1.h << 0; -r0.l = r1.h << 1; -r0.l = r1.h << 2; -r0.l = r1.h << 4; -r0.l = r1.h >> 0; -r0.l = r1.h >> 1; -r0.l = r1.h >> 2; -r0.l = r1.h >> 4; -r0.l = r1.h >>> 1; -r0.l = r1.h >>> 2; -r0.l = r1.h >>> 4; - -r0.l = r1.h << 0 (S); -r0.l = r1.h << 1 (S); -r0.l = r1.h << 2 (S); -r0.l = r1.h << 4 (S); -r0.l = r1.h >>> 1 (S); -r0.l = r1.h >>> 2 (S); -r0.l = r1.h >>> 4 (S); - + +.EXTERN MY_LABEL2; +.section .text; + +// +//9 SHIFT/ROTATE OPERATIONS +// + +//Preg = ( Preg + Preg ) << 1 ; /* dest_reg = (dest_reg + src_reg) x 2 (a) */ +P0 = (P0+P0)<<1; +P0 = (P0+P1)<<1; +P2 = (P2+P0)<<1; +P1 = (P1+P2)<<1; + +//P0 = (P2+P0)<<1; + +//Preg = ( Preg + Preg ) << 2 ; /* dest_reg = (dest_reg + src_reg) x 4 (a) */ +P0 = (P0+P0)<<2; +P0 = (P0+P1)<<2; +P2 = (P2+P0)<<2; +P1 = (P1+P2)<<2; + +//P0 = (P2+P0)<<2; + +//Dreg = (Dreg + Dreg) << 1 ; /* dest_reg = (dest_reg + src_reg) x 2 (a) */ +R0 = (R0+R0)<<1; +R0 = (R0+R1)<<1; +R2 = (R2+R0)<<1; +R1 = (R1+R2)<<1; + +//R0 = (R2+R0)<<1; + + +//Dreg = (Dreg + Dreg) << 2 ; /* dest_reg = (dest_reg + src_reg) x 4 (a) */ +R0 = (R0+R0)<<2; +R0 = (R0+R1)<<2; +R2 = (R2+R0)<<2; +R1 = (R1+R2)<<2; + +//R0 = (R2+R0)<<2; + +//Preg = Preg + ( Preg << 1 ) ; /* adder_pntr + (src_pntr x 2) (a) */ +P0 = P0 + (P0 << 1); +P0 = P0 + (P1 << 1); +P0 = P0 + (P2 << 1); +P0 = P1 + (P2 << 1); +P0 = P2 + (P3 << 1); +P1 = P0 + (P0 << 1); +P1 = P0 + (P1 << 1); +P1 = P0 + (P2 << 1); +P1 = P1 + (P2 << 1); +P1 = P2 + (P3 << 1); + +//Preg = Preg + ( Preg << 2 ) ; /* adder_pntr + (src_pntr x 4) (a) */ +P0 = P0 + (P0 << 2); +P0 = P0 + (P1 << 2); +P0 = P0 + (P2 << 2); +P0 = P1 + (P2 << 2); +P0 = P2 + (P3 << 2); +P1 = P0 + (P0 << 2); +P1 = P0 + (P1 << 2); +P1 = P0 + (P2 << 2); +P1 = P1 + (P2 << 2); +P1 = P2 + (P3 << 2); + +//Dreg >>>= uimm5 ; /* arithmetic right shift (a) */ +R0 >>>= 0; +R0 >>>= 31; +R0 >>>= 5; +R5 >>>= 0; +R5 >>>= 31; +R5 >>>= 5; + +//Dreg <<= uimm5 ; /* logical left shift (a) */ +R0 <<= 0; +R0 <<= 31; +R0 <<= 5; +R5 <<= 0; +R5 <<= 31; +R5 <<= 5; +//Dreg_lo_hi = Dreg_lo_hi >>> uimm4 ; /* arithmetic right shift (b) */ +R0.L = R0.L >>> 0; +R0.L = R0.L >>> 15; +R0.L = R0.H >>> 0; +R0.L = R0.H >>> 15; +R0.H = R0.L >>> 0; +R0.H = R0.L >>> 15; +R0.H = R0.H >>> 0; +R0.H = R0.H >>> 15; + +R0.L = R1.L >>> 0; +R0.L = R1.L >>> 15; +R0.L = R1.H >>> 0; +R0.L = R1.H >>> 15; +R0.H = R1.L >>> 0; +R0.H = R1.L >>> 15; +R0.H = R1.H >>> 0; +R0.H = R1.H >>> 15; + +R0.L = R7.L >>> 0; +R1.L = R6.L >>> 15; +R2.L = R5.H >>> 0; +R3.L = R4.H >>> 15; +R4.H = R3.L >>> 0; +R5.H = R2.L >>> 15; +R6.H = R1.H >>> 0; +R7.H = R0.H >>> 15; + +//Dreg_lo_hi = Dreg_lo_hi << uimm4 (S) ; /* arithmetic left shift (b) */ +R0.L = R0.L << 0(S); +R0.L = R0.L << 15(S); +R0.L = R0.H << 0(S); +R0.L = R0.H << 15(S); +R0.H = R0.L << 0(S); +R0.H = R0.L << 15(S); +R0.H = R0.H << 0(S); +R0.H = R0.H << 15(S); + +R0.L = R1.L << 0(S); +R0.L = R1.L << 15(S); +R0.L = R1.H << 0(S); +R0.L = R1.H << 15(S); +R0.H = R1.L << 0(S); +R0.H = R1.L << 15(S); +R0.H = R1.H << 0(S); +R0.H = R1.H << 15(S); + +R0.L = R7.L << 0(S); +R1.L = R6.L << 15(S); +R2.L = R5.H << 0(S); +R3.L = R4.H << 15(S); +R4.H = R3.L << 0(S); +R5.H = R2.L << 15(S); +R6.H = R1.H << 0(S); +R7.H = R0.H << 15(S); +//Dreg = Dreg >>> uimm5 ; /* arithmetic right shift (b) */ +R0 = R0 >>> 0; +R0 = R0 >>> 31; +R0 = R1 >>> 0; +R0 = R1 >>> 31; +R7 = R0 >>> 0; +R6 = R1 >>> 31; +R5 = R2 >>> 0; +R4 = R3 >>> 31; +R3 = R4 >>> 0; +R2 = R5 >>> 31; +R1 = R6 >>> 0; +R0 = R7 >>> 31; + +//Dreg = Dreg << uimm5 (S) ; /* arithmetic left shift (b) */ +R0 = R0 << 0(S); +R0 = R0 << 31(S); +R0 = R1 << 0(S); +R0 = R1 << 31(S); +R7 = R0 << 0(S); +R6 = R1 << 31(S); +R5 = R2 << 0(S); +R4 = R3 << 31(S); +R3 = R4 << 0(S); +R2 = R5 << 31(S); +R1 = R6 << 0(S); +R0 = R7 << 31(S); +//A0 = A0 >>> uimm5 ; /* arithmetic right shift (b) */ +A0 = A0 >>> 0; +A0 = A0 >>> 15; +A0 = A0 >>> 31; + +//A0 = A0 << uimm5 ; /* logical left shift (b) */ +A0 = A0 << 0; +A0 = A0 << 15; +A0 = A0 << 31; + +//A1 = A1 >>> uimm5 ; /* arithmetic right shift (b) */ +A1 = A1 >>> 0; +A1 = A1 >>> 15; +A1 = A1 >>> 31; + +//A1 = A1 << uimm5 ; /* logical left shift (b) */ +A1 = A1 << 0; +A1 = A1 << 15; +A1 = A1 << 31; + +//Dreg >>>= Dreg ; /* arithmetic right shift (a) */ +R0 >>>= R0; +R0 >>>= R1; +R1 >>>= R0; +R1 >>>= R7; + +//Dreg <<= Dreg ; /* logical left shift (a) */ +R0 <<= R0; +R0 <<= R1; +R1 <<= R0; +R1 <<= R7; + +//Dreg_lo_hi = ASHIFT Dreg_lo_hi BY Dreg_lo (opt_sat) ; /* arithmetic right shift (b) */ +r3.l = ashift r0.h by r7.l ; /* shift, half-word */ +r3.h = ashift r0.l by r7.l ; +r3.h = ashift r0.h by r7.l ; +r3.l = ashift r0.l by r7.l ; +r3.l = ashift r0.h by r7.l(s) ; /* shift, half-word, saturated */ +r3.h = ashift r0.l by r7.l(s) ; /* shift, half-word, saturated */ +r3.h = ashift r0.h by r7.l(s) ; +r3.l = ashift r0.l by r7.l (s) ; + +//Dreg = ASHIFT Dreg BY Dreg_lo (opt_sat) ; /* arithmetic right shift (b) */ +r4 = ashift r2 by r7.l ; /* shift, word */ +r4 = ashift r2 by r7.l (s) ; /* shift, word, saturated */ + +//A0 = ASHIFT A0 BY Dreg_lo ; /* arithmetic right shift (b)*/ +A0 = ashift A0 by r7.l ; /* shift, Accumulator */ + +//A1 = ASHIFT A1 BY Dreg_lo ; /* arithmetic right shift (b)*/ +A1 = ashift A1 by r7.l ; /* shift, Accumulator */ + +p3 = p2 >> 1 ; /* pointer right shift by 1 */ +p3 = p3 >> 2 ; /* pointer right shift by 2 */ +p4 = p5 << 1 ; /* pointer left shift by 1 */ +p0 = p1 << 2 ; /* pointer left shift by 2 */ +r3 >>= 17 ; /* data right shift */ +r3 <<= 17 ; /* data left shift */ +r3.l = r0.l >> 4 ; /* data right shift, half-word register */ +r3.l = r0.h >> 4 ; /* same as above; half-word register combinations are arbitrary */ +r3.h = r0.l << 12 ; /* data left shift, half-word register */ +r3.h = r0.h << 14 ; /* same as above; half-word register combinations are arbitrary */ + +r3 = r6 >> 4 ; /* right shift, 32-bit word */ +r3 = r6 << 4 ; /* left shift, 32-bit word */ + +a0 = a0 >> 7 ; /* Accumulator right shift */ +a1 = a1 >> 25 ; /* Accumulator right shift */ +a0 = a0 << 7 ; /* Accumulator left shift */ +a1 = a1 << 14 ; /* Accumulator left shift */ + +r3 >>= r0 ; /* data right shift */ +r3 <<= r1 ; /* data left shift */ + +r3.l = lshift r0.l by r2.l ; /* shift direction controlled by sign of R2.L */ +r3.h = lshift r0.l by r2.l ; + +a0 = lshift a0 by r7.l ; +a1 = lshift a1 by r7.l ; + +r4 = rot r1 by 31 ; /* rotate left */ +r4 = rot r1 by -32 ; /* rotate right */ +r4 = rot r1 by 5 ; /* rotate right */ + +a0 = rot a0 by 22 ; /* rotate Accumulator left */ +a0 = rot a0 by -32 ; /* rotate Accumulator left */ +a0 = rot a0 by 31 ; /* rotate Accumulator left */ + +a1 = rot a1 by -32 ; /* rotate Accumulator right */ +a1 = rot a1 by 31 ; /* rotate Accumulator right */ +a1 = rot a1 by 22 ; /* rotate Accumulator right */ + +r4 = rot r1 by r2.l ; +a0 = rot a0 by r3.l ; +a1 = rot a1 by r7.l ; + +r0.l = r1.l << 0; +r0.l = r1.l << 1; +r0.l = r1.l << 2; +r0.l = r1.l << 4; +r0.l = r1.l >> 0; +r0.l = r1.l >> 1; +r0.l = r1.l >> 2; +r0.l = r1.l >> 4; +r0.l = r1.l >>> 1; +r0.l = r1.l >>> 2; +r0.l = r1.l >>> 4; + +r0.l = r1.h << 0; +r0.l = r1.h << 1; +r0.l = r1.h << 2; +r0.l = r1.h << 4; +r0.l = r1.h >> 0; +r0.l = r1.h >> 1; +r0.l = r1.h >> 2; +r0.l = r1.h >> 4; +r0.l = r1.h >>> 1; +r0.l = r1.h >>> 2; +r0.l = r1.h >>> 4; + +r0.l = r1.h << 0 (S); +r0.l = r1.h << 1 (S); +r0.l = r1.h << 2 (S); +r0.l = r1.h << 4 (S); +r0.l = r1.h >>> 1 (S); +r0.l = r1.h >>> 2 (S); +r0.l = r1.h >>> 4 (S); +