|
|
1.1 ! root 1: 1 00000000 LL0: ! 2: 2 00000000 .data ! 3: 3 0000050c * .text ! 4: 4 00000000 .align 1 ! 5: 5 00000000 .globl _pipe15 ! 6: 6 00000000 _pipe15: ! 7: 7 00013EF4 0000 .word L381 ! 8: 8 00013EF6 # ! 9: 9 00013EF6 # #include "evt_defs.h" ! 10: 10 00013EF6 # ! 11: 11 00013EF6 # /* ! 12: 12 00013EF6 # ********************************************************************* ! 13: 13 00013EF6 # * FPP PIPELINED EVENTS TEST #15 ! 14: 14 00013EF6 # * ! 15: 15 00013EF6 # * This test will execute the following code: "LDF MULF STF" ! 16: 16 00013EF6 # * with an overflow fault on the MULF. We will make sure that: ! 17: 17 00013EF6 # * 1. The fault is detected, ! 18: 18 00013EF6 # * 2. the accumulator is cleared, and ! 19: 19 00013EF6 # * 3. a floating '0' is stored if anything. ! 20: 20 00013EF6 # ********************************************************************* ! 21: 21 00013EF6 # */ ! 22: 22 00013EF6 # pipe15() ! 23: 23 00013EF6 # { ! 24: 24 00013EF6 13 014b jbr L383 ! 25: 25 00013EF9 L384: ! 26: 26 00013EF9 # #define PIPE15_PAT 0x12341234 ! 27: 27 00013EF9 # asm("moval (r13),_pre_event_fp"); /* save the frame pointer */ ! 28: 28 00013EF9 ed 6d effffffff4 moval (r13),_pre_event_fp ! 29: 29 00013F00 # asm("moval (r14),_pre_event_sp"); /* save the stack pointer */ ! 30: 30 00013F00 ed 6e efffffffed moval (r14),_pre_event_sp ! 31: 31 00013F07 # precision = SGL; ! 32: 32 00013F07 0d 01 efffffffe6 movl $1,_precision ! 33: 33 00013F0E # test_event = ARITH_CODE; /* expect an arithmetic fault */ ! 34: 34 00013F0E 0d 34 efffffffdf movl $52,_test_event ! 35: 35 00013F15 # exp_code = FLT_OVFL_CODE; /* - specificly overflow */ ! 36: 36 00013F15 0d 04 efffffffd8 movl $4,_exp_code ! 37: 37 00013F1C # exp_event = FALSE; /* ... but not yet */ ! 38: 38 00013F1C 4d efffffffd2 clrl _exp_event ! 39: 39 00013F22 # asm("movab _pipe15_ret,_event_return"); /* set event return address */ ! 40: 40 00013F22 e9 ef000000b9 efffffffc7 movab _pipe15_ret,_event_return ! 41: 41 00013F2D # max_index = muf_ov_cnt; /* set max operand index */ ! 42: 42 00013F2D 0d efffffffc1 efffffffbc movl _muf_ov_cnt,_max_index ! 43: 43 00013F38 # for( index = 0; index < max_index; index++ ) { ! 44: 44 00013F38 4d efffffffb6 clrl _index ! 45: 45 00013F3E L387: ! 46: 46 00013F3E 1d efffffffb0 efffffffab cmpl _index,_max_index ! 47: 47 00013F49 91 03 13 00f5 jgeq L386 ! 48: 48 00013F4E # dbl_ld_acc = muf_ov_dat[index].op_1; /* get the Acc data */ ! 49: 49 00013F4E 48 04 efffffff9f 50 shll $4,_index,r0 ! 50: 50 00013F56 0c 8f00000000 50 addl2 $_muf_ov_dat,r0 ! 51: 51 00013F5D 0d a004 efffffff93 movl 4(r0),_dbl_ld_acc+4 ! 52: 52 00013F65 0d 60 efffffff88 movl (r0),_dbl_ld_acc ! 53: 53 00013F6C # dbl_value_1 = muf_ov_dat[index].op_2; /* get the '0' data */ ! 54: 54 00013F6C 48 04 efffffff81 50 shll $4,_index,r0 ! 55: 55 00013F74 0c 8f00000008 50 addl2 $_muf_ov_dat+8,r0 ! 56: 56 00013F7B 0d a004 efffffff75 movl 4(r0),_dbl_value_1+4 ! 57: 57 00013F83 0d 60 efffffff6a movl (r0),_dbl_value_1 ! 58: 58 00013F8A # dbl_value_2.m = PIPE15_PAT; /* background for STF*/ ! 59: 59 00013F8A 0d 8f12341234 efffffff5f movl $305402420,_dbl_value_2 ! 60: 60 00013F95 # asm(".globl _pipe15_lp1"); ! 61: 61 00013F95 .globl _pipe15_lp1 ! 62: 62 00013F95 # asm("_pipe15_lp1:"); ! 63: 63 00013F95 _pipe15_lp1: ! 64: 64 00013F95 # asm("bispsw $0x60"); /* enable ovfl & undfl events*/ ! 65: 65 00013F95 8b 8860 bispsw $0x60 ! 66: 66 00013F98 # asm("ldf _dbl_ld_acc"); /* load the Acc. */ ! 67: 67 00013F98 06 efffffff56 ldf _dbl_ld_acc ! 68: 68 00013F9E # exp_event = test_event; /* set the expect event flag */ ! 69: 69 00013F9E 0d efffffff50 efffffff4b movl _test_event,_exp_event ! 70: 70 00013FA9 # asm("mulf _dbl_value_1"); /* trigger the event */ ! 71: 71 00013FA9 e6 efffffff45 mulf _dbl_value_1 ! 72: 72 00013FAF # asm("stf _dbl_value_2"); /* FPP stores before the evt.*/ ! 73: 73 00013FAF 26 efffffff3f stf _dbl_value_2 ! 74: 74 00013FB5 # /* ! 75: 75 00013FB5 # * If we got to here then there was no event ! 76: 76 00013FB5 # */ ! 77: 77 00013FB5 # if( force_loop ) ! 78: 78 00013FB5 5d efffffff39 tstl _force_loop ! 79: 79 00013FBB 31 06 jeql L388 ! 80: 80 00013FBD # asm("jmp _pipe15_lp1");; /* loop on the error */ ! 81: 81 00013FBD 71 efffffffd2 jmp _pipe15_lp1 ! 82: 82 00013FC3 L388: ! 83: 83 00013FC3 # exp_event = FALSE; /* reset event expected flag */ ! 84: 84 00013FC3 4d efffffff2b clrl _exp_event ! 85: 85 00013FC9 # asm("movl _pre_event_fp,fp"); /* restore the frame pointer */ ! 86: 86 00013FC9 0d efffffff25 5d movl _pre_event_fp,fp ! 87: 87 00013FD0 # asm("movl _pre_event_sp,sp"); /* restore the stack pointer */ ! 88: 88 00013FD0 0d efffffff1e 5e movl _pre_event_sp,sp ! 89: 89 00013FD7 # asm("bicpsw $0x60"); /* disable ovfl & undfl evts */ ! 90: 90 00013FD7 9b 8860 bicpsw $0x60 ! 91: 91 00013FDA # no_pipe15_evt();; /* report the error */ ! 92: 92 00013FDA fe 04 ef00000067 callf $4,_no_pipe15_evt ! 93: 93 00013FE1 # /* ! 94: 94 00013FE1 # * Come here after the event ! 95: 95 00013FE1 # */ ! 96: 96 00013FE1 # asm(".globl _pipe15_ret"); ! 97: 97 00013FE1 .globl _pipe15_ret ! 98: 98 00013FE1 # asm("_pipe15_ret:"); ! 99: 99 00013FE1 _pipe15_ret: ! 100: 100 00013FE1 # asm("movl _pre_event_fp,fp"); /* restore the frame pointer */ ! 101: 101 00013FE1 0d efffffff0d 5d movl _pre_event_fp,fp ! 102: 102 00013FE8 # asm("movl _pre_event_sp,sp"); /* restore the stack pointer */ ! 103: 103 00013FE8 0d efffffff06 5e movl _pre_event_sp,sp ! 104: 104 00013FEF # if( force_loop ) ! 105: 105 00013FEF 5d effffffeff tstl _force_loop ! 106: 106 00013FF5 31 06 jeql L390 ! 107: 107 00013FF7 # asm("jmp _pipe15_lp1");; /* loop on the error */ ! 108: 108 00013FF7 71 efffffff98 jmp _pipe15_lp1 ! 109: 109 00013FFD L390: ! 110: 110 00013FFD # asm("bicpsw $0x60"); /* disable ovfl & undfl evts */ ! 111: 111 00013FFD 9b 8860 bicpsw $0x60 ! 112: 112 00014000 # if( post_evt_acc.m ) /* was the Acc cleared? */ ! 113: 113 00014000 5d effffffeee tstl _post_evt_acc ! 114: 114 00014006 31 09 jeql L391 ! 115: 115 00014008 # bad_pipe15_result(); /* incorrect result error */ ! 116: 116 00014008 fe 04 ef000000f5 callf $4,_bad_pipe15_result ! 117: 117 0001400F # else if( (dbl_value_2.m ) && /* either a ZERO s/b stored, */ ! 118: 118 0001400F 11 29 jbr L393 ! 119: 119 00014011 L391: ! 120: 120 00014011 # (dbl_value_2.m != 0x80000000) && /* or a RESERVED OP, */ ! 121: 121 00014011 # (dbl_value_2.m != PIPE15_PAT) ) /* or no store at all */ ! 122: 122 00014011 5d effffffedd tstl _dbl_value_2 ! 123: 123 00014017 31 21 jeql L394 ! 124: 124 00014019 1d effffffed5 8f80000000 cmpl _dbl_value_2,$-2147483648 ! 125: 125 00014024 31 14 jeql L394 ! 126: 126 00014026 1d effffffec8 8f12341234 cmpl _dbl_value_2,$305402420 ! 127: 127 00014031 31 07 jeql L394 ! 128: 128 00014033 # bad_pipe15_store(); /* incorrect store error */ ! 129: 129 00014033 fe 04 ef000001b8 callf $4,_bad_pipe15_store ! 130: 130 0001403A # } ! 131: 131 0001403A L394: ! 132: 132 0001403A L393: ! 133: 133 0001403A L385: ! 134: 134 0001403A 6d effffffeb4 incl _index ! 135: 135 00014040 13 fefb jbr L387 ! 136: 136 00014043 L386: ! 137: 137 00014043 # } ! 138: 138 00014043 40 ret#2 ! 139: 139 00014044 .set L381,0x0 ! 140: 140 00014044 L383: ! 141: 141 00014044 13 feb2 jbr L384 ! 142: 142 00014047 .data ! 143: 143 0000050c * .text ! 144: 144 00014047 00 .align 1 ! 145: 145 00014048 .globl _no_pipe15_evt ! 146: 146 00014048 _no_pipe15_evt: ! 147: 147 00014048 0000 .word L396 ! 148: 148 0001404A # ! 149: 149 0001404A # ! 150: 150 0001404A # ! 151: 151 0001404A # /**************************************************************************** ! 152: 152 0001404A # * Report an "EVENT NOT DETECTED" error ! 153: 153 0001404A # * ! 154: 154 0001404A # * Cycle: xx. EVT test xx. subtest xx. No overflow fault seen. index = xx ! 155: 155 0001404A # * inst = LDF op1, MULF op2, STF op3 (overflow fault on the MULF) ! 156: 156 0001404A # * op1 = xxxxxxxx, op2 = xxxxxxxx, init op3 = xxxxxxxx, final op3 = xxxxxxxx ! 157: 157 0001404A # ****************************************************************************/ ! 158: 158 0001404A # no_pipe15_evt() ! 159: 159 0001404A # { ! 160: 160 0001404A 13 00b3 jbr L398 ! 161: 161 0001404D L399: ! 162: 162 0001404D # errcnt++; /* bump the error count */ ! 163: 163 0001404D 6d effffffea1 incl _errcnt ! 164: 164 00014053 # if ( prt_error ) ! 165: 165 00014053 5d effffffe9b tstl _prt_error ! 166: 166 00014059 31 7e jeql L400 ! 167: 167 0001405B # { ! 168: 168 0001405B # print_pipe15_er( ". No overflow fault seen" ); ! 169: 169 0001405B .data 1 ! 170: 170 0000050c * L402: ! 171: 171 0000050c * 2E204E6F206F766572666C6F7 .ascii ". No overflow fault seen\0" ! 172: 7206661756C74207365656E00 ! 173: 172 00000525 * .text ! 174: 173 0001405B dd 8f0000050c pushl $L402 ! 175: 174 00014061 fe 08 ef00000266 callf $8,_print_pipe15_er ! 176: 175 00014068 # writes("op1 = "); ! 177: 176 00014068 .data 1 ! 178: 177 00000525 * L404: ! 179: 178 00000525 * 6F7031203D2000 .ascii "op1 = \0" ! 180: 179 0000052c * .text ! 181: 180 00014068 dd 8f00000525 pushl $L404 ! 182: 181 0001406E fe 08 effffffe7f callf $8,_writes ! 183: 182 00014075 # write32h( dbl_ld_acc.m ); ! 184: 183 00014075 dd effffffe79 pushl _dbl_ld_acc ! 185: 184 0001407B fe 08 effffffe72 callf $8,_write32h ! 186: 185 00014082 # writes(", op2 = "); ! 187: 186 00014082 .data 1 ! 188: 187 0000052c * L406: ! 189: 188 0000052c * 2C20206F7032203D2000 .ascii ", op2 = \0" ! 190: 189 00000536 * .text ! 191: 190 00014082 dd 8f0000052c pushl $L406 ! 192: 191 00014088 fe 08 effffffe65 callf $8,_writes ! 193: 192 0001408F # write32h( dbl_value_1.m ); ! 194: 193 0001408F dd effffffe5f pushl _dbl_value_1 ! 195: 194 00014095 fe 08 effffffe58 callf $8,_write32h ! 196: 195 0001409C # writes(", init op3 = "); ! 197: 196 0001409C .data 1 ! 198: 197 00000536 * L407: ! 199: 198 00000536 * 2C2020696E6974206F7033203 .ascii ", init op3 = \0" ! 200: D2000 ! 201: 199 00000545 * .text ! 202: 200 0001409C dd 8f00000536 pushl $L407 ! 203: 201 000140A2 fe 08 effffffe4b callf $8,_writes ! 204: 202 000140A9 # write32h( PIPE15_PAT ); ! 205: 203 000140A9 dd 8f12341234 pushl $305402420 ! 206: 204 000140AF fe 08 effffffe3e callf $8,_write32h ! 207: 205 000140B6 # writes(", final op3 = "); ! 208: 206 000140B6 .data 1 ! 209: 207 00000545 * L408: ! 210: 208 00000545 * 2C202066696E616C206F70332 .ascii ", final op3 = \0" ! 211: 03D2000 ! 212: 209 00000555 * .text ! 213: 210 000140B6 dd 8f00000545 pushl $L408 ! 214: 211 000140BC fe 08 effffffe31 callf $8,_writes ! 215: 212 000140C3 # write32h( dbl_value_2.m ); ! 216: 213 000140C3 dd effffffe2b pushl _dbl_value_2 ! 217: 214 000140C9 fe 08 effffffe24 callf $8,_write32h ! 218: 215 000140D0 # writec('\n'); ! 219: 216 000140D0 dd 0a pushl $10 ! 220: 217 000140D2 fe 08 effffffe1b callf $8,_writec ! 221: 218 000140D9 # } ! 222: 219 000140D9 # if ( halt_flg ) /* halt on error? */ ! 223: 220 000140D9 L400: ! 224: 221 000140D9 5d effffffe15 tstl _halt_flg ! 225: 222 000140DF 31 09 jeql L410 ! 226: 223 000140E1 # pipe15_halt( 1 ); /* halt with a code of 1 */ ! 227: 224 000140E1 dd 01 pushl $1 ! 228: 225 000140E3 fe 08 ef00000282 callf $8,_pipe15_halt ! 229: 226 000140EA # if ( loop_on_err ) ! 230: 227 000140EA L410: ! 231: 228 000140EA 5d effffffe04 tstl _loop_on_err ! 232: 229 000140F0 31 0d jeql L412 ! 233: 230 000140F2 # { ! 234: 231 000140F2 # force_loop = TRUE; /* set the force loop flag */ ! 235: 232 000140F2 0d 01 effffffdfb movl $1,_force_loop ! 236: 233 000140F9 # asm("jmp _pipe15_lp1"); /* and loop */ ! 237: 234 000140F9 71 effffffe96 jmp _pipe15_lp1 ! 238: 235 000140FF # }; ! 239: 236 000140FF L412: ! 240: 237 000140FF # } ! 241: 238 000140FF 40 ret#2 ! 242: 239 00014100 .set L396,0x0 ! 243: 240 00014100 L398: ! 244: 241 00014100 13 ff4a jbr L399 ! 245: 242 00014103 .data ! 246: 243 0000050c * .text ! 247: 244 00014103 00 .align 1 ! 248: 245 00014104 .globl _bad_pipe15_result ! 249: 246 00014104 _bad_pipe15_result: ! 250: 247 00014104 0000 .word L413 ! 251: 248 00014106 # ! 252: 249 00014106 # ! 253: 250 00014106 # ! 254: 251 00014106 # ! 255: 252 00014106 # /**************************************************************************** ! 256: 253 00014106 # * Report an "BAD ACCUMULATOR AFTER THE EVENT" error ! 257: 254 00014106 # * ! 258: 255 00014106 # * Cycle: xx. EVT test xx. subtest xx. Bad final Accumulator. index = xx ! 259: 256 00014106 # * inst = LDF op1, MULF op2, STF op3 (overflow fault on the MULF) ! 260: 257 00014106 # * op1 = xxxxxxxx, final Acc. = xxxxxxxx, initial op3 = xxxxxxxx ! 261: 258 00014106 # * op2 = xxxxxxxx, expected = xxxxxxxx, final op3 = xxxxxxxx ! 262: 259 00014106 # ****************************************************************************/ ! 263: 260 00014106 # bad_pipe15_result() ! 264: 261 00014106 # { ! 265: 262 00014106 13 00e6 jbr L415 ! 266: 263 00014109 L416: ! 267: 264 00014109 # errcnt++; /* bump the error count */ ! 268: 265 00014109 6d effffffde5 incl _errcnt ! 269: 266 0001410F # if ( prt_error ) ! 270: 267 0001410F 5d effffffddf tstl _prt_error ! 271: 268 00014115 21 03 13 00ae jeql L417 ! 272: 269 0001411A # { ! 273: 270 0001411A # print_pipe15_er( ". Bad final Accumulator" ); ! 274: 271 0001411A .data 1 ! 275: 272 00000555 * L418: ! 276: 273 00000555 * 2E204261642066696E616C204 .ascii ". Bad final Accumulator\0" ! 277: 16363756D756C61746F7200 ! 278: 274 0000056d * .text ! 279: 275 0001411A dd 8f00000555 pushl $L418 ! 280: 276 00014120 fe 08 ef000001a7 callf $8,_print_pipe15_er ! 281: 277 00014127 # writes("op1 = "); ! 282: 278 00014127 .data 1 ! 283: 279 0000056d * L419: ! 284: 280 0000056d * 6F7031203D2000 .ascii "op1 = \0" ! 285: 281 00000574 * .text ! 286: 282 00014127 dd 8f0000056d pushl $L419 ! 287: 283 0001412D fe 08 effffffdc0 callf $8,_writes ! 288: 284 00014134 # write32h( dbl_ld_acc.m ); ! 289: 285 00014134 dd effffffdba pushl _dbl_ld_acc ! 290: 286 0001413A fe 08 effffffdb3 callf $8,_write32h ! 291: 287 00014141 # writes(", final Acc. = "); ! 292: 288 00014141 .data 1 ! 293: 289 00000574 * L420: ! 294: 290 00000574 * 2C20202066696E616C2041636 .ascii ", final Acc. = \0" ! 295: 32E203D2000 ! 296: 291 00000586 * .text ! 297: 292 00014141 dd 8f00000574 pushl $L420 ! 298: 293 00014147 fe 08 effffffda6 callf $8,_writes ! 299: 294 0001414E # write32h( post_evt_acc.m ); ! 300: 295 0001414E dd effffffda0 pushl _post_evt_acc ! 301: 296 00014154 fe 08 effffffd99 callf $8,_write32h ! 302: 297 0001415B # writes(", initial op3 = "); ! 303: 298 0001415B .data 1 ! 304: 299 00000586 * L421: ! 305: 300 00000586 * 2C202020696E697469616C206 .ascii ", initial op3 = \0" ! 306: F703320203D2000 ! 307: 301 0000059a * .text ! 308: 302 0001415B dd 8f00000586 pushl $L421 ! 309: 303 00014161 fe 08 effffffd8c callf $8,_writes ! 310: 304 00014168 # write32h( PIPE15_PAT ); ! 311: 305 00014168 dd 8f12341234 pushl $305402420 ! 312: 306 0001416E fe 08 effffffd7f callf $8,_write32h ! 313: 307 00014175 # writes("\nop2 = "); ! 314: 308 00014175 .data 1 ! 315: 309 0000059a * L422: ! 316: 310 0000059a * 0A6F7032203D2000 .ascii "\12op2 = \0" ! 317: 311 000005a2 * .text ! 318: 312 00014175 dd 8f0000059a pushl $L422 ! 319: 313 0001417B fe 08 effffffd72 callf $8,_writes ! 320: 314 00014182 # write32h( dbl_value_1.m ); ! 321: 315 00014182 dd effffffd6c pushl _dbl_value_1 ! 322: 316 00014188 fe 08 effffffd65 callf $8,_write32h ! 323: 317 0001418F # writes(", expected = "); ! 324: 318 0001418F .data 1 ! 325: 319 000005a2 * L423: ! 326: 320 000005a2 * 2C20202020206578706563746 .ascii ", expected = \0" ! 327: 564203D2000 ! 328: 321 000005b4 * .text ! 329: 322 0001418F dd 8f000005a2 pushl $L423 ! 330: 323 00014195 fe 08 effffffd58 callf $8,_writes ! 331: 324 0001419C # write32h( 0 ); /* the expected result = 0 */ ! 332: 325 0001419C dd 00 pushl $0 ! 333: 326 0001419E fe 08 effffffd4f callf $8,_write32h ! 334: 327 000141A5 # writes(", final op3 = "); ! 335: 328 000141A5 .data 1 ! 336: 329 000005b4 * L424: ! 337: 330 000005b4 * 2C202020202066696E616C206 .ascii ", final op3 = \0" ! 338: F703320203D2000 ! 339: 331 000005c8 * .text ! 340: 332 000141A5 dd 8f000005b4 pushl $L424 ! 341: 333 000141AB fe 08 effffffd42 callf $8,_writes ! 342: 334 000141B2 # write32h( dbl_value_2.m ); ! 343: 335 000141B2 dd effffffd3c pushl _dbl_value_2 ! 344: 336 000141B8 fe 08 effffffd35 callf $8,_write32h ! 345: 337 000141BF # writec('\n'); ! 346: 338 000141BF dd 0a pushl $10 ! 347: 339 000141C1 fe 08 effffffd2c callf $8,_writec ! 348: 340 000141C8 # } ! 349: 341 000141C8 # if ( halt_flg ) /* halt on error? */ ! 350: 342 000141C8 L417: ! 351: 343 000141C8 5d effffffd26 tstl _halt_flg ! 352: 344 000141CE 31 09 jeql L425 ! 353: 345 000141D0 # pipe15_halt( 2 ); /* halt with a code of 2 */ ! 354: 346 000141D0 dd 02 pushl $2 ! 355: 347 000141D2 fe 08 ef00000193 callf $8,_pipe15_halt ! 356: 348 000141D9 # if ( loop_on_err ) ! 357: 349 000141D9 L425: ! 358: 350 000141D9 5d effffffd15 tstl _loop_on_err ! 359: 351 000141DF 31 0d jeql L426 ! 360: 352 000141E1 # { ! 361: 353 000141E1 # force_loop = TRUE; /* set the force loop flag */ ! 362: 354 000141E1 0d 01 effffffd0c movl $1,_force_loop ! 363: 355 000141E8 # asm("jmp _pipe15_lp1"); /* and loop */ ! 364: 356 000141E8 71 effffffda7 jmp _pipe15_lp1 ! 365: 357 000141EE # }; ! 366: 358 000141EE L426: ! 367: 359 000141EE # } ! 368: 360 000141EE 40 ret#2 ! 369: 361 000141EF .set L413,0x0 ! 370: 362 000141EF L415: ! 371: 363 000141EF 13 ff17 jbr L416 ! 372: 364 000141F2 .data ! 373: 365 0000050c * .text ! 374: 366 000141F2 .align 1 ! 375: 367 000141F2 .globl _bad_pipe15_store ! 376: 368 000141F2 _bad_pipe15_store: ! 377: 369 000141F2 0000 .word L427 ! 378: 370 000141F4 # ! 379: 371 000141F4 # ! 380: 372 000141F4 # ! 381: 373 000141F4 # ! 382: 374 000141F4 # /**************************************************************************** ! 383: 375 000141F4 # * Report a "BAD RESULT STORED AFTER THE EVENT" error ! 384: 376 000141F4 # * ! 385: 377 000141F4 # * Cycle: xx. EVT test xx. subtest xx. Bad STF OP3 result. index = xx ! 386: 378 000141F4 # * inst = LDF op1, MULF op2, STF op3 (overflow fault on the MULF) ! 387: 379 000141F4 # * op1 = xxxxxxxx, initial op3 = xxxxxxxx, final Acc. = xxxxxxxx ! 388: 380 000141F4 # * op2 = xxxxxxxx, final op3 = xxxxxxxx, op3 expected = xxxxxxxx ! 389: 381 000141F4 # ****************************************************************************/ ! 390: 382 000141F4 # bad_pipe15_store() ! 391: 383 000141F4 # { ! 392: 384 000141F4 13 00d4 jbr L429 ! 393: 385 000141F7 L430: ! 394: 386 000141F7 # errcnt++; /* bump the error count */ ! 395: 387 000141F7 6d effffffcf7 incl _errcnt ! 396: 388 000141FD # if ( prt_error ) ! 397: 389 000141FD 5d effffffcf1 tstl _prt_error ! 398: 390 00014203 21 03 13 009c jeql L431 ! 399: 391 00014208 # { ! 400: 392 00014208 # print_pipe15_er( ". Bad STF OP3 result" ); ! 401: 393 00014208 .data 1 ! 402: 394 000005c8 * L432: ! 403: 395 000005c8 * 2E2042616420535446204F503 .ascii ". Bad STF OP3 result\0" ! 404: 320726573756C7400 ! 405: 396 000005dd * .text ! 406: 397 00014208 dd 8f000005c8 pushl $L432 ! 407: 398 0001420E fe 08 ef000000b9 callf $8,_print_pipe15_er ! 408: 399 00014215 # writes("op1 = "); ! 409: 400 00014215 .data 1 ! 410: 401 000005dd * L433: ! 411: 402 000005dd * 6F7031203D2000 .ascii "op1 = \0" ! 412: 403 000005e4 * .text ! 413: 404 00014215 dd 8f000005dd pushl $L433 ! 414: 405 0001421B fe 08 effffffcd2 callf $8,_writes ! 415: 406 00014222 # write32h( dbl_ld_acc.m ); ! 416: 407 00014222 dd effffffccc pushl _dbl_ld_acc ! 417: 408 00014228 fe 08 effffffcc5 callf $8,_write32h ! 418: 409 0001422F # writes(", initial op3 = "); ! 419: 410 0001422F .data 1 ! 420: 411 000005e4 * L434: ! 421: 412 000005e4 * 2C2020696E697469616C206F7 .ascii ", initial op3 = \0" ! 422: 03320203D2000 ! 423: 413 000005f7 * .text ! 424: 414 0001422F dd 8f000005e4 pushl $L434 ! 425: 415 00014235 fe 08 effffffcb8 callf $8,_writes ! 426: 416 0001423C # write32h( PIPE15_PAT ); ! 427: 417 0001423C dd 8f12341234 pushl $305402420 ! 428: 418 00014242 fe 08 effffffcab callf $8,_write32h ! 429: 419 00014249 # writes(", final Acc. = "); ! 430: 420 00014249 .data 1 ! 431: 421 000005f7 * L435: ! 432: 422 000005f7 * 2C2020202066696E616C20416 .ascii ", final Acc. = \0" ! 433: 3632E203D2000 ! 434: 423 0000060a * .text ! 435: 424 00014249 dd 8f000005f7 pushl $L435 ! 436: 425 0001424F fe 08 effffffc9e callf $8,_writes ! 437: 426 00014256 # write32h( post_evt_acc.m ); ! 438: 427 00014256 dd effffffc98 pushl _post_evt_acc ! 439: 428 0001425C fe 08 effffffc91 callf $8,_write32h ! 440: 429 00014263 # writes("\nop2 = "); ! 441: 430 00014263 .data 1 ! 442: 431 0000060a * L436: ! 443: 432 0000060a * 0A6F7032203D2000 .ascii "\12op2 = \0" ! 444: 433 00000612 * .text ! 445: 434 00014263 dd 8f0000060a pushl $L436 ! 446: 435 00014269 fe 08 effffffc84 callf $8,_writes ! 447: 436 00014270 # write32h( dbl_value_1.m ); ! 448: 437 00014270 dd effffffc7e pushl _dbl_value_1 ! 449: 438 00014276 fe 08 effffffc77 callf $8,_write32h ! 450: 439 0001427D # writes(", final op3 = "); ! 451: 440 0001427D .data 1 ! 452: 441 00000612 * L437: ! 453: 442 00000612 * 2C2020202066696E616C206F7 .ascii ", final op3 = \0" ! 454: 03320203D2000 ! 455: 443 00000625 * .text ! 456: 444 0001427D dd 8f00000612 pushl $L437 ! 457: 445 00014283 fe 08 effffffc6a callf $8,_writes ! 458: 446 0001428A # write32h( dbl_value_2.m ); ! 459: 447 0001428A dd effffffc64 pushl _dbl_value_2 ! 460: 448 00014290 fe 08 effffffc5d callf $8,_write32h ! 461: 449 00014297 # writes(", op3 expected = 80000000\n"); /* exp = Reserved Op */ ! 462: 450 00014297 .data 1 ! 463: 451 00000625 * L438: ! 464: 452 00000625 * 2C20206F70332065787065637 .ascii ", op3 expected = 80000000\12\0" ! 465: 46564203D2038303030303030 ! 466: 300A00 ! 467: 453 00000641 * .text ! 468: 454 00014297 dd 8f00000625 pushl $L438 ! 469: 455 0001429D fe 08 effffffc50 callf $8,_writes ! 470: 456 000142A4 # } ! 471: 457 000142A4 # if ( halt_flg ) /* halt on error? */ ! 472: 458 000142A4 L431: ! 473: 459 000142A4 5d effffffc4a tstl _halt_flg ! 474: 460 000142AA 31 09 jeql L439 ! 475: 461 000142AC # pipe15_halt( 3 ); /* halt with a code of 2 */ ! 476: 462 000142AC dd 03 pushl $3 ! 477: 463 000142AE fe 08 ef000000b7 callf $8,_pipe15_halt ! 478: 464 000142B5 # if ( loop_on_err ) ! 479: 465 000142B5 L439: ! 480: 466 000142B5 5d effffffc39 tstl _loop_on_err ! 481: 467 000142BB 31 0d jeql L440 ! 482: 468 000142BD # { ! 483: 469 000142BD # force_loop = TRUE; /* set the force loop flag */ ! 484: 470 000142BD 0d 01 effffffc30 movl $1,_force_loop ! 485: 471 000142C4 # asm("jmp _pipe15_lp1"); /* and loop */ ! 486: 472 000142C4 71 effffffccb jmp _pipe15_lp1 ! 487: 473 000142CA # }; ! 488: 474 000142CA L440: ! 489: 475 000142CA # } ! 490: 476 000142CA 40 ret#2 ! 491: 477 000142CB .set L427,0x0 ! 492: 478 000142CB L429: ! 493: 479 000142CB 13 ff29 jbr L430 ! 494: 480 000142CE .data ! 495: 481 0000050c * .text ! 496: 482 000142CE .align 1 ! 497: 483 000142CE .globl _print_pipe15_er ! 498: 484 000142CE _print_pipe15_er: ! 499: 485 000142CE 0000 .word L441 ! 500: 486 000142D0 # ! 501: 487 000142D0 # ! 502: 488 000142D0 # ! 503: 489 000142D0 # ! 504: 490 000142D0 # ! 505: 491 000142D0 # ! 506: 492 000142D0 # /**************************************************************************** ! 507: 493 000142D0 # * Report an error message of the form: ! 508: 494 000142D0 # * ! 509: 495 000142D0 # * Cycle: xx. EVT test xx. subtest xx. <your message here>. index = xx ! 510: 496 000142D0 # * inst = LDF op1, MULF op2, STF op3 (overflow fault on the MULF) ! 511: 497 000142D0 # ****************************************************************************/ ! 512: 498 000142D0 # print_pipe15_er( msg ) ! 513: 499 000142D0 # char *msg; /* error message to print */ ! 514: 500 000142D0 # { ! 515: 501 000142D0 13 0096 jbr L443 ! 516: 502 000142D3 L444: ! 517: 503 000142D3 # if( errcnt == 1 ) /* 1st error? */ ! 518: 504 000142D3 1d effffffc1b 01 cmpl _errcnt,$1 ! 519: 505 000142DA 21 0d jneq L445 ! 520: 506 000142DC # writes(" \n"); /* start a new print line */ ! 521: 507 000142DC .data 1 ! 522: 508 00000641 * L446: ! 523: 509 00000641 * 200A00 .ascii " \12\0" ! 524: 510 00000644 * .text ! 525: 511 000142DC dd 8f00000641 pushl $L446 ! 526: 512 000142E2 fe 08 effffffc0b callf $8,_writes ! 527: 513 000142E9 # writes("Cycle: "); ! 528: 514 000142E9 L445: ! 529: 515 000142E9 .data 1 ! 530: 516 00000644 * L447: ! 531: 517 00000644 * 4379636C653A2000 .ascii "Cycle: \0" ! 532: 518 0000064c * .text ! 533: 519 000142E9 dd 8f00000644 pushl $L447 ! 534: 520 000142EF fe 08 effffffbfe callf $8,_writes ! 535: 521 000142F6 # writed( cycle ); ! 536: 522 000142F6 dd effffffbf8 pushl _cycle ! 537: 523 000142FC fe 08 effffffbf1 callf $8,_writed ! 538: 524 00014303 # writes(" EVT test "); ! 539: 525 00014303 .data 1 ! 540: 526 0000064c * L449: ! 541: 527 0000064c * 202045565420746573742000 .ascii " EVT test \0" ! 542: 528 00000658 * .text ! 543: 529 00014303 dd 8f0000064c pushl $L449 ! 544: 530 00014309 fe 08 effffffbe4 callf $8,_writes ! 545: 531 00014310 # writed( test_no ); ! 546: 532 00014310 dd effffffbde pushl _test_no ! 547: 533 00014316 fe 08 effffffbd7 callf $8,_writed ! 548: 534 0001431D # writes(". subtest "); ! 549: 535 0001431D .data 1 ! 550: 536 00000658 * L450: ! 551: 537 00000658 * 2E20737562746573742000 .ascii ". subtest \0" ! 552: 538 00000663 * .text ! 553: 539 0001431D dd 8f00000658 pushl $L450 ! 554: 540 00014323 fe 08 effffffbca callf $8,_writes ! 555: 541 0001432A # writed( subtest ); ! 556: 542 0001432A dd effffffbc4 pushl _subtest ! 557: 543 00014330 fe 08 effffffbbd callf $8,_writed ! 558: 544 00014337 # writes( msg ); /* print the message */ ! 559: 545 00014337 dd ad04 pushl 4(fp) ! 560: 546 0001433A fe 08 effffffbb3 callf $8,_writes ! 561: 547 00014341 # writes(". index = "); ! 562: 548 00014341 .data 1 ! 563: 549 00000663 * L451: ! 564: 550 00000663 * 2E20696E646578203D2000 .ascii ". index = \0" ! 565: 551 0000066e * .text ! 566: 552 00014341 dd 8f00000663 pushl $L451 ! 567: 553 00014347 fe 08 effffffba6 callf $8,_writes ! 568: 554 0001434E # writed( index ); ! 569: 555 0001434E dd effffffba0 pushl _index ! 570: 556 00014354 fe 08 effffffb99 callf $8,_writed ! 571: 557 0001435B # writes( ! 572: 558 0001435B # "\ninst = LDF op1, MULF op2, STF op3 (overflow fault on the MULF)\n"); ! 573: 559 0001435B .data 1 ! 574: 560 0000066e * L452: ! 575: 561 0000066e * 0A696E7374203D204C4446206 .ascii "\12inst = LDF op1, MULF op2, STF op3 (overflow fault on the MUL" ! 576: F70312C204D554C46206F7032 ! 577: 2C20535446206F70332020202 ! 578: 0286F766572666C6F77206661 ! 579: 756C74206F6E20746865204D5 ! 580: 54C ! 581: 562 000006ae * 46290A00 .ascii "F)\12\0" ! 582: 563 000006b2 * .text ! 583: 564 0001435B dd 8f0000066e pushl $L452 ! 584: 565 00014361 fe 08 effffffb8c callf $8,_writes ! 585: 566 00014368 # } ! 586: 567 00014368 40 ret#2 ! 587: 568 00014369 .set L441,0x0 ! 588: 569 00014369 L443: ! 589: 570 00014369 13 ff67 jbr L444 ! 590: 571 0001436C .data ! 591: 572 0000050c * .text ! 592: 573 0001436C .align 1 ! 593: 574 0001436C .globl _pipe15_halt ! 594: 575 0001436C _pipe15_halt: ! 595: 576 0001436C 0000 .word L453 ! 596: 577 0001436E # ! 597: 578 0001436E # ! 598: 579 0001436E # ! 599: 580 0001436E # /**************************************************************************** ! 600: 581 0001436E # * halt on error routine ! 601: 582 0001436E # ****************************************************************************/ ! 602: 583 0001436E # pipe15_halt( code ) ! 603: 584 0001436E # int code; /* error code to halt with */ ! 604: 585 0001436E # { ! 605: 586 0001436E 13 008b jbr L455 ! 606: 587 00014371 L456: ! 607: 588 00014371 # err_code = code; ! 608: 589 00014371 0d ad04 effffffb7b movl 4(fp),_err_code ! 609: 590 00014379 # sgl_value_1 = dbl_ld_acc.m; ! 610: 591 00014379 0d effffffb75 effffffb70 movl _dbl_ld_acc,_sgl_value_1 ! 611: 592 00014384 # sgl_value_2 = dbl_value_1.m; ! 612: 593 00014384 0d effffffb6a effffffb65 movl _dbl_value_1,_sgl_value_2 ! 613: 594 0001438F # sgl_value_3 = post_evt_acc.m; ! 614: 595 0001438F 0d effffffb5f effffffb5a movl _post_evt_acc,_sgl_value_3 ! 615: 596 0001439A # sgl_value_4 = PIPE15_PAT; ! 616: 597 0001439A 0d 8f12341234 effffffb4f movl $305402420,_sgl_value_4 ! 617: 598 000143A5 # sgl_value_5 = dbl_value_2.m; ! 618: 599 000143A5 0d effffffb49 effffffb44 movl _dbl_value_2,_sgl_value_5 ! 619: 600 000143B0 # asm("movl _test_no,r0"); /* r0 = test number */ ! 620: 601 000143B0 0d effffffb3e 50 movl _test_no,r0 ! 621: 602 000143B7 # asm("movl _subtest,r1"); /* r1 = subtest number */ ! 622: 603 000143B7 0d effffffb37 51 movl _subtest,r1 ! 623: 604 000143BE # asm("movl _err_code,r2"); /* r2 = error code */ ! 624: 605 000143BE 0d effffffb30 52 movl _err_code,r2 ! 625: 606 000143C5 # asm("movl _cycle,r3"); /* r3 = cycle count */ ! 626: 607 000143C5 0d effffffb29 53 movl _cycle,r3 ! 627: 608 000143CC # asm("movl _sgl_value_1,r4"); /* r4 = initial acc. */ ! 628: 609 000143CC 0d effffffb22 54 movl _sgl_value_1,r4 ! 629: 610 000143D3 # asm("movl _sgl_value_2,r5"); /* r5 = MULF operand */ ! 630: 611 000143D3 0d effffffb1b 55 movl _sgl_value_2,r5 ! 631: 612 000143DA # asm("movl _sgl_value_3,r6"); /* r6 = final acc. */ ! 632: 613 000143DA 0d effffffb14 56 movl _sgl_value_3,r6 ! 633: 614 000143E1 # asm("clrl r7"); /* r7 = expected acc. */ ! 634: 615 000143E1 4d 57 clrl r7 ! 635: 616 000143E3 # asm("movl _sgl_value_4,r8"); /* r8 = initial op3 value */ ! 636: 617 000143E3 0d effffffb0b 58 movl _sgl_value_4,r8 ! 637: 618 000143EA # asm("movl _sgl_value_5,r9"); /* r9 = final op3 value */ ! 638: 619 000143EA 0d effffffb04 59 movl _sgl_value_5,r9 ! 639: 620 000143F1 # asm("clrl r10"); /* r10 = expected op3 value */ ! 640: 621 000143F1 4d 5a clrl r10 ! 641: 622 000143F3 # asm("movl _index,r11"); /* r11 = data index */ ! 642: 623 000143F3 0d effffffafb 5b movl _index,r11 ! 643: 624 000143FA # asm("halt"); /* HALT ... */ ! 644: 625 000143FA 00 halt ! 645: 626 000143FB # } ! 646: 627 000143FB 40 ret#2 ! 647: 628 000143FC .set L453,0x0 ! 648: 629 000143FC L455: ! 649: 630 000143FC 13 ff72 jbr L456 ! 650: 631 000143FF .data ! 651: 631 000282F3 .data
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.