1//  ALU test program.
2//  Test 32 bit MAX, MIN, ABS instructions
3# mach: bfin
4
5.include "testutils.inc"
6	start
7
8
9// MAX
10// first operand is larger, so AN=0
11	R0.L = 0x0001;
12	R0.H = 0x0000;
13	R1.L = 0x0000;
14	R1.H = 0x0000;
15	R7 = MAX ( R0 , R1 );
16	DBGA ( R7.L , 0x0001 );
17	DBGA ( R7.H , 0x0000 );
18	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
19	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
20	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
21	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
22	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
23
24// second operand is larger, so AN=1
25	R0.L = 0x0000;
26	R0.H = 0x0000;
27	R1.L = 0x0001;
28	R1.H = 0x0000;
29	R7 = MAX ( R0 , R1 );
30	DBGA ( R7.L , 0x0001 );
31	DBGA ( R7.H , 0x0000 );
32	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
33	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
34	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
35	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
36	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
37
38// first operand is larger, check correct output with overflow
39	R0.L = 0xffff;
40	R0.H = 0x7fff;
41	R1.L = 0xffff;
42	R1.H = 0xffff;
43	R7 = MAX ( R0 , R1 );
44	DBGA ( R7.L , 0xffff );
45	DBGA ( R7.H , 0x7fff );
46	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
47	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
48	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
49	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
50	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
51
52// second operand is larger, no overflow here
53	R0.L = 0xffff;
54	R0.H = 0xffff;
55	R1.L = 0xffff;
56	R1.H = 0x7fff;
57	R7 = MAX ( R0 , R1 );
58	DBGA ( R7.L , 0xffff );
59	DBGA ( R7.H , 0x7fff );
60	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
61	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
62	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
63	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
64	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
65
66// second operand is larger, overflow
67	R0.L = 0xffff;
68	R0.H = 0x800f;
69	R1.L = 0xffff;
70	R1.H = 0x7fff;
71	R7 = MAX ( R0 , R1 );
72	DBGA ( R7.L , 0xffff );
73	DBGA ( R7.H , 0x7fff );
74	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
75	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
76	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
77	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
78	CC = AV0;	R7 = CC; DBGA ( R7.L , 0x0 );
79	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
80	CC = AV0S;	R7 = CC; DBGA ( R7.L , 0x0 );
81	CC = AV1S;	R7 = CC; DBGA ( R7.L , 0x0 );
82
83// both operands equal
84	R0.L = 0x0080;
85	R0.H = 0x8000;
86	R1.L = 0x0080;
87	R1.H = 0x8000;
88	R7 = MAX ( R0 , R1 );
89	DBGA ( R7.L , 0x0080 );
90	DBGA ( R7.H , 0x8000 );
91	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
92	CC = AN;	R7 = CC; DBGA ( R7.L , 0x1 );
93	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
94	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
95	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
96
97// MIN
98// second operand is smaller
99	R0.L = 0x0001;
100	R0.H = 0x0000;
101	R1.L = 0x0000;
102	R1.H = 0x0000;
103	R7 = MIN ( R0 , R1 );
104	DBGA ( R7.L , 0x0000 );
105	DBGA ( R7.H , 0x0000 );
106	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x1 );
107	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
108	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
109	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
110	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
111
112// first operand is smaller
113	R0.L = 0x0001;
114	R0.H = 0x8000;
115	R1.L = 0x0000;
116	R1.H = 0x0000;
117	R7 = MIN ( R0 , R1 );
118	DBGA ( R7.L , 0x0001 );
119	DBGA ( R7.H , 0x8000 );
120	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
121	CC = AN;	R7 = CC; DBGA ( R7.L , 0x1 );
122	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
123	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
124	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
125
126// first operand is smaller, overflow
127	R0.L = 0x0001;
128	R0.H = 0x8000;
129	R1.L = 0x0000;
130	R1.H = 0x0ff0;
131	R7 = MIN ( R0 , R1 );
132	DBGA ( R7.L , 0x0001 );
133	DBGA ( R7.H , 0x8000 );
134	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
135	CC = AN;	R7 = CC; DBGA ( R7.L , 0x1 );
136	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
137	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
138	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
139
140// equal operands
141	R0.L = 0x0001;
142	R0.H = 0x8000;
143	R1.L = 0x0001;
144	R1.H = 0x8000;
145	R7 = MIN ( R0 , R1 );
146	DBGA ( R7.L , 0x0001 );
147	DBGA ( R7.H , 0x8000 );
148	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
149	CC = AN;	R7 = CC; DBGA ( R7.L , 0x1 );
150	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
151	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
152	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
153
154// ABS
155	R0.L = 0x0001;
156	R0.H = 0x8000;
157	R7 = ABS R0;
158	_DBG R7;
159	_DBG ASTAT;
160	R6 = ASTAT;
161
162	_DBG R6;
163	DBGA ( R7.L , 0xffff );
164	DBGA ( R7.H , 0x7fff );
165//CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
166//CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
167//CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
168//CC =  V;	R7 = CC; DBGA ( R7.L , 0x1 );
169//CC =  VS;	R7 = CC; DBGA ( R7.L , 0x1 );
170//CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
171
172	R0.L = 0x0001;
173	R0.H = 0x0000;
174	R7 = ABS R0;
175	DBGA ( R7.L , 0x0001 );
176	DBGA ( R7.H , 0x0000 );
177	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
178	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
179	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
180	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
181	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
182
183	R0.L = 0x0000;
184	R0.H = 0x8000;
185	R7 = ABS R0;
186	DBGA ( R7.L , 0xffff );
187	DBGA ( R7.H , 0x7fff );
188	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
189	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
190	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
191	CC =  V;	R7 = CC; DBGA ( R7.L , 0x1 );
192	CC =  VS;	R7 = CC; DBGA ( R7.L , 0x1 );
193	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
194
195	R0.L = 0xffff;
196	R0.H = 0xffff;
197	R7 = ABS R0;
198	DBGA ( R7.L , 0x0001 );
199	DBGA ( R7.H , 0x0000 );
200	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
201	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
202	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
203	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
204	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
205
206	R0.L = 0x0000;
207	R0.H = 0x0000;
208	R7 = ABS R0;
209	_DBG R7;
210	_DBG ASTAT;
211	R6 = ASTAT;
212	_DBG R6;
213
214	DBGA ( R7.L , 0x0000 );
215	DBGA ( R7.H , 0x0000 );
216	CC = VS;	R6 = CC; DBGA (R6.L, 0x1);
217	CC = AZ;	R6 = CC; DBGA (R6.L, 0x1);
218
219	pass
220