1# mach: bfin
2
3.include "testutils.inc"
4	start
5
6
7// load up some registers.
8// setup up a global pointer table and load some state.
9// save the machine state and clear some of the values.
10// then restore and assert some of the values to ensure that
11// we maintain consitent machine state.
12
13	R0 = 1;
14	R1 = 2;
15	R2 = 3;
16	R3 = -7;
17	R4 = 4;
18	R5 = 5;
19	R6 = 6;
20	R7 = 7;
21
22	loadsym P0, a;
23	_DBG P0;
24	SP = P0;
25	FP = P0;
26	P1 = [ P0 ++ ];
27	P2 = [ P0 ++ ];
28	P0 += 4;
29	P4 = [ P0 ++ ];
30	P5 = [ P0 ++ ];
31	[ -- SP ] = ( R7:0, P5:0 );
32	_DBG SP;
33	_DBG FP;
34	R0 = R0 ^ R0;
35	R1 = R1 ^ R1;
36	R2 = R2 ^ R2;
37	R4 = R4 ^ R4;
38	R5 = R5 ^ R5;
39	R6 = R6 ^ R6;
40	R7 = R7 ^ R7;
41	( R7:0, P5:0 ) = [ SP ++ ];
42	DBGA ( R0.L , 1 );
43	DBGA ( R2.L , 3 );
44	DBGA ( R7.L , 7 );
45	R0 = SP;
46	loadsym R1, a;
47	CC = R0 == R1;
48	IF !CC JUMP abrt;
49	R0 = FP;
50	CC = R0 == R1;
51	CC = R0 == R1;
52	IF !CC JUMP abrt;
53
54	pass
55abrt:
56	fail
57
58	.data
59_gptab:
60	.dw 0x200
61	.dw 0x000
62	.dw 0x300
63	.dw 0x400
64	.dw 0x500
65	.dw 0x600
66
67	.space (0x100)
68a:
69	.dw 1
70	.dw 2
71	.dw 3
72	.dw 4
73	.dw 5
74	.dw 6
75	.dw 7
76	.dw 8
77	.dw 9
78	.dw 0xa
79