|
|
1.1 root 1:
2:
3:
4: /* SUBW3 (subtract word3) test */
5: /* */
6: /*Test name = subw3 */
7: /*Description = */
8: /* This test checks 'subw3' instruction as follows: */
9: /*sub min dif N Z V C (flags) */
10: /*___ ___ ______ _______________ */
11: /*0x7f 0x7f 0x00 0 1 0 1 */
12: /*0xff 0x01 0x02 0 0 0 0 */
13: /*0x01 0xff 0xfe 1 0 0 1 */
14: /*0x81 0x7f 0xfe 1 0 1 0 */
15: /*0x81 0x80 0xff 1 0 0 0 */
16: /*0x7f 0x81 0x02 0 0 1 1 */
17: /* */
18: /* */
19:
20: /* */
21: /* */
22: /* constants definition for 'subx' tests. */
23: /* */
24:
25: .set SB1,0x11111f7f/*+127, highest +ve number, byte */
26: .set SW1,0x111f7fff
27: .set SL1,0x7fffffff
28: .set MB1,0x11111f7f/* +127 */
29: .set MW1,0x111f7fff
30: .set ML1,SL1
31: .set RB1,0x11111f00
32: .set RW1,0x111f0000
33: .set RL1,0x00000000
34: .set SB2,0xff /* -1 */
35: .set SW2,0xffff
36: .set SL2,0xffffffff
37: .set MB2,0x01 /* +1 */
38: .set MW2,0x0001
39: .set ML2,0X00000001
40: .set RB2,0x00000002 /* +2 */
41: .set RW2,RB2
42: .set RL2,RB2
43: .set SB3,MB2 /* +1 */
44: .set SW3,MW2
45: .set SL3,ML2
46: .set MB3,0xff /* -1 */
47: .set MW3,0xffff
48: .set ML3,0xffffffff
49: .set RB3,0x000000fe /* -2 */
50: .set RW3,0x0000fffe
51: .set RL3,0Xfffffffe
52: .set SB4,0x81 /* -127 */
53: .set SW4,0x8001
54: .set SL4,0x80000001
55: .set MB4,0x7f /* 127 */
56: .set MW4,0x7fff
57: .set ML4,0x7fffffff
58: .set RB4,0xfe /* -2 */
59: .set RW4,0xfffe
60: .set RL4,0xfffffffe
61: .set SB5,SB4 /* -127 */
62: .set SW5,SW4
63: .set SL5,SL4
64: .set MB5,0x80 /* -128 */
65: .set MW5,0x8000
66: .set ML5,0x80000000
67: .set RB5,0xff /* -1 */
68: .set RW5,0xffff
69: .set RL5,0xffffffff
70: .set SB6,0x7f/* +127 */
71: .set SW6,0x7fff
72: .set SL6,0x7fffffff
73: .set MB6,SB4 /* -127 */
74: .set MW6,SW4
75: .set ML6,SL4
76: .set RB6,0x02
77: .set RW6,0x02
78: .set RL6,0x02
79:
80: .set INITB,0x11111f55/* initialization values for 3 operand */
81: .set INITW,0x111f5555
82: .set INITL,0X55555555
83:
84: /* */
85: /* Syst.s - Constants */
86: /* */
87: .set IPL,8
88: .set HIGH,31
89: .set ZERO,0
90: .set ONES,0xffffffff
91: .set N,8
92: .set Z,4
93: .set V,2
94: .set C,1
95: .set T,16
96: .set IV,32
97: .set FU,64
98: .set DV,128
99: .set PSWMASK,0x003f
100:
101: .globl _subw3
102: _subw3:
103: callf $4,_setjmp /* save context for return from error */
104: movab _subw3,_stpc /* save subtest starting address */
105: movl $1,_subtst /* subtest number */
106: movl $2,_no_opr /* number of operands in use */
107: movl $SW1,_opr /* first operand */
108: movl $MW1,_opr + 4 /* second operand */
109: 0: bicpsw $PSWMASK /*PSW = 0 */
110: movl $SW1,sub /*first operand */
111: movl $MW1,min /*second operand */
112: movl $INITW,dif /*initialize destination */
113: bicpsw $PSWMASK /*PSW = 0 */
114: bispsw $(N|V|C) /* these flags ON */
115: subw3 sub+2,min+2,dif+2/* try 'sub' instruction mem mem mem */
116: jlss e1 /*error if N = 1 */
117: jneq e1 /*error if Z = 0 */
118: jvs e1 /*error if V = 1 */
119: jcc e1 /*error if C = 0 */
120: jmp 1f
121: e1: movpsl _actual /* actual = psl maybe incorrect */
122: bbs $0,_scoplp,0b /* if set scope loop on error */
123: movl $2,_ercode /* error code flag failure */
124: jmp *badrtn
125: 1: bicpsw $Z
126: cmpl $RW1,dif /*dif = expected ? */
127: jeql sw2 /* if no error continue */
128: bbs $0,_scoplp,0b /* if set scope loop on error */
129: movl $1,_ercode /* error code data miscompare */
130: movl dif,_actual /* actual data */
131: movl $RW1,_expected /* expected data */
132: jmp *badrtn
133:
134: sw2:
135: bbs $0,_force_lp,0b /* if set loop on last subtest */
136: as2: callf $4,_setjmp /* save context for return from error */
137: movab as2,_stpc /* save subtest starting address */
138: movl $2,_subtst /* subtest number */
139: movl $2,_no_opr /* number of operands in use */
140: movl $SW2,_opr /* first operand */
141: movl $MW2,_opr + 4 /* second operand */
142: 0: bicpsw $PSWMASK /*PSW = 0 */
143: movl $SW2,sub /*first operand */
144: movl $MW2,r7 /*second operand */
145: movl $0,dif /*initialize destination */
146: bicpsw $PSWMASK /*PSW = 0 */
147: bispsw $(N|Z|V) /* these flags ON */
148: subw3 sub+2,r7,dif+2/* try 'sub' instruction mem reg mem */
149: jlss e2 /*error if N = 1 */
150: jeql e2 /*error if Z = 1 */
151: jvs e2 /*error if V = 1 */
152: jcs e2 /*error if C = 1 */
153: jmp 1f
154: e2: movpsl _actual /* actual = psl maybe incorrect */
155: bbs $0,_scoplp,0b /* if set scope loop on error */
156: movl $2,_ercode /* error code flag failure */
157: jmp *badrtn
158: 1: bicpsw $Z
159: cmpl $RW2,dif /*dif = expected ? */
160: jeql sw3 /* if no error continue */
161: bbs $0,_scoplp,0b /* if set scope loop on error */
162: movl $1,_ercode /* error code data miscompare */
163: movl dif,_actual /* actual data */
164: movl $RW2,_expected /* expected data */
165: jmp *badrtn
166:
167: sw3:
168: bbs $0,_force_lp,0b /* if set loop on last subtest */
169: as3: callf $4,_setjmp /* save context for return from error */
170: movab as3,_stpc /* save subtest starting address */
171: movl $3,_subtst /* subtest number */
172: movl $2,_no_opr /* number of operands in use */
173: movl $SW3,_opr /* first operand */
174: movl $MW3,_opr + 4 /* second operand */
175: 0: bicpsw $PSWMASK /*PSW = 0 */
176: movl $SW3,r6 /*first operand */
177: movl $MW3,min /*second operand */
178: movl $0,dif /*initialize destination */
179: bicpsw $PSWMASK /*PSW = 0 */
180: bispsw $(V|Z|C) /* these flags ON */
181: subw3 r6,min+2,dif+2 /* try 'sub' instruction reg mem mem */
182: jgeq e3 /*error if N = 0 */
183: jeql e3 /*error if Z = 1 */
184: jvs e3 /*error if V = 1 */
185: jcc e3 /*error if C = 0 */
186: jmp 1f
187: e3: movpsl _actual /* actual = psl maybe incorrect */
188: bbs $0,_scoplp,0b /* if set scope loop on error */
189: movl $2,_ercode /* error code flag failure */
190: jmp *badrtn
191: 1: bicpsw $Z
192: cmpl $RW3,dif /*dif = expected ? */
193: jeql sw4 /* if no error continue */
194: bbs $0,_scoplp,0b /* if set scope loop on error */
195: movl $1,_ercode /* error code data miscompare */
196: movl dif,_actual /* actual data */
197: movl $RW3,_expected /* expected data */
198: jmp *badrtn
199:
200: sw4:
201: bbs $0,_force_lp,0b /* if set loop on last subtest */
202: as4: callf $4,_setjmp /* save context for return from error */
203: movab as4,_stpc /* save subtest starting address */
204: movl $4,_subtst /* subtest number */
205: movl $2,_no_opr /* number of operands in use */
206: movl $SW4,_opr /* first operand */
207: movl $MW4,_opr + 4 /* second operand */
208: 0: bicpsw $PSWMASK /*PSW = 0 */
209: movl $SW4,r6 /*first operand */
210: movl $MW4,r7 /*second operand */
211: movl $0,dif /*initialize destination */
212: bicpsw $PSWMASK /*PSW = 0 */
213: bispsw $Z /* these flags ON */
214: subw3 r6,r7,dif+2 /* try 'sub' instruction reg reg mem */
215: jgeq e4 /*error if N = 0 */
216: jeql e4 /*error if Z = 1 */
217: jvc e4 /*error if V = 0 */
218: jcs e4 /*error if C = 1 */
219: jmp 1f
220: e4: movpsl _actual /* actual = psl maybe incorrect */
221: bbs $0,_scoplp,0b /* if set scope loop on error */
222: movl $2,_ercode /* error code flag failure */
223: jmp *badrtn
224: 1: bicpsw $Z
225: cmpl $RW4,dif /*dif = expected ? */
226: jeql sw5 /* if no error continue */
227: bbs $0,_scoplp,0b /* if set scope loop on error */
228: movl $1,_ercode /* error code data miscompare */
229: movl dif,_actual /* actual data */
230: movl $RW4,_expected /* expected data */
231: jmp *badrtn
232:
233: sw5:
234: bbs $0,_force_lp,0b /* if set loop on last subtest */
235: as5: callf $4,_setjmp /* save context for return from error */
236: movab as5,_stpc /* save subtest starting address */
237: movl $5,_subtst /* subtest number */
238: movl $2,_no_opr /* number of operands in use */
239: movl $SW5,_opr /* first operand */
240: movl $MW5,_opr + 4 /* second operand */
241: 0: bicpsw $PSWMASK /*PSW = 0 */
242: movl $SW5,r6 /*first operand */
243: movl $0,dif /*initialize destination */
244: bicpsw $PSWMASK /*PSW = 0 */
245: bispsw $(V|Z) /* these flags ON */
246: subw3 r6,$MW5,dif+2 /* try 'sub' instruction reg data mem */
247: jgeq e5 /*error if N = 0 */
248: jeql e5 /*error if Z = 1 */
249: jvs e5 /*error if V = 1 */
250: jcs e5 /*error if C = 1 */
251: jmp 1f
252: e5: movpsl _actual /* actual = psl maybe incorrect */
253: bbs $0,_scoplp,0b /* if set scope loop on error */
254: movl $2,_ercode /* error code flag failure */
255: jmp *badrtn
256: 1: bicpsw $Z
257: cmpl $RW5,dif /*dif = expected ? */
258: jeql sw6 /* if no error continue */
259: bbs $0,_scoplp,0b /* if set scope loop on error */
260: movl $1,_ercode /* error code data miscompare */
261: movl dif,_actual /* actual data */
262: movl $RW5,_expected /* expected data */
263: jmp *badrtn
264:
265: sw6:
266: bbs $0,_force_lp,0b /* if set loop on last subtest */
267: as6: callf $4,_setjmp /* save context for return from error */
268: movab as6,_stpc /* save subtest starting address */
269: movl $6,_subtst /* subtest number */
270: movl $2,_no_opr /* number of operands in use */
271: movl $SW6,_opr /* first operand */
272: movl $MW6,_opr + 4 /* second operand */
273: 0: bicpsw $PSWMASK /*PSW = 0 */
274: movl $SW6,sub /*first operand */
275: movl $MW6,r7 /*second operand */
276: movl $0,dif /*initialize destination */
277: bicpsw $PSWMASK /*PSW = 0 */
278: bispsw $(Z|C|N) /* these flags ON */
279: subw3 $SW6,r7,dif+2 /* try 'sub' instruction data reg mem */
280: jlss e6 /*error if N = 1 */
281: jeql e6 /*error if Z = 1 */
282: jvc e6 /*error if V = 0 */
283: jcc e6 /*error if C = 0 */
284: jmp 1f
285: e6: movpsl _actual /* actual = psl maybe incorrect */
286: bbs $0,_scoplp,0b /* if set scope loop on error */
287: movl $2,_ercode /* error code flag failure */
288: jmp *badrtn
289: 1: bicpsw $Z
290: cmpl $RW6,dif /*dif = expected ? */
291: jeql sw7 /* if no error continue */
292: bbs $0,_scoplp,0b /* if set scope loop on error */
293: movl $1,_ercode /* error code data miscompare */
294: movl dif,_actual /* actual data */
295: movl $RW6,_expected /* expected data */
296: jmp *badrtn
297:
298: sw7:
299: bbs $0,_force_lp,0b /* if set loop on last subtest */
300: as7: callf $4,_setjmp /* save context for return from error */
301: movab as7,_stpc /* save subtest starting address */
302: movl $7,_subtst /* subtest number */
303: movl $2,_no_opr /* number of operands in use */
304: movl $SW1,_opr /* first operand */
305: movl $MW1,_opr + 4 /* second operand */
306: 0: bicpsw $PSWMASK /*PSW = 0 */
307: movl $SW1,r6 /*first operand */
308: movl $MW1,r7 /*second operand */
309: movl $INITW,r8 /*initialize destination */
310: bicpsw $PSWMASK /*PSW = 0 */
311: bispsw $(N|V|C) /* these flags ON */
312: subw3 r6,r7,r8 /* try 'sub' instruction mem mem mem */
313: jlss e7 /*error if N = 1 */
314: jneq e7 /*error if Z = 0 */
315: jvs e7 /*error if V = 1 */
316: jcc e7 /*error if C = 0 */
317: jmp 1f
318: e7: movpsl _actual /* actual = psl maybe incorrect */
319: bbs $0,_scoplp,0b /* if set scope loop on error */
320: movl $2,_ercode /* error code flag failure */
321: jmp *badrtn
322: 1: bicpsw $Z
323: cmpl $0x00,r8 /*r8 = expected ? */
324: jeql sw8 /* if no error continue */
325: bbs $0,_scoplp,0b /* if set scope loop on error */
326: movl $1,_ercode /* error code data miscompare */
327: movl r8,_actual /* actual data */
328: movl $0,_expected /* expected data */
329: jmp *badrtn
330:
331: sw8:
332: bbs $0,_force_lp,0b /* if set loop on last subtest */
333: as8: callf $4,_setjmp /* save context for return from error */
334: movab as8,_stpc /* save subtest starting address */
335: movl $8,_subtst /* subtest number */
336: movl $2,_no_opr /* number of operands in use */
337: movl $SW1,_opr /* first operand */
338: movl $MW1,_opr + 4 /* second operand */
339: 0: bicpsw $PSWMASK /*PSW = 0 */
340: movl $SW1,r6 /*first operand */
341: movl $MW1,min /*second operand */
342: movl $INITW,r8 /*initialize destination */
343: bicpsw $PSWMASK /*PSW = 0 */
344: bispsw $(N|V|C) /* these flags ON */
345: subw3 r6,min+2,r8 /* try 'sub' instruction reg mem reg */
346: jgeq e8 /*error if N = 1 */
347: jeql e8 /*error if Z = 0 */
348: jvs e8 /*error if V = 1 */
349: jcs e8 /*error if C = 0 */
350: jmp 1f
351: e8: movpsl _actual /* actual = psl maybe incorrect */
352: bbs $0,_scoplp,0b /* if set scope loop on error */
353: movl $2,_ercode /* error code flag failure */
354: jmp *badrtn
355: 1: bicpsw $Z
356: cmpl $0xeee10000,r8 /*r8 = expected ? */
357: jeql sw9 /* if no error continue */
358: bbs $0,_scoplp,0b /* if set scope loop on error */
359: movl $1,_ercode /* error code data miscompare */
360: movl r8,_actual /* actual data */
361: movl $0xeee10000,_expected /* expected data */
362: jmp *badrtn
363:
364: sw9:
365: bbs $0,_force_lp,0b /* if set loop on last subtest */
366: as9: callf $4,_setjmp /* save context for return from error */
367: movab as9,_stpc /* save subtest starting address */
368: movl $9,_subtst /* subtest number */
369: movl $2,_no_opr /* number of operands in use */
370: movl $SW1,_opr /* first operand */
371: movl $MW1,_opr + 4 /* second operand */
372: 0: bicpsw $PSWMASK /*PSW = 0 */
373: movl $SW1,r6 /*first operand */
374: movl $INITW,r8 /*initialize destination */
375: bicpsw $PSWMASK /*PSW = 0 */
376: bispsw $(N|V|C) /* these flags ON */
377: subw3 r6,$MW1,r8 /* try 'sub' instruction reg data reg */
378: jlss e9 /*error if N = 1 */
379: jneq e9 /*error if Z = 0 */
380: jvs e9 /*error if V = 1 */
381: jcc e9 /*error if C = 0 */
382: jmp 1f
383: e9: movpsl _actual /* actual = psl maybe incorrect */
384: bbs $0,_scoplp,0b /* if set scope loop on error */
385: movl $2,_ercode /* error code flag failure */
386: jmp *badrtn
387: 1: bicpsw $Z
388: cmpl $0x00,r8 /*r8 = expected ? */
389: jeql sw10 /* if no error continue */
390: bbs $0,_scoplp,0b /* if set scope loop on error */
391: movl $1,_ercode /* error code data miscompare */
392: movl r8,_actual /* actual data */
393: movl $0,_expected /* expected data */
394: jmp *badrtn
395:
396: sw10:
397: bbs $0,_force_lp,0b /* if set loop on last subtest */
398: as10: callf $4,_setjmp /* save context for return from error */
399: movab as10,_stpc /* save subtest starting address */
400: movl $0xa,_subtst /* subtest number */
401: movl $2,_no_opr /* number of operands in use */
402: movl $SW1,_opr /* first operand */
403: movl $MW1,_opr + 4 /* second operand */
404: 0: bicpsw $PSWMASK /*PSW = 0 */
405: movl $SW1,sub /*first operand */
406: movl $MW1,r7 /*second operand */
407: movl $INITW,r8 /*initialize destination */
408: bicpsw $PSWMASK /*PSW = 0 */
409: bispsw $(N|V|C) /* these flags ON */
410: subw3 sub+2,r7,r8 /* try 'sub' instruction mem reg reg */
411: jlss e10 /*error if N = 1 */
412: jeql e10 /*error if Z = 0 */
413: jvs e10 /*error if V = 1 */
414: jcc e10 /*error if C = 0 */
415: jmp 1f
416: e10: movpsl _actual /* actual = psl maybe incorrect */
417: bbs $0,_scoplp,0b /* if set scope loop on error */
418: movl $2,_ercode /* error code flag failure */
419: jmp *badrtn
420: 1: bicpsw $Z
421: cmpl $RW1,r8 /*r8 = expected ? */
422: jeql sw11 /* if no error continue */
423: bbs $0,_scoplp,0b /* if set scope loop on error */
424: movl $1,_ercode /* error code data miscompare */
425: movl r8,_actual /* actual data */
426: movl $RW1,_expected /* expected data */
427: jmp *badrtn
428:
429:
430: sw11:
431: bbs $0,_force_lp,0b /* if set loop on last subtest */
432: as11: callf $4,_setjmp /* save context for return from error */
433: movab as11,_stpc /* save subtest starting address */
434: movl $0xb,_subtst /* subtest number */
435: movl $2,_no_opr /* number of operands in use */
436: movl $SW1,_opr /* first operand */
437: movl $MW1,_opr + 4 /* second operand */
438: 0: bicpsw $PSWMASK /*PSW = 0 */
439: movl $SW1,r6 /*first operand */
440: movl $MW1,r7 /*second operand */
441: movl $INITW,r8 /*initialize destination */
442: bicpsw $PSWMASK /*PSW = 0 */
443: bispsw $(N|V|C) /* these flags ON */
444: subw3 $SW1,r7,r8 /* try 'sub' instruction data reg reg */
445: jlss e11 /*error if N = 1 */
446: jneq e11 /*error if Z = 0 */
447: jvs e11 /*error if V = 1 */
448: jcc e11 /*error if C = 0 */
449: jmp 1f
450: e11: movpsl _actual /* actual = psl maybe incorrect */
451: bbs $0,_scoplp,0b /* if set scope loop on error */
452: movl $2,_ercode /* error code flag failure */
453: jmp *badrtn
454: 1: bicpsw $Z
455: cmpl $0x00,r8 /*r8 = expected ? */
456: jeql sw12 /* if no error continue */
457: bbs $0,_scoplp,0b /* if set scope loop on error */
458: movl $1,_ercode /* error code data miscompare */
459: movl r8,_actual /* actual data */
460: movl $0,_expected /* expected data */
461: jmp *badrtn
462:
463:
464: sw12:
465: bbs $0,_force_lp,0b /* if set loop on last subtest */
466: as12: callf $4,_setjmp /* save context for return from error */
467: movab as12,_stpc /* save subtest starting address */
468: movl $0xc,_subtst /* subtest number */
469: movl $2,_no_opr /* number of operands in use */
470: movl $SW1,_opr /* first operand */
471: movl $MW1,_opr + 4 /* second operand */
472: 0: bicpsw $PSWMASK /*PSW = 0 */
473: movl $INITW,r8 /*initialize destination */
474: bicpsw $PSWMASK /*PSW = 0 */
475: bispsw $(N|V|C) /* these flags ON */
476: subw3 $SW1,$MW1,r8 /* try 'sub' instruction data data reg */
477: jlss e12 /*error if N = 1 */
478: jneq e12 /*error if Z = 0 */
479: jvs e12 /*error if V = 1 */
480: jcc e12 /*error if C = 0 */
481: jmp 1f
482: e12: movpsl _actual /* actual = psl maybe incorrect */
483: bbs $0,_scoplp,0b /* if set scope loop on error */
484: movl $2,_ercode /* error code flag failure */
485: jmp *badrtn
486: 1: bicpsw $Z
487: cmpl $0x00,r8 /*r8 = expected ? */
488: jeql aldn /* if no error continue */
489: bbs $0,_scoplp,0b /* if set scope loop on error */
490: movl $1,_ercode /* error code data miscompare */
491: movl r8,_actual /* actual data */
492: movl $0,_expected /* expected data */
493: jmp *badrtn
494:
495: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */
496: jmp *return
497:
498:
499: /* */
500: /* Variables */
501: /* */
502: .align 2
503: min: .space 4
504: dif: .space 4
505: sub: .space 4
506:
507: /* End of file */
508:
509:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.