|
|
1.1 root 1:
2: /* BBC (branch on bit clear) test */
3: /* */
4: /*Test name = bbc */
5: /*Description = */
6: /* This test checks 'bbc' instruction as follows: */
7: /* (1) forward/backward branch on bit set conditon */
8: /* (2) no branch on bit off condition */
9: /* (3) no effect on condition codes */
10: /* */
11: /* */
12:
13: /* */
14: /* constants */
15: /* */
16:
17: .set P1,0x80808101 /*bits 0,8,15,23,31 ON*/
18: .set P2,0x7f7f7efe /*same bits OFF */
19: .set BIT0,0
20: .set BIT8,8
21: .set BIT15,15
22: .set BIT23,23
23: .set BIT31,31
24:
25: /* */
26: /* Syst.s - Constants */
27: /* */
28: .set IPL,8
29: .set HIGH,31
30: .set ZERO,0
31: .set ONES,0xffffffff
32: .set N,8
33: .set Z,4
34: .set V,2
35: .set C,1
36: .set T,16
37: .set IV,32
38: .set FU,64
39: .set DV,128
40: .set PSWMASK,0x003f
41:
42: .globl _bbc
43: _bbc:
44: callf $4,_setjmp /* save context for error return */
45: movab _bbc,_stpc /* save address of subtest */
46: movl $1,_subtst /* subtest number */
47: movl $2,_no_opr /* number of operands in use */
48: movl $BIT0,_opr /* first operand */
49: movl $P2,_opr + 4 /* second operand */
50: movl $0,_actual /* no data for this test it is zero */
51: movl $0,_expected /* no data for this test it is zero */
52: 0:
53: movl $P2,r0 /*bits 0,8,15,23,31 OFF */
54: bicpsw $PSWMASK
55: bispsw $(N|Z|V|C) /*these flags ON */
56: bbs $BIT0,r0,erc0 /*should not branch as bit 0 is OFF data reg*/
57: bbc $BIT0,r0,fs0 /*branch forward on bit clear data reg */
58: movpsl _actual /* actual = psl */
59: bbs $0,_scoplp,0b /* if set loop on error */
60: movl $2,_ercode /* error code flag failure bad jump action */
61: jmp *badrtn /* no actual or expected data */
62: bs0:
63: bbc $BIT0,r0,flgs0 /*branch to flag test */
64: jmp error1
65: bbs $0,_scoplp,0b /* if set loop on error */
66: jmp error1
67: erc0:
68: bbs $0,_scoplp,0b /* if set loop on error */
69: jmp error1
70: .space 110 /*dangerous area - don't come in */
71: fs0:
72: bbc $BIT0,r0,bs0 /*branch backward on bit clear */
73: bbs $0,_scoplp,0b /* if set loop on error */
74: jmp error1
75: flgs0:
76: jneq errs1 /*Z != 1 - error */
77: jlss errs1 /*N != 0 - error */
78: jvs errs1 /*V != 0 - error */
79: jcc errs1 /*C != 1 - error */
80: jmp bn2 /* no errors - continue */
81: errs1:
82: movpsl _actual /* actual = psl */
83: bbs $0,_scoplp,0b /* if set loop on error */
84: movl $2,_ercode /* error code flag failure */
85: jmp *badrtn
86:
87: bn2: bbs $0,_force_lp,0b /* if set loop on last subtest */
88: b2: callf $4,_setjmp /* save context for error return */
89: movab b2,_stpc /* save address of subtest */
90: movl $2,_subtst /* subtest number */
91: movl $2,_no_opr /* number of operands in use */
92: movl $BIT31,_opr /* first operand */
93: movl $P2,_opr + 4 /* second operand */
94: 0: bicpsw $PSWMASK /*PSW = 0 */
95: movl $P2,r0 /*bits 0,8,15,23,31 OFF */
96: movl $BIT31,r6
97: bicpsw $PSWMASK
98: bbs r6,r0,erc31 /*should not branch as bit 31 is OFF reg reg */
99: bbc r6,r0,fs31 /*branch forward on bit clear reg reg */
100: bbs $0,_scoplp,0b /* if set loop on error */
101: jmp error1
102: bs31:
103: bbc $BIT31,r0,flgc31 /*branch to flag test */
104: bbs $0,_scoplp,0b /* if set loop on error */
105: jmp error1
106: erc31:
107: bbs $0,_scoplp,0b /* if set loop on error */
108: jmp error1
109: .space 110 /*dangerous area - don't come in */
110: fs31:
111: bbc $BIT31,r0,bs31 /*branch backward on bit clear */
112: bbs $0,_scoplp,0b /* if set loop on error */
113: jmp error1
114: flgc31:
115: jneq errs2 /*Z != 1 - error */
116: jlss errs2 /*N != 0 - error */
117: jvs errs2 /*V != 0 - error */
118: jcc errs2 /*C != 1 - error */
119: jmp bn3 /* no errors - continue */
120: errs2:
121: movpsl _actual /* actual = psl */
122: bbs $0,_scoplp,0b /* if set loop on error */
123: movl $2,_ercode /* error code flag failure */
124: jmp *badrtn
125:
126: bn3: bbs $0,_force_lp,0b /* if set loop on last subtest */
127: b3: callf $4,_setjmp /* save context for error return */
128: movab b3,_stpc /* save address of subtest */
129: movl $3,_subtst /* subtest number */
130: movl $2,_no_opr /* number of operands in use */
131: movl $BIT8,_opr /* first operand */
132: movl $P2,_opr + 4 /* second operand */
133: 0: bicpsw $PSWMASK /*PSW = 0 */
134: movl $P2,tloc /*bits 0,8,15,23,31 OFF */
135: bbs $BIT8,tloc,erc8 /* should not branch as bit 8 is off data mem*/
136: bbc $BIT8,tloc,fs8 /*branch forward on bit clear data mem */
137: bbs $0,_scoplp,0b /* if set loop on error */
138: jmp error1
139: bs8:
140: bbc $BIT8,r0,s15 /*next test */
141: bbs $0,_scoplp,0b /* if set loop on error */
142: jmp error1
143: erc8:
144: bbs $0,_scoplp,0b /* if set loop on error */
145: jmp error1
146: .space 110 /*dangerous area - don't come in */
147: fs8:
148: bbc $BIT8,r0,bs8 /*branch backward on bit clear */
149: bbs $0,_scoplp,0b /* if set loop on error */
150: jmp error1
151:
152: s15:
153: bbs $0,_force_lp,0b /* if set loop on last subtest */
154: b4: callf $4,_setjmp /* save context for error return */
155: movab b4,_stpc /* save address of subtest */
156: movl $4,_subtst /* subtest number */
157: movl $2,_no_opr /* number of operands in use */
158: movl $BIT15,_opr /* first operand */
159: movl $P2,_opr + 4 /* second operand */
160: 0: bicpsw $PSWMASK /*PSW = 0 */
161: movl $P2,tloc /*bits 0,8,15,23,31 OFF */
162: movl $BIT15,r0
163: bbs r0,tloc,erc15 /*should not branch as bit 15 is OFF reg mem*/
164: bbc r0,tloc,bs15
165: bbs $0,_scoplp,0b /* if set loop on error */
166: jmp error1
167: bs15:
168: bbc $BIT15,r0,s23 /*next test */
169: bbs $0,_scoplp,0b /* if set loop on error */
170: jmp error1
171: erc15:
172: bbs $0,_scoplp,0b /* if set loop on error */
173: jmp error1
174: .space 110 /*dangerous area - don't come in */
175: fs15:
176: bbc $BIT15,r0,bs15 /*branch backward on bit clear */
177: bbs $0,_scoplp,0b /* if set loop on error */
178: jmp error1
179:
180: s23:
181: bbs $0,_force_lp,0b /* if set loop on last subtest */
182: b5: callf $4,_setjmp /* save context for error return */
183: movab b5,_stpc /* save address of subtest */
184: movl $5,_subtst /* subtest number */
185: movl $2,_no_opr /* number of operands in use */
186: movl $BIT23,_opr /* first operand */
187: movl $P2,_opr + 4 /* second operand */
188: 0: bicpsw $PSWMASK /*PSW = 0 */
189: movl $P2,r0 /*bits 0,8,15,23,31 OFF */
190: bbs $BIT23,r0,erc23 /*should not branch as bit 23 is OFF */
191: bbc $BIT23,r0,fs23 /*branch forward on bit clear */
192: bbs $0,_scoplp,0b /* if set loop on error */
193: jmp error1
194: bs23:
195: bbc $BIT23,r0,sm0 /*next test */
196: bbs $0,_scoplp,0b /* if set loop on error */
197: jmp error1
198: erc23:
199: bbs $0,_scoplp,0b /* if set loop on error */
200: jmp error1
201: .space 110 /*dangerous area - don't come in */
202: fs23:
203: bbc $BIT23,r0,bs23 /*branch backward on bit clear */
204: bbs $0,_scoplp,0b /* if set loop on error */
205: jmp error1
206:
207: /* */
208: /* now use memory location(tloc) instead of register */
209: /* */
210:
211: sm0:
212: bbs $0,_force_lp,0b /* if set loop on last subtest */
213: b6: callf $4,_setjmp /* save context for error return */
214: movab b6,_stpc /* save address of subtest */
215: movl $6,_subtst /* subtest number */
216: movl $2,_no_opr /* number of operands in use */
217: movl $BIT0,_opr /* first operand */
218: 0: bicpsw $PSWMASK /*PSW = 0 */
219: movl $P2,tloc /*bits 0,8,15,23,31 OFF */
220: bicpsw $PSWMASK
221: bispsw $(N|Z|V|C) /*these flags ON */
222: bbs $BIT0,tloc,ercm0/*should not branch as bit 0 is OFF */
223: bbc $BIT0,tloc,fsm0 /*branch forward on bit clear */
224: bbs $0,_scoplp,0b /* if set loop on error */
225: jmp error1
226: bsm0:
227: bbc $BIT0,tloc,flgsm0 /*branch to flag test */
228: bbs $0,_scoplp,0b /* if set loop on error */
229: jmp error1
230: ercm0:
231: bbs $0,_scoplp,0b /* if set loop on error */
232: jmp error1
233: .space 110 /*dangerous area - don't come in */
234: fsm0:
235: bbc $BIT0,tloc,bsm0 /*branch backward on bit clear */
236: bbs $0,_scoplp,0b /* if set loop on error */
237: jmp error1
238: flgsm0:
239: jneq errs3 /*Z changed - error */
240: jlss errs3 /*N changed - error */
241: jvs errs3 /*V changed - error */
242: jcc errs3 /*C changed - error */
243: jmp bn7 /* no errors - continue */
244: errs3:
245: movpsl _actual /* actual = psl */
246: bbs $0,_scoplp,0b /* if set loop on error */
247: movl $2,_ercode /* error code flag failure */
248: jmp *badrtn
249:
250: bn7: bbs $0,_force_lp,0b /* if set loop on last subtest */
251: b7: callf $4,_setjmp /* save context for error return */
252: movab b7,_stpc /* save address of subtest */
253: movl $7,_subtst /* subtest number */
254: movl $2,_no_opr /* number of operands in use */
255: movl $BIT31,_opr /* first operand */
256: 0: bicpsw $PSWMASK /*PSW = 0 */
257: movl $P2,tloc /*bits 0,8,15,23,31 OFF */
258: bicpsw $PSWMASK
259: bbs $BIT31,tloc,ercm31 /*should not branch as bit 31 is OFF */
260: bbc $BIT31,tloc,fsm31 /*branch forward on bit clear */
261: bbs $0,_scoplp,0b /* if set loop on error */
262: jmp error1
263: bsm31:
264: bbc $BIT31,tloc,flgcm31/*branch to flag test */
265: bbs $0,_scoplp,0b /* if set loop on error */
266: jmp error1
267: ercm31:
268: bbs $0,_scoplp,0b /* if set loop on error */
269: jmp error1
270: .space 110 /*dangerous area - don't come in */
271: fsm31:
272: bbc $BIT31,tloc,bsm31 /*branch backward on bit clear */
273: bbs $0,_scoplp,0b /* if set loop on error */
274: jmp error1
275: flgcm31:
276: jneq errs4 /*Z changed - error */
277: jlss errs4 /*N changed - error */
278: jvs errs4 /*V changed - error */
279: jcc errs4 /*C changed - error */
280: jmp bn8 /* no errors - continue */
281: errs4:
282: movpsl _actual /* actual = psl */
283: bbs $0,_scoplp,0b /* if set loop on error */
284: movl $2,_ercode /* error code flag failure */
285: jmp *badrtn
286:
287: bn8: bbs $0,_force_lp,0b /* if set loop on last subtest */
288: b8: callf $4,_setjmp /* save context for error return */
289: movab b8,_stpc /* save address of subtest */
290: movl $8,_subtst /* subtest number */
291: movl $2,_no_opr /* number of operands in use */
292: movl $BIT8,_opr /* first operand */
293: 0: bicpsw $PSWMASK /*PSW = 0 */
294: movl $P2,tloc /*bits 0,8,15,23,31 OFF */
295: bbs $BIT8,tloc,ercm8 /*should not branch as bit 8 is OFF */
296: bbc $BIT8,tloc,fsm8 /*branch forward on bit clear */
297: bbs $0,_scoplp,0b /* if set loop on error */
298: jmp error1
299: bsm8:
300: bbc $BIT8,tloc,sm15 /*next test */
301: bbs $0,_scoplp,0b /* if set loop on error */
302: jmp error1
303: ercm8:
304: bbs $0,_scoplp,0b /* if set loop on error */
305: jmp error1
306: .space 110 /*dangerous area - don't come in */
307: fsm8:
308: bbc $BIT8,tloc,bsm8 /*branch backward on bit clear */
309: bbs $0,_scoplp,0b /* if set loop on error */
310: jmp error1
311:
312: sm15:
313: bbs $0,_force_lp,0b /* if set loop on last subtest */
314: b9: callf $4,_setjmp /* save context for error return */
315: movab b9,_stpc /* save address of subtest */
316: movl $9,_subtst /* subtest number */
317: movl $2,_no_opr /* number of operands in use */
318: movl $BIT15,_opr /* first operand */
319: 0: bicpsw $PSWMASK /*PSW = 0 */
320: movl $P2,tloc /*bits 0,8,15,23,31 OFF */
321: bbs $BIT15,tloc,ercm15/*should not branch as bit 15 is OFF */
322: bbc $BIT15,tloc,fsm15/*branch forward on bit clear */
323: bbs $0,_scoplp,0b /* if set loop on error */
324: jmp error1
325: bsm15:
326: bbc $BIT15,tloc,sm23/*next test */
327: bbs $0,_scoplp,0b /* if set loop on error */
328: jmp error1
329: ercm15:
330: bbs $0,_scoplp,0b /* if set loop on error */
331: jmp error1
332: .space 110 /*dangerous area - don't come in */
333: fsm15:
334: bbc $BIT15,tloc,bsm15/*branch backward on bit clear */
335: bbs $0,_scoplp,0b /* if set loop on error */
336: jmp error1
337:
338: sm23:
339: bbs $0,_force_lp,0b /* if set loop on last subtest */
340: b10: callf $4,_setjmp /* save context for error return */
341: movab b10,_stpc /* save address of subtest */
342: movl $0xa,_subtst /* subtest number */
343: movl $2,_no_opr /* number of operands in use */
344: movl $BIT23,_opr /* first operand */
345: 0: bicpsw $PSWMASK /*PSW = 0 */
346: movl $P2,tloc /*bits 0,8,15,23,31 OFF */
347: bbs $BIT23,tloc,ercm23 /*should not branch as bit 23 is OFF */
348: bbc $BIT23,tloc,fsm23 /*branch forward on bit clear */
349: bbs $0,_scoplp,0b /* if set loop on error */
350: jmp error1
351: bsm23:
352: bbc $BIT23,tloc,last
353: bbs $0,_scoplp,0b /* if set loop on error */
354: jmp error1
355: ercm23:
356: bbs $0,_scoplp,0b /* if set loop on error */
357: jmp error1
358: .space 110 /*dangerous area - don't come in */
359: fsm23:
360: bbc $BIT23,tloc,bsm23/*branch backward on bit clear */
361: bbs $0,_scoplp,0b /* if set loop on error */
362: jmp error1
363:
364: last:
365: bbs $0,_force_lp,0b /* if set loop on last subtest */
366: jmp *return
367:
368: error1:
369: movl $1,_ercode /* error code data miscompare bad branch action */
370: jmp *badrtn /* no actual or expected data */
371:
372: /* */
373: /* Variables */
374: /* */
375: .align 2
376: tloc: .space 4
377:
378:
379: /* End of file */
380:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.