|
|
1.1 root 1:
2:
3: /* ANDW3 (and word 3 operand) test */
4:
5: /*Test name = andw3 */
6: /*Description = */
7: /* This test checks 'andw3' instruction as follows: */
8: /* source mask destination Z N C V(flags) */
9: /* ___________ ____ ___________ _____________ */
10: /* 0xaaaa 0xaaaa 0x7fffaaaa 0 0 1 0 */
11: /* 0xaaaa 0x5555 0x7fff0000 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:
59: .globl _andw3
60: _andw3: callf $4,_setjmp /* save context for error return */
61: movab _andw3,_stpc /* subtest address */
62: movl $1,_subtst /* subtest number */
63: movl $2,_no_opr /* number of operands in use */
64: movl $MASK1W3,_opr /* first operand */
65: movl $SOURCE1W3,_opr + 4 /* second operand */
66: 0: movl $MASK1W3,r3 /*mask */
67: movl $SOURCE1W3,r4 /*source */
68: movl $INITIAL3,r5 /*destination */
69: bispsw $(Z|V|C) /*overflow, Z & carry bits ON */
70: andw3 r3,r4,r5 /*try it reg reg reg */
71: jeql error1 /*error if Z = 1 */
72: jlss error1 /*error if N = 1 */
73: jcc error1 /*error if C = 0 */
74: jvs error1 /*error if V = 1 */
75: movl $0xaaaa,r4
76: cmpl r5,$0xaaaa /*if dest <> expected value, */
77: jeql a2 /* if correct continue */
78: movl $1,_ercode /* error code data miscompare */
79: bbs $0,_scoplp,0b /* if set loop on error */
80: movl r5,_actual /* actual data */
81: movl $0xaaaa,_expected /* expected data */
82: jmp *badrtn
83: error1: movpsl _actual /* actual = psl */
84: bbs $0,_scoplp,0b /* if set loop on error */
85: movl $2,_ercode /* error code flag miscompare */
86: jmp *badrtn
87:
88: /* Now try another mask(0x55) */
89: /* */
90: a2: bbs $0,_force_lp,0b /* if set loop on error */
91: aa2: callf $4,_setjmp /* save context for error return */
92: movab aa2,_stpc /* subtest address */
93: movl $2,_subtst /* subtest number */
94: movl $2,_no_opr /* number of operands in use */
95: movl $MASK2W3,_opr /* first operand */
96: movl $SOURCE2W3,_opr + 4 /* second operand */
97: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
98: movl $MASK2W3,mask /*mask */
99: movl $INITIAL3,r5 /*destination */
100: bispsw $(N|V) /*overflow & negetive bits ON */
101: andw3 mask+2,$SOURCE2W3,r5/* try again mem data reg */
102: jneq error2 /*error if Z = 0 */
103: jlss error2 /*error if N = 1 */
104: jcc error2 /*error if C = 1 */
105: jvs error2 /*error if V = 1 */
106: cmpl r5,$0 /*if dest <> expected value, */
107: jeql andw3mmm /* if correct continue */
108: movl $1,_ercode /* error code data miscompare */
109: bbs $0,_scoplp,0b /* if set loop on error */
110: movl r5,_actual /* actual data */
111: movl $0,_expected /* expected data */
112: jmp *badrtn
113: error2: movpsl _actual /* actual = psl it is incorrect */
114: bbs $0,_scoplp,0b /* if set 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: andw3mmm:
120:
121: bbs $0,_force_lp,0b /* if set loop on error */
122: aa3: callf $4,_setjmp /* save context for error return */
123: movab aa3,_stpc /* subtest address */
124: movl $3,_subtst /* subtest number */
125: movl $2,_no_opr /* number of operands in use */
126: movl $MASK1W3,_opr /* first operand */
127: movl $SOURCE1W3,_opr + 4 /* second operand */
128: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
129: movl $MASK1W3,mask /*mask */
130: movl $SOURCE1W3,source/*source */
131: movl $INITIAL3,dest /*destination */
132: bispsw $(Z|V|C) /*overflow, Z & carry bits ON */
133: andw3 mask+2,source+2,dest+2/*try it mem mem mem */
134: jeql error3 /*error if Z = 1 */
135: jgeq error3 /*error if N = 1 */
136: jcc error3 /*error if C = 0 */
137: jvs error3 /*error if V = 1 */
138: cmpl dest,$EXP1W3 /*if dest <> expected value, */
139: jeql a4 /* if correct continue */
140: movl $1,_ercode /* error code data miscompare */
141: bbs $0,_scoplp,0b /* if set loop on error */
142: movl dest,_actual /* actual data */
143: movl $EXP1W3,_expected /* expected data */
144: jmp *badrtn
145: error3: movpsl _actual /* actual = psl it is incorrect */
146: bbs $0,_scoplp,0b /* if set loop on error */
147: movl $2,_ercode /* error code flag miscompare */
148: jmp *badrtn
149:
150: /* Now try another mask(0x55) */
151: /* */
152:
153: a4: bbs $0,_force_lp,0b /* if set loop on error */
154: aa4: callf $4,_setjmp /* save context for error return */
155: movab aa4,_stpc /* subtest address */
156: movl $4,_subtst /* subtest number */
157: movl $2,_no_opr /* number of operands in use */
158: movl $MASK2W3,_opr /* first operand */
159: movl $SOURCE2W3,_opr + 4 /* second operand */
160: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
161: movl $MASK2W3,mask /*mask */
162: movl $SOURCE2W3,source/*source */
163: movl $INITIAL3,r5 /*destination */
164: bispsw $(N|V) /*overflow & negetive bits ON */
165: andw3 mask+2,source+2,r5/* try again mem mem reg */
166: jneq error4 /*error if Z = 0 */
167: jlss error4 /*error if N = 1 */
168: jcc error4 /*error if C = 1 */
169: jvs error4 /*error if V = 1 */
170: movl $0x0,r4
171: cmpl r5,r4 /*if dest <> expected value, */
172: jeql andw3mrm /* if correct continue */
173: movl $1,_ercode /* error code data miscompare */
174: bbs $0,_scoplp,0b /* if set loop on error */
175: movl r5,_actual /* actual data */
176: movl $0,_expected /* expected data */
177: jmp *badrtn
178: error4: movpsl _actual /* actual = psl it is incorrect */
179: bbs $0,_scoplp,0b /* if set loop on error */
180: movl $2,_ercode /* error code flag miscompare */
181: jmp *badrtn
182: /* */
183: /* Now use mask = R, source & destination = M */
184: andw3mrm:
185: bbs $0,_force_lp,0b /* if set loop on error */
186: aa5: callf $4,_setjmp /* save context for error return */
187: movab aa5,_stpc /* subtest address */
188: movl $5,_subtst /* subtest number */
189: movl $2,_no_opr /* number of operands in use */
190: movl $MASK1W3,_opr /* first operand */
191: movl $SOURCE1W3,_opr + 4 /* second operand */
192: 0:
193: bicpsw $PSWMASK /*turn overflow enable bit off */
194: movl $MASK1W3,r3 /*mask */
195: movl $SOURCE1W3,source/*source */
196: movl $INITIAL3,dest /*destination */
197: bispsw $(Z|V|C) /*overflow, Z & carry bits ON */
198: andw3 r3,source+2,dest+2 /*try it reg mem mem */
199: jeql error5 /*error if Z = 1 */
200: jlss error5 /*error if N = 1 */
201: jcc error5 /*error if C = 0 */
202: jvs error5 /*error if V = 1 */
203: movl $EXP1W3,r4
204: cmpl dest,$EXP1W3 /*if dest <> expected value, */
205: jeql a6 /* if correct continue */
206: movl $1,_ercode /* error code data miscompare */
207: bbs $0,_scoplp,0b /* if set loop on error */
208: movl dest,_actual /* actual data */
209: movl $EXP1W3,_expected /* expected data */
210: jmp *badrtn
211: error5: movpsl _actual /* actual = psl it is incorrect */
212: bbs $0,_scoplp,0b /* if set loop on error */
213: movl $2,_ercode /* error code flag miscompare */
214: jmp *badrtn
215: /* */
216: /* Now try another mask(0x55) */
217: /* */
218: a6: bbs $0,_force_lp,0b /* if set loop on error */
219: aa6: callf $4,_setjmp /* save context for error return */
220: movab aa6,_stpc /* subtest address */
221: movl $6,_subtst /* subtest number */
222: movl $2,_no_opr /* number of operands in use */
223: movl $MASK2W3,_opr /* first operand */
224: movl $SOURCE2W3,_opr + 4 /* second operand */
225: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
226: movl $INITIAL3,dest /*destination */
227: bispsw $(N|V) /*overflow & negetive bits ON */
228: andw3 $MASK2W3,$SOURCE2W3,dest+2/* try again data data mem */
229: jneq error6 /*error if Z = 0 */
230: jlss error6 /*error if N = 1 */
231: jcc error6 /*error if C = 1 */
232: jvs error6 /*error if V = 1 */
233: movl $EXP2W3,r4
234: cmpl dest,$EXP2W3 /*if dest <> expected value, */
235: jeql andw3rmm /* if correct continue */
236: movl $1,_ercode /* error code data miscompare */
237: bbs $0,_scoplp,0b /* if set loop on error */
238: movl dest,_actual /* actual data */
239: movl $EXP2W3,_expected /* expected data */
240: jmp *badrtn
241: error6: movpsl _actual /* actual = psl it is incorrect */
242: bbs $0,_scoplp,0b /* if set loop on error */
243: movl $2,_ercode /* error code flag miscompare */
244: jmp *badrtn
245: /* */
246: /* Now try mask = M, source = R, dest = M */
247: /* */
248: andw3rmm:
249: bbs $0,_force_lp,0b /* if set loop on error */
250: aa7: callf $4,_setjmp /* save context for error return */
251: movab aa7,_stpc /* subtest address */
252: movl $7,_subtst /* subtest number */
253: movl $2,_no_opr /* number of operands in use */
254: movl $MASK1W3,_opr /* first operand */
255: movl $SOURCE1W3,_opr + 4 /* second operand */
256: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
257: movl $MASK1W3,mask /*mask */
258: movl $SOURCE1W3,r4 /*source */
259: movl $INITIAL3,dest /*destination */
260: bispsw $(Z|V|C) /*overflow, Z & carry bits ON */
261: andw3 mask+2,r4,dest+2/*try it mem reg mem */
262: jeql error7 /*error if Z = 1 */
263: jlss error7 /*error if N = 1 */
264: jcc error7 /*error if C = 0 */
265: jvs error7 /*error if V = 1 */
266: movl $EXP1W3,r4
267: cmpl dest,$EXP1W3 /*if dest <> expected value, */
268: jeql a8 /* if correct continue */
269: movl $1,_ercode /* error code data miscompare */
270: bbs $0,_scoplp,0b /* if set loop on error */
271: movl dest,_actual /* actual data */
272: movl $EXP1W3,_expected /* expected data */
273: jmp *badrtn
274: error7: movpsl _actual /* actual = psl it is incorrect */
275: bbs $0,_scoplp,0b /* if set loop on error */
276: movl $2,_ercode /* error code flag miscompare */
277: jmp *badrtn
278:
279: /* Now try another mask(0x55) */
280: /* */
281:
282: a8: bbs $0,_force_lp,0b /* if set loop on error */
283: aa8: callf $4,_setjmp /* save context for error return */
284: movab aa8,_stpc /* subtest address */
285: movl $8,_subtst /* subtest number */
286: movl $2,_no_opr /* number of operands in use */
287: movl $MASK2W3,_opr /* first operand */
288: movl $SOURCE2W3,_opr + 4 /* second operand */
289: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
290: movl $SOURCE2W3,r4 /*source */
291: movl $INITIAL3,dest /*destination */
292: bispsw $(N|V) /*overflow & negetive bits ON */
293: andw3 $MASK2W3,r4,dest+2/* try again data reg mem */
294: jneq error8 /*error if Z = 0 */
295: jlss error8 /*error if N = 1 */
296: jcc error8 /*error if C = 1 */
297: jvs error8 /*error if V = 1 */
298: movl $EXP2W3,r4
299: cmpl dest,$EXP2W3 /*if dest <> expected value, */
300: jeql andw3mrr /* if correct continue */
301: movl $1,_ercode /* error code data miscompare */
302: bbs $0,_scoplp,0b /* if set loop on error */
303: movl dest,_actual /* actual data */
304: movl $EXP2W3,_expected /* expected data */
305: jmp *badrtn
306: error8: movpsl _actual /* actual = psl it is incorrect */
307: bbs $0,_scoplp,0b /* if set loop on error */
308: movl $2,_ercode /* error code flag miscompare */
309: jmp *badrtn
310: /* */
311: /* Now try mask = R, source = M, dest = R */
312: /* */
313: andw3mrr:
314: bbs $0,_force_lp,0b /* if set loop on error */
315: aa9: callf $4,_setjmp /* save context for error return */
316: movab aa9,_stpc /* subtest address */
317: movl $9,_subtst /* subtest number */
318: movl $2,_no_opr /* number of operands in use */
319: movl $MASK1W3,_opr /* first operand */
320: movl $SOURCE1W3,_opr + 4 /* second operand */
321: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
322: movl $MASK1W3,r3 /*mask */
323: movl $SOURCE1W3,source/*source */
324: movl $INITIAL3,r5 /*destination */
325: bispsw $(Z|V|C) /*overflow, Z & carry bits ON */
326: andw3 r3,source+2,r5 /*try it reg mem reg */
327: jeql error9 /*error if Z = 1 */
328: jlss error9 /*error if N = 1 */
329: jcc error9 /*error if C = 0 */
330: jvs error9 /*error if V = 1 */
331: cmpl r5,$0xaaaa /*if dest <> expected value, */
332: jeql a10 /* if correct continue */
333: movl $1,_ercode /* error code data miscompare */
334: bbs $0,_scoplp,0b /* if set loop on error */
335: movl r5,_actual /* actual data */
336: movl $0xaaaa,_expected /* expected data */
337: jmp *badrtn
338: error9: movpsl _actual /* actual = psl it is incorrect */
339: bbs $0,_scoplp,0b /* if set loop on error */
340: movl $2,_ercode /* error code flag miscompare */
341: jmp *badrtn
342:
343: /* Now try another mask(0x55) */
344: /* */
345:
346: a10: bbs $0,_force_lp,0b /* if set loop on error */
347: aa10: callf $4,_setjmp /* save context for error return */
348: movab aa10,_stpc /* subtest address */
349: movl $0xa,_subtst /* subtest number */
350: movl $2,_no_opr /* number of operands in use */
351: movl $MASK2W3,_opr /* first operand */
352: movl $SOURCE2W3,_opr + 4 /* second operand */
353: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
354: movl $SOURCE2W3,r4 /*source */
355: movl $INITIAL3,r5 /*destination */
356: bispsw $(N|V) /*overflow & negetive bits ON */
357: andw3 $MASK2W3,r4,r5 /* try again data reg reg */
358: jneq error10 /*error if Z = 0 */
359: jlss error10 /*error if N = 1 */
360: jcc error10 /*error if C = 1 */
361: jvs error10 /*error if V = 1 */
362: cmpl r5,$0 /*if dest <> expected value, */
363: jeql a11 /* if correct continue */
364: movl $1,_ercode /* error code data miscompare */
365: bbs $0,_scoplp,0b /* if set loop on error */
366: movl r5,_actual /* actual data */
367: movl $0,_expected /* expected data */
368: jmp *badrtn
369: error10: movpsl _actual /* actual = psl it is incorrect */
370: bbs $0,_scoplp,0b /* if set loop on error */
371: movl $2,_ercode /* error code flag miscompare */
372: jmp *badrtn
373:
374: a11: bbs $0,_force_lp,0b /* if set loop on error */
375: aa11: callf $4,_setjmp /* save context for error return */
376: movab aa11,_stpc /* subtest address */
377: movl $0xb,_subtst /* subtest number */
378: movl $2,_no_opr /* number of operands in use */
379: movl $MASK1W3,_opr /* first operand */
380: movl $SOURCE1W3,_opr + 4 /* second operand */
381: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
382: movl $MASK1W3,r3 /*mask */
383: movl $INITIAL3,r5 /*destination */
384: bispsw $(Z|V|C) /*overflow, Z & carry bits ON */
385: andw3 r3,$SOURCE1W3,r5/*try it reg data reg */
386: jeql error11 /*error if Z = 1 */
387: jlss error11 /*error if N = 1 */
388: jcc error11 /*error if C = 0 */
389: jvs error11 /*error if V = 1 */
390: cmpl r5,$0xaaaa /*if dest <> expected value, */
391: jeql a12 /* if correct continue */
392: movl $1,_ercode /* error code data miscompare */
393: bbs $0,_scoplp,0b /* if set loop on error */
394: movl r5,_actual /* actual data */
395: movl $0xaaaa,_expected /* expected data */
396: jmp *badrtn
397: error11: movpsl _actual /* actual = psl it is incorrect */
398: bbs $0,_scoplp,0b /* if set loop on error */
399: movl $2,_ercode /* error code flag miscompare */
400: jmp *badrtn
401:
402: a12: bbs $0,_force_lp,0b /* if set loop on error */
403: aa12: callf $4,_setjmp /* save context for error return */
404: movab aa12,_stpc /* subtest address */
405: movl $0xc,_subtst /* subtest number */
406: movl $2,_no_opr /* number of operands in use */
407: movl $MASK1W3,_opr /* first operand */
408: movl $SOURCE1W3,_opr + 4 /* second operand */
409: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
410: movl $MASK1W3,r3 /*mask */
411: movl $SOURCE1W3,r4 /*source */
412: movl $INITIAL3,dest /*destination */
413: bispsw $(Z|V|C) /*overflow, Z & carry bits ON */
414: andw3 r3,r4,dest+2 /*try it reg reg mem */
415: jeql error12 /*error if Z = 1 */
416: jlss error12 /*error if N = 1 */
417: jcc error12 /*error if C = 0 */
418: jvs error12 /*error if V = 1 */
419: movl $0x7fffaaaa,r4
420: cmpl dest,r4 /*if dest <> expected value, */
421: jeql aldn /* if correct continue */
422: movl $1,_ercode /* error code data miscompare */
423: bbs $0,_scoplp,0b /* if set loop on error */
424: movl dest,_actual /* actual data */
425: movl $0xffffaaaa,_expected /* expected data */
426: jmp *badrtn
427: error12: movpsl _actual /* actual = psl it is incorrect */
428: bbs $0,_scoplp,0b /* if set loop on error */
429: movl $2,_ercode /* error code flag miscompare */
430: jmp *badrtn
431: aldn: bbs $0,_force_lp,0b /* if set loop on error */
432: jmp *return /*good pass, goto monitor */
433:
434: /* */
435: /* Variables */
436: /* */
437: .align 2
438: mask: .space 4
439: source: .space 4
440: dest: .space 4
441:
442: /* */
443: /* End of file */
444:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.