|
|
1.1 ! root 1: 1 00000000 LL0: ! 2: 2 00000000 .data ! 3: 3 0000093c * .text ! 4: 4 00000000 .align 1 ! 5: 5 00000000 .globl _lnf ! 6: 6 00000000 _lnf: ! 7: 7 00010810 0000 .word L215 ! 8: 8 00010812 # ! 9: 9 00010812 # #include "fpp_defs.h" ! 10: 10 00010812 # ! 11: 11 00010812 # ! 12: 12 00010812 # /***************************************************************************** ! 13: 13 00010812 # * ! 14: 14 00010812 # * LNF - SINGLE PRECISION FLOATING POINT LOAD_NEGATE TEST ! 15: 15 00010812 # * ! 16: 16 00010812 # *****************************************************************************/ ! 17: 17 00010812 # lnf() ! 18: 18 00010812 # { ! 19: 19 00010812 11 57 jbr L217 ! 20: 20 00010814 L218: ! 21: 21 00010814 # asm(".globl _lnf_t"); ! 22: 22 00010814 .globl _lnf_t ! 23: 23 00010814 # asm("_lnf_t:"); /* entry address */ ! 24: 24 00010814 _lnf_t: ! 25: 25 00010814 # if( ( cycle == 1 ) && ( prt_hdrs ) ) /* print headers on 1st pass */ ! 26: 26 00010814 1d effffffff6 01 cmpl _cycle,$1 ! 27: 27 0001081B 21 15 jneq L219 ! 28: 28 0001081D 5d efffffffed tstl _prt_hdrs ! 29: 29 00010823 31 0d jeql L219 ! 30: 30 00010825 # writes(" LNF"); ! 31: 31 00010825 .data 1 ! 32: 32 0000093c * L221: ! 33: 33 0000093c * 204C4E4600 .ascii " LNF\0" ! 34: 34 00000941 * .text ! 35: 35 00010825 dd 8f0000093c pushl $L221 ! 36: 36 0001082B fe 08 efffffffde callf $8,_writes ! 37: 37 00010832 # lnf_1(); /* load through a register */ ! 38: 38 00010832 L219: ! 39: 39 00010832 fe 04 ef00000035 callf $4,_lnf_1 ! 40: 40 00010839 # lnf_2(); /* load through the cache */ ! 41: 41 00010839 fe 04 ef00000164 callf $4,_lnf_2 ! 42: 42 00010840 # lnf_3(); /* register stability */ ! 43: 43 00010840 fe 04 ef0000028d callf $4,_lnf_3 ! 44: 44 00010847 # lnf_4(); /* PSL stability test */ ! 45: 45 00010847 fe 04 ef00000424 callf $4,_lnf_4 ! 46: 46 0001084E # lnf_5(); /* pipelined entry test */ ! 47: 47 0001084E fe 04 ef000005c3 callf $4,_lnf_5 ! 48: 48 00010855 # if ( !no_fpp_wcs ) ! 49: 49 00010855 5d efffffffb5 tstl _no_fpp_wcs ! 50: 50 0001085B 21 07 jneq L227 ! 51: 51 0001085D # lnf_6();; /* pipelined exit test */ ! 52: 52 0001085D fe 04 ef000006c6 callf $4,_lnf_6 ! 53: 53 00010864 L227: ! 54: 54 00010864 # asm("jmp *return"); /* return to the test monitor */ ! 55: 55 00010864 71 ffffffffa6 jmp *return ! 56: 56 0001086A # } ! 57: 57 0001086A 40 ret#2 ! 58: 58 0001086B .set L215,0x0 ! 59: 59 0001086B L217: ! 60: 60 0001086B 11 a7 jbr L218 ! 61: 61 0001086D .data ! 62: 62 0000093c * .text ! 63: 63 0001086D 00 .align 1 ! 64: 64 0001086E .globl _lnf_1 ! 65: 65 0001086E _lnf_1: ! 66: 66 0001086E 0000 .word L229 ! 67: 67 00010870 # ! 68: 68 00010870 # ! 69: 69 00010870 # ! 70: 70 00010870 # /************************************************************************ ! 71: 71 00010870 # * ! 72: 72 00010870 # * SUBTEST 1 - load_negate through a register ! 73: 73 00010870 # * ! 74: 74 00010870 # ************************************************************************/ ! 75: 75 00010870 # lnf_1() ! 76: 76 00010870 # { ! 77: 77 00010870 13 012e jbr L231 ! 78: 78 00010873 L232: ! 79: 79 00010873 # force_loop = FALSE; ! 80: 80 00010873 4d efffffff97 clrl _force_loop ! 81: 81 00010879 # subtest = 1; ! 82: 82 00010879 0d 01 efffffff90 movl $1,_subtest ! 83: 83 00010880 # for( index = 0; index < max_lnf_1_index; index++ ) { ! 84: 84 00010880 4d efffffff8a clrl _index ! 85: 85 00010886 L235: ! 86: 86 00010886 1d efffffff84 efffffff7f cmpl _index,_max_lnf_1_index ! 87: 87 00010891 91 03 13 010a jgeq L234 ! 88: 88 00010896 # sgl_ld_acc = lnf_1_data[index].ld; /* get value to negate */ ! 89: 89 00010896 0d efffffff74 50 movl _index,r0 ! 90: 90 0001089D 48 03 50 50 shll $3,r0,r0 ! 91: 91 000108A1 0d e000000000 efffffff64 movl _lnf_1_data(r0),_sgl_ld_acc ! 92: 92 000108AC # sgl_expected = lnf_1_data[index].exp; /* get expected result */ ! 93: 93 000108AC 0d efffffff5e 50 movl _index,r0 ! 94: 94 000108B3 48 03 50 50 shll $3,r0,r0 ! 95: 95 000108B7 0d e000000004 efffffff4e movl _lnf_1_data+4(r0),_sgl_expected ! 96: 96 000108C2 # /* ! 97: 97 000108C2 # * If LOOP ON ERROR is set, this is the loop for this subtest. ! 98: 98 000108C2 # * The force loop flag is set after the first error. ! 99: 99 000108C2 # */ ! 100: 100 000108C2 # asm("_lnf_1_lp1:"); ! 101: 101 000108C2 _lnf_1_lp1: ! 102: 102 000108C2 # asm("movl _sgl_ld_acc,r4"); /* get the value to negate */ ! 103: 103 000108C2 0d efffffff48 54 movl _sgl_ld_acc,r4 ! 104: 104 000108C9 # asm("lnf r4"); /* load and negate value */ ! 105: 105 000108C9 16 54 lnf r4 ! 106: 106 000108CB # asm("stf r5"); /* store the result in R5 */ ! 107: 107 000108CB 26 55 stf r5 ! 108: 108 000108CD # if( force_loop ) ! 109: 109 000108CD 5d efffffff3d tstl _force_loop ! 110: 110 000108D3 31 02 jeql L236 ! 111: 111 000108D5 # asm("brb _lnf_1_lp1");; /* loop on the error */ ! 112: 112 000108D5 11 eb brb _lnf_1_lp1 ! 113: 113 000108D7 L236: ! 114: 114 000108D7 # /* ! 115: 115 000108D7 # * end error loop - test the results ! 116: 116 000108D7 # */ ! 117: 117 000108D7 # asm("movl r5,_sgl_st_acc"); /* move R5 data to cache */ ! 118: 118 000108D7 0d 55 efffffff32 movl r5,_sgl_st_acc ! 119: 119 000108DE # if( sgl_st_acc != sgl_expected ) { /* COMPARE the values */ ! 120: 120 000108DE 1d efffffff2c efffffff27 cmpl _sgl_st_acc,_sgl_expected ! 121: 121 000108E9 21 03 13 00a9 jeql L237 ! 122: 122 000108EE # errcnt++; /* bump the error count */ ! 123: 123 000108EE 6d efffffff1c incl _errcnt ! 124: 124 000108F4 # if( prt_error ) { ! 125: 125 000108F4 5d efffffff16 tstl _prt_error ! 126: 126 000108FA 31 78 jeql L238 ! 127: 127 000108FC # writes(" \n"); /* start a new print line */ ! 128: 128 000108FC .data 1 ! 129: 129 00000941 * L239: ! 130: 130 00000941 * 200A00 .ascii " \12\0" ! 131: 131 00000944 * .text ! 132: 132 000108FC dd 8f00000941 pushl $L239 ! 133: 133 00010902 fe 08 efffffff07 callf $8,_writes ! 134: 134 00010909 # writes("cycle: "); ! 135: 135 00010909 .data 1 ! 136: 136 00000944 * L240: ! 137: 137 00000944 * 6379636C653A2000 .ascii "cycle: \0" ! 138: 138 0000094c * .text ! 139: 139 00010909 dd 8f00000944 pushl $L240 ! 140: 140 0001090F fe 08 effffffefa callf $8,_writes ! 141: 141 00010916 # writed( cycle ); ! 142: 142 00010916 dd effffffef4 pushl _cycle ! 143: 143 0001091C fe 08 effffffeed callf $8,_writed ! 144: 144 00010923 # writes(" LNF test "); ! 145: 145 00010923 .data 1 ! 146: 146 0000094c * L242: ! 147: 147 0000094c * 20204C4E4620746573742000 .ascii " LNF test \0" ! 148: 148 00000958 * .text ! 149: 149 00010923 dd 8f0000094c pushl $L242 ! 150: 150 00010929 fe 08 effffffee0 callf $8,_writes ! 151: 151 00010930 # writed( test_no ); ! 152: 152 00010930 dd effffffeda pushl _test_no ! 153: 153 00010936 fe 08 effffffed3 callf $8,_writed ! 154: 154 0001093D # writes(", subtest 1 (Reg. Data) - BAD FINAL ACC\n"); ! 155: 155 0001093D .data 1 ! 156: 156 00000958 * L243: ! 157: 157 00000958 * 2C20737562746573742031202 .ascii ", subtest 1 (Reg. Data) - BAD FINAL ACC\12\0" ! 158: 85265672E204461746129202D ! 159: 204241442046494E414C20414 ! 160: 3430A00 ! 161: 158 00000981 * .text ! 162: 159 0001093D dd 8f00000958 pushl $L243 ! 163: 160 00010943 fe 08 effffffec6 callf $8,_writes ! 164: 161 0001094A # print_lnf_data(); ! 165: 162 0001094A fe 04 ef000006eb callf $4,_print_lnf_data ! 166: 163 00010951 # writes(" Acc expected = "); ! 167: 164 00010951 .data 1 ! 168: 165 00000981 * L245: ! 169: 166 00000981 * 2020202020202020202020202 .ascii " Acc expected = \0" ! 170: 0202020202020202020202020 ! 171: 4163632065787065637465642 ! 172: 03D2000 ! 173: 167 000009aa * .text ! 174: 168 00010951 dd 8f00000981 pushl $L245 ! 175: 169 00010957 fe 08 effffffeb2 callf $8,_writes ! 176: 170 0001095E # write32h( sgl_expected ); ! 177: 171 0001095E dd effffffeac pushl _sgl_expected ! 178: 172 00010964 fe 08 effffffea5 callf $8,_write32h ! 179: 173 0001096B # writec('\n'); ! 180: 174 0001096B dd 0a pushl $10 ! 181: 175 0001096D fe 08 effffffe9c callf $8,_writec ! 182: 176 00010974 # } ! 183: 177 00010974 # if( halt_flg ) ! 184: 178 00010974 L238: ! 185: 179 00010974 5d effffffe96 tstl _halt_flg ! 186: 180 0001097A 31 09 jeql L248 ! 187: 181 0001097C # lnf_er_halt( BAD_ACC_HLT ); /* halt on the error */ ! 188: 182 0001097C dd 01 pushl $1 ! 189: 183 0001097E fe 08 ef00000715 callf $8,_lnf_er_halt ! 190: 184 00010985 # if( loop_on_err ) { ! 191: 185 00010985 L248: ! 192: 186 00010985 5d effffffe85 tstl _loop_on_err ! 193: 187 0001098B 31 0a jeql L250 ! 194: 188 0001098D # force_loop = TRUE; /* set the force loop flag */ ! 195: 189 0001098D 0d 01 effffffe7c movl $1,_force_loop ! 196: 190 00010994 # asm("brw _lnf_1_lp1");; /* and loop on the error */ ! 197: 191 00010994 13 ff2b brw _lnf_1_lp1 ! 198: 192 00010997 # } /* end of loop on error */ ! 199: 193 00010997 # } /* end of compare error */ ! 200: 194 00010997 L250: ! 201: 195 00010997 # } /* end of WHILE loop */ ! 202: 196 00010997 L237: ! 203: 197 00010997 L233: ! 204: 198 00010997 6d effffffe73 incl _index ! 205: 199 0001099D 13 fee6 jbr L235 ! 206: 200 000109A0 L234: ! 207: 201 000109A0 # } /* end of subtest 1 */ ! 208: 202 000109A0 40 ret#2 ! 209: 203 000109A1 .set L229,0x0 ! 210: 204 000109A1 L231: ! 211: 205 000109A1 13 fecf jbr L232 ! 212: 206 000109A4 .data ! 213: 207 0000093c * .text ! 214: 208 000109A4 .align 1 ! 215: 209 000109A4 .globl _lnf_2 ! 216: 210 000109A4 _lnf_2: ! 217: 211 000109A4 0000 .word L251 ! 218: 212 000109A6 # ! 219: 213 000109A6 # ! 220: 214 000109A6 # ! 221: 215 000109A6 # /************************************************************************ ! 222: 216 000109A6 # * ! 223: 217 000109A6 # * SUBTEST 2 - load_negate through memory ! 224: 218 000109A6 # * ! 225: 219 000109A6 # ************************************************************************/ ! 226: 220 000109A6 # lnf_2() ! 227: 221 000109A6 # { ! 228: 222 000109A6 13 0128 jbr L253 ! 229: 223 000109A9 L254: ! 230: 224 000109A9 # force_loop = FALSE; ! 231: 225 000109A9 4d effffffe61 clrl _force_loop ! 232: 226 000109AF # subtest = 2; ! 233: 227 000109AF 0d 02 effffffe5a movl $2,_subtest ! 234: 228 000109B6 # for( index = 0; index < max_lnf_1_index; index++ ) { ! 235: 229 000109B6 4d effffffe54 clrl _index ! 236: 230 000109BC L257: ! 237: 231 000109BC 1d effffffe4e effffffe49 cmpl _index,_max_lnf_1_index ! 238: 232 000109C7 91 03 13 0104 jgeq L256 ! 239: 233 000109CC # sgl_ld_acc = lnf_1_data[index].ld; /* get value to negate */ ! 240: 234 000109CC 0d effffffe3e 50 movl _index,r0 ! 241: 235 000109D3 48 03 50 50 shll $3,r0,r0 ! 242: 236 000109D7 0d e000000000 effffffe2e movl _lnf_1_data(r0),_sgl_ld_acc ! 243: 237 000109E2 # sgl_expected = lnf_1_data[index].exp; /* get expected result */ ! 244: 238 000109E2 0d effffffe28 50 movl _index,r0 ! 245: 239 000109E9 48 03 50 50 shll $3,r0,r0 ! 246: 240 000109ED 0d e000000004 effffffe18 movl _lnf_1_data+4(r0),_sgl_expected ! 247: 241 000109F8 # /* ! 248: 242 000109F8 # * If LOOP ON ERROR is set, this is the loop for this subtest. ! 249: 243 000109F8 # * The force loop flag is set after the first error. ! 250: 244 000109F8 # */ ! 251: 245 000109F8 # asm("_lnf_2_lp1:"); ! 252: 246 000109F8 _lnf_2_lp1: ! 253: 247 000109F8 # asm("lnf _sgl_ld_acc"); /* load and negate the value */ ! 254: 248 000109F8 16 effffffe12 lnf _sgl_ld_acc ! 255: 249 000109FE # asm("stf _sgl_st_acc"); /* store the result */ ! 256: 250 000109FE 26 effffffe0c stf _sgl_st_acc ! 257: 251 00010A04 # if( force_loop ) ! 258: 252 00010A04 5d effffffe06 tstl _force_loop ! 259: 253 00010A0A 31 02 jeql L258 ! 260: 254 00010A0C # asm("brb _lnf_2_lp1");; /* loop on the error */ ! 261: 255 00010A0C 11 ea brb _lnf_2_lp1 ! 262: 256 00010A0E L258: ! 263: 257 00010A0E # /* ! 264: 258 00010A0E # * end error loop - test the results ! 265: 259 00010A0E # */ ! 266: 260 00010A0E # if( sgl_st_acc != sgl_expected ) { /* COMPARE the values */ ! 267: 261 00010A0E 1d effffffdfc effffffdf7 cmpl _sgl_st_acc,_sgl_expected ! 268: 262 00010A19 21 03 13 00a9 jeql L259 ! 269: 263 00010A1E # errcnt++; /* bump the error count */ ! 270: 264 00010A1E 6d effffffdec incl _errcnt ! 271: 265 00010A24 # if( prt_error ) { ! 272: 266 00010A24 5d effffffde6 tstl _prt_error ! 273: 267 00010A2A 31 78 jeql L260 ! 274: 268 00010A2C # writes(" \n"); /* start a new print line */ ! 275: 269 00010A2C .data 1 ! 276: 270 000009aa * L261: ! 277: 271 000009aa * 200A00 .ascii " \12\0" ! 278: 272 000009ad * .text ! 279: 273 00010A2C dd 8f000009aa pushl $L261 ! 280: 274 00010A32 fe 08 effffffdd7 callf $8,_writes ! 281: 275 00010A39 # writes("cycle: "); ! 282: 276 00010A39 .data 1 ! 283: 277 000009ad * L262: ! 284: 278 000009ad * 6379636C653A2000 .ascii "cycle: \0" ! 285: 279 000009b5 * .text ! 286: 280 00010A39 dd 8f000009ad pushl $L262 ! 287: 281 00010A3F fe 08 effffffdca callf $8,_writes ! 288: 282 00010A46 # writed( cycle ); ! 289: 283 00010A46 dd effffffdc4 pushl _cycle ! 290: 284 00010A4C fe 08 effffffdbd callf $8,_writed ! 291: 285 00010A53 # writes(" LNF test "); ! 292: 286 00010A53 .data 1 ! 293: 287 000009b5 * L263: ! 294: 288 000009b5 * 20204C4E4620746573742000 .ascii " LNF test \0" ! 295: 289 000009c1 * .text ! 296: 290 00010A53 dd 8f000009b5 pushl $L263 ! 297: 291 00010A59 fe 08 effffffdb0 callf $8,_writes ! 298: 292 00010A60 # writed( test_no ); ! 299: 293 00010A60 dd effffffdaa pushl _test_no ! 300: 294 00010A66 fe 08 effffffda3 callf $8,_writed ! 301: 295 00010A6D # writes(", subtest 2 (Cache Data) - BAD FINAL ACC\n"); ! 302: 296 00010A6D .data 1 ! 303: 297 000009c1 * L264: ! 304: 298 000009c1 * 2C20737562746573742032202 .ascii ", subtest 2 (Cache Data) - BAD FINAL ACC\12\0" ! 305: 8436163686520446174612920 ! 306: 2D204241442046494E414C204 ! 307: 143430A00 ! 308: 299 000009eb * .text ! 309: 300 00010A6D dd 8f000009c1 pushl $L264 ! 310: 301 00010A73 fe 08 effffffd96 callf $8,_writes ! 311: 302 00010A7A # print_lnf_data(); ! 312: 303 00010A7A fe 04 ef000005bb callf $4,_print_lnf_data ! 313: 304 00010A81 # writes(" Acc expected = "); ! 314: 305 00010A81 .data 1 ! 315: 306 000009eb * L265: ! 316: 307 000009eb * 2020202020202020202020202 .ascii " Acc expected = \0" ! 317: 0202020202020202020202020 ! 318: 4163632065787065637465642 ! 319: 03D2000 ! 320: 308 00000a14 * .text ! 321: 309 00010A81 dd 8f000009eb pushl $L265 ! 322: 310 00010A87 fe 08 effffffd82 callf $8,_writes ! 323: 311 00010A8E # write32h( sgl_expected ); ! 324: 312 00010A8E dd effffffd7c pushl _sgl_expected ! 325: 313 00010A94 fe 08 effffffd75 callf $8,_write32h ! 326: 314 00010A9B # writec('\n'); ! 327: 315 00010A9B dd 0a pushl $10 ! 328: 316 00010A9D fe 08 effffffd6c callf $8,_writec ! 329: 317 00010AA4 # } ! 330: 318 00010AA4 # if( halt_flg ) ! 331: 319 00010AA4 L260: ! 332: 320 00010AA4 5d effffffd66 tstl _halt_flg ! 333: 321 00010AAA 31 09 jeql L266 ! 334: 322 00010AAC # lnf_er_halt( BAD_ACC_HLT ); /* halt on the error */ ! 335: 323 00010AAC dd 01 pushl $1 ! 336: 324 00010AAE fe 08 ef000005e5 callf $8,_lnf_er_halt ! 337: 325 00010AB5 # if( loop_on_err ) { ! 338: 326 00010AB5 L266: ! 339: 327 00010AB5 5d effffffd55 tstl _loop_on_err ! 340: 328 00010ABB 31 0a jeql L267 ! 341: 329 00010ABD # force_loop = TRUE; /* set the force loop flag */ ! 342: 330 00010ABD 0d 01 effffffd4c movl $1,_force_loop ! 343: 331 00010AC4 # asm("brw _lnf_2_lp1");; /* and loop on the error */ ! 344: 332 00010AC4 13 ff31 brw _lnf_2_lp1 ! 345: 333 00010AC7 # } /* end of loop on error */ ! 346: 334 00010AC7 # } /* end of compare error */ ! 347: 335 00010AC7 L267: ! 348: 336 00010AC7 # } /* end of WHILE loop */ ! 349: 337 00010AC7 L259: ! 350: 338 00010AC7 L255: ! 351: 339 00010AC7 6d effffffd43 incl _index ! 352: 340 00010ACD 13 feec jbr L257 ! 353: 341 00010AD0 L256: ! 354: 342 00010AD0 # } /* end of subtest 2 */ ! 355: 343 00010AD0 40 ret#2 ! 356: 344 00010AD1 .set L251,0x0 ! 357: 345 00010AD1 L253: ! 358: 346 00010AD1 13 fed5 jbr L254 ! 359: 347 00010AD4 .data ! 360: 348 0000093c * .text ! 361: 349 00010AD4 .align 1 ! 362: 350 00010AD4 .globl _lnf_3 ! 363: 351 00010AD4 _lnf_3: ! 364: 352 00010AD4 0000 .word L268 ! 365: 353 00010AD6 # ! 366: 354 00010AD6 # ! 367: 355 00010AD6 # ! 368: 356 00010AD6 # /************************************************************************ ! 369: 357 00010AD6 # * ! 370: 358 00010AD6 # * SUBTEST 3 - Check for register corruption ! 371: 359 00010AD6 # * ! 372: 360 00010AD6 # ************************************************************************/ ! 373: 361 00010AD6 # lnf_3() ! 374: 362 00010AD6 # { ! 375: 363 00010AD6 13 0195 jbr L270 ! 376: 364 00010AD9 L271: ! 377: 365 00010AD9 # force_loop = FALSE; /* clear force_loop flg */ ! 378: 366 00010AD9 4d effffffd31 clrl _force_loop ! 379: 367 00010ADF # subtest = 3; ! 380: 368 00010ADF 0d 03 effffffd2a movl $3,_subtest ! 381: 369 00010AE6 # fill_reg_buf( load_regs ); /* get patterns for regs */ ! 382: 370 00010AE6 dd 8f00000000 pushl $_load_regs ! 383: 371 00010AEC fe 08 effffffd1d callf $8,_fill_reg_buf ! 384: 372 00010AF3 # index = 0; ! 385: 373 00010AF3 4d effffffd17 clrl _index ! 386: 374 00010AF9 # sgl_ld_acc = lnf_1_data[0].ld; /* get value to negate */ ! 387: 375 00010AF9 0d effffffd11 effffffd0c movl _lnf_1_data,_sgl_ld_acc ! 388: 376 00010B04 # sgl_expected = lnf_1_data[0].exp; /* get expected result */ ! 389: 377 00010B04 0d effffffd0a effffffd01 movl _lnf_1_data+4,_sgl_expected ! 390: 378 00010B0F # /* ! 391: 379 00010B0F # * If LOOP ON ERROR is set, this is the loop for this subtest. ! 392: 380 00010B0F # * The force loop flag is set after the first error. ! 393: 381 00010B0F # */ ! 394: 382 00010B0F # asm("_lnf_3_lp1:"); ! 395: 383 00010B0F _lnf_3_lp1: ! 396: 384 00010B0F # asm("loadr $0x1fff,_load_regs"); /* load regs 0 - 12 */ ! 397: 385 00010B0F ab 891fff effffffcf8 loadr $0x1fff,_load_regs ! 398: 386 00010B18 # asm("nop"); ! 399: 387 00010B18 10 nop ! 400: 388 00010B19 # asm("lnf _sgl_ld_acc"); /* load and negate the value */ ! 401: 389 00010B19 16 effffffcf1 lnf _sgl_ld_acc ! 402: 390 00010B1F # asm("nop"); ! 403: 391 00010B1F 10 nop ! 404: 392 00010B20 # asm("storer $0x1fff,_store_regs"); /* store regs 0 - 12 */ ! 405: 393 00010B20 bb 891fff effffffce7 storer $0x1fff,_store_regs ! 406: 394 00010B29 # asm("stf _sgl_st_acc"); /* save the accumulator */ ! 407: 395 00010B29 26 effffffce1 stf _sgl_st_acc ! 408: 396 00010B2F # if( force_loop ) ! 409: 397 00010B2F 5d effffffcdb tstl _force_loop ! 410: 398 00010B35 31 02 jeql L273 ! 411: 399 00010B37 # asm("brb _lnf_3_lp1");; /* loop on the error */ ! 412: 400 00010B37 11 d6 brb _lnf_3_lp1 ! 413: 401 00010B39 L273: ! 414: 402 00010B39 # /* ! 415: 403 00010B39 # * Now compare the stored register values to those that were loaded ! 416: 404 00010B39 # */ ! 417: 405 00010B39 # index2 = 0; ! 418: 406 00010B39 4d effffffcd1 clrl _index2 ! 419: 407 00010B3F # while( (load_regs[index2] == store_regs[index2]) && (index2 < 13) ) ! 420: 408 00010B3F L274: ! 421: 409 00010B3F 0d effffffccb 50 movl _index2,r0 ! 422: 410 00010B46 0d effffffcc4 51 movl _index2,r1 ! 423: 411 00010B4D 1d 40effffffcbc cmpl _load_regs[r0],_store_regs[r1] ! 424: 41effffffcb6 ! 425: 412 00010B5A 21 11 jneq L275 ! 426: 413 00010B5C 1d effffffcae 0d cmpl _index2,$13 ! 427: 414 00010B63 81 08 jgeq L275 ! 428: 415 00010B65 # index2++; /* check reg values */ ! 429: 416 00010B65 6d effffffca5 incl _index2 ! 430: 417 00010B6B 11 d2 jbr L274 ! 431: 418 00010B6D L275: ! 432: 419 00010B6D # if( index2 < 13 ) { /* error if index2 < 13 */ ! 433: 420 00010B6D 1d effffffc9d 0d cmpl _index2,$13 ! 434: 421 00010B74 91 03 13 00f4 jgeq L276 ! 435: 422 00010B79 # errcnt++; /* bump the error count */ ! 436: 423 00010B79 6d effffffc91 incl _errcnt ! 437: 424 00010B7F # if( prt_error ) { ! 438: 425 00010B7F 5d effffffc8b tstl _prt_error ! 439: 426 00010B85 21 03 13 00c0 jeql L277 ! 440: 427 00010B8A # writes(" \n"); /* start a new print line */ ! 441: 428 00010B8A .data 1 ! 442: 429 00000a14 * L278: ! 443: 430 00000a14 * 200A00 .ascii " \12\0" ! 444: 431 00000a17 * .text ! 445: 432 00010B8A dd 8f00000a14 pushl $L278 ! 446: 433 00010B90 fe 08 effffffc79 callf $8,_writes ! 447: 434 00010B97 # writes("cycle: "); ! 448: 435 00010B97 .data 1 ! 449: 436 00000a17 * L279: ! 450: 437 00000a17 * 6379636C653A2000 .ascii "cycle: \0" ! 451: 438 00000a1f * .text ! 452: 439 00010B97 dd 8f00000a17 pushl $L279 ! 453: 440 00010B9D fe 08 effffffc6c callf $8,_writes ! 454: 441 00010BA4 # writed( cycle ); ! 455: 442 00010BA4 dd effffffc66 pushl _cycle ! 456: 443 00010BAA fe 08 effffffc5f callf $8,_writed ! 457: 444 00010BB1 # writes(" LNF test "); ! 458: 445 00010BB1 .data 1 ! 459: 446 00000a1f * L280: ! 460: 447 00000a1f * 20204C4E4620746573742000 .ascii " LNF test \0" ! 461: 448 00000a2b * .text ! 462: 449 00010BB1 dd 8f00000a1f pushl $L280 ! 463: 450 00010BB7 fe 08 effffffc52 callf $8,_writes ! 464: 451 00010BBE # writed( test_no ); ! 465: 452 00010BBE dd effffffc4c pushl _test_no ! 466: 453 00010BC4 fe 08 effffffc45 callf $8,_writed ! 467: 454 00010BCB # writes(", subtest 3 - A REGISTER WAS MODIFIED\n"); ! 468: 455 00010BCB .data 1 ! 469: 456 00000a2b * L281: ! 470: 457 00000a2b * 2C20737562746573742033202 .ascii ", subtest 3 - A REGISTER WAS MODIFIED\12\0" ! 471: D204120524547495354455220 ! 472: 574153204D4F4449464945440 ! 473: A00 ! 474: 458 00000a52 * .text ! 475: 459 00010BCB dd 8f00000a2b pushl $L281 ! 476: 460 00010BD1 fe 08 effffffc38 callf $8,_writes ! 477: 461 00010BD8 # print_lnf_data(); /* print the operands */ ! 478: 462 00010BD8 fe 04 ef0000045d callf $4,_print_lnf_data ! 479: 463 00010BDF # writes("register "); /* print the information */ ! 480: 464 00010BDF .data 1 ! 481: 465 00000a52 * L282: ! 482: 466 00000a52 * 72656769737465722000 .ascii "register \0" ! 483: 467 00000a5c * .text ! 484: 468 00010BDF dd 8f00000a52 pushl $L282 ! 485: 469 00010BE5 fe 08 effffffc24 callf $8,_writes ! 486: 470 00010BEC # writed( index2 ); /* about the corrupted */ ! 487: 471 00010BEC dd effffffc1e pushl _index2 ! 488: 472 00010BF2 fe 08 effffffc17 callf $8,_writed ! 489: 473 00010BF9 # writes(" = "); /* register */ ! 490: 474 00010BF9 .data 1 ! 491: 475 00000a5c * L283: ! 492: 476 00000a5c * 203D2000 .ascii " = \0" ! 493: 477 00000a60 * .text ! 494: 478 00010BF9 dd 8f00000a5c pushl $L283 ! 495: 479 00010BFF fe 08 effffffc0a callf $8,_writes ! 496: 480 00010C06 # write32h( store_regs[index2] ); ! 497: 481 00010C06 0d effffffc04 50 movl _index2,r0 ! 498: 482 00010C0D dd 40effffffbfc pushl _store_regs[r0] ! 499: 483 00010C14 fe 08 effffffbf5 callf $8,_write32h ! 500: 484 00010C1B # writes(", should be = "); ! 501: 485 00010C1B .data 1 ! 502: 486 00000a60 * L284: ! 503: 487 00000a60 * 2C202073686F756C642062652 .ascii ", should be = \0" ! 504: 03D2000 ! 505: 488 00000a70 * .text ! 506: 489 00010C1B dd 8f00000a60 pushl $L284 ! 507: 490 00010C21 fe 08 effffffbe8 callf $8,_writes ! 508: 491 00010C28 # write32h( load_regs[index2] ); ! 509: 492 00010C28 0d effffffbe2 50 movl _index2,r0 ! 510: 493 00010C2F dd 40effffffbda pushl _load_regs[r0] ! 511: 494 00010C36 fe 08 effffffbd3 callf $8,_write32h ! 512: 495 00010C3D # writes("\n"); ! 513: 496 00010C3D .data 1 ! 514: 497 00000a70 * L285: ! 515: 498 00000a70 * 0A00 .ascii "\12\0" ! 516: 499 00000a72 * .text ! 517: 500 00010C3D dd 8f00000a70 pushl $L285 ! 518: 501 00010C43 fe 08 effffffbc6 callf $8,_writes ! 519: 502 00010C4A # } ! 520: 503 00010C4A # if( halt_flg ) ! 521: 504 00010C4A L277: ! 522: 505 00010C4A 5d effffffbc0 tstl _halt_flg ! 523: 506 00010C50 31 09 jeql L286 ! 524: 507 00010C52 # lnf_er_halt( BAD_REG_HLT ); /* halt on the error */ ! 525: 508 00010C52 dd 02 pushl $2 ! 526: 509 00010C54 fe 08 ef0000043f callf $8,_lnf_er_halt ! 527: 510 00010C5B # if( loop_on_err ) { ! 528: 511 00010C5B L286: ! 529: 512 00010C5B 5d effffffbaf tstl _loop_on_err ! 530: 513 00010C61 31 0a jeql L287 ! 531: 514 00010C63 # force_loop = TRUE; /* set the force loop flag */ ! 532: 515 00010C63 0d 01 effffffba6 movl $1,_force_loop ! 533: 516 00010C6A # asm("brw _lnf_3_lp1");; /* and loop on the error */ ! 534: 517 00010C6A 13 fea2 brw _lnf_3_lp1 ! 535: 518 00010C6D # } /* end of loop on error */ ! 536: 519 00010C6D # } /* end of register corruption error */ ! 537: 520 00010C6D L287: ! 538: 521 00010C6D # } /* end of subtest 3 */ ! 539: 522 00010C6D L276: ! 540: 523 00010C6D 40 ret#2 ! 541: 524 00010C6E .set L268,0x0 ! 542: 525 00010C6E L270: ! 543: 526 00010C6E 13 fe68 jbr L271 ! 544: 527 00010C71 .data ! 545: 528 0000093c * .text ! 546: 529 00010C71 00 .align 1 ! 547: 530 00010C72 .globl _lnf_4 ! 548: 531 00010C72 _lnf_4: ! 549: 532 00010C72 0000 .word L288 ! 550: 533 00010C74 # ! 551: 534 00010C74 # ! 552: 535 00010C74 # ! 553: 536 00010C74 # /************************************************************************ ! 554: 537 00010C74 # * ! 555: 538 00010C74 # * SUBTEST 4 - Check for PSL corruption ! 556: 539 00010C74 # * ! 557: 540 00010C74 # ************************************************************************/ ! 558: 541 00010C74 # lnf_4() ! 559: 542 00010C74 # { ! 560: 543 00010C74 13 019d jbr L290 ! 561: 544 00010C77 L291: ! 562: 545 00010C77 # force_loop = FALSE; /* clear force_loop flg */ ! 563: 546 00010C77 4d effffffb93 clrl _force_loop ! 564: 547 00010C7D # subtest = 4; ! 565: 548 00010C7D 0d 04 effffffb8c movl $4,_subtest ! 566: 549 00010C84 # fill_reg_buf( load_regs ); /* get patterns for regs */ ! 567: 550 00010C84 dd 8f00000000 pushl $_load_regs ! 568: 551 00010C8A fe 08 effffffb7f callf $8,_fill_reg_buf ! 569: 552 00010C91 # for( index = 0; index < 3; index++ ) { ! 570: 553 00010C91 4d effffffb79 clrl _index ! 571: 554 00010C97 L294: ! 572: 555 00010C97 1d effffffb73 03 cmpl _index,$3 ! 573: 556 00010C9E 91 03 13 0170 jgeq L293 ! 574: 557 00010CA3 # sgl_ld_acc = lnf_1_data[index].ld; /* get value to negate */ ! 575: 558 00010CA3 0d effffffb67 50 movl _index,r0 ! 576: 559 00010CAA 48 03 50 50 shll $3,r0,r0 ! 577: 560 00010CAE 0d e000000000 effffffb57 movl _lnf_1_data(r0),_sgl_ld_acc ! 578: 561 00010CB9 # sgl_expected = lnf_1_data[index].exp; /* get expected */ ! 579: 562 00010CB9 0d effffffb51 50 movl _index,r0 ! 580: 563 00010CC0 48 03 50 50 shll $3,r0,r0 ! 581: 564 00010CC4 0d e000000004 effffffb41 movl _lnf_1_data+4(r0),_sgl_expected ! 582: 565 00010CCF # sgl_dummy1 = status_array[status_index]; /* status = +, -, 0 */ ! 583: 566 00010CCF 0d effffffb3b 50 movl _status_index,r0 ! 584: 567 00010CD6 0d 40effffffb33 movl _status_array[r0],_sgl_dummy1 ! 585: effffffb2e ! 586: 568 00010CE2 # /* ! 587: 569 00010CE2 # * If LOOP ON ERROR is set, this is the loop for this subtest. ! 588: 570 00010CE2 # * The force loop flag is set after the first error. ! 589: 571 00010CE2 # */ ! 590: 572 00010CE2 # asm("_lnf_4_lp1:"); ! 591: 573 00010CE2 _lnf_4_lp1: ! 592: 574 00010CE2 # asm("tstl _sgl_dummy1"); /* set the PSL status */ ! 593: 575 00010CE2 5d effffffb28 tstl _sgl_dummy1 ! 594: 576 00010CE8 # asm("movpsl _init_psl"); /* save the initial PSL */ ! 595: 577 00010CE8 cd effffffb22 movpsl _init_psl ! 596: 578 00010CEE # asm("lnf _sgl_ld_acc"); /* load and negate the value */ ! 597: 579 00010CEE 16 effffffb1c lnf _sgl_ld_acc ! 598: 580 00010CF4 # asm("nop"); ! 599: 581 00010CF4 10 nop ! 600: 582 00010CF5 # asm("movpsl _psl_val"); /* save the final PSL */ ! 601: 583 00010CF5 cd effffffb15 movpsl _psl_val ! 602: 584 00010CFB # asm("stf _sgl_st_acc"); /* save the accumulator */ ! 603: 585 00010CFB 26 effffffb0f stf _sgl_st_acc ! 604: 586 00010D01 # if( force_loop ) ! 605: 587 00010D01 5d effffffb09 tstl _force_loop ! 606: 588 00010D07 31 02 jeql L295 ! 607: 589 00010D09 # asm("brb _lnf_4_lp1");; /* loop on the error */ ! 608: 590 00010D09 11 d7 brb _lnf_4_lp1 ! 609: 591 00010D0B L295: ! 610: 592 00010D0B # /* ! 611: 593 00010D0B # * Now compare the final PSL to the initial PSL -they should be the same ! 612: 594 00010D0B # */ ! 613: 595 00010D0B # exp_psl = init_psl; ! 614: 596 00010D0B 0d effffffaff effffffafa movl _init_psl,_exp_psl ! 615: 597 00010D16 # if( psl_val != init_psl ) { ! 616: 598 00010D16 1d effffffaf4 effffffaef cmpl _psl_val,_init_psl ! 617: 599 00010D21 21 03 13 00e4 jeql L296 ! 618: 600 00010D26 # errcnt++; /* bump the error count */ ! 619: 601 00010D26 6d effffffae4 incl _errcnt ! 620: 602 00010D2C # if( prt_error ) { ! 621: 603 00010D2C 5d effffffade tstl _prt_error ! 622: 604 00010D32 21 03 13 00b0 jeql L297 ! 623: 605 00010D37 # writes(" \n"); /* start a new print line */ ! 624: 606 00010D37 .data 1 ! 625: 607 00000a72 * L298: ! 626: 608 00000a72 * 200A00 .ascii " \12\0" ! 627: 609 00000a75 * .text ! 628: 610 00010D37 dd 8f00000a72 pushl $L298 ! 629: 611 00010D3D fe 08 effffffacc callf $8,_writes ! 630: 612 00010D44 # writes("cycle: "); ! 631: 613 00010D44 .data 1 ! 632: 614 00000a75 * L299: ! 633: 615 00000a75 * 6379636C653A2000 .ascii "cycle: \0" ! 634: 616 00000a7d * .text ! 635: 617 00010D44 dd 8f00000a75 pushl $L299 ! 636: 618 00010D4A fe 08 effffffabf callf $8,_writes ! 637: 619 00010D51 # writed( cycle ); ! 638: 620 00010D51 dd effffffab9 pushl _cycle ! 639: 621 00010D57 fe 08 effffffab2 callf $8,_writed ! 640: 622 00010D5E # writes(" LNF test "); ! 641: 623 00010D5E .data 1 ! 642: 624 00000a7d * L300: ! 643: 625 00000a7d * 20204C4E4620746573742000 .ascii " LNF test \0" ! 644: 626 00000a89 * .text ! 645: 627 00010D5E dd 8f00000a7d pushl $L300 ! 646: 628 00010D64 fe 08 effffffaa5 callf $8,_writes ! 647: 629 00010D6B # writed( test_no ); ! 648: 630 00010D6B dd effffffa9f pushl _test_no ! 649: 631 00010D71 fe 08 effffffa98 callf $8,_writed ! 650: 632 00010D78 # writes(", subtest 4 - INCORRECT FINAL PSL\n"); ! 651: 633 00010D78 .data 1 ! 652: 634 00000a89 * L301: ! 653: 635 00000a89 * 2C20737562746573742034202 .ascii ", subtest 4 - INCORRECT FINAL PSL\12\0" ! 654: D20494E434F52524543542046 ! 655: 494E414C2050534C0A00 ! 656: 636 00000aac * .text ! 657: 637 00010D78 dd 8f00000a89 pushl $L301 ! 658: 638 00010D7E fe 08 effffffa8b callf $8,_writes ! 659: 639 00010D85 # print_lnf_data(); /* print the operands */ ! 660: 640 00010D85 fe 04 ef000002b0 callf $4,_print_lnf_data ! 661: 641 00010D8C # writes("initial PSL = "); ! 662: 642 00010D8C .data 1 ! 663: 643 00000aac * L302: ! 664: 644 00000aac * 696E697469616C2050534C203 .ascii "initial PSL = \0" ! 665: D2000 ! 666: 645 00000abb * .text ! 667: 646 00010D8C dd 8f00000aac pushl $L302 ! 668: 647 00010D92 fe 08 effffffa77 callf $8,_writes ! 669: 648 00010D99 # write32h( init_psl ); ! 670: 649 00010D99 dd effffffa71 pushl _init_psl ! 671: 650 00010D9F fe 08 effffffa6a callf $8,_write32h ! 672: 651 00010DA6 # writes(", final PSL = "); ! 673: 652 00010DA6 .data 1 ! 674: 653 00000abb * L303: ! 675: 654 00000abb * 2C202066696E616C2050534C2 .ascii ", final PSL = \0" ! 676: 03D2000 ! 677: 655 00000acb * .text ! 678: 656 00010DA6 dd 8f00000abb pushl $L303 ! 679: 657 00010DAC fe 08 effffffa5d callf $8,_writes ! 680: 658 00010DB3 # write32h( psl_val ); ! 681: 659 00010DB3 dd effffffa57 pushl _psl_val ! 682: 660 00010DB9 fe 08 effffffa50 callf $8,_write32h ! 683: 661 00010DC0 # writes(", expected PSL = "); ! 684: 662 00010DC0 .data 1 ! 685: 663 00000acb * L304: ! 686: 664 00000acb * 2C20206578706563746564205 .ascii ", expected PSL = \0" ! 687: 0534C203D2000 ! 688: 665 00000ade * .text ! 689: 666 00010DC0 dd 8f00000acb pushl $L304 ! 690: 667 00010DC6 fe 08 effffffa43 callf $8,_writes ! 691: 668 00010DCD # write32h( exp_psl ); ! 692: 669 00010DCD dd effffffa3d pushl _exp_psl ! 693: 670 00010DD3 fe 08 effffffa36 callf $8,_write32h ! 694: 671 00010DDA # writes("\n"); ! 695: 672 00010DDA .data 1 ! 696: 673 00000ade * L305: ! 697: 674 00000ade * 0A00 .ascii "\12\0" ! 698: 675 00000ae0 * .text ! 699: 676 00010DDA dd 8f00000ade pushl $L305 ! 700: 677 00010DE0 fe 08 effffffa29 callf $8,_writes ! 701: 678 00010DE7 # } ! 702: 679 00010DE7 # if( halt_flg ) ! 703: 680 00010DE7 L297: ! 704: 681 00010DE7 5d effffffa23 tstl _halt_flg ! 705: 682 00010DED 31 09 jeql L306 ! 706: 683 00010DEF # lnf_er_halt( BAD_PSL_HLT ); /* halt on the error */ ! 707: 684 00010DEF dd 03 pushl $3 ! 708: 685 00010DF1 fe 08 ef000002a2 callf $8,_lnf_er_halt ! 709: 686 00010DF8 # if( loop_on_err ) { ! 710: 687 00010DF8 L306: ! 711: 688 00010DF8 5d effffffa12 tstl _loop_on_err ! 712: 689 00010DFE 31 0a jeql L307 ! 713: 690 00010E00 # force_loop = TRUE; /* set the force loop flag */ ! 714: 691 00010E00 0d 01 effffffa09 movl $1,_force_loop ! 715: 692 00010E07 # asm("brw _lnf_4_lp1");; /* and loop on the error */ ! 716: 693 00010E07 13 fed8 brw _lnf_4_lp1 ! 717: 694 00010E0A # } /* end of loop on error */ ! 718: 695 00010E0A # } /* end of PSL corruption error */ ! 719: 696 00010E0A L307: ! 720: 697 00010E0A # } /* end of WHILE loop */ ! 721: 698 00010E0A L296: ! 722: 699 00010E0A L292: ! 723: 700 00010E0A 6d effffffa00 incl _index ! 724: 701 00010E10 13 fe84 jbr L294 ! 725: 702 00010E13 L293: ! 726: 703 00010E13 # } /* end of subtest 4 */ ! 727: 704 00010E13 40 ret#2 ! 728: 705 00010E14 .set L288,0x0 ! 729: 706 00010E14 L290: ! 730: 707 00010E14 13 fe60 jbr L291 ! 731: 708 00010E17 .data ! 732: 709 0000093c * .text ! 733: 710 00010E17 00 .align 1 ! 734: 711 00010E18 .globl _lnf_5 ! 735: 712 00010E18 _lnf_5: ! 736: 713 00010E18 0000 .word L308 ! 737: 714 00010E1A # ! 738: 715 00010E1A # ! 739: 716 00010E1A # ! 740: 717 00010E1A # /************************************************************************ ! 741: 718 00010E1A # * ! 742: 719 00010E1A # * SUBTEST 5 - pipelined entry test ! 743: 720 00010E1A # * ! 744: 721 00010E1A # ************************************************************************/ ! 745: 722 00010E1A # lnf_5() ! 746: 723 00010E1A # { ! 747: 724 00010E1A 13 010a jbr L310 ! 748: 725 00010E1D L311: ! 749: 726 00010E1D # force_loop = FALSE; ! 750: 727 00010E1D 4d effffff9ed clrl _force_loop ! 751: 728 00010E23 # subtest = 8; ! 752: 729 00010E23 0d 08 effffff9e6 movl $8,_subtest ! 753: 730 00010E2A # for( index = 0; index < max_lnf_1_index; index++ ) { ! 754: 731 00010E2A 4d effffff9e0 clrl _index ! 755: 732 00010E30 L314: ! 756: 733 00010E30 1d effffff9da effffff9d5 cmpl _index,_max_lnf_1_index ! 757: 734 00010E3B 91 03 13 00e6 jgeq L313 ! 758: 735 00010E40 # sgl_ld_acc = lnf_1_data[index].ld; /* get value to negate */ ! 759: 736 00010E40 0d effffff9ca 50 movl _index,r0 ! 760: 737 00010E47 48 03 50 50 shll $3,r0,r0 ! 761: 738 00010E4B 0d e000000000 effffff9ba movl _lnf_1_data(r0),_sgl_ld_acc ! 762: 739 00010E56 # sgl_expected = lnf_1_data[index].exp; /* get expected result */ ! 763: 740 00010E56 0d effffff9b4 50 movl _index,r0 ! 764: 741 00010E5D 48 03 50 50 shll $3,r0,r0 ! 765: 742 00010E61 0d e000000004 effffff9a4 movl _lnf_1_data+4(r0),_sgl_expected ! 766: 743 00010E6C # /* ! 767: 744 00010E6C # * If LOOP ON ERROR is set, this is the loop for this subtest. ! 768: 745 00010E6C # * The force loop flag is set after the first error. ! 769: 746 00010E6C # */ ! 770: 747 00010E6C # asm("_lnf_5_lp1:"); ! 771: 748 00010E6C _lnf_5_lp1: ! 772: 749 00010E6C # asm("movl $0,r0"); /* clear r0 */ ! 773: 750 00010E6C 0d 00 50 movl $0,r0 ! 774: 751 00010E6F # asm("ldf r0"); /* load the Acc. with 0.0 */ ! 775: 752 00010E6F 06 50 ldf r0 ! 776: 753 00010E71 # asm("lnf _sgl_ld_acc"); /* load and negate the value */ ! 777: 754 00010E71 16 effffff999 lnf _sgl_ld_acc ! 778: 755 00010E77 # asm("stf _sgl_st_acc"); /* store the result */ ! 779: 756 00010E77 26 effffff993 stf _sgl_st_acc ! 780: 757 00010E7D # if( force_loop ) ! 781: 758 00010E7D 5d effffff98d tstl _force_loop ! 782: 759 00010E83 31 02 jeql L315 ! 783: 760 00010E85 # asm("brb _lnf_5_lp1");; /* loop on the error */ ! 784: 761 00010E85 11 e5 brb _lnf_5_lp1 ! 785: 762 00010E87 L315: ! 786: 763 00010E87 # /* ! 787: 764 00010E87 # * end error loop - test the results ! 788: 765 00010E87 # */ ! 789: 766 00010E87 # if( sgl_st_acc != sgl_expected ) { /* COMPARE the values */ ! 790: 767 00010E87 1d effffff983 effffff97e cmpl _sgl_st_acc,_sgl_expected ! 791: 768 00010E92 21 03 13 0086 jeql L316 ! 792: 769 00010E97 # errcnt++; /* bump the error count */ ! 793: 770 00010E97 6d effffff973 incl _errcnt ! 794: 771 00010E9D # if( prt_error ) { ! 795: 772 00010E9D 5d effffff96d tstl _prt_error ! 796: 773 00010EA3 31 55 jeql L317 ! 797: 774 00010EA5 # writes(" \n"); /* start a new print line */ ! 798: 775 00010EA5 .data 1 ! 799: 776 00000ae0 * L318: ! 800: 777 00000ae0 * 200A00 .ascii " \12\0" ! 801: 778 00000ae3 * .text ! 802: 779 00010EA5 dd 8f00000ae0 pushl $L318 ! 803: 780 00010EAB fe 08 effffff95e callf $8,_writes ! 804: 781 00010EB2 # writes("cycle: "); ! 805: 782 00010EB2 .data 1 ! 806: 783 00000ae3 * L319: ! 807: 784 00000ae3 * 6379636C653A2000 .ascii "cycle: \0" ! 808: 785 00000aeb * .text ! 809: 786 00010EB2 dd 8f00000ae3 pushl $L319 ! 810: 787 00010EB8 fe 08 effffff951 callf $8,_writes ! 811: 788 00010EBF # writed( cycle ); ! 812: 789 00010EBF dd effffff94b pushl _cycle ! 813: 790 00010EC5 fe 08 effffff944 callf $8,_writed ! 814: 791 00010ECC # writes(" LNF test "); ! 815: 792 00010ECC .data 1 ! 816: 793 00000aeb * L320: ! 817: 794 00000aeb * 20204C4E4620746573742000 .ascii " LNF test \0" ! 818: 795 00000af7 * .text ! 819: 796 00010ECC dd 8f00000aeb pushl $L320 ! 820: 797 00010ED2 fe 08 effffff937 callf $8,_writes ! 821: 798 00010ED9 # writed( test_no ); ! 822: 799 00010ED9 dd effffff931 pushl _test_no ! 823: 800 00010EDF fe 08 effffff92a callf $8,_writed ! 824: 801 00010EE6 # writes(", subtest 5 (Piped Entry) - BAD FINAL ACC\n"); ! 825: 802 00010EE6 .data 1 ! 826: 803 00000af7 * L321: ! 827: 804 00000af7 * 2C20737562746573742035202 .ascii ", subtest 5 (Piped Entry) - BAD FINAL ACC\12\0" ! 828: 8506970656420456E74727929 ! 829: 202D204241442046494E414C2 ! 830: 04143430A00 ! 831: 805 00000b22 * .text ! 832: 806 00010EE6 dd 8f00000af7 pushl $L321 ! 833: 807 00010EEC fe 08 effffff91d callf $8,_writes ! 834: 808 00010EF3 # print_lnf_data(); ! 835: 809 00010EF3 fe 04 ef00000142 callf $4,_print_lnf_data ! 836: 810 00010EFA # } ! 837: 811 00010EFA # if( halt_flg ) ! 838: 812 00010EFA L317: ! 839: 813 00010EFA 5d effffff910 tstl _halt_flg ! 840: 814 00010F00 31 09 jeql L322 ! 841: 815 00010F02 # lnf_er_halt( BAD_ACC_HLT ); /* halt on the error */ ! 842: 816 00010F02 dd 01 pushl $1 ! 843: 817 00010F04 fe 08 ef0000018f callf $8,_lnf_er_halt ! 844: 818 00010F0B # if( loop_on_err ) { ! 845: 819 00010F0B L322: ! 846: 820 00010F0B 5d effffff8ff tstl _loop_on_err ! 847: 821 00010F11 31 0a jeql L323 ! 848: 822 00010F13 # force_loop = TRUE; /* set the force loop flag */ ! 849: 823 00010F13 0d 01 effffff8f6 movl $1,_force_loop ! 850: 824 00010F1A # asm("brw _lnf_5_lp1");; /* and loop on the error */ ! 851: 825 00010F1A 13 ff4f brw _lnf_5_lp1 ! 852: 826 00010F1D # } /* end of loop on error */ ! 853: 827 00010F1D # } /* end of compare error */ ! 854: 828 00010F1D L323: ! 855: 829 00010F1D # } /* end of WHILE loop */ ! 856: 830 00010F1D L316: ! 857: 831 00010F1D L312: ! 858: 832 00010F1D 6d effffff8ed incl _index ! 859: 833 00010F23 13 ff0a jbr L314 ! 860: 834 00010F26 L313: ! 861: 835 00010F26 # } /* end of subtest 5 */ ! 862: 836 00010F26 40 ret#2 ! 863: 837 00010F27 .set L308,0x0 ! 864: 838 00010F27 L310: ! 865: 839 00010F27 13 fef3 jbr L311 ! 866: 840 00010F2A .data ! 867: 841 0000093c * .text ! 868: 842 00010F2A .align 1 ! 869: 843 00010F2A .globl _lnf_6 ! 870: 844 00010F2A _lnf_6: ! 871: 845 00010F2A 0000 .word L324 ! 872: 846 00010F2C # ! 873: 847 00010F2C # ! 874: 848 00010F2C # ! 875: 849 00010F2C # /************************************************************************ ! 876: 850 00010F2C # * ! 877: 851 00010F2C # * SUBTEST 6 - pipelined exit test ! 878: 852 00010F2C # * ! 879: 853 00010F2C # ************************************************************************/ ! 880: 854 00010F2C # lnf_6() ! 881: 855 00010F2C # { ! 882: 856 00010F2C 13 010a jbr L326 ! 883: 857 00010F2F L327: ! 884: 858 00010F2F # force_loop = FALSE; ! 885: 859 00010F2F 4d effffff8db clrl _force_loop ! 886: 860 00010F35 # subtest = 8; ! 887: 861 00010F35 0d 08 effffff8d4 movl $8,_subtest ! 888: 862 00010F3C # for( index = 0; index < max_lnf_1_index; index++ ) { ! 889: 863 00010F3C 4d effffff8ce clrl _index ! 890: 864 00010F42 L330: ! 891: 865 00010F42 1d effffff8c8 effffff8c3 cmpl _index,_max_lnf_1_index ! 892: 866 00010F4D 91 03 13 00e6 jgeq L329 ! 893: 867 00010F52 # sgl_ld_acc = lnf_1_data[index].ld; /* get value to negate */ ! 894: 868 00010F52 0d effffff8b8 50 movl _index,r0 ! 895: 869 00010F59 48 03 50 50 shll $3,r0,r0 ! 896: 870 00010F5D 0d e000000000 effffff8a8 movl _lnf_1_data(r0),_sgl_ld_acc ! 897: 871 00010F68 # sgl_expected = lnf_1_data[index].exp; /* get expected result */ ! 898: 872 00010F68 0d effffff8a2 50 movl _index,r0 ! 899: 873 00010F6F 48 03 50 50 shll $3,r0,r0 ! 900: 874 00010F73 0d e000000004 effffff892 movl _lnf_1_data+4(r0),_sgl_expected ! 901: 875 00010F7E # /* ! 902: 876 00010F7E # * If LOOP ON ERROR is set, this is the loop for this subtest. ! 903: 877 00010F7E # * The force loop flag is set after the first error. ! 904: 878 00010F7E # */ ! 905: 879 00010F7E # asm("_lnf_6_lp1:"); ! 906: 880 00010F7E _lnf_6_lp1: ! 907: 881 00010F7E # asm("movl $0,r0"); /* clear r0 */ ! 908: 882 00010F7E 0d 00 50 movl $0,r0 ! 909: 883 00010F81 # asm("lnf _sgl_ld_acc"); /* load and negate the value */ ! 910: 884 00010F81 16 effffff889 lnf _sgl_ld_acc ! 911: 885 00010F87 # asm("addf r0"); /* add a zero to the acc. */ ! 912: 886 00010F87 c6 50 addf r0 ! 913: 887 00010F89 # asm("stf _sgl_st_acc"); /* store the result */ ! 914: 888 00010F89 26 effffff881 stf _sgl_st_acc ! 915: 889 00010F8F # if( force_loop ) ! 916: 890 00010F8F 5d effffff87b tstl _force_loop ! 917: 891 00010F95 31 02 jeql L331 ! 918: 892 00010F97 # asm("brb _lnf_6_lp1");; /* loop on the error */ ! 919: 893 00010F97 11 e5 brb _lnf_6_lp1 ! 920: 894 00010F99 L331: ! 921: 895 00010F99 # /* ! 922: 896 00010F99 # * end error loop - test the results ! 923: 897 00010F99 # */ ! 924: 898 00010F99 # if( sgl_st_acc != sgl_expected ) { /* COMPARE the values */ ! 925: 899 00010F99 1d effffff871 effffff86c cmpl _sgl_st_acc,_sgl_expected ! 926: 900 00010FA4 21 03 13 0086 jeql L332 ! 927: 901 00010FA9 # errcnt++; /* bump the error count */ ! 928: 902 00010FA9 6d effffff861 incl _errcnt ! 929: 903 00010FAF # if( prt_error ) { ! 930: 904 00010FAF 5d effffff85b tstl _prt_error ! 931: 905 00010FB5 31 55 jeql L333 ! 932: 906 00010FB7 # writes(" \n"); /* start a new print line */ ! 933: 907 00010FB7 .data 1 ! 934: 908 00000b22 * L334: ! 935: 909 00000b22 * 200A00 .ascii " \12\0" ! 936: 910 00000b25 * .text ! 937: 911 00010FB7 dd 8f00000b22 pushl $L334 ! 938: 912 00010FBD fe 08 effffff84c callf $8,_writes ! 939: 913 00010FC4 # writes("cycle: "); ! 940: 914 00010FC4 .data 1 ! 941: 915 00000b25 * L335: ! 942: 916 00000b25 * 6379636C653A2000 .ascii "cycle: \0" ! 943: 917 00000b2d * .text ! 944: 918 00010FC4 dd 8f00000b25 pushl $L335 ! 945: 919 00010FCA fe 08 effffff83f callf $8,_writes ! 946: 920 00010FD1 # writed( cycle ); ! 947: 921 00010FD1 dd effffff839 pushl _cycle ! 948: 922 00010FD7 fe 08 effffff832 callf $8,_writed ! 949: 923 00010FDE # writes(" LNF test "); ! 950: 924 00010FDE .data 1 ! 951: 925 00000b2d * L336: ! 952: 926 00000b2d * 20204C4E4620746573742000 .ascii " LNF test \0" ! 953: 927 00000b39 * .text ! 954: 928 00010FDE dd 8f00000b2d pushl $L336 ! 955: 929 00010FE4 fe 08 effffff825 callf $8,_writes ! 956: 930 00010FEB # writed( test_no ); ! 957: 931 00010FEB dd effffff81f pushl _test_no ! 958: 932 00010FF1 fe 08 effffff818 callf $8,_writed ! 959: 933 00010FF8 # writes(", subtest 6 (Piped Exit) - BAD FINAL ACC\n"); ! 960: 934 00010FF8 .data 1 ! 961: 935 00000b39 * L337: ! 962: 936 00000b39 * 2C20737562746573742036202 .ascii ", subtest 6 (Piped Exit) - BAD FINAL ACC\12\0" ! 963: 8506970656420457869742920 ! 964: 2D204241442046494E414C204 ! 965: 143430A00 ! 966: 937 00000b63 * .text ! 967: 938 00010FF8 dd 8f00000b39 pushl $L337 ! 968: 939 00010FFE fe 08 effffff80b callf $8,_writes ! 969: 940 00011005 # print_lnf_data(); ! 970: 941 00011005 fe 04 ef00000030 callf $4,_print_lnf_data ! 971: 942 0001100C # } ! 972: 943 0001100C # if( halt_flg ) ! 973: 944 0001100C L333: ! 974: 945 0001100C 5d effffff7fe tstl _halt_flg ! 975: 946 00011012 31 09 jeql L338 ! 976: 947 00011014 # lnf_er_halt( BAD_ACC_HLT ); /* halt on the error */ ! 977: 948 00011014 dd 01 pushl $1 ! 978: 949 00011016 fe 08 ef0000007d callf $8,_lnf_er_halt ! 979: 950 0001101D # if( loop_on_err ) { ! 980: 951 0001101D L338: ! 981: 952 0001101D 5d effffff7ed tstl _loop_on_err ! 982: 953 00011023 31 0a jeql L339 ! 983: 954 00011025 # force_loop = TRUE; /* set the force loop flag */ ! 984: 955 00011025 0d 01 effffff7e4 movl $1,_force_loop ! 985: 956 0001102C # asm("brw _lnf_6_lp1");; /* and loop on the error */ ! 986: 957 0001102C 13 ff4f brw _lnf_6_lp1 ! 987: 958 0001102F # } /* end of loop on error */ ! 988: 959 0001102F # } /* end of compare error */ ! 989: 960 0001102F L339: ! 990: 961 0001102F # } /* end of WHILE loop */ ! 991: 962 0001102F L332: ! 992: 963 0001102F L328: ! 993: 964 0001102F 6d effffff7db incl _index ! 994: 965 00011035 13 ff0a jbr L330 ! 995: 966 00011038 L329: ! 996: 967 00011038 # } /* end of subtest 6 */ ! 997: 968 00011038 40 ret#2 ! 998: 969 00011039 .set L324,0x0 ! 999: 970 00011039 L326: ! 1000: 971 00011039 13 fef3 jbr L327 ! 1001: 972 0001103C .data ! 1002: 973 0000093c * .text ! 1003: 974 0001103C .align 1 ! 1004: 975 0001103C .globl _print_lnf_data ! 1005: 976 0001103C _print_lnf_data: ! 1006: 977 0001103C 0000 .word L340 ! 1007: 978 0001103E # ! 1008: 979 0001103E # ! 1009: 980 0001103E # ! 1010: 981 0001103E # /************************************************************************** ! 1011: 982 0001103E # * ! 1012: 983 0001103E # * PRINT THE DATA AND STORE RESULTS ! 1013: 984 0001103E # * ! 1014: 985 0001103E # * initial Acc = xxxxxxxx, stored = xxxxxxxx, data index = xx ! 1015: 986 0001103E # **************************************************************************/ ! 1016: 987 0001103E # print_lnf_data() ! 1017: 988 0001103E # { ! 1018: 989 0001103E 11 58 jbr L342 ! 1019: 990 00011040 L343: ! 1020: 991 00011040 # writes("initial Acc = "); ! 1021: 992 00011040 .data 1 ! 1022: 993 00000b63 * L344: ! 1023: 994 00000b63 * 696E697469616C20416363203 .ascii "initial Acc = \0" ! 1024: D2000 ! 1025: 995 00000b72 * .text ! 1026: 996 00011040 dd 8f00000b63 pushl $L344 ! 1027: 997 00011046 fe 08 effffff7c3 callf $8,_writes ! 1028: 998 0001104D # write32h( sgl_ld_acc ); ! 1029: 999 0001104D dd effffff7bd pushl _sgl_ld_acc ! 1030: 1000 00011053 fe 08 effffff7b6 callf $8,_write32h ! 1031: 1001 0001105A # writes(", Acc stored = "); ! 1032: 1002 0001105A .data 1 ! 1033: 1003 00000b72 * L345: ! 1034: 1004 00000b72 * 2C202020204163632073746F7 .ascii ", Acc stored = \0" ! 1035: 26564203D2000 ! 1036: 1005 00000b85 * .text ! 1037: 1006 0001105A dd 8f00000b72 pushl $L345 ! 1038: 1007 00011060 fe 08 effffff7a9 callf $8,_writes ! 1039: 1008 00011067 # write32h( sgl_st_acc ); ! 1040: 1009 00011067 dd effffff7a3 pushl _sgl_st_acc ! 1041: 1010 0001106D fe 08 effffff79c callf $8,_write32h ! 1042: 1011 00011074 # writes(", data index = "); ! 1043: 1012 00011074 .data 1 ! 1044: 1013 00000b85 * L346: ! 1045: 1014 00000b85 * 2C20206461746120696E64657 .ascii ", data index = \0" ! 1046: 8203D2000 ! 1047: 1015 00000b96 * .text ! 1048: 1016 00011074 dd 8f00000b85 pushl $L346 ! 1049: 1017 0001107A fe 08 effffff78f callf $8,_writes ! 1050: 1018 00011081 # writed( index ); ! 1051: 1019 00011081 dd effffff789 pushl _index ! 1052: 1020 00011087 fe 08 effffff782 callf $8,_writed ! 1053: 1021 0001108E # writec('\n'); ! 1054: 1022 0001108E dd 0a pushl $10 ! 1055: 1023 00011090 fe 08 effffff779 callf $8,_writec ! 1056: 1024 00011097 # } ! 1057: 1025 00011097 40 ret#2 ! 1058: 1026 00011098 .set L340,0x0 ! 1059: 1027 00011098 L342: ! 1060: 1028 00011098 11 a6 jbr L343 ! 1061: 1029 0001109A .data ! 1062: 1030 0000093c * .text ! 1063: 1031 0001109A .align 1 ! 1064: 1032 0001109A .globl _lnf_er_halt ! 1065: 1033 0001109A _lnf_er_halt: ! 1066: 1034 0001109A 0000 .word L347 ! 1067: 1035 0001109C # ! 1068: 1036 0001109C # ! 1069: 1037 0001109C # ! 1070: 1038 0001109C # /************************************************************************** ! 1071: 1039 0001109C # * ! 1072: 1040 0001109C # * HALT ON ERROR ROUTINE ! 1073: 1041 0001109C # * ! 1074: 1042 0001109C # **************************************************************************/ ! 1075: 1043 0001109C # lnf_er_halt( halt_code ) ! 1076: 1044 0001109C # int halt_code; ! 1077: 1045 0001109C # { ! 1078: 1046 0001109C 13 00a8 jbr L349 ! 1079: 1047 0001109F L350: ! 1080: 1048 0001109F # sgl_dummy1 = halt_code; /* get the error type */ ! 1081: 1049 0001109F 0d ad04 effffff769 movl 4(fp),_sgl_dummy1 ! 1082: 1050 000110A7 # asm("movl _test_no,r0"); /* r0 = test number */ ! 1083: 1051 000110A7 0d effffff763 50 movl _test_no,r0 ! 1084: 1052 000110AE # asm("movl _subtest,r1"); /* r1 = subtest number */ ! 1085: 1053 000110AE 0d effffff75c 51 movl _subtest,r1 ! 1086: 1054 000110B5 # asm("movl _sgl_dummy1,r2"); /* r2 = error code */ ! 1087: 1055 000110B5 0d effffff755 52 movl _sgl_dummy1,r2 ! 1088: 1056 000110BC # asm("movl _cycle,r3"); /* r3 = cycle count */ ! 1089: 1057 000110BC 0d effffff74e 53 movl _cycle,r3 ! 1090: 1058 000110C3 # asm("movl _sgl_ld_acc,r4"); /* r4 = initial data */ ! 1091: 1059 000110C3 0d effffff747 54 movl _sgl_ld_acc,r4 ! 1092: 1060 000110CA # asm("movl _sgl_st_acc,r5"); /* r5 = data stored */ ! 1093: 1061 000110CA 0d effffff740 55 movl _sgl_st_acc,r5 ! 1094: 1062 000110D1 # if( halt_code == BAD_ACC_HLT ) { ! 1095: 1063 000110D1 1d ad04 01 cmpl 4(fp),$1 ! 1096: 1064 000110D5 21 10 jneq L351 ! 1097: 1065 000110D7 # asm("movl _sgl_expected,r6"); /* r6 = data expected */ ! 1098: 1066 000110D7 0d effffff733 56 movl _sgl_expected,r6 ! 1099: 1067 000110DE # asm("movl _index,r7"); /* r7 = data index */ ! 1100: 1068 000110DE 0d effffff72c 57 movl _index,r7 ! 1101: 1069 000110E5 # } else ! 1102: 1070 000110E5 11 5e jbr L352 ! 1103: 1071 000110E7 L351: ! 1104: 1072 000110E7 # if( halt_code == BAD_REG_HLT ) { ! 1105: 1073 000110E7 1d ad04 02 cmpl 4(fp),$2 ! 1106: 1074 000110EB 21 3d jneq L353 ! 1107: 1075 000110ED # sgl_dummy1 = load_regs[index2]; ! 1108: 1076 000110ED 0d effffff71d 50 movl _index2,r0 ! 1109: 1077 000110F4 0d 40effffff715 movl _load_regs[r0],_sgl_dummy1 ! 1110: effffff710 ! 1111: 1078 00011100 # sgl_dummy2 = store_regs[index2]; ! 1112: 1079 00011100 0d effffff70a 50 movl _index2,r0 ! 1113: 1080 00011107 0d 40effffff702 movl _store_regs[r0],_sgl_dummy2 ! 1114: effffff6fd ! 1115: 1081 00011113 # asm("movl _index2,r6"); /* r6 = bad register # */ ! 1116: 1082 00011113 0d effffff6f7 56 movl _index2,r6 ! 1117: 1083 0001111A # asm("movl _sgl_dummy2,r7"); /* r7 = actual value */ ! 1118: 1084 0001111A 0d effffff6f0 57 movl _sgl_dummy2,r7 ! 1119: 1085 00011121 # asm("movl _sgl_dummy1,r8"); /* r8 = expected value */ ! 1120: 1086 00011121 0d effffff6e9 58 movl _sgl_dummy1,r8 ! 1121: 1087 00011128 # } else ! 1122: 1088 00011128 11 1b jbr L354 ! 1123: 1089 0001112A L353: ! 1124: 1090 0001112A # if( halt_code == BAD_PSL_HLT ) { ! 1125: 1091 0001112A 1d ad04 03 cmpl 4(fp),$3 ! 1126: 1092 0001112E 21 15 jneq L355 ! 1127: 1093 00011130 # asm("movl _init_psl,r6"); /* r6 = initial PSL */ ! 1128: 1094 00011130 0d effffff6da 56 movl _init_psl,r6 ! 1129: 1095 00011137 # asm("movl _psl_val,r7"); /* r7 = final PSL */ ! 1130: 1096 00011137 0d effffff6d3 57 movl _psl_val,r7 ! 1131: 1097 0001113E # asm("movl _exp_psl,r8"); /* r8 = expected PSL */ ! 1132: 1098 0001113E 0d effffff6cc 58 movl _exp_psl,r8 ! 1133: 1099 00011145 # }; ! 1134: 1100 00011145 L355: ! 1135: 1101 00011145 L354: ! 1136: 1102 00011145 L352: ! 1137: 1103 00011145 # asm("halt"); /* HALT ... */ ! 1138: 1104 00011145 00 halt ! 1139: 1105 00011146 # } ! 1140: 1106 00011146 40 ret#2 ! 1141: 1107 00011147 .set L347,0x0 ! 1142: 1108 00011147 L349: ! 1143: 1109 00011147 13 ff55 jbr L350 ! 1144: 1110 0001114A .data ! 1145: 1110 0002195A .data
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.