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