|
|
1.1 ! root 1: 1 00000000 LL0: ! 2: 2 00000000 .data ! 3: 3 00000720 * .text ! 4: 4 00000000 .align 1 ! 5: 5 00000000 .globl _tstd ! 6: 6 00000000 _tstd: ! 7: 7 0001AC38 0000 .word L215 ! 8: 8 0001AC3A # ! 9: 9 0001AC3A # #include "fpp_defs.h" ! 10: 10 0001AC3A # ! 11: 11 0001AC3A # ! 12: 12 0001AC3A # /***************************************************************************** ! 13: 13 0001AC3A # * ! 14: 14 0001AC3A # * TSTD - DOUBLE PRECISION FLOATING POINT TEST ACC. TEST ! 15: 15 0001AC3A # * ! 16: 16 0001AC3A # * IMPLEMENTATION NOTE: If the "no-fpp WCS" is loaded then the status bits ! 17: 17 0001AC3A # * set will be based on the INTEGER value of the loaded data's most significant ! 18: 18 0001AC3A # * longword. Ergo and towit, if we're running without an FPP and a "bad 0" is ! 19: 19 0001AC3A # * loaded then the PSL will show POSITIVE rather than ZERO. A "bad 0" is any ! 20: 20 0001AC3A # * number with a zero exponent and non zero fraction (00000001 - 007fffff). ! 21: 21 0001AC3A # *****************************************************************************/ ! 22: 22 0001AC3A # tstd() ! 23: 23 0001AC3A # { ! 24: 24 0001AC3A 11 3a jbr L217 ! 25: 25 0001AC3C L218: ! 26: 26 0001AC3C # asm(".globl _tstd_t"); ! 27: 27 0001AC3C .globl _tstd_t ! 28: 28 0001AC3C # asm("_tstd_t:"); /* entry address */ ! 29: 29 0001AC3C _tstd_t: ! 30: 30 0001AC3C # if( ( cycle == 1 ) && ( prt_hdrs ) ) /* print headers on 1st pass */ ! 31: 31 0001AC3C 1d effffffff6 01 cmpl _cycle,$1 ! 32: 32 0001AC43 21 15 jneq L219 ! 33: 33 0001AC45 5d efffffffed tstl _prt_hdrs ! 34: 34 0001AC4B 31 0d jeql L219 ! 35: 35 0001AC4D # writes(" TSTD"); ! 36: 36 0001AC4D .data 1 ! 37: 37 00000720 * L221: ! 38: 38 00000720 * 205453544400 .ascii " TSTD\0" ! 39: 39 00000726 * .text ! 40: 40 0001AC4D dd 8f00000720 pushl $L221 ! 41: 41 0001AC53 fe 08 efffffffde callf $8,_writes ! 42: 42 0001AC5A # tstd_1(); /* PSL flags test */ ! 43: 43 0001AC5A L219: ! 44: 44 0001AC5A fe 04 ef00000017 callf $4,_tstd_1 ! 45: 45 0001AC61 # tstd_2(); /* register stability */ ! 46: 46 0001AC61 fe 04 ef00000218 callf $4,_tstd_2 ! 47: 47 0001AC68 # tstd_3(); /* accumulator stability */ ! 48: 48 0001AC68 fe 04 ef0000041f callf $4,_tstd_3 ! 49: 49 0001AC6F # asm("jmp *return"); /* return to the test monitor */ ! 50: 50 0001AC6F 71 ffffffffc3 jmp *return ! 51: 51 0001AC75 # } ! 52: 52 0001AC75 40 ret#2 ! 53: 53 0001AC76 .set L215,0x0 ! 54: 54 0001AC76 L217: ! 55: 55 0001AC76 11 c4 jbr L218 ! 56: 56 0001AC78 .data ! 57: 57 00000720 * .text ! 58: 58 0001AC78 .align 1 ! 59: 59 0001AC78 .globl _tstd_1 ! 60: 60 0001AC78 _tstd_1: ! 61: 61 0001AC78 0000 .word L225 ! 62: 62 0001AC7A # ! 63: 63 0001AC7A # ! 64: 64 0001AC7A # ! 65: 65 0001AC7A # /************************************************************************ ! 66: 66 0001AC7A # * ! 67: 67 0001AC7A # * SUBTEST 1 - Check for PSL corruption ! 68: 68 0001AC7A # * ! 69: 69 0001AC7A # ************************************************************************/ ! 70: 70 0001AC7A # tstd_1() ! 71: 71 0001AC7A # { ! 72: 72 0001AC7A 13 0200 jbr L227 ! 73: 73 0001AC7D L228: ! 74: 74 0001AC7D # force_loop = FALSE; /* clear force_loop flg */ ! 75: 75 0001AC7D 4d efffffffb5 clrl _force_loop ! 76: 76 0001AC83 # subtest = 1; ! 77: 77 0001AC83 0d 01 efffffffae movl $1,_subtest ! 78: 78 0001AC8A # for( index = 0; index < max_tstd_1_index; index++ ) { ! 79: 79 0001AC8A 4d efffffffa8 clrl _index ! 80: 80 0001AC90 L231: ! 81: 81 0001AC90 1d efffffffa2 efffffff9d cmpl _index,_max_tstd_1_index ! 82: 82 0001AC9B 91 03 13 01dc jgeq L230 ! 83: 83 0001ACA0 # dbl_ld_acc = tstd_1_data[index].ld; /* get value to load */ ! 84: 84 0001ACA0 5c 0c efffffff91 50 mull3 $12,_index,r0 ! 85: 85 0001ACA8 0c 8f00000000 50 addl2 $_tstd_1_data,r0 ! 86: 86 0001ACAF 0d a004 efffffff85 movl 4(r0),_dbl_ld_acc+4 ! 87: 87 0001ACB7 0d 60 efffffff7a movl (r0),_dbl_ld_acc ! 88: 88 0001ACBE # sgl_expected = tstd_1_data[index].exp; /* get expected flags*/ ! 89: 89 0001ACBE 5c 0c efffffff73 50 mull3 $12,_index,r0 ! 90: 90 0001ACC6 0d e000000008 efffffff67 movl _tstd_1_data+8(r0),_sgl_expected ! 91: 91 0001ACD1 # for( status_index = 0; status_index < 3; status_index++ ) { ! 92: 92 0001ACD1 4d efffffff61 clrl _status_index ! 93: 93 0001ACD7 L234: ! 94: 94 0001ACD7 1d efffffff5b 03 cmpl _status_index,$3 ! 95: 95 0001ACDE 91 03 13 0190 jgeq L233 ! 96: 96 0001ACE3 # sgl_dummy1 = status_array[status_index]; /* status = +,-,0 */ ! 97: 97 0001ACE3 0d efffffff4f 50 movl _status_index,r0 ! 98: 98 0001ACEA 0d 40efffffff47 movl _status_array[r0],_sgl_dummy1 ! 99: efffffff42 ! 100: 99 0001ACF6 # /* ! 101: 100 0001ACF6 # * If LOOP ON ERROR is set, this is the loop for this subtest. ! 102: 101 0001ACF6 # * The force loop flag is set after the first error. ! 103: 102 0001ACF6 # */ ! 104: 103 0001ACF6 # asm("ldd _dbl_ld_acc"); /* load the initial value */ ! 105: 104 0001ACF6 07 efffffff3c ldd _dbl_ld_acc ! 106: 105 0001ACFC # asm("_tstd_1_lp1:"); ! 107: 106 0001ACFC _tstd_1_lp1: ! 108: 107 0001ACFC # asm("tstl _sgl_dummy1"); /* set the PSL status */ ! 109: 108 0001ACFC 5d efffffff36 tstl _sgl_dummy1 ! 110: 109 0001AD02 # asm("movpsl _init_psl"); /* save the initial PSL */ ! 111: 110 0001AD02 cd efffffff30 movpsl _init_psl ! 112: 111 0001AD08 # asm("tstd"); /* test the accmulator */ ! 113: 112 0001AD08 57 tstd ! 114: 113 0001AD09 # asm("nop"); ! 115: 114 0001AD09 10 nop ! 116: 115 0001AD0A # asm("movpsl _psl_val"); /* save the final PSL */ ! 117: 116 0001AD0A cd efffffff28 movpsl _psl_val ! 118: 117 0001AD10 # asm("std _dbl_st_acc"); /* save the final Acc. */ ! 119: 118 0001AD10 27 efffffff22 std _dbl_st_acc ! 120: 119 0001AD16 # if( force_loop ) ! 121: 120 0001AD16 5d efffffff1c tstl _force_loop ! 122: 121 0001AD1C 31 02 jeql L235 ! 123: 122 0001AD1E # asm("brb _tstd_1_lp1");; /* loop on the error */ ! 124: 123 0001AD1E 11 dc brb _tstd_1_lp1 ! 125: 124 0001AD20 L235: ! 126: 125 0001AD20 # /* ! 127: 126 0001AD20 # * Now compare the final PSL to the initial PSL -they should be the same ! 128: 127 0001AD20 # */ ! 129: 128 0001AD20 # exp_psl = init_psl; /* get the initial PSL */ ! 130: 129 0001AD20 0d efffffff12 efffffff0d movl _init_psl,_exp_psl ! 131: 130 0001AD2B # exp_psl &= 0xfffffff3; /* clear ZERO, NEGATIVE */ ! 132: 131 0001AD2B ac 88f3 efffffff05 andl2 $-13,_exp_psl ! 133: 132 0001AD33 # if( sgl_expected == ZERO ) { ! 134: 133 0001AD33 1d effffffeff 04 cmpl _sgl_expected,$4 ! 135: 134 0001AD3A 21 07 jneq L236 ! 136: 135 0001AD3C # /* if( (!no_fpp_wcs) || (!dbl_ld_acc.m) ) /* */ ! 137: 136 0001AD3C # exp_psl |= PSL_Z; /* expect the ZERO bit set */ ! 138: 137 0001AD3C 8c 04 effffffef5 orl2 $4,_exp_psl ! 139: 138 0001AD43 # } ! 140: 139 0001AD43 # if( sgl_expected == NEGATIVE ) ! 141: 140 0001AD43 L236: ! 142: 141 0001AD43 1d effffffeef 08 cmpl _sgl_expected,$8 ! 143: 142 0001AD4A 21 07 jneq L237 ! 144: 143 0001AD4C # exp_psl |= PSL_N; /* expect the NEG bit set */ ! 145: 144 0001AD4C 8c 08 effffffee5 orl2 $8,_exp_psl ! 146: 145 0001AD53 # if( psl_val != exp_psl ) { ! 147: 146 0001AD53 L237: ! 148: 147 0001AD53 1d effffffedf effffffeda cmpl _psl_val,_exp_psl ! 149: 148 0001AD5E 21 03 13 0107 jeql L238 ! 150: 149 0001AD63 # errcnt++; /* bump the error count */ ! 151: 150 0001AD63 6d effffffecf incl _errcnt ! 152: 151 0001AD69 # if( prt_error ) { ! 153: 152 0001AD69 5d effffffec9 tstl _prt_error ! 154: 153 0001AD6F 21 03 13 00d3 jeql L239 ! 155: 154 0001AD74 # writes(" \n"); /* start new print line */ ! 156: 155 0001AD74 .data 1 ! 157: 156 00000726 * L240: ! 158: 157 00000726 * 200A00 .ascii " \12\0" ! 159: 158 00000729 * .text ! 160: 159 0001AD74 dd 8f00000726 pushl $L240 ! 161: 160 0001AD7A fe 08 effffffeb7 callf $8,_writes ! 162: 161 0001AD81 # writes("cycle: "); ! 163: 162 0001AD81 .data 1 ! 164: 163 00000729 * L241: ! 165: 164 00000729 * 6379636C653A2000 .ascii "cycle: \0" ! 166: 165 00000731 * .text ! 167: 166 0001AD81 dd 8f00000729 pushl $L241 ! 168: 167 0001AD87 fe 08 effffffeaa callf $8,_writes ! 169: 168 0001AD8E # writed( cycle ); ! 170: 169 0001AD8E dd effffffea4 pushl _cycle ! 171: 170 0001AD94 fe 08 effffffe9d callf $8,_writed ! 172: 171 0001AD9B # writes(" TSTD test "); ! 173: 172 0001AD9B .data 1 ! 174: 173 00000731 * L243: ! 175: 174 00000731 * 2020545354442074657374200 .ascii " TSTD test \0" ! 176: 0 ! 177: 175 0000073e * .text ! 178: 176 0001AD9B dd 8f00000731 pushl $L243 ! 179: 177 0001ADA1 fe 08 effffffe90 callf $8,_writes ! 180: 178 0001ADA8 # writed( test_no ); ! 181: 179 0001ADA8 dd effffffe8a pushl _test_no ! 182: 180 0001ADAE fe 08 effffffe83 callf $8,_writed ! 183: 181 0001ADB5 # writes(", subtest 1 - BAD FINAL PSL\n"); ! 184: 182 0001ADB5 .data 1 ! 185: 183 0000073e * L244: ! 186: 184 0000073e * 2C20737562746573742031202 .ascii ", subtest 1 - BAD FINAL PSL\12\0" ! 187: D204241442046494E414C2050 ! 188: 534C0A00 ! 189: 185 0000075b * .text ! 190: 186 0001ADB5 dd 8f0000073e pushl $L244 ! 191: 187 0001ADBB fe 08 effffffe76 callf $8,_writes ! 192: 188 0001ADC2 # print_tstd_data(); /* print the operands */ ! 193: 189 0001ADC2 fe 04 ef00000469 callf $4,_print_tstd_data ! 194: 190 0001ADC9 # writes(", index = "); ! 195: 191 0001ADC9 .data 1 ! 196: 192 0000075b * L246: ! 197: 193 0000075b * 2C2020696E646578203D2000 .ascii ", index = \0" ! 198: 194 00000767 * .text ! 199: 195 0001ADC9 dd 8f0000075b pushl $L246 ! 200: 196 0001ADCF fe 08 effffffe62 callf $8,_writes ! 201: 197 0001ADD6 # writed( index ); ! 202: 198 0001ADD6 dd effffffe5c pushl _index ! 203: 199 0001ADDC fe 08 effffffe55 callf $8,_writed ! 204: 200 0001ADE3 # writec('\n'); ! 205: 201 0001ADE3 dd 0a pushl $10 ! 206: 202 0001ADE5 fe 08 effffffe4c callf $8,_writec ! 207: 203 0001ADEC # writes("initial PSL = "); ! 208: 204 0001ADEC .data 1 ! 209: 205 00000767 * L248: ! 210: 206 00000767 * 696E697469616C2050534C203 .ascii "initial PSL = \0" ! 211: D2000 ! 212: 207 00000776 * .text ! 213: 208 0001ADEC dd 8f00000767 pushl $L248 ! 214: 209 0001ADF2 fe 08 effffffe3f callf $8,_writes ! 215: 210 0001ADF9 # write32h( init_psl ); ! 216: 211 0001ADF9 dd effffffe39 pushl _init_psl ! 217: 212 0001ADFF fe 08 effffffe32 callf $8,_write32h ! 218: 213 0001AE06 # writes(", final PSL = "); ! 219: 214 0001AE06 .data 1 ! 220: 215 00000776 * L250: ! 221: 216 00000776 * 2C202066696E616C2050534C2 .ascii ", final PSL = \0" ! 222: 03D2000 ! 223: 217 00000786 * .text ! 224: 218 0001AE06 dd 8f00000776 pushl $L250 ! 225: 219 0001AE0C fe 08 effffffe25 callf $8,_writes ! 226: 220 0001AE13 # write32h( psl_val ); ! 227: 221 0001AE13 dd effffffe1f pushl _psl_val ! 228: 222 0001AE19 fe 08 effffffe18 callf $8,_write32h ! 229: 223 0001AE20 # writes(", expected PSL = "); ! 230: 224 0001AE20 .data 1 ! 231: 225 00000786 * L251: ! 232: 226 00000786 * 2C20206578706563746564205 .ascii ", expected PSL = \0" ! 233: 0534C203D2000 ! 234: 227 00000799 * .text ! 235: 228 0001AE20 dd 8f00000786 pushl $L251 ! 236: 229 0001AE26 fe 08 effffffe0b callf $8,_writes ! 237: 230 0001AE2D # write32h( exp_psl ); ! 238: 231 0001AE2D dd effffffe05 pushl _exp_psl ! 239: 232 0001AE33 fe 08 effffffdfe callf $8,_write32h ! 240: 233 0001AE3A # writes("\n"); ! 241: 234 0001AE3A .data 1 ! 242: 235 00000799 * L252: ! 243: 236 00000799 * 0A00 .ascii "\12\0" ! 244: 237 0000079b * .text ! 245: 238 0001AE3A dd 8f00000799 pushl $L252 ! 246: 239 0001AE40 fe 08 effffffdf1 callf $8,_writes ! 247: 240 0001AE47 # } ! 248: 241 0001AE47 # if( halt_flg ) ! 249: 242 0001AE47 L239: ! 250: 243 0001AE47 5d effffffdeb tstl _halt_flg ! 251: 244 0001AE4D 31 09 jeql L253 ! 252: 245 0001AE4F # tstd_er_halt( BAD_PSL_HLT ); /* halt on error */ ! 253: 246 0001AE4F dd 03 pushl $3 ! 254: 247 0001AE51 fe 08 ef00000442 callf $8,_tstd_er_halt ! 255: 248 0001AE58 # if( loop_on_err ) { ! 256: 249 0001AE58 L253: ! 257: 250 0001AE58 5d effffffdda tstl _loop_on_err ! 258: 251 0001AE5E 31 0a jeql L255 ! 259: 252 0001AE60 # force_loop = TRUE; /* set force loop flag */ ! 260: 253 0001AE60 0d 01 effffffdd1 movl $1,_force_loop ! 261: 254 0001AE67 # asm("brw _tstd_1_lp1"); /* loop on the error */ ! 262: 255 0001AE67 13 fe92 brw _tstd_1_lp1 ! 263: 256 0001AE6A # } /* end of loop on error */ ! 264: 257 0001AE6A # } /* end of PSL corruption error */ ! 265: 258 0001AE6A L255: ! 266: 259 0001AE6A # } /* end of initial status WHILE loop */ ! 267: 260 0001AE6A L238: ! 268: 261 0001AE6A L232: ! 269: 262 0001AE6A 6d effffffdc8 incl _status_index ! 270: 263 0001AE70 13 fe64 jbr L234 ! 271: 264 0001AE73 L233: ! 272: 265 0001AE73 # } /* end of data pattern WHILE loop */ ! 273: 266 0001AE73 L229: ! 274: 267 0001AE73 6d effffffdbf incl _index ! 275: 268 0001AE79 13 fe14 jbr L231 ! 276: 269 0001AE7C L230: ! 277: 270 0001AE7C # } /* end of subtest 1 */ ! 278: 271 0001AE7C 40 ret#2 ! 279: 272 0001AE7D .set L225,0x0 ! 280: 273 0001AE7D L227: ! 281: 274 0001AE7D 13 fdfd jbr L228 ! 282: 275 0001AE80 .data ! 283: 276 00000720 * .text ! 284: 277 0001AE80 .align 1 ! 285: 278 0001AE80 .globl _tstd_2 ! 286: 279 0001AE80 _tstd_2: ! 287: 280 0001AE80 0000 .word L256 ! 288: 281 0001AE82 # ! 289: 282 0001AE82 # ! 290: 283 0001AE82 # ! 291: 284 0001AE82 # /************************************************************************ ! 292: 285 0001AE82 # * ! 293: 286 0001AE82 # * SUBTEST 2 - Check for register corruption ! 294: 287 0001AE82 # * ! 295: 288 0001AE82 # ************************************************************************/ ! 296: 289 0001AE82 # tstd_2() ! 297: 290 0001AE82 # { ! 298: 291 0001AE82 13 0205 jbr L258 ! 299: 292 0001AE85 L259: ! 300: 293 0001AE85 # force_loop = FALSE; /* clear force_loop flg */ ! 301: 294 0001AE85 4d effffffdad clrl _force_loop ! 302: 295 0001AE8B # subtest = 2; ! 303: 296 0001AE8B 0d 02 effffffda6 movl $2,_subtest ! 304: 297 0001AE92 # fill_reg_buf( load_regs ); /* get patterns for regs */ ! 305: 298 0001AE92 dd 8f00000000 pushl $_load_regs ! 306: 299 0001AE98 fe 08 effffffd99 callf $8,_fill_reg_buf ! 307: 300 0001AE9F # for( index = 0; index < max_tstd_1_index; index++ ) { ! 308: 301 0001AE9F 4d effffffd93 clrl _index ! 309: 302 0001AEA5 L263: ! 310: 303 0001AEA5 1d effffffd8d effffffd88 cmpl _index,_max_tstd_1_index ! 311: 304 0001AEB0 91 03 13 01d4 jgeq L262 ! 312: 305 0001AEB5 # dbl_ld_acc = tstd_1_data[index].ld; /* get value to load */ ! 313: 306 0001AEB5 5c 0c effffffd7c 50 mull3 $12,_index,r0 ! 314: 307 0001AEBD 0c 8f00000000 50 addl2 $_tstd_1_data,r0 ! 315: 308 0001AEC4 0d a004 effffffd70 movl 4(r0),_dbl_ld_acc+4 ! 316: 309 0001AECC 0d 60 effffffd65 movl (r0),_dbl_ld_acc ! 317: 310 0001AED3 # sgl_expected = tstd_1_data[index].exp; /* get expected flags*/ ! 318: 311 0001AED3 5c 0c effffffd5e 50 mull3 $12,_index,r0 ! 319: 312 0001AEDB 0d e000000008 effffffd52 movl _tstd_1_data+8(r0),_sgl_expected ! 320: 313 0001AEE6 # for( status_index = 0; status_index < 3; status_index++ ) { ! 321: 314 0001AEE6 4d effffffd4c clrl _status_index ! 322: 315 0001AEEC L266: ! 323: 316 0001AEEC 1d effffffd46 03 cmpl _status_index,$3 ! 324: 317 0001AEF3 91 03 13 0188 jgeq L265 ! 325: 318 0001AEF8 # sgl_dummy1 = status_array[status_index]; /* status = +,-,0 */ ! 326: 319 0001AEF8 0d effffffd3a 50 movl _status_index,r0 ! 327: 320 0001AEFF 0d 40effffffd32 movl _status_array[r0],_sgl_dummy1 ! 328: effffffd2d ! 329: 321 0001AF0B # /* ! 330: 322 0001AF0B # * If LOOP ON ERROR is set, this is the loop for this subtest. ! 331: 323 0001AF0B # * The force loop flag is set after the first error. ! 332: 324 0001AF0B # */ ! 333: 325 0001AF0B # asm("_tstd_2_lp1:"); ! 334: 326 0001AF0B _tstd_2_lp1: ! 335: 327 0001AF0B # asm("ldd _dbl_ld_acc"); /* load the Acc. */ ! 336: 328 0001AF0B 07 effffffd27 ldd _dbl_ld_acc ! 337: 329 0001AF11 # asm("loadr $0x1fff,_load_regs"); /* load regs 0 - 12 */ ! 338: 330 0001AF11 ab 891fff effffffd1e loadr $0x1fff,_load_regs ! 339: 331 0001AF1A # asm("nop"); ! 340: 332 0001AF1A 10 nop ! 341: 333 0001AF1B # asm("tstd"); /* test the acc. */ ! 342: 334 0001AF1B 57 tstd ! 343: 335 0001AF1C # asm("nop"); ! 344: 336 0001AF1C 10 nop ! 345: 337 0001AF1D # asm("storer $0x1fff,_store_regs"); /* store regs 0 - 12 */ ! 346: 338 0001AF1D bb 891fff effffffd12 storer $0x1fff,_store_regs ! 347: 339 0001AF26 # asm("std _dbl_st_acc"); /* save the acc. */ ! 348: 340 0001AF26 27 effffffd0c std _dbl_st_acc ! 349: 341 0001AF2C # if( force_loop ) ! 350: 342 0001AF2C 5d effffffd06 tstl _force_loop ! 351: 343 0001AF32 31 02 jeql L267 ! 352: 344 0001AF34 # asm("brb _tstd_2_lp1");; /* loop on the error */ ! 353: 345 0001AF34 11 d5 brb _tstd_2_lp1 ! 354: 346 0001AF36 L267: ! 355: 347 0001AF36 # /* ! 356: 348 0001AF36 # * Now compare the stored register values to those that were loaded ! 357: 349 0001AF36 # */ ! 358: 350 0001AF36 # index2 = 0; ! 359: 351 0001AF36 4d effffffcfc clrl _index2 ! 360: 352 0001AF3C # while( (load_regs[index2] == store_regs[index2]) && ! 361: 353 0001AF3C # (index2 < 13) ) ! 362: 354 0001AF3C L268: ! 363: 355 0001AF3C 0d effffffcf6 50 movl _index2,r0 ! 364: 356 0001AF43 0d effffffcef 51 movl _index2,r1 ! 365: 357 0001AF4A 1d 40effffffce7 cmpl _load_regs[r0],_store_regs[r1] ! 366: 41effffffce1 ! 367: 358 0001AF57 21 11 jneq L269 ! 368: 359 0001AF59 1d effffffcd9 0d cmpl _index2,$13 ! 369: 360 0001AF60 81 08 jgeq L269 ! 370: 361 0001AF62 # index2++; /* check reg values */ ! 371: 362 0001AF62 6d effffffcd0 incl _index2 ! 372: 363 0001AF68 11 d2 jbr L268 ! 373: 364 0001AF6A L269: ! 374: 365 0001AF6A # if( index2 < 13 ) { /* error if index2 < 13 */ ! 375: 366 0001AF6A 1d effffffcc8 0d cmpl _index2,$13 ! 376: 367 0001AF71 91 03 13 0101 jgeq L270 ! 377: 368 0001AF76 # errcnt++; /* bump the error count */ ! 378: 369 0001AF76 6d effffffcbc incl _errcnt ! 379: 370 0001AF7C # if( prt_error ) { ! 380: 371 0001AF7C 5d effffffcb6 tstl _prt_error ! 381: 372 0001AF82 21 03 13 00cd jeql L271 ! 382: 373 0001AF87 # writes(" \n"); /* start a new print line */ ! 383: 374 0001AF87 .data 1 ! 384: 375 0000079b * L272: ! 385: 376 0000079b * 200A00 .ascii " \12\0" ! 386: 377 0000079e * .text ! 387: 378 0001AF87 dd 8f0000079b pushl $L272 ! 388: 379 0001AF8D fe 08 effffffca4 callf $8,_writes ! 389: 380 0001AF94 # writes("cycle: "); ! 390: 381 0001AF94 .data 1 ! 391: 382 0000079e * L273: ! 392: 383 0000079e * 6379636C653A2000 .ascii "cycle: \0" ! 393: 384 000007a6 * .text ! 394: 385 0001AF94 dd 8f0000079e pushl $L273 ! 395: 386 0001AF9A fe 08 effffffc97 callf $8,_writes ! 396: 387 0001AFA1 # writed( cycle ); ! 397: 388 0001AFA1 dd effffffc91 pushl _cycle ! 398: 389 0001AFA7 fe 08 effffffc8a callf $8,_writed ! 399: 390 0001AFAE # writes(" TSTD test "); ! 400: 391 0001AFAE .data 1 ! 401: 392 000007a6 * L274: ! 402: 393 000007a6 * 2020545354442074657374200 .ascii " TSTD test \0" ! 403: 0 ! 404: 394 000007b3 * .text ! 405: 395 0001AFAE dd 8f000007a6 pushl $L274 ! 406: 396 0001AFB4 fe 08 effffffc7d callf $8,_writes ! 407: 397 0001AFBB # writed( test_no ); ! 408: 398 0001AFBB dd effffffc77 pushl _test_no ! 409: 399 0001AFC1 fe 08 effffffc70 callf $8,_writed ! 410: 400 0001AFC8 # writes(", subtest 2 - A REGISTER WAS MODIFIED\n"); ! 411: 401 0001AFC8 .data 1 ! 412: 402 000007b3 * L275: ! 413: 403 000007b3 * 2C20737562746573742032202 .ascii ", subtest 2 - A REGISTER WAS MODIFIED\12\0" ! 414: D204120524547495354455220 ! 415: 574153204D4F4449464945440 ! 416: A00 ! 417: 404 000007da * .text ! 418: 405 0001AFC8 dd 8f000007b3 pushl $L275 ! 419: 406 0001AFCE fe 08 effffffc63 callf $8,_writes ! 420: 407 0001AFD5 # print_tstd_data(); /* print the operands */ ! 421: 408 0001AFD5 fe 04 ef00000256 callf $4,_print_tstd_data ! 422: 409 0001AFDC # writes("\n"); ! 423: 410 0001AFDC .data 1 ! 424: 411 000007da * L276: ! 425: 412 000007da * 0A00 .ascii "\12\0" ! 426: 413 000007dc * .text ! 427: 414 0001AFDC dd 8f000007da pushl $L276 ! 428: 415 0001AFE2 fe 08 effffffc4f callf $8,_writes ! 429: 416 0001AFE9 # writes("register "); /* print the information */ ! 430: 417 0001AFE9 .data 1 ! 431: 418 000007dc * L277: ! 432: 419 000007dc * 72656769737465722000 .ascii "register \0" ! 433: 420 000007e6 * .text ! 434: 421 0001AFE9 dd 8f000007dc pushl $L277 ! 435: 422 0001AFEF fe 08 effffffc42 callf $8,_writes ! 436: 423 0001AFF6 # writed( index2 ); /* about the corrupted */ ! 437: 424 0001AFF6 dd effffffc3c pushl _index2 ! 438: 425 0001AFFC fe 08 effffffc35 callf $8,_writed ! 439: 426 0001B003 # writes(" = "); /* register */ ! 440: 427 0001B003 .data 1 ! 441: 428 000007e6 * L278: ! 442: 429 000007e6 * 203D2000 .ascii " = \0" ! 443: 430 000007ea * .text ! 444: 431 0001B003 dd 8f000007e6 pushl $L278 ! 445: 432 0001B009 fe 08 effffffc28 callf $8,_writes ! 446: 433 0001B010 # write32h( store_regs[index2] ); ! 447: 434 0001B010 0d effffffc22 50 movl _index2,r0 ! 448: 435 0001B017 dd 40effffffc1a pushl _store_regs[r0] ! 449: 436 0001B01E fe 08 effffffc13 callf $8,_write32h ! 450: 437 0001B025 # writes(", should be = "); ! 451: 438 0001B025 .data 1 ! 452: 439 000007ea * L279: ! 453: 440 000007ea * 2C202073686F756C642062652 .ascii ", should be = \0" ! 454: 03D2000 ! 455: 441 000007fa * .text ! 456: 442 0001B025 dd 8f000007ea pushl $L279 ! 457: 443 0001B02B fe 08 effffffc06 callf $8,_writes ! 458: 444 0001B032 # write32h( load_regs[index2] ); ! 459: 445 0001B032 0d effffffc00 50 movl _index2,r0 ! 460: 446 0001B039 dd 40effffffbf8 pushl _load_regs[r0] ! 461: 447 0001B040 fe 08 effffffbf1 callf $8,_write32h ! 462: 448 0001B047 # writes("\n"); ! 463: 449 0001B047 .data 1 ! 464: 450 000007fa * L280: ! 465: 451 000007fa * 0A00 .ascii "\12\0" ! 466: 452 000007fc * .text ! 467: 453 0001B047 dd 8f000007fa pushl $L280 ! 468: 454 0001B04D fe 08 effffffbe4 callf $8,_writes ! 469: 455 0001B054 # } ! 470: 456 0001B054 # if( halt_flg ) ! 471: 457 0001B054 L271: ! 472: 458 0001B054 5d effffffbde tstl _halt_flg ! 473: 459 0001B05A 31 09 jeql L281 ! 474: 460 0001B05C # tstd_er_halt( BAD_REG_HLT ); /* halt on error */ ! 475: 461 0001B05C dd 02 pushl $2 ! 476: 462 0001B05E fe 08 ef00000235 callf $8,_tstd_er_halt ! 477: 463 0001B065 # if( loop_on_err ) { ! 478: 464 0001B065 L281: ! 479: 465 0001B065 5d effffffbcd tstl _loop_on_err ! 480: 466 0001B06B 31 0a jeql L282 ! 481: 467 0001B06D # force_loop = TRUE; /* set force loop flag */ ! 482: 468 0001B06D 0d 01 effffffbc4 movl $1,_force_loop ! 483: 469 0001B074 # asm("brw _tstd_2_lp1"); /* loop on the error */ ! 484: 470 0001B074 13 fe94 brw _tstd_2_lp1 ! 485: 471 0001B077 # } /* end of loop on error */ ! 486: 472 0001B077 # } /* end of register corruption error */ ! 487: 473 0001B077 L282: ! 488: 474 0001B077 # } /* end of initial PSL WHILE loop */ ! 489: 475 0001B077 L270: ! 490: 476 0001B077 L264: ! 491: 477 0001B077 6d effffffbbb incl _status_index ! 492: 478 0001B07D 13 fe6c jbr L266 ! 493: 479 0001B080 L265: ! 494: 480 0001B080 # } /* end of tstd data WHILE loop */ ! 495: 481 0001B080 L261: ! 496: 482 0001B080 6d effffffbb2 incl _index ! 497: 483 0001B086 13 fe1c jbr L263 ! 498: 484 0001B089 L262: ! 499: 485 0001B089 # } /* end of subtest 2 */ ! 500: 486 0001B089 40 ret#2 ! 501: 487 0001B08A .set L256,0x0 ! 502: 488 0001B08A L258: ! 503: 489 0001B08A 13 fdf8 jbr L259 ! 504: 490 0001B08D .data ! 505: 491 00000720 * .text ! 506: 492 0001B08D 00 .align 1 ! 507: 493 0001B08E .globl _tstd_3 ! 508: 494 0001B08E _tstd_3: ! 509: 495 0001B08E 0000 .word L283 ! 510: 496 0001B090 # ! 511: 497 0001B090 # ! 512: 498 0001B090 # ! 513: 499 0001B090 # ! 514: 500 0001B090 # /************************************************************************ ! 515: 501 0001B090 # * ! 516: 502 0001B090 # * SUBTEST 3 - Check for accumulator corruption ! 517: 503 0001B090 # * ! 518: 504 0001B090 # ************************************************************************/ ! 519: 505 0001B090 # tstd_3() ! 520: 506 0001B090 # { ! 521: 507 0001B090 13 019b jbr L285 ! 522: 508 0001B093 L286: ! 523: 509 0001B093 # force_loop = FALSE; /* clear force_loop flg */ ! 524: 510 0001B093 4d effffffb9f clrl _force_loop ! 525: 511 0001B099 # subtest = 3; ! 526: 512 0001B099 0d 03 effffffb98 movl $3,_subtest ! 527: 513 0001B0A0 # for( index = 0; index < max_tstd_1_index; index++ ) { ! 528: 514 0001B0A0 4d effffffb92 clrl _index ! 529: 515 0001B0A6 L289: ! 530: 516 0001B0A6 1d effffffb8c effffffb87 cmpl _index,_max_tstd_1_index ! 531: 517 0001B0B1 91 03 13 0177 jgeq L288 ! 532: 518 0001B0B6 # dbl_ld_acc = tstd_1_data[index].ld; /* get value to load */ ! 533: 519 0001B0B6 5c 0c effffffb7b 50 mull3 $12,_index,r0 ! 534: 520 0001B0BE 0c 8f00000000 50 addl2 $_tstd_1_data,r0 ! 535: 521 0001B0C5 0d a004 effffffb6f movl 4(r0),_dbl_ld_acc+4 ! 536: 522 0001B0CD 0d 60 effffffb64 movl (r0),_dbl_ld_acc ! 537: 523 0001B0D4 # if( !(dbl_ld_acc.m & 0x7f800000) ) { ! 538: 524 0001B0D4 3d 8f7f800000 effffffb59 bitl $2139095040,_dbl_ld_acc ! 539: 525 0001B0DF 21 0e jneq L290 ! 540: 526 0001B0E1 # dbl_expected.m = 0; ! 541: 527 0001B0E1 4d effffffb51 clrl _dbl_expected ! 542: 528 0001B0E7 # dbl_expected.l = 0; /* ignore bad 0's */ ! 543: 529 0001B0E7 4d effffffb4f clrl _dbl_expected+4 ! 544: 530 0001B0ED # } else ! 545: 531 0001B0ED 11 16 jbr L291 ! 546: 532 0001B0EF L290: ! 547: 533 0001B0EF # dbl_expected = dbl_ld_acc; ! 548: 534 0001B0EF 0d effffffb47 effffffb42 movl _dbl_ld_acc+4,_dbl_expected+4 ! 549: 535 0001B0FA 0d effffffb38 effffffb33 movl _dbl_ld_acc,_dbl_expected ! 550: 536 0001B105 L291: ! 551: 537 0001B105 # /* ! 552: 538 0001B105 # * If LOOP ON ERROR is set, this is the loop for this subtest. ! 553: 539 0001B105 # * The force loop flag is set after the first error. ! 554: 540 0001B105 # */ ! 555: 541 0001B105 # asm("_tstd_3_lp1:"); ! 556: 542 0001B105 _tstd_3_lp1: ! 557: 543 0001B105 # asm("ldd _dbl_ld_acc"); ! 558: 544 0001B105 07 effffffb2d ldd _dbl_ld_acc ! 559: 545 0001B10B # asm("nop"); ! 560: 546 0001B10B 10 nop ! 561: 547 0001B10C # asm("tstd"); /* test the accumulator */ ! 562: 548 0001B10C 57 tstd ! 563: 549 0001B10D # asm("nop"); ! 564: 550 0001B10D 10 nop ! 565: 551 0001B10E # asm("std _dbl_st_acc"); /* save the accumulator */ ! 566: 552 0001B10E 27 effffffb24 std _dbl_st_acc ! 567: 553 0001B114 # if( force_loop ) ! 568: 554 0001B114 5d effffffb1e tstl _force_loop ! 569: 555 0001B11A 31 02 jeql L292 ! 570: 556 0001B11C # asm("brb _tstd_3_lp1");; /* loop on the error */ ! 571: 557 0001B11C 11 e7 brb _tstd_3_lp1 ! 572: 558 0001B11E L292: ! 573: 559 0001B11E # /* ! 574: 560 0001B11E # * Now compare the stored register values to those that were loaded ! 575: 561 0001B11E # */ ! 576: 562 0001B11E # if( (dbl_st_acc.m != dbl_expected.m ) || /* Acc corrupted? */ ! 577: 563 0001B11E # (dbl_st_acc.l != dbl_expected.l) ) { ! 578: 564 0001B11E 1d effffffb14 effffffb0f cmpl _dbl_st_acc,_dbl_expected ! 579: 565 0001B129 21 10 jneq L9999 ! 580: 566 0001B12B 1d effffffb0b effffffb06 cmpl _dbl_st_acc+4,_dbl_expected+4 ! 581: 567 0001B136 21 03 13 00e9 jeql L293 ! 582: 568 0001B13B L9999: ! 583: 569 0001B13B # errcnt++; /* bump error count */ ! 584: 570 0001B13B 6d effffffaf7 incl _errcnt ! 585: 571 0001B141 # if( prt_error ) { ! 586: 572 0001B141 5d effffffaf1 tstl _prt_error ! 587: 573 0001B147 21 03 13 00b5 jeql L294 ! 588: 574 0001B14C # writes(" \n"); /* start a new line */ ! 589: 575 0001B14C .data 1 ! 590: 576 000007fc * L295: ! 591: 577 000007fc * 200A00 .ascii " \12\0" ! 592: 578 000007ff * .text ! 593: 579 0001B14C dd 8f000007fc pushl $L295 ! 594: 580 0001B152 fe 08 effffffadf callf $8,_writes ! 595: 581 0001B159 # writes("cycle: "); ! 596: 582 0001B159 .data 1 ! 597: 583 000007ff * L296: ! 598: 584 000007ff * 6379636C653A2000 .ascii "cycle: \0" ! 599: 585 00000807 * .text ! 600: 586 0001B159 dd 8f000007ff pushl $L296 ! 601: 587 0001B15F fe 08 effffffad2 callf $8,_writes ! 602: 588 0001B166 # writed( cycle ); ! 603: 589 0001B166 dd effffffacc pushl _cycle ! 604: 590 0001B16C fe 08 effffffac5 callf $8,_writed ! 605: 591 0001B173 # writes(" TSTD test "); ! 606: 592 0001B173 .data 1 ! 607: 593 00000807 * L297: ! 608: 594 00000807 * 2020545354442074657374200 .ascii " TSTD test \0" ! 609: 0 ! 610: 595 00000814 * .text ! 611: 596 0001B173 dd 8f00000807 pushl $L297 ! 612: 597 0001B179 fe 08 effffffab8 callf $8,_writes ! 613: 598 0001B180 # writed( test_no ); ! 614: 599 0001B180 dd effffffab2 pushl _test_no ! 615: 600 0001B186 fe 08 effffffaab callf $8,_writed ! 616: 601 0001B18D # writes(", subtest 3 - THE ACC WAS MODIFIED\n"); ! 617: 602 0001B18D .data 1 ! 618: 603 00000814 * L298: ! 619: 604 00000814 * 2C20737562746573742033202 .ascii ", subtest 3 - THE ACC WAS MODIFIED\12\0" ! 620: D205448452041434320574153 ! 621: 204D4F4449464945440A00 ! 622: 605 00000838 * .text ! 623: 606 0001B18D dd 8f00000814 pushl $L298 ! 624: 607 0001B193 fe 08 effffffa9e callf $8,_writes ! 625: 608 0001B19A # print_tstd_data(); /* print the operands */ ! 626: 609 0001B19A fe 04 ef00000091 callf $4,_print_tstd_data ! 627: 610 0001B1A1 # writes(", index = "); ! 628: 611 0001B1A1 .data 1 ! 629: 612 00000838 * L299: ! 630: 613 00000838 * 2C2020696E646578203D2000 .ascii ", index = \0" ! 631: 614 00000844 * .text ! 632: 615 0001B1A1 dd 8f00000838 pushl $L299 ! 633: 616 0001B1A7 fe 08 effffffa8a callf $8,_writes ! 634: 617 0001B1AE # writed( index ); ! 635: 618 0001B1AE dd effffffa84 pushl _index ! 636: 619 0001B1B4 fe 08 effffffa7d callf $8,_writed ! 637: 620 0001B1BB # writec('\n'); ! 638: 621 0001B1BB dd 0a pushl $10 ! 639: 622 0001B1BD fe 08 effffffa74 callf $8,_writec ! 640: 623 0001B1C4 # writes(" expected Acc = "); ! 641: 624 0001B1C4 .data 1 ! 642: 625 00000844 * L300: ! 643: 626 00000844 * 2020202020202020202020202 .ascii " expected Acc = \0" ! 644: 0202020202020202020202020 ! 645: 2020202020206578706563746 ! 646: 56420416363203D2000 ! 647: 627 00000873 * .text ! 648: 628 0001B1C4 dd 8f00000844 pushl $L300 ! 649: 629 0001B1CA fe 08 effffffa67 callf $8,_writes ! 650: 630 0001B1D1 # write32h( dbl_expected.m ); ! 651: 631 0001B1D1 dd effffffa61 pushl _dbl_expected ! 652: 632 0001B1D7 fe 08 effffffa5a callf $8,_write32h ! 653: 633 0001B1DE # writec(' '); ! 654: 634 0001B1DE dd 20 pushl $32 ! 655: 635 0001B1E0 fe 08 effffffa51 callf $8,_writec ! 656: 636 0001B1E7 # write32h( dbl_expected.l ); ! 657: 637 0001B1E7 dd effffffa4f pushl _dbl_expected+4 ! 658: 638 0001B1ED fe 08 effffffa44 callf $8,_write32h ! 659: 639 0001B1F4 # writes("\n"); ! 660: 640 0001B1F4 .data 1 ! 661: 641 00000873 * L301: ! 662: 642 00000873 * 0A00 .ascii "\12\0" ! 663: 643 00000875 * .text ! 664: 644 0001B1F4 dd 8f00000873 pushl $L301 ! 665: 645 0001B1FA fe 08 effffffa37 callf $8,_writes ! 666: 646 0001B201 # } ! 667: 647 0001B201 # if( halt_flg ) ! 668: 648 0001B201 L294: ! 669: 649 0001B201 5d effffffa31 tstl _halt_flg ! 670: 650 0001B207 31 09 jeql L302 ! 671: 651 0001B209 # tstd_er_halt( BAD_ACC_HLT ); /* halt on error */ ! 672: 652 0001B209 dd 01 pushl $1 ! 673: 653 0001B20B fe 08 ef00000088 callf $8,_tstd_er_halt ! 674: 654 0001B212 # if( loop_on_err ) { ! 675: 655 0001B212 L302: ! 676: 656 0001B212 5d effffffa20 tstl _loop_on_err ! 677: 657 0001B218 31 0a jeql L303 ! 678: 658 0001B21A # force_loop = TRUE; /* set force loop flag */ ! 679: 659 0001B21A 0d 01 effffffa17 movl $1,_force_loop ! 680: 660 0001B221 # asm("brw _tstd_3_lp1"); /* loop on the error */ ! 681: 661 0001B221 13 fee1 brw _tstd_3_lp1 ! 682: 662 0001B224 # } /* end of loop on error */ ! 683: 663 0001B224 # } /* end of register corruption error */ ! 684: 664 0001B224 L303: ! 685: 665 0001B224 # } /* end of tstd data WHILE loop */ ! 686: 666 0001B224 L293: ! 687: 667 0001B224 L287: ! 688: 668 0001B224 6d effffffa0e incl _index ! 689: 669 0001B22A 13 fe79 jbr L289 ! 690: 670 0001B22D L288: ! 691: 671 0001B22D # } /* end of subtest 3 */ ! 692: 672 0001B22D 40 ret#2 ! 693: 673 0001B22E .set L283,0x0 ! 694: 674 0001B22E L285: ! 695: 675 0001B22E 13 fe62 jbr L286 ! 696: 676 0001B231 .data ! 697: 677 00000720 * .text ! 698: 678 0001B231 00 .align 1 ! 699: 679 0001B232 .globl _print_tstd_data ! 700: 680 0001B232 _print_tstd_data: ! 701: 681 0001B232 0000 .word L304 ! 702: 682 0001B234 # ! 703: 683 0001B234 # ! 704: 684 0001B234 # ! 705: 685 0001B234 # /************************************************************************** ! 706: 686 0001B234 # * ! 707: 687 0001B234 # * PRINT THE DATA AND STORE RESULTS ! 708: 688 0001B234 # * ! 709: 689 0001B234 # * initial Acc = xxxxxxxx xxxxxxxx, final Acc = xxxxxxxx xxxxxxxx, index = xx ! 710: 690 0001B234 # **************************************************************************/ ! 711: 691 0001B234 # print_tstd_data() ! 712: 692 0001B234 # { ! 713: 693 0001B234 11 61 jbr L306 ! 714: 694 0001B236 L307: ! 715: 695 0001B236 # writes("initial Acc = "); ! 716: 696 0001B236 .data 1 ! 717: 697 00000875 * L308: ! 718: 698 00000875 * 696E697469616C20416363203 .ascii "initial Acc = \0" ! 719: D2000 ! 720: 699 00000884 * .text ! 721: 700 0001B236 dd 8f00000875 pushl $L308 ! 722: 701 0001B23C fe 08 effffff9f5 callf $8,_writes ! 723: 702 0001B243 # write32h( dbl_ld_acc.m ); ! 724: 703 0001B243 dd effffff9ef pushl _dbl_ld_acc ! 725: 704 0001B249 fe 08 effffff9e8 callf $8,_write32h ! 726: 705 0001B250 # writec(' '); ! 727: 706 0001B250 dd 20 pushl $32 ! 728: 707 0001B252 fe 08 effffff9df callf $8,_writec ! 729: 708 0001B259 # write32h( dbl_ld_acc.l ); ! 730: 709 0001B259 dd effffff9dd pushl _dbl_ld_acc+4 ! 731: 710 0001B25F fe 08 effffff9d2 callf $8,_write32h ! 732: 711 0001B266 # writes(", final Acc = "); ! 733: 712 0001B266 .data 1 ! 734: 713 00000884 * L309: ! 735: 714 00000884 * 2C202066696E616C204163632 .ascii ", final Acc = \0" ! 736: 03D2000 ! 737: 715 00000894 * .text ! 738: 716 0001B266 dd 8f00000884 pushl $L309 ! 739: 717 0001B26C fe 08 effffff9c5 callf $8,_writes ! 740: 718 0001B273 # write32h( dbl_st_acc.m ); ! 741: 719 0001B273 dd effffff9bf pushl _dbl_st_acc ! 742: 720 0001B279 fe 08 effffff9b8 callf $8,_write32h ! 743: 721 0001B280 # writec(' '); ! 744: 722 0001B280 dd 20 pushl $32 ! 745: 723 0001B282 fe 08 effffff9af callf $8,_writec ! 746: 724 0001B289 # write32h( dbl_st_acc.l ); ! 747: 725 0001B289 dd effffff9ad pushl _dbl_st_acc+4 ! 748: 726 0001B28F fe 08 effffff9a2 callf $8,_write32h ! 749: 727 0001B296 # } ! 750: 728 0001B296 40 ret#2 ! 751: 729 0001B297 .set L304,0x0 ! 752: 730 0001B297 L306: ! 753: 731 0001B297 11 9d jbr L307 ! 754: 732 0001B299 .data ! 755: 733 00000720 * .text ! 756: 734 0001B299 00 .align 1 ! 757: 735 0001B29A .globl _tstd_er_halt ! 758: 736 0001B29A _tstd_er_halt: ! 759: 737 0001B29A 0000 .word L310 ! 760: 738 0001B29C # ! 761: 739 0001B29C # ! 762: 740 0001B29C # ! 763: 741 0001B29C # /************************************************************************** ! 764: 742 0001B29C # * ! 765: 743 0001B29C # * HALT ON ERROR ROUTINE ! 766: 744 0001B29C # * ! 767: 745 0001B29C # **************************************************************************/ ! 768: 746 0001B29C # tstd_er_halt( halt_code ) ! 769: 747 0001B29C # int halt_code; ! 770: 748 0001B29C # { ! 771: 749 0001B29C 13 00b6 jbr L312 ! 772: 750 0001B29F L313: ! 773: 751 0001B29F # sgl_dummy1 = halt_code; /* get the error type */ ! 774: 752 0001B29F 0d ad04 effffff991 movl 4(fp),_sgl_dummy1 ! 775: 753 0001B2A7 # asm("movl _test_no,r0"); /* r0 = test number */ ! 776: 754 0001B2A7 0d effffff98b 50 movl _test_no,r0 ! 777: 755 0001B2AE # asm("movl _subtest,r1"); /* r1 = subtest number */ ! 778: 756 0001B2AE 0d effffff984 51 movl _subtest,r1 ! 779: 757 0001B2B5 # asm("movl _sgl_dummy1,r2"); /* r2 = error code */ ! 780: 758 0001B2B5 0d effffff97d 52 movl _sgl_dummy1,r2 ! 781: 759 0001B2BC # asm("movl _cycle,r3"); /* r3 = cycle count */ ! 782: 760 0001B2BC 0d effffff976 53 movl _cycle,r3 ! 783: 761 0001B2C3 # asm("movl _dbl_ld_acc,r4"); /* r4 = MS of init Acc */ ! 784: 762 0001B2C3 0d effffff96f 54 movl _dbl_ld_acc,r4 ! 785: 763 0001B2CA # asm("movl _dbl_ld_acc+4,r5"); /* r5 = LS of init Acc */ ! 786: 764 0001B2CA 0d effffff96c 55 movl _dbl_ld_acc+4,r5 ! 787: 765 0001B2D1 # asm("movl _psl_val,r6"); /* r6 = final PSL */ ! 788: 766 0001B2D1 0d effffff961 56 movl _psl_val,r6 ! 789: 767 0001B2D8 # if( halt_code == BAD_ACC_HLT ) { ! 790: 768 0001B2D8 1d ad04 01 cmpl 4(fp),$1 ! 791: 769 0001B2DC 21 1e jneq L314 ! 792: 770 0001B2DE # asm("movl _dbl_st_acc,r7"); /* r7 = MS of final Acc */ ! 793: 771 0001B2DE 0d effffff954 57 movl _dbl_st_acc,r7 ! 794: 772 0001B2E5 # asm("movl _dbl_st_acc+4,r8"); /* r8 = LS of final Acc */ ! 795: 773 0001B2E5 0d effffff951 58 movl _dbl_st_acc+4,r8 ! 796: 774 0001B2EC # asm("movl _dbl_expected,r9"); /* r9 = MS of expected */ ! 797: 775 0001B2EC 0d effffff946 59 movl _dbl_expected,r9 ! 798: 776 0001B2F3 # asm("movl _dbl_expected+4,r10"); /* r10 = LS of expected */ ! 799: 777 0001B2F3 0d effffff943 5a movl _dbl_expected+4,r10 ! 800: 778 0001B2FA # } else ! 801: 779 0001B2FA 11 57 jbr L315 ! 802: 780 0001B2FC L314: ! 803: 781 0001B2FC # if( halt_code == BAD_REG_HLT ) { ! 804: 782 0001B2FC 1d ad04 02 cmpl 4(fp),$2 ! 805: 783 0001B300 21 3d jneq L316 ! 806: 784 0001B302 # sgl_dummy1 = load_regs[index2]; ! 807: 785 0001B302 0d effffff930 50 movl _index2,r0 ! 808: 786 0001B309 0d 40effffff928 movl _load_regs[r0],_sgl_dummy1 ! 809: effffff923 ! 810: 787 0001B315 # sgl_dummy2 = store_regs[index2]; ! 811: 788 0001B315 0d effffff91d 50 movl _index2,r0 ! 812: 789 0001B31C 0d 40effffff915 movl _store_regs[r0],_sgl_dummy2 ! 813: effffff910 ! 814: 790 0001B328 # asm("movl _index2,r7"); /* r7 = bad register # */ ! 815: 791 0001B328 0d effffff90a 57 movl _index2,r7 ! 816: 792 0001B32F # asm("movl _sgl_dummy2,r8"); /* r8 = actual value */ ! 817: 793 0001B32F 0d effffff903 58 movl _sgl_dummy2,r8 ! 818: 794 0001B336 # asm("movl _sgl_dummy1,r9"); /* r9 = expected value */ ! 819: 795 0001B336 0d effffff8fc 59 movl _sgl_dummy1,r9 ! 820: 796 0001B33D # } else ! 821: 797 0001B33D 11 14 jbr L317 ! 822: 798 0001B33F L316: ! 823: 799 0001B33F # if( halt_code == BAD_PSL_HLT ) { ! 824: 800 0001B33F 1d ad04 03 cmpl 4(fp),$3 ! 825: 801 0001B343 21 0e jneq L318 ! 826: 802 0001B345 # asm("movl _exp_psl,r7"); /* r7 = expected PSL */ ! 827: 803 0001B345 0d effffff8ed 57 movl _exp_psl,r7 ! 828: 804 0001B34C # asm("movl _index,r8"); /* r8 = data index */ ! 829: 805 0001B34C 0d effffff8e6 58 movl _index,r8 ! 830: 806 0001B353 # }; ! 831: 807 0001B353 L318: ! 832: 808 0001B353 L317: ! 833: 809 0001B353 L315: ! 834: 810 0001B353 # asm("halt"); /* HALT ... */ ! 835: 811 0001B353 00 halt ! 836: 812 0001B354 # } ! 837: 813 0001B354 40 ret#2 ! 838: 814 0001B355 .set L310,0x0 ! 839: 815 0001B355 L312: ! 840: 816 0001B355 13 ff47 jbr L313 ! 841: 817 00000720 * .data ! 842: 817 00000720 * .data
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.