|
|
1.1 ! root 1: ! 2: ! 3: /* ANDW3 (and word 3 operand) test */ ! 4: ! 5: /*Test name = andw3 */ ! 6: /*Description = */ ! 7: /* This test checks 'andw3' instruction as follows: */ ! 8: /* source mask destination Z N C V(flags) */ ! 9: /* ___________ ____ ___________ _____________ */ ! 10: /* 0xaaaa 0xaaaa 0x7fffaaaa 0 0 1 0 */ ! 11: /* 0xaaaa 0x5555 0x7fff0000 1 0 1 0 */ ! 12: /* R R R --- */ ! 13: /* M M M --- */ ! 14: /* R M M --- */ ! 15: /* M R R --- */ ! 16: /* */ ! 17: /* */ ! 18: /* Constants */ ! 19: /* */ ! 20: .set MASK1B3,0xaa ! 21: .set MASK1W3,0xaaaa ! 22: .set MASK1L3,0xaaaaaaaa ! 23: .set MASK2B3,0x55 ! 24: .set MASK2W3,0x5555 ! 25: .set MASK2L3,0x55555555 ! 26: .set SOURCE1B3,0xaa ! 27: .set SOURCE1W3,0xaaaa ! 28: .set SOURCE1L3,0xaaaaaaaa ! 29: .set SOURCE2B3,0xaa ! 30: .set SOURCE2W3,0xaaaa ! 31: .set SOURCE2L3,0xaaaaaaaa ! 32: .set INITIAL3,0x7fffffff ! 33: .set EXP1B3,0x7fffffaa ! 34: .set EXP1W3,0x7fffaaaa ! 35: .set EXP1L3,0xaaaaaaaa ! 36: .set EXP2B3,0x7fffff00 ! 37: .set EXP2W3,0x7fff0000 ! 38: .set EXP2L3,0x00000000 ! 39: ! 40: /* */ ! 41: /* */ ! 42: /* */ ! 43: /* Syst.s - constants */ ! 44: /* */ ! 45: .set IPL,8 ! 46: .set HIGH,31 ! 47: .set ZERO,0 ! 48: .set ONES,0xffffffff ! 49: .set N,8 ! 50: .set Z,4 ! 51: .set V,2 ! 52: .set C,1 ! 53: .set T,16 ! 54: .set IV,32 ! 55: .set FU,64 ! 56: .set DV,128 ! 57: .set PSWMASK,0x003f ! 58: ! 59: .globl _andw3 ! 60: _andw3: callf $4,_setjmp /* save context for error return */ ! 61: movab _andw3,_stpc /* subtest address */ ! 62: movl $1,_subtst /* subtest number */ ! 63: movl $2,_no_opr /* number of operands in use */ ! 64: movl $MASK1W3,_opr /* first operand */ ! 65: movl $SOURCE1W3,_opr + 4 /* second operand */ ! 66: 0: movl $MASK1W3,r3 /*mask */ ! 67: movl $SOURCE1W3,r4 /*source */ ! 68: movl $INITIAL3,r5 /*destination */ ! 69: bispsw $(Z|V|C) /*overflow, Z & carry bits ON */ ! 70: andw3 r3,r4,r5 /*try it reg reg reg */ ! 71: jeql error1 /*error if Z = 1 */ ! 72: jlss error1 /*error if N = 1 */ ! 73: jcc error1 /*error if C = 0 */ ! 74: jvs error1 /*error if V = 1 */ ! 75: movl $0xaaaa,r4 ! 76: cmpl r5,$0xaaaa /*if dest <> expected value, */ ! 77: jeql a2 /* if correct continue */ ! 78: movl $1,_ercode /* error code data miscompare */ ! 79: bbs $0,_scoplp,0b /* if set loop on error */ ! 80: movl r5,_actual /* actual data */ ! 81: movl $0xaaaa,_expected /* expected data */ ! 82: jmp *badrtn ! 83: error1: movpsl _actual /* actual = psl */ ! 84: bbs $0,_scoplp,0b /* if set loop on error */ ! 85: movl $2,_ercode /* error code flag miscompare */ ! 86: jmp *badrtn ! 87: ! 88: /* Now try another mask(0x55) */ ! 89: /* */ ! 90: a2: bbs $0,_force_lp,0b /* if set loop on error */ ! 91: aa2: callf $4,_setjmp /* save context for error return */ ! 92: movab aa2,_stpc /* subtest address */ ! 93: movl $2,_subtst /* subtest number */ ! 94: movl $2,_no_opr /* number of operands in use */ ! 95: movl $MASK2W3,_opr /* first operand */ ! 96: movl $SOURCE2W3,_opr + 4 /* second operand */ ! 97: 0: bicpsw $PSWMASK /*turn overflow enable bit off */ ! 98: movl $MASK2W3,mask /*mask */ ! 99: movl $INITIAL3,r5 /*destination */ ! 100: bispsw $(N|V) /*overflow & negetive bits ON */ ! 101: andw3 mask+2,$SOURCE2W3,r5/* try again mem data reg */ ! 102: jneq error2 /*error if Z = 0 */ ! 103: jlss error2 /*error if N = 1 */ ! 104: jcc error2 /*error if C = 1 */ ! 105: jvs error2 /*error if V = 1 */ ! 106: cmpl r5,$0 /*if dest <> expected value, */ ! 107: jeql andw3mmm /* if correct continue */ ! 108: movl $1,_ercode /* error code data miscompare */ ! 109: bbs $0,_scoplp,0b /* if set loop on error */ ! 110: movl r5,_actual /* actual data */ ! 111: movl $0,_expected /* expected data */ ! 112: jmp *badrtn ! 113: error2: movpsl _actual /* actual = psl it is incorrect */ ! 114: bbs $0,_scoplp,0b /* if set loop on error */ ! 115: movl $2,_ercode /* error code flag miscompare */ ! 116: jmp *badrtn ! 117: /* */ ! 118: /* now try source = M, mask = M, destination = M */ ! 119: andw3mmm: ! 120: ! 121: bbs $0,_force_lp,0b /* if set loop on error */ ! 122: aa3: callf $4,_setjmp /* save context for error return */ ! 123: movab aa3,_stpc /* subtest address */ ! 124: movl $3,_subtst /* subtest number */ ! 125: movl $2,_no_opr /* number of operands in use */ ! 126: movl $MASK1W3,_opr /* first operand */ ! 127: movl $SOURCE1W3,_opr + 4 /* second operand */ ! 128: 0: bicpsw $PSWMASK /*turn overflow enable bit off */ ! 129: movl $MASK1W3,mask /*mask */ ! 130: movl $SOURCE1W3,source/*source */ ! 131: movl $INITIAL3,dest /*destination */ ! 132: bispsw $(Z|V|C) /*overflow, Z & carry bits ON */ ! 133: andw3 mask+2,source+2,dest+2/*try it mem mem mem */ ! 134: jeql error3 /*error if Z = 1 */ ! 135: jgeq error3 /*error if N = 1 */ ! 136: jcc error3 /*error if C = 0 */ ! 137: jvs error3 /*error if V = 1 */ ! 138: cmpl dest,$EXP1W3 /*if dest <> expected value, */ ! 139: jeql a4 /* if correct continue */ ! 140: movl $1,_ercode /* error code data miscompare */ ! 141: bbs $0,_scoplp,0b /* if set loop on error */ ! 142: movl dest,_actual /* actual data */ ! 143: movl $EXP1W3,_expected /* expected data */ ! 144: jmp *badrtn ! 145: error3: movpsl _actual /* actual = psl it is incorrect */ ! 146: bbs $0,_scoplp,0b /* if set loop on error */ ! 147: movl $2,_ercode /* error code flag miscompare */ ! 148: jmp *badrtn ! 149: ! 150: /* Now try another mask(0x55) */ ! 151: /* */ ! 152: ! 153: a4: bbs $0,_force_lp,0b /* if set loop on error */ ! 154: aa4: callf $4,_setjmp /* save context for error return */ ! 155: movab aa4,_stpc /* subtest address */ ! 156: movl $4,_subtst /* subtest number */ ! 157: movl $2,_no_opr /* number of operands in use */ ! 158: movl $MASK2W3,_opr /* first operand */ ! 159: movl $SOURCE2W3,_opr + 4 /* second operand */ ! 160: 0: bicpsw $PSWMASK /*turn overflow enable bit off */ ! 161: movl $MASK2W3,mask /*mask */ ! 162: movl $SOURCE2W3,source/*source */ ! 163: movl $INITIAL3,r5 /*destination */ ! 164: bispsw $(N|V) /*overflow & negetive bits ON */ ! 165: andw3 mask+2,source+2,r5/* try again mem mem reg */ ! 166: jneq error4 /*error if Z = 0 */ ! 167: jlss error4 /*error if N = 1 */ ! 168: jcc error4 /*error if C = 1 */ ! 169: jvs error4 /*error if V = 1 */ ! 170: movl $0x0,r4 ! 171: cmpl r5,r4 /*if dest <> expected value, */ ! 172: jeql andw3mrm /* if correct continue */ ! 173: movl $1,_ercode /* error code data miscompare */ ! 174: bbs $0,_scoplp,0b /* if set loop on error */ ! 175: movl r5,_actual /* actual data */ ! 176: movl $0,_expected /* expected data */ ! 177: jmp *badrtn ! 178: error4: movpsl _actual /* actual = psl it is incorrect */ ! 179: bbs $0,_scoplp,0b /* if set loop on error */ ! 180: movl $2,_ercode /* error code flag miscompare */ ! 181: jmp *badrtn ! 182: /* */ ! 183: /* Now use mask = R, source & destination = M */ ! 184: andw3mrm: ! 185: bbs $0,_force_lp,0b /* if set loop on error */ ! 186: aa5: callf $4,_setjmp /* save context for error return */ ! 187: movab aa5,_stpc /* subtest address */ ! 188: movl $5,_subtst /* subtest number */ ! 189: movl $2,_no_opr /* number of operands in use */ ! 190: movl $MASK1W3,_opr /* first operand */ ! 191: movl $SOURCE1W3,_opr + 4 /* second operand */ ! 192: 0: ! 193: bicpsw $PSWMASK /*turn overflow enable bit off */ ! 194: movl $MASK1W3,r3 /*mask */ ! 195: movl $SOURCE1W3,source/*source */ ! 196: movl $INITIAL3,dest /*destination */ ! 197: bispsw $(Z|V|C) /*overflow, Z & carry bits ON */ ! 198: andw3 r3,source+2,dest+2 /*try it reg mem mem */ ! 199: jeql error5 /*error if Z = 1 */ ! 200: jlss error5 /*error if N = 1 */ ! 201: jcc error5 /*error if C = 0 */ ! 202: jvs error5 /*error if V = 1 */ ! 203: movl $EXP1W3,r4 ! 204: cmpl dest,$EXP1W3 /*if dest <> expected value, */ ! 205: jeql a6 /* if correct continue */ ! 206: movl $1,_ercode /* error code data miscompare */ ! 207: bbs $0,_scoplp,0b /* if set loop on error */ ! 208: movl dest,_actual /* actual data */ ! 209: movl $EXP1W3,_expected /* expected data */ ! 210: jmp *badrtn ! 211: error5: movpsl _actual /* actual = psl it is incorrect */ ! 212: bbs $0,_scoplp,0b /* if set loop on error */ ! 213: movl $2,_ercode /* error code flag miscompare */ ! 214: jmp *badrtn ! 215: /* */ ! 216: /* Now try another mask(0x55) */ ! 217: /* */ ! 218: a6: bbs $0,_force_lp,0b /* if set loop on error */ ! 219: aa6: callf $4,_setjmp /* save context for error return */ ! 220: movab aa6,_stpc /* subtest address */ ! 221: movl $6,_subtst /* subtest number */ ! 222: movl $2,_no_opr /* number of operands in use */ ! 223: movl $MASK2W3,_opr /* first operand */ ! 224: movl $SOURCE2W3,_opr + 4 /* second operand */ ! 225: 0: bicpsw $PSWMASK /*turn overflow enable bit off */ ! 226: movl $INITIAL3,dest /*destination */ ! 227: bispsw $(N|V) /*overflow & negetive bits ON */ ! 228: andw3 $MASK2W3,$SOURCE2W3,dest+2/* try again data data mem */ ! 229: jneq error6 /*error if Z = 0 */ ! 230: jlss error6 /*error if N = 1 */ ! 231: jcc error6 /*error if C = 1 */ ! 232: jvs error6 /*error if V = 1 */ ! 233: movl $EXP2W3,r4 ! 234: cmpl dest,$EXP2W3 /*if dest <> expected value, */ ! 235: jeql andw3rmm /* if correct continue */ ! 236: movl $1,_ercode /* error code data miscompare */ ! 237: bbs $0,_scoplp,0b /* if set loop on error */ ! 238: movl dest,_actual /* actual data */ ! 239: movl $EXP2W3,_expected /* expected data */ ! 240: jmp *badrtn ! 241: error6: movpsl _actual /* actual = psl it is incorrect */ ! 242: bbs $0,_scoplp,0b /* if set loop on error */ ! 243: movl $2,_ercode /* error code flag miscompare */ ! 244: jmp *badrtn ! 245: /* */ ! 246: /* Now try mask = M, source = R, dest = M */ ! 247: /* */ ! 248: andw3rmm: ! 249: bbs $0,_force_lp,0b /* if set loop on error */ ! 250: aa7: callf $4,_setjmp /* save context for error return */ ! 251: movab aa7,_stpc /* subtest address */ ! 252: movl $7,_subtst /* subtest number */ ! 253: movl $2,_no_opr /* number of operands in use */ ! 254: movl $MASK1W3,_opr /* first operand */ ! 255: movl $SOURCE1W3,_opr + 4 /* second operand */ ! 256: 0: bicpsw $PSWMASK /*turn overflow enable bit off */ ! 257: movl $MASK1W3,mask /*mask */ ! 258: movl $SOURCE1W3,r4 /*source */ ! 259: movl $INITIAL3,dest /*destination */ ! 260: bispsw $(Z|V|C) /*overflow, Z & carry bits ON */ ! 261: andw3 mask+2,r4,dest+2/*try it mem reg mem */ ! 262: jeql error7 /*error if Z = 1 */ ! 263: jlss error7 /*error if N = 1 */ ! 264: jcc error7 /*error if C = 0 */ ! 265: jvs error7 /*error if V = 1 */ ! 266: movl $EXP1W3,r4 ! 267: cmpl dest,$EXP1W3 /*if dest <> expected value, */ ! 268: jeql a8 /* if correct continue */ ! 269: movl $1,_ercode /* error code data miscompare */ ! 270: bbs $0,_scoplp,0b /* if set loop on error */ ! 271: movl dest,_actual /* actual data */ ! 272: movl $EXP1W3,_expected /* expected data */ ! 273: jmp *badrtn ! 274: error7: movpsl _actual /* actual = psl it is incorrect */ ! 275: bbs $0,_scoplp,0b /* if set loop on error */ ! 276: movl $2,_ercode /* error code flag miscompare */ ! 277: jmp *badrtn ! 278: ! 279: /* Now try another mask(0x55) */ ! 280: /* */ ! 281: ! 282: a8: bbs $0,_force_lp,0b /* if set loop on error */ ! 283: aa8: callf $4,_setjmp /* save context for error return */ ! 284: movab aa8,_stpc /* subtest address */ ! 285: movl $8,_subtst /* subtest number */ ! 286: movl $2,_no_opr /* number of operands in use */ ! 287: movl $MASK2W3,_opr /* first operand */ ! 288: movl $SOURCE2W3,_opr + 4 /* second operand */ ! 289: 0: bicpsw $PSWMASK /*turn overflow enable bit off */ ! 290: movl $SOURCE2W3,r4 /*source */ ! 291: movl $INITIAL3,dest /*destination */ ! 292: bispsw $(N|V) /*overflow & negetive bits ON */ ! 293: andw3 $MASK2W3,r4,dest+2/* try again data reg mem */ ! 294: jneq error8 /*error if Z = 0 */ ! 295: jlss error8 /*error if N = 1 */ ! 296: jcc error8 /*error if C = 1 */ ! 297: jvs error8 /*error if V = 1 */ ! 298: movl $EXP2W3,r4 ! 299: cmpl dest,$EXP2W3 /*if dest <> expected value, */ ! 300: jeql andw3mrr /* if correct continue */ ! 301: movl $1,_ercode /* error code data miscompare */ ! 302: bbs $0,_scoplp,0b /* if set loop on error */ ! 303: movl dest,_actual /* actual data */ ! 304: movl $EXP2W3,_expected /* expected data */ ! 305: jmp *badrtn ! 306: error8: movpsl _actual /* actual = psl it is incorrect */ ! 307: bbs $0,_scoplp,0b /* if set loop on error */ ! 308: movl $2,_ercode /* error code flag miscompare */ ! 309: jmp *badrtn ! 310: /* */ ! 311: /* Now try mask = R, source = M, dest = R */ ! 312: /* */ ! 313: andw3mrr: ! 314: bbs $0,_force_lp,0b /* if set loop on error */ ! 315: aa9: callf $4,_setjmp /* save context for error return */ ! 316: movab aa9,_stpc /* subtest address */ ! 317: movl $9,_subtst /* subtest number */ ! 318: movl $2,_no_opr /* number of operands in use */ ! 319: movl $MASK1W3,_opr /* first operand */ ! 320: movl $SOURCE1W3,_opr + 4 /* second operand */ ! 321: 0: bicpsw $PSWMASK /*turn overflow enable bit off */ ! 322: movl $MASK1W3,r3 /*mask */ ! 323: movl $SOURCE1W3,source/*source */ ! 324: movl $INITIAL3,r5 /*destination */ ! 325: bispsw $(Z|V|C) /*overflow, Z & carry bits ON */ ! 326: andw3 r3,source+2,r5 /*try it reg mem reg */ ! 327: jeql error9 /*error if Z = 1 */ ! 328: jlss error9 /*error if N = 1 */ ! 329: jcc error9 /*error if C = 0 */ ! 330: jvs error9 /*error if V = 1 */ ! 331: cmpl r5,$0xaaaa /*if dest <> expected value, */ ! 332: jeql a10 /* if correct continue */ ! 333: movl $1,_ercode /* error code data miscompare */ ! 334: bbs $0,_scoplp,0b /* if set loop on error */ ! 335: movl r5,_actual /* actual data */ ! 336: movl $0xaaaa,_expected /* expected data */ ! 337: jmp *badrtn ! 338: error9: movpsl _actual /* actual = psl it is incorrect */ ! 339: bbs $0,_scoplp,0b /* if set loop on error */ ! 340: movl $2,_ercode /* error code flag miscompare */ ! 341: jmp *badrtn ! 342: ! 343: /* Now try another mask(0x55) */ ! 344: /* */ ! 345: ! 346: a10: bbs $0,_force_lp,0b /* if set loop on error */ ! 347: aa10: callf $4,_setjmp /* save context for error return */ ! 348: movab aa10,_stpc /* subtest address */ ! 349: movl $0xa,_subtst /* subtest number */ ! 350: movl $2,_no_opr /* number of operands in use */ ! 351: movl $MASK2W3,_opr /* first operand */ ! 352: movl $SOURCE2W3,_opr + 4 /* second operand */ ! 353: 0: bicpsw $PSWMASK /*turn overflow enable bit off */ ! 354: movl $SOURCE2W3,r4 /*source */ ! 355: movl $INITIAL3,r5 /*destination */ ! 356: bispsw $(N|V) /*overflow & negetive bits ON */ ! 357: andw3 $MASK2W3,r4,r5 /* try again data reg reg */ ! 358: jneq error10 /*error if Z = 0 */ ! 359: jlss error10 /*error if N = 1 */ ! 360: jcc error10 /*error if C = 1 */ ! 361: jvs error10 /*error if V = 1 */ ! 362: cmpl r5,$0 /*if dest <> expected value, */ ! 363: jeql a11 /* if correct continue */ ! 364: movl $1,_ercode /* error code data miscompare */ ! 365: bbs $0,_scoplp,0b /* if set loop on error */ ! 366: movl r5,_actual /* actual data */ ! 367: movl $0,_expected /* expected data */ ! 368: jmp *badrtn ! 369: error10: movpsl _actual /* actual = psl it is incorrect */ ! 370: bbs $0,_scoplp,0b /* if set loop on error */ ! 371: movl $2,_ercode /* error code flag miscompare */ ! 372: jmp *badrtn ! 373: ! 374: a11: bbs $0,_force_lp,0b /* if set loop on error */ ! 375: aa11: callf $4,_setjmp /* save context for error return */ ! 376: movab aa11,_stpc /* subtest address */ ! 377: movl $0xb,_subtst /* subtest number */ ! 378: movl $2,_no_opr /* number of operands in use */ ! 379: movl $MASK1W3,_opr /* first operand */ ! 380: movl $SOURCE1W3,_opr + 4 /* second operand */ ! 381: 0: bicpsw $PSWMASK /*turn overflow enable bit off */ ! 382: movl $MASK1W3,r3 /*mask */ ! 383: movl $INITIAL3,r5 /*destination */ ! 384: bispsw $(Z|V|C) /*overflow, Z & carry bits ON */ ! 385: andw3 r3,$SOURCE1W3,r5/*try it reg data reg */ ! 386: jeql error11 /*error if Z = 1 */ ! 387: jlss error11 /*error if N = 1 */ ! 388: jcc error11 /*error if C = 0 */ ! 389: jvs error11 /*error if V = 1 */ ! 390: cmpl r5,$0xaaaa /*if dest <> expected value, */ ! 391: jeql a12 /* if correct continue */ ! 392: movl $1,_ercode /* error code data miscompare */ ! 393: bbs $0,_scoplp,0b /* if set loop on error */ ! 394: movl r5,_actual /* actual data */ ! 395: movl $0xaaaa,_expected /* expected data */ ! 396: jmp *badrtn ! 397: error11: movpsl _actual /* actual = psl it is incorrect */ ! 398: bbs $0,_scoplp,0b /* if set loop on error */ ! 399: movl $2,_ercode /* error code flag miscompare */ ! 400: jmp *badrtn ! 401: ! 402: a12: bbs $0,_force_lp,0b /* if set loop on error */ ! 403: aa12: callf $4,_setjmp /* save context for error return */ ! 404: movab aa12,_stpc /* subtest address */ ! 405: movl $0xc,_subtst /* subtest number */ ! 406: movl $2,_no_opr /* number of operands in use */ ! 407: movl $MASK1W3,_opr /* first operand */ ! 408: movl $SOURCE1W3,_opr + 4 /* second operand */ ! 409: 0: bicpsw $PSWMASK /*turn overflow enable bit off */ ! 410: movl $MASK1W3,r3 /*mask */ ! 411: movl $SOURCE1W3,r4 /*source */ ! 412: movl $INITIAL3,dest /*destination */ ! 413: bispsw $(Z|V|C) /*overflow, Z & carry bits ON */ ! 414: andw3 r3,r4,dest+2 /*try it reg reg mem */ ! 415: jeql error12 /*error if Z = 1 */ ! 416: jlss error12 /*error if N = 1 */ ! 417: jcc error12 /*error if C = 0 */ ! 418: jvs error12 /*error if V = 1 */ ! 419: movl $0x7fffaaaa,r4 ! 420: cmpl dest,r4 /*if dest <> expected value, */ ! 421: jeql aldn /* if correct continue */ ! 422: movl $1,_ercode /* error code data miscompare */ ! 423: bbs $0,_scoplp,0b /* if set loop on error */ ! 424: movl dest,_actual /* actual data */ ! 425: movl $0xffffaaaa,_expected /* expected data */ ! 426: jmp *badrtn ! 427: error12: movpsl _actual /* actual = psl it is incorrect */ ! 428: bbs $0,_scoplp,0b /* if set loop on error */ ! 429: movl $2,_ercode /* error code flag miscompare */ ! 430: jmp *badrtn ! 431: aldn: bbs $0,_force_lp,0b /* if set loop on error */ ! 432: jmp *return /*good pass, goto monitor */ ! 433: ! 434: /* */ ! 435: /* Variables */ ! 436: /* */ ! 437: .align 2 ! 438: mask: .space 4 ! 439: source: .space 4 ! 440: dest: .space 4 ! 441: ! 442: /* */ ! 443: /* End of file */ ! 444:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.