blob: 131f8c5190c812a46700991573126b9ddddf2bc1 [file] [log] [blame]
// 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;
SP += 4;
( R7:0, P5:0 ) = [ SP ++ ];
UNLINK;
RTS;
bar:
LINK 0;
[ -- SP ] = ( R7:0, P5:0 );
R0 = [ FP + 8 ];
DBGA ( R0.L , 0x1234 );
( R7:0, P5:0 ) = [ SP ++ ];
UNLINK;
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