123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- // Immediate dual 16b SHIFT test program.
- // Test r4 = ASHIFT/ASHIFT (r2 by 10);
- // Test r4 = ASHIFT/ASHIFT (r2 by 10) S;
- // Test r4 = LSHIFT/LSHIFT (r2 by 10);
- # mach: bfin
- .include "testutils.inc"
- start
- // arithmetic
- // left by largest positive magnitude of 15 (0xf)
- // 8001 -> 8000
- R7 = 0;
- ASTAT = R7;
- R0.L = 0x8001;
- R0.H = 0x0100;
- R6 = R0 << 15 (V);
- DBGA ( R6.L , 0x8000 );
- DBGA ( R6.H , 0x0000 );
- CC = AZ; R7 = CC; DBGA ( R7.L , 0x1 );
- CC = AN; R7 = CC; DBGA ( R7.L , 0x1 );
- CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
- CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
- CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
- // arithmetic
- // left by largest positive magnitude of 15 (0xf) with saturation
- R7 = 0;
- ASTAT = R7;
- R0.L = 0x8001;
- R0.H = 0x0100;
- R6 = R0 << 15 (V , S);
- DBGA ( R6.L , 0x8000 );
- DBGA ( R6.H , 0x7fff );
- CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
- CC = AN; R7 = CC; DBGA ( R7.L , 0x1 );
- CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
- CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
- CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
- // arithmetic
- // left by 1
- R7 = 0;
- ASTAT = R7;
- R0.L = 0x8001;
- R0.H = 0x0100;
- R6 = R0 << 1 (V);
- DBGA ( R6.L , 0x0002 );
- DBGA ( R6.H , 0x0200 );
- CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
- CC = AN; R7 = CC; DBGA ( R7.L , 0x0 );
- CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
- CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
- CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
- // arithmetic
- // left by 1 saturating
- R7 = 0;
- ASTAT = R7;
- R0.L = 0x8001;
- R0.H = 0x0100;
- R6 = R0 << 1 (V , S);
- DBGA ( R6.L , 0x8000 );
- DBGA ( R6.H , 0x0200 );
- CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
- CC = AN; R7 = CC; DBGA ( R7.L , 0x1 );
- CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
- CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
- CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
- // arithmetic
- // left by 15 saturating
- R7 = 0;
- ASTAT = R7;
- R0.L = 0xfff0;
- R0.H = 0x0000;
- R6 = R0 << 15 (V , S);
- DBGA ( R6.L , 0x8000 );
- DBGA ( R6.H , 0x0000 );
- CC = AZ; R7 = CC; DBGA ( R7.L , 0x1 );
- CC = AN; R7 = CC; DBGA ( R7.L , 0x1 );
- CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
- CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
- CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
- // arithmetic
- // right by 15
- R7 = 0;
- ASTAT = R7;
- R0.L = 0x8000;
- R0.H = 0x0100;
- R6 = R0 >>> 15 (V);
- DBGA ( R6.L , 0xffff );
- DBGA ( R6.H , 0x0000 );
- CC = AZ; R7 = CC; DBGA ( R7.L , 0x1 );
- CC = AN; R7 = CC; DBGA ( R7.L , 0x1 );
- CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
- CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
- CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
- // arithmetic
- // right by 15 (sat has no effect)
- R7 = 0;
- ASTAT = R7;
- R0.L = 0x8000;
- R0.H = 0x0100;
- R6 = R0 >>> 15 (V);
- DBGA ( R6.L , 0xffff );
- DBGA ( R6.H , 0x0000 );
- CC = AZ; R7 = CC; DBGA ( R7.L , 0x1 );
- CC = AN; R7 = CC; DBGA ( R7.L , 0x1 );
- CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
- CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
- CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
- // logic
- // right by 15
- R7 = 0;
- ASTAT = R7;
- R0.L = 0x8000;
- R0.H = 0x0100;
- R6 = R0 >> 15 (V);
- DBGA ( R6.L , 0x0001 );
- DBGA ( R6.H , 0x0000 );
- CC = AZ; R7 = CC; DBGA ( R7.L , 0x1 );
- CC = AN; R7 = CC; DBGA ( R7.L , 0x0 );
- CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
- CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
- CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
- pass
|