|
|
1.1 ! root 1: /* CASEL instruction test */ ! 2: /* Privilege registers */ ! 3: ! 4: .set IPL,8 ! 5: .set MAPEN,9 ! 6: .set KSP,19 ! 7: ! 8: /* PSL fields */ ! 9: .set IV,32 ! 10: .set T,16 ! 11: .set N,8 ! 12: .set Z,4 ! 13: .set V,2 ! 14: .set C,1 ! 15: ! 16: /* constants */ ! 17: .set DISABLE,0 ! 18: .set ENABLE,1 ! 19: .set HIGH,31 /* highest interrupt priority */ ! 20: ! 21: ! 22: .globl _casel ! 23: _casel: ! 24: callf $4,_setjmp /* save context for error return */ ! 25: movab _casel,_stpc /* save subtest address for return */ ! 26: movl $1,_subtst /* subtest number */ ! 27: movl $3,_no_opr /* number of operands in use */ ! 28: movl $0,_opr /* first operand */ ! 29: movl $1,_opr + 4 /* second operand */ ! 30: movl $7,_opr + 8 /* third operand */ ! 31: 0: bicpsw $(IV|T) /* disable exceptions */ ! 32: ! 33: /* */ ! 34: case: ! 35: /* LIMIT > (SELECTOR-BASE) */ ! 36: movl $0,r0 /* set selector = r0 = 0 */ ! 37: movl $0,r1 /* set base = r1 = 0 */ ! 38: movl $7,r2 /* set limit = 7; 8 cases .. */ ! 39: bispsw $(N|C) /* set n,c flags */ ! 40: bicpsw $(Z|V) /* clear z,v flags */ ! 41: casel r0,r1,r2 ! 42: .align 1 /* displacement list is word align */ ! 43: cpc0: ! 44: .word loc0-cpc0 ! 45: .word loc1-cpc0 ! 46: .word loc2-cpc0 ! 47: .word loc3-cpc0 ! 48: .word loc4-cpc0 ! 49: .word loc5-cpc0 ! 50: .word loc6-cpc0 ! 51: .word loc7-cpc0 ! 52: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 53: movl $1,_ercode /* error code data miscompare */ ! 54: movl r2,_actual /* actual data */ ! 55: movl $7,_expected /* expected data */ ! 56: jmp *badrtn /* bad return failed */ ! 57: .space 1000 /* reserve 1000 bytes */ ! 58: loc0: ! 59: jgeq error1 /* error if n flag not set */ ! 60: jcc error1 /* error if c flag not set */ ! 61: jeql error1 /* error if z or v flag set */ ! 62: jvs error1 ! 63: jmp 1f ! 64: error1: movpsl _actual /* actual data psl MAYBE is incorrect */ ! 65: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 66: movl $2,_ercode /* error code flag failure */ ! 67: jmp *badrtn /* bad return failed */ ! 68: 1: cmpl r0,$0 /* make sure selector,base,limit unchanged*/ ! 69: jeql 1f ! 70: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 71: movl $3,_ercode /* error code operand miscompare */ ! 72: movl r0,_actual /* actual data */ ! 73: movl $0,_expected /* expected data */ ! 74: jmp *badrtn /* bad return failed */ ! 75: 1: bicpsw $Z ! 76: cmpl r0,r1 ! 77: jeql 1f ! 78: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 79: movl $3,_ercode /* error code operand miscompare */ ! 80: movl r1,_actual /* actual data */ ! 81: movl r0,_expected /* expected data */ ! 82: jmp *badrtn /* bad return failed */ ! 83: bicpsw $Z ! 84: cmpl r2,$0x7 ! 85: jeql 1f ! 86: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 87: movl $3,_ercode /* error code operand miscompare */ ! 88: movl r2,_actual /* actual data */ ! 89: movl $7,_expected /* expected data */ ! 90: jmp *badrtn /* bad return failed */ ! 91: 1: jmp step1 ! 92: loc1: ! 93: jmp loc7 /* take wrong displacement */ ! 94: loc2: ! 95: jmp loc7 /* take wrong displacement */ ! 96: loc3: ! 97: jmp loc7 /* take wrong displacement */ ! 98: loc4: ! 99: jmp loc7 /* take wrong displacement */ ! 100: loc5: ! 101: jmp loc7 /* take wrong displacement */ ! 102: loc6: ! 103: jmp loc7 /* take wrong displacement */ ! 104: loc7: ! 105: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 106: movl $3,_ercode /* error code wrong operand (displacement) */ ! 107: jmp *badrtn ! 108: ! 109: ! 110: step1: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 111: c2: callf $4,_setjmp /* save context for error return */ ! 112: movab c2,_stpc /* save subtest address for return */ ! 113: movl $2,_subtst /* subtest number */ ! 114: movl $3,_no_opr /* number of operands in use */ ! 115: movl $5,_opr /* first operand */ ! 116: movl $0,_opr + 4 /* second operand */ ! 117: movl $7,_opr + 8 /* third operand */ ! 118: 0: movl $5,r0 /* set selector = r0 = 5 */ ! 119: movl $0,r1 /* set base = r1 = 0 */ ! 120: movl $7,r2 /* set limit = 7; 8 cases .. */ ! 121: bispsw $(N|C) /* set n,c flags */ ! 122: bicpsw $(Z|V) /* clear z,v flags */ ! 123: casel $5,$0,r2 ! 124: .align 1 /* displacement list is word align */ ! 125: pc0: ! 126: .word l0-pc0 ! 127: .word l1-pc0 ! 128: .word l2-pc0 ! 129: .word l3-pc0 ! 130: .word l4-pc0 ! 131: .word l5-pc0 ! 132: .word l6-pc0 ! 133: .word l7-pc0 ! 134: ! 135: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 136: movl $1,_ercode /* error code data miscompare */ ! 137: movl r2,_actual /* actual data */ ! 138: movl $7,_expected /* expected data */ ! 139: jmp *badrtn /* bad return failed */ ! 140: .space 1000 /* reserve 1000 bytes */ ! 141: l5: ! 142: jgeq error2 /* error if n flag not set */ ! 143: jcc error2 /* error if c flag not set */ ! 144: jeql error2 /* error if z or v flag set */ ! 145: jvs error2 ! 146: jmp 1f ! 147: error2: movpsl _actual /* actual data psl MAYBE is incorrect */ ! 148: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 149: movl $2,_ercode /* error code flag failure */ ! 150: jmp *badrtn /* bad return failed */ ! 151: 1: cmpl r0,$5 /* make sure selector,base,limit unchanged*/ ! 152: jeql 1f ! 153: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 154: movl $3,_ercode /* error code operand miscompare */ ! 155: movl r0,_actual /* actual data */ ! 156: movl $5,_expected /* expected data */ ! 157: jmp *badrtn /* bad return failed */ ! 158: 1: bicpsw $Z ! 159: cmpl r2,$0x7 ! 160: jeql 1f ! 161: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 162: movl $3,_ercode /* error code operand miscompare */ ! 163: movl r2,_actual /* actual data */ ! 164: movl $7,_expected /* expected data */ ! 165: jmp *badrtn /* bad return failed */ ! 166: 1: jmp step2 ! 167: l0: ! 168: jmp l7 /* take wrong displacement */ ! 169: l1: ! 170: jmp l7 /* take wrong displacement */ ! 171: l2: ! 172: jmp l7 /* take wrong displacement */ ! 173: l3: ! 174: jmp l7 /* take wrong displacement */ ! 175: l4: ! 176: jmp l7 /* take wrong displacement */ ! 177: l6: ! 178: jmp l7 /* take wrong displacement */ ! 179: l7: ! 180: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 181: movl $3,_ercode /* error code wrong operand (displacement) */ ! 182: jmp *badrtn ! 183: ! 184: /* LIMIT = (SELECTOR-BASE) */ ! 185: step2: ! 186: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 187: c3: callf $4,_setjmp /* save context for error return */ ! 188: movab c3,_stpc /* save subtest address for return */ ! 189: movl $3,_subtst /* subtest number */ ! 190: movl $3,_no_opr /* number of operands in use */ ! 191: movl $7,_opr /* first operand */ ! 192: movl $0,_opr + 4 /* second operand */ ! 193: movl $7,_opr + 8 /* third operand */ ! 194: 0: movl $0x7,sel /* set selector = 7 */ ! 195: movl $0,base /* set base = 0 */ ! 196: movl $0x7,limit /* set limit = 7 */ ! 197: bispsw $Z /* set z flag */ ! 198: bicpsw $(N|V|C) /* clear n,c,v flags */ ! 199: casel sel,base,limit ! 200: .align 1 /* displacement list is word align */ ! 201: cpc1: ! 202: .word lc0-cpc1 ! 203: .word lc1-cpc1 ! 204: .word lc2-cpc1 ! 205: .word lc3-cpc1 ! 206: .word lc4-cpc1 ! 207: .word lc5-cpc1 ! 208: .word lc6-cpc1 ! 209: .word lc7-cpc1 ! 210: ! 211: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 212: movl $1,_ercode /* error code data miscompare */ ! 213: movl limit,_actual /* actual data */ ! 214: movl $7,_expected /* expected data */ ! 215: jmp *badrtn /* bad return failed */ ! 216: .space 1000 /* reserve 1000 bytes */ ! 217: lc0: ! 218: jmp lc6 ! 219: lc1: ! 220: jmp lc6 /* take wrong displacement */ ! 221: lc2: ! 222: jmp lc6 /* take wrong displacement */ ! 223: lc3: ! 224: jmp lc6 /* take wrong displacement */ ! 225: lc4: ! 226: jmp lc6 /* take wrong displacement */ ! 227: lc5: ! 228: jmp lc6 /* take wrong displacement */ ! 229: lc6: ! 230: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 231: movl $3,_ercode /* error code wrong operand (displacement) */ ! 232: jmp *badrtn ! 233: lc7: ! 234: jneq error3 /* error if z flag not set */ ! 235: jlss error3 /* error if n,v,c flags set */ ! 236: jcs error3 ! 237: jvs error3 ! 238: jmp 1f ! 239: error3: movpsl _actual /* actual data psl MAYBE is incorrect */ ! 240: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 241: movl $2,_ercode /* error code flag failure */ ! 242: jmp *badrtn /* bad return failed */ ! 243: 1: cmpl sel,$0x7 /* make sure selector,base,limit unchanged*/ ! 244: jeql 1f ! 245: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 246: movl $3,_ercode /* error code operand miscompare */ ! 247: movl sel,_actual /* actual data */ ! 248: movl $7,_expected /* expected data */ ! 249: jmp *badrtn /* bad return failed */ ! 250: 1: bicpsw $Z ! 251: cmpl base,$0 ! 252: jeql 1f ! 253: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 254: movl $3,_ercode /* error code operand miscompare */ ! 255: movl base,_actual /* actual data */ ! 256: movl $0,_expected /* expected data */ ! 257: jmp *badrtn /* bad return failed */ ! 258: 1: bicpsw $Z ! 259: cmpl limit,$0x7 ! 260: jeql step3 ! 261: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 262: movl $3,_ercode /* error code operand miscompare */ ! 263: movl limit,_actual /* actual data */ ! 264: movl $7,_expected /* expected data */ ! 265: jmp *badrtn /* bad return failed */ ! 266: ! 267: /* LIMIT < (SELECTOR-BASE) */ ! 268: step3: ! 269: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 270: c4: callf $4,_setjmp /* save context for error return */ ! 271: movab c4,_stpc /* save subtest address for return */ ! 272: movl $4,_subtst /* subtest number */ ! 273: movl $3,_no_opr /* number of operands in use */ ! 274: movl $19,_opr /* first operand */ ! 275: movl $10,_opr + 4 /* second operand */ ! 276: movl $7,_opr + 8 /* third operand */ ! 277: 0: movl $19,sel /* set selector = 19 */ ! 278: movl $10,base /* set base = 10 */ ! 279: bicpsw $(N|Z|V|C) /* clear n,z,c,v flags */ ! 280: casel sel,base,$7 ! 281: .align 1 /* displacement list is word align */ ! 282: cpc2: ! 283: .word lx0-cpc2 ! 284: .word lx1-cpc2 ! 285: .word lx2-cpc2 ! 286: .word lx3-cpc2 ! 287: .word lx4-cpc2 ! 288: .word lx5-cpc2 ! 289: .word lx6-cpc2 ! 290: .word lx7-cpc2 ! 291: ! 292: jmp default ! 293: .space 1000 /* reserve 1000 bytes */ ! 294: lx0: ! 295: jmp lx7 ! 296: lx1: ! 297: jmp lx7 /* take wrong displacement */ ! 298: lx2: ! 299: jmp lx7 /* take wrong displacement */ ! 300: lx3: ! 301: jmp lx7 /* take wrong displacement */ ! 302: lx4: ! 303: jmp lx7 /* take wrong displacement */ ! 304: lx5: ! 305: jmp lx7 /* take wrong displacement */ ! 306: lx6: ! 307: jmp lx7 /* take wrong displacement */ ! 308: lx7: ! 309: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 310: movl $3,_ercode /* error code wrong operand (displacement) */ ! 311: jmp *badrtn ! 312: default: ! 313: jlss error4 /* error if n,z,v,c flags set */ ! 314: jeql error4 ! 315: jcs error4 ! 316: jvs error4 ! 317: jmp 1f ! 318: error4: movpsl _actual /* actual data psl MAYBE is incorrect */ ! 319: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 320: movl $2,_ercode /* error code flag failure */ ! 321: jmp *badrtn /* bad return failed */ ! 322: 1: cmpl sel,$19 /* make sure selector,base,limit unchanged*/ ! 323: jeql 1f ! 324: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 325: movl $3,_ercode /* error code operand miscompare */ ! 326: movl sel,_actual /* actual data */ ! 327: movl $19,_expected /* expected data */ ! 328: jmp *badrtn /* bad return failed */ ! 329: 1: bicpsw $Z ! 330: cmpl base,$10 ! 331: jeql done ! 332: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 333: movl $3,_ercode /* error code operand miscompare */ ! 334: movl base,_actual /* actual data */ ! 335: movl $10,_expected /* expected data */ ! 336: jmp *badrtn /* bad return failed */ ! 337: done: ! 338: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 339: jmp *return ! 340: ! 341: ! 342: /* TEST DATA */ ! 343: .align 2 ! 344: sel: ! 345: .long 0 ! 346: base: ! 347: .long 0 ! 348: limit: ! 349: .long 0 ! 350:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.