|
|
1.1 ! root 1: /* PUSHAB 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 MAXPOSW,0x7fff ! 20: .set MAXNEGL,0x8000ffff ! 21: .set HIGH,31 /* highest interrupt priority */ ! 22: .set DISP,2 ! 23: .set LONG,4 ! 24: .set WORD,2 ! 25: .set BYTE,1 ! 26: ! 27: .globl _pushab ! 28: _pushab: ! 29: callf $4,_setjmp /* save context for error return */ ! 30: movab _pushab,_stpc /* save subtest starting address */ ! 31: movl $1,_subtst /* subtest number */ ! 32: movl $1,_no_opr /* number of operands in use */ ! 33: movab tstloc,_opr /* first operand */ ! 34: 0: bicpsw $(IV|T) /* disable exceptions */ ! 35: /* */ ! 36: pshab: ! 37: /* MOVE ADDRESS FROM MEMORY TO STACK(R14) */ ! 38: movab stk,r14 /* initialize stack */ ! 39: movab stk,r10 ! 40: bispsw $(N|Z|V ) /* set n,z,v flags */ ! 41: bicpsw $Z ! 42: pushab tstloc /* push address tstloc on stack */ ! 43: jlss error1 /* error if any of the n,z,v */ ! 44: jeql error1 /* flags still set */ ! 45: jvs error1 ! 46: jcc error1 /* error if c flag clear */ ! 47: jmp 1f ! 48: error1: movpsl _actual /* actual = psl MAYBE incorrect */ ! 49: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 50: movl $2,_ercode /* error code flag failure */ ! 51: jmp *badrtn ! 52: 1: cmpl (r14),result /* check if stack has valid adr */ ! 53: jeql 1f /* no error then continue */ ! 54: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 55: movl $1,_ercode /* error code data miscompare */ ! 56: movl (r14),_actual /* actual data */ ! 57: movl result,_expected /* expected data */ ! 58: jmp *badrtn ! 59: 1: bicpsw $Z ! 60: movab (r14),r13 ! 61: decl r10 ! 62: decl r10 ! 63: decl r10 ! 64: decl r10 ! 65: cmpl r10,r13 /* check if stack get decrement */ ! 66: jeql p2 /* 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 r10,_actual /* actual data */ ! 70: movl r13,_expected /* expected data */ ! 71: jmp *badrtn ! 72: /* MOVE ADDRESS FROM REGISTER TO STACK */ ! 73: p2: ! 74: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 75: ap2: callf $4,_setjmp /* save context for error return */ ! 76: movab ap2,_stpc /* save subtest starting address */ ! 77: movl $2,_subtst /* subtest number */ ! 78: movl $1,_no_opr /* number of operands in use */ ! 79: movl result,_opr /* first operand */ ! 80: 0: movl result,r12 /* set r12 = address of tstloc */ ! 81: pushab (r12) /* push address in r12 on stack */ ! 82: cmpl (r14),result /* compare result */ ! 83: jeql 1f /* no error then continue */ ! 84: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 85: movl $1,_ercode /* error code data miscompare */ ! 86: movl (r14),_actual /* actual data */ ! 87: movl result,_expected /* expected data */ ! 88: jmp *badrtn ! 89: 1: bicpsw $Z ! 90: movab (r14),r13 ! 91: decl r10 ! 92: decl r10 ! 93: decl r10 ! 94: decl r10 ! 95: cmpl r10,r13 /* check if stack get decrement */ ! 96: jeql chkflag /* no error then continue */ ! 97: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 98: movl $1,_ercode /* error code data miscompare */ ! 99: movl r10,_actual /* actual data */ ! 100: movl r13,_expected /* expected data */ ! 101: jmp *badrtn ! 102: /* TESTING CONDITION FLAGS */ ! 103: chkflag: ! 104: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 105: ap3: callf $4,_setjmp /* save context for error return */ ! 106: movab ap3,_stpc /* save subtest starting address */ ! 107: movl $3,_subtst /* subtest number */ ! 108: movl $1,_no_opr /* number of operands in use */ ! 109: movl $MAXNEGL,_opr /* first operand */ ! 110: 0: movl $MAXNEGL,r13 /* set r13 = $MAXNEGL */ ! 111: bispsw $(Z|V) /* set z,v flags */ ! 112: bicpsw $(C|N) /* clear n,c flag */ ! 113: pushab (r13) /* push adr. in r13 on stack */ ! 114: jgeq error2 /* error if n flag clear */ ! 115: jcc error2 /* error if c flag clear */ ! 116: jeql error2 /* error if z flag still set */ ! 117: jvs error2 /* error if v flag still set */ ! 118: jmp 1f ! 119: error2: movpsl _actual /* actual = psl MAYBE incorrect */ ! 120: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 121: movl $2,_ercode /* error code flag failure */ ! 122: jmp *badrtn ! 123: 1: cmpl (r14),$MAXNEGL /* check address in temp */ ! 124: jeql p4 /* no error then continue */ ! 125: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 126: movl $1,_ercode /* error code data miscompare */ ! 127: movl r10,_actual /* actual data */ ! 128: movl r13,_expected /* expected data */ ! 129: jmp *badrtn ! 130: ! 131: p4: ! 132: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 133: ap4: callf $4,_setjmp /* save context for error return */ ! 134: movab ap4,_stpc /* save subtest starting address */ ! 135: movl $4,_subtst /* subtest number */ ! 136: movl $1,_no_opr /* number of operands in use */ ! 137: movl $0,_opr /* first operand */ ! 138: 0: movl $0,r11 /* set r11 = $0 */ ! 139: bispsw $(N|V) /* set n,v flags */ ! 140: bicpsw $(Z|C) /* clear z,c flag */ ! 141: pushab (r11) /* push adr. in r11 on stack */ ! 142: jcc error3 /* error if c flag clear */ ! 143: jneq error3 /* error if z flag clear */ ! 144: jlss error3 /* error if n flag still set */ ! 145: jvs error3 /* error if v flag still set */ ! 146: jmp 1f ! 147: error3: movpsl _actual /* actual = psl MAYBE incorrect */ ! 148: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 149: movl $2,_ercode /* error code flag failure */ ! 150: jmp *badrtn ! 151: 1: bicpsw $Z ! 152: cmpl (r14),$0 /* check address in temp */ ! 153: jeql p5 /* no error then continue */ ! 154: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 155: movl $1,_ercode /* error code data miscompare */ ! 156: movl (r14),_actual /* actual data */ ! 157: movl $0,_expected /* expected data */ ! 158: jmp *badrtn ! 159: /* CHECKING INDEXING MODE */ ! 160: p5: ! 161: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 162: ap5: callf $4,_setjmp /* save context for error return */ ! 163: movab ap5,_stpc /* save subtest starting address */ ! 164: movl $5,_subtst /* subtest number */ ! 165: movl $1,_no_opr /* number of operands in use */ ! 166: movl tstloc,_opr /* first operand */ ! 167: 0: movl $DISP,r0 /* set r0 = DISP = 2 */ ! 168: bispsw $(N|Z|V) /* set n,z,v flags */ ! 169: bicpsw $Z ! 170: pushab tstloc[r0] /* move address tstloc on stack */ ! 171: jlss error4 /* error if any of the n,z,v */ ! 172: jeql error4 /* flags still set */ ! 173: jvs error4 ! 174: jcc error4 /* error if c flag clear */ ! 175: jmp 1f ! 176: error4: movpsl _actual /* actual = psl MAYBE incorrect */ ! 177: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 178: movl $2,_ercode /* error code flag failure */ ! 179: jmp *badrtn ! 180: 1: cmpl (r14),resul1 /* check if stack has valid adr */ ! 181: jeql aldn /* no error then continue */ ! 182: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 183: movl $1,_ercode /* error code data miscompare */ ! 184: movl (r14),_actual /* actual data */ ! 185: movl $0,_expected /* expected data */ ! 186: jmp *badrtn ! 187: ! 188: ! 189: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 190: jmp *return /* good, return to monitor */ ! 191: ! 192: ! 193: /* test data */ ! 194: .align 2 /* align on longword boundery */ ! 195: /* STACK SPACE */ ! 196: .space 40 /* 10 long words for stack */ ! 197: stk: .long 0 ! 198: tstloc: .long 0 ! 199: result: .long tstloc ! 200: resul1: .long tstloc+(DISP*BYTE)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.