|
|
1.1 root 1: /* ADDB3 (add byte 3) test */
2: /* */
3: /*Test name = addb3 */
4: /*Description = */
5: /* This test checks 'addb3' instruction as follows: */
6: /*add1 add2 sum N Z V C (flags) */
7: /*___ ___ ______ _______________ */
8: /*0x1111107f 0x1111107f 0x111110fe 0 0 1 0 */
9: /*(127) (127) */
10: /*0x11111080 0x11111080 0x11111000 0 1 1 1 */
11: /*(-128) (-128) (0) */
12: /*0x80 0xff 0x7f 0 0 1 1 */
13: /*(-128) (-1) (127) */
14: /*0x81 0x7f 0x00 0 1 0 1 */
15: /*(-127) (127) (0) */
16: /*0x80 0x7f 0xff 1 0 0 0 */
17: /*(-128) (127) (-1) */
18: /*0xc0 0xc0 0x80 1 0 0 1 */
19: /*(-64) (-64) (-128) */
20: /* */
21: /* */
22: /* */
23: /* */
24: /* constants definition for 'addx' tests. */
25: /* */
26:
27: .set A1B1,0x1111107f/*+127, highest +ve number, byte */
28: .set A1W1,0x11107fff
29: .set A1L1,0x7fffffff
30: .set A2B1,0x1111107f/* +127 */
31: .set A2W1,0x11107fff
32: .set A2L1,A1L1
33: .set RB1,0x111110fe
34: .set RW1,0x1110fffe
35: .set RL1,0xfffffffe
36: .set A1B2,0x11111080/* -128 */
37: .set A1W2,0x11108000
38: .set A1L2,0x80000000
39: .set A2B2,0x11111080/* -128 */
40: .set A2W2,0x11118000
41: .set A2L2,0X80000000
42: .set RB2,0x11111000/* 0 */
43: .set RW2,0x11100000
44: .set RL2,0x00000000
45: .set A1B3,0X80 /* -128 */
46: .set A1W3,0x8000
47: .set A1L3,0x80000000
48: .set A2B3,0xff /* -1 */
49: .set A2W3,0xffff
50: .set A2L3,0xffffffff
51: .set RB3,0x0000007f
52: .set RW3,0X00007fff
53: .set RL3,0X7fffffff
54: .set A1B4,0x81 /* -127 */
55: .set A1W4,0x8001
56: .set A1L4,0x80000001
57: .set A2B4,0x7f /* 127 */
58: .set A2W4,0x7fff
59: .set A2L4,0x7fffffff
60: .set RB4,0 /* 0 */
61: .set RW4,RB4
62: .set RL4,RB4
63: .set A1B5,A1B3 /* -128 */
64: .set A1W5,A1W3
65: .set A1L5,A1L3
66: .set A2B5,A2B4 /* 127 */
67: .set A2W5,A2W4
68: .set A2L5,A2L4
69: .set RB5,0xff /* -1 */
70: .set RW5,0xffff
71: .set RL5,0xffffffff
72: .set A1B6,0xc0 /* -64 */
73: .set A1W6,0xc000
74: .set A1L6,0xc0000000
75: .set A2B6,A1B6 /* -64 */
76: .set A2W6,A1W6
77: .set A2L6,A1L6
78: .set RB6,0x00000080 /* -128 */
79: .set RW6,0x00008000
80: .set RL6,0X80000000
81:
82: .set INITB,0x11111055/* initialization values for 3 operand */
83: .set INITW,0x11105555
84: .set INITL,0X55555555
85:
86: /* */
87: /* Syst.s - Constants */
88: /* */
89: .set IPL,8
90: .set HIGH,31
91: .set ZERO,0
92: .set ONES,0xffffffff
93: .set N,8
94: .set Z,4
95: .set V,2
96: .set C,1
97: .set T,16
98: .set IV,32
99: .set FU,64
100: .set DV,128
101: .set PSWMASK,0x003f
102: .set BMSK,0xff
103:
104:
105: .globl _addb3
106: _addb3:
107: ab1:
108: callf $4,_setjmp /* save context for error return */
109: movab ab1,_stpc /* progranm counter of subtest */
110: movl $1,_subtst /*no error*/
111: movl $2,_no_opr /* number of operands in use */
112: movl $A1B1,_opr /* first operand */
113: movl $A2B1,_opr + 4 /* second operand */
114: 0:
115: bicpsw $PSWMASK /*PSW = 0 */
116: movl $A1B1,add1 /*first operand */
117: movl $A2B1,tmp2 /*second operand */
118: movb tmp2+3,r7 /*second operand */
119: movl $INITB,sum /*initial value */
120: bispsw $(N|Z|C) /* these flags ON */
121: addb3 add1+3,r7,sum+3 /* try 'add' instruction */
122: jlss e1 /*error if N = 1 */
123: jeql e1 /*error if Z = 1 */
124: jvc e1 /*error if V = 0 */
125: jcs e1 /*error if C = 1 */
126: bicpsw $Z
127: cmpl $RB1,sum /*sum = expected ? */
128: jeql ab1r /* if correct continue */
129: bbs $0,_scoplp,0b /* if set scope loop on error */
130: movl $1,_ercode /* error code data miscompare */
131: movl sum,_actual /* actual data */
132: movl $RB1,_expected /* expected data */
133: jmp *badrtn
134: e1: movpsl _actual /* actual = psl */
135: bbs $0,_scoplp,0b /* if set scope loop on error */
136: movl $2,_ercode /* error code flag failure */
137: jmp *badrtn
138:
139:
140: /* reverse operands */
141:
142: ab1r:
143: bbs $0,_force_lp,0b /* if set loop on last subtest */
144: aab1r: callf $4,_setjmp /* save context for error return */
145: movab aab1r,_stpc /* progranm counter of subtest */
146: movl $2,_subtst /*no error*/
147: movl $2,_no_opr /* number of operands in use */
148: movl $A2B1,_opr /* first operand */
149: movl $0x7f,_opr + 4 /* second operand */
150: 0: bicpsw $PSWMASK /*PSW = 0 */
151: movl $A2B1,add1 /*first operand */
152: movl $INITB,sum
153: bispsw $(N|Z|C) /* these flags ON */
154: addb3 add1+3,$0x7f,sum+3/* try 'add' instruction mem data mem */
155: jlss e2 /*error if N = 1 */
156: jeql e2 /*error if Z = 1 */
157: jvc e2 /*error if V = 0 */
158: jcs e2 /*error if C = 1 */
159: bicpsw $Z
160: movl $RB1,r5 /*expected result*/
161: cmpl $RB1,sum /*sum = expected ? */
162: jeql ab2 /* if correct continue */
163: bbs $0,_scoplp,0b /* if set scope loop on error */
164: movl $1,_ercode /* error code data miscompare */
165: movl sum,_actual /* actual data */
166: movl $RB1,_expected /* expected data */
167: jmp *badrtn
168: e2: movpsl _actual /* actual = psl */
169: bbs $0,_scoplp,0b /* if set scope loop on error */
170: movl $2,_ercode /* error code flag failure */
171: jmp *badrtn
172:
173: ab2:
174: bbs $0,_force_lp,0b /* if set loop on last subtest */
175: aab2: callf $4,_setjmp /* save context for error return */
176: movab aab2,_stpc /* progranm counter of subtest */
177: movl $3,_subtst /*no error*/
178: movl $2,_no_opr /* number of operands in use */
179: movl $-0x80,_opr /* first operand */
180: movl $-0x80,_opr + 4 /* second operand */
181: 0: bicpsw $PSWMASK /*PSW = 0 */
182: movl $INITB,sum
183: bispsw $N /* these flags ON */
184: addb3 $-0x80,$-0x80,sum+3/* try 'add' instruction data data mem */
185: jgeq e3 /*error if N = 1 */
186: jeql e3 /*error if Z = 0 */
187: jvc e3 /*error if V = 0 */
188: jcc e3 /*error if C = 0 */
189: bicpsw $Z
190: movl $RB2,r5 /*expected result*/
191: cmpl $RB2,sum /*sum = expected ? */
192: jeql ab2r /* if correct continue */
193: bbs $0,_scoplp,0b /* if set scope loop on error */
194: movl $1,_ercode /* error code data miscompare */
195: movl sum,_actual /* actual data */
196: movl $RB2,_expected /* expected data */
197: jmp *badrtn
198: e3: movpsl _actual /* actual = psl */
199: bbs $0,_scoplp,0b /* if set scope loop on error */
200: movl $2,_ercode /* error code flag failure */
201: jmp *badrtn
202:
203:
204: /* reverse operands */
205:
206: ab2r:
207: bbs $0,_force_lp,0b /* if set loop on last subtest */
208: aab2r: callf $4,_setjmp /* save context for error return */
209: movab aab2r,_stpc /* progranm counter of subtest */
210: movl $4,_subtst /*no error*/
211: movl $2,_no_opr /* number of operands in use */
212: movl $A2B2,_opr /* first operand */
213: movl $A1B2,_opr + 4 /* second operand */
214: 0: bicpsw $PSWMASK /*PSW = 0 */
215: movl $A2B2,add1 /*first operand */
216: movl $A1B2,add2 /*second operand */
217: movl $INITB,tmp3
218: movb tmp3+3,r8
219: bispsw $N /* these flags ON */
220: addb3 add1+3,add2+3,r8/* try 'add' instruction mem mem reg */
221: jgeq e4 /*error if N = 1 */
222: jeql e4 /*error if Z = 0 */
223: jvc e4 /*error if V = 0 */
224: jcc e4 /*error if C = 0 */
225: bicpsw $Z
226: movl $RB2,r5 /*expected result*/
227: andl2 $BMSK,r5
228: andl2 $BMSK,r8 /* mask off don't care bits */
229: cmpl r5,r8 /*sum = expected ? */
230: jeql ab3 /* if correct continue */
231: bbs $0,_scoplp,0b /* if set scope loop on error */
232: movl $1,_ercode /* error code data miscompare */
233: movl r5,_actual /* actual data */
234: movl r8,_expected /* expected data */
235: jmp *badrtn
236: e4: movpsl _actual /* actual = psl */
237: bbs $0,_scoplp,0b /* if set scope loop on error */
238: movl $2,_ercode /* error code flag failure */
239: jmp *badrtn
240:
241:
242:
243: ab3:
244: bbs $0,_force_lp,0b /* if set loop on last subtest */
245: aab3: callf $4,_setjmp /* save context for error return */
246: movab aab3,_stpc /* progranm counter of subtest */
247: movl $5,_subtst /*no error*/
248: movl $2,_no_opr /* number of operands in use */
249: movl $-0x80,_opr /* first operand */
250: movl $A2B3,_opr + 4 /* second operand */
251: 0: bicpsw $PSWMASK /*PSW = 0 */
252: movl $A2B3,tmp2
253: movb tmp2+3,r7
254: movl $0,sum
255: bispsw $(N|Z) /* these flags ON */
256: addb3 $-0x80,r7,sum+3 /* ' add ' inst, data reg mem */
257: jgeq e5 /*error if N = 1 */
258: jeql e5 /*error if Z = 1 */
259: jvc e5 /*error if V = 0 */
260: jcc e5 /*error if C = 0 */
261: bicpsw $Z
262: cmpl $RB3,sum /*sum = expected ? */
263: jeql ab3r /* if correct continue */
264: bbs $0,_scoplp,0b /* if set scope loop on error */
265: movl $1,_ercode /* error code data miscompare */
266: movl $RB3,_actual /* actual data */
267: movl sum,_expected /* expected data */
268: jmp *badrtn
269: e5: movpsl _actual /* actual = psl */
270: bbs $0,_scoplp,0b /* if set scope loop on error */
271: movl $2,_ercode /* error code flag failure */
272: jmp *badrtn
273:
274:
275: /* reverse operands */
276:
277: ab3r:
278: bbs $0,_force_lp,0b /* if set loop on last subtest */
279: aab3r: callf $4,_setjmp /* save context for error return */
280: movab aab3r,_stpc /* progranm counter of subtest */
281: movl $6,_subtst /*no error*/
282: movl $2,_no_opr /* number of operands in use */
283: movl $-0x80,_opr /* first operand */
284: movl $A2B3,_opr + 4 /* second operand */
285: 0: bicpsw $PSWMASK /*PSW = 0 */
286: movl $A1B3,tmp2 /*second operand */
287: movb tmp2+3,r7 /*second operand */
288: movl $0,r8
289: bispsw $(N|Z) /* these flags ON */
290: addb3 $-1,r7,r8 /* try 'add' instruction data reg reg */
291: jgeq e6 /*error if N = 1 */
292: jeql e6 /*error if Z = 1 */
293: jvc e6 /*error if V = 0 */
294: jcc e6 /*error if C = 0 */
295: bicpsw $Z
296: movl $RB3,r5 /*expected result*/
297: andl2 $BMSK,r5
298: andl2 $BMSK,r8 /* mask off don't care bits */
299: cmpl r5,r8 /*sum = expected ? */
300: jeql ab4 /* if correct continue */
301: bbs $0,_scoplp,0b /* if set scope loop on error */
302: movl $1,_ercode /* error code data miscompare */
303: movl r8,_actual /* actual data */
304: movl $RB3,_expected /* expected data */
305: jmp *badrtn
306: e6: movpsl _actual /* actual = psl */
307: bbs $0,_scoplp,0b /* if set scope loop on error */
308: movl $2,_ercode /* error code flag failure */
309: jmp *badrtn
310:
311: ab4:
312: bbs $0,_force_lp,0b /* if set loop on last subtest */
313: aab4: callf $4,_setjmp /* save context for error return */
314: movab aab4,_stpc /* progranm counter of subtest */
315: movl $7,_subtst /*no error*/
316: movl $2,_no_opr /* number of operands in use */
317: movl $A1B4,_opr /* first operand */
318: movl $A2B4,_opr + 4 /* second operand */
319: 0: bicpsw $PSWMASK /*PSW = 0 */
320: movl $A1B4,tmp /*first operand */
321: movb tmp+3,r6 /*first operand */
322: movl $0,r8
323: bispsw $(N|V) /* these flags ON */
324: addb3 r6,$A2B4,r8 /* try 'add' instruction reg data reg */
325: jlss e7 /*error if N = 1 */
326: jneq e7 /*error if Z = 0 */
327: jvs e7 /*error if V = 1 */
328: jcc e7 /*error if C = 0 */
329: bicpsw $Z
330: movl $RB4,r5 /*expected result*/
331: andl2 $BMSK,r5
332: andl2 $BMSK,r8 /* mask off don't cares */
333: cmpl r5,r8 /*sum = expected ? */
334: jeql ab4r /* if correct continue */
335: bbs $0,_scoplp,0b /* if set scope loop on error */
336: movl $1,_ercode /* error code data miscompare */
337: movl r8,_actual /* actual data */
338: movl $RB4,_expected /* expected data */
339: jmp *badrtn
340: e7: movpsl _actual /* actual = psl */
341: bbs $0,_scoplp,0b /* if set scope loop on error */
342: movl $2,_ercode /* error code flag failure */
343: jmp *badrtn
344:
345:
346: /* reverse operands */
347:
348: ab4r:
349: bbs $0,_force_lp,0b /* if set loop on last subtest */
350: aab4r: callf $4,_setjmp /* save context for error return */
351: movab aab4r,_stpc /* progranm counter of subtest */
352: movl $8,_subtst /*no error*/
353: movl $2,_no_opr /* number of operands in use */
354: movl $A2B4,_opr /* first operand */
355: movl $A1B4,_opr + 4 /* second operand */
356: 0: bicpsw $PSWMASK /*PSW = 0 */
357: movl $A2B4,tmp /*first operand */
358: movb tmp+3,r6 /*first operand */
359: movl $A2B4,r6 /*first operand */
360: movl $A1B4,tmp2 /*first operand */
361: movb tmp2+3,r7 /*first operand */
362: movl $0,r8
363: bispsw $(N|V) /* these flags ON */
364: addb3 r6,r7,r8 /* try 'add' instruction reg reg reg */
365: jlss e8 /*error if N = 1 */
366: jneq e8 /*error if Z = 0 */
367: jvs e8 /*error if V = 1 */
368: jcc e8 /*error if C = 0 */
369: bicpsw $Z
370: movl $RB4,r5 /*expected result*/
371: andl2 $BMSK,r5
372: andl2 $BMSK,r8 /* mask off don't cares */
373: cmpl r5,r8 /*sum = expected ? */
374: jeql ab5 /* if correct continue */
375: bbs $0,_scoplp,0b /* if set scope loop on error */
376: movl $1,_ercode /* error code data miscompare */
377: movl r8,_actual /* actual data */
378: movl $RB4,_expected /* expected data */
379: jmp *badrtn
380: e8: movpsl _actual /* actual = psl */
381: bbs $0,_scoplp,0b /* if set scope loop on error */
382: movl $2,_ercode /* error code flag failure */
383: jmp *badrtn
384:
385:
386:
387: ab5:
388: bbs $0,_force_lp,0b /* if set loop on last subtest */
389: aab5: callf $4,_setjmp /* save context for error return */
390: movab aab5,_stpc /* progranm counter of subtest */
391: movl $9,_subtst /*no error*/
392: movl $2,_no_opr /* number of operands in use */
393: movl $A1B5,_opr /* first operand */
394: movl $A2B5,_opr + 4 /* second operand */
395: 0: bicpsw $PSWMASK /*PSW = 0 */
396: movl $A1B5,add1 /*first operand */
397: movl $A2B5,add2 /*second operand */
398: movl $0,sum
399: bispsw $(V|Z|C) /* these flags ON */
400: addb3 add1+3,add2+3,sum+3/* try 'add' instr mem mem mem */
401: jgeq e9 /*error if N = 0 */
402: jeql e9 /*error if Z = 1 */
403: jvs e9 /*error if V = 1 */
404: jcs e9 /*error if C = 1 */
405: bicpsw $Z
406: movl $RB5,r5 /*expected result*/
407: cmpl $RB5,sum /*sum = expected ? */
408: jeql ab5r /* if correct continue */
409: bbs $0,_scoplp,0b /* if set scope loop on error */
410: movl $1,_ercode /* error code data miscompare */
411: movl sum,_actual /* actual data */
412: movl $RB5,_expected /* expected data */
413: jmp *badrtn
414: e9: movpsl _actual /* actual = psl */
415: bbs $0,_scoplp,0b /* if set scope loop on error */
416: movl $2,_ercode /* error code flag failure */
417: jmp *badrtn
418:
419:
420: /* reverse operands */
421:
422: ab5r:
423: bbs $0,_force_lp,0b /* if set loop on last subtest */
424: aab5r: callf $4,_setjmp /* save context for error return */
425: movab aab5r,_stpc /* progranm counter of subtest */
426: movl $0xa,_subtst /*no error*/
427: movl $2,_no_opr /* number of operands in use */
428: movl $A2B5,_opr /* first operand */
429: movl $A1B5,_opr + 4 /* second operand */
430: 0: bicpsw $PSWMASK /*PSW = 0 */
431: movl $A2B5,tmp
432: movb tmp+3,r6
433: movl $A1B5,tmp2 /*second operand */
434: movb tmp2+3,r7 /*second operand */
435: movl $0,sum
436: bispsw $(V|Z|C) /* these flags ON */
437: addb3 r6,r7,sum+3 /* try 'add' instruction reg reg mem */
438: jgeq e10 /*error if N = 0 */
439: jeql e10 /*error if Z = 1 */
440: jvs e10 /*error if V = 1 */
441: jcs e10 /*error if C = 1 */
442: bicpsw $Z
443: movl $RB5,r5 /*expected result*/
444: cmpl $RB5,sum /*sum = expected ? */
445: jeql ab6 /* if correct continue */
446: bbs $0,_scoplp,0b /* if set scope loop on error */
447: movl $1,_ercode /* error code data miscompare */
448: movl sum,_actual /* actual data */
449: movl $RB5,_expected /* expected data */
450: jmp *badrtn
451: e10: movpsl _actual /* actual = psl */
452: bbs $0,_scoplp,0b /* if set scope loop on error */
453: movl $2,_ercode /* error code flag failure */
454: jmp *badrtn
455:
456: ab6:
457: bbs $0,_force_lp,0b /* if set loop on last subtest */
458: aab6: callf $4,_setjmp /* save context for error return */
459: movab aab6,_stpc /* progranm counter of subtest */
460: movl $0xb,_subtst /*no error*/
461: movl $2,_no_opr /* number of operands in use */
462: movl $A1B6,_opr /* first operand */
463: movl $A2B6,_opr + 4 /* second operand */
464: 0: bicpsw $PSWMASK /*PSW = 0 */
465: movl $A1B6,add1 /*first operand */
466: movl $A2B6,add2 /*second operand */
467: movl $0,sum
468: bispsw $(Z|V) /* these flags ON */
469: addb3 add1+3,add2+3,sum+3/* try 'add' instruction */
470: jgeq e11 /*error if N = 0 */
471: jeql e11 /*error if Z = 1 */
472: jvs e11 /*error if V = 1 */
473: jcc e11 /*error if C = 0 */
474: bicpsw $Z
475: movl $RB6,r5 /*expected result*/
476: cmpl $RB6,sum /*sum = expected ? */
477: jeql ab6r /* if correct continue */
478: bbs $0,_scoplp,0b /* if set scope loop on error */
479: movl $1,_ercode /* error code data miscompare */
480: movl sum,_actual /* actual data */
481: movl $RB6,_expected /* expected data */
482: jmp *badrtn
483: e11: movpsl _actual /* actual = psl */
484: bbs $0,_scoplp,0b /* if set scope loop on error */
485: movl $2,_ercode /* error code flag failure */
486: jmp *badrtn
487:
488:
489: /* reverse operands */
490:
491: ab6r:
492: bbs $0,_force_lp,0b /* if set loop on last subtest */
493: aab6r: callf $4,_setjmp /* save context for error return */
494: movab aab6r,_stpc /* progranm counter of subtest */
495: movl $0xc,_subtst /*no error*/
496: movl $2,_no_opr /* number of operands in use */
497: movl $A1B6,_opr /* first operand */
498: movl $A2B6,_opr + 4 /* second operand */
499: 0: bicpsw $PSWMASK /*PSW = 0 */
500: movl $A2B6,add1 /*first operand */
501: movl $A1B6,add2 /*second operand */
502: movl $0,sum
503: bispsw $(Z|V) /* these flags ON */
504: addb3 add1+3,add2+3,sum+3/* try 'add' instruction */
505: jgeq e12 /*error if N = 0 */
506: jeql e12 /*error if Z = 1 */
507: jvs e12 /*error if V = 1 */
508: jcc e12 /*error if C = 0 */
509: bicpsw $Z
510: movl $RB6,r5 /*expected result*/
511: cmpl $RB6,sum /*sum = expected ? */
512: jeql e555 /* if correct continue */
513: bbs $0,_scoplp,0b /* if set scope loop on error */
514: movl $1,_ercode /* error code data miscompare */
515: movl sum,_actual /* actual data */
516: movl $RB6,_expected /* expected data */
517: jmp *badrtn
518: e12: movpsl _actual /* actual = psl */
519: bbs $0,_scoplp,0b /* if set scope loop on error */
520: movl $2,_ercode /* error code flag failure */
521: jmp *badrtn
522: e555: bbs $0,_force_lp,0b /* if set loop on last subtest */
523: jmp *return
524: /*test passed , goto monitor */
525:
526: /* */
527: /* Variables */
528: /* */
529: .align 2
530: add1: .space 4
531: add2: .space 4
532: sum: .space 4
533: add: .space 4
534: tmp: .space 4
535: tmp2: .space 4
536: tmp3: .space 4
537:
538: /* End of file */
539:
540:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.