|
|
1.1 root 1: 1 00000000 LL0:
2: 2 00000000 .data
3: 3 00000a98 * .text
4: 4 00000000 .align 1
5: 5 00000000 .globl _cmpd
6: 6 00000000 _cmpd:
7: 7 0001B358 0000 .word L215
8: 8 0001B35A # #include "fpp_defs.h"
9: 9 0001B35A #
10: 10 0001B35A #
11: 11 0001B35A #
12: 12 0001B35A # /***************************************************************************
13: 13 0001B35A # *
14: 14 0001B35A # * CMPD -COMPARE SGL ACCUMULATOR TO SGL OPERAND
15: 15 0001B35A # *
16: 16 0001B35A # *****************************************************************************/
17: 17 0001B35A # cmpd()
18: 18 0001B35A # {
19: 19 0001B35A 11 41 jbr L217
20: 20 0001B35C L218:
21: 21 0001B35C # asm(".globl _cmpd_t");
22: 22 0001B35C .globl _cmpd_t
23: 23 0001B35C # asm("_cmpd_t:"); /* entry address */
24: 24 0001B35C _cmpd_t:
25: 25 0001B35C # if( ( cycle == 1 ) && ( prt_hdrs ) ) /* print headers on 1st pass */
26: 26 0001B35C 1d effffffff6 01 cmpl _cycle,$1
27: 27 0001B363 21 15 jneq L219
28: 28 0001B365 5d efffffffed tstl _prt_hdrs
29: 29 0001B36B 31 0d jeql L219
30: 30 0001B36D # {
31: 31 0001B36D # writes(" CMPD");
32: 32 0001B36D .data 1
33: 33 00000a98 * L221:
34: 34 00000a98 * 20434D504400 .ascii " CMPD\0"
35: 35 00000a9e * .text
36: 36 0001B36D dd 8f00000a98 pushl $L221
37: 37 0001B373 fe 08 efffffffde callf $8,_writes
38: 38 0001B37A # }
39: 39 0001B37A # cmpd_1(); /* test via registers */
40: 40 0001B37A L219:
41: 41 0001B37A fe 04 ef0000001f callf $4,_cmpd_1
42: 42 0001B381 # cmpd_2(); /* test via cache */
43: 43 0001B381 fe 04 ef00000274 callf $4,_cmpd_2
44: 44 0001B388 # cmpd_3(); /* register corruption test */
45: 45 0001B388 fe 04 ef00000489 callf $4,_cmpd_3
46: 46 0001B38F # cmpd_4(); /* acc. corruption test */
47: 47 0001B38F fe 04 ef0000068a callf $4,_cmpd_4
48: 48 0001B396 # asm("jmp *return"); /* return to the test monitor */
49: 49 0001B396 71 ffffffffbc jmp *return
50: 50 0001B39C # }
51: 51 0001B39C 40 ret#2
52: 52 0001B39D .set L215,0x0
53: 53 0001B39D L217:
54: 54 0001B39D 11 bd jbr L218
55: 55 0001B39F .data
56: 56 00000a98 * .text
57: 57 0001B39F 00 .align 1
58: 58 0001B3A0 .globl _cmpd_1
59: 59 0001B3A0 _cmpd_1:
60: 60 0001B3A0 0000 .word L226
61: 61 0001B3A2 #
62: 62 0001B3A2 #
63: 63 0001B3A2 #
64: 64 0001B3A2 # /****************************************************************************
65: 65 0001B3A2 # *
66: 66 0001B3A2 # * SUBTEST 1 - CMPD status test -register data
67: 67 0001B3A2 # *
68: 68 0001B3A2 # ****************************************************************************/
69: 69 0001B3A2 # cmpd_1()
70: 70 0001B3A2 # {
71: 71 0001B3A2 13 0253 jbr L228
72: 72 0001B3A5 L229:
73: 73 0001B3A5 # force_loop = FALSE;
74: 74 0001B3A5 4d efffffffad clrl _force_loop
75: 75 0001B3AB # subtest = 1;
76: 76 0001B3AB 0d 01 efffffffa6 movl $1,_subtest
77: 77 0001B3B2 # index = 0;
78: 78 0001B3B2 4d efffffffa0 clrl _index
79: 79 0001B3B8 # do
80: 80 0001B3B8 L232:
81: 81 0001B3B8 # {
82: 82 0001B3B8 # dbl_value_1 = cmpd_1_data[index].one; /* get the data operands */
83: 83 0001B3B8 5c 14 efffffff99 50 mull3 $20,_index,r0
84: 84 0001B3C0 0c 8f00000000 50 addl2 $_cmpd_1_data,r0
85: 85 0001B3C7 0d a004 efffffff8d movl 4(r0),_dbl_value_1+4
86: 86 0001B3CF 0d 60 efffffff82 movl (r0),_dbl_value_1
87: 87 0001B3D6 # dbl_value_2 = cmpd_1_data[index].two;
88: 88 0001B3D6 5c 14 efffffff7b 50 mull3 $20,_index,r0
89: 89 0001B3DE 0c 8f00000008 50 addl2 $_cmpd_1_data+8,r0
90: 90 0001B3E5 0d a004 efffffff6f movl 4(r0),_dbl_value_2+4
91: 91 0001B3ED 0d 60 efffffff64 movl (r0),_dbl_value_2
92: 92 0001B3F4 # sgl_expected = cmpd_1_data[index].flag; /* get expected results */
93: 93 0001B3F4 5c 14 efffffff5d 50 mull3 $20,_index,r0
94: 94 0001B3FC 0d e000000010 efffffff51 movl _cmpd_1_data+16(r0),_sgl_expected
95: 95 0001B407 # sgl_value_1 = dbl_value_1.m;
96: 96 0001B407 0d efffffff4b efffffff46 movl _dbl_value_1,_sgl_value_1
97: 97 0001B412 # sgl_value_2 = dbl_value_1.l;
98: 98 0001B412 0d efffffff44 efffffff3b movl _dbl_value_1+4,_sgl_value_2
99: 99 0001B41D # sgl_value_3 = dbl_value_2.m;
100: 100 0001B41D 0d efffffff35 efffffff30 movl _dbl_value_2,_sgl_value_3
101: 101 0001B428 # sgl_value_4 = dbl_value_2.l;
102: 102 0001B428 0d efffffff2e efffffff25 movl _dbl_value_2+4,_sgl_value_4
103: 103 0001B433 # status_index = 0; /* clear the status index */
104: 104 0001B433 4d efffffff1f clrl _status_index
105: 105 0001B439 # do
106: 106 0001B439 L235:
107: 107 0001B439 # {
108: 108 0001B439 # sgl_dummy1 = status_array[status_index]; /* array = +, -, 0 */
109: 109 0001B439 0d efffffff19 50 movl _status_index,r0
110: 110 0001B440 0d 40efffffff11 movl _status_array[r0],_sgl_dummy1
111: efffffff0c
112: 111 0001B44C # /*
113: 112 0001B44C # * If LOOP ON ERROR is set, this is the loop for this subtest.
114: 113 0001B44C # * The force loop flag is set after the first error.
115: 114 0001B44C # */
116: 115 0001B44C # asm("_cmpd_1_lp1:");
117: 116 0001B44C _cmpd_1_lp1:
118: 117 0001B44C # asm("movl _sgl_value_1,r4"); /* move operand #1 to r4 */
119: 118 0001B44C 0d efffffff06 54 movl _sgl_value_1,r4
120: 119 0001B453 # asm("movl _sgl_value_2,r5"); /* move operand #1 to r5 */
121: 120 0001B453 0d effffffeff 55 movl _sgl_value_2,r5
122: 121 0001B45A # asm("movl _sgl_value_3,r6"); /* move operand #2 to r6 */
123: 122 0001B45A 0d effffffef8 56 movl _sgl_value_3,r6
124: 123 0001B461 # asm("movl _sgl_value_4,r7"); /* move operand #2 to r7 */
125: 124 0001B461 0d effffffef1 57 movl _sgl_value_4,r7
126: 125 0001B468 # asm("ldd r4"); /* load the operand */
127: 126 0001B468 07 54 ldd r4
128: 127 0001B46A # asm("tstl _sgl_dummy1"); /* generate initial status */
129: 128 0001B46A 5d effffffee8 tstl _sgl_dummy1
130: 129 0001B470 # asm("movpsl _init_psl"); /* save the initial status */
131: 130 0001B470 cd effffffee2 movpsl _init_psl
132: 131 0001B476 # asm("cmpd r6"); /* compare the operands */
133: 132 0001B476 37 56 cmpd r6
134: 133 0001B478 # asm("movpsl _psl_val"); /* save the final status */
135: 134 0001B478 cd effffffeda movpsl _psl_val
136: 135 0001B47E # if( force_loop ) /* loop? */
137: 136 0001B47E 5d effffffed4 tstl _force_loop
138: 137 0001B484 31 02 jeql L236
139: 138 0001B486 # asm("brb _cmpd_1_lp1");; /* run the loop again */
140: 139 0001B486 11 c4 brb _cmpd_1_lp1
141: 140 0001B488 L236:
142: 141 0001B488 # exp_psl = init_psl; /* get the initial PSL */
143: 142 0001B488 0d effffffeca effffffec5 movl _init_psl,_exp_psl
144: 143 0001B493 # exp_psl &= 0xfffffff3; /* clear ZERO, NEGATIVE */
145: 144 0001B493 ac 88f3 effffffebd andl2 $-13,_exp_psl
146: 145 0001B49B # if( sgl_expected == ZERO )
147: 146 0001B49B 1d effffffeb7 04 cmpl _sgl_expected,$4
148: 147 0001B4A2 21 07 jneq L237
149: 148 0001B4A4 # exp_psl |= PSL_Z; /* expect the ZERO bit set */
150: 149 0001B4A4 8c 04 effffffead orl2 $4,_exp_psl
151: 150 0001B4AB # if( sgl_expected == NEGATIVE )
152: 151 0001B4AB L237:
153: 152 0001B4AB 1d effffffea7 08 cmpl _sgl_expected,$8
154: 153 0001B4B2 21 07 jneq L238
155: 154 0001B4B4 # exp_psl |= PSL_N; /* expect the NEG bit set */
156: 155 0001B4B4 8c 08 effffffe9d orl2 $8,_exp_psl
157: 156 0001B4BB # if( psl_val != exp_psl ) { /* COMPARE the values */
158: 157 0001B4BB L238:
159: 158 0001B4BB 1d effffffe97 effffffe92 cmpl _psl_val,_exp_psl
160: 159 0001B4C6 21 03 13 00fe jeql L239
161: 160 0001B4CB # errcnt++; /* bump the error count */
162: 161 0001B4CB 6d effffffe87 incl _errcnt
163: 162 0001B4D1 # if ( prt_error ) {
164: 163 0001B4D1 5d effffffe81 tstl _prt_error
165: 164 0001B4D7 21 03 13 00ca jeql L240
166: 165 0001B4DC # writes(" \n"); /* start a new print line */
167: 166 0001B4DC .data 1
168: 167 00000a9e * L241:
169: 168 00000a9e * 200A00 .ascii " \12\0"
170: 169 00000aa1 * .text
171: 170 0001B4DC dd 8f00000a9e pushl $L241
172: 171 0001B4E2 fe 08 effffffe6f callf $8,_writes
173: 172 0001B4E9 # writes("cycle: ");
174: 173 0001B4E9 .data 1
175: 174 00000aa1 * L242:
176: 175 00000aa1 * 6379636C653A2000 .ascii "cycle: \0"
177: 176 00000aa9 * .text
178: 177 0001B4E9 dd 8f00000aa1 pushl $L242
179: 178 0001B4EF fe 08 effffffe62 callf $8,_writes
180: 179 0001B4F6 # writed( cycle );
181: 180 0001B4F6 dd effffffe5c pushl _cycle
182: 181 0001B4FC fe 08 effffffe55 callf $8,_writed
183: 182 0001B503 # writes(" CMPD test ");
184: 183 0001B503 .data 1
185: 184 00000aa9 * L244:
186: 185 00000aa9 * 2020434D50442074657374200 .ascii " CMPD test \0"
187: 0
188: 186 00000ab6 * .text
189: 187 0001B503 dd 8f00000aa9 pushl $L244
190: 188 0001B509 fe 08 effffffe48 callf $8,_writes
191: 189 0001B510 # writed( test_no );
192: 190 0001B510 dd effffffe42 pushl _test_no
193: 191 0001B516 fe 08 effffffe3b callf $8,_writed
194: 192 0001B51D # writes(", subtest 1 (Reg. Data) - BAD FINAL PSL\n");
195: 193 0001B51D .data 1
196: 194 00000ab6 * L245:
197: 195 00000ab6 * 2C20737562746573742031202 .ascii ", subtest 1 (Reg. Data) - BAD FINAL PSL\12\0"
198: 85265672E204461746129202D
199: 204241442046494E414C20505
200: 34C0A00
201: 196 00000adf * .text
202: 197 0001B51D dd 8f00000ab6 pushl $L245
203: 198 0001B523 fe 08 effffffe2e callf $8,_writes
204: 199 0001B52A # print_cmpd_data();
205: 200 0001B52A fe 04 ef00000731 callf $4,_print_cmpd_data
206: 201 0001B531 # writes(", index = ");
207: 202 0001B531 .data 1
208: 203 00000adf * L247:
209: 204 00000adf * 2C2020696E646578203D2000 .ascii ", index = \0"
210: 205 00000aeb * .text
211: 206 0001B531 dd 8f00000adf pushl $L247
212: 207 0001B537 fe 08 effffffe1a callf $8,_writes
213: 208 0001B53E # writed( index );
214: 209 0001B53E dd effffffe14 pushl _index
215: 210 0001B544 fe 08 effffffe0d callf $8,_writed
216: 211 0001B54B # writes("\ninitial PSL = ");
217: 212 0001B54B .data 1
218: 213 00000aeb * L248:
219: 214 00000aeb * 0A696E697469616C2050534C2 .ascii "\12initial PSL = \0"
220: 03D2000
221: 215 00000afb * .text
222: 216 0001B54B dd 8f00000aeb pushl $L248
223: 217 0001B551 fe 08 effffffe00 callf $8,_writes
224: 218 0001B558 # write32h( init_psl );
225: 219 0001B558 dd effffffdfa pushl _init_psl
226: 220 0001B55E fe 08 effffffdf3 callf $8,_write32h
227: 221 0001B565 # writes(", final PSL = ");
228: 222 0001B565 .data 1
229: 223 00000afb * L250:
230: 224 00000afb * 2C202066696E616C2050534C2 .ascii ", final PSL = \0"
231: 03D2000
232: 225 00000b0b * .text
233: 226 0001B565 dd 8f00000afb pushl $L250
234: 227 0001B56B fe 08 effffffde6 callf $8,_writes
235: 228 0001B572 # write32h( psl_val );
236: 229 0001B572 dd effffffde0 pushl _psl_val
237: 230 0001B578 fe 08 effffffdd9 callf $8,_write32h
238: 231 0001B57F # writes(", expected PSL = ");
239: 232 0001B57F .data 1
240: 233 00000b0b * L251:
241: 234 00000b0b * 2C20206578706563746564205 .ascii ", expected PSL = \0"
242: 0534C203D2000
243: 235 00000b1e * .text
244: 236 0001B57F dd 8f00000b0b pushl $L251
245: 237 0001B585 fe 08 effffffdcc callf $8,_writes
246: 238 0001B58C # write32h( exp_psl );
247: 239 0001B58C dd effffffdc6 pushl _exp_psl
248: 240 0001B592 fe 08 effffffdbf callf $8,_write32h
249: 241 0001B599 # writes("\n");
250: 242 0001B599 .data 1
251: 243 00000b1e * L252:
252: 244 00000b1e * 0A00 .ascii "\12\0"
253: 245 00000b20 * .text
254: 246 0001B599 dd 8f00000b1e pushl $L252
255: 247 0001B59F fe 08 effffffdb2 callf $8,_writes
256: 248 0001B5A6 # }
257: 249 0001B5A6 # if ( halt_flg )
258: 250 0001B5A6 L240:
259: 251 0001B5A6 5d effffffdac tstl _halt_flg
260: 252 0001B5AC 31 09 jeql L253
261: 253 0001B5AE # cmpd_er_halt( BAD_PSL_HLT );/* halt on the error */
262: 254 0001B5AE dd 03 pushl $3
263: 255 0001B5B0 fe 08 ef00000713 callf $8,_cmpd_er_halt
264: 256 0001B5B7 # if ( loop_on_err ) {
265: 257 0001B5B7 L253:
266: 258 0001B5B7 5d effffffd9b tstl _loop_on_err
267: 259 0001B5BD 31 0a jeql L255
268: 260 0001B5BF # force_loop = TRUE; /* set the force loop flag */
269: 261 0001B5BF 0d 01 effffffd92 movl $1,_force_loop
270: 262 0001B5C6 # asm("brw _cmpd_1_lp1"); /* and loop on the error */
271: 263 0001B5C6 13 fe83 brw _cmpd_1_lp1
272: 264 0001B5C9 # } /* end of loop on error */
273: 265 0001B5C9 # } /* end of compare error */
274: 266 0001B5C9 L255:
275: 267 0001B5C9 # } while( ++status_index < 3 ); /* end of WHILE loop */
276: 268 0001B5C9 L239:
277: 269 0001B5C9 L234:
278: 270 0001B5C9 6d effffffd89 incl _status_index
279: 271 0001B5CF 0d effffffd83 50 movl _status_index,r0
280: 272 0001B5D6 1d 50 03 cmpl r0,$3
281: 273 0001B5D9 81 03 13 fe5b jlss L235
282: 274 0001B5DE L233:
283: 275 0001B5DE # } while ( index++ < max_cmpd_1_index ); /* end of WHILE loop */
284: 276 0001B5DE L231:
285: 277 0001B5DE 0d effffffd74 50 movl _index,r0
286: 278 0001B5E5 6d effffffd6d incl _index
287: 279 0001B5EB 1d 50 effffffd66 cmpl r0,_max_cmpd_1_index
288: 280 0001B5F2 81 03 13 fdc1 jlss L232
289: 281 0001B5F7 L230:
290: 282 0001B5F7 # } /* end of subtest 1 */
291: 283 0001B5F7 40 ret#2
292: 284 0001B5F8 .set L226,0x0
293: 285 0001B5F8 L228:
294: 286 0001B5F8 13 fdaa jbr L229
295: 287 0001B5FB .data
296: 288 00000a98 * .text
297: 289 0001B5FB 00 .align 1
298: 290 0001B5FC .globl _cmpd_2
299: 291 0001B5FC _cmpd_2:
300: 292 0001B5FC 0000 .word L256
301: 293 0001B5FE #
302: 294 0001B5FE #
303: 295 0001B5FE #
304: 296 0001B5FE # /****************************************************************************
305: 297 0001B5FE # *
306: 298 0001B5FE # * SUBTEST 2 - CMPD status test -cache data
307: 299 0001B5FE # *
308: 300 0001B5FE # ****************************************************************************/
309: 301 0001B5FE # cmpd_2()
310: 302 0001B5FE # {
311: 303 0001B5FE 13 0213 jbr L258
312: 304 0001B601 L259:
313: 305 0001B601 # force_loop = FALSE;
314: 306 0001B601 4d effffffd51 clrl _force_loop
315: 307 0001B607 # subtest = 2;
316: 308 0001B607 0d 02 effffffd4a movl $2,_subtest
317: 309 0001B60E # index = 0;
318: 310 0001B60E 4d effffffd44 clrl _index
319: 311 0001B614 # do
320: 312 0001B614 L262:
321: 313 0001B614 # {
322: 314 0001B614 # dbl_value_1 = cmpd_1_data[index].one; /* get the data operands */
323: 315 0001B614 5c 14 effffffd3d 50 mull3 $20,_index,r0
324: 316 0001B61C 0c 8f00000000 50 addl2 $_cmpd_1_data,r0
325: 317 0001B623 0d a004 effffffd31 movl 4(r0),_dbl_value_1+4
326: 318 0001B62B 0d 60 effffffd26 movl (r0),_dbl_value_1
327: 319 0001B632 # dbl_value_2 = cmpd_1_data[index].two;
328: 320 0001B632 5c 14 effffffd1f 50 mull3 $20,_index,r0
329: 321 0001B63A 0c 8f00000008 50 addl2 $_cmpd_1_data+8,r0
330: 322 0001B641 0d a004 effffffd13 movl 4(r0),_dbl_value_2+4
331: 323 0001B649 0d 60 effffffd08 movl (r0),_dbl_value_2
332: 324 0001B650 # sgl_expected = cmpd_1_data[index].flag;/* get expected results */
333: 325 0001B650 5c 14 effffffd01 50 mull3 $20,_index,r0
334: 326 0001B658 0d e000000010 effffffcf5 movl _cmpd_1_data+16(r0),_sgl_expected
335: 327 0001B663 # status_index = 0; /* clear the status index */
336: 328 0001B663 4d effffffcef clrl _status_index
337: 329 0001B669 # do
338: 330 0001B669 L265:
339: 331 0001B669 # {
340: 332 0001B669 # sgl_dummy1 = status_array[status_index]; /* array = +, -, 0 */
341: 333 0001B669 0d effffffce9 50 movl _status_index,r0
342: 334 0001B670 0d 40effffffce1 movl _status_array[r0],_sgl_dummy1
343: effffffcdc
344: 335 0001B67C # /*
345: 336 0001B67C # * If LOOP ON ERROR is set, this is the loop for this subtest.
346: 337 0001B67C # * The force loop flag is set after the first error.
347: 338 0001B67C # */
348: 339 0001B67C # asm("_cmpd_2_lp1:");
349: 340 0001B67C _cmpd_2_lp1:
350: 341 0001B67C # asm("ldd _dbl_value_1"); /* load the 1st operand */
351: 342 0001B67C 07 effffffcd6 ldd _dbl_value_1
352: 343 0001B682 # asm("tstl _sgl_dummy1"); /* generate initial status */
353: 344 0001B682 5d effffffcd0 tstl _sgl_dummy1
354: 345 0001B688 # asm("movpsl _init_psl"); /* save the initial status */
355: 346 0001B688 cd effffffcca movpsl _init_psl
356: 347 0001B68E # asm("cmpd _dbl_value_2"); /* compare the operands */
357: 348 0001B68E 37 effffffcc4 cmpd _dbl_value_2
358: 349 0001B694 # asm("movpsl _psl_val"); /* save the final status */
359: 350 0001B694 cd effffffcbe movpsl _psl_val
360: 351 0001B69A # if( force_loop ) /* loop? */
361: 352 0001B69A 5d effffffcb8 tstl _force_loop
362: 353 0001B6A0 31 02 jeql L266
363: 354 0001B6A2 # asm("brb _cmpd_2_lp1");; /* run the loop again */
364: 355 0001B6A2 11 d8 brb _cmpd_2_lp1
365: 356 0001B6A4 L266:
366: 357 0001B6A4 # exp_psl = init_psl; /* get the initial PSL */
367: 358 0001B6A4 0d effffffcae effffffca9 movl _init_psl,_exp_psl
368: 359 0001B6AF # exp_psl &= 0xfffffff3; /* clear ZERO, NEGATIVE */
369: 360 0001B6AF ac 88f3 effffffca1 andl2 $-13,_exp_psl
370: 361 0001B6B7 # if( sgl_expected == ZERO )
371: 362 0001B6B7 1d effffffc9b 04 cmpl _sgl_expected,$4
372: 363 0001B6BE 21 07 jneq L267
373: 364 0001B6C0 # exp_psl |= PSL_Z; /* expect the ZERO bit set */
374: 365 0001B6C0 8c 04 effffffc91 orl2 $4,_exp_psl
375: 366 0001B6C7 # if( sgl_expected == NEGATIVE )
376: 367 0001B6C7 L267:
377: 368 0001B6C7 1d effffffc8b 08 cmpl _sgl_expected,$8
378: 369 0001B6CE 21 07 jneq L268
379: 370 0001B6D0 # exp_psl |= PSL_N; /* expect the NEG bit set */
380: 371 0001B6D0 8c 08 effffffc81 orl2 $8,_exp_psl
381: 372 0001B6D7 # if( psl_val != exp_psl ) { /* COMPARE the values */
382: 373 0001B6D7 L268:
383: 374 0001B6D7 1d effffffc7b effffffc76 cmpl _psl_val,_exp_psl
384: 375 0001B6E2 21 03 13 00fe jeql L269
385: 376 0001B6E7 # errcnt++; /* bump the error count */
386: 377 0001B6E7 6d effffffc6b incl _errcnt
387: 378 0001B6ED # if ( prt_error ) {
388: 379 0001B6ED 5d effffffc65 tstl _prt_error
389: 380 0001B6F3 21 03 13 00ca jeql L270
390: 381 0001B6F8 # writes(" \n"); /* start a new print line */
391: 382 0001B6F8 .data 1
392: 383 00000b20 * L271:
393: 384 00000b20 * 200A00 .ascii " \12\0"
394: 385 00000b23 * .text
395: 386 0001B6F8 dd 8f00000b20 pushl $L271
396: 387 0001B6FE fe 08 effffffc53 callf $8,_writes
397: 388 0001B705 # writes("cycle: ");
398: 389 0001B705 .data 1
399: 390 00000b23 * L272:
400: 391 00000b23 * 6379636C653A2000 .ascii "cycle: \0"
401: 392 00000b2b * .text
402: 393 0001B705 dd 8f00000b23 pushl $L272
403: 394 0001B70B fe 08 effffffc46 callf $8,_writes
404: 395 0001B712 # writed( cycle );
405: 396 0001B712 dd effffffc40 pushl _cycle
406: 397 0001B718 fe 08 effffffc39 callf $8,_writed
407: 398 0001B71F # writes(" CMPD test ");
408: 399 0001B71F .data 1
409: 400 00000b2b * L273:
410: 401 00000b2b * 2020434D50442074657374200 .ascii " CMPD test \0"
411: 0
412: 402 00000b38 * .text
413: 403 0001B71F dd 8f00000b2b pushl $L273
414: 404 0001B725 fe 08 effffffc2c callf $8,_writes
415: 405 0001B72C # writed( test_no );
416: 406 0001B72C dd effffffc26 pushl _test_no
417: 407 0001B732 fe 08 effffffc1f callf $8,_writed
418: 408 0001B739 # writes(", subtest 2 (Cache Data) - BAD FINAL PSL\n");
419: 409 0001B739 .data 1
420: 410 00000b38 * L274:
421: 411 00000b38 * 2C20737562746573742032202 .ascii ", subtest 2 (Cache Data) - BAD FINAL PSL\12\0"
422: 8436163686520446174612920
423: 2D204241442046494E414C205
424: 0534C0A00
425: 412 00000b62 * .text
426: 413 0001B739 dd 8f00000b38 pushl $L274
427: 414 0001B73F fe 08 effffffc12 callf $8,_writes
428: 415 0001B746 # print_cmpd_data();
429: 416 0001B746 fe 04 ef00000515 callf $4,_print_cmpd_data
430: 417 0001B74D # writes(", index = ");
431: 418 0001B74D .data 1
432: 419 00000b62 * L275:
433: 420 00000b62 * 2C2020696E646578203D2000 .ascii ", index = \0"
434: 421 00000b6e * .text
435: 422 0001B74D dd 8f00000b62 pushl $L275
436: 423 0001B753 fe 08 effffffbfe callf $8,_writes
437: 424 0001B75A # writed( index );
438: 425 0001B75A dd effffffbf8 pushl _index
439: 426 0001B760 fe 08 effffffbf1 callf $8,_writed
440: 427 0001B767 # writes("\ninitial PSL = ");
441: 428 0001B767 .data 1
442: 429 00000b6e * L276:
443: 430 00000b6e * 0A696E697469616C2050534C2 .ascii "\12initial PSL = \0"
444: 03D2000
445: 431 00000b7e * .text
446: 432 0001B767 dd 8f00000b6e pushl $L276
447: 433 0001B76D fe 08 effffffbe4 callf $8,_writes
448: 434 0001B774 # write32h( init_psl );
449: 435 0001B774 dd effffffbde pushl _init_psl
450: 436 0001B77A fe 08 effffffbd7 callf $8,_write32h
451: 437 0001B781 # writes(", final PSL = ");
452: 438 0001B781 .data 1
453: 439 00000b7e * L277:
454: 440 00000b7e * 2C202066696E616C2050534C2 .ascii ", final PSL = \0"
455: 03D2000
456: 441 00000b8e * .text
457: 442 0001B781 dd 8f00000b7e pushl $L277
458: 443 0001B787 fe 08 effffffbca callf $8,_writes
459: 444 0001B78E # write32h( psl_val );
460: 445 0001B78E dd effffffbc4 pushl _psl_val
461: 446 0001B794 fe 08 effffffbbd callf $8,_write32h
462: 447 0001B79B # writes(", expected PSL = ");
463: 448 0001B79B .data 1
464: 449 00000b8e * L278:
465: 450 00000b8e * 2C20206578706563746564205 .ascii ", expected PSL = \0"
466: 0534C203D2000
467: 451 00000ba1 * .text
468: 452 0001B79B dd 8f00000b8e pushl $L278
469: 453 0001B7A1 fe 08 effffffbb0 callf $8,_writes
470: 454 0001B7A8 # write32h( exp_psl );
471: 455 0001B7A8 dd effffffbaa pushl _exp_psl
472: 456 0001B7AE fe 08 effffffba3 callf $8,_write32h
473: 457 0001B7B5 # writes("\n");
474: 458 0001B7B5 .data 1
475: 459 00000ba1 * L279:
476: 460 00000ba1 * 0A00 .ascii "\12\0"
477: 461 00000ba3 * .text
478: 462 0001B7B5 dd 8f00000ba1 pushl $L279
479: 463 0001B7BB fe 08 effffffb96 callf $8,_writes
480: 464 0001B7C2 # }
481: 465 0001B7C2 # if ( halt_flg )
482: 466 0001B7C2 L270:
483: 467 0001B7C2 5d effffffb90 tstl _halt_flg
484: 468 0001B7C8 31 09 jeql L280
485: 469 0001B7CA # cmpd_er_halt( BAD_PSL_HLT ); /* halt on the error */
486: 470 0001B7CA dd 03 pushl $3
487: 471 0001B7CC fe 08 ef000004f7 callf $8,_cmpd_er_halt
488: 472 0001B7D3 # if ( loop_on_err ) {
489: 473 0001B7D3 L280:
490: 474 0001B7D3 5d effffffb7f tstl _loop_on_err
491: 475 0001B7D9 31 0a jeql L281
492: 476 0001B7DB # force_loop = TRUE; /* set the force loop flag */
493: 477 0001B7DB 0d 01 effffffb76 movl $1,_force_loop
494: 478 0001B7E2 # asm("brw _cmpd_2_lp1"); /* and loop on the error */
495: 479 0001B7E2 13 fe97 brw _cmpd_2_lp1
496: 480 0001B7E5 # } /* end of loop on error */
497: 481 0001B7E5 # } /* end of compare error */
498: 482 0001B7E5 L281:
499: 483 0001B7E5 # } while( ++status_index < 3 ); /* end of WHILE loop */
500: 484 0001B7E5 L269:
501: 485 0001B7E5 L264:
502: 486 0001B7E5 6d effffffb6d incl _status_index
503: 487 0001B7EB 0d effffffb67 50 movl _status_index,r0
504: 488 0001B7F2 1d 50 03 cmpl r0,$3
505: 489 0001B7F5 81 03 13 fe6f jlss L265
506: 490 0001B7FA L263:
507: 491 0001B7FA # } while ( index++ < max_cmpd_1_index ); /* end of WHILE loop */
508: 492 0001B7FA L261:
509: 493 0001B7FA 0d effffffb58 50 movl _index,r0
510: 494 0001B801 6d effffffb51 incl _index
511: 495 0001B807 1d 50 effffffb4a cmpl r0,_max_cmpd_1_index
512: 496 0001B80E 81 03 13 fe01 jlss L262
513: 497 0001B813 L260:
514: 498 0001B813 # } /* end of subtest 2 */
515: 499 0001B813 40 ret#2
516: 500 0001B814 .set L256,0x0
517: 501 0001B814 L258:
518: 502 0001B814 13 fdea jbr L259
519: 503 0001B817 .data
520: 504 00000a98 * .text
521: 505 0001B817 00 .align 1
522: 506 0001B818 .globl _cmpd_3
523: 507 0001B818 _cmpd_3:
524: 508 0001B818 0000 .word L282
525: 509 0001B81A #
526: 510 0001B81A #
527: 511 0001B81A #
528: 512 0001B81A # /************************************************************************
529: 513 0001B81A # *
530: 514 0001B81A # * SUBTEST 3 - Check for register corruption
531: 515 0001B81A # *
532: 516 0001B81A # ************************************************************************/
533: 517 0001B81A # cmpd_3()
534: 518 0001B81A # {
535: 519 0001B81A 13 0200 jbr L284
536: 520 0001B81D L285:
537: 521 0001B81D # force_loop = FALSE; /* clear force_loop flg */
538: 522 0001B81D 4d effffffb35 clrl _force_loop
539: 523 0001B823 # subtest = 3;
540: 524 0001B823 0d 03 effffffb2e movl $3,_subtest
541: 525 0001B82A # fill_reg_buf( load_regs ); /* get pattern for regs */
542: 526 0001B82A dd 8f00000000 pushl $_load_regs
543: 527 0001B830 fe 08 effffffb21 callf $8,_fill_reg_buf
544: 528 0001B837 # index = 0;
545: 529 0001B837 4d effffffb1b clrl _index
546: 530 0001B83D # do
547: 531 0001B83D L289:
548: 532 0001B83D # {
549: 533 0001B83D # dbl_value_1 = cmpd_1_data[index].one; /* data to load */
550: 534 0001B83D 5c 14 effffffb14 50 mull3 $20,_index,r0
551: 535 0001B845 0c 8f00000000 50 addl2 $_cmpd_1_data,r0
552: 536 0001B84C 0d a004 effffffb08 movl 4(r0),_dbl_value_1+4
553: 537 0001B854 0d 60 effffffafd movl (r0),_dbl_value_1
554: 538 0001B85B # dbl_value_2 = cmpd_1_data[index].two; /* data to compare */
555: 539 0001B85B 5c 14 effffffaf6 50 mull3 $20,_index,r0
556: 540 0001B863 0c 8f00000008 50 addl2 $_cmpd_1_data+8,r0
557: 541 0001B86A 0d a004 effffffaea movl 4(r0),_dbl_value_2+4
558: 542 0001B872 0d 60 effffffadf movl (r0),_dbl_value_2
559: 543 0001B879 # dbl_expected = cmpd_1_data[index].one; /* expected result */
560: 544 0001B879 5c 14 effffffad8 50 mull3 $20,_index,r0
561: 545 0001B881 0c 8f00000000 50 addl2 $_cmpd_1_data,r0
562: 546 0001B888 0d a004 effffffacc movl 4(r0),_dbl_expected+4
563: 547 0001B890 0d 60 effffffac1 movl (r0),_dbl_expected
564: 548 0001B897 # /*
565: 549 0001B897 # * If LOOP ON ERROR is set, this is the loop for this subtest.
566: 550 0001B897 # * The force loop flag is set after the first error.
567: 551 0001B897 # */
568: 552 0001B897 # asm("_cmpd_3_lp1:");
569: 553 0001B897 _cmpd_3_lp1:
570: 554 0001B897 # asm("ldd _dbl_value_1"); /* LOAD the accumulator */
571: 555 0001B897 07 effffffabb ldd _dbl_value_1
572: 556 0001B89D # asm("nop");
573: 557 0001B89D 10 nop
574: 558 0001B89E # asm("loadr $0x1fff,_load_regs"); /* load regs 0 - 12 */
575: 559 0001B89E ab 891fff effffffab1 loadr $0x1fff,_load_regs
576: 560 0001B8A7 # asm("nop");
577: 561 0001B8A7 10 nop
578: 562 0001B8A8 # asm("cmpd _dbl_value_2"); /* test the values */
579: 563 0001B8A8 37 effffffaaa cmpd _dbl_value_2
580: 564 0001B8AE # asm("nop");
581: 565 0001B8AE 10 nop
582: 566 0001B8AF # asm("storer $0x1fff,_store_regs"); /* store regs 0 - 12 */
583: 567 0001B8AF bb 891fff effffffaa0 storer $0x1fff,_store_regs
584: 568 0001B8B8 # if( force_loop ) /* loop? */
585: 569 0001B8B8 5d effffffa9a tstl _force_loop
586: 570 0001B8BE 31 02 jeql L290
587: 571 0001B8C0 # asm("brb _cmpd_3_lp1");; /* run the loop again */
588: 572 0001B8C0 11 d5 brb _cmpd_3_lp1
589: 573 0001B8C2 L290:
590: 574 0001B8C2 # /*
591: 575 0001B8C2 # * Now compare the stored register values to those that were loaded
592: 576 0001B8C2 # */
593: 577 0001B8C2 # index2 = 0;
594: 578 0001B8C2 4d effffffa90 clrl _index2
595: 579 0001B8C8 # while( (load_regs[index2] == store_regs[index2]) && (index2 < 13) )
596: 580 0001B8C8 L291:
597: 581 0001B8C8 0d effffffa8a 50 movl _index2,r0
598: 582 0001B8CF 0d effffffa83 51 movl _index2,r1
599: 583 0001B8D6 1d 40effffffa7b cmpl _load_regs[r0],_store_regs[r1]
600: 41effffffa75
601: 584 0001B8E3 21 11 jneq L292
602: 585 0001B8E5 1d effffffa6d 0d cmpl _index2,$13
603: 586 0001B8EC 81 08 jgeq L292
604: 587 0001B8EE # index2++; /* check reg values */
605: 588 0001B8EE 6d effffffa64 incl _index2
606: 589 0001B8F4 11 d2 jbr L291
607: 590 0001B8F6 L292:
608: 591 0001B8F6 # if( index2 < 13 ) { /* error if index2 < 13 */
609: 592 0001B8F6 1d effffffa5c 0d cmpl _index2,$13
610: 593 0001B8FD 91 03 13 0101 jgeq L293
611: 594 0001B902 # errcnt++; /* bump the error count */
612: 595 0001B902 6d effffffa50 incl _errcnt
613: 596 0001B908 # if ( prt_error ) {
614: 597 0001B908 5d effffffa4a tstl _prt_error
615: 598 0001B90E 21 03 13 00cd jeql L294
616: 599 0001B913 # writes(" \n"); /* start a new print line */
617: 600 0001B913 .data 1
618: 601 00000ba3 * L295:
619: 602 00000ba3 * 200A00 .ascii " \12\0"
620: 603 00000ba6 * .text
621: 604 0001B913 dd 8f00000ba3 pushl $L295
622: 605 0001B919 fe 08 effffffa38 callf $8,_writes
623: 606 0001B920 # writes("cycle: ");
624: 607 0001B920 .data 1
625: 608 00000ba6 * L296:
626: 609 00000ba6 * 6379636C653A2000 .ascii "cycle: \0"
627: 610 00000bae * .text
628: 611 0001B920 dd 8f00000ba6 pushl $L296
629: 612 0001B926 fe 08 effffffa2b callf $8,_writes
630: 613 0001B92D # writed( cycle );
631: 614 0001B92D dd effffffa25 pushl _cycle
632: 615 0001B933 fe 08 effffffa1e callf $8,_writed
633: 616 0001B93A # writes(", CMPD test ");
634: 617 0001B93A .data 1
635: 618 00000bae * L297:
636: 619 00000bae * 2C20434D50442074657374200 .ascii ", CMPD test \0"
637: 0
638: 620 00000bbb * .text
639: 621 0001B93A dd 8f00000bae pushl $L297
640: 622 0001B940 fe 08 effffffa11 callf $8,_writes
641: 623 0001B947 # writed( test_no );
642: 624 0001B947 dd effffffa0b pushl _test_no
643: 625 0001B94D fe 08 effffffa04 callf $8,_writed
644: 626 0001B954 # writes(", subtest 3 - A REGISTER WAS MODIFIED\n");
645: 627 0001B954 .data 1
646: 628 00000bbb * L298:
647: 629 00000bbb * 2C20737562746573742033202 .ascii ", subtest 3 - A REGISTER WAS MODIFIED\12\0"
648: D204120524547495354455220
649: 574153204D4F4449464945440
650: A00
651: 630 00000be2 * .text
652: 631 0001B954 dd 8f00000bbb pushl $L298
653: 632 0001B95A fe 08 effffff9f7 callf $8,_writes
654: 633 0001B961 # print_cmpd_data(); /* print the operands */
655: 634 0001B961 fe 04 ef000002fa callf $4,_print_cmpd_data
656: 635 0001B968 # writes("\n");
657: 636 0001B968 .data 1
658: 637 00000be2 * L299:
659: 638 00000be2 * 0A00 .ascii "\12\0"
660: 639 00000be4 * .text
661: 640 0001B968 dd 8f00000be2 pushl $L299
662: 641 0001B96E fe 08 effffff9e3 callf $8,_writes
663: 642 0001B975 # writes("register "); /* print the information */
664: 643 0001B975 .data 1
665: 644 00000be4 * L300:
666: 645 00000be4 * 72656769737465722000 .ascii "register \0"
667: 646 00000bee * .text
668: 647 0001B975 dd 8f00000be4 pushl $L300
669: 648 0001B97B fe 08 effffff9d6 callf $8,_writes
670: 649 0001B982 # writed( index2 ); /* about the corrupted */
671: 650 0001B982 dd effffff9d0 pushl _index2
672: 651 0001B988 fe 08 effffff9c9 callf $8,_writed
673: 652 0001B98F # writes(" = "); /* register */
674: 653 0001B98F .data 1
675: 654 00000bee * L301:
676: 655 00000bee * 203D2000 .ascii " = \0"
677: 656 00000bf2 * .text
678: 657 0001B98F dd 8f00000bee pushl $L301
679: 658 0001B995 fe 08 effffff9bc callf $8,_writes
680: 659 0001B99C # write32h( store_regs[index2] );
681: 660 0001B99C 0d effffff9b6 50 movl _index2,r0
682: 661 0001B9A3 dd 40effffff9ae pushl _store_regs[r0]
683: 662 0001B9AA fe 08 effffff9a7 callf $8,_write32h
684: 663 0001B9B1 # writes(", should be = ");
685: 664 0001B9B1 .data 1
686: 665 00000bf2 * L302:
687: 666 00000bf2 * 2C202073686F756C642062652 .ascii ", should be = \0"
688: 03D2000
689: 667 00000c02 * .text
690: 668 0001B9B1 dd 8f00000bf2 pushl $L302
691: 669 0001B9B7 fe 08 effffff99a callf $8,_writes
692: 670 0001B9BE # write32h( load_regs[index2] );
693: 671 0001B9BE 0d effffff994 50 movl _index2,r0
694: 672 0001B9C5 dd 40effffff98c pushl _load_regs[r0]
695: 673 0001B9CC fe 08 effffff985 callf $8,_write32h
696: 674 0001B9D3 # writes("\n");
697: 675 0001B9D3 .data 1
698: 676 00000c02 * L303:
699: 677 00000c02 * 0A00 .ascii "\12\0"
700: 678 00000c04 * .text
701: 679 0001B9D3 dd 8f00000c02 pushl $L303
702: 680 0001B9D9 fe 08 effffff978 callf $8,_writes
703: 681 0001B9E0 # }
704: 682 0001B9E0 # if ( halt_flg ) /* halt on error? */
705: 683 0001B9E0 L294:
706: 684 0001B9E0 5d effffff972 tstl _halt_flg
707: 685 0001B9E6 31 09 jeql L304
708: 686 0001B9E8 # cmpd_er_halt( BAD_REG_HLT ); /* PC after halt */
709: 687 0001B9E8 dd 02 pushl $2
710: 688 0001B9EA fe 08 ef000002d9 callf $8,_cmpd_er_halt
711: 689 0001B9F1 # if ( loop_on_err ) {
712: 690 0001B9F1 L304:
713: 691 0001B9F1 5d effffff961 tstl _loop_on_err
714: 692 0001B9F7 31 0a jeql L305
715: 693 0001B9F9 # force_loop = TRUE; /* set force loop flag */
716: 694 0001B9F9 0d 01 effffff958 movl $1,_force_loop
717: 695 0001BA00 # asm("brw _cmpd_3_lp1"); /* and loop on error */
718: 696 0001BA00 13 fe94 brw _cmpd_3_lp1
719: 697 0001BA03 # } /* end of loop on error */
720: 698 0001BA03 # } /* end of register corruption error */
721: 699 0001BA03 L305:
722: 700 0001BA03 # } while ( index++ < max_cmpd_1_index ); /* end of WHILE loop */
723: 701 0001BA03 L293:
724: 702 0001BA03 L288:
725: 703 0001BA03 0d effffff94f 50 movl _index,r0
726: 704 0001BA0A 6d effffff948 incl _index
727: 705 0001BA10 1d 50 effffff941 cmpl r0,_max_cmpd_1_index
728: 706 0001BA17 81 03 13 fe21 jlss L289
729: 707 0001BA1C L287:
730: 708 0001BA1C # } /* end of subtest 3 */
731: 709 0001BA1C 40 ret#2
732: 710 0001BA1D .set L282,0x0
733: 711 0001BA1D L284:
734: 712 0001BA1D 13 fdfd jbr L285
735: 713 0001BA20 .data
736: 714 00000a98 * .text
737: 715 0001BA20 .align 1
738: 716 0001BA20 .globl _cmpd_4
739: 717 0001BA20 _cmpd_4:
740: 718 0001BA20 0000 .word L306
741: 719 0001BA22 #
742: 720 0001BA22 #
743: 721 0001BA22 #
744: 722 0001BA22 # /************************************************************************
745: 723 0001BA22 # *
746: 724 0001BA22 # * SUBTEST 4 - Check for accumulator corruption
747: 725 0001BA22 # *
748: 726 0001BA22 # ************************************************************************/
749: 727 0001BA22 # cmpd_4()
750: 728 0001BA22 # {
751: 729 0001BA22 13 023a jbr L308
752: 730 0001BA25 L309:
753: 731 0001BA25 # force_loop = FALSE; /* clear force_loop flg */
754: 732 0001BA25 4d effffff92d clrl _force_loop
755: 733 0001BA2B # index = 0;
756: 734 0001BA2B 4d effffff927 clrl _index
757: 735 0001BA31 # do
758: 736 0001BA31 L312:
759: 737 0001BA31 # {
760: 738 0001BA31 # dbl_value_1 = cmpd_1_data[index].one; /* data to load */
761: 739 0001BA31 5c 14 effffff920 50 mull3 $20,_index,r0
762: 740 0001BA39 0c 8f00000000 50 addl2 $_cmpd_1_data,r0
763: 741 0001BA40 0d a004 effffff914 movl 4(r0),_dbl_value_1+4
764: 742 0001BA48 0d 60 effffff909 movl (r0),_dbl_value_1
765: 743 0001BA4F # dbl_value_2 = cmpd_1_data[index].two;
766: 744 0001BA4F 5c 14 effffff902 50 mull3 $20,_index,r0
767: 745 0001BA57 0c 8f00000008 50 addl2 $_cmpd_1_data+8,r0
768: 746 0001BA5E 0d a004 effffff8f6 movl 4(r0),_dbl_value_2+4
769: 747 0001BA66 0d 60 effffff8eb movl (r0),_dbl_value_2
770: 748 0001BA6D # dbl_expected = cmpd_1_data[index].one; /* expected result */
771: 749 0001BA6D 5c 14 effffff8e4 50 mull3 $20,_index,r0
772: 750 0001BA75 0c 8f00000000 50 addl2 $_cmpd_1_data,r0
773: 751 0001BA7C 0d a004 effffff8d8 movl 4(r0),_dbl_expected+4
774: 752 0001BA84 0d 60 effffff8cd movl (r0),_dbl_expected
775: 753 0001BA8B # if( !(dbl_value_1.m & 0x7f800000) ) { /* */
776: 754 0001BA8B 3d 8f7f800000 effffff8c2 bitl $2139095040,_dbl_value_1
777: 755 0001BA96 21 0c jneq L313
778: 756 0001BA98 # dbl_expected.m = 0; /* */
779: 757 0001BA98 4d effffff8ba clrl _dbl_expected
780: 758 0001BA9E # dbl_expected.l = 0; /* ignore bad 0's */
781: 759 0001BA9E 4d effffff8b8 clrl _dbl_expected+4
782: 760 0001BAA4 # } /* */
783: 761 0001BAA4 # sgl_value_1 = dbl_value_1.m;
784: 762 0001BAA4 L313:
785: 763 0001BAA4 0d effffff8ae effffff8a9 movl _dbl_value_1,_sgl_value_1
786: 764 0001BAAF # sgl_value_2 = dbl_value_1.l;
787: 765 0001BAAF 0d effffff8a7 effffff89e movl _dbl_value_1+4,_sgl_value_2
788: 766 0001BABA # sgl_value_3 = dbl_value_2.m;
789: 767 0001BABA 0d effffff898 effffff893 movl _dbl_value_2,_sgl_value_3
790: 768 0001BAC5 # sgl_value_4 = dbl_value_2.l;
791: 769 0001BAC5 0d effffff891 effffff888 movl _dbl_value_2+4,_sgl_value_4
792: 770 0001BAD0 # /*
793: 771 0001BAD0 # * If LOOP ON ERROR is set, this is the loop for this subtest.
794: 772 0001BAD0 # * The force loop flag is set after the first error.
795: 773 0001BAD0 # */
796: 774 0001BAD0 # asm("_cmpd_4_lp1:");
797: 775 0001BAD0 _cmpd_4_lp1:
798: 776 0001BAD0 # asm("movl _sgl_value_1,r4"); /* r4 = operand #1's MSW */
799: 777 0001BAD0 0d effffff882 54 movl _sgl_value_1,r4
800: 778 0001BAD7 # asm("movl _sgl_value_2,r5"); /* r5 = operand #1's LSW */
801: 779 0001BAD7 0d effffff87b 55 movl _sgl_value_2,r5
802: 780 0001BADE # asm("movl _sgl_value_3,r6"); /* r6 = operand #2's MSW */
803: 781 0001BADE 0d effffff874 56 movl _sgl_value_3,r6
804: 782 0001BAE5 # asm("movl _sgl_value_4,r7"); /* r7 = operand #2's LSW */
805: 783 0001BAE5 0d effffff86d 57 movl _sgl_value_4,r7
806: 784 0001BAEC # asm("ldd r4"); /* store the accumulator */
807: 785 0001BAEC 07 54 ldd r4
808: 786 0001BAEE # asm("cmpd r6"); /* test the values */
809: 787 0001BAEE 37 56 cmpd r6
810: 788 0001BAF0 # asm("std r8"); /* store the accumulator */
811: 789 0001BAF0 27 58 std r8
812: 790 0001BAF2 # if( force_loop ) /* loop? */
813: 791 0001BAF2 5d effffff860 tstl _force_loop
814: 792 0001BAF8 31 02 jeql L314
815: 793 0001BAFA # asm("brb _cmpd_4_lp1");; /* run the loop again */
816: 794 0001BAFA 11 d4 brb _cmpd_4_lp1
817: 795 0001BAFC L314:
818: 796 0001BAFC # asm("movl r8,_sgl_value_5"); /* move results to cache */
819: 797 0001BAFC 0d 58 effffff855 movl r8,_sgl_value_5
820: 798 0001BB03 # asm("movl r9,_sgl_value_6");
821: 799 0001BB03 0d 59 effffff84e movl r9,_sgl_value_6
822: 800 0001BB0A # if ( (sgl_value_5 != dbl_expected.m) || /* COMPARE the values */
823: 801 0001BB0A # (sgl_value_6 != dbl_expected.l) ){
824: 802 0001BB0A 1d effffff848 effffff843 cmpl _sgl_value_5,_dbl_expected
825: 803 0001BB15 21 10 jneq L9999
826: 804 0001BB17 1d effffff83b effffff83a cmpl _sgl_value_6,_dbl_expected+4
827: 805 0001BB22 21 03 13 011e jeql L315
828: 806 0001BB27 L9999:
829: 807 0001BB27 # errcnt++; /* bump the error count */
830: 808 0001BB27 6d effffff82b incl _errcnt
831: 809 0001BB2D # if ( prt_error ) {
832: 810 0001BB2D 5d effffff825 tstl _prt_error
833: 811 0001BB33 21 03 13 00ea jeql L316
834: 812 0001BB38 # writes(" \n"); /* start a new print line */
835: 813 0001BB38 .data 1
836: 814 00000c04 * L317:
837: 815 00000c04 * 200A00 .ascii " \12\0"
838: 816 00000c07 * .text
839: 817 0001BB38 dd 8f00000c04 pushl $L317
840: 818 0001BB3E fe 08 effffff813 callf $8,_writes
841: 819 0001BB45 # writes("cycle: ");
842: 820 0001BB45 .data 1
843: 821 00000c07 * L318:
844: 822 00000c07 * 6379636C653A2000 .ascii "cycle: \0"
845: 823 00000c0f * .text
846: 824 0001BB45 dd 8f00000c07 pushl $L318
847: 825 0001BB4B fe 08 effffff806 callf $8,_writes
848: 826 0001BB52 # writed( cycle );
849: 827 0001BB52 dd effffff800 pushl _cycle
850: 828 0001BB58 fe 08 effffff7f9 callf $8,_writed
851: 829 0001BB5F # writes(", CMPD test ");
852: 830 0001BB5F .data 1
853: 831 00000c0f * L319:
854: 832 00000c0f * 2C20434D50442074657374200 .ascii ", CMPD test \0"
855: 0
856: 833 00000c1c * .text
857: 834 0001BB5F dd 8f00000c0f pushl $L319
858: 835 0001BB65 fe 08 effffff7ec callf $8,_writes
859: 836 0001BB6C # writed( test_no );
860: 837 0001BB6C dd effffff7e6 pushl _test_no
861: 838 0001BB72 fe 08 effffff7df callf $8,_writed
862: 839 0001BB79 # writes(", subtest 4 - THE ACC WAS MODIFIED\n");
863: 840 0001BB79 .data 1
864: 841 00000c1c * L320:
865: 842 00000c1c * 2C20737562746573742034202 .ascii ", subtest 4 - THE ACC WAS MODIFIED\12\0"
866: D205448452041434320574153
867: 204D4F4449464945440A00
868: 843 00000c40 * .text
869: 844 0001BB79 dd 8f00000c1c pushl $L320
870: 845 0001BB7F fe 08 effffff7d2 callf $8,_writes
871: 846 0001BB86 # print_cmpd_data();
872: 847 0001BB86 fe 04 ef000000d5 callf $4,_print_cmpd_data
873: 848 0001BB8D # writes(", index = ");
874: 849 0001BB8D .data 1
875: 850 00000c40 * L321:
876: 851 00000c40 * 2C2020696E646578203D2000 .ascii ", index = \0"
877: 852 00000c4c * .text
878: 853 0001BB8D dd 8f00000c40 pushl $L321
879: 854 0001BB93 fe 08 effffff7be callf $8,_writes
880: 855 0001BB9A # writed( index );
881: 856 0001BB9A dd effffff7b8 pushl _index
882: 857 0001BBA0 fe 08 effffff7b1 callf $8,_writed
883: 858 0001BBA7 # writec('\n');
884: 859 0001BBA7 dd 0a pushl $10
885: 860 0001BBA9 fe 08 effffff7a8 callf $8,_writec
886: 861 0001BBB0 # writes(" final Acc = ");
887: 862 0001BBB0 .data 1
888: 863 00000c4c * L323:
889: 864 00000c4c * 202066696E616C20416363203 .ascii " final Acc = \0"
890: D2000
891: 865 00000c5b * .text
892: 866 0001BBB0 dd 8f00000c4c pushl $L323
893: 867 0001BBB6 fe 08 effffff79b callf $8,_writes
894: 868 0001BBBD # write32h( sgl_value_5 );
895: 869 0001BBBD dd effffff795 pushl _sgl_value_5
896: 870 0001BBC3 fe 08 effffff78e callf $8,_write32h
897: 871 0001BBCA # writec(' ');
898: 872 0001BBCA dd 20 pushl $32
899: 873 0001BBCC fe 08 effffff785 callf $8,_writec
900: 874 0001BBD3 # write32h( sgl_value_6 );
901: 875 0001BBD3 dd effffff77f pushl _sgl_value_6
902: 876 0001BBD9 fe 08 effffff778 callf $8,_write32h
903: 877 0001BBE0 # writec('\n');
904: 878 0001BBE0 dd 0a pushl $10
905: 879 0001BBE2 fe 08 effffff76f callf $8,_writec
906: 880 0001BBE9 # writes(" expected = ");
907: 881 0001BBE9 .data 1
908: 882 00000c5b * L324:
909: 883 00000c5b * 2020206578706563746564203 .ascii " expected = \0"
910: D2000
911: 884 00000c6a * .text
912: 885 0001BBE9 dd 8f00000c5b pushl $L324
913: 886 0001BBEF fe 08 effffff762 callf $8,_writes
914: 887 0001BBF6 # write32h( dbl_expected.m );
915: 888 0001BBF6 dd effffff75c pushl _dbl_expected
916: 889 0001BBFC fe 08 effffff755 callf $8,_write32h
917: 890 0001BC03 # writec(' ');
918: 891 0001BC03 dd 20 pushl $32
919: 892 0001BC05 fe 08 effffff74c callf $8,_writec
920: 893 0001BC0C # write32h( dbl_expected.l );
921: 894 0001BC0C dd effffff74a pushl _dbl_expected+4
922: 895 0001BC12 fe 08 effffff73f callf $8,_write32h
923: 896 0001BC19 # writec('\n');
924: 897 0001BC19 dd 0a pushl $10
925: 898 0001BC1B fe 08 effffff736 callf $8,_writec
926: 899 0001BC22 # }
927: 900 0001BC22 # if ( halt_flg ) /* halt on error? */
928: 901 0001BC22 L316:
929: 902 0001BC22 5d effffff730 tstl _halt_flg
930: 903 0001BC28 31 09 jeql L325
931: 904 0001BC2A # cmpd_er_halt( BAD_ACC_HLT ); /* halt on the error */
932: 905 0001BC2A dd 01 pushl $1
933: 906 0001BC2C fe 08 ef00000097 callf $8,_cmpd_er_halt
934: 907 0001BC33 # if ( loop_on_err ) {
935: 908 0001BC33 L325:
936: 909 0001BC33 5d effffff71f tstl _loop_on_err
937: 910 0001BC39 31 0a jeql L326
938: 911 0001BC3B # force_loop = TRUE; /* set the force loop flag */
939: 912 0001BC3B 0d 01 effffff716 movl $1,_force_loop
940: 913 0001BC42 # asm("brw _cmpd_4_lp1"); /* and loop on the error */
941: 914 0001BC42 13 fe8b brw _cmpd_4_lp1
942: 915 0001BC45 # } /* end of loop on error */
943: 916 0001BC45 # } /* end of compare error */
944: 917 0001BC45 L326:
945: 918 0001BC45 # } while ( index++ < max_cmpd_1_index ); /* end of WHILE loop */
946: 919 0001BC45 L315:
947: 920 0001BC45 L311:
948: 921 0001BC45 0d effffff70d 50 movl _index,r0
949: 922 0001BC4C 6d effffff706 incl _index
950: 923 0001BC52 1d 50 effffff6ff cmpl r0,_max_cmpd_1_index
951: 924 0001BC59 81 03 13 fdd3 jlss L312
952: 925 0001BC5E L310:
953: 926 0001BC5E # } /* end of subtest 4 */
954: 927 0001BC5E 40 ret#2
955: 928 0001BC5F .set L306,0x0
956: 929 0001BC5F L308:
957: 930 0001BC5F 13 fdc3 jbr L309
958: 931 0001BC62 .data
959: 932 00000a98 * .text
960: 933 0001BC62 .align 1
961: 934 0001BC62 .globl _print_cmpd_data
962: 935 0001BC62 _print_cmpd_data:
963: 936 0001BC62 0000 .word L327
964: 937 0001BC64 #
965: 938 0001BC64 #
966: 939 0001BC64 #
967: 940 0001BC64 # /**************************************************************************
968: 941 0001BC64 # *
969: 942 0001BC64 # * PRINT THE DATA AND STORE RESULTS
970: 943 0001BC64 # *
971: 944 0001BC64 # * initial Acc = xxxxxxxx xxxxxxxx, operand = xxxxxxxx xxxxxxxx
972: 945 0001BC64 # **************************************************************************/
973: 946 0001BC64 # print_cmpd_data()
974: 947 0001BC64 # {
975: 948 0001BC64 11 61 jbr L329
976: 949 0001BC66 L330:
977: 950 0001BC66 # writes("initial Acc = ");
978: 951 0001BC66 .data 1
979: 952 00000c6a * L331:
980: 953 00000c6a * 696E697469616C20416363203 .ascii "initial Acc = \0"
981: D2000
982: 954 00000c79 * .text
983: 955 0001BC66 dd 8f00000c6a pushl $L331
984: 956 0001BC6C fe 08 effffff6e5 callf $8,_writes
985: 957 0001BC73 # write32h( dbl_value_1.m );
986: 958 0001BC73 dd effffff6df pushl _dbl_value_1
987: 959 0001BC79 fe 08 effffff6d8 callf $8,_write32h
988: 960 0001BC80 # writec(' ');
989: 961 0001BC80 dd 20 pushl $32
990: 962 0001BC82 fe 08 effffff6cf callf $8,_writec
991: 963 0001BC89 # write32h( dbl_value_1.l );
992: 964 0001BC89 dd effffff6cd pushl _dbl_value_1+4
993: 965 0001BC8F fe 08 effffff6c2 callf $8,_write32h
994: 966 0001BC96 # writes(" operand = ");
995: 967 0001BC96 .data 1
996: 968 00000c79 * L332:
997: 969 00000c79 * 20206F706572616E64203D200 .ascii " operand = \0"
998: 0
999: 970 00000c86 * .text
1000: 971 0001BC96 dd 8f00000c79 pushl $L332
1001: 972 0001BC9C fe 08 effffff6b5 callf $8,_writes
1002: 973 0001BCA3 # write32h( dbl_value_2.m );
1003: 974 0001BCA3 dd effffff6af pushl _dbl_value_2
1004: 975 0001BCA9 fe 08 effffff6a8 callf $8,_write32h
1005: 976 0001BCB0 # writec(' ');
1006: 977 0001BCB0 dd 20 pushl $32
1007: 978 0001BCB2 fe 08 effffff69f callf $8,_writec
1008: 979 0001BCB9 # write32h( dbl_value_2.l );
1009: 980 0001BCB9 dd effffff69d pushl _dbl_value_2+4
1010: 981 0001BCBF fe 08 effffff692 callf $8,_write32h
1011: 982 0001BCC6 # }
1012: 983 0001BCC6 40 ret#2
1013: 984 0001BCC7 .set L327,0x0
1014: 985 0001BCC7 L329:
1015: 986 0001BCC7 11 9d jbr L330
1016: 987 0001BCC9 .data
1017: 988 00000a98 * .text
1018: 989 0001BCC9 00 .align 1
1019: 990 0001BCCA .globl _cmpd_er_halt
1020: 991 0001BCCA _cmpd_er_halt:
1021: 992 0001BCCA 0000 .word L333
1022: 993 0001BCCC #
1023: 994 0001BCCC #
1024: 995 0001BCCC #
1025: 996 0001BCCC # /**************************************************************************
1026: 997 0001BCCC # *
1027: 998 0001BCCC # * HALT ON ERROR ROUTINE
1028: 999 0001BCCC # *
1029: 1000 0001BCCC # **************************************************************************/
1030: 1001 0001BCCC # cmpd_er_halt( halt_code )
1031: 1002 0001BCCC # int halt_code;
1032: 1003 0001BCCC # {
1033: 1004 0001BCCC 13 011c jbr L335
1034: 1005 0001BCCF L336:
1035: 1006 0001BCCF # sgl_value_1 = dbl_value_1.m;
1036: 1007 0001BCCF 0d effffff683 effffff67e movl _dbl_value_1,_sgl_value_1
1037: 1008 0001BCDA # sgl_value_2 = dbl_value_1.l;
1038: 1009 0001BCDA 0d effffff67c effffff673 movl _dbl_value_1+4,_sgl_value_2
1039: 1010 0001BCE5 # sgl_value_3 = dbl_value_2.m;
1040: 1011 0001BCE5 0d effffff66d effffff668 movl _dbl_value_2,_sgl_value_3
1041: 1012 0001BCF0 # sgl_value_4 = dbl_value_2.l;
1042: 1013 0001BCF0 0d effffff666 effffff65d movl _dbl_value_2+4,_sgl_value_4
1043: 1014 0001BCFB # sgl_value_5 = dbl_st_acc.m;
1044: 1015 0001BCFB 0d effffff657 effffff652 movl _dbl_st_acc,_sgl_value_5
1045: 1016 0001BD06 # sgl_value_6 = dbl_st_acc.l;
1046: 1017 0001BD06 0d effffff650 effffff647 movl _dbl_st_acc+4,_sgl_value_6
1047: 1018 0001BD11 # sgl_dummy1 = halt_code; /* get the error type */
1048: 1019 0001BD11 0d ad04 effffff63f movl 4(fp),_sgl_dummy1
1049: 1020 0001BD19 # asm("movl _test_no,r0"); /* r0 = test number */
1050: 1021 0001BD19 0d effffff639 50 movl _test_no,r0
1051: 1022 0001BD20 # asm("movl _subtest,r1"); /* r1 = subtest number */
1052: 1023 0001BD20 0d effffff632 51 movl _subtest,r1
1053: 1024 0001BD27 # asm("movl _sgl_dummy1,r2"); /* r2 = error code */
1054: 1025 0001BD27 0d effffff62b 52 movl _sgl_dummy1,r2
1055: 1026 0001BD2E # asm("movl _cycle,r3"); /* r3 = cycle count */
1056: 1027 0001BD2E 0d effffff624 53 movl _cycle,r3
1057: 1028 0001BD35 # asm("movl _sgl_value_1,r4"); /* r4 = MS operand 1 */
1058: 1029 0001BD35 0d effffff61d 54 movl _sgl_value_1,r4
1059: 1030 0001BD3C # asm("movl _sgl_value_2,r5"); /* r5 = LS operand 1 */
1060: 1031 0001BD3C 0d effffff616 55 movl _sgl_value_2,r5
1061: 1032 0001BD43 # asm("movl _sgl_value_3,r6"); /* r6 = MS operand 2 */
1062: 1033 0001BD43 0d effffff60f 56 movl _sgl_value_3,r6
1063: 1034 0001BD4A # asm("movl _sgl_value_4,r7"); /* r7 = MS operand 2 */
1064: 1035 0001BD4A 0d effffff608 57 movl _sgl_value_4,r7
1065: 1036 0001BD51 # asm("movl _psl_val,r8"); /* r8 = actual PSL */
1066: 1037 0001BD51 0d effffff601 58 movl _psl_val,r8
1067: 1038 0001BD58 # if( halt_code == BAD_ACC_HLT ) {
1068: 1039 0001BD58 1d ad04 01 cmpl 4(fp),$1
1069: 1040 0001BD5C 21 34 jneq L337
1070: 1041 0001BD5E # sgl_value_1 = dbl_expected.m;
1071: 1042 0001BD5E 0d effffff5f4 effffff5ef movl _dbl_expected,_sgl_value_1
1072: 1043 0001BD69 # sgl_value_2 = dbl_expected.l;
1073: 1044 0001BD69 0d effffff5ed effffff5e4 movl _dbl_expected+4,_sgl_value_2
1074: 1045 0001BD74 # asm("movl _sgl_value_5,r9"); /* r9 = MS stored */
1075: 1046 0001BD74 0d effffff5de 59 movl _sgl_value_5,r9
1076: 1047 0001BD7B # asm("movl _sgl_value_6,r10"); /* r10 = LS stored */
1077: 1048 0001BD7B 0d effffff5d7 5a movl _sgl_value_6,r10
1078: 1049 0001BD82 # asm("movl _sgl_value_1,r11"); /* r11 = MS expected */
1079: 1050 0001BD82 0d effffff5d0 5b movl _sgl_value_1,r11
1080: 1051 0001BD89 # asm("movl _sgl_value_2,r12"); /* r12 = LS expected */
1081: 1052 0001BD89 0d effffff5c9 5c movl _sgl_value_2,r12
1082: 1053 0001BD90 # } else
1083: 1054 0001BD90 11 57 jbr L338
1084: 1055 0001BD92 L337:
1085: 1056 0001BD92 # if( halt_code == BAD_REG_HLT ) {
1086: 1057 0001BD92 1d ad04 02 cmpl 4(fp),$2
1087: 1058 0001BD96 21 3d jneq L339
1088: 1059 0001BD98 # sgl_dummy1 = load_regs[index2];
1089: 1060 0001BD98 0d effffff5ba 50 movl _index2,r0
1090: 1061 0001BD9F 0d 40effffff5b2 movl _load_regs[r0],_sgl_dummy1
1091: effffff5ad
1092: 1062 0001BDAB # sgl_dummy2 = store_regs[index2];
1093: 1063 0001BDAB 0d effffff5a7 50 movl _index2,r0
1094: 1064 0001BDB2 0d 40effffff59f movl _store_regs[r0],_sgl_dummy2
1095: effffff59a
1096: 1065 0001BDBE # asm("movl _index2,r9"); /* r9 = bad register # */
1097: 1066 0001BDBE 0d effffff594 59 movl _index2,r9
1098: 1067 0001BDC5 # asm("movl _sgl_dummy2,r10"); /* r10 = actual value */
1099: 1068 0001BDC5 0d effffff58d 5a movl _sgl_dummy2,r10
1100: 1069 0001BDCC # asm("movl _sgl_dummy1,r11"); /* r11 = expected value */
1101: 1070 0001BDCC 0d effffff586 5b movl _sgl_dummy1,r11
1102: 1071 0001BDD3 # } else
1103: 1072 0001BDD3 11 14 jbr L340
1104: 1073 0001BDD5 L339:
1105: 1074 0001BDD5 # if( halt_code == BAD_PSL_HLT ) {
1106: 1075 0001BDD5 1d ad04 03 cmpl 4(fp),$3
1107: 1076 0001BDD9 21 0e jneq L341
1108: 1077 0001BDDB # asm("movl _exp_psl,r9"); /* r9 = expected PSL */
1109: 1078 0001BDDB 0d effffff577 59 movl _exp_psl,r9
1110: 1079 0001BDE2 # asm("movl _index,r10"); /* r10 = data index */
1111: 1080 0001BDE2 0d effffff570 5a movl _index,r10
1112: 1081 0001BDE9 # };
1113: 1082 0001BDE9 L341:
1114: 1083 0001BDE9 L340:
1115: 1084 0001BDE9 L338:
1116: 1085 0001BDE9 # asm("halt"); /* HALT ... */
1117: 1086 0001BDE9 00 halt
1118: 1087 0001BDEA # }
1119: 1088 0001BDEA 40 ret#2
1120: 1089 0001BDEB .set L333,0x0
1121: 1090 0001BDEB L335:
1122: 1091 0001BDEB 13 fee1 jbr L336
1123: 1092 0001BDEE .data
1124: 1092 00037146 .data
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.