|
|
1.1 root 1:
2:
3: /* ANDL3 (and long 3 operand) test */
4:
5: /*Test name = andl3 */
6: /*Description = */
7: /* This test checks 'andl3' instruction as follows: */
8: /* source mask destination Z N C V(flags) */
9: /* ___________ ____ ___________ _____________ */
10: /* 0xaaaaaaaa 0xaaaaaaaa 0xaaaaaaaa 0 1 1 0 */
11: /* 0xaaaaaaaa 0x55555555 0x00000000 1 0 1 0 */
12: /* R R R --- */
13: /* M M M --- */
14: /* R M M --- */
15: /* M R R --- */
16: /* */
17: /* */
18: /* Constants */
19: /* */
20: .set MASK1B3,0xaa
21: .set MASK1W3,0xaaaa
22: .set MASK1L3,0xaaaaaaaa
23: .set MASK2B3,0x55
24: .set MASK2W3,0x5555
25: .set MASK2L3,0x55555555
26: .set SOURCE1B3,0xaa
27: .set SOURCE1W3,0xaaaa
28: .set SOURCE1L3,0xaaaaaaaa
29: .set SOURCE2B3,0xaa
30: .set SOURCE2W3,0xaaaa
31: .set SOURCE2L3,0xaaaaaaaa
32: .set INITIAL3,0x7fffffff
33: .set EXP1B3,0x7fffffaa
34: .set EXP1W3,0x7fffaaaa
35: .set EXP1L3,0xaaaaaaaa
36: .set EXP2B3,0x7fffff00
37: .set EXP2W3,0x7fff0000
38: .set EXP2L3,0x00000000
39:
40: /* */
41: /* */
42: /* */
43: /* Syst.s - constants */
44: /* */
45: .set IPL,8
46: .set HIGH,31
47: .set ZERO,0
48: .set ONES,0xffffffff
49: .set N,8
50: .set Z,4
51: .set V,2
52: .set C,1
53: .set T,16
54: .set IV,32
55: .set FU,64
56: .set DV,128
57: .set PSWMASK,0x003f
58: .globl _andl3
59: _andl3:
60: callf $4,_setjmp /* save context for error return */
61: movab _andl3,_stpc /* save program counter of subtest */
62: movl $1,_subtst /* number of subtest */
63: movl $2,_no_opr /* number of operands in use */
64: movl $MASK1L3,_opr /* first operand */
65: movl $SOURCE1L3,_opr + 4 /* second operand */
66: 0: movl $MASK1L3,r3 /*mask */
67: movl $SOURCE1L3,r4 /*source */
68: movl $INITIAL3,r5 /*destination */
69: bispsw $(Z|V|C) /*overflow, Z & carry bits ON */
70: andl3 r3,r4,r5 /*try it reg reg reg */
71: jeql error1 /*error if Z = 1 */
72: jgeq error1 /*error if N = 0 */
73: jcc error1 /*error if C = 0 */
74: jvs error1 /*error if V = 1 */
75: cmpl r5,$EXP1L3 /*if dest <> expected value, */
76: jeql a2 /* if correct continue */
77: movl $1,_ercode /* error code data miscompare */
78: bbs $0,_scoplp,0b /* if set scope loop on error */
79: movl r5,_actual /* actual data */
80: movl $EXP1L3,_expected /* expected data */
81: jmp *badrtn
82: error1: movpsl _actual /* actual = psl */
83: bbs $0,_scoplp,0b /* if set scope loop on error */
84: movl $2,_ercode /* error code flag miscompare */
85: jmp *badrtn
86:
87: /* Now try another mask(0x55) */
88: /* */
89: a2: bbs $0,_force_lp,0b /* if set loop on last subtest */
90: aa2: callf $4,_setjmp /* save context for error return */
91: movab aa2,_stpc /* save program counter of subtest */
92: movl $2,_subtst /* number of subtest */
93: movl $2,_no_opr /* number of operands in use */
94: movl $MASK2L3,_opr /* first operand */
95: movl $SOURCE2L3,_opr + 4 /* second operand */
96: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
97: movl $MASK2L3,r3 /*mask */
98: movl $SOURCE2L3,r4 /*source */
99: movl $INITIAL3,dest /*destination */
100: bispsw $(N|V) /*overflow & negetive bits ON */
101: andl3 r3,r4,dest /* try again reg reg dest */
102: jneq error2 /*error if Z = 0 */
103: jlss error2 /*error if N = 1 */
104: jcc error2 /*error if C = 0 */
105: jvs error2 /*error if V = 1 */
106: cmpl dest,$EXP2L3 /*if dest <> expected value, */
107: jeql andl3mmm /* if correct continue */
108: movl $1,_ercode /* error code data miscompare */
109: bbs $0,_scoplp,0b /* if set scope loop on error */
110: movl dest,_actual /* actual data */
111: movl $EXP2L3,_expected /* expected data */
112: jmp *badrtn
113: error2: movpsl _actual /* actual = psl */
114: bbs $0,_scoplp,0b /* if set scope loop on error */
115: movl $2,_ercode /* error code flag miscompare */
116: jmp *badrtn
117: /* */
118: /* now try source = M, mask = M, destination = M */
119: andl3mmm:
120: bbs $0,_force_lp,0b /* if set loop on last subtest */
121: aa3: callf $4,_setjmp /* save context for error return */
122: movab aa3,_stpc /* save program counter of subtest */
123: movl $3,_subtst /* number of subtest */
124: movl $2,_no_opr /* number of operands in use */
125: movl $MASK1L3,_opr /* first operand */
126: movl $SOURCE1L3,_opr + 4 /* second operand */
127: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
128: movl $SOURCE1L3,r4 /*source */
129: movl $INITIAL3,dest /*destination */
130: bispsw $(Z|V|C) /*overflow, Z & carry bits ON */
131: andl3 $MASK1L3,r4,dest/*try it reg data mem data reg mem */
132: jeql error3 /*error if Z = 1 */
133: jgeq error3 /*error if N = 0 */
134: jcc error3 /*error if C = 0 */
135: jvs error3 /*error if V = 1 */
136: movl $EXP1L3,r4
137: cmpl dest,$EXP1L3 /*if dest <> expected value, */
138: jneq error5 /*then error */
139: jeql a4 /* if correct continue */
140: movl $1,_ercode /* error code data miscompare */
141: bbs $0,_scoplp,0b /* if set scope loop on error */
142: movl dest,_actual /* actual data */
143: movl $EXP1L3,_expected /* expected data */
144: jmp *badrtn
145: error3: movpsl _actual /* actual = psl */
146: bbs $0,_scoplp,0b /* if set scope loop on error */
147: movl $2,_ercode /* error code flag miscompare */
148: jmp *badrtn
149:
150: /* Now try another mask(0x55) */
151: /* */
152: a4:
153: bbs $0,_force_lp,0b /* if set loop on last subtest */
154: aa4: callf $4,_setjmp /* save context for error return */
155: movab aa4,_stpc /* save program counter of subtest */
156: movl $4,_subtst /* number of subtest */
157: movl $2,_no_opr /* number of operands in use */
158: movl $MASK2L3,_opr /* first operand */
159: movl $SOURCE1L3,_opr + 4 /* second operand */
160: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
161: movl $MASK2L3,r3 /*mask */
162: movl $INITIAL3,dest /*destination */
163: bispsw $(N|V) /*overflow & negetive bits ON */
164: andl3 r3,$SOURCE1L3,dest/* try again reg data mem */
165: jneq error4 /*error if Z = 0 */
166: jlss error4 /*error if N = 1 */
167: jcc error4 /*error if C = 0 */
168: jvs error4 /*error if V = 1 */
169: cmpl dest,$EXP2L3 /*if dest <> expected value, */
170: jeql andl3mrm /* if correct continue */
171: movl $1,_ercode /* error code data miscompare */
172: bbs $0,_scoplp,0b /* if set scope loop on error */
173: movl dest,_actual /* actual data */
174: movl $EXP2L3,_expected /* expected data */
175: jmp *badrtn
176: error4: movpsl _actual /* actual = psl */
177: bbs $0,_scoplp,0b /* if set scope loop on error */
178: movl $2,_ercode /* error code flag miscompare */
179: jmp *badrtn
180: /* */
181: /* Now use mask = R, source & destination = M */
182: andl3mrm:
183: bbs $0,_force_lp,0b /* if set loop on last subtest */
184: aa5: callf $4,_setjmp /* save context for error return */
185: movab aa5,_stpc /* save program counter of subtest */
186: movl $5,_subtst /* number of subtest */
187: movl $2,_no_opr /* number of operands in use */
188: movl $MASK1L3,_opr /* first operand */
189: movl $SOURCE1L3,_opr + 4 /* second operand */
190: 0:
191: bicpsw $PSWMASK /*turn overflow enable bit off */
192: movl $SOURCE1L3,r4 /*source */
193: movl $INITIAL3,r5 /*destination */
194: bispsw $(Z|V|C) /*overflow, Z & carry bits ON */
195: andl3 $MASK1L3,r4,r5 /*try it data reg reg */
196: jeql error5 /*error if Z = 1 */
197: jgeq error5 /*error if N = 0 */
198: jcc error5 /*error if C = 0 */
199: jvs error5 /*error if V = 1 */
200: cmpl r5,$EXP1L3 /*if dest <> expected value, */
201: jeql a6 /* if correct continue */
202: movl $1,_ercode /* error code data miscompare */
203: bbs $0,_scoplp,0b /* if set scope loop on error */
204: movl r5,_actual /* actual data */
205: movl $EXP1L3,_expected /* expected data */
206: jmp *badrtn
207: error5: movpsl _actual /* actual = psl */
208: bbs $0,_scoplp,0b /* if set scope loop on error */
209: movl $2,_ercode /* error code flag miscompare */
210: jmp *badrtn
211: /* */
212: /* Now try another mask(0x55) */
213: /* */
214: a6: bbs $0,_force_lp,0b /* if set loop on last subtest */
215: aa6: callf $4,_setjmp /* save context for error return */
216: movab aa6,_stpc /* save program counter of subtest */
217: movl $6,_subtst /* number of subtest */
218: movl $2,_no_opr /* number of operands in use */
219: movl $MASK2L3,_opr /* first operand */
220: movl $SOURCE2L3,_opr + 4 /* second operand */
221: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
222: movl $MASK2L3,r3 /*mask */
223: movl $SOURCE2L3,source/*source */
224: movl $INITIAL3,r5 /*destination */
225: bispsw $(N|V) /*overflow & negetive bits ON */
226: andl3 r3,$SOURCE2L3,r5/* try again reg data reg */
227: jneq error6 /*error if Z = 0 */
228: jlss error6 /*error if N = 1 */
229: jcc error6 /*error if C = 0 */
230: jvs error6 /*error if V = 1 */
231: cmpl r5,$EXP2L3 /*if dest <> expected value, */
232: jeql andl3rmm /* if correct continue */
233: movl $1,_ercode /* error code data miscompare */
234: bbs $0,_scoplp,0b /* if set scope loop on error */
235: movl r5,_actual /* actual data */
236: movl $EXP2L3,_expected /* expected data */
237: jmp *badrtn
238: error6: movpsl _actual /* actual = psl */
239: bbs $0,_scoplp,0b /* if set scope loop on error */
240: movl $2,_ercode /* error code flag miscompare */
241: jmp *badrtn
242: /* */
243: /* Now try mask = M, source = R, dest = M */
244: /* */
245: andl3rmm:
246: bbs $0,_force_lp,0b /* if set loop on last subtest */
247: aa7: callf $4,_setjmp /* save context for error return */
248: movab aa7,_stpc /* save program counter of subtest */
249: movl $7,_subtst /* number of subtest */
250: movl $2,_no_opr /* number of operands in use */
251: movl $MASK1L3,_opr /* first operand */
252: movl $SOURCE1L3,_opr + 4 /* second operand */
253: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
254: movl $INITIAL3,r5 /*destination */
255: bispsw $(Z|V|C) /*overflow, Z & carry bits ON */
256: andl3 $MASK1L3,$SOURCE1L3,r5/*try it data data reg */
257: jeql error7 /*error if Z = 1 */
258: jgeq error7 /*error if N = 0 */
259: jcc error7 /*error if C = 0 */
260: jvs error7 /*error if V = 1 */
261: movl $EXP1L3,r4
262: cmpl r5,$EXP1L3 /*if dest <> expected value, */
263: jeql a8 /* if correct continue */
264: movl $1,_ercode /* error code data miscompare */
265: bbs $0,_scoplp,0b /* if set scope loop on error */
266: movl r5,_actual /* actual data */
267: movl $EXP1L3,_expected /* expected data */
268: jmp *badrtn
269: error7: movpsl _actual /* actual = psl */
270: bbs $0,_scoplp,0b /* if set scope loop on error */
271: movl $2,_ercode /* error code flag miscompare */
272: jmp *badrtn
273:
274: /* Now try another mask(0x55) */
275: /* */
276:
277: a8: bbs $0,_force_lp,0b /* if set loop on last subtest */
278: aa8: callf $4,_setjmp /* save context for error return */
279: movab aa8,_stpc /* save program counter of subtest */
280: movl $8,_subtst /* number of subtest */
281: movl $2,_no_opr /* number of operands in use */
282: movl $MASK2L3,_opr /* first operand */
283: movl $SOURCE2L3,_opr + 4 /* second operand */
284: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
285: movl $INITIAL3,dest /*destination */
286: bispsw $(N|V) /*overflow & negetive bits ON */
287: andl3 $MASK2L3,$SOURCE2L3,dest/* try again data data mem */
288: jneq error8 /*error if Z = 0 */
289: jlss error8 /*error if N = 1 */
290: jcc error8 /*error if C = 0 */
291: jvs error8 /*error if V = 1 */
292: cmpl dest,$EXP2L3 /*if dest <> expected value, */
293: jeql andl3mrr /* if correct continue */
294: movl $1,_ercode /* error code data miscompare */
295: bbs $0,_scoplp,0b /* if set scope loop on error */
296: movl dest,_actual /* actual data */
297: movl $EXP2L3,_expected /* expected data */
298: jmp *badrtn
299: error8: movpsl _actual /* actual = psl */
300: bbs $0,_scoplp,0b /* if set scope loop on error */
301: movl $2,_ercode /* error code flag miscompare */
302: jmp *badrtn
303: /* */
304: /* Now try mask = R, source = M, dest = R */
305: /* */
306: andl3mrr:
307: bbs $0,_force_lp,0b /* if set loop on last subtest */
308: aa9: callf $4,_setjmp /* save context for error return */
309: movab aa9,_stpc /* save program counter of subtest */
310: movl $9,_subtst /* number of subtest */
311: movl $2,_no_opr /* number of operands in use */
312: movl $MASK1L3,_opr /* first operand */
313: movl $SOURCE1L3,_opr + 4 /* second operand */
314: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
315: movl $SOURCE1L3,r4 /*source */
316: movl $INITIAL3,r5 /*destination */
317: bispsw $(Z|V|C) /*overflow, Z & carry bits ON */
318: andl3 $MASK1L3,r4,r5 /*try it data reg reg */
319: jeql error9 /*error if Z = 1 */
320: jgeq error9 /*error if N = 0 */
321: jcc error9 /*error if C = 0 */
322: jvs error9 /*error if V = 1 */
323: cmpl r5,$EXP1L3 /*if dest <> expected value, */
324: jeql a10 /* if correct continue */
325: movl $1,_ercode /* error code data miscompare */
326: bbs $0,_scoplp,0b /* if set scope loop on error */
327: movl r5,_actual /* actual data */
328: movl $EXP1L3,_expected /* expected data */
329: jmp *badrtn
330: error9: movpsl _actual /* actual = psl */
331: bbs $0,_scoplp,0b /* if set scope loop on error */
332: movl $2,_ercode /* error code flag miscompare */
333: jmp *badrtn
334:
335: /* Now try another mask(0x55) */
336: /* */
337:
338: a10: bbs $0,_force_lp,0b /* if set loop on last subtest */
339: aa10: callf $4,_setjmp /* save context for error return */
340: movab aa10,_stpc /* save program counter of subtest */
341: movl $0xa,_subtst /* number of subtest */
342: movl $2,_no_opr /* number of operands in use */
343: movl $MASK2L3,_opr /* first operand */
344: movl $SOURCE2L3,_opr + 4 /* second operand */
345: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
346: movl $MASK2L3,r3 /*mask */
347: movl $SOURCE2L3,source/*source */
348: movl $INITIAL3,r5 /*destination */
349: bispsw $(N|V) /*overflow & negetive bits ON */
350: andl3 r3,source,r5 /* try again */
351: jneq error10 /*error if Z = 0 */
352: jlss error10 /*error if N = 1 */
353: jcc error10 /*error if C = 0 */
354: jvs error10 /*error if V = 1 */
355: cmpl r5,$EXP2L3 /*if dest <> expected value, */
356: jeql aldn /* if correct continue */
357: movl $1,_ercode /* error code data miscompare */
358: bbs $0,_scoplp,0b /* if set scope loop on error */
359: movl r5,_actual /* actual data */
360: movl $EXP2L3,_expected /* expected data */
361: jmp *badrtn
362: error10: movpsl _actual /* actual = psl */
363: bbs $0,_scoplp,0b /* if set scope loop on error */
364: movl $2,_ercode /* error code flag miscompare */
365: jmp *badrtn
366: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */
367: jmp *return /* test passed, return to monitor */
368:
369: /* */
370: /* Variables */
371: /* */
372: .align 2
373: mask: .space 4
374: source: .space 4
375: dest: .space 4
376:
377: /* */
378: /* End of file */
379:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.