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