|
|
1.1 ! root 1: ! 2: ! 3: /* CMPW (compare word) test */ ! 4: /* */ ! 5: /*Test name = cmpw */ ! 6: /*Description = */ ! 7: /* This test checks 'cmpw' instruction as follows: */ ! 8: /* src1 src2 N Z V C (flags) */ ! 9: /* ____ ____ _______________ */ ! 10: /* + = + 0 1 0 1 */ ! 11: /* - = - 0 1 0 1 */ ! 12: /* + > + 1 0 0 0 */ ! 13: /* - < - 1 0 0 0 */ ! 14: /* - = + 1 0 0 1 */ ! 15: /* - > + 1 0 0 1 */ ! 16: /* - < + 1 0 0 1 */ ! 17: /* + < - 0 0 0 0 */ ! 18: /* + = - 0 0 0 0 */ ! 19: /* + > - 0 0 0 0 */ ! 20: /* - > - 0 0 0 1 */ ! 21: /* + > + 0 0 0 1 */ ! 22: /* M ---- M ------- */ ! 23: /* R ---- M ------- */ ! 24: /* */ ! 25: /* */ ! 26: /* */ ! 27: ! 28: /* */ ! 29: /* constants definition for 'cmpx' tests. */ ! 30: /* */ ! 31: ! 32: .set SRC1B1,0x7f /*+127, highest +ve number, byte */ ! 33: .set SRC1W1,0x7fff ! 34: .set SRC1L1,0x7fffffff ! 35: .set SRC2B1,0x5555557f ! 36: .set SRC2W1,0x55557fff ! 37: .set SRC2L1,SRC1L1 ! 38: .set SRC1B2,0xff /*-1, highest -ve number, byte */ ! 39: .set SRC1W2,0xffff ! 40: .set SRC1L2,0xffffffff ! 41: .set SRC2B2,SRC1B2 ! 42: .set SRC2W2,SRC1W2 ! 43: .set SRC2L2,SRC1L2 ! 44: .set SRC1B3,0x01 ! 45: .set SRC1W3,0X0001 ! 46: .set SRC1L3,0x00000001 ! 47: .set SRC2B3,0x02 ! 48: .set SRC2W3,0x0002 ! 49: .set SRC2L3,0x00000002 ! 50: .set SRC1B4,0xfe /*-2 */ ! 51: .set SRC1W4,0xfffe ! 52: .set SRC1L4,0xfffffffe ! 53: .set SRC2B4,0xff /*-1 */ ! 54: .set SRC2W4,0xffff ! 55: .set SRC2L4,0xffffffff ! 56: .set SRC1B5,0x81 /*-127 */ ! 57: .set SRC1W5,0x8001 ! 58: .set SRC1L5,0x80000001 ! 59: .set SRC2B5,0x7f /*+127 */ ! 60: .set SRC2W5,0x7fff ! 61: .set SRC2L5,0x7fffffff ! 62: .set SRC1B6,SRC1B4 /*-2 */ ! 63: .set SRC1W6,SRC1W4 ! 64: .set SRC1L6,SRC1L4 ! 65: .set SRC2B6,SRC1B3 /*+1 */ ! 66: .set SRC2W6,SRC1W3 ! 67: .set SRC2L6,SRC1L3 ! 68: .set SRC1B7,SRC2B4 /*-1 */ ! 69: .set SRC1W7,SRC2W4 ! 70: .set SRC1L7,SRC2L4 ! 71: .set SRC2B7,SRC2B3 ! 72: .set SRC2W7,SRC2W3 ! 73: .set SRC2L7,SRC2L3 ! 74: .set SRC1B8,SRC2B6 /*+1*/ ! 75: .set SRC1W8,SRC2W6 ! 76: .set SRC1L8,SRC2L6 ! 77: .set SRC2B8,SRC1B4 /*-2*/ ! 78: .set SRC2W8,SRC1W4 ! 79: .set SRC2L8,SRC1L4 ! 80: .set SRC1B9,SRC1B1 /*127*/ ! 81: .set SRC1W9,SRC1W1 ! 82: .set SRC1L9,SRC1L1 ! 83: .set SRC2B9,SRC1B5 /*-127*/ ! 84: .set SRC2W9,SRC1W5 ! 85: .set SRC2L9,SRC1L5 ! 86: .set SRC1B10,SRC2B3 /*2*/ ! 87: .set SRC1W10,SRC2W3 ! 88: .set SRC1L10,SRC2L3 ! 89: .set SRC2B10,SRC1B2 /*-1*/ ! 90: .set SRC2W10,SRC1W2 ! 91: .set SRC2L10,SRC1L2 ! 92: .set SRC1B11,SRC1B2 /*-1*/ ! 93: .set SRC1W11,SRC1W2 ! 94: .set SRC1L11,SRC1L2 ! 95: .set SRC2B11,SRC1B4 /*-2*/ ! 96: .set SRC2W11,SRC1W4 ! 97: .set SRC2L11,SRC1L4 ! 98: .set SRC1B12,SRC2B3 /*2*/ ! 99: .set SRC1W12,SRC2W3 ! 100: .set SRC1L12,SRC2L3 ! 101: .set SRC2B12,SRC1B3 /*1*/ ! 102: .set SRC2W12,SRC1W3 ! 103: .set SRC2L12,SRC1L3 ! 104: ! 105: /* */ ! 106: /* Syst.s - Constants */ ! 107: /* */ ! 108: .set IPL,8 ! 109: .set HIGH,31 ! 110: .set ZERO,0 ! 111: .set ONES,0xffffffff ! 112: .set N,8 ! 113: .set Z,4 ! 114: .set V,2 ! 115: .set C,1 ! 116: .set T,16 ! 117: .set IV,32 ! 118: .set FU,64 ! 119: .set DV,128 ! 120: .set PSWMASK,0x003f ! 121: /* */ ! 122: /* t1loc = M, t2loc = M */ ! 123: /* */ ! 124: .globl _cmp_w ! 125: _cmp_w: ! 126: callf $4,_setjmp /* save context for error return */ ! 127: movab _cmp_w,_stpc /* save subtest starting address */ ! 128: movl $1,_subtst /* subtest number */ ! 129: movl $2,_no_opr /* number of operands in use */ ! 130: movl $SRC1W1,_opr /* first operand */ ! 131: movl $SRC2W1,_opr + 4 /* second operand */ ! 132: 0: movl $SRC1W1,tloc1 /*tloc1 = source1 */ ! 133: movl $SRC2W1,tloc2 /*tloc2 = source2 */ ! 134: bicpsw $PSWMASK /*disable overflow & other enable bits */ ! 135: bispsw $(N|V|C) /*turn neg, overflow, & carry ON */ ! 136: cmpw tloc1+2,tloc2+2 /*execute compare memory to memory */ ! 137: bneq error1 /*error if Z = 0 */ ! 138: blss error1 /*error if N = 1 */ ! 139: bvs error1 /*error if V = 1 */ ! 140: bcc error1 /*error if C = 0 */ ! 141: jmp 1f ! 142: error1: movpsl _actual /* actual = psl MAYBE it is incorrect */ ! 143: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 144: movl $2,_ercode /* error code flag failure */ ! 145: jmp *badrtn ! 146: 1: bicpsw $Z /*clear Z flag */ ! 147: cmpl $SRC1W1,tloc1 /*check tloc1+2 & tlco2 unchanged */ ! 148: beql 1f /* no error then continue */ ! 149: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 150: movl $3,_ercode /* error code operand was changed */ ! 151: movl tloc1,_actual /* actual data */ ! 152: movl $SRC1W1,_expected /* expected data */ ! 153: jmp *badrtn ! 154: 1: bicpsw $Z ! 155: movl $SRC2W1,r4 ! 156: cmpl $SRC2W1,tloc2 ! 157: beql c2 /* no error then continue */ ! 158: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 159: movl $3,_ercode /* error code operand was changed */ ! 160: movl tloc1,_actual /* actual data */ ! 161: movl $SRC1W1,_expected /* expected data */ ! 162: jmp *badrtn ! 163: /* */ ! 164: /* different patterns for source1 & source2 */ ! 165: /* */ ! 166: c2: ! 167: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 168: ac2: callf $4,_setjmp /* save context for error return */ ! 169: movab ac2,_stpc /* save subtest starting address */ ! 170: movl $2,_subtst /* subtest number */ ! 171: movl $2,_no_opr /* number of operands in use */ ! 172: movl $SRC1W2,_opr /* first operand */ ! 173: movl $-1,_opr + 4 /* second operand */ ! 174: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ ! 175: movl $SRC1W2,tloc1 /*tloc1 = source1 */ ! 176: bispsw $(N|V|C) /*turn neg, overflow, & carry ON */ ! 177: cmpw tloc1+2,$-1 /*execute compare memory to data */ ! 178: bneq error2 /*error if Z = 0 */ ! 179: blss error2 /*error if N = 1 */ ! 180: bvs error2 /*error if V = 1 */ ! 181: bcc error2 /*error if C = 0 */ ! 182: jmp cmpwnc ! 183: error2: movpsl _actual /* actual = psl MAYBE it is incorrect */ ! 184: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 185: movl $2,_ercode /* error code flag failure */ ! 186: jmp *badrtn ! 187: ! 188: cmpwnc: ! 189: ! 190: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 191: ac3: callf $4,_setjmp /* save context for error return */ ! 192: movab ac3,_stpc /* save subtest starting address */ ! 193: movl $3,_subtst /* subtest number */ ! 194: movl $2,_no_opr /* number of operands in use */ ! 195: movl $SRC1W3,_opr /* first operand */ ! 196: movl $SRC2W3,_opr + 4 /* second operand */ ! 197: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ ! 198: movl $SRC2W3,tloc2 /*tloc2 = source2 */ ! 199: bispsw $(Z|V) /*turn overflow, & zero ON */ ! 200: cmpw $SRC1W3,tloc2+2 /*execute compare e data to mem */ ! 201: beql error3 /*error if Z = 1 */ ! 202: bgeq error3 /*error if N = 0 */ ! 203: bvs error3 /*error if V = 1 */ ! 204: bcs error3 /*error if C = 1 */ ! 205: jmp c4 ! 206: error3: movpsl _actual /* actual = psl MAYBE it is incorrect */ ! 207: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 208: movl $2,_ercode /* error code flag failure */ ! 209: jmp *badrtn ! 210: /* */ ! 211: /* different patterns for source1 & source2 */ ! 212: /* */ ! 213: c4: ! 214: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 215: ac4: callf $4,_setjmp /* save context for error return */ ! 216: movab ac4,_stpc /* save subtest starting address */ ! 217: movl $4,_subtst /* subtest number */ ! 218: movl $2,_no_opr /* number of operands in use */ ! 219: movl $SRC1W4,_opr /* first operand */ ! 220: movl $SRC2W4,_opr + 4 /* second operand */ ! 221: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ ! 222: movl $SRC1W4,r3 /* r3 = source1 */ ! 223: movl $SRC2W4,r4 /* r4 = source2 */ ! 224: bispsw $(Z|V) /*turn overflow, & zero ON */ ! 225: cmpw r3,r4 /*execute compare reg to reg */ ! 226: beql error4 /*error if Z = 1 */ ! 227: bgeq error4 /*error if N = 0 */ ! 228: bvs error4 /*error if V = 1 */ ! 229: bcs error4 /*error if C = 1 */ ! 230: jmp cmpwn ! 231: error4: movpsl _actual /* actual = psl MAYBE it is incorrect */ ! 232: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 233: movl $2,_ercode /* error code flag failure */ ! 234: jmp *badrtn ! 235: ! 236: ! 237: cmpwn: ! 238: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 239: ac5: callf $4,_setjmp /* save context for error return */ ! 240: movab ac5,_stpc /* save subtest starting address */ ! 241: movl $5,_subtst /* subtest number */ ! 242: movl $2,_no_opr /* number of operands in use */ ! 243: movl $SRC1W5,_opr /* first operand */ ! 244: movl $SRC2W5,_opr + 4 /* second operand */ ! 245: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ ! 246: movl $SRC2W5,r4 /*tloc2 = source2 */ ! 247: bispsw $(Z|V|C) /*turn zero, overflow, & carry ON */ ! 248: cmpw $SRC1W5,r4 /*execute compare data to reg */ ! 249: beql error5 /*error if Z = 1 */ ! 250: blss error5 /*error if N = 1 */ ! 251: bvs error5 /*error if V = 1 */ ! 252: bcc error5 /*error if C = 0 */ ! 253: jmp c6 ! 254: error5: movpsl _actual /* actual = psl MAYBE it is incorrect */ ! 255: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 256: movl $2,_ercode /* error code flag failure */ ! 257: jmp *badrtn ! 258: /* */ ! 259: /* different patterns for source1 & source2 */ ! 260: /* */ ! 261: c6: ! 262: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 263: ac6: callf $4,_setjmp /* save context for error return */ ! 264: movab ac6,_stpc /* save subtest starting address */ ! 265: movl $6,_subtst /* subtest number */ ! 266: movl $2,_no_opr /* number of operands in use */ ! 267: movl $SRC1W6,_opr /* first operand */ ! 268: movl $SRC2W6,_opr + 4 /* second operand */ ! 269: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ ! 270: movl $SRC1W6,r3 /*tloc1 = source1 */ ! 271: movl $SRC2W6,tloc2 /*tloc2 = source2 */ ! 272: bispsw $(Z|V|C) /*turn zero, overflow, & carry ON */ ! 273: cmpw r3,tloc2+2 /*execute compare reg to memory */ ! 274: beql error6 /*error if Z = 1 */ ! 275: blss error6 /*error if N = 0 */ ! 276: bvs error6 /*error if V = 1 */ ! 277: bcc error6 /*error if C = 0 */ ! 278: jmp c7 ! 279: error6: movpsl _actual /* actual = psl MAYBE it is incorrect */ ! 280: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 281: movl $2,_ercode /* error code flag failure */ ! 282: jmp *badrtn ! 283: /* */ ! 284: /* different patterns for source1 & source2 */ ! 285: /* */ ! 286: c7: ! 287: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 288: ac7: callf $4,_setjmp /* save context for error return */ ! 289: movab ac7,_stpc /* save subtest starting address */ ! 290: movl $7,_subtst /* subtest number */ ! 291: movl $2,_no_opr /* number of operands in use */ ! 292: movl $SRC1W7,_opr /* first operand */ ! 293: movl $SRC2W7,_opr + 4 /* second operand */ ! 294: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ ! 295: movl $SRC1W7,r3 /*tloc1 = source1 */ ! 296: bispsw $(Z|V|C) /*turn zero, overflow, & carry ON */ ! 297: cmpw r3,$SRC2W7 /*execute compare reg to data */ ! 298: beql error7 /*error if Z = 1 */ ! 299: blss error7 /*error if N = 0 */ ! 300: bvs error7 /*error if V = 1 */ ! 301: bcc error7 /*error if C = 0 */ ! 302: jmp cmpwc ! 303: error7: movpsl _actual /* actual = psl MAYBE it is incorrect */ ! 304: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 305: movl $2,_ercode /* error code flag failure */ ! 306: jmp *badrtn ! 307: ! 308: cmpwc: ! 309: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 310: ac8: callf $4,_setjmp /* save context for error return */ ! 311: movab ac8,_stpc /* save subtest starting address */ ! 312: movl $8,_subtst /* subtest number */ ! 313: movl $2,_no_opr /* number of operands in use */ ! 314: movl $SRC1W8,_opr /* first operand */ ! 315: movl $SRC2W8,_opr + 4 /* second operand */ ! 316: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ ! 317: movl $SRC1W8,tloc1 /*tloc1 = source1 */ ! 318: movl $SRC2W8,tloc2 /*tloc2 = source2 */ ! 319: bispsw $(Z|V|N) /*turn zero, overflow, & neg ON */ ! 320: cmpw tloc1+2,tloc2+2 /*execute compare */ ! 321: beql error8 /*error if Z = 1 */ ! 322: blss error8 /*error if N = 1 */ ! 323: bvs error8 /*error if V = 1 */ ! 324: bcs error8 /*error if C = 1 */ ! 325: jmp c9 ! 326: error8: movpsl _actual /* actual = psl MAYBE it is incorrect */ ! 327: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 328: movl $2,_ercode /* error code flag failure */ ! 329: jmp *badrtn ! 330: /* */ ! 331: /* different patterns for source1 & source2 */ ! 332: /* */ ! 333: c9: ! 334: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 335: ac9: callf $4,_setjmp /* save context for error return */ ! 336: movab ac9,_stpc /* save subtest starting address */ ! 337: movl $9,_subtst /* subtest number */ ! 338: movl $2,_no_opr /* number of operands in use */ ! 339: movl $SRC1W9,_opr /* first operand */ ! 340: movl $SRC2W9,_opr + 4 /* second operand */ ! 341: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ ! 342: movl $SRC1W9,tloc1 /*tloc1 = source1 */ ! 343: movl $SRC2W9,tloc2 /*tloc2 = source2 */ ! 344: bispsw $(Z|V|N) /*turn zero, overflow, & neg ON */ ! 345: cmpw tloc1+2,tloc2+2 /*execute compare */ ! 346: beql error9 /*error if Z = 1 */ ! 347: blss error9 /*error if N = 1 */ ! 348: bvs error9 /*error if V = 1 */ ! 349: bcs error9 /*error if C = 1 */ ! 350: jmp c10 ! 351: error9: movpsl _actual /* actual = psl MAYBE it is incorrect */ ! 352: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 353: movl $2,_ercode /* error code flag failure */ ! 354: jmp *badrtn ! 355: /* */ ! 356: /* different patterns for source1 & source2 */ ! 357: /* */ ! 358: c10: ! 359: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 360: ac10: callf $4,_setjmp /* save context for error return */ ! 361: movab ac10,_stpc /* save subtest starting address */ ! 362: movl $0xa,_subtst /* subtest number */ ! 363: movl $2,_no_opr /* number of operands in use */ ! 364: movl $SRC1W10,_opr /* first operand */ ! 365: movl $SRC2W10,_opr + 4 /* second operand */ ! 366: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ ! 367: movl $SRC1W10,tloc1 /*tloc1 = source1 */ ! 368: movl $SRC2W10,tloc2 /*tloc2 = source2 */ ! 369: bispsw $(Z|V|N) /*turn zero, overflow, & neg ON */ ! 370: cmpw tloc1+2,tloc2+2 /*execute compare */ ! 371: jeql error10 /*error if Z = 1 */ ! 372: jlss error10 /*error if N = 1 */ ! 373: jvs error10 /*error if V = 1 */ ! 374: jcs error10 /*error if C = 1 */ ! 375: jmp cmpwoff ! 376: error10: movpsl _actual /* actual = psl MAYBE it is incorrect */ ! 377: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 378: movl $2,_ercode /* error code flag failure */ ! 379: jmp *badrtn ! 380: ! 381: cmpwoff: ! 382: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 383: ac11: callf $4,_setjmp /* save context for error return */ ! 384: movab ac11,_stpc /* save subtest starting address */ ! 385: movl $0xb,_subtst /* subtest number */ ! 386: movl $2,_no_opr /* number of operands in use */ ! 387: movl $SRC1W11,_opr /* first operand */ ! 388: movl $SRC2W11,_opr + 4 /* second operand */ ! 389: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ ! 390: movl $SRC1W11,tloc1 /*tloc1 = source1 */ ! 391: movl $SRC2W11,tloc2 /*tloc2 = source2 */ ! 392: bispsw $(Z|N|V|C) /*turn Z, neg, overflow, & carry ON */ ! 393: cmpw tloc1+2,tloc2+2 /*execute compare */ ! 394: beql error11 /*error if Z = 1 */ ! 395: blss error11 /*error if N = 1 */ ! 396: bvs error11 /*error if V = 1 */ ! 397: bcc error11 /*error if C = 0 */ ! 398: jmp cmpwoff1 ! 399: error11: movpsl _actual /* actual = psl MAYBE it is incorrect */ ! 400: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 401: movl $2,_ercode /* error code flag failure */ ! 402: jmp *badrtn ! 403: ! 404: cmpwoff1: ! 405: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 406: ac12: callf $4,_setjmp /* save context for error return */ ! 407: movab ac12,_stpc /* save subtest starting address */ ! 408: movl $0xc,_subtst /* subtest number */ ! 409: movl $2,_no_opr /* number of operands in use */ ! 410: movl $SRC1W12,_opr /* first operand */ ! 411: movl $SRC2W12,_opr + 4 /* second operand */ ! 412: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ ! 413: movl $SRC1W12,tloc1 /*tloc1 = source1 */ ! 414: movl $SRC2W12,tloc2 /*tloc2 = source2 */ ! 415: bispsw $(Z|N|V|C) /*turn Z, neg, overflow, & carry ON */ ! 416: cmpw tloc1+2,tloc2+2 /*execute compare */ ! 417: beql error12 /*error if Z = 1 */ ! 418: blss error12 /*error if N = 1 */ ! 419: bvs error12 /*error if V = 1 */ ! 420: bcc error12 /*error if C = 0 */ ! 421: jmp aldn ! 422: error12: movpsl _actual /* actual = psl MAYBE it is incorrect */ ! 423: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 424: movl $2,_ercode /* error code flag failure */ ! 425: jmp *badrtn ! 426: ! 427: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 428: jmp *return /* good, return to monitor */ ! 429: ! 430: ! 431: /* Variables */ ! 432: .align 2 ! 433: tloc1: .space 4 ! 434: tloc2: .space 4 ! 435: ! 436: /* end of file */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.