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