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