|
|
1.1 ! root 1: /* SHLQ 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 MAXPOSL,0x7fffffff ! 20: .set MAXNEGL,0x80000000 ! 21: .set MAXPOSW,0x7fff ! 22: .set MAXNEGW,0x8000 ! 23: .set MAXPOSB,0x7f ! 24: .set MAXNEGB,0x80 ! 25: .set ZERO,0 ! 26: .set ONES,0xffffffff ! 27: .set HIGH,31 /* highest interrupt priority */ ! 28: ! 29: .globl _shlq ! 30: _shlq: ! 31: callf $4,_setjmp /* save context for error return */ ! 32: movab _shlq,_stpc /* save subtest starting address */ ! 33: movl $1,_subtst /* subtest number */ ! 34: movl $2,_no_opr /* number of operands in use */ ! 35: movl $32,_opr /* first operand */ ! 36: movl $0xffffffff,_opr + 4 /* second operand */ ! 37: 0: bicpsw $(IV|T) /* disable exceptions */ ! 38: slq: /* SHIFT LEFT QUAD FROM MEMORY TO REGISTER */ ! 39: movl $1,r1 /* R1 : indicate which part of the test */ ! 40: movl $0,sloc1 /* set sloc1 */ ! 41: movl $0xffffffff,sloc0 /* set sloc0 = 0xffffffff */ ! 42: movl $0xffffffff,r4 ! 43: movl $0xffffffff,r5 ! 44: bispsw $(V|N) /* set n,v flags */ ! 45: bicpsw $(Z|C) /* clear z,c flag */ ! 46: /* data memory register */ ! 47: shlq $32,sloc0,r4 /* shift left 32 and put in r4,r5 */ ! 48: jlss error1 /* error if n flag set */ ! 49: jvs error1 /* error if v flag set */ ! 50: jneq error1 /* error if z flag not set */ ! 51: jcc error1 /* error if c flag not set */ ! 52: jmp 1f ! 53: error1: movpsl _actual /* actual = psl maybe is incorrect */ ! 54: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 55: movl $2,_ercode /* error code flag failure */ ! 56: jmp *badrtn ! 57: 1: cmpl r5,$0x0 /* check result */ ! 58: jeql 1f /* if no error continue */ ! 59: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 60: movl $1,_ercode /* error code data miscompare */ ! 61: movl r5,_actual /* actual data */ ! 62: movl $0,_expected /* expected data */ ! 63: jmp *badrtn ! 64: 1: bicpsw $Z ! 65: cmpl r4,$0 ! 66: jeql 1f /* if no error continue */ ! 67: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 68: movl $1,_ercode /* error code data miscompare */ ! 69: movl r4,_actual /* actual data */ ! 70: movl $0,_expected /* expected data */ ! 71: jmp *badrtn ! 72: 1: bicpsw $Z ! 73: cmpl $0xffffffff,sloc0 /* check if source get affected */ ! 74: jeql 1f /* if no error continue */ ! 75: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 76: movl $3,_ercode /* error code operand miscompare */ ! 77: movl sloc0,_actual /* actual data */ ! 78: movl $0xffffffff,_expected /* expected data */ ! 79: jmp *badrtn ! 80: 1: bicpsw $Z ! 81: cmpl sloc1,$0 ! 82: jeql s2 /* if no error continue */ ! 83: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 84: movl $3,_ercode /* error code operand miscompare */ ! 85: movl sloc1,_actual /* actual data */ ! 86: movl $0,_expected /* expected data */ ! 87: jmp *badrtn ! 88: /* SHIFT LEFT QUAD FROM REGISTER TO MEMORY */ ! 89: s2: ! 90: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 91: as2: callf $4,_setjmp /* save context for error return */ ! 92: movab as2,_stpc /* save subtest starting address */ ! 93: movl $2,_subtst /* subtest number */ ! 94: movl $2,_no_opr /* number of operands in use */ ! 95: movl $32,_opr /* first operand */ ! 96: movl $0,_opr + 4 /* second operand */ ! 97: 0: movl $0xffffffff,dloc0 /* set dloc0 = dloc1 = 0xffffffff */ ! 98: movl dloc0,dloc1 ! 99: movb $32,temp /* set temp = shift count */ ! 100: bispsw $(V|N) /* set v,n flags */ ! 101: bicpsw $(Z|C) /* clear z,c flags */ ! 102: /* memory register memory */ ! 103: shlq temp,r4,dloc0 /* shift r4,r5 left 32 and put in dloc */ ! 104: jvs error2 /* error if v flag set */ ! 105: jlss error2 /* error if n flag set */ ! 106: jneq error2 /* error if z flag not set */ ! 107: jcc error2 /* error if c flag not set */ ! 108: jmp 1f ! 109: error2: movpsl _actual /* actual = psl maybe is incorrect */ ! 110: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 111: movl $2,_ercode /* error code flag failure */ ! 112: jmp *badrtn ! 113: 1: bicpsw $Z ! 114: cmpl dloc0,$0 /* check result */ ! 115: jeql 1f /* if no error continue */ ! 116: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 117: movl $1,_ercode /* error code data miscompare */ ! 118: movl dloc0,_actual /* actual data */ ! 119: movl $0,_expected /* expected data */ ! 120: jmp *badrtn ! 121: 1: bicpsw $Z ! 122: cmpl dloc1,dloc0 ! 123: jeql 1f /* if no error continue */ ! 124: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 125: movl $1,_ercode /* error code data miscompare */ ! 126: movl dloc1,_actual /* actual data */ ! 127: movl dloc0,_expected /* expected data */ ! 128: jmp *badrtn ! 129: 1: bicpsw $Z ! 130: cmpl r5,$0x0 /* make sure source unchanged */ ! 131: jeql 1f /* if no error continue */ ! 132: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 133: movl $3,_ercode /* error code operand miscompare */ ! 134: movl r5,_actual /* actual data */ ! 135: movl $0,_expected /* expected data */ ! 136: jmp *badrtn ! 137: 1: bicpsw $Z ! 138: cmpl r4,$0 ! 139: jeql s3 /* if no error continue */ ! 140: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 141: movl $3,_ercode /* error code operand miscompare */ ! 142: movl r4,_actual /* actual data */ ! 143: movl $0,_expected /* expected data */ ! 144: jmp *badrtn ! 145: /* SHIFT LEFT QUAD FROM MEMORY TO MEMORY */ ! 146: s3: ! 147: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 148: as3: callf $4,_setjmp /* save context for error return */ ! 149: movab as3,_stpc /* save subtest starting address */ ! 150: movl $3,_subtst /* subtest number */ ! 151: movl $2,_no_opr /* number of operands in use */ ! 152: movl $3,_opr /* first operand */ ! 153: movl $0x55555555,_opr + 4 /* second operand */ ! 154: 0: movl $0x55555555,sloc0 /* set sloc0 = sloc1 = 0x55555555 */ ! 155: movl sloc0,sloc1 ! 156: movl $3,r3 /* set r3 = shift count */ ! 157: bispsw $(V|Z) /* set z flags */ ! 158: bicpsw $(C|N) /* clear c,n flags */ ! 159: /* register memory memory */ ! 160: shlq r3,sloc0,sloc0 /* shift and put result back in sloc0 */ ! 161: jgeq error3 /* error if n flag not set */ ! 162: jvs error3 /* error if v flag set */ ! 163: jcc error3 /* error if c flags not set */ ! 164: jeql error3 /* error if z flag still set */ ! 165: jmp 1f ! 166: error3: movpsl _actual /* actual = psl maybe is incorrect */ ! 167: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 168: movl $2,_ercode /* error code flag failure */ ! 169: jmp *badrtn ! 170: 1: cmpl sloc0,$0xaaaaaaaa /* check result */ ! 171: jeql 1f /* if no error continue */ ! 172: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 173: movl $1,_ercode /* error code data miscompare */ ! 174: movl sloc0,_actual /* actual data */ ! 175: movl $0xaaaaaaaa,_expected /* expected data */ ! 176: jmp *badrtn ! 177: 1: bicpsw $Z ! 178: cmpl sloc1,$0xaaaaaaa8 ! 179: jeql s4 /* if no error continue */ ! 180: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 181: movl $1,_ercode /* error code data miscompare */ ! 182: movl sloc1,_actual /* actual data */ ! 183: movl $0xaaaaaaa8,_expected /* expected data */ ! 184: jmp *badrtn ! 185: /* SPECIAL CASES */ ! 186: /* shift count = 0 */ ! 187: s4: ! 188: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 189: as4: callf $4,_setjmp /* save context for error return */ ! 190: movab as4,_stpc /* save subtest starting address */ ! 191: movl $4,_subtst /* subtest number */ ! 192: movl $3,_no_opr /* number of operands in use */ ! 193: movl $0,_opr /* first operand */ ! 194: movl $0x12345678,_opr + 4 /* second operand */ ! 195: movl $0x9abcdef0,_opr + 8 /* third operand */ ! 196: 0: movl $0,r10 /* set r10 = r11 = 0 */ ! 197: movl r10,r11 ! 198: movl r11,r6 /* set r6 = shift count */ ! 199: movl $0x12345678,r8 /* set r8 = 0x12345678 */ ! 200: movl $0x9abcdef0,r9 /* set r9 = 0x9abcdef0 */ ! 201: bispsw $(N|Z|V|C) /* set n,z,v,c flags */ ! 202: /* register register register */ ! 203: shlq r6,r8,r10 /* shift left 0 and put in r10,r11 */ ! 204: jlss error4 /* error if n flag still set */ ! 205: jeql error4 /* error if z flag still set */ ! 206: jvs error4 /* error if v flag still set */ ! 207: jcc error4 /* error if c flag not set */ ! 208: jmp 1f ! 209: error4: movpsl _actual /* actual = 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: 1: cmpl $0x12345678,r10 /* check result */ ! 214: jeql 1f /* if no error continue */ ! 215: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 216: movl $1,_ercode /* error code data miscompare */ ! 217: movl r10,_actual /* actual data */ ! 218: movl $0x12345678,_expected /* expected data */ ! 219: jmp *badrtn ! 220: 1: bicpsw $Z ! 221: cmpl $0x9abcdef0,r11 ! 222: jeql 1f /* if no error continue */ ! 223: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 224: movl $1,_ercode /* error code data miscompare */ ! 225: movl r11,_actual /* actual data */ ! 226: movl $0x9abcdef0,_expected /* expected data */ ! 227: jmp *badrtn ! 228: 1: bicpsw $Z ! 229: cmpl r8,r10 /* make sure source unchanged */ ! 230: jeql 1f /* if no error continue */ ! 231: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 232: movl $3,_ercode /* error code operand miscompare */ ! 233: movl r8,_actual /* actual data */ ! 234: movl r10,_expected /* expected data */ ! 235: jmp *badrtn ! 236: 1: bicpsw $Z ! 237: cmpl r9,r11 ! 238: jeql s5 /* if no error continue */ ! 239: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 240: movl $3,_ercode /* error code operand miscompare */ ! 241: movl r9,_actual /* actual data */ ! 242: movl r11,_expected /* expected data */ ! 243: jmp *badrtn ! 244: /* shift count > 64 */ ! 245: s5: ! 246: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 247: as5: callf $4,_setjmp /* save context for error return */ ! 248: movab as5,_stpc /* save subtest starting address */ ! 249: movl $5,_subtst /* subtest number */ ! 250: movl $3,_no_opr /* number of operands in use */ ! 251: movl $64,_opr /* first operand */ ! 252: movl $0x12345678,_opr + 4 /* second operand */ ! 253: movl $0x9abcdef0,_opr + 8 /* third operand */ ! 254: 0: movb $64,temp /* set shift count = 64 */ ! 255: bispsw $(N|V) /* set n,v flags */ ! 256: bicpsw $(C|Z) /* clear c,z flag */ ! 257: /* memory register memory */ ! 258: shlq temp,r10,sloc0 ! 259: /* shift r10,11 left 64 and put in sloc0,sloc1 */ ! 260: jneq error5 /* error if z flag not set */ ! 261: jcc error5 /* error if c flags not set */ ! 262: jlss error5 /* error if n,v flags still set */ ! 263: jvs error5 ! 264: jmp 1f ! 265: error5: movpsl _actual /* actual = psl maybe is incorrect */ ! 266: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 267: movl $2,_ercode /* error code flag failure */ ! 268: jmp *badrtn ! 269: 1: bicpsw $Z ! 270: cmpl sloc0,$0 /* check result */ ! 271: jeql 1f /* if no error continue */ ! 272: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 273: movl $1,_ercode /* error code data miscompare */ ! 274: movl sloc0,_actual /* actual data */ ! 275: movl $0,_expected /* expected data */ ! 276: jmp *badrtn ! 277: 1: bicpsw $Z ! 278: cmpl sloc0,sloc1 ! 279: jeql 1f /* if no error continue */ ! 280: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 281: movl $1,_ercode /* error code data miscompare */ ! 282: movl sloc0,_actual /* actual data */ ! 283: movl sloc1,_expected /* expected data */ ! 284: jmp *badrtn ! 285: 1: bicpsw $Z ! 286: cmpl r10,$0x12345678 /* make sure source unchanged */ ! 287: jeql 1f /* if no error continue */ ! 288: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 289: movl $3,_ercode /* error code operand miscompare */ ! 290: movl r10,_actual /* actual data */ ! 291: movl $0x12345678,_expected /* expected data */ ! 292: jmp *badrtn ! 293: 1: bicpsw $Z ! 294: cmpl r11,$0x9abcdef0 ! 295: jeql aldn /* if no error continue */ ! 296: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 297: movl $3,_ercode /* error code operand miscompare */ ! 298: movl r11,_actual /* actual data */ ! 299: movl $0x9abcdef0,_expected /* expected data */ ! 300: jmp *badrtn ! 301: ! 302: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 303: jmp *return ! 304: ! 305: ! 306: /* test data */ ! 307: ! 308: .align 2 /* align on longword */ ! 309: sloc0: .long 0 ! 310: sloc1: .long 0 ! 311: dloc0: .long 0 ! 312: dloc1: .long 0 ! 313: temp: .long 0 ! 314:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.