|
|
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.