|
|
1.1 root 1: /* BITB (bit byte) test */
2: /* */
3: /*Test name = bitb */
4: /*Description = */
5: /* This test checks 'bitb' instruction as follows: */
6: /* source mask N Z V C (flags) */
7: /* ______ ____ ______________ */
8: /* 0xaa 0x55 0 1 0 1 */
9: /* 0x55 0xaa 0 1 0 1 */
10: /* 0x80 0x80 0 0 0 0 */
11: /* R M --- */
12: /* M R --- */
13: /* */
14:
15: /* */
16: /* Constants definition for 'bit_x' tests */
17: /* */
18: .set SRCB1,0xaa
19: .set SRCW1,0xaaaa
20: .set SRCL1,0xaaaaaaaa
21: .set MASKB1,0x55
22: .set MASKW1,0x5555
23: .set MASKL1,0x55555555
24: .set SRCB2,MASKB1
25: .set SRCW2,MASKW1
26: .set SRCL2,MASKL1
27: .set MASKB2,SRCB1
28: .set MASKW2,SRCW1
29: .set MASKL2,SRCL1
30: .set SRCB3,0x80
31: .set SRCW3,0x8000
32: .set SRCL3,0x80000000
33: .set MASKB3,SRCB3
34: .set MASKW3,SRCW3
35: .set MASKL3,SRCL3
36: /* */
37: /* Syst.s - Constants */
38: /* */
39: .set IPL,8
40: .set HIGH,31
41: .set ZERO,0
42: .set ONES,0xffffffff
43: .set N,8
44: .set Z,4
45: .set V,2
46: .set C,1
47: .set T,16
48: .set IV,32
49: .set FU,64
50: .set DV,128
51: .set PSWMASK,0x003f
52:
53: .globl _bit_b
54: _bit_b:
55: bitbx:
56: callf $4,_setjmp /* save context for error return */
57: movab bitbx,_stpc /* save address of subtest */
58: movl $1,_subtst /* subtest number */
59: movl $2,_no_opr /* number of operands in use */
60: movl $MASKB1,_opr /* first operand */
61: movl $SRCB1,_opr + 4 /* second operand */
62: 0:
63: bicpsw $PSWMASK /*clear overflow enable */
64: movl $SRCB1,r4 /*r4 = source */
65: movl $MASKB1,tloc /*tloc = mask */
66: bispsw $(N|V|C) /*neg,overflow, & carry ON */
67: bitb tloc+3,r4 /*tloc AND r4 mem to reg */
68: jneq error1 /*error if Z = 0 */
69: jlss error1 /*error if N =1 */
70: jvs error1 /*error if V = 1 */
71: jcc error1 /*error if C = 0 */
72: jmp 1f
73: error1: movpsl _actual /* actual psl MAYBE is incorrect */
74: bbs $0,_scoplp,0b /* if set scoplp on error */
75: movl $2,_ercode /* error code flag failure */
76: jmp *badrtn
77: 1: cmpl $SRCB1,r4 /*check source & mask are unchanged */
78: jeql 1f /*error - source changed */
79: bbs $0,_scoplp,0b /* if set loop om error */
80: movl $3,_ercode /* error code operand was modified */
81: movl r4,_actual /* actual data */
82: movl $SRCB1,_expected /* expected data */
83: jmp *badrtn
84: 1: bicpsw $Z /*clear Z flag */
85: cmpl $MASKB1,tloc /* */
86: jeql 1f /*error - mask changed */
87: bbs $0,_scoplp,0b /* if set loop om error */
88: movl $3,_ercode /* error code operand was modified */
89: movl tloc,_actual /* actual data */
90: movl $MASKB1,_expected /* expected data */
91: jmp *badrtn
92:
93: /* Now use different patterns for source & mask */
94:
95: 1: bbs $0,_force_lp,0b /* if set loop on last subtest */
96: st2: callf $4,_setjmp /* save context for error return */
97: movab st2,_stpc /* save address of subtest */
98: movl $2,_subtst /* subtest number */
99: movl $2,_no_opr /* number of operands in use */
100: movl $MASKB2,_opr /* first operand */
101: movl $SRCB2,_opr + 4 /* second operand */
102: 0: bicpsw $PSWMASK /*clear overflow enable */
103: movl $SRCB2,tloc /*r1 = source */
104: movl $MASKB2,r3 /*tloc = mask */
105: bispsw $(N|V|C) /*neg,overflow, & carry ON */
106: bitb r3,tloc+3 /*tloc AND r3 reg to mem */
107: jneq error2 /*error if Z = 0 */
108: jlss error2 /*error if N =1 */
109: jvs error2 /*error if V = 1 */
110: jcc error2 /*error if C = 0 */
111: jmp bitbm1
112: error2: movpsl _actual /* actual psl MAYBE is incorrect */
113: bbs $0,_scoplp,0b /* if set scoplp on error */
114: movl $2,_ercode /* error code flag failure */
115: jmp *badrtn
116:
117: /* Yet another patterns for source & mask */
118:
119: bitbm1:
120: bbs $0,_force_lp,0b /* if set loop on last subtest */
121: st3: callf $4,_setjmp /* save context for error return */
122: movab st3,_stpc /* save address of subtest */
123: movl $3,_subtst /* subtest number */
124: movl $2,_no_opr /* number of operands in use */
125: movl $MASKB3,_opr /* first operand */
126: movl $SRCB3,_opr + 4 /* second operand */
127: 0: bicpsw $PSWMASK /*clear overflow enable */
128: movl $SRCB3,tloc2 /*r1 = source */
129: movl $MASKB3,tloc /*tloc = mask */
130: bispsw $(Z|V) /*zero, & overflow ON */
131: bitb tloc+3,tloc2+3 /*tloc AND tloc2 mem to mem */
132: beql error3 /*error if Z = 1 */
133: jgeq error3 /*error if N =0 */
134: jvs error3 /*error if V = 1 */
135: jcc error3 /*error if C = 0 */
136: jmp t4
137: error3: movpsl _actual /* actual psl MAYBE is incorrect */
138: bbs $0,_scoplp,0b /* if set scoplp on error */
139: movl $2,_ercode /* error code flag failure */
140: jmp *badrtn
141: /* Yet another patterns for source & mask */
142:
143: t4:
144: bbs $0,_force_lp,0b /* if set loop on last subtest */
145: st4: callf $4,_setjmp /* save context for error return */
146: movab st4,_stpc /* save address of subtest */
147: movl $4,_subtst /* subtest number */
148: movl $2,_no_opr /* number of operands in use */
149: movl $MASKB3,_opr /* first operand */
150: movl $SRCB3,_opr + 4 /* second operand */
151: 0: bicpsw $PSWMASK /*clear overflow enable */
152: movl $SRCB3,tloc2 /*tloc2 = source */
153: movl $MASKB3,tloc /*tloc = mask */
154: bispsw $(Z|V) /*zero, & overflow ON */
155: bitb tloc+3,$SRCB3 /*tloc AND tloc2 mem to data */
156: beql error4 /*error if Z = 1 */
157: jlss error4 /*error if N =1 */
158: jvs error4 /*error if V = 1 */
159: jcc error4 /*error if C = 0 */
160: jmp bitbm
161: error4: movpsl _actual /* actual psl MAYBE is incorrect */
162: bbs $0,_scoplp,0b /* if set scoplp on error */
163: movl $2,_ercode /* error code flag failure */
164: jmp *badrtn
165:
166:
167: /* */
168: /* Repeat the above with source = M, & mask = R */
169: /* */
170:
171: bitbm:
172: bbs $0,_force_lp,0b /* if set loop on last subtest */
173: st5: callf $4,_setjmp /* save context for error return */
174: movab st5,_stpc /* save address of subtest */
175: movl $5,_subtst /* subtest number */
176: movl $2,_no_opr /* number of operands in use */
177: movl $MASKB1,_opr /* first operand */
178: movl $SRCB1,_opr + 4 /* second operand */
179: 0: bicpsw $PSWMASK /*clear overflow enable */
180: movl $SRCB1,r4 /*tloc = source */
181: movl $MASKB1,r3 /*r3 = mask */
182: bispsw $(N|V|C) /*neg,overflow, & carry ON */
183: bitb r3,r4 /*r3 AND r4 reg to reg */
184: jneq error5 /*error if Z = 0 */
185: jlss error5 /*error if N =1 */
186: jvs error5 /*error if V = 1 */
187: jcc error5 /*error if C = 0 */
188: jmp 1f
189: error5: movpsl _actual /* actual psl MAYBE is incorrect */
190: bbs $0,_scoplp,0b /* if set scoplp on error */
191: movl $2,_ercode /* error code flag failure */
192: jmp *badrtn
193: 1: cmpl $SRCB1,r4 /*check source & mask are unchanged */
194: jeql 1f /*error - source changed */
195: bbs $0,_scoplp,0b /* if set loop om error */
196: movl $3,_ercode /* error code operand was modified */
197: movl r4,_actual /* actual data */
198: movl $SRCB1,_expected /* expected data */
199: jmp *badrtn
200: 1: bicpsw $Z /*clear Z flag */
201: cmpl $MASKB1,r3
202: jeql t6 /*error - source changed */
203: bbs $0,_scoplp,0b /* if set loop om error */
204: movl $3,_ercode /* error code operand was modified */
205: movl r3,_actual /* actual data */
206: movl $MASKB1,_expected /* expected data */
207: jmp *badrtn
208:
209: /* Now use different patterns for source & mask */
210:
211: t6:
212: bbs $0,_force_lp,0b /* if set loop on last subtest */
213: st6: callf $4,_setjmp /* save context for error return */
214: movab st6,_stpc /* save address of subtest */
215: movl $6,_subtst /* subtest number */
216: movl $2,_no_opr /* number of operands in use */
217: movl $MASKB2,_opr /* first operand */
218: movl $SRCB2,_opr + 4 /* second operand */
219: 0: bicpsw $PSWMASK /*clear overflow enable */
220: movl $SRCB2,tloc /*tloc = source */
221: bispsw $(N|V|C) /*neg,overflow, & carry ON */
222: bitb $MASKB2,tloc+3 /* $MASKB2 AND tloc data to mem */
223: jneq error6 /*error if Z = 0 */
224: jlss error6 /*error if N =1 */
225: jvs error6 /*error if V = 1 */
226: jcc error6 /*error if C = 0 */
227: jmp t7
228: error6: movpsl _actual /* actual psl MAYBE is incorrect */
229: bbs $0,_scoplp,0b /* if set scoplp on error */
230: movl $2,_ercode /* error code flag failure */
231: jmp *badrtn
232:
233: /* Yet another patterns for source & mask */
234:
235: t7:
236: bbs $0,_force_lp,0b /* if set loop on last subtest */
237: st7: callf $4,_setjmp /* save context for error return */
238: movab st7,_stpc /* save address of subtest */
239: movl $7,_subtst /* subtest number */
240: movl $2,_no_opr /* number of operands in use */
241: movl $MASKB3,_opr /* first operand */
242: movl $SRCB3,_opr + 4 /* second operand */
243: 0: bicpsw $PSWMASK /*clear overflow enable */
244: movl $SRCB3,r4 /*tloc = source */
245: bispsw $(Z|V) /*zero, & overflow ON */
246: bitb $MASKB3,r4 /*r4 AND tloc data to reg */
247: jeql error7 /*error if Z = 1 */
248: jlss error7 /*error if N =1 */
249: jvs error7 /*error if V = 1 */
250: jcc error7 /*error if C = 0 */
251: jmp t8
252: error7: movpsl _actual /* actual psl MAYBE is incorrect */
253: bbs $0,_scoplp,0b /* if set scoplp on error */
254: movl $2,_ercode /* error code flag failure */
255: jmp *badrtn
256:
257: /* Yet another patterns for source & mask */
258:
259: t8:
260: bbs $0,_force_lp,0b /* if set loop on last subtest */
261: st8: callf $4,_setjmp /* save context for error return */
262: movab st8,_stpc /* save address of subtest */
263: movl $8,_subtst /* subtest number */
264: movl $2,_no_opr /* number of operands in use */
265: movl $MASKB3,_opr /* first operand */
266: movl $SRCB3,_opr + 4 /* second operand */
267: 0: bicpsw $PSWMASK /*clear overflow enable */
268: movl $MASKB3,r3
269: bispsw $(Z|V) /*zero, & overflow ON */
270: bitb r3,$SRCB3 /*r3 AND tloc reg to data */
271: jeql error8 /*error if Z = 1 */
272: jlss error8 /*error if N =1 */
273: jvs error8 /*error if V = 1 */
274: jcc error8 /*error if C = 0 */
275: jmp aldn
276: error8: movpsl _actual /* actual psl MAYBE is incorrect */
277: bbs $0,_scoplp,0b /* if set scoplp on error */
278: movl $2,_ercode /* error code flag failure */
279: jmp *badrtn
280:
281: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */
282: jmp *return /* good, return to monitor */
283:
284: /* */
285: /* Variables */
286: /* */
287: .align 2
288: tloc: .space 4 /*test location */
289: .align 2
290: tloc2:
291: .space 4 /* test location two */
292:
293:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.