|
|
1.1 ! root 1: ! 2: /* FFS instruction test */ ! 3: /* */ ! 4: /* constant definitions */ ! 5: ! 6: .set HIGH,31 ! 7: .set IPL,8 ! 8: .set ZERO,0 ! 9: .set ONES,0xffffffff ! 10: .set DV,128 ! 11: .set FU,64 ! 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: .set NEGVAL,0xff0fffff ! 19: .set DAT4,0x0 ! 20: ! 21: .globl _ffs ! 22: _ffs: ! 23: callf $4,_setjmp /* save context for error return */ ! 24: movab _ffs,_stpc /* save address of subtest start */ ! 25: movl $1,_subtst /* subtest number */ ! 26: movl $1,_no_opr /* number of operands in use */ ! 27: movl dat0,_opr /* first operand */ ! 28: 0: bicpsw $(IV|T) /* disable overflow,trace exceptions */ ! 29: movl dat0,r6 /* save source op */ ! 30: bispsw $(Z|V) /* set z,v flags */ ! 31: bicpsw $(N|C) /* clear n,c flag */ ! 32: ffs dat0,r4 /* find 1st bit clearin dat0 */ ! 33: jlss error1 /* error if n flag set */ ! 34: jeql error1 /* error if z flag set */ ! 35: jvs error1 /* error if v flag set */ ! 36: jcc error1 /* error if c flag not set */ ! 37: jmp 1f ! 38: error1: movpsl _actual /* actual data */ ! 39: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 40: movl $2,_ercode /* error code flag failure */ ! 41: jmp *badrtn ! 42: 1: cmpl expd0,r4 /* compare r4 to exp. result */ ! 43: jeql 1f ! 44: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 45: movl $1,_ercode /* error code data miscompare */ ! 46: movl r4,_actual /* actual data */ ! 47: movl expd0,_expected /* expected data */ ! 48: jmp *badrtn ! 49: 1: cmpl dat0,r6 /* make sure source unchanged */ ! 50: jeql f2 ! 51: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 52: movl $3,_ercode /* error code operand was changed */ ! 53: movl r6,_actual /* actual data */ ! 54: movl dat0,_expected /* expected data */ ! 55: jmp *badrtn ! 56: ! 57: f2: ! 58: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 59: af2: callf $4,_setjmp /* save context for error return */ ! 60: movab af2,_stpc /* save address of subtest start */ ! 61: movl $2,_subtst /* subtest number */ ! 62: movl $1,_no_opr /* number of operands in use */ ! 63: movl dat1,_opr /* first operand */ ! 64: 0: movl dat1,r6 /* save source op */ ! 65: bispsw $(N|V) /* set n,v flags */ ! 66: bicpsw $(Z|C) /* clear z,c flag */ ! 67: ffs dat1,r4 /* find 1st bit clear in dat1 */ ! 68: jlss error2 /* error if n flag set */ ! 69: jneq error2 /* error if z flag not set */ ! 70: jvs error2 /* error if v flag set */ ! 71: jcc error2 /* error if c flag not set */ ! 72: jmp 1f ! 73: error2: movpsl _actual /* actual data */ ! 74: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 75: movl $2,_ercode /* error code flag failure */ ! 76: jmp *badrtn ! 77: 1: cmpl expd1,r4 /* compare r4 to exp. result */ ! 78: jeql 1f ! 79: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 80: movl $1,_ercode /* error code data miscompare */ ! 81: movl r4,_actual /* actual data */ ! 82: movl expd1,_expected /* expected data */ ! 83: jmp *badrtn ! 84: 1: cmpl dat1,r6 /* make sure source unchanged */ ! 85: jeql f3 ! 86: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 87: movl $3,_ercode /* error code operand was changed */ ! 88: movl r6,_actual /* actual data */ ! 89: movl dat1,_expected /* expected data */ ! 90: jmp *badrtn ! 91: ! 92: f3: ! 93: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 94: af3: callf $4,_setjmp /* save context for error return */ ! 95: movab af3,_stpc /* save address of subtest start */ ! 96: movl $3,_subtst /* subtest number */ ! 97: movl $1,_no_opr /* number of operands in use */ ! 98: movl dat2,_opr /* first operand */ ! 99: 0: movl dat2,r3 /* save source op */ ! 100: bispsw $(N|V) /* set n,v flags */ ! 101: bicpsw $(Z|C) /* clear z,c flag */ ! 102: ffs r3,r4 /* find 1st bit clear */ ! 103: jlss error3 /* error if n flag set */ ! 104: jeql error3 /* error if z flag set */ ! 105: jvs error3 /* error if v flag set */ ! 106: jcc error3 /* error if c flag not set */ ! 107: jmp 1f ! 108: error3: movpsl _actual /* actual data */ ! 109: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 110: movl $2,_ercode /* error code flag failure */ ! 111: jmp *badrtn ! 112: 1: cmpl expd2,r4 /* compare r4 to exp. result */ ! 113: jeql 1f ! 114: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 115: movl $1,_ercode /* error code data miscompare */ ! 116: movl r4,_actual /* actual data */ ! 117: movl expd2,_expected /* expected data */ ! 118: jmp *badrtn ! 119: 1: cmpl dat2,r3 /* make sure source unchanged */ ! 120: jeql f4 ! 121: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 122: movl $3,_ercode /* error code operand was changed */ ! 123: movl r3,_actual /* actual data */ ! 124: movl dat2,_expected /* expected data */ ! 125: jmp *badrtn ! 126: ! 127: f4: ! 128: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 129: af4: callf $4,_setjmp /* save context for error return */ ! 130: movab af4,_stpc /* save address of subtest start */ ! 131: movl $4,_subtst /* subtest number */ ! 132: movl $1,_no_opr /* number of operands in use */ ! 133: movl dat3,_opr /* first operand */ ! 134: 0: movl dat3,r3 /* save source op */ ! 135: bispsw $(N|V) /* set n,v flags */ ! 136: bicpsw $(Z|C) /* clear z,c flag */ ! 137: ffs r3,dest /* find 1st bit clear */ ! 138: jlss error4 /* error if n flag set */ ! 139: jeql error4 /* error if z flag set */ ! 140: jvs error4 /* error if v flag set */ ! 141: jcc error4 /* error if c flag not set */ ! 142: jmp 1f ! 143: error4: movpsl _actual /* actual data */ ! 144: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 145: movl $2,_ercode /* error code flag failure */ ! 146: jmp *badrtn ! 147: 1: cmpl expd3,dest /* compare exp. result */ ! 148: jeql 1f ! 149: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 150: movl $1,_ercode /* error code data miscompare */ ! 151: movl dest,_actual /* actual data */ ! 152: movl expd3,_expected /* expected data */ ! 153: jmp *badrtn ! 154: 1: cmpl dat3,r3 /* make sure source unchanged */ ! 155: jeql f5 ! 156: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 157: movl $3,_ercode /* error code operand was changed */ ! 158: movl r3,_actual /* actual data */ ! 159: movl dat3,_expected /* expected data */ ! 160: jmp *badrtn ! 161: ! 162: f5: ! 163: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 164: af5: callf $4,_setjmp /* save context for error return */ ! 165: movab af5,_stpc /* save address of subtest start */ ! 166: movl $5,_subtst /* subtest number */ ! 167: movl $1,_no_opr /* number of operands in use */ ! 168: movl $DAT4,_opr /* first operand */ ! 169: 0: bispsw $(N|V) /* set n,v flags */ ! 170: bicpsw $(Z|C) /* clear z,c flag */ ! 171: ffs $DAT4,dest /* find 1st bit clear data to memory */ ! 172: jeql error5 /* error if z flag set */ ! 173: jgeq error5 /* error if n flag not set */ ! 174: jvs error5 /* error if v flag set */ ! 175: jcc error5 /* error if c flag not set */ ! 176: jmp 1f ! 177: error5: movpsl _actual /* actual data */ ! 178: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 179: movl $2,_ercode /* error code flag failure */ ! 180: jmp *badrtn ! 181: 1: cmpl expd4,dest /* compare exp. result */ ! 182: jeql aldn ! 183: bbs $0,_scoplp,0b /* if set scope loop on error */ ! 184: movl $1,_ercode /* error code data miscompare */ ! 185: movl dest,_actual /* actual data */ ! 186: movl expd4,_expected /* expected data */ ! 187: jmp *badrtn ! 188: ! 189: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 190: jmp *return ! 191: ! 192: /* test data */ ! 193: .align 2 ! 194: dat0: .long 0x80000000 /* Last bit set */ ! 195: expd0: .long 31 ! 196: dat1: .long 0x2ffffff1 /* First bit set */ ! 197: expd1: .long 0 ! 198: dat2: .long 0x40000000 /* Bit 30 set */ ! 199: expd2: .long 30 ! 200: dat3: .long 0x44441000 /* Bit 12 set */ ! 201: expd3: .long 12 ! 202: dat4: .long 0 /* All bit clear */ ! 203: expd4: .long -1 ! 204: dest: .long 0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.