|
|
1.1 ! root 1: /* SHAR 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: /* SHIFT RIGHT LONG FROM MEMORY TO REGISTER */ ! 22: .globl _shar ! 23: _shar: ! 24: callf $4,_setjmp /* save context for error return */ ! 25: movab _shar,_stpc /* save subtest address */ ! 26: movl $1,_subtst /* subtest number */ ! 27: movl $2,_no_opr /* number of operands */ ! 28: movl $1,_opr /* first operand */ ! 29: movl $0x55555555,_opr + 4 /* second operand */ ! 30: 0: movl $0x55555555,srcloc /* set srcloc = 0x55555555 */ ! 31: movl $(0x55555555>>1),r12 /* set r12 = 0xaaaaaaaa */ ! 32: bispsw $(V|Z|N) /* set v,z,n flag */ ! 33: bicpsw $C /* clear c flag */ ! 34: /* data memory register */ ! 35: shar $1,srcloc,r11 /* shift left 1 and put in r11 */ ! 36: jlss error1 /* error if n flag set */ ! 37: jvs error1 /* error if v flag set */ ! 38: jeql error1 /* error if z flag set */ ! 39: jcc error1 /* error if c flag not set */ ! 40: jmp 1f ! 41: error1: movpsl _actual /* actual = psl MAYBE it is incorrect */ ! 42: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 43: movl $2,_ercode /* error code flag failure */ ! 44: jmp *badrtn ! 45: 1: cmpl r11,r12 /* check result */ ! 46: jeql 1f ! 47: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 48: movl $1,_ercode /* error code data miscompare */ ! 49: movl r11,_actual /* actual data */ ! 50: movl r12,_expected /* expected data */ ! 51: jmp *badrtn ! 52: 1: bicpsw $Z ! 53: cmpl $0x55555555,srcloc /* check if source get affected */ ! 54: jeql s2 ! 55: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 56: movl $3,_ercode /* error code operand miscompare */ ! 57: movl srcloc,_actual /* actual data */ ! 58: movl $0x55555555,_expected /* expected data */ ! 59: jmp *badrtn ! 60: /* SHIFT RIGHT LONG FROM REGISTER TO MEMORY */ ! 61: s2: ! 62: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 63: as2: callf $4,_setjmp /* save context for error return */ ! 64: movab as2,_stpc /* save subtest address */ ! 65: movl $2,_subtst /* subtest number */ ! 66: movl $2,_no_opr /* number of operands */ ! 67: movl $1,_opr /* first operand */ ! 68: movl $0x80000000,_opr + 4 /* second operand */ ! 69: 0: movl $0x80000000,r11 ! 70: movb $1,temp /* set temp = shift count */ ! 71: bispsw $(V|Z) /* set v,z flags */ ! 72: bicpsw $(N|C) /* clear c,n flag */ ! 73: /* memory register memory */ ! 74: shar temp,r11,dstloc /* shift r11 left 1 and put in dstloc */ ! 75: jgeq error2 /* error if n flag not set */ ! 76: jcc error2 /* error if c flag not set */ ! 77: jeql error2 /* error if z flag set */ ! 78: jvs error2 /* error if v flag set */ ! 79: jmp 1f ! 80: error2: movpsl _actual /* actual = psl MAYBE it is incorrect */ ! 81: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 82: movl $2,_ercode /* error code flag failure */ ! 83: jmp *badrtn ! 84: 1: cmpl dstloc,$0xc0000000 /* check result */ ! 85: jeql 1f ! 86: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 87: movl $1,_ercode /* error code data miscompare */ ! 88: movl dstloc,_actual /* actual data */ ! 89: movl $0xc0000000,_expected /* expected data */ ! 90: jmp *badrtn ! 91: 1: bicpsw $Z ! 92: cmpl r11,$0x80000000 /* make sure source unchanged */ ! 93: jeql s3 ! 94: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 95: movl $3,_ercode /* error code operand miscompare */ ! 96: movl r11,_actual /* actual data */ ! 97: movl $0x80000000,_expected /* expected data */ ! 98: jmp *badrtn ! 99: /* SHIFT RIGHT LONG FROM MEMORY TO MEMORY */ ! 100: s3: ! 101: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 102: as3: callf $4,_setjmp /* save context for error return */ ! 103: movab as3,_stpc /* save subtest address */ ! 104: movl $3,_subtst /* subtest number */ ! 105: movl $2,_no_opr /* number of operands */ ! 106: movl $0xffffffe4,_opr /* first operand */ ! 107: movl srcloc,_opr + 4 /* second operand */ ! 108: 0: movl $0xffffffe4,r11 /* set r11[0:4] = shift count = 4 */ ! 109: bispsw $(N|V|Z) /* set n,v,z flag */ ! 110: bicpsw $C /* clear c flag */ ! 111: /* register memory memory */ ! 112: shar r11,srcloc,srcloc /* shift and put result back in srcloc */ ! 113: jlss error3 /* error if n,z,v flag still set */ ! 114: jeql error3 ! 115: jvs error3 ! 116: jcc error3 /* error if c flag not set */ ! 117: jmp 1f ! 118: error3: movpsl _actual /* actual = psl MAYBE it is incorrect */ ! 119: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 120: movl $2,_ercode /* error code flag failure */ ! 121: jmp *badrtn ! 122: 1: cmpl srcloc,$0x5555555 /* check result */ ! 123: jeql s4 ! 124: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 125: movl $1,_ercode /* error code data miscompare */ ! 126: movl srcloc,_actual /* actual data */ ! 127: movl $0x55555555,_expected /* expected data */ ! 128: jmp *badrtn ! 129: /* SPECIAL CASES */ ! 130: /* shift count = 0 */ ! 131: s4: ! 132: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 133: as4: callf $4,_setjmp /* save context for error return */ ! 134: movab as4,_stpc /* save subtest address */ ! 135: movl $4,_subtst /* subtest number */ ! 136: movl $2,_no_opr /* number of operands */ ! 137: movl $0,_opr /* first operand */ ! 138: movl $0x55555555,_opr + 4 /* second operand */ ! 139: 0: movl $0x55555555,srcloc /* set srcloc = 0x55555555 */ ! 140: movl $-1,r11 ! 141: bispsw $(N|Z|V) /* set n,z,v flags */ ! 142: bicpsw $C /* clear C flag */ ! 143: /* data memory register */ ! 144: shar $0,srcloc,r11 /* shift left 0 and put in r11 */ ! 145: jlss error4 /* error if n,z,v flag still set */ ! 146: jeql error4 ! 147: jvs error4 ! 148: jcc error4 /* error if c flag not set */ ! 149: jmp 1f ! 150: error4: movpsl _actual /* actual = psl MAYBE it is 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 $0x55555555,r11 /* check result */ ! 155: jeql 1f ! 156: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 157: movl $1,_ercode /* error code data miscompare */ ! 158: movl r11,_actual /* actual data */ ! 159: movl $0x55555555,_expected /* expected data */ ! 160: jmp *badrtn ! 161: 1: bicpsw $Z ! 162: cmpl $0x55555555,srcloc /* check if source get affected */ ! 163: jeql s5 ! 164: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 165: movl $3,_ercode /* error code operand miscompare */ ! 166: movl srcloc,_actual /* actual data */ ! 167: movl $0x55555555,_expected /* expected data */ ! 168: jmp *badrtn ! 169: /* shift count = MAX COUNT = 31 */ ! 170: s5: ! 171: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 172: as5: callf $4,_setjmp /* save context for error return */ ! 173: movab as5,_stpc /* save subtest address */ ! 174: movl $5,_subtst /* subtest number */ ! 175: movl $2,_no_opr /* number of operands */ ! 176: movl $-1,_opr /* first operand */ ! 177: movl $-1,_opr + 4 /* second operand */ ! 178: 0: movb $-1,r11 /* set shift count = 31 */ ! 179: bispsw $(Z|V) /* set z,v flag */ ! 180: bicpsw $(N|C) /* clear n,c flag */ ! 181: shar r11,r11,r11 /* shift r11 left 31 and put back in r11 */ ! 182: jgeq error5 /* error if n,c flag not set */ ! 183: jcc error5 ! 184: jeql error5 /* error if z,v flag set */ ! 185: jvs error5 ! 186: jmp 1f ! 187: error5: movpsl _actual /* actual = psl MAYBE it is incorrect */ ! 188: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 189: movl $2,_ercode /* error code flag failure */ ! 190: jmp *badrtn ! 191: 1: bicpsw $Z ! 192: cmpl r11,$0xffffffff /* check result */ ! 193: jeql aldn ! 194: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 195: movl $1,_ercode /* error code data miscompare */ ! 196: movl r11,_actual /* actual data */ ! 197: movl $0x55555555,_expected /* expected data */ ! 198: jmp *badrtn ! 199: ! 200: ! 201: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 202: jmp *return ! 203: ! 204: ! 205: /* test data */ ! 206: .align 2 ! 207: srcloc: .long 0 ! 208: dstloc: .long 0 ! 209: temp: .long 0 ! 210: ! 211:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.