|
|
1.1 ! root 1: ! 2: /* FFC 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 DAT3,0x4444efff ! 20: ! 21: .globl _ffc ! 22: _ffc: ! 23: callf $4,_setjmp /* save context for error return */ ! 24: movab _ffc,_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: ffc dat0,r4 /* find 1st bit clearin dat0 mem to reg */ ! 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 = psl MAYBE it is incorrect */ ! 39: bbs $0,_scoplp,0b /* if set scpe 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 /* if no error continue */ ! 44: bbs $0,_scoplp,0b /* if set scpe 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 /* if no error continue */ ! 51: bbs $0,_scoplp,0b /* if set scpe 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,r3 /* save source op */ ! 65: bispsw $(N|V) /* set n,v flags */ ! 66: bicpsw $(Z|C) /* clear z,c flag */ ! 67: ffc r3,dest /* find 1st bit clear in dat1 reg to mem */ ! 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 = psl MAYBE it is incorrect */ ! 74: bbs $0,_scoplp,0b /* if set scpe loop on error */ ! 75: movl $2,_ercode /* error code flag failure */ ! 76: jmp *badrtn ! 77: 1: cmpl expd1,dest /* compare to exp. result */ ! 78: jeql 1f /* if no error continue */ ! 79: bbs $0,_scoplp,0b /* if set scpe loop on error */ ! 80: movl $1,_ercode /* error code data miscompare */ ! 81: movl dest,_actual /* actual data */ ! 82: movl expd1,_expected /* expected data */ ! 83: jmp *badrtn ! 84: 1: cmpl dat1,r3 /* paranoid check of dat1 value */ ! 85: jeql f3 /* if no error continue */ ! 86: bbs $0,_scoplp,0b /* if set scpe loop on error */ ! 87: movl $3,_ercode /* error code operand was changed */ ! 88: movl r3,_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: ffc r3,r4 /* find 1st bit clear reg to reg */ ! 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 = psl MAYBE it is incorrect */ ! 109: bbs $0,_scoplp,0b /* if set scpe 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 /* if no error continue */ ! 114: bbs $0,_scoplp,0b /* if set scpe 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 /* if no error continue */ ! 121: bbs $0,_scoplp,0b /* if set scpe 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: bispsw $(N|V) /* set n,v flags */ ! 135: bicpsw $(Z|C) /* clear z,c flag */ ! 136: ffc $DAT3,dest /* find 1st bit clear data to mem */ ! 137: jlss error4 /* error if n flag set */ ! 138: jeql error4 /* error if z flag set */ ! 139: jvs error4 /* error if v flag set */ ! 140: jcc error4 /* error if c flag not set */ ! 141: jmp 1f ! 142: error4: movpsl _actual /* actual = psl MAYBE it is incorrect */ ! 143: bbs $0,_scoplp,0b /* if set scpe loop on error */ ! 144: movl $2,_ercode /* error code flag failure */ ! 145: jmp *badrtn ! 146: 1: cmpl expd3,dest /* compare exp. result */ ! 147: jeql f5 /* if no error continue */ ! 148: bbs $0,_scoplp,0b /* if set scpe loop on error */ ! 149: movl $1,_ercode /* error code data miscompare */ ! 150: movl dest,_actual /* actual data */ ! 151: movl expd3,_expected /* expected data */ ! 152: jmp *badrtn ! 153: ! 154: f5: ! 155: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 156: af5: callf $4,_setjmp /* save context for error return */ ! 157: movab af5,_stpc /* save address of subtest start */ ! 158: movl $5,_subtst /* subtest number */ ! 159: movl $1,_no_opr /* number of operands in use */ ! 160: movl dat4,_opr /* first operand */ ! 161: 0: bispsw $(N|V) /* set n,v flags */ ! 162: bicpsw $(Z|C) /* clear z,c flag */ ! 163: ffc dat4,dest /* find 1st bit clear mem to mem */ ! 164: jeql error5 /* error if z flag set */ ! 165: jgeq error5 /* error if n flag not set */ ! 166: jvs error5 /* error if v flag set */ ! 167: jcc error5 /* error if c flag not set */ ! 168: jmp 1f ! 169: error5: movpsl _actual /* actual = psl MAYBE it is incorrect */ ! 170: bbs $0,_scoplp,0b /* if set scpe loop on error */ ! 171: movl $2,_ercode /* error code flag failure */ ! 172: jmp *badrtn ! 173: 1: cmpl expd4,dest /* compare exp. result */ ! 174: jeql aldn /* if no error continue */ ! 175: bbs $0,_scoplp,0b /* if set scpe loop on error */ ! 176: movl $1,_ercode /* error code data miscompare */ ! 177: movl dest,_actual /* actual data */ ! 178: movl expd4,_expected /* expected data */ ! 179: jmp *badrtn ! 180: ! 181: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */ ! 182: jmp *return ! 183: ! 184: /* test data */ ! 185: .align 2 ! 186: dat0: .long 0x7fffffff /* Last bit clear */ ! 187: expd0: .long 31 ! 188: dat1: .long 0xfffffffe /* First bit clear */ ! 189: expd1: .long 0 ! 190: dat2: .long 0x3fffffff /* Bit 30 clear */ ! 191: expd2: .long 30 ! 192: dat3: .long 0x4444efff /* Bit 12 clear */ ! 193: expd3: .long 12 ! 194: dat4: .long 0xffffffff /* All bit set */ ! 195: expd4: .long -1 ! 196: dest: .long 0 ! 197: temp: .long 0 ! 198:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.