|
|
1.1 ! root 1: ! 2: ! 3: /* CMPB (compare byte) test */ ! 4: /* */ ! 5: /*Test name = cmpb */ ! 6: /*Description = */ ! 7: /* This test checks 'cmpb' 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 /*+2*/ ! 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_b ! 125: _cmp_b: ! 126: callf $4,_setjmp /* save context for error return */ ! 127: movab _cmp_b,_stpc /* save address of subtest start */ ! 128: movl $1,_subtst /* subtest number */ ! 129: movl $2,_no_opr /* number of operands in use */ ! 130: movl $SRC1B1,_opr /* first operand */ ! 131: movl $SRC2B1,_opr + 4 /* second operand */ ! 132: 0: movl $SRC1B1,tloc1 /*tloc1 = source1 */ ! 133: movl $SRC2B1,tloc2 /*tloc2 = source2 */ ! 134: bicpsw $PSWMASK /*disable overflow & other enable bits */ ! 135: bispsw $(N|V|C) /*turn neg, overflow, & carry ON */ ! 136: cmpb tloc1+3,tloc2+3 /*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 data psl MAYBE is incorrect */ ! 143: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 144: movl $2,_ercode /* error code flag miscompare */ ! 145: jmp *badrtn ! 146: 1: bicpsw $Z /*clear Z flag */ ! 147: cmpl $SRC1B1,tloc1 /*check tloc1+3 & tlco2 unchanged */ ! 148: beql 1f /* if no error continue */ ! 149: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 150: movl $3,_ercode /* error code operand was modified */ ! 151: movl tloc1,_actual /* actual data */ ! 152: movl $SRC1B1,_expected /* expected data */ ! 153: jmp *badrtn ! 154: 1: bicpsw $Z ! 155: cmpl $SRC2B1,tloc2 ! 156: beql c2 /* if no error continue */ ! 157: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 158: movl $3,_ercode /* error code operand was modified */ ! 159: movl tloc1,_actual /* actual data */ ! 160: movl $SRC1B1,_expected /* expected data */ ! 161: jmp *badrtn ! 162: /* */ ! 163: /* different patterns for source1 & source2 */ ! 164: /* */ ! 165: c2: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 166: ac2: callf $4,_setjmp /* save context for error return */ ! 167: movab ac2,_stpc /* save address of subtest start */ ! 168: movl $2,_subtst /* subtest number */ ! 169: movl $2,_no_opr /* number of operands in use */ ! 170: movl $SRC1B2,_opr /* first operand */ ! 171: movl $-1,_opr + 4 /* second operand */ ! 172: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ ! 173: movl $SRC1B2,tloc1 /*tloc1 = source1 */ ! 174: bispsw $(N|V|C) /*turn neg, overflow, & carry ON */ ! 175: cmpb tloc1+3,$-1 /*execute compare mem to data */ ! 176: bneq error2 /*error if Z = 0 */ ! 177: blss error2 /*error if N = 1 */ ! 178: bvs error2 /*error if V = 1 */ ! 179: bcc error2 /*error if C = 0 */ ! 180: jmp cmpbnc ! 181: error2: movpsl _actual /* actual data psl MAYBE is incorrect */ ! 182: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 183: movl $2,_ercode /* error code flag miscompare */ ! 184: jmp *badrtn ! 185: ! 186: cmpbnc: ! 187: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 188: ac3: callf $4,_setjmp /* save context for error return */ ! 189: movab ac3,_stpc /* save address of subtest start */ ! 190: movl $3,_subtst /* subtest number */ ! 191: movl $2,_no_opr /* number of operands in use */ ! 192: movl $SRC2B3,_opr /* first operand */ ! 193: movl $SRC1B3,_opr + 4 /* second operand */ ! 194: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ ! 195: movl $SRC2B3,tloc2 /*tloc2 = source2 */ ! 196: bispsw $(Z|V) /*turn overflow, & zero ON */ ! 197: cmpb $SRC1B3,tloc2+3 /*execute compare data to mem */ ! 198: beql error3 /*error if Z = 1 */ ! 199: bgeq error3 /*error if N = 0 */ ! 200: bvs error3 /*error if V = 1 */ ! 201: bcs error3 /*error if C = 1 */ ! 202: jmp c4 ! 203: error3: movpsl _actual /* actual data psl MAYBE is incorrect */ ! 204: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 205: movl $2,_ercode /* error code flag miscompare */ ! 206: jmp *badrtn ! 207: /* */ ! 208: /* different patterns for source1 & source2 */ ! 209: /* */ ! 210: c4: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 211: ac4: callf $4,_setjmp /* save context for error return */ ! 212: movab ac4,_stpc /* save address of subtest start */ ! 213: movl $4,_subtst /* subtest number */ ! 214: movl $2,_no_opr /* number of operands in use */ ! 215: movl $SRC1B4,_opr /* first operand */ ! 216: movl $SRC2B4,_opr + 4 /* second operand */ ! 217: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ ! 218: movl $SRC1B4,tloc1 /*tloc1 = source1 */ ! 219: movl $SRC2B4,r4 /* r4 = source2 */ ! 220: bispsw $(Z|V) /*turn overflow, & zero ON */ ! 221: cmpb tloc1+3,r4 /*execute compare memory to reg */ ! 222: beql error4 /*error if Z = 1 */ ! 223: bgeq error4 /*error if N = 0 */ ! 224: bvs error4 /*error if V = 1 */ ! 225: bcc error4 /*error if C = 0 */ ! 226: jmp cmpbn ! 227: error4: movpsl _actual /* actual data psl MAYBE is incorrect */ ! 228: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 229: movl $2,_ercode /* error code flag miscompare */ ! 230: jmp *badrtn ! 231: ! 232: ! 233: cmpbn: ! 234: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 235: ac5: callf $4,_setjmp /* save context for error return */ ! 236: movab ac5,_stpc /* save address of subtest start */ ! 237: movl $5,_subtst /* subtest number */ ! 238: movl $2,_no_opr /* number of operands in use */ ! 239: movl $SRC1B5,_opr /* first operand */ ! 240: movl $SRC2B5,_opr + 4 /* second operand */ ! 241: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ ! 242: movl $SRC1B5,r3 /* r3 = source1 */ ! 243: movl $SRC2B5,tloc2 /*tloc2 = source2 */ ! 244: bispsw $(Z|V|C) /*turn zero, overflow, & carry ON */ ! 245: cmpb r3,tloc2+3 /* execute compare reg to mem */ ! 246: beql error5 /*error if Z = 1 */ ! 247: blss error5 /*error if N = 1 */ ! 248: bvs error5 /*error if V = 1 */ ! 249: bcc error5 /*error if C = 0 */ ! 250: jmp c6 ! 251: error5: movpsl _actual /* actual data psl MAYBE is incorrect */ ! 252: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 253: movl $2,_ercode /* error code flag miscompare */ ! 254: jmp *badrtn ! 255: /* */ ! 256: /* different patterns for source1 & source2 */ ! 257: /* */ ! 258: c6: ! 259: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 260: ac6: callf $4,_setjmp /* save context for error return */ ! 261: movab ac6,_stpc /* save address of subtest start */ ! 262: movl $6,_subtst /* subtest number */ ! 263: movl $2,_no_opr /* number of operands in use */ ! 264: movl $-2,_opr /* first operand */ ! 265: movl $SRC2B6,_opr + 4 /* second operand */ ! 266: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ ! 267: movl $SRC2B6,r4 /*tloc2 = source2 */ ! 268: bispsw $(Z|V|C) /*turn zero, overflow, & carry ON */ ! 269: cmpb $-2,r4 /*execute compare data to reg */ ! 270: beql error6 /*error if Z = 1 */ ! 271: bgeq error6 /*error if N = 0 */ ! 272: bvs error6 /*error if V = 1 */ ! 273: bcc error6 /*error if C = 0 */ ! 274: jmp c7 ! 275: error6: movpsl _actual /* actual data psl MAYBE is incorrect */ ! 276: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 277: movl $2,_ercode /* error code flag miscompare */ ! 278: jmp *badrtn ! 279: /* */ ! 280: /* different patterns for source1 & source2 */ ! 281: /* */ ! 282: c7: ! 283: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 284: ac7: callf $4,_setjmp /* save context for error return */ ! 285: movab ac7,_stpc /* save address of subtest start */ ! 286: movl $7,_subtst /* subtest number */ ! 287: movl $2,_no_opr /* number of operands in use */ ! 288: movl $SRC1B7,_opr /* first operand */ ! 289: movl $SRC2B7,_opr + 4 /* second operand */ ! 290: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ ! 291: movl $SRC1B7,r3 /*tloc1 = source1 */ ! 292: movl $SRC2B7,r4 /*tloc2 = source2 */ ! 293: bispsw $(Z|V|C) /*turn zero, overflow, & carry ON */ ! 294: cmpb r3,r4 /*execute compare reg to reg */ ! 295: beql error7 /*error if Z = 1 */ ! 296: blss error7 /*error if N = 1 */ ! 297: bvs error7 /*error if V = 1 */ ! 298: bcc error7 /*error if C = 0 */ ! 299: jmp cmpbc ! 300: error7: movpsl _actual /* actual data psl MAYBE is incorrect */ ! 301: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 302: movl $2,_ercode /* error code flag miscompare */ ! 303: jmp *badrtn ! 304: ! 305: cmpbc: ! 306: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 307: ac8: callf $4,_setjmp /* save context for error return */ ! 308: movab ac8,_stpc /* save address of subtest start */ ! 309: movl $8,_subtst /* subtest number */ ! 310: movl $2,_no_opr /* number of operands in use */ ! 311: movl $SRC1B8,_opr /* first operand */ ! 312: movl $-2,_opr + 4 /* second operand */ ! 313: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ ! 314: movl $SRC1B8,r3 /*tloc1 = source1 */ ! 315: bispsw $(Z|V|N) /*turn zero, overflow, & neg ON */ ! 316: cmpb r3,$-2 /*execute compare reg to data */ ! 317: beql error8 /*error if Z = 1 */ ! 318: blss error8 /*error if N = 1 */ ! 319: bvs error8 /*error if V = 1 */ ! 320: bcs error8 /*error if C = 1 */ ! 321: jmp c9 ! 322: error8: movpsl _actual /* actual data psl MAYBE is incorrect */ ! 323: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 324: movl $2,_ercode /* error code flag miscompare */ ! 325: jmp *badrtn ! 326: /* */ ! 327: /* different patterns for source1 & source2 */ ! 328: /* */ ! 329: c9: ! 330: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 331: ac9: callf $4,_setjmp /* save context for error return */ ! 332: movab ac9,_stpc /* save address of subtest start */ ! 333: movl $9,_subtst /* subtest number */ ! 334: movl $2,_no_opr /* number of operands in use */ ! 335: movl $SRC1B9,_opr /* first operand */ ! 336: movl $SRC2B9,_opr + 4 /* second operand */ ! 337: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ ! 338: movl $SRC1B9,tloc1 /*tloc1 = source1 */ ! 339: movl $SRC2B9,tloc2 /*tloc2 = source2 */ ! 340: bispsw $(Z|V|N) /*turn zero, overflow, & neg ON */ ! 341: cmpb tloc1+3,tloc2+3 /*execute compare */ ! 342: beql error9 /*error if Z = 1 */ ! 343: blss error9 /*error if N = 1 */ ! 344: bvs error9 /*error if V = 1 */ ! 345: bcs error9 /*error if C = 1 */ ! 346: jmp c10 ! 347: error9: movpsl _actual /* actual data psl MAYBE is incorrect */ ! 348: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 349: movl $2,_ercode /* error code flag miscompare */ ! 350: jmp *badrtn ! 351: /* */ ! 352: /* different patterns for source1 & source2 */ ! 353: /* */ ! 354: c10: ! 355: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 356: ac10: callf $4,_setjmp /* save context for error return */ ! 357: movab ac10,_stpc /* save address of subtest start */ ! 358: movl $0xa,_subtst /* subtest number */ ! 359: movl $2,_no_opr /* number of operands in use */ ! 360: movl $SRC1B10,_opr /* first operand */ ! 361: movl $SRC2B10,_opr + 4 /* second operand */ ! 362: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ ! 363: movl $SRC1B10,tloc1 /*tloc1 = source1 */ ! 364: movl $SRC2B10,tloc2 /*tloc2 = source2 */ ! 365: bispsw $(Z|V|N) /*turn zero, overflow, & neg ON */ ! 366: cmpb tloc1+3,tloc2+3 /*execute compare */ ! 367: jeql error10 /*error if Z = 1 */ ! 368: jlss error10 /*error if N = 1 */ ! 369: jvs error10 /*error if V = 1 */ ! 370: jcs error10 /*error if C = 1 */ ! 371: jmp cmpboff ! 372: error10: movpsl _actual /* actual data psl MAYBE is incorrect */ ! 373: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 374: movl $2,_ercode /* error code flag miscompare */ ! 375: jmp *badrtn ! 376: ! 377: cmpboff: ! 378: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 379: ac11: callf $4,_setjmp /* save context for error return */ ! 380: movab ac11,_stpc /* save address of subtest start */ ! 381: movl $0xb,_subtst /* subtest number */ ! 382: movl $2,_no_opr /* number of operands in use */ ! 383: movl $SRC1B11,_opr /* first operand */ ! 384: movl $SRC2B11,_opr + 4 /* second operand */ ! 385: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ ! 386: movl $SRC1B11,tloc1 /*tloc1 = source1 */ ! 387: movl $SRC2B11,tloc2 /*tloc2 = source2 */ ! 388: bispsw $(Z|N|V|C) /*turn Z, neg, overflow, & carry ON */ ! 389: cmpb tloc1+3,tloc2+3 /*execute compare */ ! 390: beql error11 /*error if Z = 1 */ ! 391: blss error11 /*error if N = 1 */ ! 392: bvs error11 /*error if V = 1 */ ! 393: bcc error11 /*error if C = 0 */ ! 394: jmp cmpboff1 ! 395: error11: movpsl _actual /* actual data psl MAYBE is incorrect */ ! 396: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 397: movl $2,_ercode /* error code flag miscompare */ ! 398: jmp *badrtn ! 399: ! 400: cmpboff1: ! 401: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 402: ac12: callf $4,_setjmp /* save context for error return */ ! 403: movab ac12,_stpc /* save address of subtest start */ ! 404: movl $0xc,_subtst /* subtest number */ ! 405: movl $2,_no_opr /* number of operands in use */ ! 406: movl $SRC1B12,_opr /* first operand */ ! 407: movl $SRC2B12,_opr + 4 /* second operand */ ! 408: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ ! 409: movl $SRC1B12,tloc1 /*tloc1 = source1 */ ! 410: movl $SRC2B12,tloc2 /*tloc2 = source2 */ ! 411: bispsw $(Z|N|V|C) /*turn Z, neg, overflow, & carry ON */ ! 412: cmpb tloc1+3,tloc2+3 /*execute compare */ ! 413: beql error12 /*error if Z = 1 */ ! 414: blss error12 /*error if N = 1 */ ! 415: bvs error12 /*error if V = 1 */ ! 416: bcc error12 /*error if C = 0 */ ! 417: jmp aldn ! 418: error12: movpsl _actual /* actual data psl MAYBE is incorrect */ ! 419: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 420: movl $2,_ercode /* error code flag miscompare */ ! 421: jmp *badrtn ! 422: ! 423: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 424: jmp *return /* good, return to monitor */ ! 425: ! 426: ! 427: /* Variables */ ! 428: .align 2 ! 429: tloc1: .space 4 ! 430: tloc2: .space 4 ! 431: ! 432: /* end of file */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.