1# mach: bfin
2
3.include "testutils.inc"
4	start
5
6
7	I0 = 0 (X);
8	I1 = 0 (X);
9	A0 = A1 = 0;
10	init_r_regs 0;
11	ASTAT = R0;
12
13// This section of code will test the SAA instructions and sum of accumulators;
14
15	loadsym I0, tstvecI;
16
17	R0 = [ I0 ++ ];
18	R2 = [ I0 ++ ];
19
20// +++++++++++++++   TG11.001   +++++++++++++ //
21//                                            //
22//                     HH   HL   LH   LL      //
23//       Input: r0 ==> 15   15   15   15      //
24//              r1 ==>  0    0    0    0      //
25//                                            //
26//       Output:r2 ==> 0    0    0   30       //
27//              r3 ==> 0    0    0   30       //
28// ++++++++++++++++++++++++++++++++++++++++++ //
29
30	SAA ( R1:0 , R3:2 );
31	R6 = A1.L + A1.H, R7 = A0.L + A0.H;
32	DBGA ( R6.L , 0x001e );
33	DBGA ( R6.H , 0x0000 );
34	DBGA ( R7.L , 0x001e );
35	DBGA ( R7.H , 0x0000 );
36
37	A1 = A0 = 0;
38
39// +++++++++++++++   TG11.002   +++++++++++++ //
40//                                            //
41//                     HH   HL   LH   LL      //
42//       Input: r0 ==> 15   15   15   15      //
43//              r1 ==>  0    0    0    0      //
44//                                            //
45//       Output:r2 ==> 0    0    0   30       //
46//              r3 ==> 0    0    0   30       //
47// ++++++++++++++++++++++++++++++++++++++++++ //
48
49	SAA ( R1:0 , R3:2 );
50	R6 = A1.L + A1.H, R7 = A0.L + A0.H;
51	DBGA ( R6.L , 0x001e );
52	DBGA ( R6.H , 0x0000 );
53	DBGA ( R7.L , 0x001e );
54	DBGA ( R7.H , 0x0000 );
55
56	A1 = A0 = 0;
57
58// +++++++++++++++   TG11.003   +++++++++++++ //
59//                                            //
60//                     HH   HL   LH   LL      //
61//       Input: r0 ==> 240  240  240  240     //
62//              r1 ==>  0    0    0    0      //
63//                                            //
64//       Output:r2 ==> 0    480               //
65//              r3 ==> 0    480               //
66// ++++++++++++++++++++++++++++++++++++++++++ //
67
68	R0 = [ I0 ++ ];
69	R2 = [ I0 ++ ];
70
71	SAA ( R3:2 , R1:0 );
72	R6 = A1.L + A1.H, R7 = A0.L + A0.H;
73	DBGA ( R6.L , 0x01e0 );
74	DBGA ( R6.H , 0x0000 );
75	DBGA ( R7.L , 0x01e0 );
76	DBGA ( R7.H , 0x0000 );
77
78	A1 = A0 = 0;
79
80// +++++++++++++++   TG11.004   +++++++++++++ //
81//                                            //
82//                     HH   HL   LH   LL      //
83//       Input: r0 ==> 240  240  240  240     //
84//              r1 ==>  0    0    0    0      //
85//                                            //
86//       Output:r2 ==> 0    480               //
87//              r3 ==> 0    480               //
88// ++++++++++++++++++++++++++++++++++++++++++ //
89
90	SAA ( R1:0 , R3:2 );
91	R6 = A1.L + A1.H, R7 = A0.L + A0.H;
92	DBGA ( R6.L , 0x01e0 );
93	DBGA ( R6.H , 0x0000 );
94	DBGA ( R7.L , 0x01e0 );
95	DBGA ( R7.H , 0x0000 );
96
97	A1 = A0 = 0;
98// +++++++++++++++   TG11.005   +++++++++++++ //
99//                                            //
100//                     HH   HL   LH   LL      //
101//       Input: r0 ==>  0    0    0    0      //
102//              r1 ==>  0    0    0    0      //
103//                                            //
104//       Output:r2 ==> 0    0                 //
105//              r3 ==> 0    0                 //
106// ++++++++++++++++++++++++++++++++++++++++++ //
107
108	R0 = [ I0 ++ ];
109	R2 = [ I0 ++ ];
110
111	SAA ( R1:0 , R3:2 );
112	R6 = A1.L + A1.H, R7 = A0.L + A0.H;
113	DBGA ( R6.L , 0x0000 );
114	DBGA ( R6.H , 0x0000 );
115	DBGA ( R7.L , 0x0000 );
116	DBGA ( R7.H , 0x0000 );
117
118// +++++++++++++++   TG11.006   +++++++++++++ //
119//                                            //
120//                     HH   HL   LH   LL      //
121//       Input: r0 ==> 255  255  255  255     //
122//              r1 ==> 255  255  255  255     //
123//                                            //
124//       Output:r2 ==> 0    0                 //
125//              r3 ==> 0    0                 //
126// ++++++++++++++++++++++++++++++++++++++++++ //
127
128	SAA ( R3:2 , R1:0 );
129	R6 = A1.L + A1.H, R7 = A0.L + A0.H;
130	DBGA ( R6.L , 0x0000 );
131	DBGA ( R6.H , 0x0000 );
132	DBGA ( R7.L , 0x0000 );
133	DBGA ( R7.H , 0x0000 );
134
135	A1 = A0 = 0;
136
137// +++++++++++++++   TG12.001   +++++++++++++ //
138//                                            //
139//                     HH   HL   LH   LL      //
140//       Input: r0 ==> 255  255  255  255     //
141//              r1 ==> 255  255  255  255     //
142//                                            //
143//       Output:r2 ==> 0    0                 //
144//              r3 ==> 0    0                 //
145// ++++++++++++++++++++++++++++++++++++++++++ //
146
147	loadsym I0, tstvecK;
148	B0 = I0;
149	L0.L = 4;
150	loadsym I1, tstvecJ;
151	B1 = I1;
152	L1.L = 4;
153
154	P0 = 64 (X);
155	R0 = [ I0 ++ ];
156	R2 = [ I1 ++ ];
157	LSETUP ( l$1 , l$1 ) LC0 = P0;
158l$1:
159	SAA ( R1:0 , R3:2 ) || R0 = [ I0 ++ ] || R1 = [ I1 ++ ];
160
161	R2 = A1.L + A1.H, R3 = A0.L + A0.H;
162	R7 = R2 + R3 (NS);
163	DBGA ( R7.L , 0xff00 );
164	DBGA ( R7.H , 0x0000 );
165
166	R5.L = 0xfffa;
167	A1 = R5;
168	R5.H = 0xfff0;
169	A0 = R5;
170
171	loadsym I0, tstvecI;
172	R0 = [ I0 ++ ];
173	R2 = [ I0 ++ ];
174	SAA ( R1:0 , R3:2 );
175	R6 = A1.L + A1.H, R7 = A0.L + A0.H;
176	DBGA ( R6.L , 0x000e );
177	DBGA ( R6.H , 0x0000 );
178	DBGA ( R7.L , 0xfffe );
179	DBGA ( R7.H , 0xffff );
180
181	pass
182
183	.data
184tstvecI:
185	.dw 0x0000
186	.dw 0x0000
187	.dw 0x0f0f
188	.dw 0x0f0f
189	.dw 0x0000
190	.dw 0x0000
191	.dw 0xf0f0
192	.dw 0xf0f0
193	.dw 0x0000
194	.dw 0x0000
195	.dw 0x0000
196	.dw 0x0000
197	.dw 0xffff
198	.dw 0xffff
199	.dw 0xffff
200	.dw 0xffff
201
202	.data
203tstvecJ:
204	.dw 0xffff
205	.dw 0xffff
206	.dw 0xffff
207	.dw 0xffff
208	.dw 0xffff
209	.dw 0xffff
210	.dw 0xffff
211	.dw 0xffff
212
213	.data
214tstvecK:
215	.dw 0x0000
216	.dw 0x0000
217	.dw 0x0000
218	.dw 0x0000
219	.dw 0x0000
220	.dw 0x0000
221	.dw 0x0000
222	.dw 0x0000
223