| // 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 |