|
|
1.1 root 1:
2:
3: /* ADDA (add address) test */
4: /* */
5: /*Test name = adda */
6: /*Description = */
7: /* This test checks 'adda' instruction as follows: */
8: /*add sum result N Z V C (flags) */
9: /*___ ___ ______ _______________ */
10: /*0x7fffffff 0x7fffffff 0xfffffffe 0 0 1 0 */
11: /*0x80000000 0x80000000 0x00000000 0 1 1 1 */
12: /*0x80000000 0xffffffff 0x7fffffff 0 0 1 1 */
13: /*0x80000001 0x7fffffff 0x00000000 0 1 0 1 */
14: /*0x80000000 0x7fffffff 0xffffffff 1 0 0 0 */
15: /*0xc0000000 0xc0000000 0x80000000 1 0 0 1 */
16: /* Note: the flags should not change. */
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,0x11118000
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:
76: .set INITB,0x11111055/* initialization values for 3 operand */
77: .set INITW,0x11105555
78: .set INITL,0X55555555
79:
80: /* */
81: /* Syst.s - Constants */
82: /* */
83: .set IPL,8
84: .set HIGH,31
85: .set ZERO,0
86: .set ONES,0xffffffff
87: .set N,8
88: .set Z,4
89: .set V,2
90: .set C,1
91: .set T,16
92: .set IV,32
93: .set FU,64
94: .set DV,128
95: .set PSWMASK,0x003f
96:
97: .globl _add_a
98: _add_a:
99: al1:
100: callf $4,_setjmp /* save context for error return */
101: movab al1,_stpc /* save subtest program counter */
102: movl $1,_subtst /* save subtest number */
103: movl $2,_no_opr /* number of operands in use */
104: movl $A1L1,_opr /* first operand */
105: movl $A2L1,_opr + 4 /* second operand */
106: 0:
107: movl $A1L1,add /*first operand */
108: movl $A2L1,sum /*second operand */
109: bicpsw $PSWMASK /*PSW = 0 */
110: bispsw $(N|Z|C) /* these flags ON */
111: adda add,sum /* try 'adda' instruction mem to mem */
112: bicpsw $Z
113: movl $RL1,r4
114: cmpl $RL1,sum /*sum = expected ? */
115: jeql al1r
116: bbs $0,_scoplp,0b /* if set loop on error */
117: movl $1,_ercode /* error code data miscompare */
118: movl sum,_actual /* actual data */
119: movl $RL1,_expected /* expected data */
120: jmp *badrtn
121:
122:
123: /* reverse operands mem to reg */
124:
125: al1r:
126: bbs $0,_force_lp,0b /* if set loop on last subtest */
127: aal1r: callf $4,_setjmp /* save context for error return */
128: movab aal1r,_stpc /* save subtest program counter */
129: movl $2,_subtst /* save subtest number */
130: 0: movl $A2L1,add /*first operand */
131: movl $A1L1,r5 /*second operand */
132: bicpsw $PSWMASK /*PSW = 0 */
133: bispsw $(N|Z|C) /* these flags ON */
134: adda add,r5 /* try 'add' instruction mem to reg */
135: jgtr e2 /*error if N = 0 */
136: jneq e2 /*error if Z = 0 */
137: jvs e2 /*error if V = 1 */
138: jcc e2 /*error if C = 0 */
139: bicpsw $Z
140: movl $RL1,r4
141: cmpl $RL1,r5 /*sum = expected ? */
142: jeql al2 /* if correct continue */
143: movl $1,_ercode /* error code data miscompare */
144: bbs $0,_scoplp,0b /* if set loop on error */
145: movl $1,_ercode /* error code data miscompare */
146: movl r5,_actual /* actual data */
147: movl $RL1,_expected /* expected data */
148: jmp *badrtn
149: e2: movpsl _actual /* actual = psl */
150: bbs $0,_scoplp,0b /* if set loop on error */
151: movl $2,_ercode /* error code flag failure */
152: jmp *badrtn
153:
154: al2:
155: bbs $0,_force_lp,0b /* if set loop on last subtest */
156: aal2: callf $4,_setjmp /* save context for error return */
157: movab aal2,_stpc /* save subtest program counter */
158: movl $3,_subtst /* save subtest number */
159: movl $2,_no_opr /* number of operands in use */
160: movl $A1L2,_opr /* first operand */
161: movl $A2L2,_opr + 4 /* second operand */
162: 0: movl $A1L2,r5 /*first operand */
163: movl $A2L2,sum /*second operand */
164: bicpsw $PSWMASK /*PSW = 0 */
165: bispsw $N /* these flags ON */
166: adda r5,sum /* try 'add' instruction reg to memory */
167: jgtr e3 /*error if N = 0 */
168: jeql e3 /*error if Z = 1 */
169: jvs e3 /*error if V = 1 */
170: jcs e3 /*error if C = 1 */
171: bicpsw $Z
172: cmpl $RL2,sum /*sum = expected ? */
173: jeql al2r /* if correct continue */
174: movl $1,_ercode /* error code data miscompare */
175: bbs $0,_scoplp,0b /* if set loop on error */
176: movl sum,_actual /* actual data */
177: movl $RL2,_expected /* expected data */
178: jmp *badrtn
179: e3: movpsl _actual /* actual = psl */
180: bbs $0,_scoplp,0b /* if set loop on error */
181: movl $2,_ercode /* error code flag failure */
182: jmp *badrtn
183:
184: /* reverse operands register to register operation */
185:
186: al2r:
187: bbs $0,_force_lp,0b /* if set loop on last subtest */
188: aal2r: callf $4,_setjmp /* save context for error return */
189: movab aal2r,_stpc /* save subtest program counter */
190: movl $4,_subtst /* save subtest number */
191: 0: movl $A2L2,r5 /*first operand */
192: movl $A1L2,r6 /*second operand */
193: bicpsw $PSWMASK /*PSW = 0 */
194: bispsw $N /* these flags ON */
195: adda r5,r6 /* try 'add' instruction */
196: jgtr e4 /*error if N = 0 */
197: jeql e4 /*error if Z = 1 */
198: jvs e4 /*error if V = 1 */
199: jcs e4 /*error if C = 1 */
200: bicpsw $Z
201: movl $RL2,r4
202: cmpl $RL2,r6 /*sum = expected ? */
203: jeql al3 /* if correct continue */
204: movl $1,_ercode /* error code data miscompare */
205: bbs $0,_scoplp,0b /* if set loop on error */
206: movl r6,_actual /* actual data */
207: movl $RL2,_expected /* expected data */
208: jmp *badrtn
209: e4: movpsl _actual /* actual = psl */
210: bbs $0,_scoplp,0b /* if set loop on error */
211: movl $2,_ercode /* error code flag failure */
212: jmp *badrtn
213:
214:
215:
216: al3:
217: bbs $0,_force_lp,0b /* if set loop on last subtest */
218: aal3: callf $4,_setjmp /* save context for error return */
219: movab aal3,_stpc /* save subtest program counter */
220: movl $5,_subtst /* save subtest number */
221: movl $2,_no_opr /* number of operands in use */
222: movl $A1L3,_opr /* first operand */
223: movl $A2L3,_opr + 4 /* second operand */
224: 0: movl $A1L3,add /*first operand */
225: movl $A2L3,sum /*second operand */
226: bicpsw $PSWMASK /*PSW = 0 */
227: bispsw $(N|Z) /* these flags ON */
228: adda add,sum /* try 'add' instruction */
229: jgtr e5 /*error if N = 0 */
230: jneq e5 /*error if Z = 0 */
231: jvs e5 /*error if V = 1 */
232: jcs e5 /*error if C = 1 */
233: bicpsw $Z
234: movl $RL3,r4
235: cmpl r4,sum /*sum = expected ? */
236: jeql al3r /* if correct continue */
237: movl $1,_ercode /* error code data miscompare */
238: bbs $0,_scoplp,0b /* if set loop on error */
239: movl sum,_actual /* actual data */
240: movl $RL3,_expected /* expected data */
241: jmp *badrtn
242: e5: movpsl _actual /* actual = psl */
243: bbs $0,_scoplp,0b /* if set loop on error */
244: movl $2,_ercode /* error code flag failure */
245: jmp *badrtn
246:
247:
248: /* reverse operands */
249:
250: al3r:
251: bbs $0,_force_lp,0b /* if set loop on last subtest */
252: aal3r: callf $4,_setjmp /* save context for error return */
253: movab aal3r,_stpc /* save subtest program counter */
254: movl $6,_subtst /* save subtest number */
255: 0: movl $A2L3,add /*first operand */
256: movl $A1L3,sum /*second operand */
257: bicpsw $PSWMASK /*PSW = 0 */
258: bispsw $(N|Z) /* these flags ON */
259: adda add,sum /* try 'add' instruction */
260: jgtr e6 /*error if N = 0 */
261: jneq e6 /*error if Z = 0 */
262: jvs e6 /*error if V = 1 */
263: jcs e6 /*error if C = 1 */
264: bicpsw $Z
265: movl $RL3,r4
266: cmpl $RL3,sum /*sum = expected ? */
267: jeql al4 /* if correct continue */
268: movl $1,_ercode /* error code data miscompare */
269: bbs $0,_scoplp,0b /* if set loop on error */
270: movl sum,_actual /* actual data */
271: movl $RL3,_expected /* expected data */
272: jmp *badrtn
273: e6: movpsl _actual /* actual = psl */
274: bbs $0,_scoplp,0b /* if set loop on error */
275: movl $2,_ercode /* error code flag failure */
276: jmp *badrtn
277:
278: al4:
279: bbs $0,_force_lp,0b /* if set loop on last subtest */
280: aal4: callf $4,_setjmp /* save context for error return */
281: movab aal4,_stpc /* save subtest program counter */
282: movl $7,_subtst /* save subtest number */
283: movl $2,_no_opr /* number of operands in use */
284: movl $A1L4,_opr /* first operand */
285: movl $A2L4,_opr + 4 /* second operand */
286: 0: movl $A1L4,add /*first operand */
287: movl $A2L4,sum /*second operand */
288: bicpsw $PSWMASK /*PSW = 0 */
289: bispsw $(N|V) /* these flags ON */
290: adda add,sum /* try 'add' instruction */
291: jgtr e7 /*error if N = 0 */
292: jeql e7 /*error if Z = 1 */
293: jvc e7 /*error if V = 0 */
294: jcs e7 /*error if C = 1 */
295: bicpsw $Z
296: movl $RL4,r4
297: cmpl $RL4,sum /*sum = expected ? */
298: jeql al4r /* if correct continue */
299: movl $1,_ercode /* error code data miscompare */
300: bbs $0,_scoplp,0b /* if set loop on error */
301: movl sum,_actual /* actual data */
302: movl $RL4,_expected /* expected data */
303: jmp *badrtn
304: e7: movpsl _actual /* actual = psl */
305: bbs $0,_scoplp,0b /* if set loop on error */
306: movl $2,_ercode /* error code flag failure */
307: jmp *badrtn
308:
309:
310: /* reverse operands */
311:
312: al4r:
313: bbs $0,_force_lp,0b /* if set loop on last subtest */
314: aal4r: callf $4,_setjmp /* save context for error return */
315: movab aal4r,_stpc /* save subtest program counter */
316: movl $8,_subtst /* save subtest number */
317: 0: movl $A2L4,add /*first operand */
318: movl $A1L4,sum /*second operand */
319: bicpsw $PSWMASK /*PSW = 0 */
320: bispsw $(N|V) /* these flags ON */
321: adda add,sum /* try 'add' instruction */
322: jgtr e8 /*error if N = 0 */
323: jeql e8 /*error if Z = 1 */
324: jvc e8 /*error if V = 0 */
325: jcs e8 /*error if C = 1 */
326: bicpsw $Z
327: movl $0,r4
328: cmpl r4,sum /*sum = expected ? */
329: jeql al5 /* if correct continue */
330: movl $1,_ercode /* error code data miscompare */
331: bbs $0,_scoplp,0b /* if set loop on error */
332: movl sum,_actual /* actual data */
333: movl $0,_expected /* expected data */
334: jmp *badrtn
335: e8: movpsl _actual /* actual = psl */
336: bbs $0,_scoplp,0b /* if set loop on error */
337: movl $2,_ercode /* error code flag failure */
338: jmp *badrtn
339:
340:
341:
342: al5:
343: bbs $0,_force_lp,0b /* if set loop on last subtest */
344: aal5: callf $4,_setjmp /* save context for error return */
345: movab aal5,_stpc /* save subtest program counter */
346: movl $9,_subtst /* save subtest number */
347: movl $2,_no_opr /* number of operands in use */
348: movl $A1L5,_opr /* first operand */
349: movl $A2L5,_opr + 4 /* second operand */
350: 0: movl $A1L5,add /*first operand */
351: movl $A2L5,sum /*second operand */
352: bicpsw $PSWMASK /*PSW = 0 */
353: bispsw $(V|Z|C) /* these flags ON */
354: adda add,sum /* try 'add' instruction */
355: jlss e9 /*error if N = 1 */
356: jneq e9 /*error if Z = 0 */
357: jvc e9 /*error if V = 0 */
358: jcc e9 /*error if C = 0 */
359: bicpsw $Z
360: movl $RL5,r4
361: cmpl $RL5,sum /*sum = expected ? */
362: jeql al5r /* if correct continue */
363: movl $1,_ercode /* error code data miscompare */
364: bbs $0,_scoplp,0b /* if set loop on error */
365: movl sum,_actual /* actual data */
366: movl $RL5,_expected /* expected data */
367: jmp *badrtn
368: e9: movpsl _actual /* actual = psl */
369: bbs $0,_scoplp,0b /* if set loop on error */
370: movl $2,_ercode /* error code flag failure */
371: jmp *badrtn
372:
373:
374: /* reverse operands */
375:
376: al5r:
377: bbs $0,_force_lp,0b /* if set loop on last subtest */
378: aal5r: callf $4,_setjmp /* save context for error return */
379: movab aal5r,_stpc /* save subtest program counter */
380: movl $0xa,_subtst /* save subtest number */
381: 0: movl $A2L5,add /*first operand */
382: movl $A1L5,sum /*second operand */
383: bicpsw $PSWMASK /*PSW = 0 */
384: bispsw $(V|Z|C) /* these flags ON */
385: adda add,sum /* try 'add' instruction */
386: jlss e10 /*error if N = 1 */
387: jneq e10 /*error if Z = 0 */
388: jvc e10 /*error if V = 0 */
389: jcc e10 /*error if C = 0 */
390: bicpsw $Z
391: movl $RL5,r4
392: cmpl r4,sum /*sum = expected ? */
393: jeql al6 /* if correct continue */
394: movl $1,_ercode /* error code data miscompare */
395: 1: bbs $0,_scoplp,0b /* if set loop on error */
396: movl sum,_actual /* actual data */
397: movl $RL5,_expected /* expected data */
398: jmp *badrtn
399: e10: movpsl _actual /* actual = psl */
400: bbs $0,_scoplp,0b /* if set loop on error */
401: movl $2,_ercode /* error code flag failure */
402: jmp *badrtn
403:
404: al6:
405: bbs $0,_force_lp,0b /* if set loop on last subtest */
406: aal6: callf $4,_setjmp /* save context for error return */
407: movab aal6,_stpc /* save subtest program counter */
408: movl $0xb,_subtst /* save subtest number */
409: movl $2,_no_opr /* number of operands in use */
410: movl $A1L6,_opr /* first operand */
411: movl $A2L6,_opr + 4 /* second operand */
412: 0: movl $A1L6,add /*first operand */
413: movl $A2L6,sum /*second operand */
414: bicpsw $PSWMASK /*PSW = 0 */
415: bispsw $(Z|V) /* these flags ON */
416: adda add,sum /* try 'add' instruction */
417: jlss e11 /*error if N = 1 */
418: jneq e11 /*error if Z = 0 */
419: jvc e11 /*error if V = 0 */
420: jcs e11 /*error if C = 1 */
421: bicpsw $Z
422: movl $RL6,r4
423: cmpl $RL6,sum /*sum = expected ? */
424: jeql al6r /* if correct continue */
425: movl $1,_ercode /* error code data miscompare */
426: 1: bbs $0,_scoplp,0b /* if set loop on error */
427: movl sum,_actual /* actual data */
428: movl $RL6,_expected /* expected data */
429: jmp *badrtn
430: e11: movpsl _actual /* actual = psl */
431: bbs $0,_scoplp,0b /* if set loop on error */
432: movl $2,_ercode /* error code flag failure */
433: jmp *badrtn
434:
435:
436: /* reverse operands */
437:
438: al6r:
439: bbs $0,_force_lp,0b /* if set loop on last subtest */
440: aal6r: callf $4,_setjmp /* save context for error return */
441: movab aal6r,_stpc /* save subtest program counter */
442: movl $0xc,_subtst /* save subtest number */
443: 0: movl $A2L6,add /*first operand */
444: movl $A1L6,sum /*second operand */
445: bicpsw $PSWMASK /*PSW = 0 */
446: bispsw $(Z|V) /* these flags ON */
447: adda add,sum /* try 'add' instruction */
448: jlss e12 /*error if N = 1 */
449: jneq e12 /*error if Z = 0 */
450: jvc e12 /*error if V = 0 */
451: jcs e12 /*error if C = 1 */
452: bicpsw $Z
453: cmpl $RL6,sum /*sum = expected ? */
454: jeql aldn /* if correct continue */
455: movl $1,_ercode /* error code data miscompare */
456: 1: bbs $0,_scoplp,0b /* if set loop on error */
457: movl sum,_actual /* actual data */
458: movl $RL6,_expected /* expected data */
459: jmp *badrtn
460: e12: movpsl _actual /* actual = psl */
461: bbs $0,_scoplp,0b /* if set loop on error */
462: movl $2,_ercode /* error code flag failure */
463: jmp *badrtn
464: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */
465: jmp *return
466:
467: /* */
468: /* Varialles */
469: /* */
470: .align 2
471: add1: .space 4
472: add2: .space 4
473: sum: .space 4
474: add: .space 4
475:
476: /* End of file */
477:
478:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.