|
|
1.1 ! root 1: /* MOVAW instruction test */ ! 2: /* MOVL,MOVW,MOVB have been tested prior to this test */ ! 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 _movaw ! 34: _movaw: ! 35: callf $4,_setjmp /* save context for error return */ ! 36: movab _movaw,_stpc /* save subtest starting address */ ! 37: movl $1,_subtst /* subtest number */ ! 38: movl $1,_no_opr /* number of operands in use */ ! 39: movl $MAXPOSL,_opr /* first operand */ ! 40: 0: bicpsw $(IV|T) /* disable exceptions */ ! 41: movaw1: ! 42: movl $MAXPOSL,tstloc /* initialize tstloc */ ! 43: bispsw $(N|Z|V|C) /* set n,z,v,c flags */ ! 44: movaw 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 = psl MAYBE it is incorrect */ ! 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 /* error if not */ ! 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 subtest starting address */ ! 66: movl $2,_subtst /* subtest number */ ! 67: movl $1,_no_opr /* number of operands in use */ ! 68: movl $MAXPOSL,_opr /* first operand */ ! 69: 0: movaw (r3),temp /* move address in r3 to temp */ ! 70: cmpl temp,result /* compare result */ ! 71: jeql chkflag /* error if not */ ! 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: /* TESTING CONDITION FLAGS */ ! 78: chkflag: ! 79: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 80: am3: callf $4,_setjmp /* save context for error return */ ! 81: movab am3,_stpc /* save subtest starting address */ ! 82: movl $3,_subtst /* subtest number */ ! 83: movl $1,_no_opr /* number of operands in use */ ! 84: movl $MAXNEGL,_opr /* first operand */ ! 85: 0: movl $0,temp /* clear temp */ ! 86: movl $MAXNEGL,r3 /* set r3 = $MAXNEGL */ ! 87: bispsw $(Z|V|C) /* set z,v,c flags */ ! 88: bicpsw $N /* clear n flag */ ! 89: movaw (r3),temp /* move adr. in r3 to temp */ ! 90: jgeq error2 /* error if n flag not set */ ! 91: jeql error2 /* error if z flag still set */ ! 92: jvs error2 /* error if v flag still set */ ! 93: jcc error2 /* error if c flag clear */ ! 94: jmp 1f ! 95: error2: movpsl _actual /* actual = psl MAYBE it is incorrect */ ! 96: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 97: movl $2,_ercode /* error code flag failure */ ! 98: jmp *badrtn ! 99: 1: cmpl temp,$MAXNEGL /* check address in temp */ ! 100: jeql 1f /* error if not */ ! 101: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 102: movl $1,_ercode /* error code data miscompare */ ! 103: movl temp,_actual /* actual data */ ! 104: movl $MAXNEGL,_expected /* expected data */ ! 105: jmp *badrtn ! 106: 1: bicpsw $Z ! 107: cmpl r3,$MAXNEGL /* check source */ ! 108: jeql m4 /* error if not */ ! 109: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 110: movl $3,_ercode /* error code operand was modified */ ! 111: movl r4,_actual /* actual data */ ! 112: movl $MAXNEGL,_expected /* expected data */ ! 113: jmp *badrtn ! 114: ! 115: m4: ! 116: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 117: am4: callf $4,_setjmp /* save context for error return */ ! 118: movab am4,_stpc /* save subtest starting address */ ! 119: movl $4,_subtst /* subtest number */ ! 120: movl $1,_no_opr /* number of operands in use */ ! 121: movl $MAXNEGL,_opr /* first operand */ ! 122: 0: movl $ONES,temp /* set temp = 0xffffffff */ ! 123: movl $0,r3 /* set r3 = $0 */ ! 124: bispsw $(N|V) /* set n,v flags */ ! 125: bicpsw $(Z|C) /* clear z,c flag */ ! 126: moval (r3),temp /* move adr. in r3 to temp */ ! 127: jlss error3 /* error if n flag still set */ ! 128: jneq error3 /* error if z flag not set */ ! 129: jvs error3 /* error if v flag still set */ ! 130: jcc error3 /* error if c flag clear */ ! 131: jmp 1f ! 132: error3: movpsl _actual /* actual = psl MAYBE it is incorrect */ ! 133: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 134: movl $2,_ercode /* error code flag failure */ ! 135: jmp *badrtn ! 136: 1: cmpl temp,$0 /* check address in temp */ ! 137: jeql 1f /* error if not */ ! 138: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 139: movl $1,_ercode /* error code data miscompare */ ! 140: movl temp,_actual /* actual data */ ! 141: movl $0,_expected /* expected data */ ! 142: jmp *badrtn ! 143: 1: bicpsw $Z ! 144: cmpl r3,$0 /* check source */ ! 145: jeql m5 /* error if not */ ! 146: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 147: movl $3,_ercode /* error code operand was modified */ ! 148: movl r3,_actual /* actual data */ ! 149: movl $0,_expected /* expected data */ ! 150: jmp *badrtn ! 151: /* CHECKING INDEXING MODE */ ! 152: m5: ! 153: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 154: am5: callf $4,_setjmp /* save context for error return */ ! 155: movab am5,_stpc /* save subtest starting address */ ! 156: movl $5,_subtst /* subtest number */ ! 157: movl $1,_no_opr /* number of operands in use */ ! 158: movl $DISP,_opr /* first operand */ ! 159: 0: movl $DISP,r3 /* set r3 = DISP = 2 */ ! 160: bispsw $(N|Z|V|C) /* set n,z,v,c flags */ ! 161: movaw tstloc[r3],r4 /* move address tstloc to r4 */ ! 162: jlss error4 /* error if any of the n,z,v */ ! 163: jeql error4 /* flags still set */ ! 164: jvs error4 ! 165: jcc error4 /* error if c flag clear */ ! 166: jmp 1f ! 167: error4: movpsl _actual /* actual = psl MAYBE it is incorrect */ ! 168: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 169: movl $2,_ercode /* error code flag failure */ ! 170: jmp *badrtn ! 171: 1: cmpl r4,resul1 /* check if r4 has valid adr. */ ! 172: jeql aldn /* error if not */ ! 173: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 174: movl $1,_ercode /* error code data miscompare */ ! 175: movl r4,_actual /* actual data */ ! 176: movl resul1,_expected /* expected data */ ! 177: jmp *badrtn ! 178: ! 179: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 180: jmp *return ! 181: ! 182: ! 183: /* test data */ ! 184: .align 2 /* align on longword boundary */ ! 185: tstloc: .long 0 ! 186: result: .long tstloc ! 187: resul1: .long tstloc+(DISP*WORD) ! 188: temp: .long 0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.