|
|
1.1 root 1:
2: /* BITW (bit word) test */
3: /* */
4: /*Test name = bitw */
5: /*Description = */
6: /* This test checks 'bitw' 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_w
55: _bit_w:
56: callf $4,_setjmp /* save context for return from error */
57: movab _bit_w,_stpc /* save address of subtest */
58: movl $1,_subtst /* subtest number */
59: movl $2,_no_opr /* number of operands in use */
60: movl $MASKW1,_opr /* first operand */
61: movl $SRCW1,_opr + 4 /* second operand */
62: 0: bicpsw $PSWMASK /*clear overflow enable */
63: movl $SRCW1,r4 /*r4 = source */
64: movl $MASKW1,tloc /*tloc = mask */
65: bispsw $(N|V|C) /*neg,overflow, & carry ON */
66: bitw tloc+2,r4 /*tloc AND r4 mem to reg */
67: bneq error1 /*error if Z = 0 */
68: blss error1 /*error if N =1 */
69: bvs error1 /*error if V = 1 */
70: bcc 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 loop on error */
74: movl $2,_ercode /* error code flag failure */
75: jmp *badrtn
76: 1: cmpl $SRCW1,r4 /*check source & mask are unchanged */
77: beql 1f /*error - source changed */
78: bbs $0,_scoplp,0b /* if set loop on error */
79: movl $3,_ercode /* error code operand was modified */
80: movl r4,_actual /* actual data */
81: movl $SRCW1,_expected /* expected data */
82: jmp *badrtn
83: 1: bicpsw $Z /*clear Z flag */
84: cmpl $MASKW1,tloc /* */
85: beql t2 /* if correct then continue */
86: bbs $0,_scoplp,0b /* if set loop on error */
87: movl $3,_ercode /* error code operand was modified */
88: movl tloc,_actual /* actual data */
89: movl $MASKW1,_expected /* expected data */
90: jmp *badrtn
91:
92: /* Now use different patterns for source & mask */
93:
94: t2: bbs $0,_force_lp,0b /* if set loop on last subtest */
95: st2: callf $4,_setjmp /* save context for return from error */
96: movab st2,_stpc /* save address of subtest */
97: movl $2,_subtst /* subtest number */
98: movl $2,_no_opr /* number of operands in use */
99: movl $MASKW2,_opr /* first operand */
100: movl $SRCW2,_opr + 4 /* second operand */
101: 0: bicpsw $PSWMASK /*clear overflow enable */
102: movl $SRCW2,tloc /*r1 = source */
103: movl $MASKW2,r3 /*tloc = mask data to memory */
104: bispsw $(N|V|C) /*neg,overflow, & carry ON */
105: bitw r3,tloc+2 /*r3 AND tloc reg to memory */
106: bneq error2 /*error if Z = 0 */
107: blss error2 /*error if N =1 */
108: bvs error2 /*error if V = 1 */
109: bcc error2 /*error if C = 0 */
110: jmp t3
111: error2: movpsl _actual /* actual psl MAYBE it is incorrect */
112: bbs $0,_scoplp,0b /* if set loop on error */
113: movl $2,_ercode /* error code flag failure */
114: jmp *badrtn
115:
116: /* Yet another patterns for source & mask */
117:
118: t3: bbs $0,_force_lp,0b /* if set loop on last subtest */
119: st3: callf $4,_setjmp /* save context for return from error */
120: movab st3,_stpc /* save address of subtest */
121: movl $3,_subtst /* subtest number */
122: movl $2,_no_opr /* number of operands in use */
123: movl $MASKW3,_opr /* first operand */
124: movl $SRCW3,_opr + 4 /* second operand */
125: 0: bicpsw $PSWMASK /*clear overflow enable */
126: movl $SRCW3,r4 /*r4 = source */
127: movl $MASKW3,r3 /*r3 = mask */
128: bispsw $(Z|V) /*zero, & overflow ON */
129: bitw r3,r4 /* r3 AND r4 register to register */
130: beql error3 /*error if Z = 1 */
131: blss error3 /*error if N =1 */
132: bvs error3 /*error if V = 1 */
133: bcc error3 /*error if C = 0 */
134: jmp bitwm
135: jmp t3
136: error3: movpsl _actual /* actual psl MAYBE it is incorrect */
137: bbs $0,_scoplp,0b /* if set 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: bitwm:
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 operands in use */
152: movl $MASKW1,_opr /* first operand */
153: movl $SRCW1,_opr + 4 /* second operand */
154: 0: bicpsw $PSWMASK /*clear overflow enable */
155: movl $MASKW1,r3 /*r3 = mask */
156: bispsw $(N|V|C) /*neg,overflow, & carry ON */
157: bitw r3,$SRCW1 /*r3 AND $SRCW1 reg to data */
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 loop on error */
165: movl $2,_ercode /* error code flag failure */
166: jmp *badrtn
167: 1: bicpsw $Z /*clear Z flag */
168: cmpl $MASKW1,r3
169: beql t5 /*error - mask changed */
170: bbs $0,_scoplp,0b /* if set loop on error */
171: movl $3,_ercode /* error code operand was modified */
172: movl r3,_actual /* actual data */
173: movl $MASKW1,_expected /* expected data */
174: jmp *badrtn
175:
176: /* Now use different patterns for source & mask */
177:
178: t5: 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 operands in use */
183: movl $MASKW2,_opr /* first operand */
184: movl $SRCW2,_opr + 4 /* second operand */
185: 0: bicpsw $PSWMASK /*clear overflow enable */
186: movl $SRCW2,tloc /*tloc = source */
187: movl $MASKW2,r4 /*r4 = mask */
188: bispsw $(N|V|C) /*neg,overflow, & carry ON */
189: bitw $SRCW2,r4 /* data AND tloc data to register */
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: jmp t6
195: error5: movpsl _actual /* actual psl MAYBE it is incorrect */
196: bbs $0,_scoplp,0b /* if set 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: bbs $0,_force_lp,0b /* if set loop on last subtest */
203: st6: callf $4,_setjmp /* save context for return from error */
204: movab st6,_stpc /* save address of subtest */
205: movl $6,_subtst /* subtest number */
206: movl $2,_no_opr /* number of operands in use */
207: movl $MASKW3,_opr /* first operand */
208: movl $SRCW3,_opr + 4 /* second operand */
209: 0: bicpsw $PSWMASK /*clear overflow enable */
210: movl $SRCW3,tloc /*tloc = source */
211: movl $MASKW3,tloc2 /*r1 = mask */
212: bispsw $(Z|V) /*zero, & overflow ON */
213: bitw tloc2+2,tloc+2 /*tloc2 AND tloc memory to memory */
214: jeql error6 /*error if Z = 1 */
215: jgeq error6 /*error if N =1 */
216: jvs error6 /*error if V = 1 */
217: jcc error6 /*error if C = 0 */
218: jmp t7
219: error6: movpsl _actual /* actual psl MAYBE it is incorrect */
220: bbs $0,_scoplp,0b /* if set loop on error */
221: movl $2,_ercode /* error code flag failure */
222: jmp *badrtn
223:
224: /* Yet another patterns for source & mask */
225:
226: t7: bbs $0,_force_lp,0b /* if set loop on last subtest */
227: st7: callf $4,_setjmp /* save context for return from error */
228: movab st7,_stpc /* save address of subtest */
229: movl $7,_subtst /* subtest number */
230: movl $2,_no_opr /* number of operands in use */
231: movl $MASKW3,_opr /* first operand */
232: movl $SRCW3,_opr + 4 /* second operand */
233: 0: bicpsw $PSWMASK /*clear overflow enable */
234: movl $SRCW3,tloc /*tloc = source */
235: bispsw $(Z|V) /*zero, & overflow ON */
236: bitw tloc+2,$MASKW3 /*tloc2 AND tloc memory to data */
237: jeql error7 /*error if Z = 1 */
238: jlss error7 /*error if N =1 */
239: jvs error7 /*error if V = 1 */
240: jcc error7 /*error if C = 0 */
241: jmp aldn
242: error7: movpsl _actual /* actual psl MAYBE it is incorrect */
243: bbs $0,_scoplp,0b /* if set loop on error */
244: movl $2,_ercode /* error code flag failure */
245: jmp *badrtn
246: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */
247: jmp *return /* good, return to monitor */
248:
249:
250: /* */
251: /* Variables */
252: /* */
253: .align 2
254: tloc: .space 4 /*test location */
255:
256: .align 2
257: tloc2:
258: .space 4
259:
260:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.