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