|
|
1.1 ! root 1: 1 00000000 LL0: ! 2: 2 00000000 .data ! 3: 3 00000d28 * .text ! 4: 4 00000000 .align 1 ! 5: 5 00000000 .globl _divf ! 6: 6 00000000 _divf: ! 7: 7 0000FAE8 0000 .word L215 ! 8: 8 0000FAEA # #include "fpp_defs.h" ! 9: 9 0000FAEA # ! 10: 10 0000FAEA # ! 11: 11 0000FAEA # /***************************************************************************** ! 12: 12 0000FAEA # * ! 13: 13 0000FAEA # * DIVF - SINGLE PRECISION FLOATING POINT ADD TEST ! 14: 14 0000FAEA # * ! 15: 15 0000FAEA # *****************************************************************************/ ! 16: 16 0000FAEA # divf() ! 17: 17 0000FAEA # { ! 18: 18 0000FAEA 11 64 jbr L217 ! 19: 19 0000FAEC L218: ! 20: 20 0000FAEC # asm(".globl _divf_t"); ! 21: 21 0000FAEC .globl _divf_t ! 22: 22 0000FAEC # asm("_divf_t:"); /* entry address */ ! 23: 23 0000FAEC _divf_t: ! 24: 24 0000FAEC # if( ( cycle == 1 ) && ( prt_hdrs ) ) /* print headers on 1st pass */ ! 25: 25 0000FAEC 1d effffffff6 01 cmpl _cycle,$1 ! 26: 26 0000FAF3 21 15 jneq L219 ! 27: 27 0000FAF5 5d efffffffed tstl _prt_hdrs ! 28: 28 0000FAFB 31 0d jeql L219 ! 29: 29 0000FAFD # writes(" DIVF"); ! 30: 30 0000FAFD .data 1 ! 31: 31 00000d28 * L221: ! 32: 32 00000d28 * 204449564600 .ascii " DIVF\0" ! 33: 33 00000d2e * .text ! 34: 34 0000FAFD dd 8f00000d28 pushl $L221 ! 35: 35 0000FB03 fe 08 efffffffde callf $8,_writes ! 36: 36 0000FB0A # divf_1(); /* div through a register */ ! 37: 37 0000FB0A L219: ! 38: 38 0000FB0A fe 04 ef00000041 callf $4,_divf_1 ! 39: 39 0000FB11 # divf_2(); /* div through the cache */ ! 40: 40 0000FB11 fe 04 ef00000160 callf $4,_divf_2 ! 41: 41 0000FB18 # divf_3(); /* wait 3 NOPs */ ! 42: 42 0000FB18 fe 04 ef00000279 callf $4,_divf_3 ! 43: 43 0000FB1F # divf_4(); /* wait 2 NOPs */ ! 44: 44 0000FB1F fe 04 ef00000396 callf $4,_divf_4 ! 45: 45 0000FB26 # divf_5(); /* wait 1 NOP before storing */ ! 46: 46 0000FB26 fe 04 ef000004b3 callf $4,_divf_5 ! 47: 47 0000FB2D # divf_6(); /* register stability test */ ! 48: 48 0000FB2D fe 04 ef000005ce callf $4,_divf_6 ! 49: 49 0000FB34 # divf_7(); /* PSL stability test */ ! 50: 50 0000FB34 fe 04 ef00000777 callf $4,_divf_7 ! 51: 51 0000FB3B # divf_8(); /* pipelined entry test */ ! 52: 52 0000FB3B fe 04 ef0000092a callf $4,_divf_8 ! 53: 53 0000FB42 # divf_9(); /* pipelined exit test */ ! 54: 54 0000FB42 fe 04 ef00000a49 callf $4,_divf_9 ! 55: 55 0000FB49 # asm("jmp *return"); /* return to the test monitor */ ! 56: 56 0000FB49 71 ffffffff99 jmp *return ! 57: 57 0000FB4F # } ! 58: 58 0000FB4F 40 ret#2 ! 59: 59 0000FB50 .set L215,0x0 ! 60: 60 0000FB50 L217: ! 61: 61 0000FB50 11 9a jbr L218 ! 62: 62 0000FB52 .data ! 63: 63 00000d28 * .text ! 64: 64 0000FB52 .align 1 ! 65: 65 0000FB52 .globl _divf_1 ! 66: 66 0000FB52 _divf_1: ! 67: 67 0000FB52 0000 .word L231 ! 68: 68 0000FB54 # ! 69: 69 0000FB54 # ! 70: 70 0000FB54 # ! 71: 71 0000FB54 # /************************************************************************ ! 72: 72 0000FB54 # * ! 73: 73 0000FB54 # * SUBTEST 1 - divide through a register ! 74: 74 0000FB54 # * ! 75: 75 0000FB54 # ************************************************************************/ ! 76: 76 0000FB54 # divf_1() ! 77: 77 0000FB54 # { ! 78: 78 0000FB54 13 011e jbr L233 ! 79: 79 0000FB57 L234: ! 80: 80 0000FB57 # force_loop = FALSE; ! 81: 81 0000FB57 4d efffffff8b clrl _force_loop ! 82: 82 0000FB5D # subtest = 1; ! 83: 83 0000FB5D 0d 01 efffffff84 movl $1,_subtest ! 84: 84 0000FB64 # for( index = 0; index < max_divf_1_index; index++ ) { ! 85: 85 0000FB64 4d efffffff7e clrl _index ! 86: 86 0000FB6A L237: ! 87: 87 0000FB6A 1d efffffff78 efffffff73 cmpl _index,_max_divf_1_index ! 88: 88 0000FB75 91 03 13 00fa jgeq L236 ! 89: 89 0000FB7A # sgl_ld_acc = divf_1_data[index].op_1; /* get operand 1 */ ! 90: 90 0000FB7A 5c 0c efffffff67 50 mull3 $12,_index,r0 ! 91: 91 0000FB82 0d e000000000 efffffff5b movl _divf_1_data(r0),_sgl_ld_acc ! 92: 92 0000FB8D # sgl_value_1 = divf_1_data[index].op_2; /* get operand 2 */ ! 93: 93 0000FB8D 5c 0c efffffff54 50 mull3 $12,_index,r0 ! 94: 94 0000FB95 0d e000000004 efffffff48 movl _divf_1_data+4(r0),_sgl_value_1 ! 95: 95 0000FBA0 # sgl_expected = divf_1_data[index].exp; /* get expected result */ ! 96: 96 0000FBA0 5c 0c efffffff41 50 mull3 $12,_index,r0 ! 97: 97 0000FBA8 0d e000000008 efffffff35 movl _divf_1_data+8(r0),_sgl_expected ! 98: 98 0000FBB3 # /* ! 99: 99 0000FBB3 # * If LOOP ON ERROR is set, this is the loop for this subtest. ! 100: 100 0000FBB3 # * The force loop flag is set after the first error. ! 101: 101 0000FBB3 # */ ! 102: 102 0000FBB3 # asm("_divf_1_lp1:"); ! 103: 103 0000FBB3 _divf_1_lp1: ! 104: 104 0000FBB3 # asm("movl _sgl_ld_acc,r3"); /* move the 1st data to r3 */ ! 105: 105 0000FBB3 0d efffffff2f 53 movl _sgl_ld_acc,r3 ! 106: 106 0000FBBA # asm("movl _sgl_value_1,r4"); /* move the 2nd data to r4 */ ! 107: 107 0000FBBA 0d efffffff28 54 movl _sgl_value_1,r4 ! 108: 108 0000FBC1 # asm("ldf r3"); /* load the 1st operand */ ! 109: 109 0000FBC1 06 53 ldf r3 ! 110: 110 0000FBC3 # asm("divf r4"); /* divide the 2nd operand */ ! 111: 111 0000FBC3 f6 54 divf r4 ! 112: 112 0000FBC5 # asm("stf _sgl_st_acc"); /* store the result */ ! 113: 113 0000FBC5 26 efffffff1d stf _sgl_st_acc ! 114: 114 0000FBCB # if( force_loop ) ! 115: 115 0000FBCB 5d efffffff17 tstl _force_loop ! 116: 116 0000FBD1 31 02 jeql L238 ! 117: 117 0000FBD3 # asm("brb _divf_1_lp1");; /* loop on the error */ ! 118: 118 0000FBD3 11 de brb _divf_1_lp1 ! 119: 119 0000FBD5 L238: ! 120: 120 0000FBD5 # /* ! 121: 121 0000FBD5 # * end error loop - test the results ! 122: 122 0000FBD5 # */ ! 123: 123 0000FBD5 # if( sgl_st_acc != sgl_expected ) { /* COMPARE the values */ ! 124: 124 0000FBD5 1d efffffff0d efffffff08 cmpl _sgl_st_acc,_sgl_expected ! 125: 125 0000FBE0 21 03 13 0086 jeql L239 ! 126: 126 0000FBE5 # errcnt++; /* bump the error count */ ! 127: 127 0000FBE5 6d effffffefd incl _errcnt ! 128: 128 0000FBEB # if( prt_error ) { ! 129: 129 0000FBEB 5d effffffef7 tstl _prt_error ! 130: 130 0000FBF1 31 55 jeql L240 ! 131: 131 0000FBF3 # writes(" \n"); /* start a new print line */ ! 132: 132 0000FBF3 .data 1 ! 133: 133 00000d2e * L241: ! 134: 134 00000d2e * 200A00 .ascii " \12\0" ! 135: 135 00000d31 * .text ! 136: 136 0000FBF3 dd 8f00000d2e pushl $L241 ! 137: 137 0000FBF9 fe 08 effffffee8 callf $8,_writes ! 138: 138 0000FC00 # writes("cycle: "); ! 139: 139 0000FC00 .data 1 ! 140: 140 00000d31 * L242: ! 141: 141 00000d31 * 6379636C653A2000 .ascii "cycle: \0" ! 142: 142 00000d39 * .text ! 143: 143 0000FC00 dd 8f00000d31 pushl $L242 ! 144: 144 0000FC06 fe 08 effffffedb callf $8,_writes ! 145: 145 0000FC0D # writed( cycle ); ! 146: 146 0000FC0D dd effffffed5 pushl _cycle ! 147: 147 0000FC13 fe 08 effffffece callf $8,_writed ! 148: 148 0000FC1A # writes(" DIVF test "); ! 149: 149 0000FC1A .data 1 ! 150: 150 00000d39 * L244: ! 151: 151 00000d39 * 2020444956462074657374200 .ascii " DIVF test \0" ! 152: 0 ! 153: 152 00000d46 * .text ! 154: 153 0000FC1A dd 8f00000d39 pushl $L244 ! 155: 154 0000FC20 fe 08 effffffec1 callf $8,_writes ! 156: 155 0000FC27 # writed( test_no ); ! 157: 156 0000FC27 dd effffffebb pushl _test_no ! 158: 157 0000FC2D fe 08 effffffeb4 callf $8,_writed ! 159: 158 0000FC34 # writes(", subtest 1 (Reg. Data) - BAD FINAL ACC\n"); ! 160: 159 0000FC34 .data 1 ! 161: 160 00000d46 * L245: ! 162: 161 00000d46 * 2C20737562746573742031202 .ascii ", subtest 1 (Reg. Data) - BAD FINAL ACC\12\0" ! 163: 85265672E204461746129202D ! 164: 204241442046494E414C20414 ! 165: 3430A00 ! 166: 162 00000d6f * .text ! 167: 163 0000FC34 dd 8f00000d46 pushl $L245 ! 168: 164 0000FC3A fe 08 effffffea7 callf $8,_writes ! 169: 165 0000FC41 # print_divf_data(); ! 170: 166 0000FC41 fe 04 ef00000a70 callf $4,_print_divf_data ! 171: 167 0000FC48 # } ! 172: 168 0000FC48 # if( halt_flg ) ! 173: 169 0000FC48 L240: ! 174: 170 0000FC48 5d effffffe9a tstl _halt_flg ! 175: 171 0000FC4E 31 09 jeql L247 ! 176: 172 0000FC50 # divf_er_halt( BAD_ACC_HLT ); /* halt on the error */ ! 177: 173 0000FC50 dd 01 pushl $1 ! 178: 174 0000FC52 fe 08 ef00000afd callf $8,_divf_er_halt ! 179: 175 0000FC59 # if( loop_on_err ) { ! 180: 176 0000FC59 L247: ! 181: 177 0000FC59 5d effffffe89 tstl _loop_on_err ! 182: 178 0000FC5F 31 0a jeql L249 ! 183: 179 0000FC61 # force_loop = TRUE; /* set the force loop flag */ ! 184: 180 0000FC61 0d 01 effffffe80 movl $1,_force_loop ! 185: 181 0000FC68 # asm("brw _divf_1_lp1");; /* and loop on the error */ ! 186: 182 0000FC68 13 ff48 brw _divf_1_lp1 ! 187: 183 0000FC6B # } /* end of loop on error */ ! 188: 184 0000FC6B # } /* end of compare error */ ! 189: 185 0000FC6B L249: ! 190: 186 0000FC6B # } /* end of WHILE loop */ ! 191: 187 0000FC6B L239: ! 192: 188 0000FC6B L235: ! 193: 189 0000FC6B 6d effffffe77 incl _index ! 194: 190 0000FC71 13 fef6 jbr L237 ! 195: 191 0000FC74 L236: ! 196: 192 0000FC74 # } /* end of subtest 1 */ ! 197: 193 0000FC74 40 ret#2 ! 198: 194 0000FC75 .set L231,0x0 ! 199: 195 0000FC75 L233: ! 200: 196 0000FC75 13 fedf jbr L234 ! 201: 197 0000FC78 .data ! 202: 198 00000d28 * .text ! 203: 199 0000FC78 .align 1 ! 204: 200 0000FC78 .globl _divf_2 ! 205: 201 0000FC78 _divf_2: ! 206: 202 0000FC78 0000 .word L250 ! 207: 203 0000FC7A # ! 208: 204 0000FC7A # ! 209: 205 0000FC7A # ! 210: 206 0000FC7A # /************************************************************************ ! 211: 207 0000FC7A # * ! 212: 208 0000FC7A # * SUBTEST 2 - divide through memory ! 213: 209 0000FC7A # * ! 214: 210 0000FC7A # ************************************************************************/ ! 215: 211 0000FC7A # divf_2() ! 216: 212 0000FC7A # { ! 217: 213 0000FC7A 13 0118 jbr L252 ! 218: 214 0000FC7D L253: ! 219: 215 0000FC7D # force_loop = FALSE; ! 220: 216 0000FC7D 4d effffffe65 clrl _force_loop ! 221: 217 0000FC83 # subtest = 2; ! 222: 218 0000FC83 0d 02 effffffe5e movl $2,_subtest ! 223: 219 0000FC8A # for( index = 0; index < max_divf_1_index; index++ ) { ! 224: 220 0000FC8A 4d effffffe58 clrl _index ! 225: 221 0000FC90 L256: ! 226: 222 0000FC90 1d effffffe52 effffffe4d cmpl _index,_max_divf_1_index ! 227: 223 0000FC9B 91 03 13 00f4 jgeq L255 ! 228: 224 0000FCA0 # sgl_ld_acc = divf_1_data[index].op_1; /* get operand 1 */ ! 229: 225 0000FCA0 5c 0c effffffe41 50 mull3 $12,_index,r0 ! 230: 226 0000FCA8 0d e000000000 effffffe35 movl _divf_1_data(r0),_sgl_ld_acc ! 231: 227 0000FCB3 # sgl_value_1 = divf_1_data[index].op_2; /* get operand 2 */ ! 232: 228 0000FCB3 5c 0c effffffe2e 50 mull3 $12,_index,r0 ! 233: 229 0000FCBB 0d e000000004 effffffe22 movl _divf_1_data+4(r0),_sgl_value_1 ! 234: 230 0000FCC6 # sgl_expected = divf_1_data[index].exp; /* get expected result */ ! 235: 231 0000FCC6 5c 0c effffffe1b 50 mull3 $12,_index,r0 ! 236: 232 0000FCCE 0d e000000008 effffffe0f movl _divf_1_data+8(r0),_sgl_expected ! 237: 233 0000FCD9 # /* ! 238: 234 0000FCD9 # * If LOOP ON ERROR is set, this is the loop for this subtest. ! 239: 235 0000FCD9 # * The force loop flag is set after the first error. ! 240: 236 0000FCD9 # */ ! 241: 237 0000FCD9 # asm("_divf_2_lp1:"); ! 242: 238 0000FCD9 _divf_2_lp1: ! 243: 239 0000FCD9 # asm("ldf _sgl_ld_acc"); /* load the 1st operand */ ! 244: 240 0000FCD9 06 effffffe09 ldf _sgl_ld_acc ! 245: 241 0000FCDF # asm("divf _sgl_value_1"); /* divide the 2nd operand */ ! 246: 242 0000FCDF f6 effffffe03 divf _sgl_value_1 ! 247: 243 0000FCE5 # asm("stf _sgl_st_acc"); /* store the result */ ! 248: 244 0000FCE5 26 effffffdfd stf _sgl_st_acc ! 249: 245 0000FCEB # if( force_loop ) ! 250: 246 0000FCEB 5d effffffdf7 tstl _force_loop ! 251: 247 0000FCF1 31 02 jeql L257 ! 252: 248 0000FCF3 # asm("brb _divf_2_lp1");; /* loop on the error */ ! 253: 249 0000FCF3 11 e4 brb _divf_2_lp1 ! 254: 250 0000FCF5 L257: ! 255: 251 0000FCF5 # /* ! 256: 252 0000FCF5 # * end error loop - test the results ! 257: 253 0000FCF5 # */ ! 258: 254 0000FCF5 # if( sgl_st_acc != sgl_expected ) { /* COMPARE the values */ ! 259: 255 0000FCF5 1d effffffded effffffde8 cmpl _sgl_st_acc,_sgl_expected ! 260: 256 0000FD00 21 03 13 0086 jeql L258 ! 261: 257 0000FD05 # errcnt++; /* bump the error count */ ! 262: 258 0000FD05 6d effffffddd incl _errcnt ! 263: 259 0000FD0B # if( prt_error ) { ! 264: 260 0000FD0B 5d effffffdd7 tstl _prt_error ! 265: 261 0000FD11 31 55 jeql L259 ! 266: 262 0000FD13 # writes(" \n"); /* start a new print line */ ! 267: 263 0000FD13 .data 1 ! 268: 264 00000d6f * L260: ! 269: 265 00000d6f * 200A00 .ascii " \12\0" ! 270: 266 00000d72 * .text ! 271: 267 0000FD13 dd 8f00000d6f pushl $L260 ! 272: 268 0000FD19 fe 08 effffffdc8 callf $8,_writes ! 273: 269 0000FD20 # writes("cycle: "); ! 274: 270 0000FD20 .data 1 ! 275: 271 00000d72 * L261: ! 276: 272 00000d72 * 6379636C653A2000 .ascii "cycle: \0" ! 277: 273 00000d7a * .text ! 278: 274 0000FD20 dd 8f00000d72 pushl $L261 ! 279: 275 0000FD26 fe 08 effffffdbb callf $8,_writes ! 280: 276 0000FD2D # writed( cycle ); ! 281: 277 0000FD2D dd effffffdb5 pushl _cycle ! 282: 278 0000FD33 fe 08 effffffdae callf $8,_writed ! 283: 279 0000FD3A # writes(" DIVF test "); ! 284: 280 0000FD3A .data 1 ! 285: 281 00000d7a * L262: ! 286: 282 00000d7a * 2020444956462074657374200 .ascii " DIVF test \0" ! 287: 0 ! 288: 283 00000d87 * .text ! 289: 284 0000FD3A dd 8f00000d7a pushl $L262 ! 290: 285 0000FD40 fe 08 effffffda1 callf $8,_writes ! 291: 286 0000FD47 # writed( test_no ); ! 292: 287 0000FD47 dd effffffd9b pushl _test_no ! 293: 288 0000FD4D fe 08 effffffd94 callf $8,_writed ! 294: 289 0000FD54 # writes(", subtest 2 (Cache Data) - BAD FINAL ACC\n"); ! 295: 290 0000FD54 .data 1 ! 296: 291 00000d87 * L263: ! 297: 292 00000d87 * 2C20737562746573742032202 .ascii ", subtest 2 (Cache Data) - BAD FINAL ACC\12\0" ! 298: 8436163686520446174612920 ! 299: 2D204241442046494E414C204 ! 300: 143430A00 ! 301: 293 00000db1 * .text ! 302: 294 0000FD54 dd 8f00000d87 pushl $L263 ! 303: 295 0000FD5A fe 08 effffffd87 callf $8,_writes ! 304: 296 0000FD61 # print_divf_data(); ! 305: 297 0000FD61 fe 04 ef00000950 callf $4,_print_divf_data ! 306: 298 0000FD68 # } ! 307: 299 0000FD68 # if( halt_flg ) ! 308: 300 0000FD68 L259: ! 309: 301 0000FD68 5d effffffd7a tstl _halt_flg ! 310: 302 0000FD6E 31 09 jeql L264 ! 311: 303 0000FD70 # divf_er_halt( BAD_ACC_HLT ); /* halt on the error */ ! 312: 304 0000FD70 dd 01 pushl $1 ! 313: 305 0000FD72 fe 08 ef000009dd callf $8,_divf_er_halt ! 314: 306 0000FD79 # if( loop_on_err ) { ! 315: 307 0000FD79 L264: ! 316: 308 0000FD79 5d effffffd69 tstl _loop_on_err ! 317: 309 0000FD7F 31 0a jeql L265 ! 318: 310 0000FD81 # force_loop = TRUE; /* set the force loop flag */ ! 319: 311 0000FD81 0d 01 effffffd60 movl $1,_force_loop ! 320: 312 0000FD88 # asm("brw _divf_2_lp1");; /* and loop on the error */ ! 321: 313 0000FD88 13 ff4e brw _divf_2_lp1 ! 322: 314 0000FD8B # } /* end of loop on error */ ! 323: 315 0000FD8B # } /* end of compare error */ ! 324: 316 0000FD8B L265: ! 325: 317 0000FD8B # } /* end of WHILE loop */ ! 326: 318 0000FD8B L258: ! 327: 319 0000FD8B L254: ! 328: 320 0000FD8B 6d effffffd57 incl _index ! 329: 321 0000FD91 13 fefc jbr L256 ! 330: 322 0000FD94 L255: ! 331: 323 0000FD94 # } /* end of subtest 2 */ ! 332: 324 0000FD94 40 ret#2 ! 333: 325 0000FD95 .set L250,0x0 ! 334: 326 0000FD95 L252: ! 335: 327 0000FD95 13 fee5 jbr L253 ! 336: 328 0000FD98 .data ! 337: 329 00000d28 * .text ! 338: 330 0000FD98 .align 1 ! 339: 331 0000FD98 .globl _divf_3 ! 340: 332 0000FD98 _divf_3: ! 341: 333 0000FD98 0000 .word L266 ! 342: 334 0000FD9A # ! 343: 335 0000FD9A # ! 344: 336 0000FD9A # ! 345: 337 0000FD9A # /************************************************************************ ! 346: 338 0000FD9A # * ! 347: 339 0000FD9A # * SUBTEST 3 - Divide, Wait 3 NOPs before storing the results ! 348: 340 0000FD9A # * ! 349: 341 0000FD9A # ************************************************************************/ ! 350: 342 0000FD9A # divf_3() ! 351: 343 0000FD9A # { ! 352: 344 0000FD9A 13 011c jbr L268 ! 353: 345 0000FD9D L269: ! 354: 346 0000FD9D # force_loop = FALSE; ! 355: 347 0000FD9D 4d effffffd45 clrl _force_loop ! 356: 348 0000FDA3 # subtest = 3; ! 357: 349 0000FDA3 0d 03 effffffd3e movl $3,_subtest ! 358: 350 0000FDAA # for( index = 0; index < max_divf_1_index; index++ ) { ! 359: 351 0000FDAA 4d effffffd38 clrl _index ! 360: 352 0000FDB0 L272: ! 361: 353 0000FDB0 1d effffffd32 effffffd2d cmpl _index,_max_divf_1_index ! 362: 354 0000FDBB 91 03 13 00f8 jgeq L271 ! 363: 355 0000FDC0 # sgl_ld_acc = divf_1_data[index].op_1; /* get operand 1 */ ! 364: 356 0000FDC0 5c 0c effffffd21 50 mull3 $12,_index,r0 ! 365: 357 0000FDC8 0d e000000000 effffffd15 movl _divf_1_data(r0),_sgl_ld_acc ! 366: 358 0000FDD3 # sgl_value_1 = divf_1_data[index].op_2; /* get operand 2 */ ! 367: 359 0000FDD3 5c 0c effffffd0e 50 mull3 $12,_index,r0 ! 368: 360 0000FDDB 0d e000000004 effffffd02 movl _divf_1_data+4(r0),_sgl_value_1 ! 369: 361 0000FDE6 # sgl_expected = divf_1_data[index].exp; /* get expected result */ ! 370: 362 0000FDE6 5c 0c effffffcfb 50 mull3 $12,_index,r0 ! 371: 363 0000FDEE 0d e000000008 effffffcef movl _divf_1_data+8(r0),_sgl_expected ! 372: 364 0000FDF9 # /* ! 373: 365 0000FDF9 # * If LOOP ON ERROR is set, this is the loop for this subtest. ! 374: 366 0000FDF9 # * The force loop flag is set after the first error. ! 375: 367 0000FDF9 # */ ! 376: 368 0000FDF9 # asm("_divf_3_lp1:"); ! 377: 369 0000FDF9 _divf_3_lp1: ! 378: 370 0000FDF9 # asm("ldf _sgl_ld_acc"); /* load the 1st operand */ ! 379: 371 0000FDF9 06 effffffce9 ldf _sgl_ld_acc ! 380: 372 0000FDFF # asm("nop"); /* delay */ ! 381: 373 0000FDFF 10 nop ! 382: 374 0000FE00 # asm("divf _sgl_value_1"); /* divide the 2nd operand */ ! 383: 375 0000FE00 f6 effffffce2 divf _sgl_value_1 ! 384: 376 0000FE06 # asm("nop"); /* delay before ... */ ! 385: 377 0000FE06 10 nop ! 386: 378 0000FE07 # asm("nop"); ! 387: 379 0000FE07 10 nop ! 388: 380 0000FE08 # asm("nop"); /* ... storing the result */ ! 389: 381 0000FE08 10 nop ! 390: 382 0000FE09 # asm("stf _sgl_st_acc"); /* store the result */ ! 391: 383 0000FE09 26 effffffcd9 stf _sgl_st_acc ! 392: 384 0000FE0F # if( force_loop ) ! 393: 385 0000FE0F 5d effffffcd3 tstl _force_loop ! 394: 386 0000FE15 31 02 jeql L273 ! 395: 387 0000FE17 # asm("brb _divf_3_lp1");; /* loop on the error */ ! 396: 388 0000FE17 11 e0 brb _divf_3_lp1 ! 397: 389 0000FE19 L273: ! 398: 390 0000FE19 # /* ! 399: 391 0000FE19 # * end error loop - test the results ! 400: 392 0000FE19 # */ ! 401: 393 0000FE19 # if( sgl_st_acc != sgl_expected ) { /* COMPARE the values */ ! 402: 394 0000FE19 1d effffffcc9 effffffcc4 cmpl _sgl_st_acc,_sgl_expected ! 403: 395 0000FE24 21 03 13 0086 jeql L274 ! 404: 396 0000FE29 # errcnt++; /* bump the error count */ ! 405: 397 0000FE29 6d effffffcb9 incl _errcnt ! 406: 398 0000FE2F # if( prt_error ) { ! 407: 399 0000FE2F 5d effffffcb3 tstl _prt_error ! 408: 400 0000FE35 31 55 jeql L275 ! 409: 401 0000FE37 # writes(" \n"); /* start a new print line */ ! 410: 402 0000FE37 .data 1 ! 411: 403 00000db1 * L276: ! 412: 404 00000db1 * 200A00 .ascii " \12\0" ! 413: 405 00000db4 * .text ! 414: 406 0000FE37 dd 8f00000db1 pushl $L276 ! 415: 407 0000FE3D fe 08 effffffca4 callf $8,_writes ! 416: 408 0000FE44 # writes("cycle: "); ! 417: 409 0000FE44 .data 1 ! 418: 410 00000db4 * L277: ! 419: 411 00000db4 * 6379636C653A2000 .ascii "cycle: \0" ! 420: 412 00000dbc * .text ! 421: 413 0000FE44 dd 8f00000db4 pushl $L277 ! 422: 414 0000FE4A fe 08 effffffc97 callf $8,_writes ! 423: 415 0000FE51 # writed( cycle ); ! 424: 416 0000FE51 dd effffffc91 pushl _cycle ! 425: 417 0000FE57 fe 08 effffffc8a callf $8,_writed ! 426: 418 0000FE5E # writes(" DIVF test "); ! 427: 419 0000FE5E .data 1 ! 428: 420 00000dbc * L278: ! 429: 421 00000dbc * 2020444956462074657374200 .ascii " DIVF test \0" ! 430: 0 ! 431: 422 00000dc9 * .text ! 432: 423 0000FE5E dd 8f00000dbc pushl $L278 ! 433: 424 0000FE64 fe 08 effffffc7d callf $8,_writes ! 434: 425 0000FE6B # writed( test_no ); ! 435: 426 0000FE6B dd effffffc77 pushl _test_no ! 436: 427 0000FE71 fe 08 effffffc70 callf $8,_writed ! 437: 428 0000FE78 # writes(", subtest 3 (Cache data - 3 NOPs) - BAD FINAL ACC\n"); ! 438: 429 0000FE78 .data 1 ! 439: 430 00000dc9 * L279: ! 440: 431 00000dc9 * 2C20737562746573742033202 .ascii ", subtest 3 (Cache data - 3 NOPs) - BAD FINAL ACC\12\0" ! 441: 843616368652064617461202D ! 442: 2033204E4F507329202D20424 ! 443: 1442046494E414C204143430A ! 444: 00 ! 445: 432 00000dfc * .text ! 446: 433 0000FE78 dd 8f00000dc9 pushl $L279 ! 447: 434 0000FE7E fe 08 effffffc63 callf $8,_writes ! 448: 435 0000FE85 # print_divf_data(); ! 449: 436 0000FE85 fe 04 ef0000082c callf $4,_print_divf_data ! 450: 437 0000FE8C # } ! 451: 438 0000FE8C # if( halt_flg ) ! 452: 439 0000FE8C L275: ! 453: 440 0000FE8C 5d effffffc56 tstl _halt_flg ! 454: 441 0000FE92 31 09 jeql L280 ! 455: 442 0000FE94 # divf_er_halt( BAD_ACC_HLT ); /* halt on the error */ ! 456: 443 0000FE94 dd 01 pushl $1 ! 457: 444 0000FE96 fe 08 ef000008b9 callf $8,_divf_er_halt ! 458: 445 0000FE9D # if( loop_on_err ) { ! 459: 446 0000FE9D L280: ! 460: 447 0000FE9D 5d effffffc45 tstl _loop_on_err ! 461: 448 0000FEA3 31 0a jeql L281 ! 462: 449 0000FEA5 # force_loop = TRUE; /* set the force loop flag */ ! 463: 450 0000FEA5 0d 01 effffffc3c movl $1,_force_loop ! 464: 451 0000FEAC # asm("brw _divf_3_lp1");; /* and loop on the error */ ! 465: 452 0000FEAC 13 ff4a brw _divf_3_lp1 ! 466: 453 0000FEAF # } /* end of loop on error */ ! 467: 454 0000FEAF # } /* end of compare error */ ! 468: 455 0000FEAF L281: ! 469: 456 0000FEAF # } /* end of WHILE loop */ ! 470: 457 0000FEAF L274: ! 471: 458 0000FEAF L270: ! 472: 459 0000FEAF 6d effffffc33 incl _index ! 473: 460 0000FEB5 13 fef8 jbr L272 ! 474: 461 0000FEB8 L271: ! 475: 462 0000FEB8 # } /* end of subtest 3 */ ! 476: 463 0000FEB8 40 ret#2 ! 477: 464 0000FEB9 .set L266,0x0 ! 478: 465 0000FEB9 L268: ! 479: 466 0000FEB9 13 fee1 jbr L269 ! 480: 467 0000FEBC .data ! 481: 468 00000d28 * .text ! 482: 469 0000FEBC .align 1 ! 483: 470 0000FEBC .globl _divf_4 ! 484: 471 0000FEBC _divf_4: ! 485: 472 0000FEBC 0000 .word L282 ! 486: 473 0000FEBE # ! 487: 474 0000FEBE # ! 488: 475 0000FEBE # ! 489: 476 0000FEBE # /************************************************************************ ! 490: 477 0000FEBE # * ! 491: 478 0000FEBE # * SUBTEST 4 - Divide, Wait 2 NOPs before storing the results ! 492: 479 0000FEBE # * ! 493: 480 0000FEBE # ************************************************************************/ ! 494: 481 0000FEBE # divf_4() ! 495: 482 0000FEBE # { ! 496: 483 0000FEBE 13 011b jbr L284 ! 497: 484 0000FEC1 L285: ! 498: 485 0000FEC1 # force_loop = FALSE; ! 499: 486 0000FEC1 4d effffffc21 clrl _force_loop ! 500: 487 0000FEC7 # subtest = 4; ! 501: 488 0000FEC7 0d 04 effffffc1a movl $4,_subtest ! 502: 489 0000FECE # for( index = 0; index < max_divf_1_index; index++ ) { ! 503: 490 0000FECE 4d effffffc14 clrl _index ! 504: 491 0000FED4 L288: ! 505: 492 0000FED4 1d effffffc0e effffffc09 cmpl _index,_max_divf_1_index ! 506: 493 0000FEDF 91 03 13 00f7 jgeq L287 ! 507: 494 0000FEE4 # sgl_ld_acc = divf_1_data[index].op_1; /* get operand 1 */ ! 508: 495 0000FEE4 5c 0c effffffbfd 50 mull3 $12,_index,r0 ! 509: 496 0000FEEC 0d e000000000 effffffbf1 movl _divf_1_data(r0),_sgl_ld_acc ! 510: 497 0000FEF7 # sgl_value_1 = divf_1_data[index].op_2; /* get operand 2 */ ! 511: 498 0000FEF7 5c 0c effffffbea 50 mull3 $12,_index,r0 ! 512: 499 0000FEFF 0d e000000004 effffffbde movl _divf_1_data+4(r0),_sgl_value_1 ! 513: 500 0000FF0A # sgl_expected = divf_1_data[index].exp; /* get expected result */ ! 514: 501 0000FF0A 5c 0c effffffbd7 50 mull3 $12,_index,r0 ! 515: 502 0000FF12 0d e000000008 effffffbcb movl _divf_1_data+8(r0),_sgl_expected ! 516: 503 0000FF1D # /* ! 517: 504 0000FF1D # * If LOOP ON ERROR is set, this is the loop for this subtest. ! 518: 505 0000FF1D # * The force loop flag is set after the first error. ! 519: 506 0000FF1D # */ ! 520: 507 0000FF1D # asm("_divf_4_lp1:"); ! 521: 508 0000FF1D _divf_4_lp1: ! 522: 509 0000FF1D # asm("ldf _sgl_ld_acc"); /* load the 1st operand */ ! 523: 510 0000FF1D 06 effffffbc5 ldf _sgl_ld_acc ! 524: 511 0000FF23 # asm("nop"); /* delay */ ! 525: 512 0000FF23 10 nop ! 526: 513 0000FF24 # asm("divf _sgl_value_1"); /* divide the 2nd operand */ ! 527: 514 0000FF24 f6 effffffbbe divf _sgl_value_1 ! 528: 515 0000FF2A # asm("nop"); /* delay before ... */ ! 529: 516 0000FF2A 10 nop ! 530: 517 0000FF2B # asm("nop"); /* ... storing the result */ ! 531: 518 0000FF2B 10 nop ! 532: 519 0000FF2C # asm("stf _sgl_st_acc"); /* store the result */ ! 533: 520 0000FF2C 26 effffffbb6 stf _sgl_st_acc ! 534: 521 0000FF32 # if( force_loop ) ! 535: 522 0000FF32 5d effffffbb0 tstl _force_loop ! 536: 523 0000FF38 31 02 jeql L289 ! 537: 524 0000FF3A # asm("brb _divf_4_lp1");; /* loop on the error */ ! 538: 525 0000FF3A 11 e1 brb _divf_4_lp1 ! 539: 526 0000FF3C L289: ! 540: 527 0000FF3C # /* ! 541: 528 0000FF3C # * end error loop - test the results ! 542: 529 0000FF3C # */ ! 543: 530 0000FF3C # if( sgl_st_acc != sgl_expected ) { /* COMPARE the values */ ! 544: 531 0000FF3C 1d effffffba6 effffffba1 cmpl _sgl_st_acc,_sgl_expected ! 545: 532 0000FF47 21 03 13 0086 jeql L290 ! 546: 533 0000FF4C # errcnt++; /* bump the error count */ ! 547: 534 0000FF4C 6d effffffb96 incl _errcnt ! 548: 535 0000FF52 # if( prt_error ) { ! 549: 536 0000FF52 5d effffffb90 tstl _prt_error ! 550: 537 0000FF58 31 55 jeql L291 ! 551: 538 0000FF5A # writes(" \n"); /* start a new print line */ ! 552: 539 0000FF5A .data 1 ! 553: 540 00000dfc * L292: ! 554: 541 00000dfc * 200A00 .ascii " \12\0" ! 555: 542 00000dff * .text ! 556: 543 0000FF5A dd 8f00000dfc pushl $L292 ! 557: 544 0000FF60 fe 08 effffffb81 callf $8,_writes ! 558: 545 0000FF67 # writes("cycle: "); ! 559: 546 0000FF67 .data 1 ! 560: 547 00000dff * L293: ! 561: 548 00000dff * 6379636C653A2000 .ascii "cycle: \0" ! 562: 549 00000e07 * .text ! 563: 550 0000FF67 dd 8f00000dff pushl $L293 ! 564: 551 0000FF6D fe 08 effffffb74 callf $8,_writes ! 565: 552 0000FF74 # writed( cycle ); ! 566: 553 0000FF74 dd effffffb6e pushl _cycle ! 567: 554 0000FF7A fe 08 effffffb67 callf $8,_writed ! 568: 555 0000FF81 # writes(" DIVF test "); ! 569: 556 0000FF81 .data 1 ! 570: 557 00000e07 * L294: ! 571: 558 00000e07 * 2020444956462074657374200 .ascii " DIVF test \0" ! 572: 0 ! 573: 559 00000e14 * .text ! 574: 560 0000FF81 dd 8f00000e07 pushl $L294 ! 575: 561 0000FF87 fe 08 effffffb5a callf $8,_writes ! 576: 562 0000FF8E # writed( test_no ); ! 577: 563 0000FF8E dd effffffb54 pushl _test_no ! 578: 564 0000FF94 fe 08 effffffb4d callf $8,_writed ! 579: 565 0000FF9B # writes(", subtest 4 (Cache Data - 2 NOPs) - BAD FINAL ACC\n"); ! 580: 566 0000FF9B .data 1 ! 581: 567 00000e14 * L295: ! 582: 568 00000e14 * 2C20737562746573742034202 .ascii ", subtest 4 (Cache Data - 2 NOPs) - BAD FINAL ACC\12\0" ! 583: 843616368652044617461202D ! 584: 2032204E4F507329202D20424 ! 585: 1442046494E414C204143430A ! 586: 00 ! 587: 569 00000e47 * .text ! 588: 570 0000FF9B dd 8f00000e14 pushl $L295 ! 589: 571 0000FFA1 fe 08 effffffb40 callf $8,_writes ! 590: 572 0000FFA8 # print_divf_data(); ! 591: 573 0000FFA8 fe 04 ef00000709 callf $4,_print_divf_data ! 592: 574 0000FFAF # } ! 593: 575 0000FFAF # if( halt_flg ) ! 594: 576 0000FFAF L291: ! 595: 577 0000FFAF 5d effffffb33 tstl _halt_flg ! 596: 578 0000FFB5 31 09 jeql L296 ! 597: 579 0000FFB7 # divf_er_halt( BAD_ACC_HLT ); /* halt on the error */ ! 598: 580 0000FFB7 dd 01 pushl $1 ! 599: 581 0000FFB9 fe 08 ef00000796 callf $8,_divf_er_halt ! 600: 582 0000FFC0 # if( loop_on_err ) { ! 601: 583 0000FFC0 L296: ! 602: 584 0000FFC0 5d effffffb22 tstl _loop_on_err ! 603: 585 0000FFC6 31 0a jeql L297 ! 604: 586 0000FFC8 # force_loop = TRUE; /* set the force loop flag */ ! 605: 587 0000FFC8 0d 01 effffffb19 movl $1,_force_loop ! 606: 588 0000FFCF # asm("brw _divf_4_lp1");; /* and loop on the error */ ! 607: 589 0000FFCF 13 ff4b brw _divf_4_lp1 ! 608: 590 0000FFD2 # } /* end of loop on error */ ! 609: 591 0000FFD2 # } /* end of compare error */ ! 610: 592 0000FFD2 L297: ! 611: 593 0000FFD2 # } /* end of WHILE loop */ ! 612: 594 0000FFD2 L290: ! 613: 595 0000FFD2 L286: ! 614: 596 0000FFD2 6d effffffb10 incl _index ! 615: 597 0000FFD8 13 fef9 jbr L288 ! 616: 598 0000FFDB L287: ! 617: 599 0000FFDB # } /* end of subtest 4 */ ! 618: 600 0000FFDB 40 ret#2 ! 619: 601 0000FFDC .set L282,0x0 ! 620: 602 0000FFDC L284: ! 621: 603 0000FFDC 13 fee2 jbr L285 ! 622: 604 0000FFDF .data ! 623: 605 00000d28 * .text ! 624: 606 0000FFDF 00 .align 1 ! 625: 607 0000FFE0 .globl _divf_5 ! 626: 608 0000FFE0 _divf_5: ! 627: 609 0000FFE0 0000 .word L298 ! 628: 610 0000FFE2 # ! 629: 611 0000FFE2 # ! 630: 612 0000FFE2 # ! 631: 613 0000FFE2 # /************************************************************************ ! 632: 614 0000FFE2 # * ! 633: 615 0000FFE2 # * SUBTEST 5 - DIvide, Wait 1 NOP before storing the results ! 634: 616 0000FFE2 # * ! 635: 617 0000FFE2 # ************************************************************************/ ! 636: 618 0000FFE2 # divf_5() ! 637: 619 0000FFE2 # { ! 638: 620 0000FFE2 13 011a jbr L300 ! 639: 621 0000FFE5 L301: ! 640: 622 0000FFE5 # force_loop = FALSE; ! 641: 623 0000FFE5 4d effffffafd clrl _force_loop ! 642: 624 0000FFEB # subtest = 5; ! 643: 625 0000FFEB 0d 05 effffffaf6 movl $5,_subtest ! 644: 626 0000FFF2 # for( index = 0; index < max_divf_1_index; index++ ) { ! 645: 627 0000FFF2 4d effffffaf0 clrl _index ! 646: 628 0000FFF8 L304: ! 647: 629 0000FFF8 1d effffffaea effffffae5 cmpl _index,_max_divf_1_index ! 648: 630 00010003 91 03 13 00f6 jgeq L303 ! 649: 631 00010008 # sgl_ld_acc = divf_1_data[index].op_1; /* get operand 1 */ ! 650: 632 00010008 5c 0c effffffad9 50 mull3 $12,_index,r0 ! 651: 633 00010010 0d e000000000 effffffacd movl _divf_1_data(r0),_sgl_ld_acc ! 652: 634 0001001B # sgl_value_1 = divf_1_data[index].op_2; /* get operand 2 */ ! 653: 635 0001001B 5c 0c effffffac6 50 mull3 $12,_index,r0 ! 654: 636 00010023 0d e000000004 effffffaba movl _divf_1_data+4(r0),_sgl_value_1 ! 655: 637 0001002E # sgl_expected = divf_1_data[index].exp; /* get expected result */ ! 656: 638 0001002E 5c 0c effffffab3 50 mull3 $12,_index,r0 ! 657: 639 00010036 0d e000000008 effffffaa7 movl _divf_1_data+8(r0),_sgl_expected ! 658: 640 00010041 # /* ! 659: 641 00010041 # * If LOOP ON ERROR is set, this is the loop for this subtest. ! 660: 642 00010041 # * The force loop flag is set after the first error. ! 661: 643 00010041 # */ ! 662: 644 00010041 # asm("_divf_5_lp1:"); ! 663: 645 00010041 _divf_5_lp1: ! 664: 646 00010041 # asm("ldf _sgl_ld_acc"); /* load the 1st operand */ ! 665: 647 00010041 06 effffffaa1 ldf _sgl_ld_acc ! 666: 648 00010047 # asm("nop"); /* delay */ ! 667: 649 00010047 10 nop ! 668: 650 00010048 # asm("divf _sgl_value_1"); /* divide the 2nd operand */ ! 669: 651 00010048 f6 effffffa9a divf _sgl_value_1 ! 670: 652 0001004E # asm("nop"); /* delay before storing */ ! 671: 653 0001004E 10 nop ! 672: 654 0001004F # asm("stf _sgl_st_acc"); /* store the result */ ! 673: 655 0001004F 26 effffffa93 stf _sgl_st_acc ! 674: 656 00010055 # if( force_loop ) ! 675: 657 00010055 5d effffffa8d tstl _force_loop ! 676: 658 0001005B 31 02 jeql L305 ! 677: 659 0001005D # asm("brb _divf_5_lp1");; /* loop on the error */ ! 678: 660 0001005D 11 e2 brb _divf_5_lp1 ! 679: 661 0001005F L305: ! 680: 662 0001005F # /* ! 681: 663 0001005F # * end error loop - test the results ! 682: 664 0001005F # */ ! 683: 665 0001005F # if( sgl_st_acc != sgl_expected ) { /* COMPARE the values */ ! 684: 666 0001005F 1d effffffa83 effffffa7e cmpl _sgl_st_acc,_sgl_expected ! 685: 667 0001006A 21 03 13 0086 jeql L306 ! 686: 668 0001006F # errcnt++; /* bump the error count */ ! 687: 669 0001006F 6d effffffa73 incl _errcnt ! 688: 670 00010075 # if( prt_error ) { ! 689: 671 00010075 5d effffffa6d tstl _prt_error ! 690: 672 0001007B 31 55 jeql L307 ! 691: 673 0001007D # writes(" \n"); /* start a new print line */ ! 692: 674 0001007D .data 1 ! 693: 675 00000e47 * L308: ! 694: 676 00000e47 * 200A00 .ascii " \12\0" ! 695: 677 00000e4a * .text ! 696: 678 0001007D dd 8f00000e47 pushl $L308 ! 697: 679 00010083 fe 08 effffffa5e callf $8,_writes ! 698: 680 0001008A # writes("cycle: "); ! 699: 681 0001008A .data 1 ! 700: 682 00000e4a * L309: ! 701: 683 00000e4a * 6379636C653A2000 .ascii "cycle: \0" ! 702: 684 00000e52 * .text ! 703: 685 0001008A dd 8f00000e4a pushl $L309 ! 704: 686 00010090 fe 08 effffffa51 callf $8,_writes ! 705: 687 00010097 # writed( cycle ); ! 706: 688 00010097 dd effffffa4b pushl _cycle ! 707: 689 0001009D fe 08 effffffa44 callf $8,_writed ! 708: 690 000100A4 # writes(" DIVF test "); ! 709: 691 000100A4 .data 1 ! 710: 692 00000e52 * L310: ! 711: 693 00000e52 * 2020444956462074657374200 .ascii " DIVF test \0" ! 712: 0 ! 713: 694 00000e5f * .text ! 714: 695 000100A4 dd 8f00000e52 pushl $L310 ! 715: 696 000100AA fe 08 effffffa37 callf $8,_writes ! 716: 697 000100B1 # writed( test_no ); ! 717: 698 000100B1 dd effffffa31 pushl _test_no ! 718: 699 000100B7 fe 08 effffffa2a callf $8,_writed ! 719: 700 000100BE # writes(", subtest 5 (Cache Data - 1 NOP) - BAD FINAL ACC\n"); ! 720: 701 000100BE .data 1 ! 721: 702 00000e5f * L311: ! 722: 703 00000e5f * 2C20737562746573742035202 .ascii ", subtest 5 (Cache Data - 1 NOP) - BAD FINAL ACC\12\0" ! 723: 843616368652044617461202D ! 724: 2031204E4F5029202D2042414 ! 725: 42046494E414C204143430A00 ! 726: 704 00000e91 * .text ! 727: 705 000100BE dd 8f00000e5f pushl $L311 ! 728: 706 000100C4 fe 08 effffffa1d callf $8,_writes ! 729: 707 000100CB # print_divf_data(); ! 730: 708 000100CB fe 04 ef000005e6 callf $4,_print_divf_data ! 731: 709 000100D2 # } ! 732: 710 000100D2 # if( halt_flg ) ! 733: 711 000100D2 L307: ! 734: 712 000100D2 5d effffffa10 tstl _halt_flg ! 735: 713 000100D8 31 09 jeql L312 ! 736: 714 000100DA # divf_er_halt( BAD_ACC_HLT ); /* halt on the error */ ! 737: 715 000100DA dd 01 pushl $1 ! 738: 716 000100DC fe 08 ef00000673 callf $8,_divf_er_halt ! 739: 717 000100E3 # if( loop_on_err ) { ! 740: 718 000100E3 L312: ! 741: 719 000100E3 5d effffff9ff tstl _loop_on_err ! 742: 720 000100E9 31 0a jeql L313 ! 743: 721 000100EB # force_loop = TRUE; /* set the force loop flag */ ! 744: 722 000100EB 0d 01 effffff9f6 movl $1,_force_loop ! 745: 723 000100F2 # asm("brw _divf_5_lp1");; /* and loop on the error */ ! 746: 724 000100F2 13 ff4c brw _divf_5_lp1 ! 747: 725 000100F5 # } /* end of loop on error */ ! 748: 726 000100F5 # } /* end of compare error */ ! 749: 727 000100F5 L313: ! 750: 728 000100F5 # } /* end of WHILE loop */ ! 751: 729 000100F5 L306: ! 752: 730 000100F5 L302: ! 753: 731 000100F5 6d effffff9ed incl _index ! 754: 732 000100FB 13 fefa jbr L304 ! 755: 733 000100FE L303: ! 756: 734 000100FE # } /* end of subtest 5 */ ! 757: 735 000100FE 40 ret#2 ! 758: 736 000100FF .set L298,0x0 ! 759: 737 000100FF L300: ! 760: 738 000100FF 13 fee3 jbr L301 ! 761: 739 00010102 .data ! 762: 740 00000d28 * .text ! 763: 741 00010102 .align 1 ! 764: 742 00010102 .globl _divf_6 ! 765: 743 00010102 _divf_6: ! 766: 744 00010102 0000 .word L314 ! 767: 745 00010104 # ! 768: 746 00010104 # ! 769: 747 00010104 # ! 770: 748 00010104 # /************************************************************************ ! 771: 749 00010104 # * ! 772: 750 00010104 # * SUBTEST 6 - Check for register corruption ! 773: 751 00010104 # * ! 774: 752 00010104 # ************************************************************************/ ! 775: 753 00010104 # divf_6() ! 776: 754 00010104 # { ! 777: 755 00010104 13 01a7 jbr L316 ! 778: 756 00010107 L317: ! 779: 757 00010107 # force_loop = FALSE; /* clear force_loop flg */ ! 780: 758 00010107 4d effffff9db clrl _force_loop ! 781: 759 0001010D # subtest = 6; ! 782: 760 0001010D 0d 06 effffff9d4 movl $6,_subtest ! 783: 761 00010114 # fill_reg_buf( load_regs ); /* get patterns for regs */ ! 784: 762 00010114 dd 8f00000000 pushl $_load_regs ! 785: 763 0001011A fe 08 effffff9c7 callf $8,_fill_reg_buf ! 786: 764 00010121 # index = 0; ! 787: 765 00010121 4d effffff9c1 clrl _index ! 788: 766 00010127 # sgl_ld_acc = divf_1_data[0].op_1; /* get operand 1 */ ! 789: 767 00010127 0d effffff9bb effffff9b6 movl _divf_1_data,_sgl_ld_acc ! 790: 768 00010132 # sgl_value_1 = divf_1_data[0].op_2; /* get operand 2 */ ! 791: 769 00010132 0d effffff9b4 effffff9ab movl _divf_1_data+4,_sgl_value_1 ! 792: 770 0001013D # sgl_expected = divf_1_data[0].exp; /* get expected result */ ! 793: 771 0001013D 0d effffff9ad effffff9a0 movl _divf_1_data+8,_sgl_expected ! 794: 772 00010148 # /* ! 795: 773 00010148 # * If LOOP ON ERROR is set, this is the loop for this subtest. ! 796: 774 00010148 # * The force loop flag is set after the first error. ! 797: 775 00010148 # */ ! 798: 776 00010148 # asm("_divf_6_lp1:"); ! 799: 777 00010148 _divf_6_lp1: ! 800: 778 00010148 # asm("ldf _sgl_ld_acc"); /* LOAD the accumulator */ ! 801: 779 00010148 06 effffff99a ldf _sgl_ld_acc ! 802: 780 0001014E # asm("nop"); ! 803: 781 0001014E 10 nop ! 804: 782 0001014F # asm("loadr $0x1fff,_load_regs"); /* load regs 0 - 12 */ ! 805: 783 0001014F ab 891fff effffff990 loadr $0x1fff,_load_regs ! 806: 784 00010158 # asm("nop"); ! 807: 785 00010158 10 nop ! 808: 786 00010159 # asm("divf _sgl_value_1"); /* do the divide */ ! 809: 787 00010159 f6 effffff989 divf _sgl_value_1 ! 810: 788 0001015F # asm("nop"); ! 811: 789 0001015F 10 nop ! 812: 790 00010160 # asm("storer $0x1fff,_store_regs"); /* store regs 0 - 12 */ ! 813: 791 00010160 bb 891fff effffff97f storer $0x1fff,_store_regs ! 814: 792 00010169 # asm("stf _sgl_st_acc"); /* save the accumulator */ ! 815: 793 00010169 26 effffff979 stf _sgl_st_acc ! 816: 794 0001016F # if( force_loop ) ! 817: 795 0001016F 5d effffff973 tstl _force_loop ! 818: 796 00010175 31 02 jeql L319 ! 819: 797 00010177 # asm("brb _divf_6_lp1");; /* loop on the error */ ! 820: 798 00010177 11 cf brb _divf_6_lp1 ! 821: 799 00010179 L319: ! 822: 800 00010179 # /* ! 823: 801 00010179 # * Now compare the stored register values to those that were loaded ! 824: 802 00010179 # */ ! 825: 803 00010179 # index2 = 0; ! 826: 804 00010179 4d effffff969 clrl _index2 ! 827: 805 0001017F # while( (load_regs[index2] == store_regs[index2]) && (index2 < 13) ) ! 828: 806 0001017F L320: ! 829: 807 0001017F 0d effffff963 50 movl _index2,r0 ! 830: 808 00010186 0d effffff95c 51 movl _index2,r1 ! 831: 809 0001018D 1d 40effffff954 cmpl _load_regs[r0],_store_regs[r1] ! 832: 41effffff94e ! 833: 810 0001019A 21 11 jneq L321 ! 834: 811 0001019C 1d effffff946 0d cmpl _index2,$13 ! 835: 812 000101A3 81 08 jgeq L321 ! 836: 813 000101A5 # index2++; /* check reg values */ ! 837: 814 000101A5 6d effffff93d incl _index2 ! 838: 815 000101AB 11 d2 jbr L320 ! 839: 816 000101AD L321: ! 840: 817 000101AD # if( index2 < 13 ) { /* error if index2 < 13 */ ! 841: 818 000101AD 1d effffff935 0d cmpl _index2,$13 ! 842: 819 000101B4 91 03 13 00f4 jgeq L322 ! 843: 820 000101B9 # errcnt++; /* bump the error count */ ! 844: 821 000101B9 6d effffff929 incl _errcnt ! 845: 822 000101BF # if( prt_error ) { ! 846: 823 000101BF 5d effffff923 tstl _prt_error ! 847: 824 000101C5 21 03 13 00c0 jeql L323 ! 848: 825 000101CA # writes(" \n"); /* start a new print line */ ! 849: 826 000101CA .data 1 ! 850: 827 00000e91 * L324: ! 851: 828 00000e91 * 200A00 .ascii " \12\0" ! 852: 829 00000e94 * .text ! 853: 830 000101CA dd 8f00000e91 pushl $L324 ! 854: 831 000101D0 fe 08 effffff911 callf $8,_writes ! 855: 832 000101D7 # writes("cycle: "); ! 856: 833 000101D7 .data 1 ! 857: 834 00000e94 * L325: ! 858: 835 00000e94 * 6379636C653A2000 .ascii "cycle: \0" ! 859: 836 00000e9c * .text ! 860: 837 000101D7 dd 8f00000e94 pushl $L325 ! 861: 838 000101DD fe 08 effffff904 callf $8,_writes ! 862: 839 000101E4 # writed( cycle ); ! 863: 840 000101E4 dd effffff8fe pushl _cycle ! 864: 841 000101EA fe 08 effffff8f7 callf $8,_writed ! 865: 842 000101F1 # writes(" DIVF test "); ! 866: 843 000101F1 .data 1 ! 867: 844 00000e9c * L326: ! 868: 845 00000e9c * 2020444956462074657374200 .ascii " DIVF test \0" ! 869: 0 ! 870: 846 00000ea9 * .text ! 871: 847 000101F1 dd 8f00000e9c pushl $L326 ! 872: 848 000101F7 fe 08 effffff8ea callf $8,_writes ! 873: 849 000101FE # writed( test_no ); ! 874: 850 000101FE dd effffff8e4 pushl _test_no ! 875: 851 00010204 fe 08 effffff8dd callf $8,_writed ! 876: 852 0001020B # writes(", subtest 6 - A REGISTER WAS CHANGED\n"); ! 877: 853 0001020B .data 1 ! 878: 854 00000ea9 * L327: ! 879: 855 00000ea9 * 2C20737562746573742036202 .ascii ", subtest 6 - A REGISTER WAS CHANGED\12\0" ! 880: D204120524547495354455220 ! 881: 574153204348414E4745440A0 ! 882: 0 ! 883: 856 00000ecf * .text ! 884: 857 0001020B dd 8f00000ea9 pushl $L327 ! 885: 858 00010211 fe 08 effffff8d0 callf $8,_writes ! 886: 859 00010218 # print_divf_data(); /* print the operands */ ! 887: 860 00010218 fe 04 ef00000499 callf $4,_print_divf_data ! 888: 861 0001021F # writes("register "); /* print the information */ ! 889: 862 0001021F .data 1 ! 890: 863 00000ecf * L328: ! 891: 864 00000ecf * 72656769737465722000 .ascii "register \0" ! 892: 865 00000ed9 * .text ! 893: 866 0001021F dd 8f00000ecf pushl $L328 ! 894: 867 00010225 fe 08 effffff8bc callf $8,_writes ! 895: 868 0001022C # writed( index2 ); /* about the corrupted */ ! 896: 869 0001022C dd effffff8b6 pushl _index2 ! 897: 870 00010232 fe 08 effffff8af callf $8,_writed ! 898: 871 00010239 # writes(" = "); /* register */ ! 899: 872 00010239 .data 1 ! 900: 873 00000ed9 * L329: ! 901: 874 00000ed9 * 203D2000 .ascii " = \0" ! 902: 875 00000edd * .text ! 903: 876 00010239 dd 8f00000ed9 pushl $L329 ! 904: 877 0001023F fe 08 effffff8a2 callf $8,_writes ! 905: 878 00010246 # write32h( store_regs[index2] ); ! 906: 879 00010246 0d effffff89c 50 movl _index2,r0 ! 907: 880 0001024D dd 40effffff894 pushl _store_regs[r0] ! 908: 881 00010254 fe 08 effffff88d callf $8,_write32h ! 909: 882 0001025B # writes(", should be = "); ! 910: 883 0001025B .data 1 ! 911: 884 00000edd * L331: ! 912: 885 00000edd * 2C202073686F756C642062652 .ascii ", should be = \0" ! 913: 03D2000 ! 914: 886 00000eed * .text ! 915: 887 0001025B dd 8f00000edd pushl $L331 ! 916: 888 00010261 fe 08 effffff880 callf $8,_writes ! 917: 889 00010268 # write32h( load_regs[index2] ); ! 918: 890 00010268 0d effffff87a 50 movl _index2,r0 ! 919: 891 0001026F dd 40effffff872 pushl _load_regs[r0] ! 920: 892 00010276 fe 08 effffff86b callf $8,_write32h ! 921: 893 0001027D # writes("\n"); ! 922: 894 0001027D .data 1 ! 923: 895 00000eed * L332: ! 924: 896 00000eed * 0A00 .ascii "\12\0" ! 925: 897 00000eef * .text ! 926: 898 0001027D dd 8f00000eed pushl $L332 ! 927: 899 00010283 fe 08 effffff85e callf $8,_writes ! 928: 900 0001028A # } ! 929: 901 0001028A # if( halt_flg ) ! 930: 902 0001028A L323: ! 931: 903 0001028A 5d effffff858 tstl _halt_flg ! 932: 904 00010290 31 09 jeql L333 ! 933: 905 00010292 # divf_er_halt( BAD_REG_HLT ); /* halt on the error */ ! 934: 906 00010292 dd 02 pushl $2 ! 935: 907 00010294 fe 08 ef000004bb callf $8,_divf_er_halt ! 936: 908 0001029B # if( loop_on_err ) { ! 937: 909 0001029B L333: ! 938: 910 0001029B 5d effffff847 tstl _loop_on_err ! 939: 911 000102A1 31 0a jeql L334 ! 940: 912 000102A3 # force_loop = TRUE; /* set the force loop flag */ ! 941: 913 000102A3 0d 01 effffff83e movl $1,_force_loop ! 942: 914 000102AA # asm("brw _divf_6_lp1");; /* and loop on the error */ ! 943: 915 000102AA 13 fe9b brw _divf_6_lp1 ! 944: 916 000102AD # } /* end of loop on error */ ! 945: 917 000102AD # } /* end of register corruption error */ ! 946: 918 000102AD L334: ! 947: 919 000102AD # } /* end of subtest 6 */ ! 948: 920 000102AD L322: ! 949: 921 000102AD 40 ret#2 ! 950: 922 000102AE .set L314,0x0 ! 951: 923 000102AE L316: ! 952: 924 000102AE 13 fe56 jbr L317 ! 953: 925 000102B1 .data ! 954: 926 00000d28 * .text ! 955: 927 000102B1 00 .align 1 ! 956: 928 000102B2 .globl _divf_7 ! 957: 929 000102B2 _divf_7: ! 958: 930 000102B2 0000 .word L335 ! 959: 931 000102B4 # ! 960: 932 000102B4 # ! 961: 933 000102B4 # ! 962: 934 000102B4 # /************************************************************************ ! 963: 935 000102B4 # * ! 964: 936 000102B4 # * SUBTEST 7 - Check for PSL corruption ! 965: 937 000102B4 # * ! 966: 938 000102B4 # ************************************************************************/ ! 967: 939 000102B4 # divf_7() ! 968: 940 000102B4 # { ! 969: 941 000102B4 13 01b2 jbr L337 ! 970: 942 000102B7 L338: ! 971: 943 000102B7 # force_loop = FALSE; /* clear force_loop flg */ ! 972: 944 000102B7 4d effffff82b clrl _force_loop ! 973: 945 000102BD # subtest = 7; ! 974: 946 000102BD 0d 07 effffff824 movl $7,_subtest ! 975: 947 000102C4 # fill_reg_buf( load_regs ); /* get patterns for regs */ ! 976: 948 000102C4 dd 8f00000000 pushl $_load_regs ! 977: 949 000102CA fe 08 effffff817 callf $8,_fill_reg_buf ! 978: 950 000102D1 # for( index = 0; index < 3; index++ ) { ! 979: 951 000102D1 4d effffff811 clrl _index ! 980: 952 000102D7 L341: ! 981: 953 000102D7 1d effffff80b 03 cmpl _index,$3 ! 982: 954 000102DE 91 03 13 0185 jgeq L340 ! 983: 955 000102E3 # sgl_ld_acc = divf_1_data[index].op_1; /* get operand 1 */ ! 984: 956 000102E3 5c 0c effffff7fe 50 mull3 $12,_index,r0 ! 985: 957 000102EB 0d e000000000 effffff7f2 movl _divf_1_data(r0),_sgl_ld_acc ! 986: 958 000102F6 # sgl_value_1 = divf_1_data[index].op_2; /* get operand 2 */ ! 987: 959 000102F6 5c 0c effffff7eb 50 mull3 $12,_index,r0 ! 988: 960 000102FE 0d e000000004 effffff7df movl _divf_1_data+4(r0),_sgl_value_1 ! 989: 961 00010309 # sgl_expected = divf_1_data[index].exp; /* get expected */ ! 990: 962 00010309 5c 0c effffff7d8 50 mull3 $12,_index,r0 ! 991: 963 00010311 0d e000000008 effffff7cc movl _divf_1_data+8(r0),_sgl_expected ! 992: 964 0001031C # sgl_dummy1 = status_array[status_index]; /* status = +, -, 0 */ ! 993: 965 0001031C 0d effffff7c6 50 movl _status_index,r0 ! 994: 966 00010323 0d 40effffff7be movl _status_array[r0],_sgl_dummy1 ! 995: effffff7b9 ! 996: 967 0001032F # /* ! 997: 968 0001032F # * If LOOP ON ERROR is set, this is the loop for this subtest. ! 998: 969 0001032F # * The force loop flag is set after the first error. ! 999: 970 0001032F # */ ! 1000: 971 0001032F # asm("_divf_7_lp1:"); ! 1001: 972 0001032F _divf_7_lp1: ! 1002: 973 0001032F # asm("ldf _sgl_ld_acc"); /* LOAD the accumulator */ ! 1003: 974 0001032F 06 effffff7b3 ldf _sgl_ld_acc ! 1004: 975 00010335 # asm("nop"); ! 1005: 976 00010335 10 nop ! 1006: 977 00010336 # asm("tstl _sgl_dummy1"); /* set the PSL status */ ! 1007: 978 00010336 5d effffff7ac tstl _sgl_dummy1 ! 1008: 979 0001033C # asm("movpsl _init_psl"); /* save the initial PSL */ ! 1009: 980 0001033C cd effffff7a6 movpsl _init_psl ! 1010: 981 00010342 # asm("nop"); ! 1011: 982 00010342 10 nop ! 1012: 983 00010343 # asm("divf _sgl_value_1"); /* do the divide */ ! 1013: 984 00010343 f6 effffff79f divf _sgl_value_1 ! 1014: 985 00010349 # asm("nop"); ! 1015: 986 00010349 10 nop ! 1016: 987 0001034A # asm("movpsl _psl_val"); /* save the final PSL */ ! 1017: 988 0001034A cd effffff798 movpsl _psl_val ! 1018: 989 00010350 # asm("stf _sgl_st_acc"); /* save the accumulator */ ! 1019: 990 00010350 26 effffff792 stf _sgl_st_acc ! 1020: 991 00010356 # if( force_loop ) ! 1021: 992 00010356 5d effffff78c tstl _force_loop ! 1022: 993 0001035C 31 02 jeql L342 ! 1023: 994 0001035E # asm("brb _divf_7_lp1");; /* loop on the error */ ! 1024: 995 0001035E 11 cf brb _divf_7_lp1 ! 1025: 996 00010360 L342: ! 1026: 997 00010360 # /* ! 1027: 998 00010360 # * Now compare the final PSL to the initial PSL -they should be the same ! 1028: 999 00010360 # */ ! 1029: 1000 00010360 # exp_psl = init_psl; ! 1030: 1001 00010360 0d effffff782 effffff77d movl _init_psl,_exp_psl ! 1031: 1002 0001036B # if( psl_val != exp_psl ) { ! 1032: 1003 0001036B 1d effffff777 effffff772 cmpl _psl_val,_exp_psl ! 1033: 1004 00010376 21 03 13 00e4 jeql L343 ! 1034: 1005 0001037B # errcnt++; /* bump the error count */ ! 1035: 1006 0001037B 6d effffff767 incl _errcnt ! 1036: 1007 00010381 # if( prt_error ) { ! 1037: 1008 00010381 5d effffff761 tstl _prt_error ! 1038: 1009 00010387 21 03 13 00b0 jeql L344 ! 1039: 1010 0001038C # writes(" \n"); /* start a new print line */ ! 1040: 1011 0001038C .data 1 ! 1041: 1012 00000eef * L345: ! 1042: 1013 00000eef * 200A00 .ascii " \12\0" ! 1043: 1014 00000ef2 * .text ! 1044: 1015 0001038C dd 8f00000eef pushl $L345 ! 1045: 1016 00010392 fe 08 effffff74f callf $8,_writes ! 1046: 1017 00010399 # writes("cycle: "); ! 1047: 1018 00010399 .data 1 ! 1048: 1019 00000ef2 * L346: ! 1049: 1020 00000ef2 * 6379636C653A2000 .ascii "cycle: \0" ! 1050: 1021 00000efa * .text ! 1051: 1022 00010399 dd 8f00000ef2 pushl $L346 ! 1052: 1023 0001039F fe 08 effffff742 callf $8,_writes ! 1053: 1024 000103A6 # writed( cycle ); ! 1054: 1025 000103A6 dd effffff73c pushl _cycle ! 1055: 1026 000103AC fe 08 effffff735 callf $8,_writed ! 1056: 1027 000103B3 # writes(" DIVF test "); ! 1057: 1028 000103B3 .data 1 ! 1058: 1029 00000efa * L347: ! 1059: 1030 00000efa * 2020444956462074657374200 .ascii " DIVF test \0" ! 1060: 0 ! 1061: 1031 00000f07 * .text ! 1062: 1032 000103B3 dd 8f00000efa pushl $L347 ! 1063: 1033 000103B9 fe 08 effffff728 callf $8,_writes ! 1064: 1034 000103C0 # writed( test_no ); ! 1065: 1035 000103C0 dd effffff722 pushl _test_no ! 1066: 1036 000103C6 fe 08 effffff71b callf $8,_writed ! 1067: 1037 000103CD # writes(", subtest 7 - INCORRECT FINAL PSL\n"); ! 1068: 1038 000103CD .data 1 ! 1069: 1039 00000f07 * L348: ! 1070: 1040 00000f07 * 2C20737562746573742037202 .ascii ", subtest 7 - INCORRECT FINAL PSL\12\0" ! 1071: D20494E434F52524543542046 ! 1072: 494E414C2050534C0A00 ! 1073: 1041 00000f2a * .text ! 1074: 1042 000103CD dd 8f00000f07 pushl $L348 ! 1075: 1043 000103D3 fe 08 effffff70e callf $8,_writes ! 1076: 1044 000103DA # print_divf_data(); /* print the operands */ ! 1077: 1045 000103DA fe 04 ef000002d7 callf $4,_print_divf_data ! 1078: 1046 000103E1 # writes("initial PSL = "); ! 1079: 1047 000103E1 .data 1 ! 1080: 1048 00000f2a * L349: ! 1081: 1049 00000f2a * 696E697469616C2050534C203 .ascii "initial PSL = \0" ! 1082: D2000 ! 1083: 1050 00000f39 * .text ! 1084: 1051 000103E1 dd 8f00000f2a pushl $L349 ! 1085: 1052 000103E7 fe 08 effffff6fa callf $8,_writes ! 1086: 1053 000103EE # write32h( init_psl ); ! 1087: 1054 000103EE dd effffff6f4 pushl _init_psl ! 1088: 1055 000103F4 fe 08 effffff6ed callf $8,_write32h ! 1089: 1056 000103FB # writes(", final PSL = "); ! 1090: 1057 000103FB .data 1 ! 1091: 1058 00000f39 * L350: ! 1092: 1059 00000f39 * 2C2066696E616C2050534C203 .ascii ", final PSL = \0" ! 1093: D2000 ! 1094: 1060 00000f48 * .text ! 1095: 1061 000103FB dd 8f00000f39 pushl $L350 ! 1096: 1062 00010401 fe 08 effffff6e0 callf $8,_writes ! 1097: 1063 00010408 # write32h( psl_val ); ! 1098: 1064 00010408 dd effffff6da pushl _psl_val ! 1099: 1065 0001040E fe 08 effffff6d3 callf $8,_write32h ! 1100: 1066 00010415 # writes(", expected PSL = "); ! 1101: 1067 00010415 .data 1 ! 1102: 1068 00000f48 * L351: ! 1103: 1069 00000f48 * 2C20657870656374656420505 .ascii ", expected PSL = \0" ! 1104: 34C203D2000 ! 1105: 1070 00000f5a * .text ! 1106: 1071 00010415 dd 8f00000f48 pushl $L351 ! 1107: 1072 0001041B fe 08 effffff6c6 callf $8,_writes ! 1108: 1073 00010422 # write32h( exp_psl ); ! 1109: 1074 00010422 dd effffff6c0 pushl _exp_psl ! 1110: 1075 00010428 fe 08 effffff6b9 callf $8,_write32h ! 1111: 1076 0001042F # writes("\n"); ! 1112: 1077 0001042F .data 1 ! 1113: 1078 00000f5a * L352: ! 1114: 1079 00000f5a * 0A00 .ascii "\12\0" ! 1115: 1080 00000f5c * .text ! 1116: 1081 0001042F dd 8f00000f5a pushl $L352 ! 1117: 1082 00010435 fe 08 effffff6ac callf $8,_writes ! 1118: 1083 0001043C # } ! 1119: 1084 0001043C # if( halt_flg ) ! 1120: 1085 0001043C L344: ! 1121: 1086 0001043C 5d effffff6a6 tstl _halt_flg ! 1122: 1087 00010442 31 09 jeql L353 ! 1123: 1088 00010444 # divf_er_halt( BAD_PSL_HLT ); /* halt on the error */ ! 1124: 1089 00010444 dd 03 pushl $3 ! 1125: 1090 00010446 fe 08 ef00000309 callf $8,_divf_er_halt ! 1126: 1091 0001044D # if( loop_on_err ) { ! 1127: 1092 0001044D L353: ! 1128: 1093 0001044D 5d effffff695 tstl _loop_on_err ! 1129: 1094 00010453 31 0a jeql L354 ! 1130: 1095 00010455 # force_loop = TRUE; /* set the force loop flag */ ! 1131: 1096 00010455 0d 01 effffff68c movl $1,_force_loop ! 1132: 1097 0001045C # asm("brw _divf_7_lp1");; /* and loop on the error */ ! 1133: 1098 0001045C 13 fed0 brw _divf_7_lp1 ! 1134: 1099 0001045F # } /* end of loop on error */ ! 1135: 1100 0001045F # } /* end of PSL corruption error */ ! 1136: 1101 0001045F L354: ! 1137: 1102 0001045F # } /* end of WHILE loop */ ! 1138: 1103 0001045F L343: ! 1139: 1104 0001045F L339: ! 1140: 1105 0001045F 6d effffff683 incl _index ! 1141: 1106 00010465 13 fe6f jbr L341 ! 1142: 1107 00010468 L340: ! 1143: 1108 00010468 # } /* end of subtest 7 */ ! 1144: 1109 00010468 40 ret#2 ! 1145: 1110 00010469 .set L335,0x0 ! 1146: 1111 00010469 L337: ! 1147: 1112 00010469 13 fe4b jbr L338 ! 1148: 1113 0001046C .data ! 1149: 1114 00000d28 * .text ! 1150: 1115 0001046C .align 1 ! 1151: 1116 0001046C .globl _divf_8 ! 1152: 1117 0001046C _divf_8: ! 1153: 1118 0001046C 0000 .word L355 ! 1154: 1119 0001046E # ! 1155: 1120 0001046E # ! 1156: 1121 0001046E # ! 1157: 1122 0001046E # /************************************************************************ ! 1158: 1123 0001046E # * ! 1159: 1124 0001046E # * SUBTEST 8 - pipelined entry test ! 1160: 1125 0001046E # * ! 1161: 1126 0001046E # ************************************************************************/ ! 1162: 1127 0001046E # divf_8() ! 1163: 1128 0001046E # { ! 1164: 1129 0001046E 13 011d jbr L357 ! 1165: 1130 00010471 L358: ! 1166: 1131 00010471 # force_loop = FALSE; ! 1167: 1132 00010471 4d effffff671 clrl _force_loop ! 1168: 1133 00010477 # subtest = 8; ! 1169: 1134 00010477 0d 08 effffff66a movl $8,_subtest ! 1170: 1135 0001047E # for( index = 0; index < max_divf_1_index; index++ ) { ! 1171: 1136 0001047E 4d effffff664 clrl _index ! 1172: 1137 00010484 L361: ! 1173: 1138 00010484 1d effffff65e effffff659 cmpl _index,_max_divf_1_index ! 1174: 1139 0001048F 91 03 13 00f9 jgeq L360 ! 1175: 1140 00010494 # sgl_ld_acc = divf_1_data[index].op_1; /* get operand 1 */ ! 1176: 1141 00010494 5c 0c effffff64d 50 mull3 $12,_index,r0 ! 1177: 1142 0001049C 0d e000000000 effffff641 movl _divf_1_data(r0),_sgl_ld_acc ! 1178: 1143 000104A7 # sgl_value_1 = divf_1_data[index].op_2; /* get operand 2 */ ! 1179: 1144 000104A7 5c 0c effffff63a 50 mull3 $12,_index,r0 ! 1180: 1145 000104AF 0d e000000004 effffff62e movl _divf_1_data+4(r0),_sgl_value_1 ! 1181: 1146 000104BA # sgl_expected = divf_1_data[index].exp; /* get expected result */ ! 1182: 1147 000104BA 5c 0c effffff627 50 mull3 $12,_index,r0 ! 1183: 1148 000104C2 0d e000000008 effffff61b movl _divf_1_data+8(r0),_sgl_expected ! 1184: 1149 000104CD # /* ! 1185: 1150 000104CD # * If LOOP ON ERROR is set, this is the loop for this subtest. ! 1186: 1151 000104CD # * The force loop flag is set after the first error. ! 1187: 1152 000104CD # */ ! 1188: 1153 000104CD # asm("_divf_8_lp1:"); ! 1189: 1154 000104CD _divf_8_lp1: ! 1190: 1155 000104CD # asm("movl $0,r0"); /* clear r0 */ ! 1191: 1156 000104CD 0d 00 50 movl $0,r0 ! 1192: 1157 000104D0 # asm("ldf r0"); /* load the Acc. with 0.0 */ ! 1193: 1158 000104D0 06 50 ldf r0 ! 1194: 1159 000104D2 # asm("addf _sgl_ld_acc"); /* add the 1st operand */ ! 1195: 1160 000104D2 c6 effffff610 addf _sgl_ld_acc ! 1196: 1161 000104D8 # asm("divf _sgl_value_1"); /* div the 2nd operand */ ! 1197: 1162 000104D8 f6 effffff60a divf _sgl_value_1 ! 1198: 1163 000104DE # asm("stf _sgl_st_acc"); /* store the result */ ! 1199: 1164 000104DE 26 effffff604 stf _sgl_st_acc ! 1200: 1165 000104E4 # if( force_loop ) ! 1201: 1166 000104E4 5d effffff5fe tstl _force_loop ! 1202: 1167 000104EA 31 02 jeql L362 ! 1203: 1168 000104EC # asm("brb _divf_8_lp1");; /* loop on the error */ ! 1204: 1169 000104EC 11 df brb _divf_8_lp1 ! 1205: 1170 000104EE L362: ! 1206: 1171 000104EE # /* ! 1207: 1172 000104EE # * end error loop - test the results ! 1208: 1173 000104EE # */ ! 1209: 1174 000104EE # if( sgl_st_acc != sgl_expected ) { /* COMPARE the values */ ! 1210: 1175 000104EE 1d effffff5f4 effffff5ef cmpl _sgl_st_acc,_sgl_expected ! 1211: 1176 000104F9 21 03 13 0086 jeql L363 ! 1212: 1177 000104FE # errcnt++; /* bump the error count */ ! 1213: 1178 000104FE 6d effffff5e4 incl _errcnt ! 1214: 1179 00010504 # if( prt_error ) { ! 1215: 1180 00010504 5d effffff5de tstl _prt_error ! 1216: 1181 0001050A 31 55 jeql L364 ! 1217: 1182 0001050C # writes(" \n"); /* start a new print line */ ! 1218: 1183 0001050C .data 1 ! 1219: 1184 00000f5c * L365: ! 1220: 1185 00000f5c * 200A00 .ascii " \12\0" ! 1221: 1186 00000f5f * .text ! 1222: 1187 0001050C dd 8f00000f5c pushl $L365 ! 1223: 1188 00010512 fe 08 effffff5cf callf $8,_writes ! 1224: 1189 00010519 # writes("cycle: "); ! 1225: 1190 00010519 .data 1 ! 1226: 1191 00000f5f * L366: ! 1227: 1192 00000f5f * 6379636C653A2000 .ascii "cycle: \0" ! 1228: 1193 00000f67 * .text ! 1229: 1194 00010519 dd 8f00000f5f pushl $L366 ! 1230: 1195 0001051F fe 08 effffff5c2 callf $8,_writes ! 1231: 1196 00010526 # writed( cycle ); ! 1232: 1197 00010526 dd effffff5bc pushl _cycle ! 1233: 1198 0001052C fe 08 effffff5b5 callf $8,_writed ! 1234: 1199 00010533 # writes(" DIVF test "); ! 1235: 1200 00010533 .data 1 ! 1236: 1201 00000f67 * L367: ! 1237: 1202 00000f67 * 2020444956462074657374200 .ascii " DIVF test \0" ! 1238: 0 ! 1239: 1203 00000f74 * .text ! 1240: 1204 00010533 dd 8f00000f67 pushl $L367 ! 1241: 1205 00010539 fe 08 effffff5a8 callf $8,_writes ! 1242: 1206 00010540 # writed( test_no ); ! 1243: 1207 00010540 dd effffff5a2 pushl _test_no ! 1244: 1208 00010546 fe 08 effffff59b callf $8,_writed ! 1245: 1209 0001054D # writes(", subtest 8 (Piped Entry) - BAD FINAL ACC\n"); ! 1246: 1210 0001054D .data 1 ! 1247: 1211 00000f74 * L368: ! 1248: 1212 00000f74 * 2C20737562746573742038202 .ascii ", subtest 8 (Piped Entry) - BAD FINAL ACC\12\0" ! 1249: 8506970656420456E74727929 ! 1250: 202D204241442046494E414C2 ! 1251: 04143430A00 ! 1252: 1213 00000f9f * .text ! 1253: 1214 0001054D dd 8f00000f74 pushl $L368 ! 1254: 1215 00010553 fe 08 effffff58e callf $8,_writes ! 1255: 1216 0001055A # print_divf_data(); ! 1256: 1217 0001055A fe 04 ef00000157 callf $4,_print_divf_data ! 1257: 1218 00010561 # } ! 1258: 1219 00010561 # if( halt_flg ) ! 1259: 1220 00010561 L364: ! 1260: 1221 00010561 5d effffff581 tstl _halt_flg ! 1261: 1222 00010567 31 09 jeql L369 ! 1262: 1223 00010569 # divf_er_halt( BAD_ACC_HLT ); /* halt on the error */ ! 1263: 1224 00010569 dd 01 pushl $1 ! 1264: 1225 0001056B fe 08 ef000001e4 callf $8,_divf_er_halt ! 1265: 1226 00010572 # if( loop_on_err ) { ! 1266: 1227 00010572 L369: ! 1267: 1228 00010572 5d effffff570 tstl _loop_on_err ! 1268: 1229 00010578 31 0a jeql L370 ! 1269: 1230 0001057A # force_loop = TRUE; /* set the force loop flag */ ! 1270: 1231 0001057A 0d 01 effffff567 movl $1,_force_loop ! 1271: 1232 00010581 # asm("brw _divf_8_lp1");; /* and loop on the error */ ! 1272: 1233 00010581 13 ff49 brw _divf_8_lp1 ! 1273: 1234 00010584 # } /* end of loop on error */ ! 1274: 1235 00010584 # } /* end of compare error */ ! 1275: 1236 00010584 L370: ! 1276: 1237 00010584 # } /* end of WHILE loop */ ! 1277: 1238 00010584 L363: ! 1278: 1239 00010584 L359: ! 1279: 1240 00010584 6d effffff55e incl _index ! 1280: 1241 0001058A 13 fef7 jbr L361 ! 1281: 1242 0001058D L360: ! 1282: 1243 0001058D # } /* end of subtest 8 */ ! 1283: 1244 0001058D 40 ret#2 ! 1284: 1245 0001058E .set L355,0x0 ! 1285: 1246 0001058E L357: ! 1286: 1247 0001058E 13 fee0 jbr L358 ! 1287: 1248 00010591 .data ! 1288: 1249 00000d28 * .text ! 1289: 1250 00010591 00 .align 1 ! 1290: 1251 00010592 .globl _divf_9 ! 1291: 1252 00010592 _divf_9: ! 1292: 1253 00010592 0000 .word L371 ! 1293: 1254 00010594 # ! 1294: 1255 00010594 # ! 1295: 1256 00010594 # ! 1296: 1257 00010594 # /************************************************************************ ! 1297: 1258 00010594 # * ! 1298: 1259 00010594 # * SUBTEST 9 - pipelined exit test ! 1299: 1260 00010594 # * ! 1300: 1261 00010594 # ************************************************************************/ ! 1301: 1262 00010594 # divf_9() ! 1302: 1263 00010594 # { ! 1303: 1264 00010594 13 011d jbr L373 ! 1304: 1265 00010597 L374: ! 1305: 1266 00010597 # force_loop = FALSE; ! 1306: 1267 00010597 4d effffff54b clrl _force_loop ! 1307: 1268 0001059D # subtest = 9; ! 1308: 1269 0001059D 0d 09 effffff544 movl $9,_subtest ! 1309: 1270 000105A4 # for( index = 0; index < max_divf_1_index; index++ ) { ! 1310: 1271 000105A4 4d effffff53e clrl _index ! 1311: 1272 000105AA L377: ! 1312: 1273 000105AA 1d effffff538 effffff533 cmpl _index,_max_divf_1_index ! 1313: 1274 000105B5 91 03 13 00f9 jgeq L376 ! 1314: 1275 000105BA # sgl_ld_acc = divf_1_data[index].op_1; /* get operand 1 */ ! 1315: 1276 000105BA 5c 0c effffff527 50 mull3 $12,_index,r0 ! 1316: 1277 000105C2 0d e000000000 effffff51b movl _divf_1_data(r0),_sgl_ld_acc ! 1317: 1278 000105CD # sgl_value_1 = divf_1_data[index].op_2; /* get operand 2 */ ! 1318: 1279 000105CD 5c 0c effffff514 50 mull3 $12,_index,r0 ! 1319: 1280 000105D5 0d e000000004 effffff508 movl _divf_1_data+4(r0),_sgl_value_1 ! 1320: 1281 000105E0 # sgl_expected = divf_1_data[index].exp; /* get expected result */ ! 1321: 1282 000105E0 5c 0c effffff501 50 mull3 $12,_index,r0 ! 1322: 1283 000105E8 0d e000000008 effffff4f5 movl _divf_1_data+8(r0),_sgl_expected ! 1323: 1284 000105F3 # /* ! 1324: 1285 000105F3 # * If LOOP ON ERROR is set, this is the loop for this subtest. ! 1325: 1286 000105F3 # * The force loop flag is set after the first error. ! 1326: 1287 000105F3 # */ ! 1327: 1288 000105F3 # asm("_divf_9_lp1:"); ! 1328: 1289 000105F3 _divf_9_lp1: ! 1329: 1290 000105F3 # asm("movl $0,r0"); /* clear r0 */ ! 1330: 1291 000105F3 0d 00 50 movl $0,r0 ! 1331: 1292 000105F6 # asm("ldf _sgl_ld_acc"); /* load the 1st operand */ ! 1332: 1293 000105F6 06 effffff4ec ldf _sgl_ld_acc ! 1333: 1294 000105FC # asm("divf _sgl_value_1"); /* divide the 2nd operand */ ! 1334: 1295 000105FC f6 effffff4e6 divf _sgl_value_1 ! 1335: 1296 00010602 # asm("addf r0"); /* add a 0.0 to the result */ ! 1336: 1297 00010602 c6 50 addf r0 ! 1337: 1298 00010604 # asm("stf _sgl_st_acc"); /* store the result */ ! 1338: 1299 00010604 26 effffff4de stf _sgl_st_acc ! 1339: 1300 0001060A # if( force_loop ) ! 1340: 1301 0001060A 5d effffff4d8 tstl _force_loop ! 1341: 1302 00010610 31 02 jeql L378 ! 1342: 1303 00010612 # asm("brb _divf_9_lp1");; /* loop on the error */ ! 1343: 1304 00010612 11 df brb _divf_9_lp1 ! 1344: 1305 00010614 L378: ! 1345: 1306 00010614 # /* ! 1346: 1307 00010614 # * end error loop - test the results ! 1347: 1308 00010614 # */ ! 1348: 1309 00010614 # if( sgl_st_acc != sgl_expected ) { /* COMPARE the values */ ! 1349: 1310 00010614 1d effffff4ce effffff4c9 cmpl _sgl_st_acc,_sgl_expected ! 1350: 1311 0001061F 21 03 13 0086 jeql L379 ! 1351: 1312 00010624 # errcnt++; /* bump the error count */ ! 1352: 1313 00010624 6d effffff4be incl _errcnt ! 1353: 1314 0001062A # if( prt_error ) { ! 1354: 1315 0001062A 5d effffff4b8 tstl _prt_error ! 1355: 1316 00010630 31 55 jeql L380 ! 1356: 1317 00010632 # writes(" \n"); /* start a new print line */ ! 1357: 1318 00010632 .data 1 ! 1358: 1319 00000f9f * L381: ! 1359: 1320 00000f9f * 200A00 .ascii " \12\0" ! 1360: 1321 00000fa2 * .text ! 1361: 1322 00010632 dd 8f00000f9f pushl $L381 ! 1362: 1323 00010638 fe 08 effffff4a9 callf $8,_writes ! 1363: 1324 0001063F # writes("cycle: "); ! 1364: 1325 0001063F .data 1 ! 1365: 1326 00000fa2 * L382: ! 1366: 1327 00000fa2 * 6379636C653A2000 .ascii "cycle: \0" ! 1367: 1328 00000faa * .text ! 1368: 1329 0001063F dd 8f00000fa2 pushl $L382 ! 1369: 1330 00010645 fe 08 effffff49c callf $8,_writes ! 1370: 1331 0001064C # writed( cycle ); ! 1371: 1332 0001064C dd effffff496 pushl _cycle ! 1372: 1333 00010652 fe 08 effffff48f callf $8,_writed ! 1373: 1334 00010659 # writes(" DIVF test "); ! 1374: 1335 00010659 .data 1 ! 1375: 1336 00000faa * L383: ! 1376: 1337 00000faa * 2020444956462074657374200 .ascii " DIVF test \0" ! 1377: 0 ! 1378: 1338 00000fb7 * .text ! 1379: 1339 00010659 dd 8f00000faa pushl $L383 ! 1380: 1340 0001065F fe 08 effffff482 callf $8,_writes ! 1381: 1341 00010666 # writed( test_no ); ! 1382: 1342 00010666 dd effffff47c pushl _test_no ! 1383: 1343 0001066C fe 08 effffff475 callf $8,_writed ! 1384: 1344 00010673 # writes(", subtest 9 (Piped Exit) - BAD FINAL ACC\n"); ! 1385: 1345 00010673 .data 1 ! 1386: 1346 00000fb7 * L384: ! 1387: 1347 00000fb7 * 2C20737562746573742039202 .ascii ", subtest 9 (Piped Exit) - BAD FINAL ACC\12\0" ! 1388: 8506970656420457869742920 ! 1389: 2D204241442046494E414C204 ! 1390: 143430A00 ! 1391: 1348 00000fe1 * .text ! 1392: 1349 00010673 dd 8f00000fb7 pushl $L384 ! 1393: 1350 00010679 fe 08 effffff468 callf $8,_writes ! 1394: 1351 00010680 # print_divf_data(); ! 1395: 1352 00010680 fe 04 ef00000031 callf $4,_print_divf_data ! 1396: 1353 00010687 # } ! 1397: 1354 00010687 # if( halt_flg ) ! 1398: 1355 00010687 L380: ! 1399: 1356 00010687 5d effffff45b tstl _halt_flg ! 1400: 1357 0001068D 31 09 jeql L385 ! 1401: 1358 0001068F # divf_er_halt( BAD_ACC_HLT ); /* halt on the error */ ! 1402: 1359 0001068F dd 01 pushl $1 ! 1403: 1360 00010691 fe 08 ef000000be callf $8,_divf_er_halt ! 1404: 1361 00010698 # if( loop_on_err ) { ! 1405: 1362 00010698 L385: ! 1406: 1363 00010698 5d effffff44a tstl _loop_on_err ! 1407: 1364 0001069E 31 0a jeql L386 ! 1408: 1365 000106A0 # force_loop = TRUE; /* set the force loop flag */ ! 1409: 1366 000106A0 0d 01 effffff441 movl $1,_force_loop ! 1410: 1367 000106A7 # asm("brw _divf_9_lp1");; /* and loop on the error */ ! 1411: 1368 000106A7 13 ff49 brw _divf_9_lp1 ! 1412: 1369 000106AA # } /* end of loop on error */ ! 1413: 1370 000106AA # } /* end of compare error */ ! 1414: 1371 000106AA L386: ! 1415: 1372 000106AA # } /* end of WHILE loop */ ! 1416: 1373 000106AA L379: ! 1417: 1374 000106AA L375: ! 1418: 1375 000106AA 6d effffff438 incl _index ! 1419: 1376 000106B0 13 fef7 jbr L377 ! 1420: 1377 000106B3 L376: ! 1421: 1378 000106B3 # } /* end of subtest 9 */ ! 1422: 1379 000106B3 40 ret#2 ! 1423: 1380 000106B4 .set L371,0x0 ! 1424: 1381 000106B4 L373: ! 1425: 1382 000106B4 13 fee0 jbr L374 ! 1426: 1383 000106B7 .data ! 1427: 1384 00000d28 * .text ! 1428: 1385 000106B7 00 .align 1 ! 1429: 1386 000106B8 .globl _print_divf_data ! 1430: 1387 000106B8 _print_divf_data: ! 1431: 1388 000106B8 0000 .word L387 ! 1432: 1389 000106BA # ! 1433: 1390 000106BA # ! 1434: 1391 000106BA # ! 1435: 1392 000106BA # /************************************************************************** ! 1436: 1393 000106BA # * ! 1437: 1394 000106BA # * PRINT THE DATA AND STORE RESULTS ! 1438: 1395 000106BA # * ! 1439: 1396 000106BA # * initial Acc = xxxxxxxx, stored = xxxxxxxx, data index = xx ! 1440: 1397 000106BA # * operand = xxxxxxxx, expected = xxxxxxxx ! 1441: 1398 000106BA # **************************************************************************/ ! 1442: 1399 000106BA # print_divf_data() ! 1443: 1400 000106BA # { ! 1444: 1401 000106BA 13 0095 jbr L389 ! 1445: 1402 000106BD L390: ! 1446: 1403 000106BD # writes("initial Acc = "); ! 1447: 1404 000106BD .data 1 ! 1448: 1405 00000fe1 * L391: ! 1449: 1406 00000fe1 * 696E697469616C20416363203 .ascii "initial Acc = \0" ! 1450: D2000 ! 1451: 1407 00000ff0 * .text ! 1452: 1408 000106BD dd 8f00000fe1 pushl $L391 ! 1453: 1409 000106C3 fe 08 effffff41e callf $8,_writes ! 1454: 1410 000106CA # write32h( sgl_ld_acc ); ! 1455: 1411 000106CA dd effffff418 pushl _sgl_ld_acc ! 1456: 1412 000106D0 fe 08 effffff411 callf $8,_write32h ! 1457: 1413 000106D7 # writes(", stored = "); ! 1458: 1414 000106D7 .data 1 ! 1459: 1415 00000ff0 * L392: ! 1460: 1416 00000ff0 * 2C2020202073746F726564203 .ascii ", stored = \0" ! 1461: D2000 ! 1462: 1417 00000fff * .text ! 1463: 1418 000106D7 dd 8f00000ff0 pushl $L392 ! 1464: 1419 000106DD fe 08 effffff404 callf $8,_writes ! 1465: 1420 000106E4 # write32h( sgl_st_acc ); ! 1466: 1421 000106E4 dd effffff3fe pushl _sgl_st_acc ! 1467: 1422 000106EA fe 08 effffff3f7 callf $8,_write32h ! 1468: 1423 000106F1 # writes(", data index = "); ! 1469: 1424 000106F1 .data 1 ! 1470: 1425 00000fff * L393: ! 1471: 1426 00000fff * 2C20206461746120696E64657 .ascii ", data index = \0" ! 1472: 8203D2000 ! 1473: 1427 00001010 * .text ! 1474: 1428 000106F1 dd 8f00000fff pushl $L393 ! 1475: 1429 000106F7 fe 08 effffff3ea callf $8,_writes ! 1476: 1430 000106FE # writed( index ); ! 1477: 1431 000106FE dd effffff3e4 pushl _index ! 1478: 1432 00010704 fe 08 effffff3dd callf $8,_writed ! 1479: 1433 0001070B # writec('\n'); ! 1480: 1434 0001070B dd 0a pushl $10 ! 1481: 1435 0001070D fe 08 effffff3d4 callf $8,_writec ! 1482: 1436 00010714 # writes(" operand = "); ! 1483: 1437 00010714 .data 1 ! 1484: 1438 00001010 * L395: ! 1485: 1439 00001010 * 202020206F706572616E64203 .ascii " operand = \0" ! 1486: D2000 ! 1487: 1440 0000101f * .text ! 1488: 1441 00010714 dd 8f00001010 pushl $L395 ! 1489: 1442 0001071A fe 08 effffff3c7 callf $8,_writes ! 1490: 1443 00010721 # write32h( sgl_value_1 ); ! 1491: 1444 00010721 dd effffff3c1 pushl _sgl_value_1 ! 1492: 1445 00010727 fe 08 effffff3ba callf $8,_write32h ! 1493: 1446 0001072E # writes(", expected = "); ! 1494: 1447 0001072E .data 1 ! 1495: 1448 0000101f * L396: ! 1496: 1449 0000101f * 2C20206578706563746564203 .ascii ", expected = \0" ! 1497: D2000 ! 1498: 1450 0000102e * .text ! 1499: 1451 0001072E dd 8f0000101f pushl $L396 ! 1500: 1452 00010734 fe 08 effffff3ad callf $8,_writes ! 1501: 1453 0001073B # write32h( sgl_expected ); ! 1502: 1454 0001073B dd effffff3a7 pushl _sgl_expected ! 1503: 1455 00010741 fe 08 effffff3a0 callf $8,_write32h ! 1504: 1456 00010748 # writec('\n'); ! 1505: 1457 00010748 dd 0a pushl $10 ! 1506: 1458 0001074A fe 08 effffff397 callf $8,_writec ! 1507: 1459 00010751 # } ! 1508: 1460 00010751 40 ret#2 ! 1509: 1461 00010752 .set L387,0x0 ! 1510: 1462 00010752 L389: ! 1511: 1463 00010752 13 ff68 jbr L390 ! 1512: 1464 00010755 .data ! 1513: 1465 00000d28 * .text ! 1514: 1466 00010755 00 .align 1 ! 1515: 1467 00010756 .globl _divf_er_halt ! 1516: 1468 00010756 _divf_er_halt: ! 1517: 1469 00010756 0000 .word L397 ! 1518: 1470 00010758 # ! 1519: 1471 00010758 # ! 1520: 1472 00010758 # ! 1521: 1473 00010758 # /************************************************************************** ! 1522: 1474 00010758 # * ! 1523: 1475 00010758 # * HALT ON ERROR ROUTINE ! 1524: 1476 00010758 # * ! 1525: 1477 00010758 # **************************************************************************/ ! 1526: 1478 00010758 # divf_er_halt( halt_code ) ! 1527: 1479 00010758 # int halt_code; ! 1528: 1480 00010758 # { ! 1529: 1481 00010758 13 00af jbr L399 ! 1530: 1482 0001075B L400: ! 1531: 1483 0001075B # sgl_dummy1 = halt_code; /* get the error type */ ! 1532: 1484 0001075B 0d ad04 effffff385 movl 4(fp),_sgl_dummy1 ! 1533: 1485 00010763 # asm("movl _test_no,r0"); /* r0 = test number */ ! 1534: 1486 00010763 0d effffff37f 50 movl _test_no,r0 ! 1535: 1487 0001076A # asm("movl _subtest,r1"); /* r1 = subtest number */ ! 1536: 1488 0001076A 0d effffff378 51 movl _subtest,r1 ! 1537: 1489 00010771 # asm("movl _sgl_dummy1,r2"); /* r2 = error code */ ! 1538: 1490 00010771 0d effffff371 52 movl _sgl_dummy1,r2 ! 1539: 1491 00010778 # asm("movl _cycle,r3"); /* r3 = cycle count */ ! 1540: 1492 00010778 0d effffff36a 53 movl _cycle,r3 ! 1541: 1493 0001077F # asm("movl _sgl_ld_acc,r4"); /* r4 = initial data */ ! 1542: 1494 0001077F 0d effffff363 54 movl _sgl_ld_acc,r4 ! 1543: 1495 00010786 # asm("movl _sgl_value_1,r5"); /* r5 = data dived */ ! 1544: 1496 00010786 0d effffff35c 55 movl _sgl_value_1,r5 ! 1545: 1497 0001078D # asm("movl _sgl_st_acc,r6"); /* r6 = data stored */ ! 1546: 1498 0001078D 0d effffff355 56 movl _sgl_st_acc,r6 ! 1547: 1499 00010794 # if( halt_code == BAD_ACC_HLT ) { ! 1548: 1500 00010794 1d ad04 01 cmpl 4(fp),$1 ! 1549: 1501 00010798 21 10 jneq L401 ! 1550: 1502 0001079A # asm("movl _sgl_expected,r7"); /* r7 = data expected */ ! 1551: 1503 0001079A 0d effffff348 57 movl _sgl_expected,r7 ! 1552: 1504 000107A1 # asm("movl _index,r8"); /* r8 = data index */ ! 1553: 1505 000107A1 0d effffff341 58 movl _index,r8 ! 1554: 1506 000107A8 # } else ! 1555: 1507 000107A8 11 5e jbr L402 ! 1556: 1508 000107AA L401: ! 1557: 1509 000107AA # if( halt_code == BAD_REG_HLT ) { ! 1558: 1510 000107AA 1d ad04 02 cmpl 4(fp),$2 ! 1559: 1511 000107AE 21 3d jneq L403 ! 1560: 1512 000107B0 # sgl_dummy1 = load_regs[index2]; ! 1561: 1513 000107B0 0d effffff332 50 movl _index2,r0 ! 1562: 1514 000107B7 0d 40effffff32a movl _load_regs[r0],_sgl_dummy1 ! 1563: effffff325 ! 1564: 1515 000107C3 # sgl_dummy2 = store_regs[index2]; ! 1565: 1516 000107C3 0d effffff31f 50 movl _index2,r0 ! 1566: 1517 000107CA 0d 40effffff317 movl _store_regs[r0],_sgl_dummy2 ! 1567: effffff312 ! 1568: 1518 000107D6 # asm("movl _index2,r7"); /* r7 = bad register # */ ! 1569: 1519 000107D6 0d effffff30c 57 movl _index2,r7 ! 1570: 1520 000107DD # asm("movl _sgl_dummy2,r8"); /* r8 = actual value */ ! 1571: 1521 000107DD 0d effffff305 58 movl _sgl_dummy2,r8 ! 1572: 1522 000107E4 # asm("movl _sgl_dummy1,r9"); /* r9 = expected value */ ! 1573: 1523 000107E4 0d effffff2fe 59 movl _sgl_dummy1,r9 ! 1574: 1524 000107EB # } else ! 1575: 1525 000107EB 11 1b jbr L404 ! 1576: 1526 000107ED L403: ! 1577: 1527 000107ED # if( halt_code == BAD_PSL_HLT ) { ! 1578: 1528 000107ED 1d ad04 03 cmpl 4(fp),$3 ! 1579: 1529 000107F1 21 15 jneq L405 ! 1580: 1530 000107F3 # asm("movl _init_psl,r7"); /* r7 = initial PSL */ ! 1581: 1531 000107F3 0d effffff2ef 57 movl _init_psl,r7 ! 1582: 1532 000107FA # asm("movl _psl_val,r8"); /* r8 = final PSL */ ! 1583: 1533 000107FA 0d effffff2e8 58 movl _psl_val,r8 ! 1584: 1534 00010801 # asm("movl _exp_psl,r9"); /* r9 = expected PSL */ ! 1585: 1535 00010801 0d effffff2e1 59 movl _exp_psl,r9 ! 1586: 1536 00010808 # }; ! 1587: 1537 00010808 L405: ! 1588: 1538 00010808 L404: ! 1589: 1539 00010808 L402: ! 1590: 1540 00010808 # asm("halt"); /* HALT ... */ ! 1591: 1541 00010808 00 halt ! 1592: 1542 00010809 # } ! 1593: 1543 00010809 40 ret#2 ! 1594: 1544 0001080A .set L397,0x0 ! 1595: 1545 0001080A L399: ! 1596: 1546 0001080A 13 ff4e jbr L400 ! 1597: 1547 0001080D .data ! 1598: 1547 000202F5 .data
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.