|
|
1.1 ! root 1: /* SHRL instruction test */ ! 2: # R2 = error code ! 3: # 1 : error in flags ! 4: # 2 : result incorrect ! 5: # 3 : operand get modified ! 6: ! 7: .set IPL,8 ! 8: .set MAPEN,9 ! 9: .set KSP,19 ! 10: ! 11: /* PSL fields */ ! 12: .set IV,32 ! 13: .set T,16 ! 14: .set N,8 ! 15: .set Z,4 ! 16: .set V,2 ! 17: .set C,1 ! 18: ! 19: /* constants */ ! 20: .set DISABLE,0 ! 21: .set ENABLE,1 ! 22: .set HIGH,31 /* highest interrupt priority */ ! 23: ! 24: .globl _shrl ! 25: _shrl: ! 26: callf $4,_setjmp /* save context for error return */ ! 27: movab _shrl,_stpc /* save starting address of subtest */ ! 28: movl $1,_subtst /* subtest number */ ! 29: movl $2,_no_opr /* number of operands in use */ ! 30: movl $1,_opr /* first operand */ ! 31: movl $0x55555555,_opr + 4 /* second operand */ ! 32: 0: bicpsw $(IV|T) /* disable exceptions */ ! 33: /* */ ! 34: shftr: /* SHIFT RIGHT LONG FROM MEMORY TO REGISTER */ ! 35: movl $0x55555555,srcloc /* set srcloc = 0x55555555 */ ! 36: movl $(0x55555555/2),r12 /* set r12 = 0x2aaaaaaa */ ! 37: bispsw $(Z|V|N) /* set n,z,v flags */ ! 38: bicpsw $C ! 39: shrl $1,srcloc,r11 /* shift right 1 and put in r11 */ ! 40: jcc error1 /* error if c flag clear */ ! 41: jlss error1 /* error if n flag still set */ ! 42: jeql error1 /* error if z flag still set */ ! 43: jvs error1 /* error if v flag still set */ ! 44: jmp 1f ! 45: error1: movpsl _actual /* actual = psl maybe incorrect */ ! 46: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 47: movl $2,_ercode /* error code flag failure */ ! 48: jmp *badrtn ! 49: 1: cmpl r11,r12 /* check result */ ! 50: jeql 1f ! 51: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 52: movl $1,_ercode /* error code data miscompare */ ! 53: movl r11,_actual /* actual data */ ! 54: movl r12,_expected /* expected data */ ! 55: jmp *badrtn ! 56: 1: bicpsw $Z ! 57: cmpl $0x55555555,srcloc /* check if source get affected */ ! 58: jeql s2 ! 59: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 60: movl $3,_ercode /* error code operand miscompare */ ! 61: movl srcloc,_actual /* actual data */ ! 62: movl $0x55555555,_expected /* expected data */ ! 63: jmp *badrtn ! 64: /* SHIFT RIGHT LONG FROM REGISTER TO MEMORY */ ! 65: s2: ! 66: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 67: as2: callf $4,_setjmp /* save context for error return */ ! 68: movab as2,_stpc /* save starting address of subtest */ ! 69: movl $2,_subtst /* subtest number */ ! 70: movl $2,_no_opr /* number of operands in use */ ! 71: movl $1,_opr /* first operand */ ! 72: movl r11,_opr + 4 /* second operand */ ! 73: 0: movb $1,temp /* set temp = shift count */ ! 74: bispsw $(Z|V|N) /* set n,z,v flags */ ! 75: bicpsw $C ! 76: shrl temp,r11,dstloc /* shift r11 right 1 and put in dstloc */ ! 77: jcc error2 /* error if c flags clear */ ! 78: jlss error2 /* error if n flag still set */ ! 79: jeql error2 /* error if z flag still set */ ! 80: jvs error2 ! 81: jmp 1f ! 82: error2: movpsl _actual /* actual = psl maybe incorrect */ ! 83: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 84: movl $2,_ercode /* error code flag failure */ ! 85: jmp *badrtn ! 86: 1: cmpl dstloc,$0x15555555 /* check result */ ! 87: jeql 1f ! 88: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 89: movl $1,_ercode /* error code data miscompare */ ! 90: movl dstloc,_actual /* actual data */ ! 91: movl $0x1555555,_expected /* expected data */ ! 92: jmp *badrtn ! 93: 1: bicpsw $Z ! 94: cmpl r11,r12 /* make sure source unchanged */ ! 95: jeql s3 ! 96: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 97: movl $3,_ercode /* error code operand miscompare */ ! 98: movl r11,_actual /* actual data */ ! 99: movl r12,_expected /* expected data */ ! 100: jmp *badrtn ! 101: /* SHIFT RIGHT LONG FROM MEMORY TO MEMORY */ ! 102: s3: ! 103: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 104: as3: callf $4,_setjmp /* save context for error return */ ! 105: movab as3,_stpc /* save starting address of subtest */ ! 106: movl $3,_subtst /* subtest number */ ! 107: movl $2,_no_opr /* number of operands in use */ ! 108: movl r11,_opr /* first operand */ ! 109: movl $0xf,_opr + 4 /* second operand */ ! 110: 0: movl $0xf,srcloc /* set srcloc = 0xf */ ! 111: movb $4,r11 /* set r11 = shift count */ ! 112: bispsw $(C|V|N) /* set n,c,v flags */ ! 113: bicpsw $Z /* clear z flag */ ! 114: shrl r11,srcloc,srcloc /* shift and put result back in srcloc */ ! 115: jcc error3 /* error if c flags clear */ ! 116: jneq error3 /* error if z flag clear */ ! 117: jlss error3 /* error if n flag still set */ ! 118: jvs error3 ! 119: jmp 1f ! 120: error3: movpsl _actual /* actual = psl maybe incorrect */ ! 121: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 122: movl $2,_ercode /* error code flag failure */ ! 123: jmp *badrtn ! 124: 1: cmpl srcloc,$0x0 /* check result */ ! 125: jeql s4 ! 126: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 127: movl $1,_ercode /* error code data miscompare */ ! 128: movl srcloc,_actual /* actual data */ ! 129: movl $0,_expected /* expected data */ ! 130: jmp *badrtn ! 131: /* REGISTER, REGISTER, REGISTER */ ! 132: s4: ! 133: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 134: as4: callf $4,_setjmp /* save context for error return */ ! 135: movab as4,_stpc /* save starting address of subtest */ ! 136: movl $4,_subtst /* subtest number */ ! 137: movl $2,_no_opr /* number of operands in use */ ! 138: movl $4,_opr /* first operand */ ! 139: movl $0xf,_opr + 4 /* second operand */ ! 140: 0: movl $0xf,r12 /* set r12 = 0xf */ ! 141: movb $4,r11 /* set r11 = shift count */ ! 142: bispsw $(C|V|N) /* set n,c,v flags */ ! 143: bicpsw $Z /* clear z flag */ ! 144: shrl r11,r12,r13 /* shift register to register */ ! 145: jcc error4 /* error if c flags clear */ ! 146: jneq error4 /* error if z flag clear */ ! 147: jlss error4 /* error if n flag still set */ ! 148: jvs error4 ! 149: jmp 1f ! 150: error4: movpsl _actual /* actual = psl maybe incorrect */ ! 151: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 152: movl $2,_ercode /* error code flag failure */ ! 153: jmp *badrtn ! 154: 1: cmpl r13,$0x0 /* check result */ ! 155: jeql s5 ! 156: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 157: movl $1,_ercode /* error code data miscompare */ ! 158: movl r13,_actual /* actual data */ ! 159: movl $0,_expected /* expected data */ ! 160: jmp *badrtn ! 161: /* REGISTER, IMM. DATA, REGISTER */ ! 162: s5: ! 163: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 164: as5: callf $4,_setjmp /* save context for error return */ ! 165: movab as5,_stpc /* save starting address of subtest */ ! 166: movl $5,_subtst /* subtest number */ ! 167: movl $2,_no_opr /* number of operands in use */ ! 168: movl $4,_opr /* first operand */ ! 169: movl $0xf,_opr + 4 /* second operand */ ! 170: 0: movb $4,r11 /* set r11 = shift count */ ! 171: bispsw $(C|V|N) /* set n,c,v flags */ ! 172: bicpsw $Z /* clear z flag */ ! 173: shrl r11,$0xf,r13 /* shift imm. data to register */ ! 174: jcc error5 /* error if c flags clear */ ! 175: jneq error5 /* error if z flag clear */ ! 176: jlss error5 /* error if n flag still set */ ! 177: jvs error5 ! 178: jmp 1f ! 179: error5: movpsl _actual /* actual = psl maybe incorrect */ ! 180: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 181: movl $2,_ercode /* error code flag failure */ ! 182: jmp *badrtn ! 183: 1: cmpl r13,$0x0 /* check result */ ! 184: jeql s6 ! 185: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 186: movl $1,_ercode /* error code data miscompare */ ! 187: movl r13,_actual /* actual data */ ! 188: movl $0,_expected /* expected data */ ! 189: jmp *badrtn ! 190: /* SPECIAL CASES */ ! 191: /* shift count = 0 */ ! 192: s6: ! 193: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 194: as6: callf $4,_setjmp /* save context for error return */ ! 195: movab as6,_stpc /* save starting address of subtest */ ! 196: movl $6,_subtst /* subtest number */ ! 197: movl $2,_no_opr /* number of operands in use */ ! 198: movl $4,_opr /* first operand */ ! 199: movl $0xf,_opr + 4 /* second operand */ ! 200: 0: movl $0x55555555,srcloc /* set srcloc = 0x55555555 */ ! 201: bispsw $(C|V|N) /* set n,c,v flags */ ! 202: bicpsw $Z /* clear z flag */ ! 203: shrl $0,srcloc,r11 /* shift right 0 and put in r11 */ ! 204: jlss error6 /* error if n flag still set */ ! 205: jeql error6 /* error if z flag still set */ ! 206: jvs error6 /* error if v flag still set */ ! 207: jcc error6 /* error if c flag clear */ ! 208: jmp 1f ! 209: error6: movpsl _actual /* actual = psl maybe incorrect */ ! 210: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 211: movl $2,_ercode /* error code flag failure */ ! 212: jmp *badrtn ! 213: 1: cmpl srcloc,r11 /* check result */ ! 214: jeql 1f ! 215: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 216: movl $1,_ercode /* error code data miscompare */ ! 217: movl r11,_actual /* actual data */ ! 218: movl srcloc,_expected /* expected data */ ! 219: jmp *badrtn ! 220: 1: bicpsw $Z ! 221: cmpl $0x55555555,srcloc /* check if source get affected */ ! 222: jeql s7 ! 223: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 224: movl $3,_ercode /* error code operand miscompare */ ! 225: movl srcloc,_actual /* actual data */ ! 226: movl $0x55555555,_expected /* expected data */ ! 227: jmp *badrtn ! 228: /* shift count > 32 */ ! 229: s7: ! 230: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 231: as7: callf $4,_setjmp /* save context for error return */ ! 232: movab as7,_stpc /* save starting address of subtest */ ! 233: movl $7,_subtst /* subtest number */ ! 234: movl $2,_no_opr /* number of operands in use */ ! 235: movl $33,_opr /* first operand */ ! 236: movl r11,_opr + 4 /* second operand */ ! 237: 0: movb $33,temp /* set shift count = 33 */ ! 238: bispsw $(C|V|N) /* set n,z,v flags */ ! 239: bicpsw $Z /* clear z flag */ ! 240: shll temp,r11,r13 /* shift r11 left 33 and put in r13 */ ! 241: jneq error7 /* error if z flag not set */ ! 242: jlss error7 /* error if n flag still set */ ! 243: jvs error7 ! 244: jcc error7 /* error if c flags clear */ ! 245: jmp 1f ! 246: error7: movpsl _actual /* actual = psl maybe incorrect */ ! 247: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 248: movl $2,_ercode /* error code flag failure */ ! 249: jmp *badrtn ! 250: 1: cmpl r13,$0 /* check result */ ! 251: jeql 1f ! 252: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 253: movl $1,_ercode /* error code data miscompare */ ! 254: movl r13,_actual /* actual data */ ! 255: movl $0,_expected /* expected data */ ! 256: jmp *badrtn ! 257: 1: bicpsw $Z ! 258: cmpl r11,$0x55555555 /* make sure source unchanged */ ! 259: jeql s8 ! 260: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 261: movl $3,_ercode /* error code operand miscompare */ ! 262: movl r11,_actual /* actual data */ ! 263: movl $0x55555555,_expected /* expected data */ ! 264: jmp *badrtn ! 265: /* check overflow flag */ ! 266: s8: ! 267: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 268: as8: callf $4,_setjmp /* save context for error return */ ! 269: movab as8,_stpc /* save starting address of subtest */ ! 270: movl $8,_subtst /* subtest number */ ! 271: movl $2,_no_opr /* number of operands in use */ ! 272: movl $8,_opr /* first operand */ ! 273: movl $0xffffffff,_opr + 4 /* second operand */ ! 274: 0: movb $8,r3 /* set r3 = shift count */ ! 275: movl $0xffffffff,srcloc /* set srcloc = 0xffffffff */ ! 276: bispsw $(Z|C|N) /* set n,z,c flags */ ! 277: bicpsw $V /* clear v flag */ ! 278: shrl r3,srcloc,srcloc /* shift right 8 and put in srcloc */ ! 279: jcc error8 /* error if c flag not set */ ! 280: jvs error8 /* error if v flag still set */ ! 281: jlss error8 /* error if n flag still set */ ! 282: jeql error8 /* error if z flag still set */ ! 283: jmp 1f ! 284: error8: movpsl _actual /* actual = psl maybe incorrect */ ! 285: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 286: movl $2,_ercode /* error code flag failure */ ! 287: jmp *badrtn ! 288: 1: cmpl srcloc,$0xffffff /* check result */ ! 289: jeql aldn ! 290: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 291: movl $1,_ercode /* error code data miscompare */ ! 292: movl srcloc,_actual /* actual data */ ! 293: movl $0xffffff,_expected /* expected data */ ! 294: jmp *badrtn ! 295: ! 296: ! 297: ! 298: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 299: jmp *return ! 300: ! 301: ! 302: ! 303: /* test data */ ! 304: .align 2 ! 305: srcloc: .long 0 ! 306: dstloc: .long 0 ! 307: temp: .long 0 ! 308: ! 309:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.