1//  ALU test program.
2//  Test dual 16 bit MAX, MIN, ABS instructions
3# mach: bfin
4
5.include "testutils.inc"
6	start
7
8	R0 = 0;
9	ASTAT = R0;
10// MAX
11// first operand is larger, so AN=0
12	R0.L = 0x0001;
13	R0.H = 0x0002;
14	R1.L = 0x0000;
15	R1.H = 0x0000;
16	R7 = MAX ( R0 , R1 ) (V);
17	DBGA ( R7.L , 0x0001 );
18	DBGA ( R7.H , 0x0002 );
19	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
20	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
21	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
22	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
23	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
24
25// second operand is larger
26	R0.L = 0x0000;
27	R0.H = 0x0000;
28	R1.L = 0x0001;
29	R1.H = 0x0022;
30	R7 = MAX ( R0 , R1 ) (V);
31	DBGA ( R7.L , 0x0001 );
32	DBGA ( R7.H , 0x0022 );
33	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
34	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
35	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
36	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
37	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
38
39// one operand larger, one smaller.
40	R0.L = 0x000a;
41	R0.H = 0x0000;
42	R1.L = 0x0001;
43	R1.H = 0x0022;
44	R7 = MAX ( R0 , R1 ) (V);
45	DBGA ( R7.L , 0x000a );
46	DBGA ( R7.H , 0x0022 );
47	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
48	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
49	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
50	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
51	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
52
53	R0.L = 0x8001;
54	R0.H = 0xffff;
55	R1.L = 0x8000;
56	R1.H = 0x0022;
57	R7 = MAX ( R0 , R1 ) (V);
58	DBGA ( R7.L , 0x8001 );
59	DBGA ( R7.H , 0x0022 );
60	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
61	CC = AN;	R7 = CC; DBGA ( R7.L , 0x1 );
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	R0.L = 0x8000;
67	R0.H = 0xffff;
68	R1.L = 0x8000;
69	R1.H = 0x0022;
70	R7 = MAX ( R0 , R1 ) (V);
71	DBGA ( R7.L , 0x8000 );
72	DBGA ( R7.H , 0x0022 );
73	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
74	CC = AN;	R7 = CC; DBGA ( R7.L , 0x1 );
75	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
76	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
77	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
78
79// MIN
80// second operand is smaller
81	R0.L = 0x0001;
82	R0.H = 0x0004;
83	R1.L = 0x0000;
84	R1.H = 0x0000;
85	R7 = MIN ( R0 , R1 ) (V);
86	DBGA ( R7.L , 0x0000 );
87	DBGA ( R7.H , 0x0000 );
88	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x1 );
89	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
90	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
91	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
92	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
93
94// first operand is smaller
95	R0.L = 0xffff;
96	R0.H = 0x8001;
97	R1.L = 0x0000;
98	R1.H = 0x0000;
99	R7 = MIN ( R0 , R1 ) (V);
100	DBGA ( R7.L , 0xffff );
101	DBGA ( R7.H , 0x8001 );
102	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
103	CC = AN;	R7 = CC; DBGA ( R7.L , 0x1 );
104	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
105	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
106	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
107
108// one of each
109	R0.L = 0xffff;
110	R0.H = 0x0034;
111	R1.L = 0x0999;
112	R1.H = 0x0010;
113	R7 = MIN ( R0 , R1 ) (V);
114	DBGA ( R7.L , 0xffff );
115	DBGA ( R7.H , 0x0010 );
116	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
117	CC = AN;	R7 = CC; DBGA ( R7.L , 0x1 );
118	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
119	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
120	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
121
122	R0.L = 0xffff;
123	R0.H = 0x0010;
124	R1.L = 0x0999;
125	R1.H = 0x0010;
126	R7 = MIN ( R0 , R1 ) (V);
127	DBGA ( R7.L , 0xffff );
128	DBGA ( R7.H , 0x0010 );
129	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
130	CC = AN;	R7 = CC; DBGA ( R7.L , 0x1 );
131	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
132	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
133	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
134
135// ABS
136	R0.L = 0x0001;
137	R0.H = 0x8001;
138	R7 = ABS R0 (V);
139	DBGA ( R7.L , 0x0001 );
140	DBGA ( R7.H , 0x7fff );
141	_DBG ASTAT;
142	R6 = ASTAT;
143	_DBG R6;
144
145	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
146	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
147	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
148	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
149	CC =  VS;	R7 = CC; DBGA ( R7.L , 0x0 );
150	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
151
152	R0.L = 0x0001;
153	R0.H = 0x8000;
154	R7 = ABS R0 (V);
155	DBGA ( R7.L , 0x0001 );
156	DBGA ( R7.H , 0x7fff );
157	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
158	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
159	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
160	CC =  V;	R7 = CC; DBGA ( R7.L , 0x1 );
161	CC =  VS;	R7 = CC; DBGA ( R7.L , 0x1 );
162	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
163
164	R0.L = 0x0000;
165	R0.H = 0xffff;
166	R7 = ABS R0 (V);
167	_DBG R7;
168	_DBG ASTAT;
169	R6 = ASTAT;
170	_DBG R6;
171	DBGA ( R7.L , 0x0000 );
172	DBGA ( R7.H , 0x0001 );
173	CC =  VS;	R6 = CC; DBGA ( R6.L, 0x1 );
174	CC =  AZ;	R6 = CC; DBGA ( R6.L, 0x1 );
175
176	pass
177