|
|
1.1 root 1: /* CASEL instruction test */
2: /* Privilege registers */
3:
4: .set IPL,8
5: .set MAPEN,9
6: .set KSP,19
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 HIGH,31 /* highest interrupt priority */
20:
21:
22: .globl _casel
23: _casel:
24: callf $4,_setjmp /* save context for error return */
25: movab _casel,_stpc /* save subtest address for return */
26: movl $1,_subtst /* subtest number */
27: movl $3,_no_opr /* number of operands in use */
28: movl $0,_opr /* first operand */
29: movl $1,_opr + 4 /* second operand */
30: movl $7,_opr + 8 /* third operand */
31: 0: bicpsw $(IV|T) /* disable exceptions */
32:
33: /* */
34: case:
35: /* LIMIT > (SELECTOR-BASE) */
36: movl $0,r0 /* set selector = r0 = 0 */
37: movl $0,r1 /* set base = r1 = 0 */
38: movl $7,r2 /* set limit = 7; 8 cases .. */
39: bispsw $(N|C) /* set n,c flags */
40: bicpsw $(Z|V) /* clear z,v flags */
41: casel r0,r1,r2
42: .align 1 /* displacement list is word align */
43: cpc0:
44: .word loc0-cpc0
45: .word loc1-cpc0
46: .word loc2-cpc0
47: .word loc3-cpc0
48: .word loc4-cpc0
49: .word loc5-cpc0
50: .word loc6-cpc0
51: .word loc7-cpc0
52: bbs $0,_scoplp,0b /* if set scope loop on error */
53: movl $1,_ercode /* error code data miscompare */
54: movl r2,_actual /* actual data */
55: movl $7,_expected /* expected data */
56: jmp *badrtn /* bad return failed */
57: .space 1000 /* reserve 1000 bytes */
58: loc0:
59: jgeq error1 /* error if n flag not set */
60: jcc error1 /* error if c flag not set */
61: jeql error1 /* error if z or v flag set */
62: jvs error1
63: jmp 1f
64: error1: movpsl _actual /* actual data psl MAYBE is incorrect */
65: bbs $0,_scoplp,0b /* if set scope loop on error */
66: movl $2,_ercode /* error code flag failure */
67: jmp *badrtn /* bad return failed */
68: 1: cmpl r0,$0 /* make sure selector,base,limit unchanged*/
69: jeql 1f
70: bbs $0,_scoplp,0b /* if set scope loop on error */
71: movl $3,_ercode /* error code operand miscompare */
72: movl r0,_actual /* actual data */
73: movl $0,_expected /* expected data */
74: jmp *badrtn /* bad return failed */
75: 1: bicpsw $Z
76: cmpl r0,r1
77: jeql 1f
78: bbs $0,_scoplp,0b /* if set scope loop on error */
79: movl $3,_ercode /* error code operand miscompare */
80: movl r1,_actual /* actual data */
81: movl r0,_expected /* expected data */
82: jmp *badrtn /* bad return failed */
83: bicpsw $Z
84: cmpl r2,$0x7
85: jeql 1f
86: bbs $0,_scoplp,0b /* if set scope loop on error */
87: movl $3,_ercode /* error code operand miscompare */
88: movl r2,_actual /* actual data */
89: movl $7,_expected /* expected data */
90: jmp *badrtn /* bad return failed */
91: 1: jmp step1
92: loc1:
93: jmp loc7 /* take wrong displacement */
94: loc2:
95: jmp loc7 /* take wrong displacement */
96: loc3:
97: jmp loc7 /* take wrong displacement */
98: loc4:
99: jmp loc7 /* take wrong displacement */
100: loc5:
101: jmp loc7 /* take wrong displacement */
102: loc6:
103: jmp loc7 /* take wrong displacement */
104: loc7:
105: bbs $0,_scoplp,0b /* if set scope loop on error */
106: movl $3,_ercode /* error code wrong operand (displacement) */
107: jmp *badrtn
108:
109:
110: step1: bbs $0,_force_lp,0b /* if set loop on last subtest */
111: c2: callf $4,_setjmp /* save context for error return */
112: movab c2,_stpc /* save subtest address for return */
113: movl $2,_subtst /* subtest number */
114: movl $3,_no_opr /* number of operands in use */
115: movl $5,_opr /* first operand */
116: movl $0,_opr + 4 /* second operand */
117: movl $7,_opr + 8 /* third operand */
118: 0: movl $5,r0 /* set selector = r0 = 5 */
119: movl $0,r1 /* set base = r1 = 0 */
120: movl $7,r2 /* set limit = 7; 8 cases .. */
121: bispsw $(N|C) /* set n,c flags */
122: bicpsw $(Z|V) /* clear z,v flags */
123: casel $5,$0,r2
124: .align 1 /* displacement list is word align */
125: pc0:
126: .word l0-pc0
127: .word l1-pc0
128: .word l2-pc0
129: .word l3-pc0
130: .word l4-pc0
131: .word l5-pc0
132: .word l6-pc0
133: .word l7-pc0
134:
135: bbs $0,_scoplp,0b /* if set scope loop on error */
136: movl $1,_ercode /* error code data miscompare */
137: movl r2,_actual /* actual data */
138: movl $7,_expected /* expected data */
139: jmp *badrtn /* bad return failed */
140: .space 1000 /* reserve 1000 bytes */
141: l5:
142: jgeq error2 /* error if n flag not set */
143: jcc error2 /* error if c flag not set */
144: jeql error2 /* error if z or v flag set */
145: jvs error2
146: jmp 1f
147: error2: movpsl _actual /* actual data psl MAYBE is incorrect */
148: bbs $0,_scoplp,0b /* if set scope loop on error */
149: movl $2,_ercode /* error code flag failure */
150: jmp *badrtn /* bad return failed */
151: 1: cmpl r0,$5 /* make sure selector,base,limit unchanged*/
152: jeql 1f
153: bbs $0,_scoplp,0b /* if set scope loop on error */
154: movl $3,_ercode /* error code operand miscompare */
155: movl r0,_actual /* actual data */
156: movl $5,_expected /* expected data */
157: jmp *badrtn /* bad return failed */
158: 1: bicpsw $Z
159: cmpl r2,$0x7
160: jeql 1f
161: bbs $0,_scoplp,0b /* if set scope loop on error */
162: movl $3,_ercode /* error code operand miscompare */
163: movl r2,_actual /* actual data */
164: movl $7,_expected /* expected data */
165: jmp *badrtn /* bad return failed */
166: 1: jmp step2
167: l0:
168: jmp l7 /* take wrong displacement */
169: l1:
170: jmp l7 /* take wrong displacement */
171: l2:
172: jmp l7 /* take wrong displacement */
173: l3:
174: jmp l7 /* take wrong displacement */
175: l4:
176: jmp l7 /* take wrong displacement */
177: l6:
178: jmp l7 /* take wrong displacement */
179: l7:
180: bbs $0,_scoplp,0b /* if set scope loop on error */
181: movl $3,_ercode /* error code wrong operand (displacement) */
182: jmp *badrtn
183:
184: /* LIMIT = (SELECTOR-BASE) */
185: step2:
186: bbs $0,_force_lp,0b /* if set loop on last subtest */
187: c3: callf $4,_setjmp /* save context for error return */
188: movab c3,_stpc /* save subtest address for return */
189: movl $3,_subtst /* subtest number */
190: movl $3,_no_opr /* number of operands in use */
191: movl $7,_opr /* first operand */
192: movl $0,_opr + 4 /* second operand */
193: movl $7,_opr + 8 /* third operand */
194: 0: movl $0x7,sel /* set selector = 7 */
195: movl $0,base /* set base = 0 */
196: movl $0x7,limit /* set limit = 7 */
197: bispsw $Z /* set z flag */
198: bicpsw $(N|V|C) /* clear n,c,v flags */
199: casel sel,base,limit
200: .align 1 /* displacement list is word align */
201: cpc1:
202: .word lc0-cpc1
203: .word lc1-cpc1
204: .word lc2-cpc1
205: .word lc3-cpc1
206: .word lc4-cpc1
207: .word lc5-cpc1
208: .word lc6-cpc1
209: .word lc7-cpc1
210:
211: bbs $0,_scoplp,0b /* if set scope loop on error */
212: movl $1,_ercode /* error code data miscompare */
213: movl limit,_actual /* actual data */
214: movl $7,_expected /* expected data */
215: jmp *badrtn /* bad return failed */
216: .space 1000 /* reserve 1000 bytes */
217: lc0:
218: jmp lc6
219: lc1:
220: jmp lc6 /* take wrong displacement */
221: lc2:
222: jmp lc6 /* take wrong displacement */
223: lc3:
224: jmp lc6 /* take wrong displacement */
225: lc4:
226: jmp lc6 /* take wrong displacement */
227: lc5:
228: jmp lc6 /* take wrong displacement */
229: lc6:
230: bbs $0,_scoplp,0b /* if set scope loop on error */
231: movl $3,_ercode /* error code wrong operand (displacement) */
232: jmp *badrtn
233: lc7:
234: jneq error3 /* error if z flag not set */
235: jlss error3 /* error if n,v,c flags set */
236: jcs error3
237: jvs error3
238: jmp 1f
239: error3: movpsl _actual /* actual data psl MAYBE is incorrect */
240: bbs $0,_scoplp,0b /* if set scope loop on error */
241: movl $2,_ercode /* error code flag failure */
242: jmp *badrtn /* bad return failed */
243: 1: cmpl sel,$0x7 /* make sure selector,base,limit unchanged*/
244: jeql 1f
245: bbs $0,_scoplp,0b /* if set scope loop on error */
246: movl $3,_ercode /* error code operand miscompare */
247: movl sel,_actual /* actual data */
248: movl $7,_expected /* expected data */
249: jmp *badrtn /* bad return failed */
250: 1: bicpsw $Z
251: cmpl base,$0
252: jeql 1f
253: bbs $0,_scoplp,0b /* if set scope loop on error */
254: movl $3,_ercode /* error code operand miscompare */
255: movl base,_actual /* actual data */
256: movl $0,_expected /* expected data */
257: jmp *badrtn /* bad return failed */
258: 1: bicpsw $Z
259: cmpl limit,$0x7
260: jeql step3
261: bbs $0,_scoplp,0b /* if set scope loop on error */
262: movl $3,_ercode /* error code operand miscompare */
263: movl limit,_actual /* actual data */
264: movl $7,_expected /* expected data */
265: jmp *badrtn /* bad return failed */
266:
267: /* LIMIT < (SELECTOR-BASE) */
268: step3:
269: bbs $0,_force_lp,0b /* if set loop on last subtest */
270: c4: callf $4,_setjmp /* save context for error return */
271: movab c4,_stpc /* save subtest address for return */
272: movl $4,_subtst /* subtest number */
273: movl $3,_no_opr /* number of operands in use */
274: movl $19,_opr /* first operand */
275: movl $10,_opr + 4 /* second operand */
276: movl $7,_opr + 8 /* third operand */
277: 0: movl $19,sel /* set selector = 19 */
278: movl $10,base /* set base = 10 */
279: bicpsw $(N|Z|V|C) /* clear n,z,c,v flags */
280: casel sel,base,$7
281: .align 1 /* displacement list is word align */
282: cpc2:
283: .word lx0-cpc2
284: .word lx1-cpc2
285: .word lx2-cpc2
286: .word lx3-cpc2
287: .word lx4-cpc2
288: .word lx5-cpc2
289: .word lx6-cpc2
290: .word lx7-cpc2
291:
292: jmp default
293: .space 1000 /* reserve 1000 bytes */
294: lx0:
295: jmp lx7
296: lx1:
297: jmp lx7 /* take wrong displacement */
298: lx2:
299: jmp lx7 /* take wrong displacement */
300: lx3:
301: jmp lx7 /* take wrong displacement */
302: lx4:
303: jmp lx7 /* take wrong displacement */
304: lx5:
305: jmp lx7 /* take wrong displacement */
306: lx6:
307: jmp lx7 /* take wrong displacement */
308: lx7:
309: bbs $0,_scoplp,0b /* if set scope loop on error */
310: movl $3,_ercode /* error code wrong operand (displacement) */
311: jmp *badrtn
312: default:
313: jlss error4 /* error if n,z,v,c flags set */
314: jeql error4
315: jcs error4
316: jvs error4
317: jmp 1f
318: error4: movpsl _actual /* actual data psl MAYBE is incorrect */
319: bbs $0,_scoplp,0b /* if set scope loop on error */
320: movl $2,_ercode /* error code flag failure */
321: jmp *badrtn /* bad return failed */
322: 1: cmpl sel,$19 /* make sure selector,base,limit unchanged*/
323: jeql 1f
324: bbs $0,_scoplp,0b /* if set scope loop on error */
325: movl $3,_ercode /* error code operand miscompare */
326: movl sel,_actual /* actual data */
327: movl $19,_expected /* expected data */
328: jmp *badrtn /* bad return failed */
329: 1: bicpsw $Z
330: cmpl base,$10
331: jeql done
332: bbs $0,_scoplp,0b /* if set scope loop on error */
333: movl $3,_ercode /* error code operand miscompare */
334: movl base,_actual /* actual data */
335: movl $10,_expected /* expected data */
336: jmp *badrtn /* bad return failed */
337: done:
338: bbs $0,_force_lp,0b /* if set loop on last subtest */
339: jmp *return
340:
341:
342: /* TEST DATA */
343: .align 2
344: sel:
345: .long 0
346: base:
347: .long 0
348: limit:
349: .long 0
350:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.