|
|
1.1 root 1: 1 00000000 LL0:
2: 2 00000000 .data
3: 3 00000d28 * .text
4: 4 00000000 .align 1
5: 5 00000000 .globl _subf
6: 6 00000000 _subf:
7: 7 0000E0A4 0000 .word L215
8: 8 0000E0A6 #
9: 9 0000E0A6 # #include "fpp_defs.h"
10: 10 0000E0A6 #
11: 11 0000E0A6 #
12: 12 0000E0A6 # /*****************************************************************************
13: 13 0000E0A6 # *
14: 14 0000E0A6 # * SUBF - SINGLE PRECISION FLOATING POINT ADD TEST
15: 15 0000E0A6 # *
16: 16 0000E0A6 # *****************************************************************************/
17: 17 0000E0A6 # subf()
18: 18 0000E0A6 # {
19: 19 0000E0A6 11 64 jbr L217
20: 20 0000E0A8 L218:
21: 21 0000E0A8 # asm(".globl _subf_t");
22: 22 0000E0A8 .globl _subf_t
23: 23 0000E0A8 # asm("_subf_t:"); /* entry address */
24: 24 0000E0A8 _subf_t:
25: 25 0000E0A8 # if( ( cycle == 1 ) && ( prt_hdrs ) ) /* print headers on 1st pass */
26: 26 0000E0A8 1d effffffff6 01 cmpl _cycle,$1
27: 27 0000E0AF 21 15 jneq L219
28: 28 0000E0B1 5d efffffffed tstl _prt_hdrs
29: 29 0000E0B7 31 0d jeql L219
30: 30 0000E0B9 # writes(" SUBF");
31: 31 0000E0B9 .data 1
32: 32 00000d28 * L221:
33: 33 00000d28 * 205355424600 .ascii " SUBF\0"
34: 34 00000d2e * .text
35: 35 0000E0B9 dd 8f00000d28 pushl $L221
36: 36 0000E0BF fe 08 efffffffde callf $8,_writes
37: 37 0000E0C6 # subf_1(); /* subract through a register */
38: 38 0000E0C6 L219:
39: 39 0000E0C6 fe 04 ef00000041 callf $4,_subf_1
40: 40 0000E0CD # subf_2(); /* subract through the cache */
41: 41 0000E0CD fe 04 ef00000160 callf $4,_subf_2
42: 42 0000E0D4 # subf_3(); /* wait 3 NOPs */
43: 43 0000E0D4 fe 04 ef00000279 callf $4,_subf_3
44: 44 0000E0DB # subf_4(); /* wait 2 NOPs */
45: 45 0000E0DB fe 04 ef00000396 callf $4,_subf_4
46: 46 0000E0E2 # subf_5(); /* wait 1 NOP before storing */
47: 47 0000E0E2 fe 04 ef000004b3 callf $4,_subf_5
48: 48 0000E0E9 # subf_6(); /* register stability test */
49: 49 0000E0E9 fe 04 ef000005ce callf $4,_subf_6
50: 50 0000E0F0 # subf_7(); /* PSL stability test */
51: 51 0000E0F0 fe 04 ef00000777 callf $4,_subf_7
52: 52 0000E0F7 # subf_8(); /* pipelined entry test */
53: 53 0000E0F7 fe 04 ef0000092a callf $4,_subf_8
54: 54 0000E0FE # subf_9(); /* pipelined exit test */
55: 55 0000E0FE fe 04 ef00000a49 callf $4,_subf_9
56: 56 0000E105 # asm("jmp *return"); /* return to the test monitor */
57: 57 0000E105 71 ffffffff99 jmp *return
58: 58 0000E10B # }
59: 59 0000E10B 40 ret#2
60: 60 0000E10C .set L215,0x0
61: 61 0000E10C L217:
62: 62 0000E10C 11 9a jbr L218
63: 63 0000E10E .data
64: 64 00000d28 * .text
65: 65 0000E10E .align 1
66: 66 0000E10E .globl _subf_1
67: 67 0000E10E _subf_1:
68: 68 0000E10E 0000 .word L231
69: 69 0000E110 #
70: 70 0000E110 #
71: 71 0000E110 #
72: 72 0000E110 # /************************************************************************
73: 73 0000E110 # *
74: 74 0000E110 # * SUBTEST 1 - subract through a register
75: 75 0000E110 # *
76: 76 0000E110 # ************************************************************************/
77: 77 0000E110 # subf_1()
78: 78 0000E110 # {
79: 79 0000E110 13 011e jbr L233
80: 80 0000E113 L234:
81: 81 0000E113 # force_loop = FALSE;
82: 82 0000E113 4d efffffff8b clrl _force_loop
83: 83 0000E119 # subtest = 1;
84: 84 0000E119 0d 01 efffffff84 movl $1,_subtest
85: 85 0000E120 # for( index = 0; index < max_subf_1_index; index++ ) {
86: 86 0000E120 4d efffffff7e clrl _index
87: 87 0000E126 L237:
88: 88 0000E126 1d efffffff78 efffffff73 cmpl _index,_max_subf_1_index
89: 89 0000E131 91 03 13 00fa jgeq L236
90: 90 0000E136 # sgl_ld_acc = subf_1_data[index].op_1; /* get operand 1 */
91: 91 0000E136 5c 0c efffffff67 50 mull3 $12,_index,r0
92: 92 0000E13E 0d e000000000 efffffff5b movl _subf_1_data(r0),_sgl_ld_acc
93: 93 0000E149 # sgl_value_1 = subf_1_data[index].op_2; /* get operand 2 */
94: 94 0000E149 5c 0c efffffff54 50 mull3 $12,_index,r0
95: 95 0000E151 0d e000000004 efffffff48 movl _subf_1_data+4(r0),_sgl_value_1
96: 96 0000E15C # sgl_expected = subf_1_data[index].exp; /* get expected result */
97: 97 0000E15C 5c 0c efffffff41 50 mull3 $12,_index,r0
98: 98 0000E164 0d e000000008 efffffff35 movl _subf_1_data+8(r0),_sgl_expected
99: 99 0000E16F # /*
100: 100 0000E16F # * If LOOP ON ERROR is set, this is the loop for this subtest.
101: 101 0000E16F # * The force loop flag is set after the first error.
102: 102 0000E16F # */
103: 103 0000E16F # asm("_subf_1_lp1:");
104: 104 0000E16F _subf_1_lp1:
105: 105 0000E16F # asm("movl _sgl_ld_acc,r3"); /* move the 1st data to r3 */
106: 106 0000E16F 0d efffffff2f 53 movl _sgl_ld_acc,r3
107: 107 0000E176 # asm("movl _sgl_value_1,r4"); /* move the 2nd data to r4 */
108: 108 0000E176 0d efffffff28 54 movl _sgl_value_1,r4
109: 109 0000E17D # asm("ldf r3"); /* load the 1st operand */
110: 110 0000E17D 06 53 ldf r3
111: 111 0000E17F # asm("subf r4"); /* subract the 2nd operand */
112: 112 0000E17F d6 54 subf r4
113: 113 0000E181 # asm("stf _sgl_st_acc"); /* store the result */
114: 114 0000E181 26 efffffff1d stf _sgl_st_acc
115: 115 0000E187 # if( force_loop )
116: 116 0000E187 5d efffffff17 tstl _force_loop
117: 117 0000E18D 31 02 jeql L238
118: 118 0000E18F # asm("brb _subf_1_lp1");; /* loop on the error */
119: 119 0000E18F 11 de brb _subf_1_lp1
120: 120 0000E191 L238:
121: 121 0000E191 # /*
122: 122 0000E191 # * end error loop - test the results
123: 123 0000E191 # */
124: 124 0000E191 # if( sgl_st_acc != sgl_expected ) { /* COMPARE the values */
125: 125 0000E191 1d efffffff0d efffffff08 cmpl _sgl_st_acc,_sgl_expected
126: 126 0000E19C 21 03 13 0086 jeql L239
127: 127 0000E1A1 # errcnt++; /* bump the error count */
128: 128 0000E1A1 6d effffffefd incl _errcnt
129: 129 0000E1A7 # if( prt_error ) {
130: 130 0000E1A7 5d effffffef7 tstl _prt_error
131: 131 0000E1AD 31 55 jeql L240
132: 132 0000E1AF # writes(" \n"); /* start a new print line */
133: 133 0000E1AF .data 1
134: 134 00000d2e * L241:
135: 135 00000d2e * 200A00 .ascii " \12\0"
136: 136 00000d31 * .text
137: 137 0000E1AF dd 8f00000d2e pushl $L241
138: 138 0000E1B5 fe 08 effffffee8 callf $8,_writes
139: 139 0000E1BC # writes("cycle: ");
140: 140 0000E1BC .data 1
141: 141 00000d31 * L242:
142: 142 00000d31 * 6379636C653A2000 .ascii "cycle: \0"
143: 143 00000d39 * .text
144: 144 0000E1BC dd 8f00000d31 pushl $L242
145: 145 0000E1C2 fe 08 effffffedb callf $8,_writes
146: 146 0000E1C9 # writed( cycle );
147: 147 0000E1C9 dd effffffed5 pushl _cycle
148: 148 0000E1CF fe 08 effffffece callf $8,_writed
149: 149 0000E1D6 # writes(" SUBF test ");
150: 150 0000E1D6 .data 1
151: 151 00000d39 * L244:
152: 152 00000d39 * 2020535542462074657374200 .ascii " SUBF test \0"
153: 0
154: 153 00000d46 * .text
155: 154 0000E1D6 dd 8f00000d39 pushl $L244
156: 155 0000E1DC fe 08 effffffec1 callf $8,_writes
157: 156 0000E1E3 # writed( test_no );
158: 157 0000E1E3 dd effffffebb pushl _test_no
159: 158 0000E1E9 fe 08 effffffeb4 callf $8,_writed
160: 159 0000E1F0 # writes(", subtest 1 (Reg. Data) - BAD FINAL ACC\n");
161: 160 0000E1F0 .data 1
162: 161 00000d46 * L245:
163: 162 00000d46 * 2C20737562746573742031202 .ascii ", subtest 1 (Reg. Data) - BAD FINAL ACC\12\0"
164: 85265672E204461746129202D
165: 204241442046494E414C20414
166: 3430A00
167: 163 00000d6f * .text
168: 164 0000E1F0 dd 8f00000d46 pushl $L245
169: 165 0000E1F6 fe 08 effffffea7 callf $8,_writes
170: 166 0000E1FD # print_subf_data();
171: 167 0000E1FD fe 04 ef00000a70 callf $4,_print_subf_data
172: 168 0000E204 # }
173: 169 0000E204 # if( halt_flg )
174: 170 0000E204 L240:
175: 171 0000E204 5d effffffe9a tstl _halt_flg
176: 172 0000E20A 31 09 jeql L247
177: 173 0000E20C # subf_er_halt( BAD_ACC_HLT ); /* halt on the error */
178: 174 0000E20C dd 01 pushl $1
179: 175 0000E20E fe 08 ef00000afd callf $8,_subf_er_halt
180: 176 0000E215 # if( loop_on_err ) {
181: 177 0000E215 L247:
182: 178 0000E215 5d effffffe89 tstl _loop_on_err
183: 179 0000E21B 31 0a jeql L249
184: 180 0000E21D # force_loop = TRUE; /* set the force loop flag */
185: 181 0000E21D 0d 01 effffffe80 movl $1,_force_loop
186: 182 0000E224 # asm("brw _subf_1_lp1");; /* and loop on the error */
187: 183 0000E224 13 ff48 brw _subf_1_lp1
188: 184 0000E227 # } /* end of loop on error */
189: 185 0000E227 # } /* end of compare error */
190: 186 0000E227 L249:
191: 187 0000E227 # } /* end of WHILE loop */
192: 188 0000E227 L239:
193: 189 0000E227 L235:
194: 190 0000E227 6d effffffe77 incl _index
195: 191 0000E22D 13 fef6 jbr L237
196: 192 0000E230 L236:
197: 193 0000E230 # } /* end of subtest 1 */
198: 194 0000E230 40 ret#2
199: 195 0000E231 .set L231,0x0
200: 196 0000E231 L233:
201: 197 0000E231 13 fedf jbr L234
202: 198 0000E234 .data
203: 199 00000d28 * .text
204: 200 0000E234 .align 1
205: 201 0000E234 .globl _subf_2
206: 202 0000E234 _subf_2:
207: 203 0000E234 0000 .word L250
208: 204 0000E236 #
209: 205 0000E236 #
210: 206 0000E236 #
211: 207 0000E236 # /************************************************************************
212: 208 0000E236 # *
213: 209 0000E236 # * SUBTEST 2 - subract through memory
214: 210 0000E236 # *
215: 211 0000E236 # ************************************************************************/
216: 212 0000E236 # subf_2()
217: 213 0000E236 # {
218: 214 0000E236 13 0118 jbr L252
219: 215 0000E239 L253:
220: 216 0000E239 # force_loop = FALSE;
221: 217 0000E239 4d effffffe65 clrl _force_loop
222: 218 0000E23F # subtest = 2;
223: 219 0000E23F 0d 02 effffffe5e movl $2,_subtest
224: 220 0000E246 # for( index = 0; index < max_subf_1_index; index++ ) {
225: 221 0000E246 4d effffffe58 clrl _index
226: 222 0000E24C L256:
227: 223 0000E24C 1d effffffe52 effffffe4d cmpl _index,_max_subf_1_index
228: 224 0000E257 91 03 13 00f4 jgeq L255
229: 225 0000E25C # sgl_ld_acc = subf_1_data[index].op_1; /* get operand 1 */
230: 226 0000E25C 5c 0c effffffe41 50 mull3 $12,_index,r0
231: 227 0000E264 0d e000000000 effffffe35 movl _subf_1_data(r0),_sgl_ld_acc
232: 228 0000E26F # sgl_value_1 = subf_1_data[index].op_2; /* get operand 2 */
233: 229 0000E26F 5c 0c effffffe2e 50 mull3 $12,_index,r0
234: 230 0000E277 0d e000000004 effffffe22 movl _subf_1_data+4(r0),_sgl_value_1
235: 231 0000E282 # sgl_expected = subf_1_data[index].exp; /* get expected result */
236: 232 0000E282 5c 0c effffffe1b 50 mull3 $12,_index,r0
237: 233 0000E28A 0d e000000008 effffffe0f movl _subf_1_data+8(r0),_sgl_expected
238: 234 0000E295 # /*
239: 235 0000E295 # * If LOOP ON ERROR is set, this is the loop for this subtest.
240: 236 0000E295 # * The force loop flag is set after the first error.
241: 237 0000E295 # */
242: 238 0000E295 # asm("_subf_2_lp1:");
243: 239 0000E295 _subf_2_lp1:
244: 240 0000E295 # asm("ldf _sgl_ld_acc"); /* load the 1st operand */
245: 241 0000E295 06 effffffe09 ldf _sgl_ld_acc
246: 242 0000E29B # asm("subf _sgl_value_1"); /* sub the 2nd operand */
247: 243 0000E29B d6 effffffe03 subf _sgl_value_1
248: 244 0000E2A1 # asm("stf _sgl_st_acc"); /* store the result */
249: 245 0000E2A1 26 effffffdfd stf _sgl_st_acc
250: 246 0000E2A7 # if( force_loop )
251: 247 0000E2A7 5d effffffdf7 tstl _force_loop
252: 248 0000E2AD 31 02 jeql L257
253: 249 0000E2AF # asm("brb _subf_2_lp1");; /* loop on the error */
254: 250 0000E2AF 11 e4 brb _subf_2_lp1
255: 251 0000E2B1 L257:
256: 252 0000E2B1 # /*
257: 253 0000E2B1 # * end error loop - test the results
258: 254 0000E2B1 # */
259: 255 0000E2B1 # if( sgl_st_acc != sgl_expected ) { /* COMPARE the values */
260: 256 0000E2B1 1d effffffded effffffde8 cmpl _sgl_st_acc,_sgl_expected
261: 257 0000E2BC 21 03 13 0086 jeql L258
262: 258 0000E2C1 # errcnt++; /* bump the error count */
263: 259 0000E2C1 6d effffffddd incl _errcnt
264: 260 0000E2C7 # if( prt_error ) {
265: 261 0000E2C7 5d effffffdd7 tstl _prt_error
266: 262 0000E2CD 31 55 jeql L259
267: 263 0000E2CF # writes(" \n"); /* start a new print line */
268: 264 0000E2CF .data 1
269: 265 00000d6f * L260:
270: 266 00000d6f * 200A00 .ascii " \12\0"
271: 267 00000d72 * .text
272: 268 0000E2CF dd 8f00000d6f pushl $L260
273: 269 0000E2D5 fe 08 effffffdc8 callf $8,_writes
274: 270 0000E2DC # writes("cycle: ");
275: 271 0000E2DC .data 1
276: 272 00000d72 * L261:
277: 273 00000d72 * 6379636C653A2000 .ascii "cycle: \0"
278: 274 00000d7a * .text
279: 275 0000E2DC dd 8f00000d72 pushl $L261
280: 276 0000E2E2 fe 08 effffffdbb callf $8,_writes
281: 277 0000E2E9 # writed( cycle );
282: 278 0000E2E9 dd effffffdb5 pushl _cycle
283: 279 0000E2EF fe 08 effffffdae callf $8,_writed
284: 280 0000E2F6 # writes(" SUBF test ");
285: 281 0000E2F6 .data 1
286: 282 00000d7a * L262:
287: 283 00000d7a * 2020535542462074657374200 .ascii " SUBF test \0"
288: 0
289: 284 00000d87 * .text
290: 285 0000E2F6 dd 8f00000d7a pushl $L262
291: 286 0000E2FC fe 08 effffffda1 callf $8,_writes
292: 287 0000E303 # writed( test_no );
293: 288 0000E303 dd effffffd9b pushl _test_no
294: 289 0000E309 fe 08 effffffd94 callf $8,_writed
295: 290 0000E310 # writes(", subtest 2 (Cache Data) - BAD FINAL ACC\n");
296: 291 0000E310 .data 1
297: 292 00000d87 * L263:
298: 293 00000d87 * 2C20737562746573742032202 .ascii ", subtest 2 (Cache Data) - BAD FINAL ACC\12\0"
299: 8436163686520446174612920
300: 2D204241442046494E414C204
301: 143430A00
302: 294 00000db1 * .text
303: 295 0000E310 dd 8f00000d87 pushl $L263
304: 296 0000E316 fe 08 effffffd87 callf $8,_writes
305: 297 0000E31D # print_subf_data();
306: 298 0000E31D fe 04 ef00000950 callf $4,_print_subf_data
307: 299 0000E324 # }
308: 300 0000E324 # if( halt_flg )
309: 301 0000E324 L259:
310: 302 0000E324 5d effffffd7a tstl _halt_flg
311: 303 0000E32A 31 09 jeql L264
312: 304 0000E32C # subf_er_halt( BAD_ACC_HLT ); /* halt on the error */
313: 305 0000E32C dd 01 pushl $1
314: 306 0000E32E fe 08 ef000009dd callf $8,_subf_er_halt
315: 307 0000E335 # if( loop_on_err ) {
316: 308 0000E335 L264:
317: 309 0000E335 5d effffffd69 tstl _loop_on_err
318: 310 0000E33B 31 0a jeql L265
319: 311 0000E33D # force_loop = TRUE; /* set the force loop flag */
320: 312 0000E33D 0d 01 effffffd60 movl $1,_force_loop
321: 313 0000E344 # asm("brw _subf_2_lp1");; /* and loop on the error */
322: 314 0000E344 13 ff4e brw _subf_2_lp1
323: 315 0000E347 # } /* end of loop on error */
324: 316 0000E347 # } /* end of compare error */
325: 317 0000E347 L265:
326: 318 0000E347 # } /* end of WHILE loop */
327: 319 0000E347 L258:
328: 320 0000E347 L254:
329: 321 0000E347 6d effffffd57 incl _index
330: 322 0000E34D 13 fefc jbr L256
331: 323 0000E350 L255:
332: 324 0000E350 # } /* end of subtest 2 */
333: 325 0000E350 40 ret#2
334: 326 0000E351 .set L250,0x0
335: 327 0000E351 L252:
336: 328 0000E351 13 fee5 jbr L253
337: 329 0000E354 .data
338: 330 00000d28 * .text
339: 331 0000E354 .align 1
340: 332 0000E354 .globl _subf_3
341: 333 0000E354 _subf_3:
342: 334 0000E354 0000 .word L266
343: 335 0000E356 #
344: 336 0000E356 #
345: 337 0000E356 #
346: 338 0000E356 # /************************************************************************
347: 339 0000E356 # *
348: 340 0000E356 # * SUBTEST 3 - Wait 3 NOPs before storing the results
349: 341 0000E356 # *
350: 342 0000E356 # ************************************************************************/
351: 343 0000E356 # subf_3()
352: 344 0000E356 # {
353: 345 0000E356 13 011c jbr L268
354: 346 0000E359 L269:
355: 347 0000E359 # force_loop = FALSE;
356: 348 0000E359 4d effffffd45 clrl _force_loop
357: 349 0000E35F # subtest = 3;
358: 350 0000E35F 0d 03 effffffd3e movl $3,_subtest
359: 351 0000E366 # for( index = 0; index < max_subf_1_index; index++ ) {
360: 352 0000E366 4d effffffd38 clrl _index
361: 353 0000E36C L272:
362: 354 0000E36C 1d effffffd32 effffffd2d cmpl _index,_max_subf_1_index
363: 355 0000E377 91 03 13 00f8 jgeq L271
364: 356 0000E37C # sgl_ld_acc = subf_1_data[index].op_1; /* get operand 1 */
365: 357 0000E37C 5c 0c effffffd21 50 mull3 $12,_index,r0
366: 358 0000E384 0d e000000000 effffffd15 movl _subf_1_data(r0),_sgl_ld_acc
367: 359 0000E38F # sgl_value_1 = subf_1_data[index].op_2; /* get operand 2 */
368: 360 0000E38F 5c 0c effffffd0e 50 mull3 $12,_index,r0
369: 361 0000E397 0d e000000004 effffffd02 movl _subf_1_data+4(r0),_sgl_value_1
370: 362 0000E3A2 # sgl_expected = subf_1_data[index].exp; /* get expected result */
371: 363 0000E3A2 5c 0c effffffcfb 50 mull3 $12,_index,r0
372: 364 0000E3AA 0d e000000008 effffffcef movl _subf_1_data+8(r0),_sgl_expected
373: 365 0000E3B5 # /*
374: 366 0000E3B5 # * If LOOP ON ERROR is set, this is the loop for this subtest.
375: 367 0000E3B5 # * The force loop flag is set after the first error.
376: 368 0000E3B5 # */
377: 369 0000E3B5 # asm("_subf_3_lp1:");
378: 370 0000E3B5 _subf_3_lp1:
379: 371 0000E3B5 # asm("ldf _sgl_ld_acc"); /* load the 1st operand */
380: 372 0000E3B5 06 effffffce9 ldf _sgl_ld_acc
381: 373 0000E3BB # asm("nop"); /* delay */
382: 374 0000E3BB 10 nop
383: 375 0000E3BC # asm("subf _sgl_value_1"); /* sub the 2nd operand */
384: 376 0000E3BC d6 effffffce2 subf _sgl_value_1
385: 377 0000E3C2 # asm("nop"); /* delay before ... */
386: 378 0000E3C2 10 nop
387: 379 0000E3C3 # asm("nop");
388: 380 0000E3C3 10 nop
389: 381 0000E3C4 # asm("nop"); /* ... storing the result */
390: 382 0000E3C4 10 nop
391: 383 0000E3C5 # asm("stf _sgl_st_acc"); /* store the result */
392: 384 0000E3C5 26 effffffcd9 stf _sgl_st_acc
393: 385 0000E3CB # if( force_loop )
394: 386 0000E3CB 5d effffffcd3 tstl _force_loop
395: 387 0000E3D1 31 02 jeql L273
396: 388 0000E3D3 # asm("brb _subf_3_lp1");; /* loop on the error */
397: 389 0000E3D3 11 e0 brb _subf_3_lp1
398: 390 0000E3D5 L273:
399: 391 0000E3D5 # /*
400: 392 0000E3D5 # * end error loop - test the results
401: 393 0000E3D5 # */
402: 394 0000E3D5 # if( sgl_st_acc != sgl_expected ) { /* COMPARE the values */
403: 395 0000E3D5 1d effffffcc9 effffffcc4 cmpl _sgl_st_acc,_sgl_expected
404: 396 0000E3E0 21 03 13 0086 jeql L274
405: 397 0000E3E5 # errcnt++; /* bump the error count */
406: 398 0000E3E5 6d effffffcb9 incl _errcnt
407: 399 0000E3EB # if( prt_error ) {
408: 400 0000E3EB 5d effffffcb3 tstl _prt_error
409: 401 0000E3F1 31 55 jeql L275
410: 402 0000E3F3 # writes(" \n"); /* start a new print line */
411: 403 0000E3F3 .data 1
412: 404 00000db1 * L276:
413: 405 00000db1 * 200A00 .ascii " \12\0"
414: 406 00000db4 * .text
415: 407 0000E3F3 dd 8f00000db1 pushl $L276
416: 408 0000E3F9 fe 08 effffffca4 callf $8,_writes
417: 409 0000E400 # writes("cycle: ");
418: 410 0000E400 .data 1
419: 411 00000db4 * L277:
420: 412 00000db4 * 6379636C653A2000 .ascii "cycle: \0"
421: 413 00000dbc * .text
422: 414 0000E400 dd 8f00000db4 pushl $L277
423: 415 0000E406 fe 08 effffffc97 callf $8,_writes
424: 416 0000E40D # writed( cycle );
425: 417 0000E40D dd effffffc91 pushl _cycle
426: 418 0000E413 fe 08 effffffc8a callf $8,_writed
427: 419 0000E41A # writes(" SUBF test ");
428: 420 0000E41A .data 1
429: 421 00000dbc * L278:
430: 422 00000dbc * 2020535542462074657374200 .ascii " SUBF test \0"
431: 0
432: 423 00000dc9 * .text
433: 424 0000E41A dd 8f00000dbc pushl $L278
434: 425 0000E420 fe 08 effffffc7d callf $8,_writes
435: 426 0000E427 # writed( test_no );
436: 427 0000E427 dd effffffc77 pushl _test_no
437: 428 0000E42D fe 08 effffffc70 callf $8,_writed
438: 429 0000E434 # writes(", subtest 3 (Cache Data - 3 NOPS) - BAD FINAL ACC\n");
439: 430 0000E434 .data 1
440: 431 00000dc9 * L279:
441: 432 00000dc9 * 2C20737562746573742033202 .ascii ", subtest 3 (Cache Data - 3 NOPS) - BAD FINAL ACC\12\0"
442: 843616368652044617461202D
443: 2033204E4F505329202D20424
444: 1442046494E414C204143430A
445: 00
446: 433 00000dfc * .text
447: 434 0000E434 dd 8f00000dc9 pushl $L279
448: 435 0000E43A fe 08 effffffc63 callf $8,_writes
449: 436 0000E441 # print_subf_data();
450: 437 0000E441 fe 04 ef0000082c callf $4,_print_subf_data
451: 438 0000E448 # }
452: 439 0000E448 # if( halt_flg )
453: 440 0000E448 L275:
454: 441 0000E448 5d effffffc56 tstl _halt_flg
455: 442 0000E44E 31 09 jeql L280
456: 443 0000E450 # subf_er_halt( BAD_ACC_HLT ); /* halt on the error */
457: 444 0000E450 dd 01 pushl $1
458: 445 0000E452 fe 08 ef000008b9 callf $8,_subf_er_halt
459: 446 0000E459 # if( loop_on_err ) {
460: 447 0000E459 L280:
461: 448 0000E459 5d effffffc45 tstl _loop_on_err
462: 449 0000E45F 31 0a jeql L281
463: 450 0000E461 # force_loop = TRUE; /* set the force loop flag */
464: 451 0000E461 0d 01 effffffc3c movl $1,_force_loop
465: 452 0000E468 # asm("brw _subf_3_lp1");; /* and loop on the error */
466: 453 0000E468 13 ff4a brw _subf_3_lp1
467: 454 0000E46B # } /* end of loop on error */
468: 455 0000E46B # } /* end of compare error */
469: 456 0000E46B L281:
470: 457 0000E46B # } /* end of WHILE loop */
471: 458 0000E46B L274:
472: 459 0000E46B L270:
473: 460 0000E46B 6d effffffc33 incl _index
474: 461 0000E471 13 fef8 jbr L272
475: 462 0000E474 L271:
476: 463 0000E474 # } /* end of subtest 3 */
477: 464 0000E474 40 ret#2
478: 465 0000E475 .set L266,0x0
479: 466 0000E475 L268:
480: 467 0000E475 13 fee1 jbr L269
481: 468 0000E478 .data
482: 469 00000d28 * .text
483: 470 0000E478 .align 1
484: 471 0000E478 .globl _subf_4
485: 472 0000E478 _subf_4:
486: 473 0000E478 0000 .word L282
487: 474 0000E47A #
488: 475 0000E47A #
489: 476 0000E47A #
490: 477 0000E47A # /************************************************************************
491: 478 0000E47A # *
492: 479 0000E47A # * SUBTEST 4 - Wait 2 NOPs before storing the results
493: 480 0000E47A # *
494: 481 0000E47A # ************************************************************************/
495: 482 0000E47A # subf_4()
496: 483 0000E47A # {
497: 484 0000E47A 13 011b jbr L284
498: 485 0000E47D L285:
499: 486 0000E47D # force_loop = FALSE;
500: 487 0000E47D 4d effffffc21 clrl _force_loop
501: 488 0000E483 # subtest = 4;
502: 489 0000E483 0d 04 effffffc1a movl $4,_subtest
503: 490 0000E48A # for( index = 0; index < max_subf_1_index; index++ ) {
504: 491 0000E48A 4d effffffc14 clrl _index
505: 492 0000E490 L288:
506: 493 0000E490 1d effffffc0e effffffc09 cmpl _index,_max_subf_1_index
507: 494 0000E49B 91 03 13 00f7 jgeq L287
508: 495 0000E4A0 # sgl_ld_acc = subf_1_data[index].op_1; /* get operand 1 */
509: 496 0000E4A0 5c 0c effffffbfd 50 mull3 $12,_index,r0
510: 497 0000E4A8 0d e000000000 effffffbf1 movl _subf_1_data(r0),_sgl_ld_acc
511: 498 0000E4B3 # sgl_value_1 = subf_1_data[index].op_2; /* get operand 2 */
512: 499 0000E4B3 5c 0c effffffbea 50 mull3 $12,_index,r0
513: 500 0000E4BB 0d e000000004 effffffbde movl _subf_1_data+4(r0),_sgl_value_1
514: 501 0000E4C6 # sgl_expected = subf_1_data[index].exp; /* get expected result */
515: 502 0000E4C6 5c 0c effffffbd7 50 mull3 $12,_index,r0
516: 503 0000E4CE 0d e000000008 effffffbcb movl _subf_1_data+8(r0),_sgl_expected
517: 504 0000E4D9 # /*
518: 505 0000E4D9 # * If LOOP ON ERROR is set, this is the loop for this subtest.
519: 506 0000E4D9 # * The force loop flag is set after the first error.
520: 507 0000E4D9 # */
521: 508 0000E4D9 # asm("_subf_4_lp1:");
522: 509 0000E4D9 _subf_4_lp1:
523: 510 0000E4D9 # asm("ldf _sgl_ld_acc"); /* load the 1st operand */
524: 511 0000E4D9 06 effffffbc5 ldf _sgl_ld_acc
525: 512 0000E4DF # asm("nop"); /* delay */
526: 513 0000E4DF 10 nop
527: 514 0000E4E0 # asm("subf _sgl_value_1"); /* subract the 2nd operand */
528: 515 0000E4E0 d6 effffffbbe subf _sgl_value_1
529: 516 0000E4E6 # asm("nop"); /* delay before ... */
530: 517 0000E4E6 10 nop
531: 518 0000E4E7 # asm("nop"); /* ... storing the result */
532: 519 0000E4E7 10 nop
533: 520 0000E4E8 # asm("stf _sgl_st_acc"); /* store the result */
534: 521 0000E4E8 26 effffffbb6 stf _sgl_st_acc
535: 522 0000E4EE # if( force_loop )
536: 523 0000E4EE 5d effffffbb0 tstl _force_loop
537: 524 0000E4F4 31 02 jeql L289
538: 525 0000E4F6 # asm("brb _subf_4_lp1");; /* loop on the error */
539: 526 0000E4F6 11 e1 brb _subf_4_lp1
540: 527 0000E4F8 L289:
541: 528 0000E4F8 # /*
542: 529 0000E4F8 # * end error loop - test the results
543: 530 0000E4F8 # */
544: 531 0000E4F8 # if( sgl_st_acc != sgl_expected ) { /* COMPARE the values */
545: 532 0000E4F8 1d effffffba6 effffffba1 cmpl _sgl_st_acc,_sgl_expected
546: 533 0000E503 21 03 13 0086 jeql L290
547: 534 0000E508 # errcnt++; /* bump the error count */
548: 535 0000E508 6d effffffb96 incl _errcnt
549: 536 0000E50E # if( prt_error ) {
550: 537 0000E50E 5d effffffb90 tstl _prt_error
551: 538 0000E514 31 55 jeql L291
552: 539 0000E516 # writes(" \n"); /* start a new print line */
553: 540 0000E516 .data 1
554: 541 00000dfc * L292:
555: 542 00000dfc * 200A00 .ascii " \12\0"
556: 543 00000dff * .text
557: 544 0000E516 dd 8f00000dfc pushl $L292
558: 545 0000E51C fe 08 effffffb81 callf $8,_writes
559: 546 0000E523 # writes("cycle: ");
560: 547 0000E523 .data 1
561: 548 00000dff * L293:
562: 549 00000dff * 6379636C653A2000 .ascii "cycle: \0"
563: 550 00000e07 * .text
564: 551 0000E523 dd 8f00000dff pushl $L293
565: 552 0000E529 fe 08 effffffb74 callf $8,_writes
566: 553 0000E530 # writed( cycle );
567: 554 0000E530 dd effffffb6e pushl _cycle
568: 555 0000E536 fe 08 effffffb67 callf $8,_writed
569: 556 0000E53D # writes(" SUBF test ");
570: 557 0000E53D .data 1
571: 558 00000e07 * L294:
572: 559 00000e07 * 2020535542462074657374200 .ascii " SUBF test \0"
573: 0
574: 560 00000e14 * .text
575: 561 0000E53D dd 8f00000e07 pushl $L294
576: 562 0000E543 fe 08 effffffb5a callf $8,_writes
577: 563 0000E54A # writed( test_no );
578: 564 0000E54A dd effffffb54 pushl _test_no
579: 565 0000E550 fe 08 effffffb4d callf $8,_writed
580: 566 0000E557 # writes(", subtest 4 (Cache Data - 2 NOPS) - BAD FINAL ACC\n");
581: 567 0000E557 .data 1
582: 568 00000e14 * L295:
583: 569 00000e14 * 2C20737562746573742034202 .ascii ", subtest 4 (Cache Data - 2 NOPS) - BAD FINAL ACC\12\0"
584: 843616368652044617461202D
585: 2032204E4F505329202D20424
586: 1442046494E414C204143430A
587: 00
588: 570 00000e47 * .text
589: 571 0000E557 dd 8f00000e14 pushl $L295
590: 572 0000E55D fe 08 effffffb40 callf $8,_writes
591: 573 0000E564 # print_subf_data();
592: 574 0000E564 fe 04 ef00000709 callf $4,_print_subf_data
593: 575 0000E56B # }
594: 576 0000E56B # if( halt_flg )
595: 577 0000E56B L291:
596: 578 0000E56B 5d effffffb33 tstl _halt_flg
597: 579 0000E571 31 09 jeql L296
598: 580 0000E573 # subf_er_halt( BAD_ACC_HLT ); /* halt on the error */
599: 581 0000E573 dd 01 pushl $1
600: 582 0000E575 fe 08 ef00000796 callf $8,_subf_er_halt
601: 583 0000E57C # if( loop_on_err ) {
602: 584 0000E57C L296:
603: 585 0000E57C 5d effffffb22 tstl _loop_on_err
604: 586 0000E582 31 0a jeql L297
605: 587 0000E584 # force_loop = TRUE; /* set the force loop flag */
606: 588 0000E584 0d 01 effffffb19 movl $1,_force_loop
607: 589 0000E58B # asm("brw _subf_4_lp1");; /* and loop on the error */
608: 590 0000E58B 13 ff4b brw _subf_4_lp1
609: 591 0000E58E # } /* end of loop on error */
610: 592 0000E58E # } /* end of compare error */
611: 593 0000E58E L297:
612: 594 0000E58E # } /* end of WHILE loop */
613: 595 0000E58E L290:
614: 596 0000E58E L286:
615: 597 0000E58E 6d effffffb10 incl _index
616: 598 0000E594 13 fef9 jbr L288
617: 599 0000E597 L287:
618: 600 0000E597 # } /* end of subtest 4 */
619: 601 0000E597 40 ret#2
620: 602 0000E598 .set L282,0x0
621: 603 0000E598 L284:
622: 604 0000E598 13 fee2 jbr L285
623: 605 0000E59B .data
624: 606 00000d28 * .text
625: 607 0000E59B 00 .align 1
626: 608 0000E59C .globl _subf_5
627: 609 0000E59C _subf_5:
628: 610 0000E59C 0000 .word L298
629: 611 0000E59E #
630: 612 0000E59E #
631: 613 0000E59E #
632: 614 0000E59E # /************************************************************************
633: 615 0000E59E # *
634: 616 0000E59E # * SUBTEST 5 - Wait 1 NOP before storing the results
635: 617 0000E59E # *
636: 618 0000E59E # ************************************************************************/
637: 619 0000E59E # subf_5()
638: 620 0000E59E # {
639: 621 0000E59E 13 011a jbr L300
640: 622 0000E5A1 L301:
641: 623 0000E5A1 # force_loop = FALSE;
642: 624 0000E5A1 4d effffffafd clrl _force_loop
643: 625 0000E5A7 # subtest = 5;
644: 626 0000E5A7 0d 05 effffffaf6 movl $5,_subtest
645: 627 0000E5AE # for( index = 0; index < max_subf_1_index; index++ ) {
646: 628 0000E5AE 4d effffffaf0 clrl _index
647: 629 0000E5B4 L304:
648: 630 0000E5B4 1d effffffaea effffffae5 cmpl _index,_max_subf_1_index
649: 631 0000E5BF 91 03 13 00f6 jgeq L303
650: 632 0000E5C4 # sgl_ld_acc = subf_1_data[index].op_1; /* get operand 1 */
651: 633 0000E5C4 5c 0c effffffad9 50 mull3 $12,_index,r0
652: 634 0000E5CC 0d e000000000 effffffacd movl _subf_1_data(r0),_sgl_ld_acc
653: 635 0000E5D7 # sgl_value_1 = subf_1_data[index].op_2; /* get operand 2 */
654: 636 0000E5D7 5c 0c effffffac6 50 mull3 $12,_index,r0
655: 637 0000E5DF 0d e000000004 effffffaba movl _subf_1_data+4(r0),_sgl_value_1
656: 638 0000E5EA # sgl_expected = subf_1_data[index].exp; /* get expected result */
657: 639 0000E5EA 5c 0c effffffab3 50 mull3 $12,_index,r0
658: 640 0000E5F2 0d e000000008 effffffaa7 movl _subf_1_data+8(r0),_sgl_expected
659: 641 0000E5FD # /*
660: 642 0000E5FD # * If LOOP ON ERROR is set, this is the loop for this subtest.
661: 643 0000E5FD # * The force loop flag is set after the first error.
662: 644 0000E5FD # */
663: 645 0000E5FD # asm("_subf_5_lp1:");
664: 646 0000E5FD _subf_5_lp1:
665: 647 0000E5FD # asm("ldf _sgl_ld_acc"); /* load the 1st operand */
666: 648 0000E5FD 06 effffffaa1 ldf _sgl_ld_acc
667: 649 0000E603 # asm("nop"); /* delay */
668: 650 0000E603 10 nop
669: 651 0000E604 # asm("subf _sgl_value_1"); /* subract the 2nd operand */
670: 652 0000E604 d6 effffffa9a subf _sgl_value_1
671: 653 0000E60A # asm("nop"); /* delay before storing */
672: 654 0000E60A 10 nop
673: 655 0000E60B # asm("stf _sgl_st_acc"); /* store the result */
674: 656 0000E60B 26 effffffa93 stf _sgl_st_acc
675: 657 0000E611 # if( force_loop )
676: 658 0000E611 5d effffffa8d tstl _force_loop
677: 659 0000E617 31 02 jeql L305
678: 660 0000E619 # asm("brb _subf_5_lp1");; /* loop on the error */
679: 661 0000E619 11 e2 brb _subf_5_lp1
680: 662 0000E61B L305:
681: 663 0000E61B # /*
682: 664 0000E61B # * end error loop - test the results
683: 665 0000E61B # */
684: 666 0000E61B # if( sgl_st_acc != sgl_expected ) { /* COMPARE the values */
685: 667 0000E61B 1d effffffa83 effffffa7e cmpl _sgl_st_acc,_sgl_expected
686: 668 0000E626 21 03 13 0086 jeql L306
687: 669 0000E62B # errcnt++; /* bump the error count */
688: 670 0000E62B 6d effffffa73 incl _errcnt
689: 671 0000E631 # if( prt_error ) {
690: 672 0000E631 5d effffffa6d tstl _prt_error
691: 673 0000E637 31 55 jeql L307
692: 674 0000E639 # writes(" \n"); /* start a new print line */
693: 675 0000E639 .data 1
694: 676 00000e47 * L308:
695: 677 00000e47 * 200A00 .ascii " \12\0"
696: 678 00000e4a * .text
697: 679 0000E639 dd 8f00000e47 pushl $L308
698: 680 0000E63F fe 08 effffffa5e callf $8,_writes
699: 681 0000E646 # writes("cycle: ");
700: 682 0000E646 .data 1
701: 683 00000e4a * L309:
702: 684 00000e4a * 6379636C653A2000 .ascii "cycle: \0"
703: 685 00000e52 * .text
704: 686 0000E646 dd 8f00000e4a pushl $L309
705: 687 0000E64C fe 08 effffffa51 callf $8,_writes
706: 688 0000E653 # writed( cycle );
707: 689 0000E653 dd effffffa4b pushl _cycle
708: 690 0000E659 fe 08 effffffa44 callf $8,_writed
709: 691 0000E660 # writes(" SUBF test ");
710: 692 0000E660 .data 1
711: 693 00000e52 * L310:
712: 694 00000e52 * 2020535542462074657374200 .ascii " SUBF test \0"
713: 0
714: 695 00000e5f * .text
715: 696 0000E660 dd 8f00000e52 pushl $L310
716: 697 0000E666 fe 08 effffffa37 callf $8,_writes
717: 698 0000E66D # writed( test_no );
718: 699 0000E66D dd effffffa31 pushl _test_no
719: 700 0000E673 fe 08 effffffa2a callf $8,_writed
720: 701 0000E67A # writes(", subtest 5 (Cache Data - 1 NOPS) - BAD FINAL ACC\n");
721: 702 0000E67A .data 1
722: 703 00000e5f * L311:
723: 704 00000e5f * 2C20737562746573742035202 .ascii ", subtest 5 (Cache Data - 1 NOPS) - BAD FINAL ACC\12\0"
724: 843616368652044617461202D
725: 2031204E4F505329202D20424
726: 1442046494E414C204143430A
727: 00
728: 705 00000e92 * .text
729: 706 0000E67A dd 8f00000e5f pushl $L311
730: 707 0000E680 fe 08 effffffa1d callf $8,_writes
731: 708 0000E687 # print_subf_data();
732: 709 0000E687 fe 04 ef000005e6 callf $4,_print_subf_data
733: 710 0000E68E # }
734: 711 0000E68E # if( halt_flg )
735: 712 0000E68E L307:
736: 713 0000E68E 5d effffffa10 tstl _halt_flg
737: 714 0000E694 31 09 jeql L312
738: 715 0000E696 # subf_er_halt( BAD_ACC_HLT ); /* halt on the error */
739: 716 0000E696 dd 01 pushl $1
740: 717 0000E698 fe 08 ef00000673 callf $8,_subf_er_halt
741: 718 0000E69F # if( loop_on_err ) {
742: 719 0000E69F L312:
743: 720 0000E69F 5d effffff9ff tstl _loop_on_err
744: 721 0000E6A5 31 0a jeql L313
745: 722 0000E6A7 # force_loop = TRUE; /* set the force loop flag */
746: 723 0000E6A7 0d 01 effffff9f6 movl $1,_force_loop
747: 724 0000E6AE # asm("brw _subf_5_lp1");; /* and loop on the error */
748: 725 0000E6AE 13 ff4c brw _subf_5_lp1
749: 726 0000E6B1 # } /* end of loop on error */
750: 727 0000E6B1 # } /* end of compare error */
751: 728 0000E6B1 L313:
752: 729 0000E6B1 # } /* end of WHILE loop */
753: 730 0000E6B1 L306:
754: 731 0000E6B1 L302:
755: 732 0000E6B1 6d effffff9ed incl _index
756: 733 0000E6B7 13 fefa jbr L304
757: 734 0000E6BA L303:
758: 735 0000E6BA # } /* end of subtest 5 */
759: 736 0000E6BA 40 ret#2
760: 737 0000E6BB .set L298,0x0
761: 738 0000E6BB L300:
762: 739 0000E6BB 13 fee3 jbr L301
763: 740 0000E6BE .data
764: 741 00000d28 * .text
765: 742 0000E6BE .align 1
766: 743 0000E6BE .globl _subf_6
767: 744 0000E6BE _subf_6:
768: 745 0000E6BE 0000 .word L314
769: 746 0000E6C0 #
770: 747 0000E6C0 #
771: 748 0000E6C0 #
772: 749 0000E6C0 # /************************************************************************
773: 750 0000E6C0 # *
774: 751 0000E6C0 # * SUBTEST 6 - Check for register corruption
775: 752 0000E6C0 # *
776: 753 0000E6C0 # ************************************************************************/
777: 754 0000E6C0 # subf_6()
778: 755 0000E6C0 # {
779: 756 0000E6C0 13 01a7 jbr L316
780: 757 0000E6C3 L317:
781: 758 0000E6C3 # force_loop = FALSE; /* clear force_loop flg */
782: 759 0000E6C3 4d effffff9db clrl _force_loop
783: 760 0000E6C9 # subtest = 6;
784: 761 0000E6C9 0d 06 effffff9d4 movl $6,_subtest
785: 762 0000E6D0 # fill_reg_buf( load_regs ); /* get patterns for regs */
786: 763 0000E6D0 dd 8f00000000 pushl $_load_regs
787: 764 0000E6D6 fe 08 effffff9c7 callf $8,_fill_reg_buf
788: 765 0000E6DD # index = 0;
789: 766 0000E6DD 4d effffff9c1 clrl _index
790: 767 0000E6E3 # sgl_ld_acc = subf_1_data[0].op_1; /* get operand 1 */
791: 768 0000E6E3 0d effffff9bb effffff9b6 movl _subf_1_data,_sgl_ld_acc
792: 769 0000E6EE # sgl_value_1 = subf_1_data[0].op_2; /* get operand 2 */
793: 770 0000E6EE 0d effffff9b4 effffff9ab movl _subf_1_data+4,_sgl_value_1
794: 771 0000E6F9 # sgl_expected = subf_1_data[0].exp; /* get expected result */
795: 772 0000E6F9 0d effffff9ad effffff9a0 movl _subf_1_data+8,_sgl_expected
796: 773 0000E704 # /*
797: 774 0000E704 # * If LOOP ON ERROR is set, this is the loop for this subtest.
798: 775 0000E704 # * The force loop flag is set after the first error.
799: 776 0000E704 # */
800: 777 0000E704 # asm("_subf_6_lp1:");
801: 778 0000E704 _subf_6_lp1:
802: 779 0000E704 # asm("ldf _sgl_ld_acc"); /* LOAD the accumulator */
803: 780 0000E704 06 effffff99a ldf _sgl_ld_acc
804: 781 0000E70A # asm("nop");
805: 782 0000E70A 10 nop
806: 783 0000E70B # asm("loadr $0x1fff,_load_regs"); /* load regs 0 - 12 */
807: 784 0000E70B ab 891fff effffff990 loadr $0x1fff,_load_regs
808: 785 0000E714 # asm("nop");
809: 786 0000E714 10 nop
810: 787 0000E715 # asm("subf _sgl_value_1"); /* do the subraction */
811: 788 0000E715 d6 effffff989 subf _sgl_value_1
812: 789 0000E71B # asm("nop");
813: 790 0000E71B 10 nop
814: 791 0000E71C # asm("storer $0x1fff,_store_regs"); /* store regs 0 - 12 */
815: 792 0000E71C bb 891fff effffff97f storer $0x1fff,_store_regs
816: 793 0000E725 # asm("stf _sgl_st_acc"); /* save the accumulator */
817: 794 0000E725 26 effffff979 stf _sgl_st_acc
818: 795 0000E72B # if( force_loop )
819: 796 0000E72B 5d effffff973 tstl _force_loop
820: 797 0000E731 31 02 jeql L319
821: 798 0000E733 # asm("brb _subf_6_lp1");; /* loop on the error */
822: 799 0000E733 11 cf brb _subf_6_lp1
823: 800 0000E735 L319:
824: 801 0000E735 # /*
825: 802 0000E735 # * Now compare the stored register values to those that were loaded
826: 803 0000E735 # */
827: 804 0000E735 # index2 = 0;
828: 805 0000E735 4d effffff969 clrl _index2
829: 806 0000E73B # while( (load_regs[index2] == store_regs[index2]) && (index2 < 13) )
830: 807 0000E73B L320:
831: 808 0000E73B 0d effffff963 50 movl _index2,r0
832: 809 0000E742 0d effffff95c 51 movl _index2,r1
833: 810 0000E749 1d 40effffff954 cmpl _load_regs[r0],_store_regs[r1]
834: 41effffff94e
835: 811 0000E756 21 11 jneq L321
836: 812 0000E758 1d effffff946 0d cmpl _index2,$13
837: 813 0000E75F 81 08 jgeq L321
838: 814 0000E761 # index2++; /* check reg values */
839: 815 0000E761 6d effffff93d incl _index2
840: 816 0000E767 11 d2 jbr L320
841: 817 0000E769 L321:
842: 818 0000E769 # if( index2 < 13 ) { /* error if index2 < 13 */
843: 819 0000E769 1d effffff935 0d cmpl _index2,$13
844: 820 0000E770 91 03 13 00f4 jgeq L322
845: 821 0000E775 # errcnt++; /* bump the error count */
846: 822 0000E775 6d effffff929 incl _errcnt
847: 823 0000E77B # if( prt_error ) {
848: 824 0000E77B 5d effffff923 tstl _prt_error
849: 825 0000E781 21 03 13 00c0 jeql L323
850: 826 0000E786 # writes(" \n"); /* start a new print line */
851: 827 0000E786 .data 1
852: 828 00000e92 * L324:
853: 829 00000e92 * 200A00 .ascii " \12\0"
854: 830 00000e95 * .text
855: 831 0000E786 dd 8f00000e92 pushl $L324
856: 832 0000E78C fe 08 effffff911 callf $8,_writes
857: 833 0000E793 # writes("cycle: ");
858: 834 0000E793 .data 1
859: 835 00000e95 * L325:
860: 836 00000e95 * 6379636C653A2000 .ascii "cycle: \0"
861: 837 00000e9d * .text
862: 838 0000E793 dd 8f00000e95 pushl $L325
863: 839 0000E799 fe 08 effffff904 callf $8,_writes
864: 840 0000E7A0 # writed( cycle );
865: 841 0000E7A0 dd effffff8fe pushl _cycle
866: 842 0000E7A6 fe 08 effffff8f7 callf $8,_writed
867: 843 0000E7AD # writes(" SUBF test ");
868: 844 0000E7AD .data 1
869: 845 00000e9d * L326:
870: 846 00000e9d * 2020535542462074657374200 .ascii " SUBF test \0"
871: 0
872: 847 00000eaa * .text
873: 848 0000E7AD dd 8f00000e9d pushl $L326
874: 849 0000E7B3 fe 08 effffff8ea callf $8,_writes
875: 850 0000E7BA # writed( test_no );
876: 851 0000E7BA dd effffff8e4 pushl _test_no
877: 852 0000E7C0 fe 08 effffff8dd callf $8,_writed
878: 853 0000E7C7 # writes(", subtest 6 - A REGISTER WAS MODIFIED\n");
879: 854 0000E7C7 .data 1
880: 855 00000eaa * L327:
881: 856 00000eaa * 2C20737562746573742036202 .ascii ", subtest 6 - A REGISTER WAS MODIFIED\12\0"
882: D204120524547495354455220
883: 574153204D4F4449464945440
884: A00
885: 857 00000ed1 * .text
886: 858 0000E7C7 dd 8f00000eaa pushl $L327
887: 859 0000E7CD fe 08 effffff8d0 callf $8,_writes
888: 860 0000E7D4 # print_subf_data(); /* print the operands */
889: 861 0000E7D4 fe 04 ef00000499 callf $4,_print_subf_data
890: 862 0000E7DB # writes("register "); /* print the information */
891: 863 0000E7DB .data 1
892: 864 00000ed1 * L328:
893: 865 00000ed1 * 72656769737465722000 .ascii "register \0"
894: 866 00000edb * .text
895: 867 0000E7DB dd 8f00000ed1 pushl $L328
896: 868 0000E7E1 fe 08 effffff8bc callf $8,_writes
897: 869 0000E7E8 # writed( index2 ); /* about the corrupted */
898: 870 0000E7E8 dd effffff8b6 pushl _index2
899: 871 0000E7EE fe 08 effffff8af callf $8,_writed
900: 872 0000E7F5 # writes(" = "); /* register */
901: 873 0000E7F5 .data 1
902: 874 00000edb * L329:
903: 875 00000edb * 203D2000 .ascii " = \0"
904: 876 00000edf * .text
905: 877 0000E7F5 dd 8f00000edb pushl $L329
906: 878 0000E7FB fe 08 effffff8a2 callf $8,_writes
907: 879 0000E802 # write32h( store_regs[index2] );
908: 880 0000E802 0d effffff89c 50 movl _index2,r0
909: 881 0000E809 dd 40effffff894 pushl _store_regs[r0]
910: 882 0000E810 fe 08 effffff88d callf $8,_write32h
911: 883 0000E817 # writes(", should be = ");
912: 884 0000E817 .data 1
913: 885 00000edf * L331:
914: 886 00000edf * 2C202073686F756C642062652 .ascii ", should be = \0"
915: 03D2000
916: 887 00000eef * .text
917: 888 0000E817 dd 8f00000edf pushl $L331
918: 889 0000E81D fe 08 effffff880 callf $8,_writes
919: 890 0000E824 # write32h( load_regs[index2] );
920: 891 0000E824 0d effffff87a 50 movl _index2,r0
921: 892 0000E82B dd 40effffff872 pushl _load_regs[r0]
922: 893 0000E832 fe 08 effffff86b callf $8,_write32h
923: 894 0000E839 # writes("\n");
924: 895 0000E839 .data 1
925: 896 00000eef * L332:
926: 897 00000eef * 0A00 .ascii "\12\0"
927: 898 00000ef1 * .text
928: 899 0000E839 dd 8f00000eef pushl $L332
929: 900 0000E83F fe 08 effffff85e callf $8,_writes
930: 901 0000E846 # }
931: 902 0000E846 # if( halt_flg )
932: 903 0000E846 L323:
933: 904 0000E846 5d effffff858 tstl _halt_flg
934: 905 0000E84C 31 09 jeql L333
935: 906 0000E84E # subf_er_halt( BAD_REG_HLT ); /* halt on the error */
936: 907 0000E84E dd 02 pushl $2
937: 908 0000E850 fe 08 ef000004bb callf $8,_subf_er_halt
938: 909 0000E857 # if( loop_on_err ) {
939: 910 0000E857 L333:
940: 911 0000E857 5d effffff847 tstl _loop_on_err
941: 912 0000E85D 31 0a jeql L334
942: 913 0000E85F # force_loop = TRUE; /* set the force loop flag */
943: 914 0000E85F 0d 01 effffff83e movl $1,_force_loop
944: 915 0000E866 # asm("brw _subf_6_lp1");; /* and loop on the error */
945: 916 0000E866 13 fe9b brw _subf_6_lp1
946: 917 0000E869 # } /* end of loop on error */
947: 918 0000E869 # } /* end of register corruption error */
948: 919 0000E869 L334:
949: 920 0000E869 # } /* end of subtest 6 */
950: 921 0000E869 L322:
951: 922 0000E869 40 ret#2
952: 923 0000E86A .set L314,0x0
953: 924 0000E86A L316:
954: 925 0000E86A 13 fe56 jbr L317
955: 926 0000E86D .data
956: 927 00000d28 * .text
957: 928 0000E86D 00 .align 1
958: 929 0000E86E .globl _subf_7
959: 930 0000E86E _subf_7:
960: 931 0000E86E 0000 .word L335
961: 932 0000E870 #
962: 933 0000E870 #
963: 934 0000E870 #
964: 935 0000E870 # /************************************************************************
965: 936 0000E870 # *
966: 937 0000E870 # * SUBTEST 7 - Check for PSL corruption
967: 938 0000E870 # *
968: 939 0000E870 # ************************************************************************/
969: 940 0000E870 # subf_7()
970: 941 0000E870 # {
971: 942 0000E870 13 01b1 jbr L337
972: 943 0000E873 L338:
973: 944 0000E873 # force_loop = FALSE; /* clear force_loop flg */
974: 945 0000E873 4d effffff82b clrl _force_loop
975: 946 0000E879 # subtest = 7;
976: 947 0000E879 0d 07 effffff824 movl $7,_subtest
977: 948 0000E880 # fill_reg_buf( load_regs ); /* get patterns for regs */
978: 949 0000E880 dd 8f00000000 pushl $_load_regs
979: 950 0000E886 fe 08 effffff817 callf $8,_fill_reg_buf
980: 951 0000E88D # for( index = 0; index < 3; index++ ) {
981: 952 0000E88D 4d effffff811 clrl _index
982: 953 0000E893 L341:
983: 954 0000E893 1d effffff80b 03 cmpl _index,$3
984: 955 0000E89A 91 03 13 0184 jgeq L340
985: 956 0000E89F # sgl_ld_acc = subf_1_data[index].op_1; /* get operand 1 */
986: 957 0000E89F 5c 0c effffff7fe 50 mull3 $12,_index,r0
987: 958 0000E8A7 0d e000000000 effffff7f2 movl _subf_1_data(r0),_sgl_ld_acc
988: 959 0000E8B2 # sgl_value_1 = subf_1_data[index].op_2; /* get operand 2 */
989: 960 0000E8B2 5c 0c effffff7eb 50 mull3 $12,_index,r0
990: 961 0000E8BA 0d e000000004 effffff7df movl _subf_1_data+4(r0),_sgl_value_1
991: 962 0000E8C5 # sgl_expected = subf_1_data[index].exp; /* get expected */
992: 963 0000E8C5 5c 0c effffff7d8 50 mull3 $12,_index,r0
993: 964 0000E8CD 0d e000000008 effffff7cc movl _subf_1_data+8(r0),_sgl_expected
994: 965 0000E8D8 # sgl_dummy1 = status_array[status_index]; /* status = +, -, 0 */
995: 966 0000E8D8 0d effffff7c6 50 movl _status_index,r0
996: 967 0000E8DF 0d 40effffff7be movl _status_array[r0],_sgl_dummy1
997: effffff7b9
998: 968 0000E8EB # /*
999: 969 0000E8EB # * If LOOP ON ERROR is set, this is the loop for this subtest.
1000: 970 0000E8EB # * The force loop flag is set after the first error.
1001: 971 0000E8EB # */
1002: 972 0000E8EB # asm("_subf_7_lp1:");
1003: 973 0000E8EB _subf_7_lp1:
1004: 974 0000E8EB # asm("ldf _sgl_ld_acc"); /* LOAD the accumulator */
1005: 975 0000E8EB 06 effffff7b3 ldf _sgl_ld_acc
1006: 976 0000E8F1 # asm("nop");
1007: 977 0000E8F1 10 nop
1008: 978 0000E8F2 # asm("tstl _sgl_dummy1"); /* set the PSL status */
1009: 979 0000E8F2 5d effffff7ac tstl _sgl_dummy1
1010: 980 0000E8F8 # asm("movpsl _init_psl"); /* save the initial PSL */
1011: 981 0000E8F8 cd effffff7a6 movpsl _init_psl
1012: 982 0000E8FE # asm("subf _sgl_value_1"); /* do the subract */
1013: 983 0000E8FE d6 effffff7a0 subf _sgl_value_1
1014: 984 0000E904 # asm("nop");
1015: 985 0000E904 10 nop
1016: 986 0000E905 # asm("movpsl _psl_val"); /* save the final PSL */
1017: 987 0000E905 cd effffff799 movpsl _psl_val
1018: 988 0000E90B # asm("stf _sgl_st_acc"); /* save the accumulator */
1019: 989 0000E90B 26 effffff793 stf _sgl_st_acc
1020: 990 0000E911 # if( force_loop )
1021: 991 0000E911 5d effffff78d tstl _force_loop
1022: 992 0000E917 31 02 jeql L342
1023: 993 0000E919 # asm("brb _subf_7_lp1");; /* loop on the error */
1024: 994 0000E919 11 d0 brb _subf_7_lp1
1025: 995 0000E91B L342:
1026: 996 0000E91B # /*
1027: 997 0000E91B # * Now compare the final PSL to the initial PSL -they should be the same
1028: 998 0000E91B # */
1029: 999 0000E91B # exp_psl = init_psl;
1030: 1000 0000E91B 0d effffff783 effffff77e movl _init_psl,_exp_psl
1031: 1001 0000E926 # if( psl_val != init_psl ) {
1032: 1002 0000E926 1d effffff778 effffff773 cmpl _psl_val,_init_psl
1033: 1003 0000E931 21 03 13 00e4 jeql L343
1034: 1004 0000E936 # errcnt++; /* bump the error count */
1035: 1005 0000E936 6d effffff768 incl _errcnt
1036: 1006 0000E93C # if( prt_error ) {
1037: 1007 0000E93C 5d effffff762 tstl _prt_error
1038: 1008 0000E942 21 03 13 00b0 jeql L344
1039: 1009 0000E947 # writes(" \n"); /* start a new print line */
1040: 1010 0000E947 .data 1
1041: 1011 00000ef1 * L345:
1042: 1012 00000ef1 * 200A00 .ascii " \12\0"
1043: 1013 00000ef4 * .text
1044: 1014 0000E947 dd 8f00000ef1 pushl $L345
1045: 1015 0000E94D fe 08 effffff750 callf $8,_writes
1046: 1016 0000E954 # writes("cycle: ");
1047: 1017 0000E954 .data 1
1048: 1018 00000ef4 * L346:
1049: 1019 00000ef4 * 6379636C653A2000 .ascii "cycle: \0"
1050: 1020 00000efc * .text
1051: 1021 0000E954 dd 8f00000ef4 pushl $L346
1052: 1022 0000E95A fe 08 effffff743 callf $8,_writes
1053: 1023 0000E961 # writed( cycle );
1054: 1024 0000E961 dd effffff73d pushl _cycle
1055: 1025 0000E967 fe 08 effffff736 callf $8,_writed
1056: 1026 0000E96E # writes(" SUBF test ");
1057: 1027 0000E96E .data 1
1058: 1028 00000efc * L347:
1059: 1029 00000efc * 2020535542462074657374200 .ascii " SUBF test \0"
1060: 0
1061: 1030 00000f09 * .text
1062: 1031 0000E96E dd 8f00000efc pushl $L347
1063: 1032 0000E974 fe 08 effffff729 callf $8,_writes
1064: 1033 0000E97B # writed( test_no );
1065: 1034 0000E97B dd effffff723 pushl _test_no
1066: 1035 0000E981 fe 08 effffff71c callf $8,_writed
1067: 1036 0000E988 # writes(", subtest 7 - INCORRECT FINAL PSL\n");
1068: 1037 0000E988 .data 1
1069: 1038 00000f09 * L348:
1070: 1039 00000f09 * 2C20737562746573742037202 .ascii ", subtest 7 - INCORRECT FINAL PSL\12\0"
1071: D20494E434F52524543542046
1072: 494E414C2050534C0A00
1073: 1040 00000f2c * .text
1074: 1041 0000E988 dd 8f00000f09 pushl $L348
1075: 1042 0000E98E fe 08 effffff70f callf $8,_writes
1076: 1043 0000E995 # print_subf_data(); /* print the operands */
1077: 1044 0000E995 fe 04 ef000002d8 callf $4,_print_subf_data
1078: 1045 0000E99C # writes("initial PSL = ");
1079: 1046 0000E99C .data 1
1080: 1047 00000f2c * L349:
1081: 1048 00000f2c * 696E697469616C2050534C203 .ascii "initial PSL = \0"
1082: D2000
1083: 1049 00000f3b * .text
1084: 1050 0000E99C dd 8f00000f2c pushl $L349
1085: 1051 0000E9A2 fe 08 effffff6fb callf $8,_writes
1086: 1052 0000E9A9 # write32h( init_psl );
1087: 1053 0000E9A9 dd effffff6f5 pushl _init_psl
1088: 1054 0000E9AF fe 08 effffff6ee callf $8,_write32h
1089: 1055 0000E9B6 # writes(", final PSL = ");
1090: 1056 0000E9B6 .data 1
1091: 1057 00000f3b * L350:
1092: 1058 00000f3b * 2C2066696E616C2050534C203 .ascii ", final PSL = \0"
1093: D2000
1094: 1059 00000f4a * .text
1095: 1060 0000E9B6 dd 8f00000f3b pushl $L350
1096: 1061 0000E9BC fe 08 effffff6e1 callf $8,_writes
1097: 1062 0000E9C3 # write32h( psl_val );
1098: 1063 0000E9C3 dd effffff6db pushl _psl_val
1099: 1064 0000E9C9 fe 08 effffff6d4 callf $8,_write32h
1100: 1065 0000E9D0 # writes(", expected PSL = ");
1101: 1066 0000E9D0 .data 1
1102: 1067 00000f4a * L351:
1103: 1068 00000f4a * 2C20657870656374656420505 .ascii ", expected PSL = \0"
1104: 34C203D2000
1105: 1069 00000f5c * .text
1106: 1070 0000E9D0 dd 8f00000f4a pushl $L351
1107: 1071 0000E9D6 fe 08 effffff6c7 callf $8,_writes
1108: 1072 0000E9DD # write32h( exp_psl );
1109: 1073 0000E9DD dd effffff6c1 pushl _exp_psl
1110: 1074 0000E9E3 fe 08 effffff6ba callf $8,_write32h
1111: 1075 0000E9EA # writes("\n");
1112: 1076 0000E9EA .data 1
1113: 1077 00000f5c * L352:
1114: 1078 00000f5c * 0A00 .ascii "\12\0"
1115: 1079 00000f5e * .text
1116: 1080 0000E9EA dd 8f00000f5c pushl $L352
1117: 1081 0000E9F0 fe 08 effffff6ad callf $8,_writes
1118: 1082 0000E9F7 # }
1119: 1083 0000E9F7 # if( halt_flg )
1120: 1084 0000E9F7 L344:
1121: 1085 0000E9F7 5d effffff6a7 tstl _halt_flg
1122: 1086 0000E9FD 31 09 jeql L353
1123: 1087 0000E9FF # subf_er_halt( BAD_PSL_HLT ); /* halt on the error */
1124: 1088 0000E9FF dd 03 pushl $3
1125: 1089 0000EA01 fe 08 ef0000030a callf $8,_subf_er_halt
1126: 1090 0000EA08 # if( loop_on_err ) {
1127: 1091 0000EA08 L353:
1128: 1092 0000EA08 5d effffff696 tstl _loop_on_err
1129: 1093 0000EA0E 31 0a jeql L354
1130: 1094 0000EA10 # force_loop = TRUE; /* set the force loop flag */
1131: 1095 0000EA10 0d 01 effffff68d movl $1,_force_loop
1132: 1096 0000EA17 # asm("brw _subf_7_lp1");; /* and loop on the error */
1133: 1097 0000EA17 13 fed1 brw _subf_7_lp1
1134: 1098 0000EA1A # } /* end of loop on error */
1135: 1099 0000EA1A # } /* end of PSL corruption error */
1136: 1100 0000EA1A L354:
1137: 1101 0000EA1A # } /* end of WHILE loop */
1138: 1102 0000EA1A L343:
1139: 1103 0000EA1A L339:
1140: 1104 0000EA1A 6d effffff684 incl _index
1141: 1105 0000EA20 13 fe70 jbr L341
1142: 1106 0000EA23 L340:
1143: 1107 0000EA23 # } /* end of subtest 7 */
1144: 1108 0000EA23 40 ret#2
1145: 1109 0000EA24 .set L335,0x0
1146: 1110 0000EA24 L337:
1147: 1111 0000EA24 13 fe4c jbr L338
1148: 1112 0000EA27 .data
1149: 1113 00000d28 * .text
1150: 1114 0000EA27 00 .align 1
1151: 1115 0000EA28 .globl _subf_8
1152: 1116 0000EA28 _subf_8:
1153: 1117 0000EA28 0000 .word L355
1154: 1118 0000EA2A #
1155: 1119 0000EA2A #
1156: 1120 0000EA2A #
1157: 1121 0000EA2A # /************************************************************************
1158: 1122 0000EA2A # *
1159: 1123 0000EA2A # * SUBTEST 8 - pipelined entry test
1160: 1124 0000EA2A # *
1161: 1125 0000EA2A # ************************************************************************/
1162: 1126 0000EA2A # subf_8()
1163: 1127 0000EA2A # {
1164: 1128 0000EA2A 13 011d jbr L357
1165: 1129 0000EA2D L358:
1166: 1130 0000EA2D # force_loop = FALSE;
1167: 1131 0000EA2D 4d effffff671 clrl _force_loop
1168: 1132 0000EA33 # subtest = 8;
1169: 1133 0000EA33 0d 08 effffff66a movl $8,_subtest
1170: 1134 0000EA3A # for( index = 0; index < max_subf_1_index; index++ ) {
1171: 1135 0000EA3A 4d effffff664 clrl _index
1172: 1136 0000EA40 L361:
1173: 1137 0000EA40 1d effffff65e effffff659 cmpl _index,_max_subf_1_index
1174: 1138 0000EA4B 91 03 13 00f9 jgeq L360
1175: 1139 0000EA50 # sgl_ld_acc = subf_1_data[index].op_1; /* get operand 1 */
1176: 1140 0000EA50 5c 0c effffff64d 50 mull3 $12,_index,r0
1177: 1141 0000EA58 0d e000000000 effffff641 movl _subf_1_data(r0),_sgl_ld_acc
1178: 1142 0000EA63 # sgl_value_1 = subf_1_data[index].op_2; /* get operand 2 */
1179: 1143 0000EA63 5c 0c effffff63a 50 mull3 $12,_index,r0
1180: 1144 0000EA6B 0d e000000004 effffff62e movl _subf_1_data+4(r0),_sgl_value_1
1181: 1145 0000EA76 # sgl_expected = subf_1_data[index].exp; /* get expected result */
1182: 1146 0000EA76 5c 0c effffff627 50 mull3 $12,_index,r0
1183: 1147 0000EA7E 0d e000000008 effffff61b movl _subf_1_data+8(r0),_sgl_expected
1184: 1148 0000EA89 # /*
1185: 1149 0000EA89 # * If LOOP ON ERROR is set, this is the loop for this subtest.
1186: 1150 0000EA89 # * The force loop flag is set after the first error.
1187: 1151 0000EA89 # */
1188: 1152 0000EA89 # asm("_subf_8_lp1:");
1189: 1153 0000EA89 _subf_8_lp1:
1190: 1154 0000EA89 # asm("movl $0,r0"); /* clear r0 */
1191: 1155 0000EA89 0d 00 50 movl $0,r0
1192: 1156 0000EA8C # asm("ldf r0"); /* load the Acc. with 0.0 */
1193: 1157 0000EA8C 06 50 ldf r0
1194: 1158 0000EA8E # asm("addf _sgl_ld_acc"); /* add the 1st operand */
1195: 1159 0000EA8E c6 effffff610 addf _sgl_ld_acc
1196: 1160 0000EA94 # asm("subf _sgl_value_1"); /* subract the 2nd operand */
1197: 1161 0000EA94 d6 effffff60a subf _sgl_value_1
1198: 1162 0000EA9A # asm("stf _sgl_st_acc"); /* store the result */
1199: 1163 0000EA9A 26 effffff604 stf _sgl_st_acc
1200: 1164 0000EAA0 # if( force_loop )
1201: 1165 0000EAA0 5d effffff5fe tstl _force_loop
1202: 1166 0000EAA6 31 02 jeql L362
1203: 1167 0000EAA8 # asm("brb _subf_8_lp1");; /* loop on the error */
1204: 1168 0000EAA8 11 df brb _subf_8_lp1
1205: 1169 0000EAAA L362:
1206: 1170 0000EAAA # /*
1207: 1171 0000EAAA # * end error loop - test the results
1208: 1172 0000EAAA # */
1209: 1173 0000EAAA # if( sgl_st_acc != sgl_expected ) { /* COMPARE the values */
1210: 1174 0000EAAA 1d effffff5f4 effffff5ef cmpl _sgl_st_acc,_sgl_expected
1211: 1175 0000EAB5 21 03 13 0086 jeql L363
1212: 1176 0000EABA # errcnt++; /* bump the error count */
1213: 1177 0000EABA 6d effffff5e4 incl _errcnt
1214: 1178 0000EAC0 # if( prt_error ) {
1215: 1179 0000EAC0 5d effffff5de tstl _prt_error
1216: 1180 0000EAC6 31 55 jeql L364
1217: 1181 0000EAC8 # writes(" \n"); /* start a new print line */
1218: 1182 0000EAC8 .data 1
1219: 1183 00000f5e * L365:
1220: 1184 00000f5e * 200A00 .ascii " \12\0"
1221: 1185 00000f61 * .text
1222: 1186 0000EAC8 dd 8f00000f5e pushl $L365
1223: 1187 0000EACE fe 08 effffff5cf callf $8,_writes
1224: 1188 0000EAD5 # writes("cycle: ");
1225: 1189 0000EAD5 .data 1
1226: 1190 00000f61 * L366:
1227: 1191 00000f61 * 6379636C653A2000 .ascii "cycle: \0"
1228: 1192 00000f69 * .text
1229: 1193 0000EAD5 dd 8f00000f61 pushl $L366
1230: 1194 0000EADB fe 08 effffff5c2 callf $8,_writes
1231: 1195 0000EAE2 # writed( cycle );
1232: 1196 0000EAE2 dd effffff5bc pushl _cycle
1233: 1197 0000EAE8 fe 08 effffff5b5 callf $8,_writed
1234: 1198 0000EAEF # writes(" SUBF test ");
1235: 1199 0000EAEF .data 1
1236: 1200 00000f69 * L367:
1237: 1201 00000f69 * 2020535542462074657374200 .ascii " SUBF test \0"
1238: 0
1239: 1202 00000f76 * .text
1240: 1203 0000EAEF dd 8f00000f69 pushl $L367
1241: 1204 0000EAF5 fe 08 effffff5a8 callf $8,_writes
1242: 1205 0000EAFC # writed( test_no );
1243: 1206 0000EAFC dd effffff5a2 pushl _test_no
1244: 1207 0000EB02 fe 08 effffff59b callf $8,_writed
1245: 1208 0000EB09 # writes(", subtest 8 (Piped Entry) - BAD FINAL ACC\n");
1246: 1209 0000EB09 .data 1
1247: 1210 00000f76 * L368:
1248: 1211 00000f76 * 2C20737562746573742038202 .ascii ", subtest 8 (Piped Entry) - BAD FINAL ACC\12\0"
1249: 8506970656420456E74727929
1250: 202D204241442046494E414C2
1251: 04143430A00
1252: 1212 00000fa1 * .text
1253: 1213 0000EB09 dd 8f00000f76 pushl $L368
1254: 1214 0000EB0F fe 08 effffff58e callf $8,_writes
1255: 1215 0000EB16 # print_subf_data();
1256: 1216 0000EB16 fe 04 ef00000157 callf $4,_print_subf_data
1257: 1217 0000EB1D # }
1258: 1218 0000EB1D # if( halt_flg )
1259: 1219 0000EB1D L364:
1260: 1220 0000EB1D 5d effffff581 tstl _halt_flg
1261: 1221 0000EB23 31 09 jeql L369
1262: 1222 0000EB25 # subf_er_halt( BAD_ACC_HLT ); /* halt on the error */
1263: 1223 0000EB25 dd 01 pushl $1
1264: 1224 0000EB27 fe 08 ef000001e4 callf $8,_subf_er_halt
1265: 1225 0000EB2E # if( loop_on_err ) {
1266: 1226 0000EB2E L369:
1267: 1227 0000EB2E 5d effffff570 tstl _loop_on_err
1268: 1228 0000EB34 31 0a jeql L370
1269: 1229 0000EB36 # force_loop = TRUE; /* set the force loop flag */
1270: 1230 0000EB36 0d 01 effffff567 movl $1,_force_loop
1271: 1231 0000EB3D # asm("brw _subf_8_lp1");; /* and loop on the error */
1272: 1232 0000EB3D 13 ff49 brw _subf_8_lp1
1273: 1233 0000EB40 # } /* end of loop on error */
1274: 1234 0000EB40 # } /* end of compare error */
1275: 1235 0000EB40 L370:
1276: 1236 0000EB40 # } /* end of WHILE loop */
1277: 1237 0000EB40 L363:
1278: 1238 0000EB40 L359:
1279: 1239 0000EB40 6d effffff55e incl _index
1280: 1240 0000EB46 13 fef7 jbr L361
1281: 1241 0000EB49 L360:
1282: 1242 0000EB49 # } /* end of subtest 8 */
1283: 1243 0000EB49 40 ret#2
1284: 1244 0000EB4A .set L355,0x0
1285: 1245 0000EB4A L357:
1286: 1246 0000EB4A 13 fee0 jbr L358
1287: 1247 0000EB4D .data
1288: 1248 00000d28 * .text
1289: 1249 0000EB4D 00 .align 1
1290: 1250 0000EB4E .globl _subf_9
1291: 1251 0000EB4E _subf_9:
1292: 1252 0000EB4E 0000 .word L371
1293: 1253 0000EB50 #
1294: 1254 0000EB50 #
1295: 1255 0000EB50 #
1296: 1256 0000EB50 # /************************************************************************
1297: 1257 0000EB50 # *
1298: 1258 0000EB50 # * SUBTEST 9 - pipelined exit test
1299: 1259 0000EB50 # *
1300: 1260 0000EB50 # ************************************************************************/
1301: 1261 0000EB50 # subf_9()
1302: 1262 0000EB50 # {
1303: 1263 0000EB50 13 011d jbr L373
1304: 1264 0000EB53 L374:
1305: 1265 0000EB53 # force_loop = FALSE;
1306: 1266 0000EB53 4d effffff54b clrl _force_loop
1307: 1267 0000EB59 # subtest = 9;
1308: 1268 0000EB59 0d 09 effffff544 movl $9,_subtest
1309: 1269 0000EB60 # for( index = 0; index < max_subf_1_index; index++ ) {
1310: 1270 0000EB60 4d effffff53e clrl _index
1311: 1271 0000EB66 L377:
1312: 1272 0000EB66 1d effffff538 effffff533 cmpl _index,_max_subf_1_index
1313: 1273 0000EB71 91 03 13 00f9 jgeq L376
1314: 1274 0000EB76 # sgl_ld_acc = subf_1_data[index].op_1; /* get operand 1 */
1315: 1275 0000EB76 5c 0c effffff527 50 mull3 $12,_index,r0
1316: 1276 0000EB7E 0d e000000000 effffff51b movl _subf_1_data(r0),_sgl_ld_acc
1317: 1277 0000EB89 # sgl_value_1 = subf_1_data[index].op_2; /* get operand 2 */
1318: 1278 0000EB89 5c 0c effffff514 50 mull3 $12,_index,r0
1319: 1279 0000EB91 0d e000000004 effffff508 movl _subf_1_data+4(r0),_sgl_value_1
1320: 1280 0000EB9C # sgl_expected = subf_1_data[index].exp; /* get expected result */
1321: 1281 0000EB9C 5c 0c effffff501 50 mull3 $12,_index,r0
1322: 1282 0000EBA4 0d e000000008 effffff4f5 movl _subf_1_data+8(r0),_sgl_expected
1323: 1283 0000EBAF # /*
1324: 1284 0000EBAF # * If LOOP ON ERROR is set, this is the loop for this subtest.
1325: 1285 0000EBAF # * The force loop flag is set after the first error.
1326: 1286 0000EBAF # */
1327: 1287 0000EBAF # asm("_subf_9_lp1:");
1328: 1288 0000EBAF _subf_9_lp1:
1329: 1289 0000EBAF # asm("movl $0,r0"); /* clear r0 */
1330: 1290 0000EBAF 0d 00 50 movl $0,r0
1331: 1291 0000EBB2 # asm("ldf _sgl_ld_acc"); /* load the 1st operand */
1332: 1292 0000EBB2 06 effffff4ec ldf _sgl_ld_acc
1333: 1293 0000EBB8 # asm("subf _sgl_value_1"); /* subract the 2nd operand */
1334: 1294 0000EBB8 d6 effffff4e6 subf _sgl_value_1
1335: 1295 0000EBBE # asm("addf r0"); /* add a 0.0 to the result */
1336: 1296 0000EBBE c6 50 addf r0
1337: 1297 0000EBC0 # asm("stf _sgl_st_acc"); /* store the result */
1338: 1298 0000EBC0 26 effffff4de stf _sgl_st_acc
1339: 1299 0000EBC6 # if( force_loop )
1340: 1300 0000EBC6 5d effffff4d8 tstl _force_loop
1341: 1301 0000EBCC 31 02 jeql L378
1342: 1302 0000EBCE # asm("brb _subf_9_lp1");; /* loop on the error */
1343: 1303 0000EBCE 11 df brb _subf_9_lp1
1344: 1304 0000EBD0 L378:
1345: 1305 0000EBD0 # /*
1346: 1306 0000EBD0 # * end error loop - test the results
1347: 1307 0000EBD0 # */
1348: 1308 0000EBD0 # if( sgl_st_acc != sgl_expected ) { /* COMPARE the values */
1349: 1309 0000EBD0 1d effffff4ce effffff4c9 cmpl _sgl_st_acc,_sgl_expected
1350: 1310 0000EBDB 21 03 13 0086 jeql L379
1351: 1311 0000EBE0 # errcnt++; /* bump the error count */
1352: 1312 0000EBE0 6d effffff4be incl _errcnt
1353: 1313 0000EBE6 # if( prt_error ) {
1354: 1314 0000EBE6 5d effffff4b8 tstl _prt_error
1355: 1315 0000EBEC 31 55 jeql L380
1356: 1316 0000EBEE # writes(" \n"); /* start a new print line */
1357: 1317 0000EBEE .data 1
1358: 1318 00000fa1 * L381:
1359: 1319 00000fa1 * 200A00 .ascii " \12\0"
1360: 1320 00000fa4 * .text
1361: 1321 0000EBEE dd 8f00000fa1 pushl $L381
1362: 1322 0000EBF4 fe 08 effffff4a9 callf $8,_writes
1363: 1323 0000EBFB # writes("cycle: ");
1364: 1324 0000EBFB .data 1
1365: 1325 00000fa4 * L382:
1366: 1326 00000fa4 * 6379636C653A2000 .ascii "cycle: \0"
1367: 1327 00000fac * .text
1368: 1328 0000EBFB dd 8f00000fa4 pushl $L382
1369: 1329 0000EC01 fe 08 effffff49c callf $8,_writes
1370: 1330 0000EC08 # writed( cycle );
1371: 1331 0000EC08 dd effffff496 pushl _cycle
1372: 1332 0000EC0E fe 08 effffff48f callf $8,_writed
1373: 1333 0000EC15 # writes(" SUBF test ");
1374: 1334 0000EC15 .data 1
1375: 1335 00000fac * L383:
1376: 1336 00000fac * 2020535542462074657374200 .ascii " SUBF test \0"
1377: 0
1378: 1337 00000fb9 * .text
1379: 1338 0000EC15 dd 8f00000fac pushl $L383
1380: 1339 0000EC1B fe 08 effffff482 callf $8,_writes
1381: 1340 0000EC22 # writed( test_no );
1382: 1341 0000EC22 dd effffff47c pushl _test_no
1383: 1342 0000EC28 fe 08 effffff475 callf $8,_writed
1384: 1343 0000EC2F # writes(", subtest 9 (Piped Exit) - BAD FINAL ACC\n");
1385: 1344 0000EC2F .data 1
1386: 1345 00000fb9 * L384:
1387: 1346 00000fb9 * 2C20737562746573742039202 .ascii ", subtest 9 (Piped Exit) - BAD FINAL ACC\12\0"
1388: 8506970656420457869742920
1389: 2D204241442046494E414C204
1390: 143430A00
1391: 1347 00000fe3 * .text
1392: 1348 0000EC2F dd 8f00000fb9 pushl $L384
1393: 1349 0000EC35 fe 08 effffff468 callf $8,_writes
1394: 1350 0000EC3C # print_subf_data();
1395: 1351 0000EC3C fe 04 ef00000031 callf $4,_print_subf_data
1396: 1352 0000EC43 # }
1397: 1353 0000EC43 # if( halt_flg )
1398: 1354 0000EC43 L380:
1399: 1355 0000EC43 5d effffff45b tstl _halt_flg
1400: 1356 0000EC49 31 09 jeql L385
1401: 1357 0000EC4B # subf_er_halt( BAD_ACC_HLT ); /* halt on the error */
1402: 1358 0000EC4B dd 01 pushl $1
1403: 1359 0000EC4D fe 08 ef000000be callf $8,_subf_er_halt
1404: 1360 0000EC54 # if( loop_on_err ) {
1405: 1361 0000EC54 L385:
1406: 1362 0000EC54 5d effffff44a tstl _loop_on_err
1407: 1363 0000EC5A 31 0a jeql L386
1408: 1364 0000EC5C # force_loop = TRUE; /* set the force loop flag */
1409: 1365 0000EC5C 0d 01 effffff441 movl $1,_force_loop
1410: 1366 0000EC63 # asm("brw _subf_9_lp1");; /* and loop on the error */
1411: 1367 0000EC63 13 ff49 brw _subf_9_lp1
1412: 1368 0000EC66 # } /* end of loop on error */
1413: 1369 0000EC66 # } /* end of compare error */
1414: 1370 0000EC66 L386:
1415: 1371 0000EC66 # } /* end of WHILE loop */
1416: 1372 0000EC66 L379:
1417: 1373 0000EC66 L375:
1418: 1374 0000EC66 6d effffff438 incl _index
1419: 1375 0000EC6C 13 fef7 jbr L377
1420: 1376 0000EC6F L376:
1421: 1377 0000EC6F # } /* end of subtest 9 */
1422: 1378 0000EC6F 40 ret#2
1423: 1379 0000EC70 .set L371,0x0
1424: 1380 0000EC70 L373:
1425: 1381 0000EC70 13 fee0 jbr L374
1426: 1382 0000EC73 .data
1427: 1383 00000d28 * .text
1428: 1384 0000EC73 00 .align 1
1429: 1385 0000EC74 .globl _print_subf_data
1430: 1386 0000EC74 _print_subf_data:
1431: 1387 0000EC74 0000 .word L387
1432: 1388 0000EC76 #
1433: 1389 0000EC76 #
1434: 1390 0000EC76 #
1435: 1391 0000EC76 # /**************************************************************************
1436: 1392 0000EC76 # *
1437: 1393 0000EC76 # * PRINT THE DATA AND STORE RESULTS
1438: 1394 0000EC76 # *
1439: 1395 0000EC76 # * initial Acc = xxxxxxxx, stored = xxxxxxxx, data index = xx
1440: 1396 0000EC76 # * operand = xxxxxxxx, expected = xxxxxxxx
1441: 1397 0000EC76 # **************************************************************************/
1442: 1398 0000EC76 # print_subf_data()
1443: 1399 0000EC76 # {
1444: 1400 0000EC76 13 0095 jbr L389
1445: 1401 0000EC79 L390:
1446: 1402 0000EC79 # writes("initial Acc = ");
1447: 1403 0000EC79 .data 1
1448: 1404 00000fe3 * L391:
1449: 1405 00000fe3 * 696E697469616C20416363203 .ascii "initial Acc = \0"
1450: D2000
1451: 1406 00000ff2 * .text
1452: 1407 0000EC79 dd 8f00000fe3 pushl $L391
1453: 1408 0000EC7F fe 08 effffff41e callf $8,_writes
1454: 1409 0000EC86 # write32h( sgl_ld_acc );
1455: 1410 0000EC86 dd effffff418 pushl _sgl_ld_acc
1456: 1411 0000EC8C fe 08 effffff411 callf $8,_write32h
1457: 1412 0000EC93 # writes(", stored = ");
1458: 1413 0000EC93 .data 1
1459: 1414 00000ff2 * L392:
1460: 1415 00000ff2 * 2C2020202073746F726564203 .ascii ", stored = \0"
1461: D2000
1462: 1416 00001001 * .text
1463: 1417 0000EC93 dd 8f00000ff2 pushl $L392
1464: 1418 0000EC99 fe 08 effffff404 callf $8,_writes
1465: 1419 0000ECA0 # write32h( sgl_st_acc );
1466: 1420 0000ECA0 dd effffff3fe pushl _sgl_st_acc
1467: 1421 0000ECA6 fe 08 effffff3f7 callf $8,_write32h
1468: 1422 0000ECAD # writes(", data index = ");
1469: 1423 0000ECAD .data 1
1470: 1424 00001001 * L393:
1471: 1425 00001001 * 2C20206461746120696E64657 .ascii ", data index = \0"
1472: 8203D2000
1473: 1426 00001012 * .text
1474: 1427 0000ECAD dd 8f00001001 pushl $L393
1475: 1428 0000ECB3 fe 08 effffff3ea callf $8,_writes
1476: 1429 0000ECBA # writed( index );
1477: 1430 0000ECBA dd effffff3e4 pushl _index
1478: 1431 0000ECC0 fe 08 effffff3dd callf $8,_writed
1479: 1432 0000ECC7 # writec('\n');
1480: 1433 0000ECC7 dd 0a pushl $10
1481: 1434 0000ECC9 fe 08 effffff3d4 callf $8,_writec
1482: 1435 0000ECD0 # writes(" operand = ");
1483: 1436 0000ECD0 .data 1
1484: 1437 00001012 * L395:
1485: 1438 00001012 * 202020206F706572616E64203 .ascii " operand = \0"
1486: D2000
1487: 1439 00001021 * .text
1488: 1440 0000ECD0 dd 8f00001012 pushl $L395
1489: 1441 0000ECD6 fe 08 effffff3c7 callf $8,_writes
1490: 1442 0000ECDD # write32h( sgl_value_1 );
1491: 1443 0000ECDD dd effffff3c1 pushl _sgl_value_1
1492: 1444 0000ECE3 fe 08 effffff3ba callf $8,_write32h
1493: 1445 0000ECEA # writes(", expected = ");
1494: 1446 0000ECEA .data 1
1495: 1447 00001021 * L396:
1496: 1448 00001021 * 2C20206578706563746564203 .ascii ", expected = \0"
1497: D2000
1498: 1449 00001030 * .text
1499: 1450 0000ECEA dd 8f00001021 pushl $L396
1500: 1451 0000ECF0 fe 08 effffff3ad callf $8,_writes
1501: 1452 0000ECF7 # write32h( sgl_expected );
1502: 1453 0000ECF7 dd effffff3a7 pushl _sgl_expected
1503: 1454 0000ECFD fe 08 effffff3a0 callf $8,_write32h
1504: 1455 0000ED04 # writec('\n');
1505: 1456 0000ED04 dd 0a pushl $10
1506: 1457 0000ED06 fe 08 effffff397 callf $8,_writec
1507: 1458 0000ED0D # }
1508: 1459 0000ED0D 40 ret#2
1509: 1460 0000ED0E .set L387,0x0
1510: 1461 0000ED0E L389:
1511: 1462 0000ED0E 13 ff68 jbr L390
1512: 1463 0000ED11 .data
1513: 1464 00000d28 * .text
1514: 1465 0000ED11 00 .align 1
1515: 1466 0000ED12 .globl _subf_er_halt
1516: 1467 0000ED12 _subf_er_halt:
1517: 1468 0000ED12 0000 .word L397
1518: 1469 0000ED14 #
1519: 1470 0000ED14 #
1520: 1471 0000ED14 #
1521: 1472 0000ED14 # /**************************************************************************
1522: 1473 0000ED14 # *
1523: 1474 0000ED14 # * HALT ON ERROR ROUTINE
1524: 1475 0000ED14 # *
1525: 1476 0000ED14 # **************************************************************************/
1526: 1477 0000ED14 # subf_er_halt( halt_code )
1527: 1478 0000ED14 # int halt_code;
1528: 1479 0000ED14 # {
1529: 1480 0000ED14 13 00af jbr L399
1530: 1481 0000ED17 L400:
1531: 1482 0000ED17 # sgl_dummy1 = halt_code; /* get the error type */
1532: 1483 0000ED17 0d ad04 effffff385 movl 4(fp),_sgl_dummy1
1533: 1484 0000ED1F # asm("movl _test_no,r0"); /* r0 = test number */
1534: 1485 0000ED1F 0d effffff37f 50 movl _test_no,r0
1535: 1486 0000ED26 # asm("movl _subtest,r1"); /* r1 = subtest number */
1536: 1487 0000ED26 0d effffff378 51 movl _subtest,r1
1537: 1488 0000ED2D # asm("movl _sgl_dummy1,r2"); /* r2 = error code */
1538: 1489 0000ED2D 0d effffff371 52 movl _sgl_dummy1,r2
1539: 1490 0000ED34 # asm("movl _cycle,r3"); /* r3 = cycle count */
1540: 1491 0000ED34 0d effffff36a 53 movl _cycle,r3
1541: 1492 0000ED3B # asm("movl _sgl_ld_acc,r4"); /* r4 = initial data */
1542: 1493 0000ED3B 0d effffff363 54 movl _sgl_ld_acc,r4
1543: 1494 0000ED42 # asm("movl _sgl_value_1,r5"); /* r5 = data subtracted */
1544: 1495 0000ED42 0d effffff35c 55 movl _sgl_value_1,r5
1545: 1496 0000ED49 # asm("movl _sgl_st_acc,r6"); /* r6 = data stored */
1546: 1497 0000ED49 0d effffff355 56 movl _sgl_st_acc,r6
1547: 1498 0000ED50 # if(halt_code == BAD_ACC_HLT ) {
1548: 1499 0000ED50 1d ad04 01 cmpl 4(fp),$1
1549: 1500 0000ED54 21 10 jneq L401
1550: 1501 0000ED56 # asm("movl _sgl_expected,r7"); /* r7 = data expected */
1551: 1502 0000ED56 0d effffff348 57 movl _sgl_expected,r7
1552: 1503 0000ED5D # asm("movl _index,r8"); /* r8 = data index */
1553: 1504 0000ED5D 0d effffff341 58 movl _index,r8
1554: 1505 0000ED64 # } else
1555: 1506 0000ED64 11 5e jbr L402
1556: 1507 0000ED66 L401:
1557: 1508 0000ED66 # if( halt_code == BAD_REG_HLT ) {
1558: 1509 0000ED66 1d ad04 02 cmpl 4(fp),$2
1559: 1510 0000ED6A 21 3d jneq L403
1560: 1511 0000ED6C # sgl_dummy1 = load_regs[index2];
1561: 1512 0000ED6C 0d effffff332 50 movl _index2,r0
1562: 1513 0000ED73 0d 40effffff32a movl _load_regs[r0],_sgl_dummy1
1563: effffff325
1564: 1514 0000ED7F # sgl_dummy2 = store_regs[index2];
1565: 1515 0000ED7F 0d effffff31f 50 movl _index2,r0
1566: 1516 0000ED86 0d 40effffff317 movl _store_regs[r0],_sgl_dummy2
1567: effffff312
1568: 1517 0000ED92 # asm("movl _index2,r7"); /* r7 = bad register # */
1569: 1518 0000ED92 0d effffff30c 57 movl _index2,r7
1570: 1519 0000ED99 # asm("movl _sgl_dummy2,r8"); /* r8 = actual value */
1571: 1520 0000ED99 0d effffff305 58 movl _sgl_dummy2,r8
1572: 1521 0000EDA0 # asm("movl _sgl_dummy1,r9"); /* r9 = expected value */
1573: 1522 0000EDA0 0d effffff2fe 59 movl _sgl_dummy1,r9
1574: 1523 0000EDA7 # } else
1575: 1524 0000EDA7 11 1b jbr L404
1576: 1525 0000EDA9 L403:
1577: 1526 0000EDA9 # if( halt_code == BAD_PSL_HLT ) {
1578: 1527 0000EDA9 1d ad04 03 cmpl 4(fp),$3
1579: 1528 0000EDAD 21 15 jneq L405
1580: 1529 0000EDAF # asm("movl _init_psl,r7"); /* r7 = initial PSL */
1581: 1530 0000EDAF 0d effffff2ef 57 movl _init_psl,r7
1582: 1531 0000EDB6 # asm("movl _psl_val,r8"); /* r8 = final PSL */
1583: 1532 0000EDB6 0d effffff2e8 58 movl _psl_val,r8
1584: 1533 0000EDBD # asm("movl _exp_psl,r9"); /* r9 = expected PSL */
1585: 1534 0000EDBD 0d effffff2e1 59 movl _exp_psl,r9
1586: 1535 0000EDC4 # };
1587: 1536 0000EDC4 L405:
1588: 1537 0000EDC4 L404:
1589: 1538 0000EDC4 L402:
1590: 1539 0000EDC4 # asm("halt"); /* HALT ... */
1591: 1540 0000EDC4 00 halt
1592: 1541 0000EDC5 # }
1593: 1542 0000EDC5 40 ret#2
1594: 1543 0000EDC6 .set L397,0x0
1595: 1544 0000EDC6 L399:
1596: 1545 0000EDC6 13 ff4e jbr L400
1597: 1546 0000EDC9 .data
1598: 1546 0001CE6D .data
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.