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