|
|
1.1 root 1: 1 00000000 LL0:
2: 2 00000000 .data
3: 3 0000068c * .text
4: 4 00000000 .align 1
5: 5 00000000 .globl _negd
6: 6 00000000 _negd:
7: 7 0001A5AC 0000 .word L215
8: 8 0001A5AE #
9: 9 0001A5AE # #include "fpp_defs.h"
10: 10 0001A5AE #
11: 11 0001A5AE #
12: 12 0001A5AE # /*****************************************************************************
13: 13 0001A5AE # *
14: 14 0001A5AE # * NEGD - DOUBLE PRECISION FLOATING POINT LOAD_NEGATE TEST
15: 15 0001A5AE # *
16: 16 0001A5AE # *****************************************************************************/
17: 17 0001A5AE # negd()
18: 18 0001A5AE # {
19: 19 0001A5AE 11 3a jbr L217
20: 20 0001A5B0 L218:
21: 21 0001A5B0 # asm(".globl _negd_t");
22: 22 0001A5B0 .globl _negd_t
23: 23 0001A5B0 # asm("_negd_t:"); /* entry address */
24: 24 0001A5B0 _negd_t:
25: 25 0001A5B0 # if( ( cycle ==1 ) && ( prt_hdrs ) ) /* print headers on 1st pass */
26: 26 0001A5B0 1d effffffff6 01 cmpl _cycle,$1
27: 27 0001A5B7 21 15 jneq L219
28: 28 0001A5B9 5d efffffffed tstl _prt_hdrs
29: 29 0001A5BF 31 0d jeql L219
30: 30 0001A5C1 # writes(" NEGD");
31: 31 0001A5C1 .data 1
32: 32 0000068c * L221:
33: 33 0000068c * 204E45474400 .ascii " NEGD\0"
34: 34 00000692 * .text
35: 35 0001A5C1 dd 8f0000068c pushl $L221
36: 36 0001A5C7 fe 08 efffffffde callf $8,_writes
37: 37 0001A5CE # negd_1(); /* negate through the cache */
38: 38 0001A5CE L219:
39: 39 0001A5CE fe 04 ef00000017 callf $4,_negd_1
40: 40 0001A5D5 # negd_2(); /* register stability */
41: 41 0001A5D5 fe 04 ef0000019a callf $4,_negd_2
42: 42 0001A5DC # negd_3(); /* PSL stability test */
43: 43 0001A5DC fe 04 ef0000033f callf $4,_negd_3
44: 44 0001A5E3 # asm("jmp *return"); /* return to the test monitor */
45: 45 0001A5E3 71 ffffffffc3 jmp *return
46: 46 0001A5E9 # }
47: 47 0001A5E9 40 ret#2
48: 48 0001A5EA .set L215,0x0
49: 49 0001A5EA L217:
50: 50 0001A5EA 11 c4 jbr L218
51: 51 0001A5EC .data
52: 52 0000068c * .text
53: 53 0001A5EC .align 1
54: 54 0001A5EC .globl _negd_1
55: 55 0001A5EC _negd_1:
56: 56 0001A5EC 0000 .word L225
57: 57 0001A5EE #
58: 58 0001A5EE #
59: 59 0001A5EE #
60: 60 0001A5EE # /************************************************************************
61: 61 0001A5EE # *
62: 62 0001A5EE # * SUBTEST 1 - negate through memory
63: 63 0001A5EE # *
64: 64 0001A5EE # ************************************************************************/
65: 65 0001A5EE # negd_1()
66: 66 0001A5EE # {
67: 67 0001A5EE 13 0182 jbr L227
68: 68 0001A5F1 L228:
69: 69 0001A5F1 # force_loop = FALSE;
70: 70 0001A5F1 4d efffffffb5 clrl _force_loop
71: 71 0001A5F7 # subtest = 1;
72: 72 0001A5F7 0d 01 efffffffae movl $1,_subtest
73: 73 0001A5FE # for( index = 0; index < max_lnd_1_index; index++ ) {
74: 74 0001A5FE 4d efffffffa8 clrl _index
75: 75 0001A604 L231:
76: 76 0001A604 1d efffffffa2 efffffff9d cmpl _index,_max_lnd_1_index
77: 77 0001A60F 91 03 13 015e jgeq L230
78: 78 0001A614 # dbl_ld_acc = lnd_1_data[index].ld; /* get value to negate */
79: 79 0001A614 48 04 efffffff91 50 shll $4,_index,r0
80: 80 0001A61C 0c 8f00000000 50 addl2 $_lnd_1_data,r0
81: 81 0001A623 0d a004 efffffff85 movl 4(r0),_dbl_ld_acc+4
82: 82 0001A62B 0d 60 efffffff7a movl (r0),_dbl_ld_acc
83: 83 0001A632 # dbl_expected = lnd_1_data[index].exp; /* expected result */
84: 84 0001A632 48 04 efffffff73 50 shll $4,_index,r0
85: 85 0001A63A 0c 8f00000008 50 addl2 $_lnd_1_data+8,r0
86: 86 0001A641 0d a004 efffffff67 movl 4(r0),_dbl_expected+4
87: 87 0001A649 0d 60 efffffff5c movl (r0),_dbl_expected
88: 88 0001A650 # /*
89: 89 0001A650 # * If LOOP ON ERROR is set, this is the loop for this subtest.
90: 90 0001A650 # * The force loop flag is set after the first error.
91: 91 0001A650 # */
92: 92 0001A650 # asm("_negd_1_lp1:");
93: 93 0001A650 _negd_1_lp1:
94: 94 0001A650 # asm("ldd _dbl_ld_acc"); /* load the value */
95: 95 0001A650 07 efffffff56 ldd _dbl_ld_acc
96: 96 0001A656 # asm("negd"); /* negate the value */
97: 97 0001A656 b7 negd
98: 98 0001A657 # asm("std _dbl_st_acc"); /* store the result */
99: 99 0001A657 27 efffffff4f std _dbl_st_acc
100: 100 0001A65D # if( force_loop )
101: 101 0001A65D 5d efffffff49 tstl _force_loop
102: 102 0001A663 31 02 jeql L232
103: 103 0001A665 # asm("brb _negd_1_lp1");; /* loop on the error */
104: 104 0001A665 11 e9 brb _negd_1_lp1
105: 105 0001A667 L232:
106: 106 0001A667 # /*
107: 107 0001A667 # * end error loop - test the results
108: 108 0001A667 # */
109: 109 0001A667 # if( (dbl_st_acc.m != dbl_expected.m ) || /* COMPARE the values*/
110: 110 0001A667 # (dbl_st_acc.l != dbl_expected.l ) ) {
111: 111 0001A667 1d efffffff3f efffffff3a cmpl _dbl_st_acc,_dbl_expected
112: 112 0001A672 21 10 jneq L9999
113: 113 0001A674 1d efffffff36 efffffff31 cmpl _dbl_st_acc+4,_dbl_expected+4
114: 114 0001A67F 21 03 13 00e5 jeql L233
115: 115 0001A684 L9999:
116: 116 0001A684 # errcnt++; /* bump the error count */
117: 117 0001A684 6d efffffff22 incl _errcnt
118: 118 0001A68A # if( prt_error ) {
119: 119 0001A68A 5d efffffff1c tstl _prt_error
120: 120 0001A690 21 03 13 00b1 jeql L234
121: 121 0001A695 # writes(" \n"); /* start a new print line */
122: 122 0001A695 .data 1
123: 123 00000692 * L235:
124: 124 00000692 * 200A00 .ascii " \12\0"
125: 125 00000695 * .text
126: 126 0001A695 dd 8f00000692 pushl $L235
127: 127 0001A69B fe 08 efffffff0a callf $8,_writes
128: 128 0001A6A2 # writes("cycle: ");
129: 129 0001A6A2 .data 1
130: 130 00000695 * L236:
131: 131 00000695 * 6379636C653A2000 .ascii "cycle: \0"
132: 132 0000069d * .text
133: 133 0001A6A2 dd 8f00000695 pushl $L236
134: 134 0001A6A8 fe 08 effffffefd callf $8,_writes
135: 135 0001A6AF # writed( cycle );
136: 136 0001A6AF dd effffffef7 pushl _cycle
137: 137 0001A6B5 fe 08 effffffef0 callf $8,_writed
138: 138 0001A6BC # writes(" NEGD test ");
139: 139 0001A6BC .data 1
140: 140 0000069d * L238:
141: 141 0000069d * 20204E4547442074657374200 .ascii " NEGD test \0"
142: 0
143: 142 000006aa * .text
144: 143 0001A6BC dd 8f0000069d pushl $L238
145: 144 0001A6C2 fe 08 effffffee3 callf $8,_writes
146: 145 0001A6C9 # writed( test_no );
147: 146 0001A6C9 dd effffffedd pushl _test_no
148: 147 0001A6CF fe 08 effffffed6 callf $8,_writed
149: 148 0001A6D6 # writes(", subtest 1 (Cache Data) - BAD FINAL ACC\n");
150: 149 0001A6D6 .data 1
151: 150 000006aa * L239:
152: 151 000006aa * 2C20737562746573742031202 .ascii ", subtest 1 (Cache Data) - BAD FINAL ACC\12\0"
153: 8436163686520446174612920
154: 2D204241442046494E414C204
155: 143430A00
156: 152 000006d4 * .text
157: 153 0001A6D6 dd 8f000006aa pushl $L239
158: 154 0001A6DC fe 08 effffffec9 callf $8,_writes
159: 155 0001A6E3 # print_negd_data();
160: 156 0001A6E3 fe 04 ef000003de callf $4,_print_negd_data
161: 157 0001A6EA # writes(", index = ");
162: 158 0001A6EA .data 1
163: 159 000006d4 * L241:
164: 160 000006d4 * 2C2020696E646578203D2000 .ascii ", index = \0"
165: 161 000006e0 * .text
166: 162 0001A6EA dd 8f000006d4 pushl $L241
167: 163 0001A6F0 fe 08 effffffeb5 callf $8,_writes
168: 164 0001A6F7 # writed( index );
169: 165 0001A6F7 dd effffffeaf pushl _index
170: 166 0001A6FD fe 08 effffffea8 callf $8,_writed
171: 167 0001A704 # writec('\n');
172: 168 0001A704 dd 0a pushl $10
173: 169 0001A706 fe 08 effffffe9f callf $8,_writec
174: 170 0001A70D # writes(" Acc expected = ");
175: 171 0001A70D .data 1
176: 172 000006e0 * L243:
177: 173 000006e0 * 2020202020202020202020202 .ascii " Acc expected = \0"
178: 0202020202020202020202020
179: 2020202020204163632065787
180: 06563746564203D2000
181: 174 0000070f * .text
182: 175 0001A70D dd 8f000006e0 pushl $L243
183: 176 0001A713 fe 08 effffffe92 callf $8,_writes
184: 177 0001A71A # write32h( dbl_expected.m );
185: 178 0001A71A dd effffffe8c pushl _dbl_expected
186: 179 0001A720 fe 08 effffffe85 callf $8,_write32h
187: 180 0001A727 # writec(' ');
188: 181 0001A727 dd 20 pushl $32
189: 182 0001A729 fe 08 effffffe7c callf $8,_writec
190: 183 0001A730 # write32h( dbl_expected.l );
191: 184 0001A730 dd effffffe7a pushl _dbl_expected+4
192: 185 0001A736 fe 08 effffffe6f callf $8,_write32h
193: 186 0001A73D # writec('\n');
194: 187 0001A73D dd 0a pushl $10
195: 188 0001A73F fe 08 effffffe66 callf $8,_writec
196: 189 0001A746 # }
197: 190 0001A746 # if( halt_flg )
198: 191 0001A746 L234:
199: 192 0001A746 5d effffffe60 tstl _halt_flg
200: 193 0001A74C 31 09 jeql L245
201: 194 0001A74E # negd_er_halt( BAD_ACC_HLT ); /* halt on the error */
202: 195 0001A74E dd 01 pushl $1
203: 196 0001A750 fe 08 ef000003d9 callf $8,_negd_er_halt
204: 197 0001A757 # if( loop_on_err ) {
205: 198 0001A757 L245:
206: 199 0001A757 5d effffffe4f tstl _loop_on_err
207: 200 0001A75D 31 0a jeql L247
208: 201 0001A75F # force_loop = TRUE; /* set the force loop flag */
209: 202 0001A75F 0d 01 effffffe46 movl $1,_force_loop
210: 203 0001A766 # asm("brw _negd_1_lp1");; /* and loop on the error */
211: 204 0001A766 13 fee7 brw _negd_1_lp1
212: 205 0001A769 # } /* end of loop on error */
213: 206 0001A769 # } /* end of compare error */
214: 207 0001A769 L247:
215: 208 0001A769 # } /* end of WHILE loop */
216: 209 0001A769 L233:
217: 210 0001A769 L229:
218: 211 0001A769 6d effffffe3d incl _index
219: 212 0001A76F 13 fe92 jbr L231
220: 213 0001A772 L230:
221: 214 0001A772 # } /* end of subtest 1 */
222: 215 0001A772 40 ret#2
223: 216 0001A773 .set L225,0x0
224: 217 0001A773 L227:
225: 218 0001A773 13 fe7b jbr L228
226: 219 0001A776 .data
227: 220 0000068c * .text
228: 221 0001A776 .align 1
229: 222 0001A776 .globl _negd_2
230: 223 0001A776 _negd_2:
231: 224 0001A776 0000 .word L248
232: 225 0001A778 #
233: 226 0001A778 #
234: 227 0001A778 #
235: 228 0001A778 # /************************************************************************
236: 229 0001A778 # *
237: 230 0001A778 # * SUBTEST 2 - Check for register corruption
238: 231 0001A778 # *
239: 232 0001A778 # ************************************************************************/
240: 233 0001A778 # negd_2()
241: 234 0001A778 # {
242: 235 0001A778 13 01a3 jbr L250
243: 236 0001A77B L251:
244: 237 0001A77B # force_loop = FALSE; /* clear force_loop flg */
245: 238 0001A77B 4d effffffe2b clrl _force_loop
246: 239 0001A781 # subtest = 2;
247: 240 0001A781 0d 02 effffffe24 movl $2,_subtest
248: 241 0001A788 # fill_reg_buf( load_regs ); /* get patterns for regs */
249: 242 0001A788 dd 8f00000000 pushl $_load_regs
250: 243 0001A78E fe 08 effffffe17 callf $8,_fill_reg_buf
251: 244 0001A795 # index = 0;
252: 245 0001A795 4d effffffe11 clrl _index
253: 246 0001A79B # dbl_ld_acc = lnd_1_data[0].ld; /* get value to negate */
254: 247 0001A79B 0d effffffe0f effffffe0a movl _lnd_1_data+4,_dbl_ld_acc+4
255: 248 0001A7A6 0d effffffe00 effffffdfb movl _lnd_1_data,_dbl_ld_acc
256: 249 0001A7B1 # /* if( no_fpp_wcs ) /* */
257: 250 0001A7B1 # /* dbl_expected = dbl_ld_acc; /* expected = loaded */
258: 251 0001A7B1 # /* else /* */
259: 252 0001A7B1 # /* dbl_expected = lnd_1_data[index].exp; /* expected result */
260: 253 0001A7B1 # /*
261: 254 0001A7B1 # * If LOOP ON ERROR is set, this is the loop for this subtest.
262: 255 0001A7B1 # * The force loop flag is set after the first error.
263: 256 0001A7B1 # */
264: 257 0001A7B1 # asm("ldd _dbl_ld_acc"); /* load the initial value */
265: 258 0001A7B1 07 effffffdf5 ldd _dbl_ld_acc
266: 259 0001A7B7 # asm("_negd_2_lp1:");
267: 260 0001A7B7 _negd_2_lp1:
268: 261 0001A7B7 # asm("loadr $0x1fff,_load_regs"); /* load regs 0 - 12 */
269: 262 0001A7B7 ab 891fff effffffdec loadr $0x1fff,_load_regs
270: 263 0001A7C0 # asm("nop");
271: 264 0001A7C0 10 nop
272: 265 0001A7C1 # asm("negd"); /* negate the value */
273: 266 0001A7C1 b7 negd
274: 267 0001A7C2 # asm("nop");
275: 268 0001A7C2 10 nop
276: 269 0001A7C3 # asm("storer $0x1fff,_store_regs"); /* store regs 0 - 12 */
277: 270 0001A7C3 bb 891fff effffffde0 storer $0x1fff,_store_regs
278: 271 0001A7CC # asm("std _dbl_st_acc"); /* save the accumulator */
279: 272 0001A7CC 27 effffffdda std _dbl_st_acc
280: 273 0001A7D2 # if( force_loop )
281: 274 0001A7D2 5d effffffdd4 tstl _force_loop
282: 275 0001A7D8 31 02 jeql L253
283: 276 0001A7DA # asm("brb _negd_2_lp1");; /* loop on the error */
284: 277 0001A7DA 11 db brb _negd_2_lp1
285: 278 0001A7DC L253:
286: 279 0001A7DC # /*
287: 280 0001A7DC # * Now compare the stored register values to those that were loaded
288: 281 0001A7DC # */
289: 282 0001A7DC # index2 = 0;
290: 283 0001A7DC 4d effffffdca clrl _index2
291: 284 0001A7E2 # while( (load_regs[index2] == store_regs[index2]) && (index2 < 13) )
292: 285 0001A7E2 L254:
293: 286 0001A7E2 0d effffffdc4 50 movl _index2,r0
294: 287 0001A7E9 0d effffffdbd 51 movl _index2,r1
295: 288 0001A7F0 1d 40effffffdb5 cmpl _load_regs[r0],_store_regs[r1]
296: 41effffffdaf
297: 289 0001A7FD 21 11 jneq L255
298: 290 0001A7FF 1d effffffda7 0d cmpl _index2,$13
299: 291 0001A806 81 08 jgeq L255
300: 292 0001A808 # index2++; /* check reg values */
301: 293 0001A808 6d effffffd9e incl _index2
302: 294 0001A80E 11 d2 jbr L254
303: 295 0001A810 L255:
304: 296 0001A810 # if( index2 < 13 ) { /* error if index2 < 13 */
305: 297 0001A810 1d effffffd96 0d cmpl _index2,$13
306: 298 0001A817 91 03 13 0101 jgeq L256
307: 299 0001A81C # errcnt++; /* bump the error count */
308: 300 0001A81C 6d effffffd8a incl _errcnt
309: 301 0001A822 # if( prt_error ) {
310: 302 0001A822 5d effffffd84 tstl _prt_error
311: 303 0001A828 21 03 13 00cd jeql L257
312: 304 0001A82D # writes(" \n"); /* start a new print line */
313: 305 0001A82D .data 1
314: 306 0000070f * L258:
315: 307 0000070f * 200A00 .ascii " \12\0"
316: 308 00000712 * .text
317: 309 0001A82D dd 8f0000070f pushl $L258
318: 310 0001A833 fe 08 effffffd72 callf $8,_writes
319: 311 0001A83A # writes("cycle: ");
320: 312 0001A83A .data 1
321: 313 00000712 * L259:
322: 314 00000712 * 6379636C653A2000 .ascii "cycle: \0"
323: 315 0000071a * .text
324: 316 0001A83A dd 8f00000712 pushl $L259
325: 317 0001A840 fe 08 effffffd65 callf $8,_writes
326: 318 0001A847 # writed( cycle );
327: 319 0001A847 dd effffffd5f pushl _cycle
328: 320 0001A84D fe 08 effffffd58 callf $8,_writed
329: 321 0001A854 # writes(" NEGD test ");
330: 322 0001A854 .data 1
331: 323 0000071a * L260:
332: 324 0000071a * 20204E4547442074657374200 .ascii " NEGD test \0"
333: 0
334: 325 00000727 * .text
335: 326 0001A854 dd 8f0000071a pushl $L260
336: 327 0001A85A fe 08 effffffd4b callf $8,_writes
337: 328 0001A861 # writed( test_no );
338: 329 0001A861 dd effffffd45 pushl _test_no
339: 330 0001A867 fe 08 effffffd3e callf $8,_writed
340: 331 0001A86E # writes(", subtest 2 - A REGISTER WAS MODIFIED\n");
341: 332 0001A86E .data 1
342: 333 00000727 * L261:
343: 334 00000727 * 2C20737562746573742032202 .ascii ", subtest 2 - A REGISTER WAS MODIFIED\12\0"
344: D204120524547495354455220
345: 574153204D4F4449464945440
346: A00
347: 335 0000074e * .text
348: 336 0001A86E dd 8f00000727 pushl $L261
349: 337 0001A874 fe 08 effffffd31 callf $8,_writes
350: 338 0001A87B # print_negd_data(); /* print the operands */
351: 339 0001A87B fe 04 ef00000246 callf $4,_print_negd_data
352: 340 0001A882 # writes("\n");
353: 341 0001A882 .data 1
354: 342 0000074e * L262:
355: 343 0000074e * 0A00 .ascii "\12\0"
356: 344 00000750 * .text
357: 345 0001A882 dd 8f0000074e pushl $L262
358: 346 0001A888 fe 08 effffffd1d callf $8,_writes
359: 347 0001A88F # writes("register "); /* print the information */
360: 348 0001A88F .data 1
361: 349 00000750 * L263:
362: 350 00000750 * 72656769737465722000 .ascii "register \0"
363: 351 0000075a * .text
364: 352 0001A88F dd 8f00000750 pushl $L263
365: 353 0001A895 fe 08 effffffd10 callf $8,_writes
366: 354 0001A89C # writed( index2 ); /* about the corrupted */
367: 355 0001A89C dd effffffd0a pushl _index2
368: 356 0001A8A2 fe 08 effffffd03 callf $8,_writed
369: 357 0001A8A9 # writes(" = "); /* register */
370: 358 0001A8A9 .data 1
371: 359 0000075a * L264:
372: 360 0000075a * 203D2000 .ascii " = \0"
373: 361 0000075e * .text
374: 362 0001A8A9 dd 8f0000075a pushl $L264
375: 363 0001A8AF fe 08 effffffcf6 callf $8,_writes
376: 364 0001A8B6 # write32h( store_regs[index2] );
377: 365 0001A8B6 0d effffffcf0 50 movl _index2,r0
378: 366 0001A8BD dd 40effffffce8 pushl _store_regs[r0]
379: 367 0001A8C4 fe 08 effffffce1 callf $8,_write32h
380: 368 0001A8CB # writes(", should be = ");
381: 369 0001A8CB .data 1
382: 370 0000075e * L265:
383: 371 0000075e * 2C202073686F756C642062652 .ascii ", should be = \0"
384: 03D2000
385: 372 0000076e * .text
386: 373 0001A8CB dd 8f0000075e pushl $L265
387: 374 0001A8D1 fe 08 effffffcd4 callf $8,_writes
388: 375 0001A8D8 # write32h( load_regs[index2] );
389: 376 0001A8D8 0d effffffcce 50 movl _index2,r0
390: 377 0001A8DF dd 40effffffcc6 pushl _load_regs[r0]
391: 378 0001A8E6 fe 08 effffffcbf callf $8,_write32h
392: 379 0001A8ED # writes("\n");
393: 380 0001A8ED .data 1
394: 381 0000076e * L266:
395: 382 0000076e * 0A00 .ascii "\12\0"
396: 383 00000770 * .text
397: 384 0001A8ED dd 8f0000076e pushl $L266
398: 385 0001A8F3 fe 08 effffffcb2 callf $8,_writes
399: 386 0001A8FA # }
400: 387 0001A8FA # if( halt_flg )
401: 388 0001A8FA L257:
402: 389 0001A8FA 5d effffffcac tstl _halt_flg
403: 390 0001A900 31 09 jeql L267
404: 391 0001A902 # negd_er_halt( BAD_REG_HLT ); /* halt on the error */
405: 392 0001A902 dd 02 pushl $2
406: 393 0001A904 fe 08 ef00000225 callf $8,_negd_er_halt
407: 394 0001A90B # if( loop_on_err ) {
408: 395 0001A90B L267:
409: 396 0001A90B 5d effffffc9b tstl _loop_on_err
410: 397 0001A911 31 0a jeql L268
411: 398 0001A913 # force_loop = TRUE; /* set the force loop flag */
412: 399 0001A913 0d 01 effffffc92 movl $1,_force_loop
413: 400 0001A91A # asm("brw _negd_2_lp1");; /* and loop on the error */
414: 401 0001A91A 13 fe9a brw _negd_2_lp1
415: 402 0001A91D # } /* end of loop on error */
416: 403 0001A91D # } /* end of register corruption error */
417: 404 0001A91D L268:
418: 405 0001A91D # } /* end of subtest 2 */
419: 406 0001A91D L256:
420: 407 0001A91D 40 ret#2
421: 408 0001A91E .set L248,0x0
422: 409 0001A91E L250:
423: 410 0001A91E 13 fe5a jbr L251
424: 411 0001A921 .data
425: 412 0000068c * .text
426: 413 0001A921 00 .align 1
427: 414 0001A922 .globl _negd_3
428: 415 0001A922 _negd_3:
429: 416 0001A922 0000 .word L269
430: 417 0001A924 #
431: 418 0001A924 #
432: 419 0001A924 #
433: 420 0001A924 # /************************************************************************
434: 421 0001A924 # *
435: 422 0001A924 # * SUBTEST 3 - Check for PSL corruption
436: 423 0001A924 # *
437: 424 0001A924 # ************************************************************************/
438: 425 0001A924 # negd_3()
439: 426 0001A924 # {
440: 427 0001A924 13 019d jbr L271
441: 428 0001A927 L272:
442: 429 0001A927 # force_loop = FALSE; /* clear force_loop flg */
443: 430 0001A927 4d effffffc7f clrl _force_loop
444: 431 0001A92D # subtest = 3;
445: 432 0001A92D 0d 03 effffffc78 movl $3,_subtest
446: 433 0001A934 # fill_reg_buf( load_regs ); /* get patterns for regs */
447: 434 0001A934 dd 8f00000000 pushl $_load_regs
448: 435 0001A93A fe 08 effffffc6b callf $8,_fill_reg_buf
449: 436 0001A941 # for( index = 0; index < 3; index++ ) {
450: 437 0001A941 4d effffffc65 clrl _index
451: 438 0001A947 L275:
452: 439 0001A947 1d effffffc5f 03 cmpl _index,$3
453: 440 0001A94E 91 03 13 0170 jgeq L274
454: 441 0001A953 # dbl_ld_acc = lnd_1_data[index].ld; /* get value to negate */
455: 442 0001A953 48 04 effffffc52 50 shll $4,_index,r0
456: 443 0001A95B 0c 8f00000000 50 addl2 $_lnd_1_data,r0
457: 444 0001A962 0d a004 effffffc46 movl 4(r0),_dbl_ld_acc+4
458: 445 0001A96A 0d 60 effffffc3b movl (r0),_dbl_ld_acc
459: 446 0001A971 # /* if( no_fpp_wcs ) /* */
460: 447 0001A971 # /* dbl_expected = dbl_ld_acc; /* expected = loaded */
461: 448 0001A971 # /* else /* */
462: 449 0001A971 # /* dbl_expected = lnd_1_data[index].exp; /* expected result */
463: 450 0001A971 # sgl_dummy1 = status_array[status_index]; /* status = +, -, 0 */
464: 451 0001A971 0d effffffc35 50 movl _status_index,r0
465: 452 0001A978 0d 40effffffc2d movl _status_array[r0],_sgl_dummy1
466: effffffc28
467: 453 0001A984 # /*
468: 454 0001A984 # * If LOOP ON ERROR is set, this is the loop for this subtest.
469: 455 0001A984 # * The force loop flag is set after the first error.
470: 456 0001A984 # */
471: 457 0001A984 # asm("_negd_3_lp1:");
472: 458 0001A984 _negd_3_lp1:
473: 459 0001A984 # asm("ldd _dbl_ld_acc"); /* load the initial value */
474: 460 0001A984 07 effffffc22 ldd _dbl_ld_acc
475: 461 0001A98A # asm("tstl _sgl_dummy1"); /* set the PSL status */
476: 462 0001A98A 5d effffffc1c tstl _sgl_dummy1
477: 463 0001A990 # asm("movpsl _init_psl"); /* save the initial PSL */
478: 464 0001A990 cd effffffc16 movpsl _init_psl
479: 465 0001A996 # asm("negd"); /* negate the value */
480: 466 0001A996 b7 negd
481: 467 0001A997 # asm("nop");
482: 468 0001A997 10 nop
483: 469 0001A998 # asm("movpsl _psl_val"); /* save the final PSL */
484: 470 0001A998 cd effffffc0e movpsl _psl_val
485: 471 0001A99E # asm("std _dbl_st_acc"); /* save the accumulator */
486: 472 0001A99E 27 effffffc08 std _dbl_st_acc
487: 473 0001A9A4 # if( force_loop )
488: 474 0001A9A4 5d effffffc02 tstl _force_loop
489: 475 0001A9AA 31 02 jeql L276
490: 476 0001A9AC # asm("brb _negd_3_lp1");; /* loop on the error */
491: 477 0001A9AC 11 d6 brb _negd_3_lp1
492: 478 0001A9AE L276:
493: 479 0001A9AE # /*
494: 480 0001A9AE # * Now compare the final PSL to the initial PSL -they should be the same
495: 481 0001A9AE # */
496: 482 0001A9AE # exp_psl = init_psl;
497: 483 0001A9AE 0d effffffbf8 effffffbf3 movl _init_psl,_exp_psl
498: 484 0001A9B9 # if( psl_val != exp_psl ) {
499: 485 0001A9B9 1d effffffbed effffffbe8 cmpl _psl_val,_exp_psl
500: 486 0001A9C4 21 03 13 00f1 jeql L277
501: 487 0001A9C9 # errcnt++; /* bump the error count */
502: 488 0001A9C9 6d effffffbdd incl _errcnt
503: 489 0001A9CF # if( prt_error ) {
504: 490 0001A9CF 5d effffffbd7 tstl _prt_error
505: 491 0001A9D5 21 03 13 00bd jeql L278
506: 492 0001A9DA # writes(" \n"); /* start a new print line */
507: 493 0001A9DA .data 1
508: 494 00000770 * L279:
509: 495 00000770 * 200A00 .ascii " \12\0"
510: 496 00000773 * .text
511: 497 0001A9DA dd 8f00000770 pushl $L279
512: 498 0001A9E0 fe 08 effffffbc5 callf $8,_writes
513: 499 0001A9E7 # writes("cycle: ");
514: 500 0001A9E7 .data 1
515: 501 00000773 * L280:
516: 502 00000773 * 6379636C653A2000 .ascii "cycle: \0"
517: 503 0000077b * .text
518: 504 0001A9E7 dd 8f00000773 pushl $L280
519: 505 0001A9ED fe 08 effffffbb8 callf $8,_writes
520: 506 0001A9F4 # writed( cycle );
521: 507 0001A9F4 dd effffffbb2 pushl _cycle
522: 508 0001A9FA fe 08 effffffbab callf $8,_writed
523: 509 0001AA01 # writes(" NEGD test ");
524: 510 0001AA01 .data 1
525: 511 0000077b * L281:
526: 512 0000077b * 20204E4547442074657374200 .ascii " NEGD test \0"
527: 0
528: 513 00000788 * .text
529: 514 0001AA01 dd 8f0000077b pushl $L281
530: 515 0001AA07 fe 08 effffffb9e callf $8,_writes
531: 516 0001AA0E # writed( test_no );
532: 517 0001AA0E dd effffffb98 pushl _test_no
533: 518 0001AA14 fe 08 effffffb91 callf $8,_writed
534: 519 0001AA1B # writes(", subtest 3 - INCORRECT FINAL PSL\n");
535: 520 0001AA1B .data 1
536: 521 00000788 * L282:
537: 522 00000788 * 2C20737562746573742033202 .ascii ", subtest 3 - INCORRECT FINAL PSL\12\0"
538: D20494E434F52524543542046
539: 494E414C2050534C0A00
540: 523 000007ab * .text
541: 524 0001AA1B dd 8f00000788 pushl $L282
542: 525 0001AA21 fe 08 effffffb84 callf $8,_writes
543: 526 0001AA28 # print_negd_data(); /* print the operands */
544: 527 0001AA28 fe 04 ef00000099 callf $4,_print_negd_data
545: 528 0001AA2F # writes("\n");
546: 529 0001AA2F .data 1
547: 530 000007ab * L283:
548: 531 000007ab * 0A00 .ascii "\12\0"
549: 532 000007ad * .text
550: 533 0001AA2F dd 8f000007ab pushl $L283
551: 534 0001AA35 fe 08 effffffb70 callf $8,_writes
552: 535 0001AA3C # writes("initial PSL = ");
553: 536 0001AA3C .data 1
554: 537 000007ad * L284:
555: 538 000007ad * 696E697469616C2050534C203 .ascii "initial PSL = \0"
556: D2000
557: 539 000007bc * .text
558: 540 0001AA3C dd 8f000007ad pushl $L284
559: 541 0001AA42 fe 08 effffffb63 callf $8,_writes
560: 542 0001AA49 # write32h( init_psl );
561: 543 0001AA49 dd effffffb5d pushl _init_psl
562: 544 0001AA4F fe 08 effffffb56 callf $8,_write32h
563: 545 0001AA56 # writes(", final PSL = ");
564: 546 0001AA56 .data 1
565: 547 000007bc * L285:
566: 548 000007bc * 2C202066696E616C2050534C2 .ascii ", final PSL = \0"
567: 03D2000
568: 549 000007cc * .text
569: 550 0001AA56 dd 8f000007bc pushl $L285
570: 551 0001AA5C fe 08 effffffb49 callf $8,_writes
571: 552 0001AA63 # write32h( psl_val );
572: 553 0001AA63 dd effffffb43 pushl _psl_val
573: 554 0001AA69 fe 08 effffffb3c callf $8,_write32h
574: 555 0001AA70 # writes(", expected PSL = ");
575: 556 0001AA70 .data 1
576: 557 000007cc * L286:
577: 558 000007cc * 2C20206578706563746564205 .ascii ", expected PSL = \0"
578: 0534C203D2000
579: 559 000007df * .text
580: 560 0001AA70 dd 8f000007cc pushl $L286
581: 561 0001AA76 fe 08 effffffb2f callf $8,_writes
582: 562 0001AA7D # write32h( exp_psl );
583: 563 0001AA7D dd effffffb29 pushl _exp_psl
584: 564 0001AA83 fe 08 effffffb22 callf $8,_write32h
585: 565 0001AA8A # writes("\n");
586: 566 0001AA8A .data 1
587: 567 000007df * L287:
588: 568 000007df * 0A00 .ascii "\12\0"
589: 569 000007e1 * .text
590: 570 0001AA8A dd 8f000007df pushl $L287
591: 571 0001AA90 fe 08 effffffb15 callf $8,_writes
592: 572 0001AA97 # }
593: 573 0001AA97 # if( halt_flg )
594: 574 0001AA97 L278:
595: 575 0001AA97 5d effffffb0f tstl _halt_flg
596: 576 0001AA9D 31 09 jeql L288
597: 577 0001AA9F # negd_er_halt( BAD_PSL_HLT ); /* halt on the error */
598: 578 0001AA9F dd 03 pushl $3
599: 579 0001AAA1 fe 08 ef00000088 callf $8,_negd_er_halt
600: 580 0001AAA8 # if( loop_on_err ) {
601: 581 0001AAA8 L288:
602: 582 0001AAA8 5d effffffafe tstl _loop_on_err
603: 583 0001AAAE 31 0a jeql L289
604: 584 0001AAB0 # force_loop = TRUE; /* set the force loop flag */
605: 585 0001AAB0 0d 01 effffffaf5 movl $1,_force_loop
606: 586 0001AAB7 # asm("brw _negd_3_lp1");; /* and loop on the error */
607: 587 0001AAB7 13 feca brw _negd_3_lp1
608: 588 0001AABA # } /* end of loop on error */
609: 589 0001AABA # } /* end of PSL corruption error */
610: 590 0001AABA L289:
611: 591 0001AABA # } /* end of WHILE loop */
612: 592 0001AABA L277:
613: 593 0001AABA L273:
614: 594 0001AABA 6d effffffaec incl _index
615: 595 0001AAC0 13 fe84 jbr L275
616: 596 0001AAC3 L274:
617: 597 0001AAC3 # } /* end of subtest 3 */
618: 598 0001AAC3 40 ret#2
619: 599 0001AAC4 .set L269,0x0
620: 600 0001AAC4 L271:
621: 601 0001AAC4 13 fe60 jbr L272
622: 602 0001AAC7 .data
623: 603 0000068c * .text
624: 604 0001AAC7 00 .align 1
625: 605 0001AAC8 .globl _print_negd_data
626: 606 0001AAC8 _print_negd_data:
627: 607 0001AAC8 0000 .word L290
628: 608 0001AACA #
629: 609 0001AACA #
630: 610 0001AACA #
631: 611 0001AACA # /**************************************************************************
632: 612 0001AACA # *
633: 613 0001AACA # * PRINT THE DATA AND STORE RESULTS
634: 614 0001AACA # *
635: 615 0001AACA # * initial Acc = xxxxxxxx xxxxxxxx, final Acc = xxxxxxxx xxxxxxxx, index = xx
636: 616 0001AACA # * expected = xxxxxxxx xxxxxxxx
637: 617 0001AACA # **************************************************************************/
638: 618 0001AACA # print_negd_data()
639: 619 0001AACA # {
640: 620 0001AACA 11 61 jbr L292
641: 621 0001AACC L293:
642: 622 0001AACC # writes("initial Acc = ");
643: 623 0001AACC .data 1
644: 624 000007e1 * L294:
645: 625 000007e1 * 696E697469616C20416363203 .ascii "initial Acc = \0"
646: D2000
647: 626 000007f0 * .text
648: 627 0001AACC dd 8f000007e1 pushl $L294
649: 628 0001AAD2 fe 08 effffffad3 callf $8,_writes
650: 629 0001AAD9 # write32h( dbl_ld_acc.m );
651: 630 0001AAD9 dd effffffacd pushl _dbl_ld_acc
652: 631 0001AADF fe 08 effffffac6 callf $8,_write32h
653: 632 0001AAE6 # writec(' ');
654: 633 0001AAE6 dd 20 pushl $32
655: 634 0001AAE8 fe 08 effffffabd callf $8,_writec
656: 635 0001AAEF # write32h( dbl_ld_acc.l );
657: 636 0001AAEF dd effffffabb pushl _dbl_ld_acc+4
658: 637 0001AAF5 fe 08 effffffab0 callf $8,_write32h
659: 638 0001AAFC # writes(", final Acc = ");
660: 639 0001AAFC .data 1
661: 640 000007f0 * L295:
662: 641 000007f0 * 2C202066696E616C204163632 .ascii ", final Acc = \0"
663: 03D2000
664: 642 00000800 * .text
665: 643 0001AAFC dd 8f000007f0 pushl $L295
666: 644 0001AB02 fe 08 effffffaa3 callf $8,_writes
667: 645 0001AB09 # write32h( dbl_st_acc.m );
668: 646 0001AB09 dd effffffa9d pushl _dbl_st_acc
669: 647 0001AB0F fe 08 effffffa96 callf $8,_write32h
670: 648 0001AB16 # writec(' ');
671: 649 0001AB16 dd 20 pushl $32
672: 650 0001AB18 fe 08 effffffa8d callf $8,_writec
673: 651 0001AB1F # write32h( dbl_st_acc.l );
674: 652 0001AB1F dd effffffa8b pushl _dbl_st_acc+4
675: 653 0001AB25 fe 08 effffffa80 callf $8,_write32h
676: 654 0001AB2C # }
677: 655 0001AB2C 40 ret#2
678: 656 0001AB2D .set L290,0x0
679: 657 0001AB2D L292:
680: 658 0001AB2D 11 9d jbr L293
681: 659 0001AB2F .data
682: 660 0000068c * .text
683: 661 0001AB2F 00 .align 1
684: 662 0001AB30 .globl _negd_er_halt
685: 663 0001AB30 _negd_er_halt:
686: 664 0001AB30 0000 .word L296
687: 665 0001AB32 #
688: 666 0001AB32 #
689: 667 0001AB32 #
690: 668 0001AB32 # /**************************************************************************
691: 669 0001AB32 # *
692: 670 0001AB32 # * HALT ON ERROR ROUTINE
693: 671 0001AB32 # *
694: 672 0001AB32 # **************************************************************************/
695: 673 0001AB32 # negd_er_halt( halt_code )
696: 674 0001AB32 # int halt_code;
697: 675 0001AB32 # {
698: 676 0001AB32 13 00ff jbr L298
699: 677 0001AB35 L299:
700: 678 0001AB35 # sgl_value_1 = dbl_ld_acc.m;
701: 679 0001AB35 0d effffffa71 effffffa6c movl _dbl_ld_acc,_sgl_value_1
702: 680 0001AB40 # sgl_value_2 = dbl_ld_acc.l;
703: 681 0001AB40 0d effffffa6a effffffa61 movl _dbl_ld_acc+4,_sgl_value_2
704: 682 0001AB4B # sgl_value_3 = dbl_st_acc.m;
705: 683 0001AB4B 0d effffffa5b effffffa56 movl _dbl_st_acc,_sgl_value_3
706: 684 0001AB56 # sgl_value_4 = dbl_st_acc.l;
707: 685 0001AB56 0d effffffa54 effffffa4b movl _dbl_st_acc+4,_sgl_value_4
708: 686 0001AB61 # sgl_dummy1 = halt_code; /* get the error type */
709: 687 0001AB61 0d ad04 effffffa43 movl 4(fp),_sgl_dummy1
710: 688 0001AB69 # asm("movl _test_no,r0"); /* r0 = test number */
711: 689 0001AB69 0d effffffa3d 50 movl _test_no,r0
712: 690 0001AB70 # asm("movl _subtest,r1"); /* r1 = subtest number */
713: 691 0001AB70 0d effffffa36 51 movl _subtest,r1
714: 692 0001AB77 # asm("movl _sgl_dummy1,r2"); /* r2 = error code */
715: 693 0001AB77 0d effffffa2f 52 movl _sgl_dummy1,r2
716: 694 0001AB7E # asm("movl _cycle,r3"); /* r3 = cycle count */
717: 695 0001AB7E 0d effffffa28 53 movl _cycle,r3
718: 696 0001AB85 # asm("movl _sgl_value_1,r4"); /* r4 = MS operand 1 */
719: 697 0001AB85 0d effffffa21 54 movl _sgl_value_1,r4
720: 698 0001AB8C # asm("movl _sgl_value_2,r5"); /* r5 = LS operand 1 */
721: 699 0001AB8C 0d effffffa1a 55 movl _sgl_value_2,r5
722: 700 0001AB93 # asm("movl _sgl_value_3,r6"); /* r6 = MS stored */
723: 701 0001AB93 0d effffffa13 56 movl _sgl_value_3,r6
724: 702 0001AB9A # asm("movl _sgl_value_4,r7"); /* r7 = LS stored */
725: 703 0001AB9A 0d effffffa0c 57 movl _sgl_value_4,r7
726: 704 0001ABA1 # if( halt_code == BAD_ACC_HLT ) {
727: 705 0001ABA1 1d ad04 01 cmpl 4(fp),$1
728: 706 0001ABA5 21 2d jneq L300
729: 707 0001ABA7 # sgl_value_1 = dbl_expected.m;
730: 708 0001ABA7 0d effffff9ff effffff9fa movl _dbl_expected,_sgl_value_1
731: 709 0001ABB2 # sgl_value_2 = dbl_expected.l;
732: 710 0001ABB2 0d effffff9f8 effffff9ef movl _dbl_expected+4,_sgl_value_2
733: 711 0001ABBD # asm("movl _sgl_value_1,r8"); /* r8 = MS expected */
734: 712 0001ABBD 0d effffff9e9 58 movl _sgl_value_1,r8
735: 713 0001ABC4 # asm("movl _sgl_value_2,r9"); /* r9 = LS expected */
736: 714 0001ABC4 0d effffff9e2 59 movl _sgl_value_2,r9
737: 715 0001ABCB # asm("movl _index,r10"); /* r10 = data index */
738: 716 0001ABCB 0d effffff9db 5a movl _index,r10
739: 717 0001ABD2 # } else
740: 718 0001ABD2 11 5e jbr L301
741: 719 0001ABD4 L300:
742: 720 0001ABD4 # if( halt_code == BAD_REG_HLT ) {
743: 721 0001ABD4 1d ad04 02 cmpl 4(fp),$2
744: 722 0001ABD8 21 3d jneq L302
745: 723 0001ABDA # sgl_dummy1 = load_regs[index2];
746: 724 0001ABDA 0d effffff9cc 50 movl _index2,r0
747: 725 0001ABE1 0d 40effffff9c4 movl _load_regs[r0],_sgl_dummy1
748: effffff9bf
749: 726 0001ABED # sgl_dummy2 = store_regs[index2];
750: 727 0001ABED 0d effffff9b9 50 movl _index2,r0
751: 728 0001ABF4 0d 40effffff9b1 movl _store_regs[r0],_sgl_dummy2
752: effffff9ac
753: 729 0001AC00 # asm("movl _index2,r8"); /* r8 = bad register # */
754: 730 0001AC00 0d effffff9a6 58 movl _index2,r8
755: 731 0001AC07 # asm("movl _sgl_dummy2,r9"); /* r9 = actual value */
756: 732 0001AC07 0d effffff99f 59 movl _sgl_dummy2,r9
757: 733 0001AC0E # asm("movl _sgl_dummy1,r10"); /* r10 = expected value */
758: 734 0001AC0E 0d effffff998 5a movl _sgl_dummy1,r10
759: 735 0001AC15 # } else
760: 736 0001AC15 11 1b jbr L303
761: 737 0001AC17 L302:
762: 738 0001AC17 # if( halt_code == BAD_PSL_HLT ) {
763: 739 0001AC17 1d ad04 03 cmpl 4(fp),$3
764: 740 0001AC1B 21 15 jneq L304
765: 741 0001AC1D # asm("movl _init_psl,r8"); /* r8 = initial PSL */
766: 742 0001AC1D 0d effffff989 58 movl _init_psl,r8
767: 743 0001AC24 # asm("movl _psl_val,r9"); /* r9 = final PSL */
768: 744 0001AC24 0d effffff982 59 movl _psl_val,r9
769: 745 0001AC2B # asm("movl _exp_psl,r10"); /* r10 = expected PSL */
770: 746 0001AC2B 0d effffff97b 5a movl _exp_psl,r10
771: 747 0001AC32 # };
772: 748 0001AC32 L304:
773: 749 0001AC32 L303:
774: 750 0001AC32 L301:
775: 751 0001AC32 # asm("halt"); /* HALT ... */
776: 752 0001AC32 00 halt
777: 753 0001AC33 # }
778: 754 0001AC33 40 ret#2
779: 755 0001AC34 .set L296,0x0
780: 756 0001AC34 L298:
781: 757 0001AC34 13 fefe jbr L299
782: 758 0001AC37 .data
783: 758 000351E3 .data
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.