| // SHIFT test program. |
| // Test A0 = ASHIFT (A0 by r3); |
| # mach: bfin |
| |
| .include "testutils.inc" |
| start |
| |
| // load r0=0x0000001f |
| // load r1=0x00000020 |
| // load r2=0x00000000 |
| // load r3=0x00000000 |
| // load r4=0x00000001 |
| // load r5=0x00000080 |
| loadsym P0, data0; |
| P1 = P0; |
| R0 = [ P0 ++ ]; |
| R1 = [ P0 ++ ]; |
| R2 = [ P0 ++ ]; |
| R3 = [ P0 ++ ]; |
| R4 = [ P0 ++ ]; |
| R5 = [ P0 ++ ]; |
| |
| // left by largest positive magnitude of 31 (0x1f) |
| // A0: 80 0000 0001 -> 80 0000 0000 |
| R7 = 0; |
| ASTAT = R7; |
| A0.w = R4; |
| A0.x = R5.L; |
| A0 = ASHIFT A0 BY R0.L; |
| R6 = A0.w; |
| R7.L = A0.x; |
| DBGA ( R6.L , 0x0000 ); |
| DBGA ( R6.H , 0x8000 ); |
| DBGA ( R7.L , 0x0000 ); |
| 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 ); |
| |
| // left by largest positive magnitude + 1 = 32 (0x20), which is -32 |
| // A0: 80 0000 0001 -> |
| R7 = 0; |
| ASTAT = R7; |
| A0.w = R4; |
| A0.x = R5.L; |
| A0 = ASHIFT A0 BY R1.L; |
| R6 = A0.w; |
| R7.L = A0.x; |
| DBGA ( R6.L , 0xff80 ); |
| DBGA ( R6.H , 0xffff ); |
| DBGA ( R7.L , 0xffff ); |
| 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 ); |
| |
| // by -1 |
| // A0: 80 0000 0001 -> c0 0000 0000 |
| A0.w = R4; |
| A0.x = R5.L; |
| |
| R3.L = 0x00ff; |
| |
| A0 = ASHIFT A0 BY R3.L; |
| R6 = A0.w; |
| R7.L = A0.x; |
| DBGA ( R6.L , 0x0000 ); |
| DBGA ( R6.H , 0x0000 ); |
| DBGA ( R7.L , 0xffc0 ); |
| |
| pass |
| |
| .data |
| data0: |
| .dw 0x001f |
| .dw 0x0000 |
| .dw 0x0020 |
| .dw 0x0000 |
| .dw 0x0059 |
| .dw 0x0000 |
| .dw 0x005a |
| .dw 0x0000 |
| .dw 0x0001 |
| .dw 0x0000 |
| .dw 0x0080 |
| .dw 0x0000 |