|
|
1.1 root 1:
2:
3:
4: /* ORB3 (or byte 3 operand) test */
5:
6: /*Test name = orb3 */
7: /*Description = */
8: /* This test checks 'orb3' instruction as follows: */
9: /* source mask destination Z N C V(flags) */
10: /* ___________ ____ ___________ _____________ */
11: /* 0xaa 0xaa 0x7fffffaa 0 0 1 0 */
12: /* 0xaa 0x55 0x7fffffff 0 0 1 0 */
13: /* 0x00 0x00 0x00000000 1 0 x 0 */
14: /* R R R --- */
15: /* M M M --- */
16: /* R M M --- */
17: /* M R R --- */
18: /* */
19: /* */
20: /* */
21: /* Constants */
22: /* */
23: .set MASK1B3,0xaa
24: .set MASK1W3,0xaaaa
25: .set MASK1L3,0xaaaaaaaa
26: .set MASK2B3,0x55
27: .set MASK2W3,0x5555
28: .set MASK2L3,0x55555555
29: .set MASK3B3,0x00
30: .set MASK3W3,0x0000
31: .set MASK3L3,0x00000000
32: .set SOURCE1B3,0xaa
33: .set SOURCE1W3,0xaaaa
34: .set SOURCE1L3,0xaaaaaaaa
35: .set SOURCE2B3,0xaa
36: .set SOURCE2W3,0xaaaa
37: .set SOURCE2L3,0xaaaaaaaa
38: .set SOURCE3B3,0x00
39: .set SOURCE3W3,0x0000
40: .set SOURCE3L3,0x00000000
41: .set INIT1B3,0x7fffff00
42: .set INIT1W3,0x7fff0000
43: .set INIT1L3,0x00000000
44: .set INIT3B3,0x7fffffff
45: .set INIT3W3,INIT3B3
46: .set INIT3L3,INIT3B3
47: .set EXP1B3,0x7fffffaa
48: .set EXP1W3,0x7fffaaaa
49: .set EXP1L3,0xaaaaaaaa
50: .set EXP2B3,0x7fffffff
51: .set EXP2W3,0x7fffffff
52: .set EXP2L3,0xffffffff
53: .set EXP3B3,0x00000000
54: .set EXP3W3,EXP3B3
55: .set EXP3L3,EXP3B3
56:
57: /* */
58: /* */
59: /* */
60: /* Syst.s - constants */
61: /* */
62: .set IPL,8
63: .set HIGH,31
64: .set ZERO,0
65: .set ONES,0xffffffff
66: .set N,8
67: .set Z,4
68: .set V,2
69: .set C,1
70: .set T,16
71: .set IV,32
72: .set FU,64
73: .set DV,128
74: .set PSWMASK,0x003f
75: /* */
76: .globl _orb3
77: _orb3:
78: callf $4,_setjmp /* save context for error return */
79: movab _orb3,_stpc /* save starting address of subtest */
80: movl $1,_subtst /* subtest number */
81: movl $2,_no_opr /* number of operands in use */
82: movl $MASK1B3,_opr /* first operand */
83: movl $SOURCE1B3,_opr + 4 /* second operand */
84: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
85: movl $MASK1B3,r3 /*mask */
86: movl $SOURCE1B3,r4 /*source */
87: movl $INIT1B3,r5 /*destination */
88: bispsw $(Z|V|C) /*overflow, Z & carry bits ON */
89: orb3 r3,r4,r5 /*try it reg reg reg */
90: jeql error1 /*error if Z = 1 */
91: jlss error1 /*error if N = 1 */
92: jcc error1 /*error if C = 0 */
93: jvs error1 /*error if V = 1 */
94: jmp 1f
95: error1: movpsl _actual /* actual = psl MAYBE is incorrect */
96: bbs $0,_scoplp,0b /* if set scope loop on error */
97: movl $2,_ercode /* error code flag failure */
98: jmp *badrtn
99: 1: cmpl r5,$0xaa /*if dest <> expected value, */
100: jeql o2
101: bbs $0,_scoplp,0b /* if set scope loop on error */
102: movl $1,_ercode /* error code data miscompare */
103: movl r5,_actual /* actual data */
104: movl $0xaa,_expected /* expected data */
105: jmp *badrtn
106:
107: /* Now try another mask(0x55) */
108: /* */
109:
110: o2:
111: bbs $0,_force_lp,0b /* if set loop on last subtest */
112: ao2: callf $4,_setjmp /* save context for error return */
113: movab ao2,_stpc /* save starting address of subtest */
114: movl $2,_subtst /* subtest number */
115: movl $2,_no_opr /* number of operands in use */
116: movl $MASK2B3,_opr /* first operand */
117: movl $SOURCE2B3,_opr + 4 /* second operand */
118: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
119: movl $MASK2B3,r3 /*mask */
120: movl $SOURCE2B3,r4 /*source */
121: movl $INIT1B3,dest /*destination */
122: bispsw $(Z|V) /*overflow & zero bits ON */
123: orb3 r3,r4,dest+3 /* try again reg reg mem */
124: jeql error2 /*error if Z = 1 */
125: jlss error2 /*error if N = 1 */
126: jcc error2 /*error if C = 0 */
127: jvs error2 /*error if V = 1 */
128: jmp 1f
129: error2: movpsl _actual /* actual = psl MAYBE is incorrect */
130: bbs $0,_scoplp,0b /* if set scope loop on error */
131: movl $2,_ercode /* error code flag failure */
132: jmp *badrtn
133: 1: cmpb dest+3,$-1 /*if dest <> expected value, */
134: jeql o3
135: bbs $0,_scoplp,0b /* if set scope loop on error */
136: movl $1,_ercode /* error code data miscompare */
137: movl dest,_actual /* actual data */
138: movl $-1,_expected /* expected data */
139: jmp *badrtn
140:
141:
142: /* Now try another mask(0x00), source(0x00) & dest(0x00) */
143:
144: o3:
145: bbs $0,_force_lp,0b /* if set loop on last subtest */
146: ao3: callf $4,_setjmp /* save context for error return */
147: movab ao3,_stpc /* save starting address of subtest */
148: movl $3,_subtst /* subtest number */
149: movl $2,_no_opr /* number of operands in use */
150: movl $MASK3B3,_opr /* first operand */
151: movl $SOURCE3B3,_opr + 4 /* second operand */
152: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
153: movl $MASK3B3,r3 /*mask */
154: movl $INIT3B3,r5 /*destination */
155: bispsw $(N|V) /*overflow & negetive bits ON */
156: orb3 r3,$SOURCE3B3,r5/* try again reg data reg */
157: jneq error3 /*error if Z = 0 */
158: jlss error3 /*error if N = 1 */
159: jcc error3 /*error if C = 0 */
160: jvs error3 /*error if V = 1 */
161: jmp 1f
162: error3: movpsl _actual /* actual = psl MAYBE is incorrect */
163: bbs $0,_scoplp,0b /* if set scope loop on error */
164: movl $2,_ercode /* error code flag failure */
165: jmp *badrtn
166: 1: cmpl r5,$EXP3B3 /*if dest <> expected value, */
167: jeql o4
168: bbs $0,_scoplp,0b /* if set scope loop on error */
169: movl $1,_ercode /* error code data miscompare */
170: movl r5,_actual /* actual data */
171: movl $EXP3B3,_expected /* expected data */
172: jmp *badrtn
173:
174: o4:
175: bbs $0,_force_lp,0b /* if set loop on last subtest */
176: ao4: callf $4,_setjmp /* save context for error return */
177: movab ao4,_stpc /* save starting address of subtest */
178: movl $4,_subtst /* subtest number */
179: movl $2,_no_opr /* number of operands in use */
180: movl $MASK2B3,_opr /* first operand */
181: movl $SOURCE2B3,_opr + 4 /* second operand */
182: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
183: movl $SOURCE2B3,r4 /*source */
184: movl $INIT1B3,r5 /*destination */
185: bispsw $(Z|V) /*overflow & zero bits ON */
186: orb3 $MASK2B3,r4,r5 /* try again data reg reg */
187: jeql error4 /*error if Z = 1 */
188: jlss error4 /*error if N = 1 */
189: jcc error4 /*error if C = 0 */
190: jvs error4 /*error if V = 1 */
191: jmp 1f
192: error4: movpsl _actual /* actual = psl MAYBE is incorrect */
193: bbs $0,_scoplp,0b /* if set scope loop on error */
194: movl $2,_ercode /* error code flag failure */
195: jmp *badrtn
196: 1: cmpl r5,$0xff /*if dest <> expected value, */
197: jeql orb3mmm
198: bbs $0,_scoplp,0b /* if set scope loop on error */
199: movl $1,_ercode /* error code data miscompare */
200: movl r5,_actual /* actual data */
201: movl $0xff,_expected /* expected data */
202: jmp *badrtn
203:
204:
205: /* now try source = M, mask = M, destination = M */
206: orb3mmm:
207: bbs $0,_force_lp,0b /* if set loop on last subtest */
208: ao5: callf $4,_setjmp /* save context for error return */
209: movab ao5,_stpc /* save starting address of subtest */
210: movl $5,_subtst /* subtest number */
211: movl $2,_no_opr /* number of operands in use */
212: movl $MASK1B3,_opr /* first operand */
213: movl $SOURCE1B3,_opr + 4 /* second operand */
214: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
215: movl $MASK1B3,mask /*mask */
216: movl $SOURCE1B3,source/*source */
217: movl $INIT1B3,dest /*destination */
218: bispsw $(Z|V|C) /*overflow, Z & carry bits ON */
219: orb3 mask+3,source+3,dest+3/*try it mem mem mem */
220: jeql error5 /*error if Z = 1 */
221: jgeq error5 /*error if N = 0 */
222: jcc error5 /*error if C = 0 */
223: jvs error5 /*error if V = 1 */
224: jmp 1f
225: error5: movpsl _actual /* actual = psl MAYBE is incorrect */
226: bbs $0,_scoplp,0b /* if set scope loop on error */
227: movl $2,_ercode /* error code flag failure */
228: jmp *badrtn
229: 1: cmpl dest,$EXP1B3 /*if dest <> expected value, */
230: jeql o6
231: bbs $0,_scoplp,0b /* if set scope loop on error */
232: movl $1,_ercode /* error code data miscompare */
233: movl dest,_actual /* actual data */
234: movl $EXP1B3,_expected /* expected data */
235: jmp *badrtn
236:
237: /* Now try another mask(0x55) */
238: /* */
239:
240: o6:
241: bbs $0,_force_lp,0b /* if set loop on last subtest */
242: ao6: callf $4,_setjmp /* save context for error return */
243: movab ao6,_stpc /* save starting address of subtest */
244: movl $6,_subtst /* subtest number */
245: movl $2,_no_opr /* number of operands in use */
246: movl $MASK2B3,_opr /* first operand */
247: movl $SOURCE2B3,_opr + 4 /* second operand */
248: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
249: movl $MASK2B3,mask /*mask */
250: movl $SOURCE2B3,source/*source */
251: movl $INIT1B3,r5 /*destination */
252: bispsw $(Z|V) /*overflow & zero bits ON */
253: orb3 mask+3,source+3,r5/* try again mem mem reg */
254: jeql error6 /*error if Z = 1 */
255: jgeq error6 /*error if N = 0 */
256: jcc error6 /*error if C = 0 */
257: jvs error6 /*error if V = 1 */
258: jmp 1f
259: error6: movpsl _actual /* actual = psl MAYBE is incorrect */
260: bbs $0,_scoplp,0b /* if set scope loop on error */
261: movl $2,_ercode /* error code flag failure */
262: jmp *badrtn
263: 1: movl $0x0ffffffff,r6
264: cmpl r5,r6 /*if dest <> expected value, */
265: jeql o7
266: bbs $0,_scoplp,0b /* if set scope loop on error */
267: movl $1,_ercode /* error code data miscompare */
268: movl r5,_actual /* actual data */
269: movl r6,_expected /* expected data */
270: jmp *badrtn
271: /* */
272: /* Now try another mask(0x00), source(0x00), & dest(0x00) */
273: /* */
274: o7:
275: bbs $0,_force_lp,0b /* if set loop on last subtest */
276: ao7: callf $4,_setjmp /* save context for error return */
277: movab ao7,_stpc /* save starting address of subtest */
278: movl $7,_subtst /* subtest number */
279: movl $2,_no_opr /* number of operands in use */
280: movl $MASK3B3,_opr /* first operand */
281: movl $SOURCE3B3,_opr + 4 /* second operand */
282: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
283: movl $SOURCE3B3,r4 /*source */
284: movl $INIT3B3,dest /*destination */
285: bispsw $(N|V) /*overflow & negetive bits ON */
286: orb3 $MASK3B3,r4,dest+3/* try again data reg mem */
287: jneq error7 /*error if Z = 0 */
288: jlss error7 /*error if N = 1 */
289: jcc error7 /*error if C = 0 */
290: jvs error7 /*error if V = 1 */
291: jmp 1f
292: error7: movpsl _actual /* actual = psl MAYBE is incorrect */
293: bbs $0,_scoplp,0b /* if set scope loop on error */
294: movl $2,_ercode /* error code flag failure */
295: jmp *badrtn
296: 1: movl $0x7fffff00,r6
297: cmpl dest,r6 /*if dest <> expected value, */
298: jeql orb3mrm
299: bbs $0,_scoplp,0b /* if set scope loop on error */
300: movl $1,_ercode /* error code data miscompare */
301: movl dest,_actual /* actual data */
302: movl r6,_expected /* expected data */
303: jmp *badrtn
304: /* */
305: /* Now use mask = R, source & destination = M */
306: /* */
307: orb3mrm:
308: bbs $0,_force_lp,0b /* if set loop on last subtest */
309: ao8: callf $4,_setjmp /* save context for error return */
310: movab ao8,_stpc /* save starting address of subtest */
311: movl $8,_subtst /* subtest number */
312: movl $2,_no_opr /* number of operands in use */
313: movl $MASK1B3,_opr /* first operand */
314: movl $SOURCE1B3,_opr + 4 /* second operand */
315: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
316: movl $MASK1B3,r3 /*mask */
317: movl $SOURCE1B3,source/*source */
318: movl $INIT1B3,dest /*destination */
319: bispsw $(Z|V|C) /*overflow, Z & carry bits ON */
320: orb3 r3,source+3,dest+3/*try it reg mem mem */
321: jeql error8 /*error if Z = 1 */
322: jgeq error8 /*error if N = 0 */
323: jcc error8 /*error if C = 0 */
324: jvs error8 /*error if V = 1 */
325: jmp 1f
326: error8: movpsl _actual /* actual = psl MAYBE is incorrect */
327: bbs $0,_scoplp,0b /* if set scope loop on error */
328: movl $2,_ercode /* error code flag failure */
329: jmp *badrtn
330: 1: cmpl dest,$EXP1B3 /*if dest <> expected value, */
331: jeql o9
332: bbs $0,_scoplp,0b /* if set scope loop on error */
333: movl $1,_ercode /* error code data miscompare */
334: movl dest,_actual /* actual data */
335: movl $EXP1B3,_expected /* expected data */
336: jmp *badrtn
337: /* */
338: /* Now try another mask(0x55) */
339: /* */
340: o9:
341: bbs $0,_force_lp,0b /* if set loop on last subtest */
342: ao9: callf $4,_setjmp /* save context for error return */
343: movab ao9,_stpc /* save starting address of subtest */
344: movl $9,_subtst /* subtest number */
345: movl $2,_no_opr /* number of operands in use */
346: movl $MASK2B3,_opr /* first operand */
347: movl $SOURCE2B3,_opr + 4 /* second operand */
348: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
349: movl $MASK2B3,mask /*mask */
350: movl $SOURCE2B3,r4 /*source */
351: movl $INIT1B3,dest /*destination */
352: bispsw $(Z|V) /*overflow & zero bits ON */
353: orb3 mask+3,r4,dest+3/* try again mem reg mem */
354: jeql error9 /*error if Z = 1 */
355: jlss error9 /*error if N = 0 */
356: jcc error9 /*error if C = 0 */
357: jvs error9 /*error if V = 1 */
358: jmp 1f
359: error9: movpsl _actual /* actual = psl MAYBE is incorrect */
360: bbs $0,_scoplp,0b /* if set scope loop on error */
361: movl $2,_ercode /* error code flag failure */
362: jmp *badrtn
363: 1: cmpl dest,$EXP2B3 /*if dest <> expected value, */
364: jeql o10
365: bbs $0,_scoplp,0b /* if set scope loop on error */
366: movl $1,_ercode /* error code data miscompare */
367: movl dest,_actual /* actual data */
368: movl $EXP2B3,_expected /* expected data */
369: jmp *badrtn
370: /* */
371: /* Now try another mask(0x00), source(0x00), & dest(0x00) */
372: /* */
373: o10:
374: bbs $0,_force_lp,0b /* if set loop on last subtest */
375: ao10: callf $4,_setjmp /* save context for error return */
376: movab ao10,_stpc /* save starting address of subtest */
377: movl $0xa,_subtst /* subtest number */
378: movl $2,_no_opr /* number of operands in use */
379: movl $MASK3B3,_opr /* first operand */
380: movl $SOURCE3B3,_opr + 4 /* second operand */
381: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
382: movl $MASK3B3,mask /*mask */
383: movl $INIT3B3,dest /*destination */
384: bispsw $(N|V) /*overflow & negetive bits ON */
385: orb3 mask,$SOURCE3B3,dest+3 /* try again */
386: jneq error10 /*error if Z = 0 */
387: jlss error10 /*error if N = 1 */
388: jcc error10 /*error if C = 0 */
389: jvs error10 /*error if V = 1 */
390: jmp 1f
391: error10: movpsl _actual /* actual = psl MAYBE is incorrect */
392: bbs $0,_scoplp,0b /* if set scope loop on error */
393: movl $2,_ercode /* error code flag failure */
394: jmp *badrtn
395: 1: movl $0x7fffff00,r6
396: cmpl dest,r6 /*if dest <> expected value, */
397: jeql orb3rmm
398: bbs $0,_scoplp,0b /* if set scope loop on error */
399: movl $1,_ercode /* error code data miscompare */
400: movl dest,_actual /* actual data */
401: movl r6,_expected /* expected data */
402: jmp *badrtn
403:
404: /* */
405: /* Now try mask = M, source = R, dest = M */
406: /* */
407: orb3rmm:
408: bbs $0,_force_lp,0b /* if set loop on last subtest */
409: ao11: callf $4,_setjmp /* save context for error return */
410: movab ao11,_stpc /* save starting address of subtest */
411: movl $0xb,_subtst /* subtest number */
412: movl $2,_no_opr /* number of operands in use */
413: movl $-0x56,_opr /* first operand */
414: movl $-0x56,_opr + 4 /* second operand */
415: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
416: movl $INIT1B3,dest /*destination */
417: bispsw $(Z|V|C) /*overflow, Z & carry bits ON */
418: orb3 $-0x56,$-0x56,dest+3 /*try it data data mem */
419: jeql error11 /*error if Z = 1 */
420: jgeq error11 /*error if N = 0 */
421: jcc error11 /*error if C = 0 */
422: jvs error11 /*error if V = 1 */
423: jmp 1f
424: error11: movpsl _actual /* actual = psl MAYBE is incorrect */
425: bbs $0,_scoplp,0b /* if set scope loop on error */
426: movl $2,_ercode /* error code flag failure */
427: jmp *badrtn
428: 1: cmpl dest,$EXP1B3 /*if dest <> expected value, */
429: jeql o12
430: bbs $0,_scoplp,0b /* if set scope loop on error */
431: movl $1,_ercode /* error code data miscompare */
432: movl dest,_actual /* actual data */
433: movl $EXP1B3,_expected /* expected data */
434: jmp *badrtn
435:
436: /* Now try another mask(0x55) */
437: /* */
438:
439: o12:
440: bbs $0,_force_lp,0b /* if set loop on last subtest */
441: ao12: callf $4,_setjmp /* save context for error return */
442: movab ao12,_stpc /* save starting address of subtest */
443: movl $0xb,_subtst /* subtest number */
444: movl $2,_no_opr /* number of operands in use */
445: movl $-0x56,_opr /* first operand */
446: movl $-0x56,_opr + 4 /* second operand */
447: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
448: movl $MASK2B3,mask /*mask */
449: movl $SOURCE2B3,r4 /*source */
450: movl $INIT1B3,dest /*destination */
451: bispsw $(Z|V) /*overflow & zero bits ON */
452: orb3 mask+3,r4,dest+3 /* try again */
453: jeql error12 /*error if Z = 1 */
454: jlss error12 /*error if N = 1 */
455: jcc error12 /*error if C = 0 */
456: jvs error12 /*error if V = 1 */
457: jmp 1f
458: error12: movpsl _actual /* actual = psl MAYBE is incorrect */
459: bbs $0,_scoplp,0b /* if set scope loop on error */
460: movl $2,_ercode /* error code flag failure */
461: jmp *badrtn
462: 1: cmpl dest,$EXP2B3 /*if dest <> expected value, */
463: jeql o13
464: bbs $0,_scoplp,0b /* if set scope loop on error */
465: movl $1,_ercode /* error code data miscompare */
466: movl dest,_actual /* actual data */
467: movl $EXP2B3,_expected /* expected data */
468: jmp *badrtn
469: /* */
470: /* Now try another mask(0x00), mask(0x00), dest(0x00) */
471: /* */
472: o13:
473: bbs $0,_force_lp,0b /* if set loop on last subtest */
474: ao13: callf $4,_setjmp /* save context for error return */
475: movab ao13,_stpc /* save starting address of subtest */
476: movl $0xd,_subtst /* subtest number */
477: movl $2,_no_opr /* number of operands in use */
478: movl $MASK3B3,_opr /* first operand */
479: movl $SOURCE3B3,_opr + 4 /* second operand */
480: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
481: movl $MASK3B3,mask /*mask */
482: movl $SOURCE3B3,r4 /*source */
483: movl $INIT3B3,dest /*destination */
484: bispsw $(N|V) /*overflow & negetive bits ON */
485: orb3 mask+3,r4,dest+3 /* try again */
486: jneq error13 /*error if Z = 0 */
487: jlss error13 /*error if N = 1 */
488: jcc error13 /*error if C = 0 */
489: jvs error13 /*error if V = 1 */
490: jmp 1f
491: error13: movpsl _actual /* actual = psl MAYBE is incorrect */
492: bbs $0,_scoplp,0b /* if set scope loop on error */
493: movl $2,_ercode /* error code flag failure */
494: jmp *badrtn
495: 1: movl $0x7fffff00,r6
496: cmpl dest,r6 /*if dest <> expected value, */
497: jeql orb3mrr
498: bbs $0,_scoplp,0b /* if set scope loop on error */
499: movl $1,_ercode /* error code data miscompare */
500: movl dest,_actual /* actual data */
501: movl r6,_expected /* expected data */
502: jmp *badrtn
503: /* */
504: /* Now try mask = R, source = M, dest = R */
505: /* */
506: orb3mrr:
507: bbs $0,_force_lp,0b /* if set loop on last subtest */
508: ao14: callf $4,_setjmp /* save context for error return */
509: movab ao14,_stpc /* save starting address of subtest */
510: movl $0xe,_subtst /* subtest number */
511: movl $2,_no_opr /* number of operands in use */
512: movl $MASK1B3,_opr /* first operand */
513: movl $SOURCE1B3,_opr + 4 /* second operand */
514: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
515: movl $MASK1B3,r3 /*mask */
516: movl $SOURCE1B3,source/*source */
517: movl $INIT1B3,r5 /*destination */
518: bispsw $(Z|V|C) /*overflow, Z & carry bits ON */
519: orb3 r3,source+3,r5 /*try it */
520: jeql error14 /*error if Z = 1 */
521: jgeq error14 /*error if N = 0 */
522: jcc error14 /*error if C = 0 */
523: jvs error14 /*error if V = 1 */
524: jmp 1f
525: error14: movpsl _actual /* actual = psl MAYBE is incorrect */
526: bbs $0,_scoplp,0b /* if set scope loop on error */
527: movl $2,_ercode /* error code flag failure */
528: jmp *badrtn
529: 1: cmpl r5,$0xffffffaa /*if dest <> expected value, */
530: jeql o15
531: bbs $0,_scoplp,0b /* if set scope loop on error */
532: movl $1,_ercode /* error code data miscompare */
533: movl r5,_actual /* actual data */
534: movl $0xffffffaa,_expected /* expected data */
535: jmp *badrtn
536:
537: /* Now try another mask(0x55) */
538: /* */
539:
540: o15:
541: bbs $0,_force_lp,0b /* if set loop on last subtest */
542: ao15: callf $4,_setjmp /* save context for error return */
543: movab ao15,_stpc /* save starting address of subtest */
544: movl $0xf,_subtst /* subtest number */
545: movl $2,_no_opr /* number of operands in use */
546: movl $MASK2B3,_opr /* first operand */
547: movl $SOURCE2B3,_opr + 4 /* second operand */
548: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
549: movl $MASK2B3,r3 /*mask */
550: movl $SOURCE2B3,source/*source */
551: movl $INIT1B3,r5 /*destination */
552: bispsw $(Z|V) /*overflow & zero bits ON */
553: orb3 r3,source+3,r5 /* try again */
554: jeql error15 /*error if Z = 1 */
555: jgeq error15 /*error if N = 1 */
556: jcc error15 /*error if C = 0 */
557: jvs error15 /*error if V = 1 */
558: jmp 1f
559: error15: movpsl _actual /* actual = psl MAYBE is incorrect */
560: bbs $0,_scoplp,0b /* if set scope loop on error */
561: movl $2,_ercode /* error code flag failure */
562: jmp *badrtn
563: 1: movl $-1,r6
564: cmpl r5,r6 /*if dest <> expected value, */
565: jeql o16
566: bbs $0,_scoplp,0b /* if set scope loop on error */
567: movl $1,_ercode /* error code data miscompare */
568: movl r5,_actual /* actual data */
569: movl r6,_expected /* expected data */
570: jmp *badrtn
571: /* */
572: /* Now try another mask(0x00), mask(0x00), & dest(0x00) */
573: /* */
574: o16:
575: bbs $0,_force_lp,0b /* if set loop on last subtest */
576: ao16: callf $4,_setjmp /* save context for error return */
577: movab ao16,_stpc /* save starting address of subtest */
578: movl $0x10,_subtst /* subtest number */
579: movl $2,_no_opr /* number of operands in use */
580: movl $MASK3B3,_opr /* first operand */
581: movl $SOURCE3B3,_opr + 4 /* second operand */
582: 0: bicpsw $PSWMASK /*turn overflow enable bit off */
583: movl $MASK3B3,r3 /*mask */
584: movl $SOURCE3B3,source/*source */
585: movl $INIT3B3,r5 /*destination */
586: bispsw $(N|V) /*overflow & negetive bits ON */
587: orb3 r3,source+3,r5 /* try again */
588: jneq error16 /*error if Z = 0 */
589: jlss error16 /*error if N = 1 */
590: jcc error16 /*error if C = 0 */
591: jvs error16 /*error if V = 1 */
592: jmp 1f
593: error16: movpsl _actual /* actual = psl MAYBE is incorrect */
594: bbs $0,_scoplp,0b /* if set scope loop on error */
595: movl $2,_ercode /* error code flag failure */
596: jmp *badrtn
597: 1: cmpl r5,$EXP3B3 /*if dest <> expected value, */
598: jeql aldn
599: bbs $0,_scoplp,0b /* if set scope loop on error */
600: movl $1,_ercode /* error code data miscompare */
601: movl r5,_actual /* actual data */
602: movl $EXP3B3,_expected /* expected data */
603: jmp *badrtn
604:
605: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */
606: jmp *return
607:
608: /* */
609: /* Variables */
610: /* */
611: .align 2
612: mask: .space 4
613: source: .space 4
614: dest: .space 4
615:
616: /* */
617: /* End of file */
618:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.