1*6ca2c52aSchristos/*  ALU test program.
2*6ca2c52aSchristos *  Test instructions
3*6ca2c52aSchristos *  r3= + (r0,r0);
4*6ca2c52aSchristos *  r3= + (r0,r0) s;
5*6ca2c52aSchristos *  r3= - (r0,r0);
6*6ca2c52aSchristos *  r3= - (r0,r0) s;
7*6ca2c52aSchristos */
8*6ca2c52aSchristos# mach: bfin
9*6ca2c52aSchristos
10*6ca2c52aSchristos.include "testutils.inc"
11*6ca2c52aSchristos	start
12*6ca2c52aSchristos
13*6ca2c52aSchristos
14*6ca2c52aSchristos// overflow  positive
15*6ca2c52aSchristos	R0.L = 0xffff;
16*6ca2c52aSchristos	R0.H = 0x7fff;
17*6ca2c52aSchristos	R7 = 0;
18*6ca2c52aSchristos	ASTAT = R7;
19*6ca2c52aSchristos	R3 = R0 + R0 (NS);
20*6ca2c52aSchristos	DBGA ( R3.L , 0xfffe );
21*6ca2c52aSchristos	DBGA ( R3.H , 0xffff );
22*6ca2c52aSchristos	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
23*6ca2c52aSchristos	CC = AN;	R7 = CC; DBGA ( R7.L , 0x1 );
24*6ca2c52aSchristos	CC = V;	R7 = CC; DBGA ( R7.L , 0x1 );
25*6ca2c52aSchristos	CC = VS;	R7 = CC; DBGA ( R7.L , 0x1 );
26*6ca2c52aSchristos	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
27*6ca2c52aSchristos
28*6ca2c52aSchristos// overflow  negative
29*6ca2c52aSchristos	R0.L = 0x0000;
30*6ca2c52aSchristos	R0.H = 0x8000;
31*6ca2c52aSchristos	R7 = 0;
32*6ca2c52aSchristos	ASTAT = R7;
33*6ca2c52aSchristos	R3 = R0 + R0 (NS);
34*6ca2c52aSchristos	DBGA ( R3.L , 0x0000 );
35*6ca2c52aSchristos	DBGA ( R3.H , 0x0000 );
36*6ca2c52aSchristos	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x1 );
37*6ca2c52aSchristos	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
38*6ca2c52aSchristos	CC =  V;	R7 = CC; DBGA ( R7.L , 0x1 );
39*6ca2c52aSchristos	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x1 );
40*6ca2c52aSchristos
41*6ca2c52aSchristos// zero
42*6ca2c52aSchristos	R0.L = 0xffff;
43*6ca2c52aSchristos	R0.H = 0xffff;
44*6ca2c52aSchristos	R1.L = 0x0001;
45*6ca2c52aSchristos	R1.H = 0x0000;
46*6ca2c52aSchristos	R7 = 0;
47*6ca2c52aSchristos	ASTAT = R7;
48*6ca2c52aSchristos	R3 = R1 + R0 (NS);
49*6ca2c52aSchristos	DBGA ( R3.L , 0x0000 );
50*6ca2c52aSchristos	DBGA ( R3.H , 0x0000 );
51*6ca2c52aSchristos	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x1 );
52*6ca2c52aSchristos	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
53*6ca2c52aSchristos	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
54*6ca2c52aSchristos	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x1 );
55*6ca2c52aSchristos
56*6ca2c52aSchristos// saturate positive
57*6ca2c52aSchristos	R0.L = 0;
58*6ca2c52aSchristos	R0.H = 0x7fff;
59*6ca2c52aSchristos	R7 = 0;
60*6ca2c52aSchristos	ASTAT = R7;
61*6ca2c52aSchristos	R3 = R0 + R0 (S);
62*6ca2c52aSchristos	DBGA ( R3.L , 0xffff );
63*6ca2c52aSchristos	DBGA ( R3.H , 0x7fff );
64*6ca2c52aSchristos	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
65*6ca2c52aSchristos	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
66*6ca2c52aSchristos	CC =  V;	R7 = CC; DBGA ( R7.L , 0x1 );
67*6ca2c52aSchristos	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
68*6ca2c52aSchristos
69*6ca2c52aSchristos// saturate negative
70*6ca2c52aSchristos	R0.L = 0;
71*6ca2c52aSchristos	R0.H = 0x8000;
72*6ca2c52aSchristos	R7 = 0;
73*6ca2c52aSchristos	ASTAT = R7;
74*6ca2c52aSchristos	R3 = R0 + R0 (S);
75*6ca2c52aSchristos	DBGA ( R3.L , 0x0000 );
76*6ca2c52aSchristos	DBGA ( R3.H , 0x8000 );
77*6ca2c52aSchristos
78*6ca2c52aSchristos	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
79*6ca2c52aSchristos	CC = AN;	R7 = CC; DBGA ( R7.L , 0x1 );
80*6ca2c52aSchristos	CC =  V;	R7 = CC; DBGA ( R7.L , 0x1 );
81*6ca2c52aSchristos	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x1 );
82*6ca2c52aSchristos
83*6ca2c52aSchristos// saturate positive with subtraction
84*6ca2c52aSchristos	R0.L = 0xffff;
85*6ca2c52aSchristos	R0.H = 0xffff;
86*6ca2c52aSchristos	R1.L = 0xffff;
87*6ca2c52aSchristos	R1.H = 0x7fff;
88*6ca2c52aSchristos	R7 = 0;
89*6ca2c52aSchristos	ASTAT = R7;
90*6ca2c52aSchristos	R3 = R1 - R0 (S);
91*6ca2c52aSchristos	DBGA ( R3.L , 0xffff );
92*6ca2c52aSchristos	DBGA ( R3.H , 0x7fff );
93*6ca2c52aSchristos	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
94*6ca2c52aSchristos	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
95*6ca2c52aSchristos	CC =  V;	R7 = CC; DBGA ( R7.L , 0x1 );
96*6ca2c52aSchristos	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
97*6ca2c52aSchristos
98*6ca2c52aSchristos// saturate negative with subtraction
99*6ca2c52aSchristos	R0.L = 0x1;
100*6ca2c52aSchristos	R0.H = 0x0;
101*6ca2c52aSchristos	R1.L = 0x0000;
102*6ca2c52aSchristos	R1.H = 0x8000;
103*6ca2c52aSchristos	R7 = 0;
104*6ca2c52aSchristos	ASTAT = R7;
105*6ca2c52aSchristos	R3 = R1 - R0 (S);
106*6ca2c52aSchristos	DBGA ( R3.L , 0x0000 );
107*6ca2c52aSchristos	DBGA ( R3.H , 0x8000 );
108*6ca2c52aSchristos	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
109*6ca2c52aSchristos	CC = AN;	R7 = CC; DBGA ( R7.L , 0x1 );
110*6ca2c52aSchristos	CC =  V;	R7 = CC; DBGA ( R7.L , 0x1 );
111*6ca2c52aSchristos	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x1 );
112*6ca2c52aSchristos
113*6ca2c52aSchristos	pass
114