|
|
1.1 ! root 1: 1 00000000 LL0: ! 2: 2 00000000 .data ! 3: 3 00000d1c * .text ! 4: 4 00000000 .align 1 ! 5: 5 00000000 .globl _mulf ! 6: 6 00000000 _mulf: ! 7: 7 0000EDCC 0000 .word L215 ! 8: 8 0000EDCE # ! 9: 9 0000EDCE # #include "fpp_defs.h" ! 10: 10 0000EDCE # ! 11: 11 0000EDCE # ! 12: 12 0000EDCE # /***************************************************************************** ! 13: 13 0000EDCE # * ! 14: 14 0000EDCE # * MULF - SINGLE PRECISION FLOATING POINT ADD TEST ! 15: 15 0000EDCE # * ! 16: 16 0000EDCE # *****************************************************************************/ ! 17: 17 0000EDCE # mulf() ! 18: 18 0000EDCE # { ! 19: 19 0000EDCE 11 64 jbr L217 ! 20: 20 0000EDD0 L218: ! 21: 21 0000EDD0 # asm(".globl _mulf_t"); ! 22: 22 0000EDD0 .globl _mulf_t ! 23: 23 0000EDD0 # asm("_mulf_t:"); /* entry address */ ! 24: 24 0000EDD0 _mulf_t: ! 25: 25 0000EDD0 # if( ( cycle == 1 ) && ( prt_hdrs ) ) /* print headers on 1st pass */ ! 26: 26 0000EDD0 1d effffffff6 01 cmpl _cycle,$1 ! 27: 27 0000EDD7 21 15 jneq L219 ! 28: 28 0000EDD9 5d efffffffed tstl _prt_hdrs ! 29: 29 0000EDDF 31 0d jeql L219 ! 30: 30 0000EDE1 # writes(" MULF"); ! 31: 31 0000EDE1 .data 1 ! 32: 32 00000d1c * L221: ! 33: 33 00000d1c * 204D554C4600 .ascii " MULF\0" ! 34: 34 00000d22 * .text ! 35: 35 0000EDE1 dd 8f00000d1c pushl $L221 ! 36: 36 0000EDE7 fe 08 efffffffde callf $8,_writes ! 37: 37 0000EDEE # mulf_1(); /* multiply through a register*/ ! 38: 38 0000EDEE L219: ! 39: 39 0000EDEE fe 04 ef00000041 callf $4,_mulf_1 ! 40: 40 0000EDF5 # mulf_2(); /* multiply through the cache */ ! 41: 41 0000EDF5 fe 04 ef00000160 callf $4,_mulf_2 ! 42: 42 0000EDFC # mulf_3(); /* wait 3 NOPs */ ! 43: 43 0000EDFC fe 04 ef00000279 callf $4,_mulf_3 ! 44: 44 0000EE03 # mulf_4(); /* wait 2 NOPs */ ! 45: 45 0000EE03 fe 04 ef00000396 callf $4,_mulf_4 ! 46: 46 0000EE0A # mulf_5(); /* wait 1 NOP before storing */ ! 47: 47 0000EE0A fe 04 ef000004b3 callf $4,_mulf_5 ! 48: 48 0000EE11 # mulf_6(); /* register stability test */ ! 49: 49 0000EE11 fe 04 ef000005ce callf $4,_mulf_6 ! 50: 50 0000EE18 # mulf_7(); /* PSL stability test */ ! 51: 51 0000EE18 fe 04 ef00000777 callf $4,_mulf_7 ! 52: 52 0000EE1F # mulf_8(); /* pipelined entry test */ ! 53: 53 0000EE1F fe 04 ef0000091e callf $4,_mulf_8 ! 54: 54 0000EE26 # mulf_9(); /* pipelined exit test */ ! 55: 55 0000EE26 fe 04 ef00000a3d callf $4,_mulf_9 ! 56: 56 0000EE2D # asm("jmp *return"); /* return to the test monitor */ ! 57: 57 0000EE2D 71 ffffffff99 jmp *return ! 58: 58 0000EE33 # } ! 59: 59 0000EE33 40 ret#2 ! 60: 60 0000EE34 .set L215,0x0 ! 61: 61 0000EE34 L217: ! 62: 62 0000EE34 11 9a jbr L218 ! 63: 63 0000EE36 .data ! 64: 64 00000d1c * .text ! 65: 65 0000EE36 .align 1 ! 66: 66 0000EE36 .globl _mulf_1 ! 67: 67 0000EE36 _mulf_1: ! 68: 68 0000EE36 0000 .word L231 ! 69: 69 0000EE38 # ! 70: 70 0000EE38 # ! 71: 71 0000EE38 # ! 72: 72 0000EE38 # /************************************************************************ ! 73: 73 0000EE38 # * ! 74: 74 0000EE38 # * SUBTEST 1 - multiply through a register ! 75: 75 0000EE38 # * ! 76: 76 0000EE38 # ************************************************************************/ ! 77: 77 0000EE38 # mulf_1() ! 78: 78 0000EE38 # { ! 79: 79 0000EE38 13 011e jbr L233 ! 80: 80 0000EE3B L234: ! 81: 81 0000EE3B # force_loop = FALSE; ! 82: 82 0000EE3B 4d efffffff8b clrl _force_loop ! 83: 83 0000EE41 # subtest = 1; ! 84: 84 0000EE41 0d 01 efffffff84 movl $1,_subtest ! 85: 85 0000EE48 # for( index = 0; index < max_mulf_1_index; index++ ) { ! 86: 86 0000EE48 4d efffffff7e clrl _index ! 87: 87 0000EE4E L237: ! 88: 88 0000EE4E 1d efffffff78 efffffff73 cmpl _index,_max_mulf_1_index ! 89: 89 0000EE59 91 03 13 00fa jgeq L236 ! 90: 90 0000EE5E # sgl_ld_acc = mulf_1_data[index].op_1; /* get operand 1 */ ! 91: 91 0000EE5E 5c 0c efffffff67 50 mull3 $12,_index,r0 ! 92: 92 0000EE66 0d e000000000 efffffff5b movl _mulf_1_data(r0),_sgl_ld_acc ! 93: 93 0000EE71 # sgl_value_1 = mulf_1_data[index].op_2; /* get operand 2 */ ! 94: 94 0000EE71 5c 0c efffffff54 50 mull3 $12,_index,r0 ! 95: 95 0000EE79 0d e000000004 efffffff48 movl _mulf_1_data+4(r0),_sgl_value_1 ! 96: 96 0000EE84 # sgl_expected = mulf_1_data[index].exp; /* get expected result */ ! 97: 97 0000EE84 5c 0c efffffff41 50 mull3 $12,_index,r0 ! 98: 98 0000EE8C 0d e000000008 efffffff35 movl _mulf_1_data+8(r0),_sgl_expected ! 99: 99 0000EE97 # /* ! 100: 100 0000EE97 # * If LOOP ON ERROR is set, this is the loop for this subtest. ! 101: 101 0000EE97 # * The force loop flag is set after the first error. ! 102: 102 0000EE97 # */ ! 103: 103 0000EE97 # asm("_mulf_1_lp1:"); ! 104: 104 0000EE97 _mulf_1_lp1: ! 105: 105 0000EE97 # asm("movl _sgl_ld_acc,r3"); /* move the 1st data to r3 */ ! 106: 106 0000EE97 0d efffffff2f 53 movl _sgl_ld_acc,r3 ! 107: 107 0000EE9E # asm("movl _sgl_value_1,r4"); /* move the 2nd data to r4 */ ! 108: 108 0000EE9E 0d efffffff28 54 movl _sgl_value_1,r4 ! 109: 109 0000EEA5 # asm("ldf r3"); /* load the 1st operand */ ! 110: 110 0000EEA5 06 53 ldf r3 ! 111: 111 0000EEA7 # asm("mulf r4"); /* mul the 2nd operand */ ! 112: 112 0000EEA7 e6 54 mulf r4 ! 113: 113 0000EEA9 # asm("stf _sgl_st_acc"); /* store the result */ ! 114: 114 0000EEA9 26 efffffff1d stf _sgl_st_acc ! 115: 115 0000EEAF # if( force_loop ) ! 116: 116 0000EEAF 5d efffffff17 tstl _force_loop ! 117: 117 0000EEB5 31 02 jeql L238 ! 118: 118 0000EEB7 # asm("brb _mulf_1_lp1");; /* loop on the error */ ! 119: 119 0000EEB7 11 de brb _mulf_1_lp1 ! 120: 120 0000EEB9 L238: ! 121: 121 0000EEB9 # /* ! 122: 122 0000EEB9 # * end error loop - test the results ! 123: 123 0000EEB9 # */ ! 124: 124 0000EEB9 # if( sgl_st_acc != sgl_expected ) { /* COMPARE the values */ ! 125: 125 0000EEB9 1d efffffff0d efffffff08 cmpl _sgl_st_acc,_sgl_expected ! 126: 126 0000EEC4 21 03 13 0086 jeql L239 ! 127: 127 0000EEC9 # errcnt++; /* bump the error count */ ! 128: 128 0000EEC9 6d effffffefd incl _errcnt ! 129: 129 0000EECF # if( prt_error ) { ! 130: 130 0000EECF 5d effffffef7 tstl _prt_error ! 131: 131 0000EED5 31 55 jeql L240 ! 132: 132 0000EED7 # writes(" \n"); /* start a new print line */ ! 133: 133 0000EED7 .data 1 ! 134: 134 00000d22 * L241: ! 135: 135 00000d22 * 200A00 .ascii " \12\0" ! 136: 136 00000d25 * .text ! 137: 137 0000EED7 dd 8f00000d22 pushl $L241 ! 138: 138 0000EEDD fe 08 effffffee8 callf $8,_writes ! 139: 139 0000EEE4 # writes("cycle: "); ! 140: 140 0000EEE4 .data 1 ! 141: 141 00000d25 * L242: ! 142: 142 00000d25 * 6379636C653A2000 .ascii "cycle: \0" ! 143: 143 00000d2d * .text ! 144: 144 0000EEE4 dd 8f00000d25 pushl $L242 ! 145: 145 0000EEEA fe 08 effffffedb callf $8,_writes ! 146: 146 0000EEF1 # writed( cycle ); ! 147: 147 0000EEF1 dd effffffed5 pushl _cycle ! 148: 148 0000EEF7 fe 08 effffffece callf $8,_writed ! 149: 149 0000EEFE # writes(" MULF test "); ! 150: 150 0000EEFE .data 1 ! 151: 151 00000d2d * L244: ! 152: 152 00000d2d * 20204D554C462074657374200 .ascii " MULF test \0" ! 153: 0 ! 154: 153 00000d3a * .text ! 155: 154 0000EEFE dd 8f00000d2d pushl $L244 ! 156: 155 0000EF04 fe 08 effffffec1 callf $8,_writes ! 157: 156 0000EF0B # writed( test_no ); ! 158: 157 0000EF0B dd effffffebb pushl _test_no ! 159: 158 0000EF11 fe 08 effffffeb4 callf $8,_writed ! 160: 159 0000EF18 # writes(", subtest 1 (Reg. Data) - BAD FINAL ACC\n"); ! 161: 160 0000EF18 .data 1 ! 162: 161 00000d3a * L245: ! 163: 162 00000d3a * 2C20737562746573742031202 .ascii ", subtest 1 (Reg. Data) - BAD FINAL ACC\12\0" ! 164: 85265672E204461746129202D ! 165: 204241442046494E414C20414 ! 166: 3430A00 ! 167: 163 00000d63 * .text ! 168: 164 0000EF18 dd 8f00000d3a pushl $L245 ! 169: 165 0000EF1E fe 08 effffffea7 callf $8,_writes ! 170: 166 0000EF25 # print_mulf_data(); ! 171: 167 0000EF25 fe 04 ef00000a64 callf $4,_print_mulf_data ! 172: 168 0000EF2C # } ! 173: 169 0000EF2C # if( halt_flg ) ! 174: 170 0000EF2C L240: ! 175: 171 0000EF2C 5d effffffe9a tstl _halt_flg ! 176: 172 0000EF32 31 09 jeql L247 ! 177: 173 0000EF34 # mulf_er_halt( BAD_ACC_HLT ); /* halt on the error */ ! 178: 174 0000EF34 dd 01 pushl $1 ! 179: 175 0000EF36 fe 08 ef00000af1 callf $8,_mulf_er_halt ! 180: 176 0000EF3D # if( loop_on_err ) { ! 181: 177 0000EF3D L247: ! 182: 178 0000EF3D 5d effffffe89 tstl _loop_on_err ! 183: 179 0000EF43 31 0a jeql L249 ! 184: 180 0000EF45 # force_loop = TRUE; /* set the force loop flag */ ! 185: 181 0000EF45 0d 01 effffffe80 movl $1,_force_loop ! 186: 182 0000EF4C # asm("brw _mulf_1_lp1");; /* and loop on the error */ ! 187: 183 0000EF4C 13 ff48 brw _mulf_1_lp1 ! 188: 184 0000EF4F # } /* end of loop on error */ ! 189: 185 0000EF4F # } /* end of compare error */ ! 190: 186 0000EF4F L249: ! 191: 187 0000EF4F # } /* end of WHILE loop */ ! 192: 188 0000EF4F L239: ! 193: 189 0000EF4F L235: ! 194: 190 0000EF4F 6d effffffe77 incl _index ! 195: 191 0000EF55 13 fef6 jbr L237 ! 196: 192 0000EF58 L236: ! 197: 193 0000EF58 # } /* end of subtest 1 */ ! 198: 194 0000EF58 40 ret#2 ! 199: 195 0000EF59 .set L231,0x0 ! 200: 196 0000EF59 L233: ! 201: 197 0000EF59 13 fedf jbr L234 ! 202: 198 0000EF5C .data ! 203: 199 00000d1c * .text ! 204: 200 0000EF5C .align 1 ! 205: 201 0000EF5C .globl _mulf_2 ! 206: 202 0000EF5C _mulf_2: ! 207: 203 0000EF5C 0000 .word L250 ! 208: 204 0000EF5E # ! 209: 205 0000EF5E # ! 210: 206 0000EF5E # ! 211: 207 0000EF5E # /************************************************************************ ! 212: 208 0000EF5E # * ! 213: 209 0000EF5E # * SUBTEST 2 - multiply through memory ! 214: 210 0000EF5E # * ! 215: 211 0000EF5E # ************************************************************************/ ! 216: 212 0000EF5E # mulf_2() ! 217: 213 0000EF5E # { ! 218: 214 0000EF5E 13 0118 jbr L252 ! 219: 215 0000EF61 L253: ! 220: 216 0000EF61 # force_loop = FALSE; ! 221: 217 0000EF61 4d effffffe65 clrl _force_loop ! 222: 218 0000EF67 # subtest = 2; ! 223: 219 0000EF67 0d 02 effffffe5e movl $2,_subtest ! 224: 220 0000EF6E # for( index = 0; index < max_mulf_1_index; index++ ) { ! 225: 221 0000EF6E 4d effffffe58 clrl _index ! 226: 222 0000EF74 L256: ! 227: 223 0000EF74 1d effffffe52 effffffe4d cmpl _index,_max_mulf_1_index ! 228: 224 0000EF7F 91 03 13 00f4 jgeq L255 ! 229: 225 0000EF84 # sgl_ld_acc = mulf_1_data[index].op_1; /* get operand 1 */ ! 230: 226 0000EF84 5c 0c effffffe41 50 mull3 $12,_index,r0 ! 231: 227 0000EF8C 0d e000000000 effffffe35 movl _mulf_1_data(r0),_sgl_ld_acc ! 232: 228 0000EF97 # sgl_value_1 = mulf_1_data[index].op_2; /* get operand 2 */ ! 233: 229 0000EF97 5c 0c effffffe2e 50 mull3 $12,_index,r0 ! 234: 230 0000EF9F 0d e000000004 effffffe22 movl _mulf_1_data+4(r0),_sgl_value_1 ! 235: 231 0000EFAA # sgl_expected = mulf_1_data[index].exp; /* get expected result */ ! 236: 232 0000EFAA 5c 0c effffffe1b 50 mull3 $12,_index,r0 ! 237: 233 0000EFB2 0d e000000008 effffffe0f movl _mulf_1_data+8(r0),_sgl_expected ! 238: 234 0000EFBD # /* ! 239: 235 0000EFBD # * If LOOP ON ERROR is set, this is the loop for this subtest. ! 240: 236 0000EFBD # * The force loop flag is set after the first error. ! 241: 237 0000EFBD # */ ! 242: 238 0000EFBD # asm("_mulf_2_lp1:"); ! 243: 239 0000EFBD _mulf_2_lp1: ! 244: 240 0000EFBD # asm("ldf _sgl_ld_acc"); /* load the 1st operand */ ! 245: 241 0000EFBD 06 effffffe09 ldf _sgl_ld_acc ! 246: 242 0000EFC3 # asm("mulf _sgl_value_1"); /* mul the 2nd operand */ ! 247: 243 0000EFC3 e6 effffffe03 mulf _sgl_value_1 ! 248: 244 0000EFC9 # asm("stf _sgl_st_acc"); /* store the result */ ! 249: 245 0000EFC9 26 effffffdfd stf _sgl_st_acc ! 250: 246 0000EFCF # if( force_loop ) ! 251: 247 0000EFCF 5d effffffdf7 tstl _force_loop ! 252: 248 0000EFD5 31 02 jeql L257 ! 253: 249 0000EFD7 # asm("brb _mulf_2_lp1");; /* loop on the error */ ! 254: 250 0000EFD7 11 e4 brb _mulf_2_lp1 ! 255: 251 0000EFD9 L257: ! 256: 252 0000EFD9 # /* ! 257: 253 0000EFD9 # * end error loop - test the results ! 258: 254 0000EFD9 # */ ! 259: 255 0000EFD9 # if( sgl_st_acc != sgl_expected ) { /* COMPARE the values */ ! 260: 256 0000EFD9 1d effffffded effffffde8 cmpl _sgl_st_acc,_sgl_expected ! 261: 257 0000EFE4 21 03 13 0086 jeql L258 ! 262: 258 0000EFE9 # errcnt++; /* bump the error count */ ! 263: 259 0000EFE9 6d effffffddd incl _errcnt ! 264: 260 0000EFEF # if( prt_error ) { ! 265: 261 0000EFEF 5d effffffdd7 tstl _prt_error ! 266: 262 0000EFF5 31 55 jeql L259 ! 267: 263 0000EFF7 # writes(" \n"); /* start a new print line */ ! 268: 264 0000EFF7 .data 1 ! 269: 265 00000d63 * L260: ! 270: 266 00000d63 * 200A00 .ascii " \12\0" ! 271: 267 00000d66 * .text ! 272: 268 0000EFF7 dd 8f00000d63 pushl $L260 ! 273: 269 0000EFFD fe 08 effffffdc8 callf $8,_writes ! 274: 270 0000F004 # writes("cycle: "); ! 275: 271 0000F004 .data 1 ! 276: 272 00000d66 * L261: ! 277: 273 00000d66 * 6379636C653A2000 .ascii "cycle: \0" ! 278: 274 00000d6e * .text ! 279: 275 0000F004 dd 8f00000d66 pushl $L261 ! 280: 276 0000F00A fe 08 effffffdbb callf $8,_writes ! 281: 277 0000F011 # writed( cycle ); ! 282: 278 0000F011 dd effffffdb5 pushl _cycle ! 283: 279 0000F017 fe 08 effffffdae callf $8,_writed ! 284: 280 0000F01E # writes(" MULF test "); ! 285: 281 0000F01E .data 1 ! 286: 282 00000d6e * L262: ! 287: 283 00000d6e * 20204D554C462074657374200 .ascii " MULF test \0" ! 288: 0 ! 289: 284 00000d7b * .text ! 290: 285 0000F01E dd 8f00000d6e pushl $L262 ! 291: 286 0000F024 fe 08 effffffda1 callf $8,_writes ! 292: 287 0000F02B # writed( test_no ); ! 293: 288 0000F02B dd effffffd9b pushl _test_no ! 294: 289 0000F031 fe 08 effffffd94 callf $8,_writed ! 295: 290 0000F038 # writes(", subtest 2 (Cache Data) - BAD FINAL ACC\n"); ! 296: 291 0000F038 .data 1 ! 297: 292 00000d7b * L263: ! 298: 293 00000d7b * 2C20737562746573742032202 .ascii ", subtest 2 (Cache Data) - BAD FINAL ACC\12\0" ! 299: 8436163686520446174612920 ! 300: 2D204241442046494E414C204 ! 301: 143430A00 ! 302: 294 00000da5 * .text ! 303: 295 0000F038 dd 8f00000d7b pushl $L263 ! 304: 296 0000F03E fe 08 effffffd87 callf $8,_writes ! 305: 297 0000F045 # print_mulf_data(); ! 306: 298 0000F045 fe 04 ef00000944 callf $4,_print_mulf_data ! 307: 299 0000F04C # } ! 308: 300 0000F04C # if( halt_flg ) ! 309: 301 0000F04C L259: ! 310: 302 0000F04C 5d effffffd7a tstl _halt_flg ! 311: 303 0000F052 31 09 jeql L264 ! 312: 304 0000F054 # mulf_er_halt( BAD_ACC_HLT ); /* halt on the error */ ! 313: 305 0000F054 dd 01 pushl $1 ! 314: 306 0000F056 fe 08 ef000009d1 callf $8,_mulf_er_halt ! 315: 307 0000F05D # if( loop_on_err ) { ! 316: 308 0000F05D L264: ! 317: 309 0000F05D 5d effffffd69 tstl _loop_on_err ! 318: 310 0000F063 31 0a jeql L265 ! 319: 311 0000F065 # force_loop = TRUE; /* set the force loop flag */ ! 320: 312 0000F065 0d 01 effffffd60 movl $1,_force_loop ! 321: 313 0000F06C # asm("brw _mulf_2_lp1");; /* and loop on the error */ ! 322: 314 0000F06C 13 ff4e brw _mulf_2_lp1 ! 323: 315 0000F06F # } /* end of loop on error */ ! 324: 316 0000F06F # } /* end of compare error */ ! 325: 317 0000F06F L265: ! 326: 318 0000F06F # } /* end of WHILE loop */ ! 327: 319 0000F06F L258: ! 328: 320 0000F06F L254: ! 329: 321 0000F06F 6d effffffd57 incl _index ! 330: 322 0000F075 13 fefc jbr L256 ! 331: 323 0000F078 L255: ! 332: 324 0000F078 # } /* end of subtest 2 */ ! 333: 325 0000F078 40 ret#2 ! 334: 326 0000F079 .set L250,0x0 ! 335: 327 0000F079 L252: ! 336: 328 0000F079 13 fee5 jbr L253 ! 337: 329 0000F07C .data ! 338: 330 00000d1c * .text ! 339: 331 0000F07C .align 1 ! 340: 332 0000F07C .globl _mulf_3 ! 341: 333 0000F07C _mulf_3: ! 342: 334 0000F07C 0000 .word L266 ! 343: 335 0000F07E # ! 344: 336 0000F07E # ! 345: 337 0000F07E # ! 346: 338 0000F07E # /************************************************************************ ! 347: 339 0000F07E # * ! 348: 340 0000F07E # * SUBTEST 3 - Wait 3 NOPs before storing the results ! 349: 341 0000F07E # * ! 350: 342 0000F07E # ************************************************************************/ ! 351: 343 0000F07E # mulf_3() ! 352: 344 0000F07E # { ! 353: 345 0000F07E 13 011c jbr L268 ! 354: 346 0000F081 L269: ! 355: 347 0000F081 # force_loop = FALSE; ! 356: 348 0000F081 4d effffffd45 clrl _force_loop ! 357: 349 0000F087 # subtest = 3; ! 358: 350 0000F087 0d 03 effffffd3e movl $3,_subtest ! 359: 351 0000F08E # for( index = 0; index < max_mulf_1_index; index++ ) { ! 360: 352 0000F08E 4d effffffd38 clrl _index ! 361: 353 0000F094 L272: ! 362: 354 0000F094 1d effffffd32 effffffd2d cmpl _index,_max_mulf_1_index ! 363: 355 0000F09F 91 03 13 00f8 jgeq L271 ! 364: 356 0000F0A4 # sgl_ld_acc = mulf_1_data[index].op_1; /* get operand 1 */ ! 365: 357 0000F0A4 5c 0c effffffd21 50 mull3 $12,_index,r0 ! 366: 358 0000F0AC 0d e000000000 effffffd15 movl _mulf_1_data(r0),_sgl_ld_acc ! 367: 359 0000F0B7 # sgl_value_1 = mulf_1_data[index].op_2; /* get operand 2 */ ! 368: 360 0000F0B7 5c 0c effffffd0e 50 mull3 $12,_index,r0 ! 369: 361 0000F0BF 0d e000000004 effffffd02 movl _mulf_1_data+4(r0),_sgl_value_1 ! 370: 362 0000F0CA # sgl_expected = mulf_1_data[index].exp; /* get expected result */ ! 371: 363 0000F0CA 5c 0c effffffcfb 50 mull3 $12,_index,r0 ! 372: 364 0000F0D2 0d e000000008 effffffcef movl _mulf_1_data+8(r0),_sgl_expected ! 373: 365 0000F0DD # /* ! 374: 366 0000F0DD # * If LOOP ON ERROR is set, this is the loop for this subtest. ! 375: 367 0000F0DD # * The force loop flag is set after the first error. ! 376: 368 0000F0DD # */ ! 377: 369 0000F0DD # asm("_mulf_3_lp1:"); ! 378: 370 0000F0DD _mulf_3_lp1: ! 379: 371 0000F0DD # asm("ldf _sgl_ld_acc"); /* load the 1st operand */ ! 380: 372 0000F0DD 06 effffffce9 ldf _sgl_ld_acc ! 381: 373 0000F0E3 # asm("nop"); /* delay */ ! 382: 374 0000F0E3 10 nop ! 383: 375 0000F0E4 # asm("mulf _sgl_value_1"); /* multiply the 2nd operand */ ! 384: 376 0000F0E4 e6 effffffce2 mulf _sgl_value_1 ! 385: 377 0000F0EA # asm("nop"); /* delay before ... */ ! 386: 378 0000F0EA 10 nop ! 387: 379 0000F0EB # asm("nop"); ! 388: 380 0000F0EB 10 nop ! 389: 381 0000F0EC # asm("nop"); /* ... storing the result */ ! 390: 382 0000F0EC 10 nop ! 391: 383 0000F0ED # asm("stf _sgl_st_acc"); /* store the result */ ! 392: 384 0000F0ED 26 effffffcd9 stf _sgl_st_acc ! 393: 385 0000F0F3 # if( force_loop ) ! 394: 386 0000F0F3 5d effffffcd3 tstl _force_loop ! 395: 387 0000F0F9 31 02 jeql L273 ! 396: 388 0000F0FB # asm("brb _mulf_3_lp1");; /* loop on the error */ ! 397: 389 0000F0FB 11 e0 brb _mulf_3_lp1 ! 398: 390 0000F0FD L273: ! 399: 391 0000F0FD # /* ! 400: 392 0000F0FD # * end error loop - test the results ! 401: 393 0000F0FD # */ ! 402: 394 0000F0FD # if( sgl_st_acc != sgl_expected ) { /* COMPARE the values */ ! 403: 395 0000F0FD 1d effffffcc9 effffffcc4 cmpl _sgl_st_acc,_sgl_expected ! 404: 396 0000F108 21 03 13 0086 jeql L274 ! 405: 397 0000F10D # errcnt++; /* bump the error count */ ! 406: 398 0000F10D 6d effffffcb9 incl _errcnt ! 407: 399 0000F113 # if( prt_error ) { ! 408: 400 0000F113 5d effffffcb3 tstl _prt_error ! 409: 401 0000F119 31 55 jeql L275 ! 410: 402 0000F11B # writes(" \n"); /* start a new print line */ ! 411: 403 0000F11B .data 1 ! 412: 404 00000da5 * L276: ! 413: 405 00000da5 * 200A00 .ascii " \12\0" ! 414: 406 00000da8 * .text ! 415: 407 0000F11B dd 8f00000da5 pushl $L276 ! 416: 408 0000F121 fe 08 effffffca4 callf $8,_writes ! 417: 409 0000F128 # writes("cycle: "); ! 418: 410 0000F128 .data 1 ! 419: 411 00000da8 * L277: ! 420: 412 00000da8 * 6379636C653A2000 .ascii "cycle: \0" ! 421: 413 00000db0 * .text ! 422: 414 0000F128 dd 8f00000da8 pushl $L277 ! 423: 415 0000F12E fe 08 effffffc97 callf $8,_writes ! 424: 416 0000F135 # writed( cycle ); ! 425: 417 0000F135 dd effffffc91 pushl _cycle ! 426: 418 0000F13B fe 08 effffffc8a callf $8,_writed ! 427: 419 0000F142 # writes(" MULF test "); ! 428: 420 0000F142 .data 1 ! 429: 421 00000db0 * L278: ! 430: 422 00000db0 * 20204D554C462074657374200 .ascii " MULF test \0" ! 431: 0 ! 432: 423 00000dbd * .text ! 433: 424 0000F142 dd 8f00000db0 pushl $L278 ! 434: 425 0000F148 fe 08 effffffc7d callf $8,_writes ! 435: 426 0000F14F # writed( test_no ); ! 436: 427 0000F14F dd effffffc77 pushl _test_no ! 437: 428 0000F155 fe 08 effffffc70 callf $8,_writed ! 438: 429 0000F15C # writes(", subtest 3 (Cache Data - 3 NOPs) - BAD FINAL ACC\n"); ! 439: 430 0000F15C .data 1 ! 440: 431 00000dbd * L279: ! 441: 432 00000dbd * 2C20737562746573742033202 .ascii ", subtest 3 (Cache Data - 3 NOPs) - BAD FINAL ACC\12\0" ! 442: 843616368652044617461202D ! 443: 2033204E4F507329202D20424 ! 444: 1442046494E414C204143430A ! 445: 00 ! 446: 433 00000df0 * .text ! 447: 434 0000F15C dd 8f00000dbd pushl $L279 ! 448: 435 0000F162 fe 08 effffffc63 callf $8,_writes ! 449: 436 0000F169 # print_mulf_data(); ! 450: 437 0000F169 fe 04 ef00000820 callf $4,_print_mulf_data ! 451: 438 0000F170 # } ! 452: 439 0000F170 # if( halt_flg ) ! 453: 440 0000F170 L275: ! 454: 441 0000F170 5d effffffc56 tstl _halt_flg ! 455: 442 0000F176 31 09 jeql L280 ! 456: 443 0000F178 # mulf_er_halt( BAD_ACC_HLT ); /* halt on the error */ ! 457: 444 0000F178 dd 01 pushl $1 ! 458: 445 0000F17A fe 08 ef000008ad callf $8,_mulf_er_halt ! 459: 446 0000F181 # if( loop_on_err ) { ! 460: 447 0000F181 L280: ! 461: 448 0000F181 5d effffffc45 tstl _loop_on_err ! 462: 449 0000F187 31 0a jeql L281 ! 463: 450 0000F189 # force_loop = TRUE; /* set the force loop flag */ ! 464: 451 0000F189 0d 01 effffffc3c movl $1,_force_loop ! 465: 452 0000F190 # asm("brw _mulf_3_lp1");; /* and loop on the error */ ! 466: 453 0000F190 13 ff4a brw _mulf_3_lp1 ! 467: 454 0000F193 # } /* end of loop on error */ ! 468: 455 0000F193 # } /* end of compare error */ ! 469: 456 0000F193 L281: ! 470: 457 0000F193 # } /* end of WHILE loop */ ! 471: 458 0000F193 L274: ! 472: 459 0000F193 L270: ! 473: 460 0000F193 6d effffffc33 incl _index ! 474: 461 0000F199 13 fef8 jbr L272 ! 475: 462 0000F19C L271: ! 476: 463 0000F19C # } /* end of subtest 3 */ ! 477: 464 0000F19C 40 ret#2 ! 478: 465 0000F19D .set L266,0x0 ! 479: 466 0000F19D L268: ! 480: 467 0000F19D 13 fee1 jbr L269 ! 481: 468 0000F1A0 .data ! 482: 469 00000d1c * .text ! 483: 470 0000F1A0 .align 1 ! 484: 471 0000F1A0 .globl _mulf_4 ! 485: 472 0000F1A0 _mulf_4: ! 486: 473 0000F1A0 0000 .word L282 ! 487: 474 0000F1A2 # ! 488: 475 0000F1A2 # ! 489: 476 0000F1A2 # ! 490: 477 0000F1A2 # /************************************************************************ ! 491: 478 0000F1A2 # * ! 492: 479 0000F1A2 # * SUBTEST 4 - Wait 2 NOPs before storing the results ! 493: 480 0000F1A2 # * ! 494: 481 0000F1A2 # ************************************************************************/ ! 495: 482 0000F1A2 # mulf_4() ! 496: 483 0000F1A2 # { ! 497: 484 0000F1A2 13 011b jbr L284 ! 498: 485 0000F1A5 L285: ! 499: 486 0000F1A5 # force_loop = FALSE; ! 500: 487 0000F1A5 4d effffffc21 clrl _force_loop ! 501: 488 0000F1AB # subtest = 4; ! 502: 489 0000F1AB 0d 04 effffffc1a movl $4,_subtest ! 503: 490 0000F1B2 # for( index = 0; index < max_mulf_1_index; index++ ) { ! 504: 491 0000F1B2 4d effffffc14 clrl _index ! 505: 492 0000F1B8 L288: ! 506: 493 0000F1B8 1d effffffc0e effffffc09 cmpl _index,_max_mulf_1_index ! 507: 494 0000F1C3 91 03 13 00f7 jgeq L287 ! 508: 495 0000F1C8 # sgl_ld_acc = mulf_1_data[index].op_1; /* get operand 1 */ ! 509: 496 0000F1C8 5c 0c effffffbfd 50 mull3 $12,_index,r0 ! 510: 497 0000F1D0 0d e000000000 effffffbf1 movl _mulf_1_data(r0),_sgl_ld_acc ! 511: 498 0000F1DB # sgl_value_1 = mulf_1_data[index].op_2; /* get operand 2 */ ! 512: 499 0000F1DB 5c 0c effffffbea 50 mull3 $12,_index,r0 ! 513: 500 0000F1E3 0d e000000004 effffffbde movl _mulf_1_data+4(r0),_sgl_value_1 ! 514: 501 0000F1EE # sgl_expected = mulf_1_data[index].exp; /* get expected result */ ! 515: 502 0000F1EE 5c 0c effffffbd7 50 mull3 $12,_index,r0 ! 516: 503 0000F1F6 0d e000000008 effffffbcb movl _mulf_1_data+8(r0),_sgl_expected ! 517: 504 0000F201 # /* ! 518: 505 0000F201 # * If LOOP ON ERROR is set, this is the loop for this subtest. ! 519: 506 0000F201 # * The force loop flag is set after the first error. ! 520: 507 0000F201 # */ ! 521: 508 0000F201 # asm("_mulf_4_lp1:"); ! 522: 509 0000F201 _mulf_4_lp1: ! 523: 510 0000F201 # asm("ldf _sgl_ld_acc"); /* load the 1st operand */ ! 524: 511 0000F201 06 effffffbc5 ldf _sgl_ld_acc ! 525: 512 0000F207 # asm("nop"); /* delay */ ! 526: 513 0000F207 10 nop ! 527: 514 0000F208 # asm("mulf _sgl_value_1"); /* multiply the 2nd operand */ ! 528: 515 0000F208 e6 effffffbbe mulf _sgl_value_1 ! 529: 516 0000F20E # asm("nop"); /* delay before ... */ ! 530: 517 0000F20E 10 nop ! 531: 518 0000F20F # asm("nop"); /* ... storing the result */ ! 532: 519 0000F20F 10 nop ! 533: 520 0000F210 # asm("stf _sgl_st_acc"); /* store the result */ ! 534: 521 0000F210 26 effffffbb6 stf _sgl_st_acc ! 535: 522 0000F216 # if( force_loop ) ! 536: 523 0000F216 5d effffffbb0 tstl _force_loop ! 537: 524 0000F21C 31 02 jeql L289 ! 538: 525 0000F21E # asm("brb _mulf_4_lp1");; /* loop on the error */ ! 539: 526 0000F21E 11 e1 brb _mulf_4_lp1 ! 540: 527 0000F220 L289: ! 541: 528 0000F220 # /* ! 542: 529 0000F220 # * end error loop - test the results ! 543: 530 0000F220 # */ ! 544: 531 0000F220 # if( sgl_st_acc != sgl_expected ) { /* COMPARE the values */ ! 545: 532 0000F220 1d effffffba6 effffffba1 cmpl _sgl_st_acc,_sgl_expected ! 546: 533 0000F22B 21 03 13 0086 jeql L290 ! 547: 534 0000F230 # errcnt++; /* bump the error count */ ! 548: 535 0000F230 6d effffffb96 incl _errcnt ! 549: 536 0000F236 # if( prt_error ) { ! 550: 537 0000F236 5d effffffb90 tstl _prt_error ! 551: 538 0000F23C 31 55 jeql L291 ! 552: 539 0000F23E # writes(" \n"); /* start a new print line */ ! 553: 540 0000F23E .data 1 ! 554: 541 00000df0 * L292: ! 555: 542 00000df0 * 200A00 .ascii " \12\0" ! 556: 543 00000df3 * .text ! 557: 544 0000F23E dd 8f00000df0 pushl $L292 ! 558: 545 0000F244 fe 08 effffffb81 callf $8,_writes ! 559: 546 0000F24B # writes("cycle: "); ! 560: 547 0000F24B .data 1 ! 561: 548 00000df3 * L293: ! 562: 549 00000df3 * 6379636C653A2000 .ascii "cycle: \0" ! 563: 550 00000dfb * .text ! 564: 551 0000F24B dd 8f00000df3 pushl $L293 ! 565: 552 0000F251 fe 08 effffffb74 callf $8,_writes ! 566: 553 0000F258 # writed( cycle ); ! 567: 554 0000F258 dd effffffb6e pushl _cycle ! 568: 555 0000F25E fe 08 effffffb67 callf $8,_writed ! 569: 556 0000F265 # writes(" MULF test "); ! 570: 557 0000F265 .data 1 ! 571: 558 00000dfb * L294: ! 572: 559 00000dfb * 20204D554C462074657374200 .ascii " MULF test \0" ! 573: 0 ! 574: 560 00000e08 * .text ! 575: 561 0000F265 dd 8f00000dfb pushl $L294 ! 576: 562 0000F26B fe 08 effffffb5a callf $8,_writes ! 577: 563 0000F272 # writed( test_no ); ! 578: 564 0000F272 dd effffffb54 pushl _test_no ! 579: 565 0000F278 fe 08 effffffb4d callf $8,_writed ! 580: 566 0000F27F # writes(", subtest 4 (Cache Data - 2 NOPs) - BAD FINAL ACC\n"); ! 581: 567 0000F27F .data 1 ! 582: 568 00000e08 * L295: ! 583: 569 00000e08 * 2C20737562746573742034202 .ascii ", subtest 4 (Cache Data - 2 NOPs) - BAD FINAL ACC\12\0" ! 584: 843616368652044617461202D ! 585: 2032204E4F507329202D20424 ! 586: 1442046494E414C204143430A ! 587: 00 ! 588: 570 00000e3b * .text ! 589: 571 0000F27F dd 8f00000e08 pushl $L295 ! 590: 572 0000F285 fe 08 effffffb40 callf $8,_writes ! 591: 573 0000F28C # print_mulf_data(); ! 592: 574 0000F28C fe 04 ef000006fd callf $4,_print_mulf_data ! 593: 575 0000F293 # } ! 594: 576 0000F293 # if( halt_flg ) ! 595: 577 0000F293 L291: ! 596: 578 0000F293 5d effffffb33 tstl _halt_flg ! 597: 579 0000F299 31 09 jeql L296 ! 598: 580 0000F29B # mulf_er_halt( BAD_ACC_HLT ); /* halt on the error */ ! 599: 581 0000F29B dd 01 pushl $1 ! 600: 582 0000F29D fe 08 ef0000078a callf $8,_mulf_er_halt ! 601: 583 0000F2A4 # if( loop_on_err ) { ! 602: 584 0000F2A4 L296: ! 603: 585 0000F2A4 5d effffffb22 tstl _loop_on_err ! 604: 586 0000F2AA 31 0a jeql L297 ! 605: 587 0000F2AC # force_loop = TRUE; /* set the force loop flag */ ! 606: 588 0000F2AC 0d 01 effffffb19 movl $1,_force_loop ! 607: 589 0000F2B3 # asm("brw _mulf_4_lp1");; /* and loop on the error */ ! 608: 590 0000F2B3 13 ff4b brw _mulf_4_lp1 ! 609: 591 0000F2B6 # } /* end of loop on error */ ! 610: 592 0000F2B6 # } /* end of compare error */ ! 611: 593 0000F2B6 L297: ! 612: 594 0000F2B6 # } /* end of WHILE loop */ ! 613: 595 0000F2B6 L290: ! 614: 596 0000F2B6 L286: ! 615: 597 0000F2B6 6d effffffb10 incl _index ! 616: 598 0000F2BC 13 fef9 jbr L288 ! 617: 599 0000F2BF L287: ! 618: 600 0000F2BF # } /* end of subtest 4 */ ! 619: 601 0000F2BF 40 ret#2 ! 620: 602 0000F2C0 .set L282,0x0 ! 621: 603 0000F2C0 L284: ! 622: 604 0000F2C0 13 fee2 jbr L285 ! 623: 605 0000F2C3 .data ! 624: 606 00000d1c * .text ! 625: 607 0000F2C3 00 .align 1 ! 626: 608 0000F2C4 .globl _mulf_5 ! 627: 609 0000F2C4 _mulf_5: ! 628: 610 0000F2C4 0000 .word L298 ! 629: 611 0000F2C6 # ! 630: 612 0000F2C6 # ! 631: 613 0000F2C6 # ! 632: 614 0000F2C6 # /************************************************************************ ! 633: 615 0000F2C6 # * ! 634: 616 0000F2C6 # * SUBTEST 5 - Wait 1 NOP before storing the results ! 635: 617 0000F2C6 # * ! 636: 618 0000F2C6 # ************************************************************************/ ! 637: 619 0000F2C6 # mulf_5() ! 638: 620 0000F2C6 # { ! 639: 621 0000F2C6 13 011a jbr L300 ! 640: 622 0000F2C9 L301: ! 641: 623 0000F2C9 # force_loop = FALSE; ! 642: 624 0000F2C9 4d effffffafd clrl _force_loop ! 643: 625 0000F2CF # subtest = 5; ! 644: 626 0000F2CF 0d 05 effffffaf6 movl $5,_subtest ! 645: 627 0000F2D6 # for( index = 0; index < max_mulf_1_index; index++ ) { ! 646: 628 0000F2D6 4d effffffaf0 clrl _index ! 647: 629 0000F2DC L304: ! 648: 630 0000F2DC 1d effffffaea effffffae5 cmpl _index,_max_mulf_1_index ! 649: 631 0000F2E7 91 03 13 00f6 jgeq L303 ! 650: 632 0000F2EC # sgl_ld_acc = mulf_1_data[index].op_1; /* get operand 1 */ ! 651: 633 0000F2EC 5c 0c effffffad9 50 mull3 $12,_index,r0 ! 652: 634 0000F2F4 0d e000000000 effffffacd movl _mulf_1_data(r0),_sgl_ld_acc ! 653: 635 0000F2FF # sgl_value_1 = mulf_1_data[index].op_2; /* get operand 2 */ ! 654: 636 0000F2FF 5c 0c effffffac6 50 mull3 $12,_index,r0 ! 655: 637 0000F307 0d e000000004 effffffaba movl _mulf_1_data+4(r0),_sgl_value_1 ! 656: 638 0000F312 # sgl_expected = mulf_1_data[index].exp; /* get expected result */ ! 657: 639 0000F312 5c 0c effffffab3 50 mull3 $12,_index,r0 ! 658: 640 0000F31A 0d e000000008 effffffaa7 movl _mulf_1_data+8(r0),_sgl_expected ! 659: 641 0000F325 # /* ! 660: 642 0000F325 # * If LOOP ON ERROR is set, this is the loop for this subtest. ! 661: 643 0000F325 # * The force loop flag is set after the first error. ! 662: 644 0000F325 # */ ! 663: 645 0000F325 # asm("_mulf_5_lp1:"); ! 664: 646 0000F325 _mulf_5_lp1: ! 665: 647 0000F325 # asm("ldf _sgl_ld_acc"); /* load the 1st operand */ ! 666: 648 0000F325 06 effffffaa1 ldf _sgl_ld_acc ! 667: 649 0000F32B # asm("nop"); /* delay */ ! 668: 650 0000F32B 10 nop ! 669: 651 0000F32C # asm("mulf _sgl_value_1"); /* multiply the 2nd operand */ ! 670: 652 0000F32C e6 effffffa9a mulf _sgl_value_1 ! 671: 653 0000F332 # asm("nop"); /* delay before storing */ ! 672: 654 0000F332 10 nop ! 673: 655 0000F333 # asm("stf _sgl_st_acc"); /* store the result */ ! 674: 656 0000F333 26 effffffa93 stf _sgl_st_acc ! 675: 657 0000F339 # if( force_loop ) ! 676: 658 0000F339 5d effffffa8d tstl _force_loop ! 677: 659 0000F33F 31 02 jeql L305 ! 678: 660 0000F341 # asm("brb _mulf_5_lp1");; /* loop on the error */ ! 679: 661 0000F341 11 e2 brb _mulf_5_lp1 ! 680: 662 0000F343 L305: ! 681: 663 0000F343 # /* ! 682: 664 0000F343 # * end error loop - test the results ! 683: 665 0000F343 # */ ! 684: 666 0000F343 # if( sgl_st_acc != sgl_expected ) { /* COMPARE the values */ ! 685: 667 0000F343 1d effffffa83 effffffa7e cmpl _sgl_st_acc,_sgl_expected ! 686: 668 0000F34E 21 03 13 0086 jeql L306 ! 687: 669 0000F353 # errcnt++; /* bump the error count */ ! 688: 670 0000F353 6d effffffa73 incl _errcnt ! 689: 671 0000F359 # if( prt_error ) { ! 690: 672 0000F359 5d effffffa6d tstl _prt_error ! 691: 673 0000F35F 31 55 jeql L307 ! 692: 674 0000F361 # writes(" \n"); /* start a new print line */ ! 693: 675 0000F361 .data 1 ! 694: 676 00000e3b * L308: ! 695: 677 00000e3b * 200A00 .ascii " \12\0" ! 696: 678 00000e3e * .text ! 697: 679 0000F361 dd 8f00000e3b pushl $L308 ! 698: 680 0000F367 fe 08 effffffa5e callf $8,_writes ! 699: 681 0000F36E # writes("cycle: "); ! 700: 682 0000F36E .data 1 ! 701: 683 00000e3e * L309: ! 702: 684 00000e3e * 6379636C653A2000 .ascii "cycle: \0" ! 703: 685 00000e46 * .text ! 704: 686 0000F36E dd 8f00000e3e pushl $L309 ! 705: 687 0000F374 fe 08 effffffa51 callf $8,_writes ! 706: 688 0000F37B # writed( cycle ); ! 707: 689 0000F37B dd effffffa4b pushl _cycle ! 708: 690 0000F381 fe 08 effffffa44 callf $8,_writed ! 709: 691 0000F388 # writes(" MULF test "); ! 710: 692 0000F388 .data 1 ! 711: 693 00000e46 * L310: ! 712: 694 00000e46 * 20204D554C462074657374200 .ascii " MULF test \0" ! 713: 0 ! 714: 695 00000e53 * .text ! 715: 696 0000F388 dd 8f00000e46 pushl $L310 ! 716: 697 0000F38E fe 08 effffffa37 callf $8,_writes ! 717: 698 0000F395 # writed( test_no ); ! 718: 699 0000F395 dd effffffa31 pushl _test_no ! 719: 700 0000F39B fe 08 effffffa2a callf $8,_writed ! 720: 701 0000F3A2 # writes(", subtest 5 (Cache Data - 1 NOPs) - BAD FINAL ACC\n"); ! 721: 702 0000F3A2 .data 1 ! 722: 703 00000e53 * L311: ! 723: 704 00000e53 * 2C20737562746573742035202 .ascii ", subtest 5 (Cache Data - 1 NOPs) - BAD FINAL ACC\12\0" ! 724: 843616368652044617461202D ! 725: 2031204E4F507329202D20424 ! 726: 1442046494E414C204143430A ! 727: 00 ! 728: 705 00000e86 * .text ! 729: 706 0000F3A2 dd 8f00000e53 pushl $L311 ! 730: 707 0000F3A8 fe 08 effffffa1d callf $8,_writes ! 731: 708 0000F3AF # print_mulf_data(); ! 732: 709 0000F3AF fe 04 ef000005da callf $4,_print_mulf_data ! 733: 710 0000F3B6 # } ! 734: 711 0000F3B6 # if( halt_flg ) ! 735: 712 0000F3B6 L307: ! 736: 713 0000F3B6 5d effffffa10 tstl _halt_flg ! 737: 714 0000F3BC 31 09 jeql L312 ! 738: 715 0000F3BE # mulf_er_halt( BAD_ACC_HLT ); /* halt on the error */ ! 739: 716 0000F3BE dd 01 pushl $1 ! 740: 717 0000F3C0 fe 08 ef00000667 callf $8,_mulf_er_halt ! 741: 718 0000F3C7 # if( loop_on_err ) { ! 742: 719 0000F3C7 L312: ! 743: 720 0000F3C7 5d effffff9ff tstl _loop_on_err ! 744: 721 0000F3CD 31 0a jeql L313 ! 745: 722 0000F3CF # force_loop = TRUE; /* set the force loop flag */ ! 746: 723 0000F3CF 0d 01 effffff9f6 movl $1,_force_loop ! 747: 724 0000F3D6 # asm("brw _mulf_5_lp1");; /* and loop on the error */ ! 748: 725 0000F3D6 13 ff4c brw _mulf_5_lp1 ! 749: 726 0000F3D9 # } /* end of loop on error */ ! 750: 727 0000F3D9 # } /* end of compare error */ ! 751: 728 0000F3D9 L313: ! 752: 729 0000F3D9 # } /* end of WHILE loop */ ! 753: 730 0000F3D9 L306: ! 754: 731 0000F3D9 L302: ! 755: 732 0000F3D9 6d effffff9ed incl _index ! 756: 733 0000F3DF 13 fefa jbr L304 ! 757: 734 0000F3E2 L303: ! 758: 735 0000F3E2 # } /* end of subtest 5 */ ! 759: 736 0000F3E2 40 ret#2 ! 760: 737 0000F3E3 .set L298,0x0 ! 761: 738 0000F3E3 L300: ! 762: 739 0000F3E3 13 fee3 jbr L301 ! 763: 740 0000F3E6 .data ! 764: 741 00000d1c * .text ! 765: 742 0000F3E6 .align 1 ! 766: 743 0000F3E6 .globl _mulf_6 ! 767: 744 0000F3E6 _mulf_6: ! 768: 745 0000F3E6 0000 .word L314 ! 769: 746 0000F3E8 # ! 770: 747 0000F3E8 # ! 771: 748 0000F3E8 # ! 772: 749 0000F3E8 # /************************************************************************ ! 773: 750 0000F3E8 # * ! 774: 751 0000F3E8 # * SUBTEST 6 - Check for register corruption ! 775: 752 0000F3E8 # * ! 776: 753 0000F3E8 # ************************************************************************/ ! 777: 754 0000F3E8 # mulf_6() ! 778: 755 0000F3E8 # { ! 779: 756 0000F3E8 13 01a7 jbr L316 ! 780: 757 0000F3EB L317: ! 781: 758 0000F3EB # force_loop = FALSE; /* clear force_loop flg */ ! 782: 759 0000F3EB 4d effffff9db clrl _force_loop ! 783: 760 0000F3F1 # subtest = 6; ! 784: 761 0000F3F1 0d 06 effffff9d4 movl $6,_subtest ! 785: 762 0000F3F8 # fill_reg_buf( load_regs ); /* get patterns for regs */ ! 786: 763 0000F3F8 dd 8f00000000 pushl $_load_regs ! 787: 764 0000F3FE fe 08 effffff9c7 callf $8,_fill_reg_buf ! 788: 765 0000F405 # index = 0; ! 789: 766 0000F405 4d effffff9c1 clrl _index ! 790: 767 0000F40B # sgl_ld_acc = mulf_1_data[0].op_1; /* get operand 1 */ ! 791: 768 0000F40B 0d effffff9bb effffff9b6 movl _mulf_1_data,_sgl_ld_acc ! 792: 769 0000F416 # sgl_value_1 = mulf_1_data[0].op_2; /* get operand 2 */ ! 793: 770 0000F416 0d effffff9b4 effffff9ab movl _mulf_1_data+4,_sgl_value_1 ! 794: 771 0000F421 # sgl_expected = mulf_1_data[0].exp; /* get expected result */ ! 795: 772 0000F421 0d effffff9ad effffff9a0 movl _mulf_1_data+8,_sgl_expected ! 796: 773 0000F42C # /* ! 797: 774 0000F42C # * If LOOP ON ERROR is set, this is the loop for this subtest. ! 798: 775 0000F42C # * The force loop flag is set after the first error. ! 799: 776 0000F42C # */ ! 800: 777 0000F42C # asm("_mulf_6_lp1:"); ! 801: 778 0000F42C _mulf_6_lp1: ! 802: 779 0000F42C # asm("ldf _sgl_ld_acc"); /* LOAD the accumulator */ ! 803: 780 0000F42C 06 effffff99a ldf _sgl_ld_acc ! 804: 781 0000F432 # asm("nop"); ! 805: 782 0000F432 10 nop ! 806: 783 0000F433 # asm("loadr $0x1fff,_load_regs"); /* load regs 0 - 12 */ ! 807: 784 0000F433 ab 891fff effffff990 loadr $0x1fff,_load_regs ! 808: 785 0000F43C # asm("nop"); ! 809: 786 0000F43C 10 nop ! 810: 787 0000F43D # asm("mulf _sgl_value_1"); /* do the multiply */ ! 811: 788 0000F43D e6 effffff989 mulf _sgl_value_1 ! 812: 789 0000F443 # asm("nop"); ! 813: 790 0000F443 10 nop ! 814: 791 0000F444 # asm("storer $0x1fff,_store_regs"); /* store regs 0 - 12 */ ! 815: 792 0000F444 bb 891fff effffff97f storer $0x1fff,_store_regs ! 816: 793 0000F44D # asm("stf _sgl_st_acc"); /* save the accumulator */ ! 817: 794 0000F44D 26 effffff979 stf _sgl_st_acc ! 818: 795 0000F453 # if( force_loop ) ! 819: 796 0000F453 5d effffff973 tstl _force_loop ! 820: 797 0000F459 31 02 jeql L319 ! 821: 798 0000F45B # asm("brb _mulf_6_lp1");; /* loop on the error */ ! 822: 799 0000F45B 11 cf brb _mulf_6_lp1 ! 823: 800 0000F45D L319: ! 824: 801 0000F45D # /* ! 825: 802 0000F45D # * Now compare the stored register values to those that were loaded ! 826: 803 0000F45D # */ ! 827: 804 0000F45D # index2 = 0; ! 828: 805 0000F45D 4d effffff969 clrl _index2 ! 829: 806 0000F463 # while( (load_regs[index2] == store_regs[index2]) && (index2 < 13) ) ! 830: 807 0000F463 L320: ! 831: 808 0000F463 0d effffff963 50 movl _index2,r0 ! 832: 809 0000F46A 0d effffff95c 51 movl _index2,r1 ! 833: 810 0000F471 1d 40effffff954 cmpl _load_regs[r0],_store_regs[r1] ! 834: 41effffff94e ! 835: 811 0000F47E 21 11 jneq L321 ! 836: 812 0000F480 1d effffff946 0d cmpl _index2,$13 ! 837: 813 0000F487 81 08 jgeq L321 ! 838: 814 0000F489 # index2++; /* check reg values */ ! 839: 815 0000F489 6d effffff93d incl _index2 ! 840: 816 0000F48F 11 d2 jbr L320 ! 841: 817 0000F491 L321: ! 842: 818 0000F491 # if( index2 < 13 ) { /* error if index2 < 13 */ ! 843: 819 0000F491 1d effffff935 0d cmpl _index2,$13 ! 844: 820 0000F498 91 03 13 00f4 jgeq L322 ! 845: 821 0000F49D # errcnt++; /* bump the error count */ ! 846: 822 0000F49D 6d effffff929 incl _errcnt ! 847: 823 0000F4A3 # if( prt_error ) { ! 848: 824 0000F4A3 5d effffff923 tstl _prt_error ! 849: 825 0000F4A9 21 03 13 00c0 jeql L323 ! 850: 826 0000F4AE # writes(" \n"); /* start a new print line */ ! 851: 827 0000F4AE .data 1 ! 852: 828 00000e86 * L324: ! 853: 829 00000e86 * 200A00 .ascii " \12\0" ! 854: 830 00000e89 * .text ! 855: 831 0000F4AE dd 8f00000e86 pushl $L324 ! 856: 832 0000F4B4 fe 08 effffff911 callf $8,_writes ! 857: 833 0000F4BB # writes("cycle: "); ! 858: 834 0000F4BB .data 1 ! 859: 835 00000e89 * L325: ! 860: 836 00000e89 * 6379636C653A2000 .ascii "cycle: \0" ! 861: 837 00000e91 * .text ! 862: 838 0000F4BB dd 8f00000e89 pushl $L325 ! 863: 839 0000F4C1 fe 08 effffff904 callf $8,_writes ! 864: 840 0000F4C8 # writed( cycle ); ! 865: 841 0000F4C8 dd effffff8fe pushl _cycle ! 866: 842 0000F4CE fe 08 effffff8f7 callf $8,_writed ! 867: 843 0000F4D5 # writes(" MULF test "); ! 868: 844 0000F4D5 .data 1 ! 869: 845 00000e91 * L326: ! 870: 846 00000e91 * 20204D554C462074657374200 .ascii " MULF test \0" ! 871: 0 ! 872: 847 00000e9e * .text ! 873: 848 0000F4D5 dd 8f00000e91 pushl $L326 ! 874: 849 0000F4DB fe 08 effffff8ea callf $8,_writes ! 875: 850 0000F4E2 # writed( test_no ); ! 876: 851 0000F4E2 dd effffff8e4 pushl _test_no ! 877: 852 0000F4E8 fe 08 effffff8dd callf $8,_writed ! 878: 853 0000F4EF # writes(", subtest 6 - A REGISTER WAS MODIFIED\n"); ! 879: 854 0000F4EF .data 1 ! 880: 855 00000e9e * L327: ! 881: 856 00000e9e * 2C20737562746573742036202 .ascii ", subtest 6 - A REGISTER WAS MODIFIED\12\0" ! 882: D204120524547495354455220 ! 883: 574153204D4F4449464945440 ! 884: A00 ! 885: 857 00000ec5 * .text ! 886: 858 0000F4EF dd 8f00000e9e pushl $L327 ! 887: 859 0000F4F5 fe 08 effffff8d0 callf $8,_writes ! 888: 860 0000F4FC # print_mulf_data(); /* print the operands */ ! 889: 861 0000F4FC fe 04 ef0000048d callf $4,_print_mulf_data ! 890: 862 0000F503 # writes("register "); /* print the information */ ! 891: 863 0000F503 .data 1 ! 892: 864 00000ec5 * L328: ! 893: 865 00000ec5 * 72656769737465722000 .ascii "register \0" ! 894: 866 00000ecf * .text ! 895: 867 0000F503 dd 8f00000ec5 pushl $L328 ! 896: 868 0000F509 fe 08 effffff8bc callf $8,_writes ! 897: 869 0000F510 # writed( index2 ); /* about the corrupted */ ! 898: 870 0000F510 dd effffff8b6 pushl _index2 ! 899: 871 0000F516 fe 08 effffff8af callf $8,_writed ! 900: 872 0000F51D # writes(" = "); /* register */ ! 901: 873 0000F51D .data 1 ! 902: 874 00000ecf * L329: ! 903: 875 00000ecf * 203D2000 .ascii " = \0" ! 904: 876 00000ed3 * .text ! 905: 877 0000F51D dd 8f00000ecf pushl $L329 ! 906: 878 0000F523 fe 08 effffff8a2 callf $8,_writes ! 907: 879 0000F52A # write32h( store_regs[index2] ); ! 908: 880 0000F52A 0d effffff89c 50 movl _index2,r0 ! 909: 881 0000F531 dd 40effffff894 pushl _store_regs[r0] ! 910: 882 0000F538 fe 08 effffff88d callf $8,_write32h ! 911: 883 0000F53F # writes(", should be = "); ! 912: 884 0000F53F .data 1 ! 913: 885 00000ed3 * L331: ! 914: 886 00000ed3 * 2C202073686F756C642062652 .ascii ", should be = \0" ! 915: 03D2000 ! 916: 887 00000ee3 * .text ! 917: 888 0000F53F dd 8f00000ed3 pushl $L331 ! 918: 889 0000F545 fe 08 effffff880 callf $8,_writes ! 919: 890 0000F54C # write32h( load_regs[index2] ); ! 920: 891 0000F54C 0d effffff87a 50 movl _index2,r0 ! 921: 892 0000F553 dd 40effffff872 pushl _load_regs[r0] ! 922: 893 0000F55A fe 08 effffff86b callf $8,_write32h ! 923: 894 0000F561 # writes("\n"); ! 924: 895 0000F561 .data 1 ! 925: 896 00000ee3 * L332: ! 926: 897 00000ee3 * 0A00 .ascii "\12\0" ! 927: 898 00000ee5 * .text ! 928: 899 0000F561 dd 8f00000ee3 pushl $L332 ! 929: 900 0000F567 fe 08 effffff85e callf $8,_writes ! 930: 901 0000F56E # } ! 931: 902 0000F56E # if( halt_flg ) ! 932: 903 0000F56E L323: ! 933: 904 0000F56E 5d effffff858 tstl _halt_flg ! 934: 905 0000F574 31 09 jeql L333 ! 935: 906 0000F576 # mulf_er_halt( BAD_REG_HLT ); /* halt on the error */ ! 936: 907 0000F576 dd 02 pushl $2 ! 937: 908 0000F578 fe 08 ef000004af callf $8,_mulf_er_halt ! 938: 909 0000F57F # if( loop_on_err ) { ! 939: 910 0000F57F L333: ! 940: 911 0000F57F 5d effffff847 tstl _loop_on_err ! 941: 912 0000F585 31 0a jeql L334 ! 942: 913 0000F587 # force_loop = TRUE; /* set the force loop flag */ ! 943: 914 0000F587 0d 01 effffff83e movl $1,_force_loop ! 944: 915 0000F58E # asm("brw _mulf_6_lp1");; /* and loop on the error */ ! 945: 916 0000F58E 13 fe9b brw _mulf_6_lp1 ! 946: 917 0000F591 # } /* end of loop on error */ ! 947: 918 0000F591 # } /* end of register corruption error */ ! 948: 919 0000F591 L334: ! 949: 920 0000F591 # } /* end of subtest 6 */ ! 950: 921 0000F591 L322: ! 951: 922 0000F591 40 ret#2 ! 952: 923 0000F592 .set L314,0x0 ! 953: 924 0000F592 L316: ! 954: 925 0000F592 13 fe56 jbr L317 ! 955: 926 0000F595 .data ! 956: 927 00000d1c * .text ! 957: 928 0000F595 00 .align 1 ! 958: 929 0000F596 .globl _mulf_7 ! 959: 930 0000F596 _mulf_7: ! 960: 931 0000F596 0000 .word L335 ! 961: 932 0000F598 # ! 962: 933 0000F598 # ! 963: 934 0000F598 # ! 964: 935 0000F598 # /************************************************************************ ! 965: 936 0000F598 # * ! 966: 937 0000F598 # * SUBTEST 7 - Check for PSL corruption ! 967: 938 0000F598 # * ! 968: 939 0000F598 # ************************************************************************/ ! 969: 940 0000F598 # mulf_7() ! 970: 941 0000F598 # { ! 971: 942 0000F598 13 01a6 jbr L337 ! 972: 943 0000F59B L338: ! 973: 944 0000F59B # force_loop = FALSE; /* clear force_loop flg */ ! 974: 945 0000F59B 4d effffff82b clrl _force_loop ! 975: 946 0000F5A1 # subtest = 7; ! 976: 947 0000F5A1 0d 07 effffff824 movl $7,_subtest ! 977: 948 0000F5A8 # fill_reg_buf( load_regs ); /* get patterns for regs */ ! 978: 949 0000F5A8 dd 8f00000000 pushl $_load_regs ! 979: 950 0000F5AE fe 08 effffff817 callf $8,_fill_reg_buf ! 980: 951 0000F5B5 # for( index = 0; index < 3; index++ ) { ! 981: 952 0000F5B5 4d effffff811 clrl _index ! 982: 953 0000F5BB L341: ! 983: 954 0000F5BB 1d effffff80b 03 cmpl _index,$3 ! 984: 955 0000F5C2 91 03 13 0179 jgeq L340 ! 985: 956 0000F5C7 # sgl_ld_acc = mulf_1_data[index].op_1; /* get operand 1 */ ! 986: 957 0000F5C7 5c 0c effffff7fe 50 mull3 $12,_index,r0 ! 987: 958 0000F5CF 0d e000000000 effffff7f2 movl _mulf_1_data(r0),_sgl_ld_acc ! 988: 959 0000F5DA # sgl_value_1 = mulf_1_data[index].op_2; /* get operand 2 */ ! 989: 960 0000F5DA 5c 0c effffff7eb 50 mull3 $12,_index,r0 ! 990: 961 0000F5E2 0d e000000004 effffff7df movl _mulf_1_data+4(r0),_sgl_value_1 ! 991: 962 0000F5ED # sgl_expected = mulf_1_data[index].exp; /* get expected */ ! 992: 963 0000F5ED 5c 0c effffff7d8 50 mull3 $12,_index,r0 ! 993: 964 0000F5F5 0d e000000008 effffff7cc movl _mulf_1_data+8(r0),_sgl_expected ! 994: 965 0000F600 # sgl_dummy1 = status_array[status_index]; /* status = +, -, 0 */ ! 995: 966 0000F600 0d effffff7c6 50 movl _status_index,r0 ! 996: 967 0000F607 0d 40effffff7be movl _status_array[r0],_sgl_dummy1 ! 997: effffff7b9 ! 998: 968 0000F613 # /* ! 999: 969 0000F613 # * If LOOP ON ERROR is set, this is the loop for this subtest. ! 1000: 970 0000F613 # * The force loop flag is set after the first error. ! 1001: 971 0000F613 # */ ! 1002: 972 0000F613 # asm("_mulf_7_lp1:"); ! 1003: 973 0000F613 _mulf_7_lp1: ! 1004: 974 0000F613 # asm("ldf _sgl_ld_acc"); /* LOAD the accumulator */ ! 1005: 975 0000F613 06 effffff7b3 ldf _sgl_ld_acc ! 1006: 976 0000F619 # asm("nop"); ! 1007: 977 0000F619 10 nop ! 1008: 978 0000F61A # asm("tstl _sgl_dummy1"); /* set the PSL status */ ! 1009: 979 0000F61A 5d effffff7ac tstl _sgl_dummy1 ! 1010: 980 0000F620 # asm("movpsl _init_psl"); /* save the initial PSL */ ! 1011: 981 0000F620 cd effffff7a6 movpsl _init_psl ! 1012: 982 0000F626 # asm("mulf _sgl_value_1"); /* do the multiply */ ! 1013: 983 0000F626 e6 effffff7a0 mulf _sgl_value_1 ! 1014: 984 0000F62C # asm("nop"); ! 1015: 985 0000F62C 10 nop ! 1016: 986 0000F62D # asm("movpsl _psl_val"); /* save the final PSL */ ! 1017: 987 0000F62D cd effffff799 movpsl _psl_val ! 1018: 988 0000F633 # asm("stf _sgl_st_acc"); /* save the accumulator */ ! 1019: 989 0000F633 26 effffff793 stf _sgl_st_acc ! 1020: 990 0000F639 # if( force_loop ) ! 1021: 991 0000F639 5d effffff78d tstl _force_loop ! 1022: 992 0000F63F 31 02 jeql L342 ! 1023: 993 0000F641 # asm("brb _mulf_7_lp1");; /* loop on the error */ ! 1024: 994 0000F641 11 d0 brb _mulf_7_lp1 ! 1025: 995 0000F643 L342: ! 1026: 996 0000F643 # /* ! 1027: 997 0000F643 # * Now compare the final PSL to the initial PSL -they should be the same ! 1028: 998 0000F643 # */ ! 1029: 999 0000F643 # if( psl_val != init_psl ) { ! 1030: 1000 0000F643 1d effffff783 effffff77e cmpl _psl_val,_init_psl ! 1031: 1001 0000F64E 21 03 13 00e4 jeql L343 ! 1032: 1002 0000F653 # errcnt++; /* bump the error count */ ! 1033: 1003 0000F653 6d effffff773 incl _errcnt ! 1034: 1004 0000F659 # if( prt_error ) { ! 1035: 1005 0000F659 5d effffff76d tstl _prt_error ! 1036: 1006 0000F65F 21 03 13 00b0 jeql L344 ! 1037: 1007 0000F664 # writes(" \n"); /* start a new print line */ ! 1038: 1008 0000F664 .data 1 ! 1039: 1009 00000ee5 * L345: ! 1040: 1010 00000ee5 * 200A00 .ascii " \12\0" ! 1041: 1011 00000ee8 * .text ! 1042: 1012 0000F664 dd 8f00000ee5 pushl $L345 ! 1043: 1013 0000F66A fe 08 effffff75b callf $8,_writes ! 1044: 1014 0000F671 # writes("cycle: "); ! 1045: 1015 0000F671 .data 1 ! 1046: 1016 00000ee8 * L346: ! 1047: 1017 00000ee8 * 6379636C653A2000 .ascii "cycle: \0" ! 1048: 1018 00000ef0 * .text ! 1049: 1019 0000F671 dd 8f00000ee8 pushl $L346 ! 1050: 1020 0000F677 fe 08 effffff74e callf $8,_writes ! 1051: 1021 0000F67E # writed( cycle ); ! 1052: 1022 0000F67E dd effffff748 pushl _cycle ! 1053: 1023 0000F684 fe 08 effffff741 callf $8,_writed ! 1054: 1024 0000F68B # writes(" MULF test "); ! 1055: 1025 0000F68B .data 1 ! 1056: 1026 00000ef0 * L347: ! 1057: 1027 00000ef0 * 20204D554C462074657374200 .ascii " MULF test \0" ! 1058: 0 ! 1059: 1028 00000efd * .text ! 1060: 1029 0000F68B dd 8f00000ef0 pushl $L347 ! 1061: 1030 0000F691 fe 08 effffff734 callf $8,_writes ! 1062: 1031 0000F698 # writed( test_no ); ! 1063: 1032 0000F698 dd effffff72e pushl _test_no ! 1064: 1033 0000F69E fe 08 effffff727 callf $8,_writed ! 1065: 1034 0000F6A5 # writes(", subtest 7 - INCORRECT FINAL PSL\n"); ! 1066: 1035 0000F6A5 .data 1 ! 1067: 1036 00000efd * L348: ! 1068: 1037 00000efd * 2C20737562746573742037202 .ascii ", subtest 7 - INCORRECT FINAL PSL\12\0" ! 1069: D20494E434F52524543542046 ! 1070: 494E414C2050534C0A00 ! 1071: 1038 00000f20 * .text ! 1072: 1039 0000F6A5 dd 8f00000efd pushl $L348 ! 1073: 1040 0000F6AB fe 08 effffff71a callf $8,_writes ! 1074: 1041 0000F6B2 # print_mulf_data(); /* print the operands */ ! 1075: 1042 0000F6B2 fe 04 ef000002d7 callf $4,_print_mulf_data ! 1076: 1043 0000F6B9 # writes("initial PSL = "); ! 1077: 1044 0000F6B9 .data 1 ! 1078: 1045 00000f20 * L349: ! 1079: 1046 00000f20 * 696E697469616C2050534C203 .ascii "initial PSL = \0" ! 1080: D2000 ! 1081: 1047 00000f2f * .text ! 1082: 1048 0000F6B9 dd 8f00000f20 pushl $L349 ! 1083: 1049 0000F6BF fe 08 effffff706 callf $8,_writes ! 1084: 1050 0000F6C6 # write32h( init_psl ); ! 1085: 1051 0000F6C6 dd effffff700 pushl _init_psl ! 1086: 1052 0000F6CC fe 08 effffff6f9 callf $8,_write32h ! 1087: 1053 0000F6D3 # writes(", final PSL = "); ! 1088: 1054 0000F6D3 .data 1 ! 1089: 1055 00000f2f * L350: ! 1090: 1056 00000f2f * 2C2066696E616C2050534C203 .ascii ", final PSL = \0" ! 1091: D2000 ! 1092: 1057 00000f3e * .text ! 1093: 1058 0000F6D3 dd 8f00000f2f pushl $L350 ! 1094: 1059 0000F6D9 fe 08 effffff6ec callf $8,_writes ! 1095: 1060 0000F6E0 # write32h( psl_val ); ! 1096: 1061 0000F6E0 dd effffff6e6 pushl _psl_val ! 1097: 1062 0000F6E6 fe 08 effffff6df callf $8,_write32h ! 1098: 1063 0000F6ED # writes(", expected PSL = "); ! 1099: 1064 0000F6ED .data 1 ! 1100: 1065 00000f3e * L351: ! 1101: 1066 00000f3e * 2C20657870656374656420505 .ascii ", expected PSL = \0" ! 1102: 34C203D2000 ! 1103: 1067 00000f50 * .text ! 1104: 1068 0000F6ED dd 8f00000f3e pushl $L351 ! 1105: 1069 0000F6F3 fe 08 effffff6d2 callf $8,_writes ! 1106: 1070 0000F6FA # write32h( exp_psl ); ! 1107: 1071 0000F6FA dd effffff6cc pushl _exp_psl ! 1108: 1072 0000F700 fe 08 effffff6c5 callf $8,_write32h ! 1109: 1073 0000F707 # writes("\n"); ! 1110: 1074 0000F707 .data 1 ! 1111: 1075 00000f50 * L352: ! 1112: 1076 00000f50 * 0A00 .ascii "\12\0" ! 1113: 1077 00000f52 * .text ! 1114: 1078 0000F707 dd 8f00000f50 pushl $L352 ! 1115: 1079 0000F70D fe 08 effffff6b8 callf $8,_writes ! 1116: 1080 0000F714 # } ! 1117: 1081 0000F714 # if( halt_flg ) ! 1118: 1082 0000F714 L344: ! 1119: 1083 0000F714 5d effffff6b2 tstl _halt_flg ! 1120: 1084 0000F71A 31 09 jeql L353 ! 1121: 1085 0000F71C # mulf_er_halt( BAD_PSL_HLT ); /* halt on the error */ ! 1122: 1086 0000F71C dd 03 pushl $3 ! 1123: 1087 0000F71E fe 08 ef00000309 callf $8,_mulf_er_halt ! 1124: 1088 0000F725 # if( loop_on_err ) { ! 1125: 1089 0000F725 L353: ! 1126: 1090 0000F725 5d effffff6a1 tstl _loop_on_err ! 1127: 1091 0000F72B 31 0a jeql L354 ! 1128: 1092 0000F72D # force_loop = TRUE; /* set the force loop flag */ ! 1129: 1093 0000F72D 0d 01 effffff698 movl $1,_force_loop ! 1130: 1094 0000F734 # asm("brw _mulf_7_lp1");; /* and loop on the error */ ! 1131: 1095 0000F734 13 fedc brw _mulf_7_lp1 ! 1132: 1096 0000F737 # } /* end of loop on error */ ! 1133: 1097 0000F737 # } /* end of PSL corruption error */ ! 1134: 1098 0000F737 L354: ! 1135: 1099 0000F737 # } /* end of WHILE loop */ ! 1136: 1100 0000F737 L343: ! 1137: 1101 0000F737 L339: ! 1138: 1102 0000F737 6d effffff68f incl _index ! 1139: 1103 0000F73D 13 fe7b jbr L341 ! 1140: 1104 0000F740 L340: ! 1141: 1105 0000F740 # } /* end of subtest 7 */ ! 1142: 1106 0000F740 40 ret#2 ! 1143: 1107 0000F741 .set L335,0x0 ! 1144: 1108 0000F741 L337: ! 1145: 1109 0000F741 13 fe57 jbr L338 ! 1146: 1110 0000F744 .data ! 1147: 1111 00000d1c * .text ! 1148: 1112 0000F744 .align 1 ! 1149: 1113 0000F744 .globl _mulf_8 ! 1150: 1114 0000F744 _mulf_8: ! 1151: 1115 0000F744 0000 .word L355 ! 1152: 1116 0000F746 # ! 1153: 1117 0000F746 # ! 1154: 1118 0000F746 # ! 1155: 1119 0000F746 # /************************************************************************ ! 1156: 1120 0000F746 # * ! 1157: 1121 0000F746 # * SUBTEST 8 - pipelined entry test ! 1158: 1122 0000F746 # * ! 1159: 1123 0000F746 # ************************************************************************/ ! 1160: 1124 0000F746 # mulf_8() ! 1161: 1125 0000F746 # { ! 1162: 1126 0000F746 13 011d jbr L357 ! 1163: 1127 0000F749 L358: ! 1164: 1128 0000F749 # force_loop = FALSE; ! 1165: 1129 0000F749 4d effffff67d clrl _force_loop ! 1166: 1130 0000F74F # subtest = 8; ! 1167: 1131 0000F74F 0d 08 effffff676 movl $8,_subtest ! 1168: 1132 0000F756 # for( index = 0; index < max_mulf_1_index; index++ ) { ! 1169: 1133 0000F756 4d effffff670 clrl _index ! 1170: 1134 0000F75C L361: ! 1171: 1135 0000F75C 1d effffff66a effffff665 cmpl _index,_max_mulf_1_index ! 1172: 1136 0000F767 91 03 13 00f9 jgeq L360 ! 1173: 1137 0000F76C # sgl_ld_acc = mulf_1_data[index].op_1; /* get operand 1 */ ! 1174: 1138 0000F76C 5c 0c effffff659 50 mull3 $12,_index,r0 ! 1175: 1139 0000F774 0d e000000000 effffff64d movl _mulf_1_data(r0),_sgl_ld_acc ! 1176: 1140 0000F77F # sgl_value_1 = mulf_1_data[index].op_2; /* get operand 2 */ ! 1177: 1141 0000F77F 5c 0c effffff646 50 mull3 $12,_index,r0 ! 1178: 1142 0000F787 0d e000000004 effffff63a movl _mulf_1_data+4(r0),_sgl_value_1 ! 1179: 1143 0000F792 # sgl_expected = mulf_1_data[index].exp; /* get expected result */ ! 1180: 1144 0000F792 5c 0c effffff633 50 mull3 $12,_index,r0 ! 1181: 1145 0000F79A 0d e000000008 effffff627 movl _mulf_1_data+8(r0),_sgl_expected ! 1182: 1146 0000F7A5 # /* ! 1183: 1147 0000F7A5 # * If LOOP ON ERROR is set, this is the loop for this subtest. ! 1184: 1148 0000F7A5 # * The force loop flag is set after the first error. ! 1185: 1149 0000F7A5 # */ ! 1186: 1150 0000F7A5 # asm("_mulf_8_lp1:"); ! 1187: 1151 0000F7A5 _mulf_8_lp1: ! 1188: 1152 0000F7A5 # asm("movl $0,r0"); /* clear r0 */ ! 1189: 1153 0000F7A5 0d 00 50 movl $0,r0 ! 1190: 1154 0000F7A8 # asm("ldf r0"); /* load the Acc. with 0.0 */ ! 1191: 1155 0000F7A8 06 50 ldf r0 ! 1192: 1156 0000F7AA # asm("addf _sgl_ld_acc"); /* add the 1st operand */ ! 1193: 1157 0000F7AA c6 effffff61c addf _sgl_ld_acc ! 1194: 1158 0000F7B0 # asm("mulf _sgl_value_1"); /* multiply the 2nd operand */ ! 1195: 1159 0000F7B0 e6 effffff616 mulf _sgl_value_1 ! 1196: 1160 0000F7B6 # asm("stf _sgl_st_acc"); /* store the result */ ! 1197: 1161 0000F7B6 26 effffff610 stf _sgl_st_acc ! 1198: 1162 0000F7BC # if( force_loop ) ! 1199: 1163 0000F7BC 5d effffff60a tstl _force_loop ! 1200: 1164 0000F7C2 31 02 jeql L362 ! 1201: 1165 0000F7C4 # asm("brb _mulf_8_lp1");; /* loop on the error */ ! 1202: 1166 0000F7C4 11 df brb _mulf_8_lp1 ! 1203: 1167 0000F7C6 L362: ! 1204: 1168 0000F7C6 # /* ! 1205: 1169 0000F7C6 # * end error loop - test the results ! 1206: 1170 0000F7C6 # */ ! 1207: 1171 0000F7C6 # if( sgl_st_acc != sgl_expected ) { /* COMPARE the values */ ! 1208: 1172 0000F7C6 1d effffff600 effffff5fb cmpl _sgl_st_acc,_sgl_expected ! 1209: 1173 0000F7D1 21 03 13 0086 jeql L363 ! 1210: 1174 0000F7D6 # errcnt++; /* bump the error count */ ! 1211: 1175 0000F7D6 6d effffff5f0 incl _errcnt ! 1212: 1176 0000F7DC # if( prt_error ) { ! 1213: 1177 0000F7DC 5d effffff5ea tstl _prt_error ! 1214: 1178 0000F7E2 31 55 jeql L364 ! 1215: 1179 0000F7E4 # writes(" \n"); /* start a new print line */ ! 1216: 1180 0000F7E4 .data 1 ! 1217: 1181 00000f52 * L365: ! 1218: 1182 00000f52 * 200A00 .ascii " \12\0" ! 1219: 1183 00000f55 * .text ! 1220: 1184 0000F7E4 dd 8f00000f52 pushl $L365 ! 1221: 1185 0000F7EA fe 08 effffff5db callf $8,_writes ! 1222: 1186 0000F7F1 # writes("cycle: "); ! 1223: 1187 0000F7F1 .data 1 ! 1224: 1188 00000f55 * L366: ! 1225: 1189 00000f55 * 6379636C653A2000 .ascii "cycle: \0" ! 1226: 1190 00000f5d * .text ! 1227: 1191 0000F7F1 dd 8f00000f55 pushl $L366 ! 1228: 1192 0000F7F7 fe 08 effffff5ce callf $8,_writes ! 1229: 1193 0000F7FE # writed( cycle ); ! 1230: 1194 0000F7FE dd effffff5c8 pushl _cycle ! 1231: 1195 0000F804 fe 08 effffff5c1 callf $8,_writed ! 1232: 1196 0000F80B # writes(" MULF test "); ! 1233: 1197 0000F80B .data 1 ! 1234: 1198 00000f5d * L367: ! 1235: 1199 00000f5d * 20204D554C462074657374200 .ascii " MULF test \0" ! 1236: 0 ! 1237: 1200 00000f6a * .text ! 1238: 1201 0000F80B dd 8f00000f5d pushl $L367 ! 1239: 1202 0000F811 fe 08 effffff5b4 callf $8,_writes ! 1240: 1203 0000F818 # writed( test_no ); ! 1241: 1204 0000F818 dd effffff5ae pushl _test_no ! 1242: 1205 0000F81E fe 08 effffff5a7 callf $8,_writed ! 1243: 1206 0000F825 # writes(", subtest 8 (Piped Entry) - BAD FINAL ACC\n"); ! 1244: 1207 0000F825 .data 1 ! 1245: 1208 00000f6a * L368: ! 1246: 1209 00000f6a * 2C20737562746573742038202 .ascii ", subtest 8 (Piped Entry) - BAD FINAL ACC\12\0" ! 1247: 8506970656420456E74727929 ! 1248: 202D204241442046494E414C2 ! 1249: 04143430A00 ! 1250: 1210 00000f95 * .text ! 1251: 1211 0000F825 dd 8f00000f6a pushl $L368 ! 1252: 1212 0000F82B fe 08 effffff59a callf $8,_writes ! 1253: 1213 0000F832 # print_mulf_data(); ! 1254: 1214 0000F832 fe 04 ef00000157 callf $4,_print_mulf_data ! 1255: 1215 0000F839 # } ! 1256: 1216 0000F839 # if( halt_flg ) ! 1257: 1217 0000F839 L364: ! 1258: 1218 0000F839 5d effffff58d tstl _halt_flg ! 1259: 1219 0000F83F 31 09 jeql L369 ! 1260: 1220 0000F841 # mulf_er_halt( BAD_ACC_HLT ); /* halt on the error */ ! 1261: 1221 0000F841 dd 01 pushl $1 ! 1262: 1222 0000F843 fe 08 ef000001e4 callf $8,_mulf_er_halt ! 1263: 1223 0000F84A # if( loop_on_err ) { ! 1264: 1224 0000F84A L369: ! 1265: 1225 0000F84A 5d effffff57c tstl _loop_on_err ! 1266: 1226 0000F850 31 0a jeql L370 ! 1267: 1227 0000F852 # force_loop = TRUE; /* set the force loop flag */ ! 1268: 1228 0000F852 0d 01 effffff573 movl $1,_force_loop ! 1269: 1229 0000F859 # asm("brw _mulf_8_lp1");; /* and loop on the error */ ! 1270: 1230 0000F859 13 ff49 brw _mulf_8_lp1 ! 1271: 1231 0000F85C # } /* end of loop on error */ ! 1272: 1232 0000F85C # } /* end of compare error */ ! 1273: 1233 0000F85C L370: ! 1274: 1234 0000F85C # } /* end of WHILE loop */ ! 1275: 1235 0000F85C L363: ! 1276: 1236 0000F85C L359: ! 1277: 1237 0000F85C 6d effffff56a incl _index ! 1278: 1238 0000F862 13 fef7 jbr L361 ! 1279: 1239 0000F865 L360: ! 1280: 1240 0000F865 # } /* end of subtest 8 */ ! 1281: 1241 0000F865 40 ret#2 ! 1282: 1242 0000F866 .set L355,0x0 ! 1283: 1243 0000F866 L357: ! 1284: 1244 0000F866 13 fee0 jbr L358 ! 1285: 1245 0000F869 .data ! 1286: 1246 00000d1c * .text ! 1287: 1247 0000F869 00 .align 1 ! 1288: 1248 0000F86A .globl _mulf_9 ! 1289: 1249 0000F86A _mulf_9: ! 1290: 1250 0000F86A 0000 .word L371 ! 1291: 1251 0000F86C # ! 1292: 1252 0000F86C # ! 1293: 1253 0000F86C # ! 1294: 1254 0000F86C # /************************************************************************ ! 1295: 1255 0000F86C # * ! 1296: 1256 0000F86C # * SUBTEST 9 - pipelined exit test ! 1297: 1257 0000F86C # * ! 1298: 1258 0000F86C # ************************************************************************/ ! 1299: 1259 0000F86C # mulf_9() ! 1300: 1260 0000F86C # { ! 1301: 1261 0000F86C 13 011d jbr L373 ! 1302: 1262 0000F86F L374: ! 1303: 1263 0000F86F # force_loop = FALSE; ! 1304: 1264 0000F86F 4d effffff557 clrl _force_loop ! 1305: 1265 0000F875 # subtest = 9; ! 1306: 1266 0000F875 0d 09 effffff550 movl $9,_subtest ! 1307: 1267 0000F87C # for( index = 0; index < max_mulf_1_index; index++ ) { ! 1308: 1268 0000F87C 4d effffff54a clrl _index ! 1309: 1269 0000F882 L377: ! 1310: 1270 0000F882 1d effffff544 effffff53f cmpl _index,_max_mulf_1_index ! 1311: 1271 0000F88D 91 03 13 00f9 jgeq L376 ! 1312: 1272 0000F892 # sgl_ld_acc = mulf_1_data[index].op_1; /* get operand 1 */ ! 1313: 1273 0000F892 5c 0c effffff533 50 mull3 $12,_index,r0 ! 1314: 1274 0000F89A 0d e000000000 effffff527 movl _mulf_1_data(r0),_sgl_ld_acc ! 1315: 1275 0000F8A5 # sgl_value_1 = mulf_1_data[index].op_2; /* get operand 2 */ ! 1316: 1276 0000F8A5 5c 0c effffff520 50 mull3 $12,_index,r0 ! 1317: 1277 0000F8AD 0d e000000004 effffff514 movl _mulf_1_data+4(r0),_sgl_value_1 ! 1318: 1278 0000F8B8 # sgl_expected = mulf_1_data[index].exp; /* get expected result */ ! 1319: 1279 0000F8B8 5c 0c effffff50d 50 mull3 $12,_index,r0 ! 1320: 1280 0000F8C0 0d e000000008 effffff501 movl _mulf_1_data+8(r0),_sgl_expected ! 1321: 1281 0000F8CB # /* ! 1322: 1282 0000F8CB # * If LOOP ON ERROR is set, this is the loop for this subtest. ! 1323: 1283 0000F8CB # * The force loop flag is set after the first error. ! 1324: 1284 0000F8CB # */ ! 1325: 1285 0000F8CB # asm("_mulf_9_lp1:"); ! 1326: 1286 0000F8CB _mulf_9_lp1: ! 1327: 1287 0000F8CB # asm("movl $0,r0"); /* clear r0 */ ! 1328: 1288 0000F8CB 0d 00 50 movl $0,r0 ! 1329: 1289 0000F8CE # asm("ldf _sgl_ld_acc"); /* load the 1st operand */ ! 1330: 1290 0000F8CE 06 effffff4f8 ldf _sgl_ld_acc ! 1331: 1291 0000F8D4 # asm("mulf _sgl_value_1"); /* multiply the 2nd operand */ ! 1332: 1292 0000F8D4 e6 effffff4f2 mulf _sgl_value_1 ! 1333: 1293 0000F8DA # asm("addf r0"); /* add a 0.0 to the result */ ! 1334: 1294 0000F8DA c6 50 addf r0 ! 1335: 1295 0000F8DC # asm("stf _sgl_st_acc"); /* store the result */ ! 1336: 1296 0000F8DC 26 effffff4ea stf _sgl_st_acc ! 1337: 1297 0000F8E2 # if( force_loop ) ! 1338: 1298 0000F8E2 5d effffff4e4 tstl _force_loop ! 1339: 1299 0000F8E8 31 02 jeql L378 ! 1340: 1300 0000F8EA # asm("brb _mulf_9_lp1");; /* loop on the error */ ! 1341: 1301 0000F8EA 11 df brb _mulf_9_lp1 ! 1342: 1302 0000F8EC L378: ! 1343: 1303 0000F8EC # /* ! 1344: 1304 0000F8EC # * end error loop - test the results ! 1345: 1305 0000F8EC # */ ! 1346: 1306 0000F8EC # if( sgl_st_acc != sgl_expected ) { /* COMPARE the values */ ! 1347: 1307 0000F8EC 1d effffff4da effffff4d5 cmpl _sgl_st_acc,_sgl_expected ! 1348: 1308 0000F8F7 21 03 13 0086 jeql L379 ! 1349: 1309 0000F8FC # errcnt++; /* bump the error count */ ! 1350: 1310 0000F8FC 6d effffff4ca incl _errcnt ! 1351: 1311 0000F902 # if( prt_error ) { ! 1352: 1312 0000F902 5d effffff4c4 tstl _prt_error ! 1353: 1313 0000F908 31 55 jeql L380 ! 1354: 1314 0000F90A # writes(" \n"); /* start a new print line */ ! 1355: 1315 0000F90A .data 1 ! 1356: 1316 00000f95 * L381: ! 1357: 1317 00000f95 * 200A00 .ascii " \12\0" ! 1358: 1318 00000f98 * .text ! 1359: 1319 0000F90A dd 8f00000f95 pushl $L381 ! 1360: 1320 0000F910 fe 08 effffff4b5 callf $8,_writes ! 1361: 1321 0000F917 # writes("cycle: "); ! 1362: 1322 0000F917 .data 1 ! 1363: 1323 00000f98 * L382: ! 1364: 1324 00000f98 * 6379636C653A2000 .ascii "cycle: \0" ! 1365: 1325 00000fa0 * .text ! 1366: 1326 0000F917 dd 8f00000f98 pushl $L382 ! 1367: 1327 0000F91D fe 08 effffff4a8 callf $8,_writes ! 1368: 1328 0000F924 # writed( cycle ); ! 1369: 1329 0000F924 dd effffff4a2 pushl _cycle ! 1370: 1330 0000F92A fe 08 effffff49b callf $8,_writed ! 1371: 1331 0000F931 # writes(" MULF test "); ! 1372: 1332 0000F931 .data 1 ! 1373: 1333 00000fa0 * L383: ! 1374: 1334 00000fa0 * 20204D554C462074657374200 .ascii " MULF test \0" ! 1375: 0 ! 1376: 1335 00000fad * .text ! 1377: 1336 0000F931 dd 8f00000fa0 pushl $L383 ! 1378: 1337 0000F937 fe 08 effffff48e callf $8,_writes ! 1379: 1338 0000F93E # writed( test_no ); ! 1380: 1339 0000F93E dd effffff488 pushl _test_no ! 1381: 1340 0000F944 fe 08 effffff481 callf $8,_writed ! 1382: 1341 0000F94B # writes(", subtest 9 (Piped Exit) - BAD FINAL ACC\n"); ! 1383: 1342 0000F94B .data 1 ! 1384: 1343 00000fad * L384: ! 1385: 1344 00000fad * 2C20737562746573742039202 .ascii ", subtest 9 (Piped Exit) - BAD FINAL ACC\12\0" ! 1386: 8506970656420457869742920 ! 1387: 2D204241442046494E414C204 ! 1388: 143430A00 ! 1389: 1345 00000fd7 * .text ! 1390: 1346 0000F94B dd 8f00000fad pushl $L384 ! 1391: 1347 0000F951 fe 08 effffff474 callf $8,_writes ! 1392: 1348 0000F958 # print_mulf_data(); ! 1393: 1349 0000F958 fe 04 ef00000031 callf $4,_print_mulf_data ! 1394: 1350 0000F95F # } ! 1395: 1351 0000F95F # if( halt_flg ) ! 1396: 1352 0000F95F L380: ! 1397: 1353 0000F95F 5d effffff467 tstl _halt_flg ! 1398: 1354 0000F965 31 09 jeql L385 ! 1399: 1355 0000F967 # mulf_er_halt( BAD_ACC_HLT ); /* halt on the error */ ! 1400: 1356 0000F967 dd 01 pushl $1 ! 1401: 1357 0000F969 fe 08 ef000000be callf $8,_mulf_er_halt ! 1402: 1358 0000F970 # if( loop_on_err ) { ! 1403: 1359 0000F970 L385: ! 1404: 1360 0000F970 5d effffff456 tstl _loop_on_err ! 1405: 1361 0000F976 31 0a jeql L386 ! 1406: 1362 0000F978 # force_loop = TRUE; /* set the force loop flag */ ! 1407: 1363 0000F978 0d 01 effffff44d movl $1,_force_loop ! 1408: 1364 0000F97F # asm("brw _mulf_9_lp1");; /* and loop on the error */ ! 1409: 1365 0000F97F 13 ff49 brw _mulf_9_lp1 ! 1410: 1366 0000F982 # } /* end of loop on error */ ! 1411: 1367 0000F982 # } /* end of compare error */ ! 1412: 1368 0000F982 L386: ! 1413: 1369 0000F982 # } /* end of WHILE loop */ ! 1414: 1370 0000F982 L379: ! 1415: 1371 0000F982 L375: ! 1416: 1372 0000F982 6d effffff444 incl _index ! 1417: 1373 0000F988 13 fef7 jbr L377 ! 1418: 1374 0000F98B L376: ! 1419: 1375 0000F98B # } /* end of subtest 9 */ ! 1420: 1376 0000F98B 40 ret#2 ! 1421: 1377 0000F98C .set L371,0x0 ! 1422: 1378 0000F98C L373: ! 1423: 1379 0000F98C 13 fee0 jbr L374 ! 1424: 1380 0000F98F .data ! 1425: 1381 00000d1c * .text ! 1426: 1382 0000F98F 00 .align 1 ! 1427: 1383 0000F990 .globl _print_mulf_data ! 1428: 1384 0000F990 _print_mulf_data: ! 1429: 1385 0000F990 0000 .word L387 ! 1430: 1386 0000F992 # ! 1431: 1387 0000F992 # ! 1432: 1388 0000F992 # ! 1433: 1389 0000F992 # /************************************************************************** ! 1434: 1390 0000F992 # * ! 1435: 1391 0000F992 # * PRINT THE DATA AND STORE RESULTS ! 1436: 1392 0000F992 # * ! 1437: 1393 0000F992 # * initial Acc = xxxxxxxx, stored = xxxxxxxx, data index = xx ! 1438: 1394 0000F992 # * operand = xxxxxxxx, expected = xxxxxxxx ! 1439: 1395 0000F992 # **************************************************************************/ ! 1440: 1396 0000F992 # print_mulf_data() ! 1441: 1397 0000F992 # { ! 1442: 1398 0000F992 13 0095 jbr L389 ! 1443: 1399 0000F995 L390: ! 1444: 1400 0000F995 # writes("initial Acc = "); ! 1445: 1401 0000F995 .data 1 ! 1446: 1402 00000fd7 * L391: ! 1447: 1403 00000fd7 * 696E697469616C20416363203 .ascii "initial Acc = \0" ! 1448: D2000 ! 1449: 1404 00000fe6 * .text ! 1450: 1405 0000F995 dd 8f00000fd7 pushl $L391 ! 1451: 1406 0000F99B fe 08 effffff42a callf $8,_writes ! 1452: 1407 0000F9A2 # write32h( sgl_ld_acc ); ! 1453: 1408 0000F9A2 dd effffff424 pushl _sgl_ld_acc ! 1454: 1409 0000F9A8 fe 08 effffff41d callf $8,_write32h ! 1455: 1410 0000F9AF # writes(", stored = "); ! 1456: 1411 0000F9AF .data 1 ! 1457: 1412 00000fe6 * L392: ! 1458: 1413 00000fe6 * 2C2020202073746F726564203 .ascii ", stored = \0" ! 1459: D2000 ! 1460: 1414 00000ff5 * .text ! 1461: 1415 0000F9AF dd 8f00000fe6 pushl $L392 ! 1462: 1416 0000F9B5 fe 08 effffff410 callf $8,_writes ! 1463: 1417 0000F9BC # write32h( sgl_st_acc ); ! 1464: 1418 0000F9BC dd effffff40a pushl _sgl_st_acc ! 1465: 1419 0000F9C2 fe 08 effffff403 callf $8,_write32h ! 1466: 1420 0000F9C9 # writes(", data index = "); ! 1467: 1421 0000F9C9 .data 1 ! 1468: 1422 00000ff5 * L393: ! 1469: 1423 00000ff5 * 2C20206461746120696E64657 .ascii ", data index = \0" ! 1470: 8203D2000 ! 1471: 1424 00001006 * .text ! 1472: 1425 0000F9C9 dd 8f00000ff5 pushl $L393 ! 1473: 1426 0000F9CF fe 08 effffff3f6 callf $8,_writes ! 1474: 1427 0000F9D6 # writed( index ); ! 1475: 1428 0000F9D6 dd effffff3f0 pushl _index ! 1476: 1429 0000F9DC fe 08 effffff3e9 callf $8,_writed ! 1477: 1430 0000F9E3 # writec('\n'); ! 1478: 1431 0000F9E3 dd 0a pushl $10 ! 1479: 1432 0000F9E5 fe 08 effffff3e0 callf $8,_writec ! 1480: 1433 0000F9EC # writes(" operand = "); ! 1481: 1434 0000F9EC .data 1 ! 1482: 1435 00001006 * L395: ! 1483: 1436 00001006 * 202020206F706572616E64203 .ascii " operand = \0" ! 1484: D2000 ! 1485: 1437 00001015 * .text ! 1486: 1438 0000F9EC dd 8f00001006 pushl $L395 ! 1487: 1439 0000F9F2 fe 08 effffff3d3 callf $8,_writes ! 1488: 1440 0000F9F9 # write32h( sgl_value_1 ); ! 1489: 1441 0000F9F9 dd effffff3cd pushl _sgl_value_1 ! 1490: 1442 0000F9FF fe 08 effffff3c6 callf $8,_write32h ! 1491: 1443 0000FA06 # writes(", expected = "); ! 1492: 1444 0000FA06 .data 1 ! 1493: 1445 00001015 * L396: ! 1494: 1446 00001015 * 2C20206578706563746564203 .ascii ", expected = \0" ! 1495: D2000 ! 1496: 1447 00001024 * .text ! 1497: 1448 0000FA06 dd 8f00001015 pushl $L396 ! 1498: 1449 0000FA0C fe 08 effffff3b9 callf $8,_writes ! 1499: 1450 0000FA13 # write32h( sgl_expected ); ! 1500: 1451 0000FA13 dd effffff3b3 pushl _sgl_expected ! 1501: 1452 0000FA19 fe 08 effffff3ac callf $8,_write32h ! 1502: 1453 0000FA20 # writec('\n'); ! 1503: 1454 0000FA20 dd 0a pushl $10 ! 1504: 1455 0000FA22 fe 08 effffff3a3 callf $8,_writec ! 1505: 1456 0000FA29 # } ! 1506: 1457 0000FA29 40 ret#2 ! 1507: 1458 0000FA2A .set L387,0x0 ! 1508: 1459 0000FA2A L389: ! 1509: 1460 0000FA2A 13 ff68 jbr L390 ! 1510: 1461 0000FA2D .data ! 1511: 1462 00000d1c * .text ! 1512: 1463 0000FA2D 00 .align 1 ! 1513: 1464 0000FA2E .globl _mulf_er_halt ! 1514: 1465 0000FA2E _mulf_er_halt: ! 1515: 1466 0000FA2E 0000 .word L397 ! 1516: 1467 0000FA30 # ! 1517: 1468 0000FA30 # ! 1518: 1469 0000FA30 # ! 1519: 1470 0000FA30 # /************************************************************************** ! 1520: 1471 0000FA30 # * ! 1521: 1472 0000FA30 # * HALT ON ERROR ROUTINE ! 1522: 1473 0000FA30 # * ! 1523: 1474 0000FA30 # **************************************************************************/ ! 1524: 1475 0000FA30 # mulf_er_halt( halt_code ) ! 1525: 1476 0000FA30 # int halt_code; ! 1526: 1477 0000FA30 # { ! 1527: 1478 0000FA30 13 00af jbr L399 ! 1528: 1479 0000FA33 L400: ! 1529: 1480 0000FA33 # sgl_dummy1 = halt_code; /* get the error type */ ! 1530: 1481 0000FA33 0d ad04 effffff391 movl 4(fp),_sgl_dummy1 ! 1531: 1482 0000FA3B # asm("movl _test_no,r0"); /* r0 = test number */ ! 1532: 1483 0000FA3B 0d effffff38b 50 movl _test_no,r0 ! 1533: 1484 0000FA42 # asm("movl _subtest,r1"); /* r1 = subtest number */ ! 1534: 1485 0000FA42 0d effffff384 51 movl _subtest,r1 ! 1535: 1486 0000FA49 # asm("movl _sgl_dummy1,r2"); /* r2 = error code */ ! 1536: 1487 0000FA49 0d effffff37d 52 movl _sgl_dummy1,r2 ! 1537: 1488 0000FA50 # asm("movl _cycle,r3"); /* r3 = cycle count */ ! 1538: 1489 0000FA50 0d effffff376 53 movl _cycle,r3 ! 1539: 1490 0000FA57 # asm("movl _sgl_ld_acc,r4"); /* r4 = initial data */ ! 1540: 1491 0000FA57 0d effffff36f 54 movl _sgl_ld_acc,r4 ! 1541: 1492 0000FA5E # asm("movl _sgl_value_1,r5"); /* r5 = data multiplied */ ! 1542: 1493 0000FA5E 0d effffff368 55 movl _sgl_value_1,r5 ! 1543: 1494 0000FA65 # asm("movl _sgl_st_acc,r6"); /* r6 = data stored */ ! 1544: 1495 0000FA65 0d effffff361 56 movl _sgl_st_acc,r6 ! 1545: 1496 0000FA6C # if( halt_code == BAD_ACC_HLT ) { ! 1546: 1497 0000FA6C 1d ad04 01 cmpl 4(fp),$1 ! 1547: 1498 0000FA70 21 10 jneq L401 ! 1548: 1499 0000FA72 # asm("movl _sgl_expected,r7"); /* r7 = data expected */ ! 1549: 1500 0000FA72 0d effffff354 57 movl _sgl_expected,r7 ! 1550: 1501 0000FA79 # asm("movl _index,r8"); /* r8 = data index */ ! 1551: 1502 0000FA79 0d effffff34d 58 movl _index,r8 ! 1552: 1503 0000FA80 # } else ! 1553: 1504 0000FA80 11 5e jbr L402 ! 1554: 1505 0000FA82 L401: ! 1555: 1506 0000FA82 # if( halt_code == BAD_REG_HLT ) { ! 1556: 1507 0000FA82 1d ad04 02 cmpl 4(fp),$2 ! 1557: 1508 0000FA86 21 3d jneq L403 ! 1558: 1509 0000FA88 # sgl_dummy1 = load_regs[index2]; ! 1559: 1510 0000FA88 0d effffff33e 50 movl _index2,r0 ! 1560: 1511 0000FA8F 0d 40effffff336 movl _load_regs[r0],_sgl_dummy1 ! 1561: effffff331 ! 1562: 1512 0000FA9B # sgl_dummy2 = store_regs[index2]; ! 1563: 1513 0000FA9B 0d effffff32b 50 movl _index2,r0 ! 1564: 1514 0000FAA2 0d 40effffff323 movl _store_regs[r0],_sgl_dummy2 ! 1565: effffff31e ! 1566: 1515 0000FAAE # asm("movl _index2,r7"); /* r7 = bad register # */ ! 1567: 1516 0000FAAE 0d effffff318 57 movl _index2,r7 ! 1568: 1517 0000FAB5 # asm("movl _sgl_dummy2,r8"); /* r8 = actual value */ ! 1569: 1518 0000FAB5 0d effffff311 58 movl _sgl_dummy2,r8 ! 1570: 1519 0000FABC # asm("movl _sgl_dummy1,r9"); /* r9 = expected value */ ! 1571: 1520 0000FABC 0d effffff30a 59 movl _sgl_dummy1,r9 ! 1572: 1521 0000FAC3 # } else ! 1573: 1522 0000FAC3 11 1b jbr L404 ! 1574: 1523 0000FAC5 L403: ! 1575: 1524 0000FAC5 # if( halt_code == BAD_PSL_HLT ) { ! 1576: 1525 0000FAC5 1d ad04 03 cmpl 4(fp),$3 ! 1577: 1526 0000FAC9 21 15 jneq L405 ! 1578: 1527 0000FACB # asm("movl _init_psl,r7"); /* r7 = initial PSL */ ! 1579: 1528 0000FACB 0d effffff2fb 57 movl _init_psl,r7 ! 1580: 1529 0000FAD2 # asm("movl _psl_val,r8"); /* r8 = final PSL */ ! 1581: 1530 0000FAD2 0d effffff2f4 58 movl _psl_val,r8 ! 1582: 1531 0000FAD9 # asm("movl _exp_psl,r9"); /* r9 = expected PSL */ ! 1583: 1532 0000FAD9 0d effffff2ed 59 movl _exp_psl,r9 ! 1584: 1533 0000FAE0 # }; ! 1585: 1534 0000FAE0 L405: ! 1586: 1535 0000FAE0 L404: ! 1587: 1536 0000FAE0 L402: ! 1588: 1537 0000FAE0 # asm("halt"); /* HALT ... */ ! 1589: 1538 0000FAE0 00 halt ! 1590: 1539 0000FAE1 # } ! 1591: 1540 0000FAE1 40 ret#2 ! 1592: 1541 0000FAE2 .set L397,0x0 ! 1593: 1542 0000FAE2 L399: ! 1594: 1543 0000FAE2 13 ff4e jbr L400 ! 1595: 1544 0000FAE5 .data ! 1596: 1544 0001E8B1 .data
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.