diff options
Diffstat (limited to 'sim/testsuite/bfin/s16.s')
-rw-r--r-- | sim/testsuite/bfin/s16.s | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/sim/testsuite/bfin/s16.s b/sim/testsuite/bfin/s16.s new file mode 100644 index 0000000..6741cf3 --- /dev/null +++ b/sim/testsuite/bfin/s16.s @@ -0,0 +1,170 @@ +// reg-based SHIFT test program. +# mach: bfin + +.include "testutils.inc" + start + + +// Test FDEP with no sign extension + + R0.L = 0xdead; + R0.H = 0x1234; + R1.L = 0x0c08; // pos=12 len=8 + R1.H = 0x00ff; + R7 = DEPOSIT( R0, R1 ); + DBGA ( R7.L , 0xfead ); + DBGA ( R7.H , 0x123f ); + + R0.L = 0xdead; + R0.H = 0x1234; + R1.L = 0x0c04; // pos=12 len=4 + R1.H = 0x00ff; + R7 = DEPOSIT( R0, R1 ); + DBGA ( R7.L , 0xfead ); + DBGA ( R7.H , 0x1234 ); + + R0.L = 0xdead; + R0.H = 0x1234; + R1.L = 0x0c05; // pos=12 len=5 + R1.H = 0x00ff; + R7 = DEPOSIT( R0, R1 ); + DBGA ( R7.L , 0xfead ); + DBGA ( R7.H , 0x1235 ); + + R0.L = 0xdead; + R0.H = 0x1234; + R1.L = 0x0010; // pos=0 len=16 + R1.H = 0xffff; + R7 = DEPOSIT( R0, R1 ); + DBGA ( R7.L , 0xffff ); + DBGA ( R7.H , 0x1234 ); + + R0.L = 0xdead; + R0.H = 0x1234; + R1.L = 0x0011; // pos=0 len=17 + R1.H = 0xffff; + R7 = DEPOSIT( R0, R1 ); + DBGA ( R7.L , 0xffff ); + DBGA ( R7.H , 0x1234 ); + + R0.L = 0xdead; + R0.H = 0x1234; + R1.L = 0x0114; // pos=1 len=20 + R1.H = 0xffff; + R7 = DEPOSIT( R0, R1 ); + DBGA ( R7.L , 0xffff ); + DBGA ( R7.H , 0x1235 ); + + R0.L = 0xdead; + R0.H = 0x1234; + R1.L = 0x001f; // pos=0 len=31 + R1.H = 0xffff; + R7 = DEPOSIT( R0, R1 ); + DBGA ( R7.L , 0xffff ); + DBGA ( R7.H , 0x1234 ); + + R0.L = 0xdead; + R0.H = 0x1234; + R1.L = 0x1c04; // pos=28 len=4 + R1.H = 0xffff; + R7 = DEPOSIT( R0, R1 ); + DBGA ( R7.L , 0xdead ); + DBGA ( R7.H , 0xf234 ); + + R0.L = 0xdead; + R0.H = 0x0234; + R1.L = 0x1d04; // pos=29 len=4 + R1.H = 0xffff; + R7 = DEPOSIT( R0, R1 ); + DBGA ( R7.L , 0xdead ); + DBGA ( R7.H , 0xe234 ); + + R0.L = 0xdead; + R0.H = 0x0234; + R1.L = 0x1f04; // pos=31 len=4 + R1.H = 0xffff; + R7 = DEPOSIT( R0, R1 ); + DBGA ( R7.L , 0xdead ); + DBGA ( R7.H , 0x8234 ); + + R0.L = 0xdead; + R0.H = 0x0234; + R1.L = 0x2004; // pos=32 len=4, same as pos=0 len=4 + R1.H = 0xffff; + R7 = DEPOSIT( R0, R1 ); + DBGA ( R7.L , 0xdeaf ); + DBGA ( R7.H , 0x0234 ); + +// Test FDEP with sign extension + + R0.L = 0xdead; + R0.H = 0x1234; + R1.L = 0x0c08; // pos=12 len=8 + R1.H = 0x00ff; + R7 = DEPOSIT( R0, R1 ) (X); + DBGA ( R7.L , 0xfead ); + DBGA ( R7.H , 0xffff ); + CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); + CC = AN; R7 = CC; DBGA ( R7.L , 0x1 ); + + R0.L = 0xdead; + R0.H = 0x1234; + R1.L = 0x0c08; // pos=12 len=8 + R1.H = 0x007f; + R7 = DEPOSIT( R0, R1 ) (X); + DBGA ( R7.L , 0xfead ); + DBGA ( R7.H , 0x0007 ); + CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); + CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); + + R0.L = 0xdea0; + R0.H = 0x1234; + R1.L = 0x0110; // pos=1 len=16 + R1.H = 0xffff; + R7 = DEPOSIT( R0, R1 ) (X); + DBGA ( R7.L , 0xfffe ); + DBGA ( R7.H , 0xffff ); + CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); + CC = AN; R7 = CC; DBGA ( R7.L , 0x1 ); + + R0.L = 0xdea0; + R0.H = 0x1234; + R1.L = 0x0101; // pos=1 len=1 + R1.H = 0xffff; + R7 = DEPOSIT( R0, R1 ) (X); + DBGA ( R7.L , 0xfffe ); + DBGA ( R7.H , 0xffff ); + CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); + CC = AN; R7 = CC; DBGA ( R7.L , 0x1 ); + + R0.L = 0xdea0; + R0.H = 0x1234; + R1.L = 0x0102; // pos=1 len=2 + R1.H = 0x0001; + R7 = DEPOSIT( R0, R1 ) (X); + DBGA ( R7.L , 0x0002 ); + DBGA ( R7.H , 0x0000 ); + CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); + CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); + + R0.L = 0xdea0; + R0.H = 0x1234; + R1.L = 0x0002; // pos=0 len=2 + R1.H = 0x0001; + R7 = DEPOSIT( R0, R1 ) (X); + DBGA ( R7.L , 0x0001 ); + DBGA ( R7.H , 0x0000 ); + CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 ); + CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); + + R0.L = 0xdea0; + R0.H = 0x1234; + R1.L = 0x0000; // pos=0 len=0 + R1.H = 0x000f; + R7 = DEPOSIT( R0, R1 ) (X); + DBGA ( R7.L , 0x0000 ); + DBGA ( R7.H , 0x0000 ); + CC = AZ; R7 = CC; DBGA ( R7.L , 0x1 ); + CC = AN; R7 = CC; DBGA ( R7.L , 0x0 ); + + pass |