2 // Test basic edge values
3 // SIGNED FRACTIONAL mode
4 // test ops: "+=" "-=" "=" "NOP"
7 .include "testutils.inc"
23 // 0x7fff * 0x7fff = 0x007ffe0002
27 A1 += R0.L * R1.L, A0 += R0.L * R1.L;
33 DBGA ( R6.L , 0x0002 );
34 DBGA ( R6.H , 0x7ffe );
35 DBGA ( R7.L , 0x0000 );
36 CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
37 CC = AN; R7 = CC; DBGA ( R7.L , 0x0 );
38 CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
39 CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
40 CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
42 // 0x8000 * 0x7fff = 0xff80010000
46 A1 += R0.H * R1.L, A0 += R0.H * R1.L;
49 DBGA ( R6.L , 0x0000 );
50 DBGA ( R6.H , 0x8001 );
51 DBGA ( R7.L , 0xffff );
57 // 0x8000 * 0x8000 = 0x007fffffff
61 A1 += R0.H * R1.H, A0 += R0.H * R1.H;
64 DBGA ( R6.L , 0x0000 );
65 DBGA ( R6.H , 0x8000 );
66 DBGA ( R7.L , 0x0000 );
67 CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
68 CC = AN; R7 = CC; DBGA ( R7.L , 0x0 );
69 CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
70 CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
71 CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
73 // saturate positive by first loading large value into accums
74 // expected value is 0x7fffffffff
82 A1 += R0.L * R1.L, A0 += R0.L * R1.L;
85 DBGA ( R6.L , 0xffff );
86 DBGA ( R6.H , 0xffff );
87 DBGA ( R7.L , 0x007f );
88 CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
89 CC = AN; R7 = CC; DBGA ( R7.L , 0x0 );
90 CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
91 CC = AV0; R7 = CC; DBGA ( R7.L , 0x1 );
92 CC = AV1; R7 = CC; DBGA ( R7.L , 0x1 );
95 // expected value is 0x8000000000
101 A1 += R0.L * R1.H, A0 += R0.L * R1.H;
106 DBGA ( R6.L , 0x0000 );
107 DBGA ( R6.H , 0x0000 );
108 DBGA ( R7.L , 0xff80 );
109 CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
110 CC = AN; R7 = CC; DBGA ( R7.L , 0x0 );
111 CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
112 CC = AV0; R7 = CC; DBGA ( R7.L , 0x1 );
113 CC = AV1; R7 = CC; DBGA ( R7.L , 0x1 );
115 // saturate positive with "-="
116 // expected value is 0x7fffffffff
124 A1 -= R0.H * R1.L, A0 -= R0.H * R1.L;
127 DBGA ( R6.L , 0xffff );
128 DBGA ( R6.H , 0xffff );
129 DBGA ( R7.L , 0x007f );
130 CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
131 CC = AN; R7 = CC; DBGA ( R7.L , 0x0 );
132 CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
133 CC = AV0; R7 = CC; DBGA ( R7.L , 0x1 );
134 CC = AV1; R7 = CC; DBGA ( R7.L , 0x1 );
136 // saturate negative with "-="
137 // expected value is 0x8000000000
143 A1 -= R0.L * R1.L, A0 -= R0.L * R1.L;
148 DBGA ( R6.L , 0x0000 );
149 DBGA ( R6.H , 0x0000 );
150 DBGA ( R7.L , 0xff80 );
151 CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
152 CC = AN; R7 = CC; DBGA ( R7.L , 0x0 );
153 CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
154 CC = AV0; R7 = CC; DBGA ( R7.L , 0x1 );
155 CC = AV1; R7 = CC; DBGA ( R7.L , 0x1 );
157 // 0x8000 * 0x8000 = 0xff80000001 with "-="
161 A1 -= R0.H * R1.H, A0 -= R0.H * R1.H;
167 DBGA ( R6.L , 0x0000 );
168 DBGA ( R6.H , 0x8000 );
169 DBGA ( R7.L , 0xffff );
170 CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
171 CC = AN; R7 = CC; DBGA ( R7.L , 0x0 );
172 CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
173 CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
174 CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
176 // 0x7fff * 0x7fff = 0x007ffe0002 with "="
180 A1 += R0.L * R1.L, A0 += R0.L * R1.L;
181 A1 = R0.L * R1.L, A0 = R0.L * R1.L;
184 DBGA ( R6.L , 0x0002 );
185 DBGA ( R6.H , 0x7ffe );
186 DBGA ( R7.L , 0x0000 );
187 CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
188 CC = AN; R7 = CC; DBGA ( R7.L , 0x0 );
189 CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
190 CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
191 CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
193 // 0x7fff * 0x7fff = 0x007ffe0002 with "NOP"
200 DBGA ( R6.L , 0x0002 );
201 DBGA ( R6.H , 0x7ffe );
202 DBGA ( R7.L , 0x0000 );
205 DBGA ( R6.L , 0x0000 );
206 DBGA ( R6.H , 0x0000 );
207 DBGA ( R7.L , 0x0000 );
208 CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
209 CC = AN; R7 = CC; DBGA ( R7.L , 0x0 );
210 CC = AC0; R7 = CC; DBGA ( R7.L , 0x0 );
211 CC = AV0; R7 = CC; DBGA ( R7.L , 0x0 );
212 CC = AV1; R7 = CC; DBGA ( R7.L , 0x0 );
214 // 0x8000 * 0x8000 = 0x007fffffff with "NOP"
222 DBGA ( R6.L , 0x0000 );
223 DBGA ( R6.H , 0x8000 );
224 DBGA ( R7.L , 0x0000 );
230 DBGA ( R6.L , 0x0000 );
231 DBGA ( R6.H , 0x0000 );
232 DBGA ( R7.L , 0x0000 );
233 R7 = ASTAT; _dbg astat;
234 //AV1 AV1S should be 0.
235 DBGA ( R7.H , 0x0000 );
236 DBGA ( R7.L , 0x0000 );
242 A1 += R0.L * R1.L; // make sure overflow flag is not set to zero
247 DBGA ( R7.H, 0x0000 );
248 DBGA ( R7.L, 0x0000 );