|
|
1.1 ! root 1: /* MOVAB instruction test */ ! 2: /* */ ! 3: /* Privilege registers */ ! 4: ! 5: .set IPL,0x8 ! 6: .set MAPEN,0x9 ! 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: .set DISP,2 ! 29: .set LONG,4 ! 30: .set WORD,2 ! 31: .set BYTE,1 ! 32: ! 33: .globl _movabt ! 34: _movabt: ! 35: callf $4,_setjmp /* save context for error return */ ! 36: movab _movabt,_stpc /* save starting address of subtest */ ! 37: movl $1,_subtst /* subtest number */ ! 38: movl $1,_no_opr /* number of operands in use */ ! 39: movab tstloc,_opr /* first operand */ ! 40: 0: bicpsw $(IV|T) /* disable exceptions */ ! 41: /* MOVE ADDRESS FROM MEMORY TO REGISTER */ ! 42: movl $MAXPOSL,tstloc /* initialize tstloc */ ! 43: bispsw $(N|Z|V|C) /* set n,z,v,c flags */ ! 44: movab tstloc,r3 /* move address tstloc to r3 */ ! 45: jlss error1 /* error if any of the n,z,v */ ! 46: jeql error1 /* flags still set */ ! 47: jvs error1 ! 48: jcc error1 /* error if c flag clear */ ! 49: jmp 1f ! 50: error1: movpsl _actual /* actual data */ ! 51: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 52: movl $2,_ercode /* error code flag failure */ ! 53: jmp *badrtn ! 54: 1: cmpl r3,result /* check if r3 has valid adr. */ ! 55: jeql m2 /* if no error continue */ ! 56: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 57: movl $1,_ercode /* error code data miscompare */ ! 58: movl r3,_actual /* actual data */ ! 59: movl result,_expected /* expected data */ ! 60: jmp *badrtn ! 61: /* MOVE ADDRESS FROM REGISTER TO MEMORY */ ! 62: m2: ! 63: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 64: am2: callf $4,_setjmp /* save context for error return */ ! 65: movab am2,_stpc /* save starting address of subtest */ ! 66: movl $2,_subtst /* subtest number */ ! 67: movl $1,_no_opr /* number of operands in use */ ! 68: movab (r3),_opr /* first operand */ ! 69: 0: movab (r3),temp /* move address in r3 to temp */ ! 70: cmpl temp,result /* compare result */ ! 71: jeql 1f /* if no error continue */ ! 72: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 73: movl $1,_ercode /* error code data miscompare */ ! 74: movl temp,_actual /* actual data */ ! 75: movl result,_expected /* expected data */ ! 76: jmp *badrtn ! 77: 1: bicpsw $Z ! 78: cmpl r3,result /* check source */ ! 79: jeql chkflag /* if no error continue */ ! 80: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 81: movl $1,_ercode /* error code data miscompare */ ! 82: movl r3,_actual /* actual data */ ! 83: movl result,_expected /* expected data */ ! 84: jmp *badrtn ! 85: /* TESTING CONDITION FLAGS */ ! 86: chkflag: ! 87: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 88: am3: callf $4,_setjmp /* save context for error return */ ! 89: movab am3,_stpc /* save starting address of subtest */ ! 90: movl $3,_subtst /* subtest number */ ! 91: movl $1,_no_opr /* number of operands in use */ ! 92: movl $MAXNEGL,_opr /* first operand */ ! 93: 0: movl $0,temp /* clear temp */ ! 94: movl $MAXNEGL,r3 /* set r3 = $MAXNEGL */ ! 95: bispsw $(Z|V) /* set z,v flags */ ! 96: bicpsw $(C|N) /* clear c,n flags */ ! 97: movab (r3),temp /* move adr. in r3 to temp */ ! 98: jgeq error2 /* error if n flag not set */ ! 99: jeql error2 /* error if z flag still set */ ! 100: jvs error2 /* error if v flag still set */ ! 101: jcc error2 /* error if c flag clear */ ! 102: jmp 1f ! 103: error2: movpsl _actual /* actual data */ ! 104: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 105: movl $2,_ercode /* error code flag failure */ ! 106: jmp *badrtn ! 107: 1: cmpl temp,$MAXNEGL /* check address in temp */ ! 108: jneq error2 ! 109: jeql 1f /* if no error continue */ ! 110: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 111: movl $1,_ercode /* error code data miscompare */ ! 112: movl r3,_actual /* actual data */ ! 113: movl result,_expected /* expected data */ ! 114: jmp *badrtn ! 115: 1: bicpsw $Z ! 116: cmpl r3,$MAXNEGL /* check source */ ! 117: jeql m4 /* if no error continue */ ! 118: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 119: movl $1,_ercode /* error code data miscompare */ ! 120: movl r3,_actual /* actual data */ ! 121: movl result,_expected /* expected data */ ! 122: jmp *badrtn ! 123: ! 124: m4: ! 125: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 126: am4: callf $4,_setjmp /* save context for error return */ ! 127: movab am4,_stpc /* save starting address of subtest */ ! 128: movl $4,_subtst /* subtest number */ ! 129: movl $1,_no_opr /* number of operands in use */ ! 130: movl $0,_opr /* first operand */ ! 131: 0: movl $ONES,temp /* set temp = 0xffffffff */ ! 132: movl $0,r3 /* set r3 = $0 */ ! 133: bispsw $(N|V) /* set n,v flags */ ! 134: bicpsw $(Z|C) /* clear z,c flag */ ! 135: movab (r3),temp /* move adr. in r9 to temp */ ! 136: jlss error3 /* error if n flag still set */ ! 137: jneq error3 /* error if z flag not set */ ! 138: jvs error3 /* error if v flag still set */ ! 139: jcc error3 /* error if c flag clear */ ! 140: cmpl temp,$0 /* check address in temp */ ! 141: jmp m5 ! 142: error3: movpsl _actual /* actual data */ ! 143: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 144: movl $2,_ercode /* error code flag failure */ ! 145: jmp *badrtn ! 146: /* CHECKING INDEXING MODE */ ! 147: m5: ! 148: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 149: am5: callf $4,_setjmp /* save context for error return */ ! 150: movab am5,_stpc /* save starting address of subtest */ ! 151: movl $5,_subtst /* subtest number */ ! 152: movl $1,_no_opr /* number of operands in use */ ! 153: movl $DISP,_opr /* first operand */ ! 154: 0: movl $DISP,r3 /* set r3 = DISP = 2 */ ! 155: bispsw $(N|Z|V|C) /* set n,z,v,c flags */ ! 156: movab tstloc[r3],r4 /* move address tstloc to r4 */ ! 157: jlss error4 /* error if any of the n,z,v */ ! 158: jeql error4 /* flags still set */ ! 159: jvs error4 ! 160: jcc error4 /* error if c flag clear */ ! 161: cmpl r4,resul1 /* check if r4 has valid adr. */ ! 162: jneq error2 /* error if not */ ! 163: jmp aldn ! 164: error4: movpsl _actual /* actual data */ ! 165: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 166: movl $2,_ercode /* error code flag failure */ ! 167: jmp *badrtn ! 168: ! 169: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 170: jmp *return ! 171: ! 172: /* test data */ ! 173: .align 2 /* align on longword boundary */ ! 174: tstloc: .long 0 ! 175: result: .long tstloc ! 176: resul1: .long tstloc+(DISP * BYTE) ! 177: temp: .long 0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.