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