123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- // load up some registers.
- // setup up a global pointer table and load some state.
- // save the machine state and clear some of the values.
- // then restore and assert some of the values to ensure that
- // we maintain consitent machine state.
- # mach: bfin
- .include "testutils.inc"
- start
- R0 = 1;
- R1 = 2;
- R2 = 3;
- R3 = -7;
- R4 = 4;
- R5 = 5;
- R6 = 6;
- R7 = 7;
- loadsym P0, a;
- P1.L = 0x1000;
- _DBG P0;
- _DBG P1;
- SP = P0;
- FP = P0;
- CALL try;
- P1 = [ P0 ++ ];
- P2 = [ P0 ++ ];
- P0 += 4;
- P4 = [ P0 ++ ];
- P5 = [ P0 ++ ];
- [ -- SP ] = ( R7:0, P5:0 );
- _DBG SP;
- _DBG FP;
- R0 = R0 ^ R0;
- R1 = R1 ^ R1;
- R2 = R2 ^ R2;
- R4 = R4 ^ R4;
- R5 = R5 ^ R5;
- R6 = R6 ^ R6;
- R7 = R7 ^ R7;
- ( R7:0, P5:0 ) = [ SP ++ ];
- DBGA ( R0.L , 1 );
- DBGA ( R1.L , 2 );
- DBGA ( R2.L , 3 );
- DBGA ( R3.L , 0xfff9 );
- DBGA ( R4.L , 4 );
- DBGA ( R5.L , 5 );
- DBGA ( R6.L , 6 );
- DBGA ( R7.L , 7 );
- R0 = SP;
- loadsym R1, a;
- CC = R0 == R1;
- IF !CC JUMP abrt;
- R0 = FP;
- CC = R0 == R1;
- CC = R0 == R1;
- IF !CC JUMP abrt;
- pass
- abrt:
- fail;
- try:
- LINK 0;
- [ -- SP ] = ( R7:0, P5:0 );
- R7 = 0x1234 (X);
- [ -- SP ] = R7;
- CALL bar;
- R7 = [ SP ++ ];
- ( R7:0, P5:0 ) = [ SP ++ ];
- UNLINK;
- RTS;
- bar:
- LINK 0;
- [ -- SP ] = ( R7:0, P5:0 );
- R0 = [ FP + 8 ];
- DBGA ( R0.L , 0x1234 );
- CALL foo;
- ( R7:0, P5:0 ) = [ SP ++ ];
- UNLINK;
- RTS;
- foo:
- DBGA ( R0.L , 0x1234 );
- RTS;
- .data
- _gptab:
- .dw 0x200
- .dw 0x000
- .dw 0x300
- .dw 0x400
- .dw 0x500
- .dw 0x600
- .space (0x100)
- a:
- .dw 1
- .dw 2
- .dw 3
- .dw 4
- .dw 5
- .dw 6
- .dw 7
- .dw 8
- .dw 9
- .dw 0xa
|