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