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