|
|
1.1 root 1: 1 00000000 LL0:
2: 2 00000000 .data
3: 3 000006b4 * .text
4: 4 00000000 .align 1
5: 5 00000000 .globl _cvdf
6: 6 00000000 _cvdf:
7: 7 0001E6F0 0000 .word L215
8: 8 0001E6F2 #
9: 9 0001E6F2 # #include "fpp_defs.h"
10: 10 0001E6F2 #
11: 11 0001E6F2 #
12: 12 0001E6F2 # /*****************************************************************************
13: 13 0001E6F2 # *
14: 14 0001E6F2 # * CVDF - SINGLE PRECISION FLOATING POINT CONVERT LONG TO FLOAT TEST
15: 15 0001E6F2 # *
16: 16 0001E6F2 # *****************************************************************************/
17: 17 0001E6F2 # cvdf()
18: 18 0001E6F2 # {
19: 19 0001E6F2 11 3a jbr L217
20: 20 0001E6F4 L218:
21: 21 0001E6F4 # asm(".globl _cvdf_t");
22: 22 0001E6F4 .globl _cvdf_t
23: 23 0001E6F4 # asm("_cvdf_t:"); /* entry address */
24: 24 0001E6F4 _cvdf_t:
25: 25 0001E6F4 # if( ( cycle == 1 ) && ( prt_hdrs ) ) /* print headers on 1st pass */
26: 26 0001E6F4 1d effffffff6 01 cmpl _cycle,$1
27: 27 0001E6FB 21 15 jneq L219
28: 28 0001E6FD 5d efffffffed tstl _prt_hdrs
29: 29 0001E703 31 0d jeql L219
30: 30 0001E705 # writes("\n CVDF");
31: 31 0001E705 .data 1
32: 32 000006b4 * L221:
33: 33 000006b4 * 0A204356444600 .ascii "\12 CVDF\0"
34: 34 000006bb * .text
35: 35 0001E705 dd 8f000006b4 pushl $L221
36: 36 0001E70B fe 08 efffffffde callf $8,_writes
37: 37 0001E712 # cvdf_1(); /* load through a register */
38: 38 0001E712 L219:
39: 39 0001E712 fe 04 ef00000017 callf $4,_cvdf_1
40: 40 0001E719 # cvdf_2(); /* register stability */
41: 41 0001E719 fe 04 ef0000017e callf $4,_cvdf_2
42: 42 0001E720 # cvdf_3(); /* PSL stability test */
43: 43 0001E720 fe 04 ef00000343 callf $4,_cvdf_3
44: 44 0001E727 # asm("jmp *return"); /* return to the test monitor */
45: 45 0001E727 71 ffffffffc3 jmp *return
46: 46 0001E72D # }
47: 47 0001E72D 40 ret#2
48: 48 0001E72E .set L215,0x0
49: 49 0001E72E L217:
50: 50 0001E72E 11 c4 jbr L218
51: 51 0001E730 .data
52: 52 000006b4 * .text
53: 53 0001E730 .align 1
54: 54 0001E730 .globl _cvdf_1
55: 55 0001E730 _cvdf_1:
56: 56 0001E730 0000 .word L225
57: 57 0001E732 #
58: 58 0001E732 #
59: 59 0001E732 #
60: 60 0001E732 # /************************************************************************
61: 61 0001E732 # *
62: 62 0001E732 # * SUBTEST 1
63: 63 0001E732 # *
64: 64 0001E732 # ************************************************************************/
65: 65 0001E732 # cvdf_1()
66: 66 0001E732 # {
67: 67 0001E732 13 0166 jbr L227
68: 68 0001E735 L228:
69: 69 0001E735 # force_loop = FALSE;
70: 70 0001E735 4d efffffffb5 clrl _force_loop
71: 71 0001E73B # subtest = 1;
72: 72 0001E73B 0d 01 efffffffae movl $1,_subtest
73: 73 0001E742 # index = 0;
74: 74 0001E742 4d efffffffa8 clrl _index
75: 75 0001E748 # do {
76: 76 0001E748 L231:
77: 77 0001E748 # dbl_ld_acc = cvdf_1_data[index].ld; /* get the operand */
78: 78 0001E748 5c 0c efffffffa1 50 mull3 $12,_index,r0
79: 79 0001E750 0c 8f00000000 50 addl2 $_cvdf_1_data,r0
80: 80 0001E757 0d a004 efffffff95 movl 4(r0),_dbl_ld_acc+4
81: 81 0001E75F 0d 60 efffffff8a movl (r0),_dbl_ld_acc
82: 82 0001E766 # sgl_expected = cvdf_1_data[index].exp; /* get expected result */
83: 83 0001E766 5c 0c efffffff83 50 mull3 $12,_index,r0
84: 84 0001E76E 0d e000000008 efffffff77 movl _cvdf_1_data+8(r0),_sgl_expected
85: 85 0001E779 # if( (dbl_ld_acc.m & 0x7f800000) ) {
86: 86 0001E779 3d 8f7f800000 efffffff6c bitl $2139095040,_dbl_ld_acc
87: 87 0001E784 31 1e jeql L232
88: 88 0001E786 # sgl_expected = dbl_ld_acc.m;
89: 89 0001E786 0d efffffff64 efffffff5f movl _dbl_ld_acc,_sgl_expected
90: 90 0001E791 # if( dbl_ld_acc.l & 0x80000000)
91: 91 0001E791 3d 8f80000000 efffffff58 bitl $-2147483648,_dbl_ld_acc+4
92: 92 0001E79C 31 06 jeql L233
93: 93 0001E79E # sgl_expected++;
94: 94 0001E79E 6d efffffff4c incl _sgl_expected
95: 95 0001E7A4 # }
96: 96 0001E7A4 L233:
97: 97 0001E7A4 # /*
98: 98 0001E7A4 # * If LOOP ON ERROR is set, this is the loop for this subtest.
99: 99 0001E7A4 # * The force loop flag is set after the first error.
100: 100 0001E7A4 # */
101: 101 0001E7A4 # asm("_cvdf_1_lp1:");
102: 102 0001E7A4 L232:
103: 103 0001E7A4 _cvdf_1_lp1:
104: 104 0001E7A4 # asm("movl _dbl_ld_acc,r4"); /* get the value to convert */
105: 105 0001E7A4 0d efffffff46 54 movl _dbl_ld_acc,r4
106: 106 0001E7AB # asm("movl _dbl_ld_acc+4,r5");
107: 107 0001E7AB 0d efffffff43 55 movl _dbl_ld_acc+4,r5
108: 108 0001E7B2 # asm("ldd r4"); /* load the data */
109: 109 0001E7B2 07 54 ldd r4
110: 110 0001E7B4 # asm("cvdf"); /* convert the value */
111: 111 0001E7B4 a6 cvdf
112: 112 0001E7B5 # asm("stf r8"); /* store the result */
113: 113 0001E7B5 26 58 stf r8
114: 114 0001E7B7 # if( force_loop )
115: 115 0001E7B7 5d efffffff33 tstl _force_loop
116: 116 0001E7BD 31 02 jeql L234
117: 117 0001E7BF # asm("brb _cvdf_1_lp1");; /* loop on the error */
118: 118 0001E7BF 11 e3 brb _cvdf_1_lp1
119: 119 0001E7C1 L234:
120: 120 0001E7C1 # /*
121: 121 0001E7C1 # * end error loop - test the results
122: 122 0001E7C1 # */
123: 123 0001E7C1 # asm("movl r8,_sgl_st_acc"); /* move result to cache */
124: 124 0001E7C1 0d 58 efffffff28 movl r8,_sgl_st_acc
125: 125 0001E7C8 # if( sgl_st_acc != sgl_expected ) { /* COMPARE the values */
126: 126 0001E7C8 1d efffffff22 efffffff1d cmpl _sgl_st_acc,_sgl_expected
127: 127 0001E7D3 21 03 13 00a9 jeql L235
128: 128 0001E7D8 # errcnt++; /* bump the error count */
129: 129 0001E7D8 6d efffffff12 incl _errcnt
130: 130 0001E7DE # if( prt_error ) {
131: 131 0001E7DE 5d efffffff0c tstl _prt_error
132: 132 0001E7E4 31 78 jeql L236
133: 133 0001E7E6 # writes(" \n"); /* start a new print line */
134: 134 0001E7E6 .data 1
135: 135 000006bb * L237:
136: 136 000006bb * 200A00 .ascii " \12\0"
137: 137 000006be * .text
138: 138 0001E7E6 dd 8f000006bb pushl $L237
139: 139 0001E7EC fe 08 effffffefd callf $8,_writes
140: 140 0001E7F3 # writes("cycle: ");
141: 141 0001E7F3 .data 1
142: 142 000006be * L238:
143: 143 000006be * 6379636C653A2000 .ascii "cycle: \0"
144: 144 000006c6 * .text
145: 145 0001E7F3 dd 8f000006be pushl $L238
146: 146 0001E7F9 fe 08 effffffef0 callf $8,_writes
147: 147 0001E800 # writed( cycle );
148: 148 0001E800 dd effffffeea pushl _cycle
149: 149 0001E806 fe 08 effffffee3 callf $8,_writed
150: 150 0001E80D # writes(" CVDF test ");
151: 151 0001E80D .data 1
152: 152 000006c6 * L240:
153: 153 000006c6 * 2020435644462074657374200 .ascii " CVDF test \0"
154: 0
155: 154 000006d3 * .text
156: 155 0001E80D dd 8f000006c6 pushl $L240
157: 156 0001E813 fe 08 effffffed6 callf $8,_writes
158: 157 0001E81A # writed( test_no );
159: 158 0001E81A dd effffffed0 pushl _test_no
160: 159 0001E820 fe 08 effffffec9 callf $8,_writed
161: 160 0001E827 # writes(", subtest 1 (Reg. Data) - BAD FINAL ACC\n");
162: 161 0001E827 .data 1
163: 162 000006d3 * L241:
164: 163 000006d3 * 2C20737562746573742031202 .ascii ", subtest 1 (Reg. Data) - BAD FINAL ACC\12\0"
165: 85265672E204461746129202D
166: 204241442046494E414C20414
167: 3430A00
168: 164 000006fc * .text
169: 165 0001E827 dd 8f000006d3 pushl $L241
170: 166 0001E82D fe 08 effffffebc callf $8,_writes
171: 167 0001E834 # print_cvdf_data();
172: 168 0001E834 fe 04 ef00000411 callf $4,_print_cvdf_data
173: 169 0001E83B # writes(" Acc expected = ");
174: 170 0001E83B .data 1
175: 171 000006fc * L243:
176: 172 000006fc * 2020202020202020202020202 .ascii " Acc expected = \0"
177: 0202020202020202020202020
178: 2020202020204163632065787
179: 06563746564203D2000
180: 173 0000072b * .text
181: 174 0001E83B dd 8f000006fc pushl $L243
182: 175 0001E841 fe 08 effffffea8 callf $8,_writes
183: 176 0001E848 # write32h( sgl_expected );
184: 177 0001E848 dd effffffea2 pushl _sgl_expected
185: 178 0001E84E fe 08 effffffe9b callf $8,_write32h
186: 179 0001E855 # writec('\n');
187: 180 0001E855 dd 0a pushl $10
188: 181 0001E857 fe 08 effffffe92 callf $8,_writec
189: 182 0001E85E # }
190: 183 0001E85E # if( halt_flg )
191: 184 0001E85E L236:
192: 185 0001E85E 5d effffffe8c tstl _halt_flg
193: 186 0001E864 31 09 jeql L246
194: 187 0001E866 # cvdf_er_halt( BAD_ACC_HLT ); /* halt on the error */
195: 188 0001E866 dd 01 pushl $1
196: 189 0001E868 fe 08 ef00000451 callf $8,_cvdf_er_halt
197: 190 0001E86F # if( loop_on_err ) {
198: 191 0001E86F L246:
199: 192 0001E86F 5d effffffe7b tstl _loop_on_err
200: 193 0001E875 31 0a jeql L248
201: 194 0001E877 # force_loop = TRUE; /* set the force loop flag */
202: 195 0001E877 0d 01 effffffe72 movl $1,_force_loop
203: 196 0001E87E # asm("brw _cvdf_1_lp1");; /* and loop on the error */
204: 197 0001E87E 13 ff23 brw _cvdf_1_lp1
205: 198 0001E881 # } /* end of loop on error */
206: 199 0001E881 # } /* end of compare error */
207: 200 0001E881 L248:
208: 201 0001E881 # } while( index++ < max_cvdf_1_index ); /* end of WHILE loop */
209: 202 0001E881 L235:
210: 203 0001E881 L230:
211: 204 0001E881 0d effffffe69 50 movl _index,r0
212: 205 0001E888 6d effffffe62 incl _index
213: 206 0001E88E 1d 50 effffffe5b cmpl r0,_max_cvdf_1_index
214: 207 0001E895 81 03 13 feae jlss L231
215: 208 0001E89A L229:
216: 209 0001E89A # } /* end of subtest 1 */
217: 210 0001E89A 40 ret#2
218: 211 0001E89B .set L225,0x0
219: 212 0001E89B L227:
220: 213 0001E89B 13 fe97 jbr L228
221: 214 0001E89E .data
222: 215 000006b4 * .text
223: 216 0001E89E .align 1
224: 217 0001E89E .globl _cvdf_2
225: 218 0001E89E _cvdf_2:
226: 219 0001E89E 0000 .word L249
227: 220 0001E8A0 #
228: 221 0001E8A0 #
229: 222 0001E8A0 #
230: 223 0001E8A0 # /************************************************************************
231: 224 0001E8A0 # *
232: 225 0001E8A0 # * SUBTEST 2 - Check for register corruption
233: 226 0001E8A0 # *
234: 227 0001E8A0 # ************************************************************************/
235: 228 0001E8A0 # cvdf_2()
236: 229 0001E8A0 # {
237: 230 0001E8A0 13 01c3 jbr L251
238: 231 0001E8A3 L252:
239: 232 0001E8A3 # force_loop = FALSE; /* clear force_loop flg */
240: 233 0001E8A3 4d effffffe47 clrl _force_loop
241: 234 0001E8A9 # subtest = 2;
242: 235 0001E8A9 0d 02 effffffe40 movl $2,_subtest
243: 236 0001E8B0 # fill_reg_buf( load_regs ); /* get patterns for regs */
244: 237 0001E8B0 dd 8f00000000 pushl $_load_regs
245: 238 0001E8B6 fe 08 effffffe33 callf $8,_fill_reg_buf
246: 239 0001E8BD # index = 0;
247: 240 0001E8BD 4d effffffe2d clrl _index
248: 241 0001E8C3 # dbl_ld_acc = cvdf_1_data[index].ld; /* get the operand */
249: 242 0001E8C3 5c 0c effffffe26 50 mull3 $12,_index,r0
250: 243 0001E8CB 0c 8f00000000 50 addl2 $_cvdf_1_data,r0
251: 244 0001E8D2 0d a004 effffffe1a movl 4(r0),_dbl_ld_acc+4
252: 245 0001E8DA 0d 60 effffffe0f movl (r0),_dbl_ld_acc
253: 246 0001E8E1 # sgl_expected = cvdf_1_data[index].exp; /* get expected result */
254: 247 0001E8E1 5c 0c effffffe08 50 mull3 $12,_index,r0
255: 248 0001E8E9 0d e000000008 effffffdfc movl _cvdf_1_data+8(r0),_sgl_expected
256: 249 0001E8F4 # /*
257: 250 0001E8F4 # * If LOOP ON ERROR is set, this is the loop for this subtest.
258: 251 0001E8F4 # * The force loop flag is set after the first error.
259: 252 0001E8F4 # */
260: 253 0001E8F4 # asm("_cvdf_2_lp1:");
261: 254 0001E8F4 _cvdf_2_lp1:
262: 255 0001E8F4 # asm("ldd _dbl_ld_acc"); /* load the data */
263: 256 0001E8F4 07 effffffdf6 ldd _dbl_ld_acc
264: 257 0001E8FA # asm("loadr $0x1fff,_load_regs"); /* load regs 0 - 12 */
265: 258 0001E8FA ab 891fff effffffded loadr $0x1fff,_load_regs
266: 259 0001E903 # asm("nop");
267: 260 0001E903 10 nop
268: 261 0001E904 # asm("cvdf"); /* convert the value */
269: 262 0001E904 a6 cvdf
270: 263 0001E905 # asm("nop");
271: 264 0001E905 10 nop
272: 265 0001E906 # asm("storer $0x1fff,_store_regs"); /* store regs 0 - 12 */
273: 266 0001E906 bb 891fff effffffde1 storer $0x1fff,_store_regs
274: 267 0001E90F # if( force_loop )
275: 268 0001E90F 5d effffffddb tstl _force_loop
276: 269 0001E915 31 02 jeql L254
277: 270 0001E917 # asm("brb _cvdf_2_lp1");; /* loop on the error */
278: 271 0001E917 11 db brb _cvdf_2_lp1
279: 272 0001E919 L254:
280: 273 0001E919 # /*
281: 274 0001E919 # * Now compare the stored register values to those that were loaded
282: 275 0001E919 # */
283: 276 0001E919 # index2 = 0;
284: 277 0001E919 4d effffffdd1 clrl _index2
285: 278 0001E91F # while( (load_regs[index2] == store_regs[index2]) && (index2 < 13) )
286: 279 0001E91F L255:
287: 280 0001E91F 0d effffffdcb 50 movl _index2,r0
288: 281 0001E926 0d effffffdc4 51 movl _index2,r1
289: 282 0001E92D 1d 40effffffdbc cmpl _load_regs[r0],_store_regs[r1]
290: 41effffffdb6
291: 283 0001E93A 21 11 jneq L256
292: 284 0001E93C 1d effffffdae 0d cmpl _index2,$13
293: 285 0001E943 81 08 jgeq L256
294: 286 0001E945 # index2++; /* check reg values */
295: 287 0001E945 6d effffffda5 incl _index2
296: 288 0001E94B 11 d2 jbr L255
297: 289 0001E94D L256:
298: 290 0001E94D # if( index2 < 13 ) { /* error if index2 < 13 */
299: 291 0001E94D 1d effffffd9d 0d cmpl _index2,$13
300: 292 0001E954 91 03 13 00f4 jgeq L257
301: 293 0001E959 # errcnt++; /* bump the error count */
302: 294 0001E959 6d effffffd91 incl _errcnt
303: 295 0001E95F # if( prt_error ) {
304: 296 0001E95F 5d effffffd8b tstl _prt_error
305: 297 0001E965 21 03 13 00c0 jeql L258
306: 298 0001E96A # writes(" \n"); /* start a new print line */
307: 299 0001E96A .data 1
308: 300 0000072b * L259:
309: 301 0000072b * 200A00 .ascii " \12\0"
310: 302 0000072e * .text
311: 303 0001E96A dd 8f0000072b pushl $L259
312: 304 0001E970 fe 08 effffffd79 callf $8,_writes
313: 305 0001E977 # writes("cycle: ");
314: 306 0001E977 .data 1
315: 307 0000072e * L260:
316: 308 0000072e * 6379636C653A2000 .ascii "cycle: \0"
317: 309 00000736 * .text
318: 310 0001E977 dd 8f0000072e pushl $L260
319: 311 0001E97D fe 08 effffffd6c callf $8,_writes
320: 312 0001E984 # writed( cycle );
321: 313 0001E984 dd effffffd66 pushl _cycle
322: 314 0001E98A fe 08 effffffd5f callf $8,_writed
323: 315 0001E991 # writes(" CVDF test ");
324: 316 0001E991 .data 1
325: 317 00000736 * L261:
326: 318 00000736 * 2020435644462074657374200 .ascii " CVDF test \0"
327: 0
328: 319 00000743 * .text
329: 320 0001E991 dd 8f00000736 pushl $L261
330: 321 0001E997 fe 08 effffffd52 callf $8,_writes
331: 322 0001E99E # writed( test_no );
332: 323 0001E99E dd effffffd4c pushl _test_no
333: 324 0001E9A4 fe 08 effffffd45 callf $8,_writed
334: 325 0001E9AB # writes(", subtest 2 - A REGISTER WAS MODIFIED\n");
335: 326 0001E9AB .data 1
336: 327 00000743 * L262:
337: 328 00000743 * 2C20737562746573742032202 .ascii ", subtest 2 - A REGISTER WAS MODIFIED\12\0"
338: D204120524547495354455220
339: 574153204D4F4449464945440
340: A00
341: 329 0000076a * .text
342: 330 0001E9AB dd 8f00000743 pushl $L262
343: 331 0001E9B1 fe 08 effffffd38 callf $8,_writes
344: 332 0001E9B8 # print_cvdf_data(); /* print the operands */
345: 333 0001E9B8 fe 04 ef0000028d callf $4,_print_cvdf_data
346: 334 0001E9BF # writes("register "); /* print the information */
347: 335 0001E9BF .data 1
348: 336 0000076a * L263:
349: 337 0000076a * 72656769737465722000 .ascii "register \0"
350: 338 00000774 * .text
351: 339 0001E9BF dd 8f0000076a pushl $L263
352: 340 0001E9C5 fe 08 effffffd24 callf $8,_writes
353: 341 0001E9CC # writed( index2 ); /* about the corrupted */
354: 342 0001E9CC dd effffffd1e pushl _index2
355: 343 0001E9D2 fe 08 effffffd17 callf $8,_writed
356: 344 0001E9D9 # writes(" = "); /* register */
357: 345 0001E9D9 .data 1
358: 346 00000774 * L264:
359: 347 00000774 * 203D2000 .ascii " = \0"
360: 348 00000778 * .text
361: 349 0001E9D9 dd 8f00000774 pushl $L264
362: 350 0001E9DF fe 08 effffffd0a callf $8,_writes
363: 351 0001E9E6 # write32h( store_regs[index2] );
364: 352 0001E9E6 0d effffffd04 50 movl _index2,r0
365: 353 0001E9ED dd 40effffffcfc pushl _store_regs[r0]
366: 354 0001E9F4 fe 08 effffffcf5 callf $8,_write32h
367: 355 0001E9FB # writes(", should be = ");
368: 356 0001E9FB .data 1
369: 357 00000778 * L265:
370: 358 00000778 * 2C202073686F756C642062652 .ascii ", should be = \0"
371: 03D2000
372: 359 00000788 * .text
373: 360 0001E9FB dd 8f00000778 pushl $L265
374: 361 0001EA01 fe 08 effffffce8 callf $8,_writes
375: 362 0001EA08 # write32h( load_regs[index2] );
376: 363 0001EA08 0d effffffce2 50 movl _index2,r0
377: 364 0001EA0F dd 40effffffcda pushl _load_regs[r0]
378: 365 0001EA16 fe 08 effffffcd3 callf $8,_write32h
379: 366 0001EA1D # writes("\n");
380: 367 0001EA1D .data 1
381: 368 00000788 * L266:
382: 369 00000788 * 0A00 .ascii "\12\0"
383: 370 0000078a * .text
384: 371 0001EA1D dd 8f00000788 pushl $L266
385: 372 0001EA23 fe 08 effffffcc6 callf $8,_writes
386: 373 0001EA2A # }
387: 374 0001EA2A # if( halt_flg )
388: 375 0001EA2A L258:
389: 376 0001EA2A 5d effffffcc0 tstl _halt_flg
390: 377 0001EA30 31 09 jeql L267
391: 378 0001EA32 # cvdf_er_halt( BAD_REG_HLT ); /* halt on the error */
392: 379 0001EA32 dd 02 pushl $2
393: 380 0001EA34 fe 08 ef00000285 callf $8,_cvdf_er_halt
394: 381 0001EA3B # if( loop_on_err ) {
395: 382 0001EA3B L267:
396: 383 0001EA3B 5d effffffcaf tstl _loop_on_err
397: 384 0001EA41 31 0a jeql L268
398: 385 0001EA43 # force_loop = TRUE; /* set the force loop flag */
399: 386 0001EA43 0d 01 effffffca6 movl $1,_force_loop
400: 387 0001EA4A # asm("brw _cvdf_2_lp1");; /* and loop on the error */
401: 388 0001EA4A 13 fea7 brw _cvdf_2_lp1
402: 389 0001EA4D # } /* end of loop on error */
403: 390 0001EA4D # } while( index++ < max_cvdf_1_index ); /* end of reg corruption error */
404: 391 0001EA4D L268:
405: 392 0001EA4D L257:
406: 393 0001EA4D L269:
407: 394 0001EA4D 0d effffffc9d 50 movl _index,r0
408: 395 0001EA54 6d effffffc96 incl _index
409: 396 0001EA5A 1d 50 effffffc8f cmpl r0,_max_cvdf_1_index
410: 397 0001EA61 81 02 jgeq L270
411: 398 0001EA63 11 e8 jbr L269
412: 399 0001EA65 L270:
413: 400 0001EA65 # } /* end of subtest 2 */
414: 401 0001EA65 40 ret#2
415: 402 0001EA66 .set L249,0x0
416: 403 0001EA66 L251:
417: 404 0001EA66 13 fe3a jbr L252
418: 405 0001EA69 .data
419: 406 000006b4 * .text
420: 407 0001EA69 00 .align 1
421: 408 0001EA6A .globl _cvdf_3
422: 409 0001EA6A _cvdf_3:
423: 410 0001EA6A 0000 .word L271
424: 411 0001EA6C #
425: 412 0001EA6C #
426: 413 0001EA6C #
427: 414 0001EA6C # /************************************************************************
428: 415 0001EA6C # *
429: 416 0001EA6C # * SUBTEST 3 - Check for PSL corruption
430: 417 0001EA6C # *
431: 418 0001EA6C # ************************************************************************/
432: 419 0001EA6C # cvdf_3()
433: 420 0001EA6C # {
434: 421 0001EA6C 13 01da jbr L273
435: 422 0001EA6F L274:
436: 423 0001EA6F # force_loop = FALSE; /* clear force_loop flg */
437: 424 0001EA6F 4d effffffc7b clrl _force_loop
438: 425 0001EA75 # subtest = 3;
439: 426 0001EA75 0d 03 effffffc74 movl $3,_subtest
440: 427 0001EA7C # fill_reg_buf( load_regs ); /* get patterns for regs */
441: 428 0001EA7C dd 8f00000000 pushl $_load_regs
442: 429 0001EA82 fe 08 effffffc67 callf $8,_fill_reg_buf
443: 430 0001EA89 # for( index = 0; index < 3; index++ ) {
444: 431 0001EA89 4d effffffc61 clrl _index
445: 432 0001EA8F L277:
446: 433 0001EA8F 1d effffffc5b 03 cmpl _index,$3
447: 434 0001EA96 91 03 13 0195 jgeq L276
448: 435 0001EA9B # dbl_ld_acc = cvdf_1_data[index].ld; /* get the operand */
449: 436 0001EA9B 5c 0c effffffc4e 50 mull3 $12,_index,r0
450: 437 0001EAA3 0c 8f00000000 50 addl2 $_cvdf_1_data,r0
451: 438 0001EAAA 0d a004 effffffc42 movl 4(r0),_dbl_ld_acc+4
452: 439 0001EAB2 0d 60 effffffc37 movl (r0),_dbl_ld_acc
453: 440 0001EAB9 # sgl_expected = cvdf_1_data[index].exp; /* get expected result */
454: 441 0001EAB9 5c 0c effffffc30 50 mull3 $12,_index,r0
455: 442 0001EAC1 0d e000000008 effffffc24 movl _cvdf_1_data+8(r0),_sgl_expected
456: 443 0001EACC # status_index = 0;
457: 444 0001EACC 4d effffffc1e clrl _status_index
458: 445 0001EAD2 # do {
459: 446 0001EAD2 L280:
460: 447 0001EAD2 # sgl_dummy1 = status_array[status_index]; /* +, -, 0 status */
461: 448 0001EAD2 0d effffffc18 50 movl _status_index,r0
462: 449 0001EAD9 0d 40effffffc10 movl _status_array[r0],_sgl_dummy1
463: effffffc0b
464: 450 0001EAE5 # /*
465: 451 0001EAE5 # * If LOOP ON ERROR is set, this is the loop for this subtest.
466: 452 0001EAE5 # * The force loop flag is set after the first error.
467: 453 0001EAE5 # */
468: 454 0001EAE5 # asm("_cvdf_3_lp1:");
469: 455 0001EAE5 _cvdf_3_lp1:
470: 456 0001EAE5 # asm("ldd _dbl_ld_acc"); /* load the data */
471: 457 0001EAE5 07 effffffc05 ldd _dbl_ld_acc
472: 458 0001EAEB # asm("tstl _sgl_dummy1"); /* set the PSL status */
473: 459 0001EAEB 5d effffffbff tstl _sgl_dummy1
474: 460 0001EAF1 # asm("movpsl _init_psl"); /* save the initial PSL */
475: 461 0001EAF1 cd effffffbf9 movpsl _init_psl
476: 462 0001EAF7 # asm("nop");
477: 463 0001EAF7 10 nop
478: 464 0001EAF8 # asm("cvdf"); /* convert the value */
479: 465 0001EAF8 a6 cvdf
480: 466 0001EAF9 # asm("nop");
481: 467 0001EAF9 10 nop
482: 468 0001EAFA # asm("movpsl _psl_val"); /* save the final PSL */
483: 469 0001EAFA cd effffffbf0 movpsl _psl_val
484: 470 0001EB00 # if( force_loop )
485: 471 0001EB00 5d effffffbea tstl _force_loop
486: 472 0001EB06 31 02 jeql L281
487: 473 0001EB08 # asm("brb _cvdf_3_lp1");; /* loop on the error */
488: 474 0001EB08 11 db brb _cvdf_3_lp1
489: 475 0001EB0A L281:
490: 476 0001EB0A # /*
491: 477 0001EB0A # * Now compare the final PSL to the initial PSL -they should be the same
492: 478 0001EB0A # */
493: 479 0001EB0A # exp_psl = init_psl;
494: 480 0001EB0A 0d effffffbe0 effffffbdb movl _init_psl,_exp_psl
495: 481 0001EB15 # exp_psl &= 0xffffff7f;
496: 482 0001EB15 ac 89ff7f effffffbd2 andl2 $-129,_exp_psl
497: 483 0001EB1E # if( psl_val != exp_psl ) {
498: 484 0001EB1E 1d effffffbcc effffffbc7 cmpl _psl_val,_exp_psl
499: 485 0001EB29 21 03 13 00e4 jeql L282
500: 486 0001EB2E # errcnt++; /* bump the error count */
501: 487 0001EB2E 6d effffffbbc incl _errcnt
502: 488 0001EB34 # if( prt_error ) {
503: 489 0001EB34 5d effffffbb6 tstl _prt_error
504: 490 0001EB3A 21 03 13 00b0 jeql L283
505: 491 0001EB3F # writes(" \n"); /* start a new line */
506: 492 0001EB3F .data 1
507: 493 0000078a * L284:
508: 494 0000078a * 200A00 .ascii " \12\0"
509: 495 0000078d * .text
510: 496 0001EB3F dd 8f0000078a pushl $L284
511: 497 0001EB45 fe 08 effffffba4 callf $8,_writes
512: 498 0001EB4C # writes("cycle: ");
513: 499 0001EB4C .data 1
514: 500 0000078d * L285:
515: 501 0000078d * 6379636C653A2000 .ascii "cycle: \0"
516: 502 00000795 * .text
517: 503 0001EB4C dd 8f0000078d pushl $L285
518: 504 0001EB52 fe 08 effffffb97 callf $8,_writes
519: 505 0001EB59 # writed( cycle );
520: 506 0001EB59 dd effffffb91 pushl _cycle
521: 507 0001EB5F fe 08 effffffb8a callf $8,_writed
522: 508 0001EB66 # writes(" CVDF test ");
523: 509 0001EB66 .data 1
524: 510 00000795 * L286:
525: 511 00000795 * 2020435644462074657374200 .ascii " CVDF test \0"
526: 0
527: 512 000007a2 * .text
528: 513 0001EB66 dd 8f00000795 pushl $L286
529: 514 0001EB6C fe 08 effffffb7d callf $8,_writes
530: 515 0001EB73 # writed( test_no );
531: 516 0001EB73 dd effffffb77 pushl _test_no
532: 517 0001EB79 fe 08 effffffb70 callf $8,_writed
533: 518 0001EB80 # writes(", subtest 3 - INCORRECT FINAL PSL\n");
534: 519 0001EB80 .data 1
535: 520 000007a2 * L287:
536: 521 000007a2 * 2C20737562746573742033202 .ascii ", subtest 3 - INCORRECT FINAL PSL\12\0"
537: 02D20494E434F525245435420
538: 46494E414C2050534C0A00
539: 522 000007c6 * .text
540: 523 0001EB80 dd 8f000007a2 pushl $L287
541: 524 0001EB86 fe 08 effffffb63 callf $8,_writes
542: 525 0001EB8D # print_cvdf_data(); /* print the operands */
543: 526 0001EB8D fe 04 ef000000b8 callf $4,_print_cvdf_data
544: 527 0001EB94 # writes("initial PSL = ");
545: 528 0001EB94 .data 1
546: 529 000007c6 * L288:
547: 530 000007c6 * 696E697469616C2050534C203 .ascii "initial PSL = \0"
548: D2000
549: 531 000007d5 * .text
550: 532 0001EB94 dd 8f000007c6 pushl $L288
551: 533 0001EB9A fe 08 effffffb4f callf $8,_writes
552: 534 0001EBA1 # write32h( init_psl );
553: 535 0001EBA1 dd effffffb49 pushl _init_psl
554: 536 0001EBA7 fe 08 effffffb42 callf $8,_write32h
555: 537 0001EBAE # writes(", final PSL = ");
556: 538 0001EBAE .data 1
557: 539 000007d5 * L289:
558: 540 000007d5 * 2C202066696E616C2050534C2 .ascii ", final PSL = \0"
559: 03D2000
560: 541 000007e5 * .text
561: 542 0001EBAE dd 8f000007d5 pushl $L289
562: 543 0001EBB4 fe 08 effffffb35 callf $8,_writes
563: 544 0001EBBB # write32h( psl_val );
564: 545 0001EBBB dd effffffb2f pushl _psl_val
565: 546 0001EBC1 fe 08 effffffb28 callf $8,_write32h
566: 547 0001EBC8 # writes(", expected PSL = ");
567: 548 0001EBC8 .data 1
568: 549 000007e5 * L290:
569: 550 000007e5 * 2C20206578706563746564205 .ascii ", expected PSL = \0"
570: 0534C203D2000
571: 551 000007f8 * .text
572: 552 0001EBC8 dd 8f000007e5 pushl $L290
573: 553 0001EBCE fe 08 effffffb1b callf $8,_writes
574: 554 0001EBD5 # write32h( exp_psl );
575: 555 0001EBD5 dd effffffb15 pushl _exp_psl
576: 556 0001EBDB fe 08 effffffb0e callf $8,_write32h
577: 557 0001EBE2 # writes("\n");
578: 558 0001EBE2 .data 1
579: 559 000007f8 * L291:
580: 560 000007f8 * 0A00 .ascii "\12\0"
581: 561 000007fa * .text
582: 562 0001EBE2 dd 8f000007f8 pushl $L291
583: 563 0001EBE8 fe 08 effffffb01 callf $8,_writes
584: 564 0001EBEF # }
585: 565 0001EBEF # if( halt_flg )
586: 566 0001EBEF L283:
587: 567 0001EBEF 5d effffffafb tstl _halt_flg
588: 568 0001EBF5 31 09 jeql L292
589: 569 0001EBF7 # cvdf_er_halt( BAD_PSL_HLT ); /* halt on error */
590: 570 0001EBF7 dd 03 pushl $3
591: 571 0001EBF9 fe 08 ef000000c0 callf $8,_cvdf_er_halt
592: 572 0001EC00 # if( loop_on_err ) {
593: 573 0001EC00 L292:
594: 574 0001EC00 5d effffffaea tstl _loop_on_err
595: 575 0001EC06 31 0a jeql L293
596: 576 0001EC08 # force_loop = TRUE; /* set force loop flag */
597: 577 0001EC08 0d 01 effffffae1 movl $1,_force_loop
598: 578 0001EC0F # asm("brw _cvdf_3_lp1");; /* and loop */
599: 579 0001EC0F 13 fed3 brw _cvdf_3_lp1
600: 580 0001EC12 # } /* end of loop on error */
601: 581 0001EC12 # } /* end of PSL corruption error */
602: 582 0001EC12 L293:
603: 583 0001EC12 # } while( ++status_index < 3 ); /* end of status loop */
604: 584 0001EC12 L282:
605: 585 0001EC12 L279:
606: 586 0001EC12 6d effffffad8 incl _status_index
607: 587 0001EC18 0d effffffad2 50 movl _status_index,r0
608: 588 0001EC1F 1d 50 03 cmpl r0,$3
609: 589 0001EC22 81 03 13 feab jlss L280
610: 590 0001EC27 L278:
611: 591 0001EC27 # } while( index++ < max_cvdf_1_index ); /* end of WHILE loop */
612: 592 0001EC27 L275:
613: 593 0001EC27 6d effffffac3 incl _index
614: 594 0001EC2D 13 fe5f jbr L277
615: 595 0001EC30 L276:
616: 596 0001EC30 L294:
617: 597 0001EC30 0d effffffaba 50 movl _index,r0
618: 598 0001EC37 6d effffffab3 incl _index
619: 599 0001EC3D 1d 50 effffffaac cmpl r0,_max_cvdf_1_index
620: 600 0001EC44 81 02 jgeq L295
621: 601 0001EC46 11 e8 jbr L294
622: 602 0001EC48 L295:
623: 603 0001EC48 # } /* end of subtest 3 */
624: 604 0001EC48 40 ret#2
625: 605 0001EC49 .set L271,0x0
626: 606 0001EC49 L273:
627: 607 0001EC49 13 fe23 jbr L274
628: 608 0001EC4C .data
629: 609 000006b4 * .text
630: 610 0001EC4C .align 1
631: 611 0001EC4C .globl _print_cvdf_data
632: 612 0001EC4C _print_cvdf_data:
633: 613 0001EC4C 0000 .word L296
634: 614 0001EC4E #
635: 615 0001EC4E #
636: 616 0001EC4E #
637: 617 0001EC4E # /**************************************************************************
638: 618 0001EC4E # *
639: 619 0001EC4E # * PRINT THE DATA AND STORE RESULTS
640: 620 0001EC4E # *
641: 621 0001EC4E # * initial Acc = xxxxxxxx xxxxxxxx, stored = xxxxxxxx xxxxxxxx, index = xx
642: 622 0001EC4E # **************************************************************************/
643: 623 0001EC4E # print_cvdf_data()
644: 624 0001EC4E # {
645: 625 0001EC4E 11 6e jbr L298
646: 626 0001EC50 L299:
647: 627 0001EC50 # writes("initial Acc = ");
648: 628 0001EC50 .data 1
649: 629 000007fa * L300:
650: 630 000007fa * 696E697469616C20416363203 .ascii "initial Acc = \0"
651: D2000
652: 631 00000809 * .text
653: 632 0001EC50 dd 8f000007fa pushl $L300
654: 633 0001EC56 fe 08 effffffa93 callf $8,_writes
655: 634 0001EC5D # write32h( dbl_ld_acc.m );
656: 635 0001EC5D dd effffffa8d pushl _dbl_ld_acc
657: 636 0001EC63 fe 08 effffffa86 callf $8,_write32h
658: 637 0001EC6A # writec(' ');
659: 638 0001EC6A dd 20 pushl $32
660: 639 0001EC6C fe 08 effffffa7d callf $8,_writec
661: 640 0001EC73 # write32h( dbl_ld_acc.l );
662: 641 0001EC73 dd effffffa7b pushl _dbl_ld_acc+4
663: 642 0001EC79 fe 08 effffffa70 callf $8,_write32h
664: 643 0001EC80 # writes(", final Acc = ");
665: 644 0001EC80 .data 1
666: 645 00000809 * L301:
667: 646 00000809 * 2C202066696E616C204163632 .ascii ", final Acc = \0"
668: 03D2000
669: 647 00000819 * .text
670: 648 0001EC80 dd 8f00000809 pushl $L301
671: 649 0001EC86 fe 08 effffffa63 callf $8,_writes
672: 650 0001EC8D # write32h( sgl_st_acc );
673: 651 0001EC8D dd effffffa5d pushl _sgl_st_acc
674: 652 0001EC93 fe 08 effffffa56 callf $8,_write32h
675: 653 0001EC9A # writes(", index = ");
676: 654 0001EC9A .data 1
677: 655 00000819 * L302:
678: 656 00000819 * 2C2020696E646578203D2000 .ascii ", index = \0"
679: 657 00000825 * .text
680: 658 0001EC9A dd 8f00000819 pushl $L302
681: 659 0001ECA0 fe 08 effffffa49 callf $8,_writes
682: 660 0001ECA7 # writed( index );
683: 661 0001ECA7 dd effffffa43 pushl _index
684: 662 0001ECAD fe 08 effffffa3c callf $8,_writed
685: 663 0001ECB4 # writec('\n');
686: 664 0001ECB4 dd 0a pushl $10
687: 665 0001ECB6 fe 08 effffffa33 callf $8,_writec
688: 666 0001ECBD # }
689: 667 0001ECBD 40 ret#2
690: 668 0001ECBE .set L296,0x0
691: 669 0001ECBE L298:
692: 670 0001ECBE 11 90 jbr L299
693: 671 0001ECC0 .data
694: 672 000006b4 * .text
695: 673 0001ECC0 .align 1
696: 674 0001ECC0 .globl _cvdf_er_halt
697: 675 0001ECC0 _cvdf_er_halt:
698: 676 0001ECC0 0000 .word L303
699: 677 0001ECC2 #
700: 678 0001ECC2 #
701: 679 0001ECC2 #
702: 680 0001ECC2 # /**************************************************************************
703: 681 0001ECC2 # *
704: 682 0001ECC2 # * HALT ON ERROR ROUTINE
705: 683 0001ECC2 # *
706: 684 0001ECC2 # **************************************************************************/
707: 685 0001ECC2 # cvdf_er_halt( halt_code )
708: 686 0001ECC2 # int halt_code;
709: 687 0001ECC2 # {
710: 688 0001ECC2 13 00db jbr L305
711: 689 0001ECC5 L306:
712: 690 0001ECC5 # sgl_value_1 = dbl_ld_acc.m;
713: 691 0001ECC5 0d effffffa25 effffffa20 movl _dbl_ld_acc,_sgl_value_1
714: 692 0001ECD0 # sgl_value_2 = dbl_ld_acc.l;
715: 693 0001ECD0 0d effffffa1e effffffa15 movl _dbl_ld_acc+4,_sgl_value_2
716: 694 0001ECDB # sgl_value_3 = sgl_st_acc;
717: 695 0001ECDB 0d effffffa0f effffffa0a movl _sgl_st_acc,_sgl_value_3
718: 696 0001ECE6 # sgl_dummy1 = halt_code; /* get the error type */
719: 697 0001ECE6 0d ad04 effffffa02 movl 4(fp),_sgl_dummy1
720: 698 0001ECEE # asm("movl _test_no,r0"); /* r0 = test number */
721: 699 0001ECEE 0d effffff9fc 50 movl _test_no,r0
722: 700 0001ECF5 # asm("movl _subtest,r1"); /* r1 = subtest number */
723: 701 0001ECF5 0d effffff9f5 51 movl _subtest,r1
724: 702 0001ECFC # asm("movl _sgl_dummy1,r2"); /* r2 = error code */
725: 703 0001ECFC 0d effffff9ee 52 movl _sgl_dummy1,r2
726: 704 0001ED03 # asm("movl _cycle,r3"); /* r3 = cycle count */
727: 705 0001ED03 0d effffff9e7 53 movl _cycle,r3
728: 706 0001ED0A # asm("movl _sgl_value_1,r4"); /* r4 = MS accumulator */
729: 707 0001ED0A 0d effffff9e0 54 movl _sgl_value_1,r4
730: 708 0001ED11 # asm("movl _sgl_value_2,r5"); /* r5 = LS accumulator */
731: 709 0001ED11 0d effffff9d9 55 movl _sgl_value_2,r5
732: 710 0001ED18 # asm("movl _sgl_value_3,r6"); /* r6 = final acc */
733: 711 0001ED18 0d effffff9d2 56 movl _sgl_value_3,r6
734: 712 0001ED1F # if( halt_code == BAD_ACC_HLT ) {
735: 713 0001ED1F 1d ad04 01 cmpl 4(fp),$1
736: 714 0001ED23 21 1b jneq L307
737: 715 0001ED25 # sgl_value_1 = sgl_expected;
738: 716 0001ED25 0d effffff9c5 effffff9c0 movl _sgl_expected,_sgl_value_1
739: 717 0001ED30 # asm("movl _sgl_value_1,r7"); /* r7 = expected acc */
740: 718 0001ED30 0d effffff9ba 57 movl _sgl_value_1,r7
741: 719 0001ED37 # asm("movl _index,r8"); /* r8 = data index */
742: 720 0001ED37 0d effffff9b3 58 movl _index,r8
743: 721 0001ED3E # } else
744: 722 0001ED3E 11 5e jbr L308
745: 723 0001ED40 L307:
746: 724 0001ED40 # if( halt_code == BAD_REG_HLT ) {
747: 725 0001ED40 1d ad04 02 cmpl 4(fp),$2
748: 726 0001ED44 21 3d jneq L309
749: 727 0001ED46 # sgl_dummy1 = load_regs[index2];
750: 728 0001ED46 0d effffff9a4 50 movl _index2,r0
751: 729 0001ED4D 0d 40effffff99c movl _load_regs[r0],_sgl_dummy1
752: effffff997
753: 730 0001ED59 # sgl_dummy2 = store_regs[index2];
754: 731 0001ED59 0d effffff991 50 movl _index2,r0
755: 732 0001ED60 0d 40effffff989 movl _store_regs[r0],_sgl_dummy2
756: effffff984
757: 733 0001ED6C # asm("movl _index2,r7"); /* r7 = bad register # */
758: 734 0001ED6C 0d effffff97e 57 movl _index2,r7
759: 735 0001ED73 # asm("movl _sgl_dummy2,r8"); /* r8 = actual value */
760: 736 0001ED73 0d effffff977 58 movl _sgl_dummy2,r8
761: 737 0001ED7A # asm("movl _sgl_dummy1,r9"); /* r9 = expected value */
762: 738 0001ED7A 0d effffff970 59 movl _sgl_dummy1,r9
763: 739 0001ED81 # } else
764: 740 0001ED81 11 1b jbr L310
765: 741 0001ED83 L309:
766: 742 0001ED83 # if( halt_code == BAD_PSL_HLT ) {
767: 743 0001ED83 1d ad04 03 cmpl 4(fp),$3
768: 744 0001ED87 21 15 jneq L311
769: 745 0001ED89 # asm("movl _init_psl,r7"); /* r7 = initial PSL */
770: 746 0001ED89 0d effffff961 57 movl _init_psl,r7
771: 747 0001ED90 # asm("movl _psl_val,r8"); /* r8 = final PSL */
772: 748 0001ED90 0d effffff95a 58 movl _psl_val,r8
773: 749 0001ED97 # asm("movl _exp_psl,r9"); /* r9 = expected PSL */
774: 750 0001ED97 0d effffff953 59 movl _exp_psl,r9
775: 751 0001ED9E # };
776: 752 0001ED9E L311:
777: 753 0001ED9E L310:
778: 754 0001ED9E L308:
779: 755 0001ED9E # asm("halt"); /* HALT ... */
780: 756 0001ED9E 00 halt
781: 757 0001ED9F # }
782: 758 0001ED9F 40 ret#2
783: 759 0001EDA0 .set L303,0x0
784: 760 0001EDA0 L305:
785: 761 0001EDA0 13 ff22 jbr L306
786: 762 0001EDA3 .data
787: 762 0003D493 .data
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.