|
|
1.1 root 1: /* CALLS RET instruction test */
2: /* Privilege registers */
3:
4: .set IPL,8
5: .set MAPEN,9
6: .set KSP,19
7:
8: /* PSL fields */
9: .set IV,32
10: .set T,16
11: .set N,8
12: .set Z,4
13: .set V,2
14: .set C,1
15:
16: /* constants */
17: .set DISABLE,0
18: .set ENABLE,1
19: .set HIGH,31 /* highest interrupt priority */
20:
21: .set NOARG1,3
22: .set NOARG2,2
23: .set ARG1,0xf
24: .set ARG2,0xff
25: .set ARG3,0xfff
26: .set R0_12,0x3fff /* mask to save r0 thru r12 */
27: .set R2_12,0x1ffc /* mask to save r2 thru r12 */
28: .set R357911,0xaa8 /* mask to save r3,r5,r7,r9,r11 */
29: .set MASK1,R2_12 /* save r2-r12 */
30: .set MASK2,R357911 /* save r3,5,7,9,11 */
31:
32:
33: .globl _callsx
34: _callsx:
35: bicpsw $(IV|T) /* disable exceptions */
36: /* */
37: start:
38: callf $4,_setjmp /* save contextfor error return */
39: movab start,_stpc /* save address of subtest */
40: movl $1,_subtst /* subtest number */
41: movl $2,_no_opr /* number of operands in use */
42: movl $NOARG1,_opr /* first operand */
43: movl $MASK1,_opr + 4 /* second operand */
44: 0: movab stkbase,sp /* init. stack pointer */
45: movab stkbase,fp /* init. frame pointer */
46: movl fp,bfp /* save fp */
47: movw $MASK1,proc1 /* set entry mask in called procedure */
48: pushl $ARG1
49: pushl $ARG2
50: pushl $ARG3 /* push 3 arguments on stacks */
51: movl $2,r2 /* initialize r2 - r12 */
52: movl $3,r3
53: movl $4,r4
54: movl $5,r5
55: movl $6,r6
56: movl $7,r7
57: movl $0x8,r8
58: movl $0x9,r9
59: movl $0xa,r10
60: movl $0xb,r11
61: movl $0xc,r12
62: movab (r14),estk /* save sp */
63: /* compute expected sp after calls */
64: subl2 $(3*4),estk /* Space for fp,MASK,PC */
65: subl2 $(11*4),estk /* Space for r2-r12 */
66: /* compute expected fp after calls */
67: movl fp,efp
68: subl2 $(4*4),efp
69: bicpsw $(N|Z|V|C) /* clear all flags */
70: bispsw $(V|C) /* set V,C flags */
71: calls $(4*NOARG1+4),proc1 /* call procedure with 3 arguments */
72: retcall1:
73: blss error1 /* error if any of the n,z,v,c flags set */
74: beql error1
75: bvs error1
76: bcs error1
77: jmp 1f
78: error1: movpsl _actual /* actual data */
79: bbs $0,_scoplp,0b /* if set scope loop on error */
80: movl $2,_ercode /* error code flag failure */
81: jmp *badrtn
82: 1: cmpl r2,$2 /* check if r2 - r12 get restored properly */
83: jeql 1f
84: bbs $0,_scoplp,0b /* if set scope loop on error */
85: movl $1,_ercode /* error code data miscompare */
86: movl r2,_actual /* actual data */
87: movl $2,_expected /* expected data */
88: jmp *badrtn
89: 1: cmpl r3,$3
90: jeql 1f
91: bbs $0,_scoplp,0b /* if set scope loop on error */
92: movl $1,_ercode /* error code data miscompare */
93: movl r3,_actual /* actual data */
94: movl $3,_expected /* expected data */
95: jmp *badrtn
96: 1: cmpl r4,$4
97: jeql 1f
98: bbs $0,_scoplp,0b /* if set scope loop on error */
99: movl $1,_ercode /* error code data miscompare */
100: movl r4,_actual /* actual data */
101: movl $4,_expected /* expected data */
102: jmp *badrtn
103: 1: cmpl r5,$5
104: jeql 1f
105: bbs $0,_scoplp,0b /* if set scope loop on error */
106: movl $1,_ercode /* error code data miscompare */
107: movl r5,_actual /* actual data */
108: movl $5,_expected /* expected data */
109: jmp *badrtn
110: 1: cmpl r6,$6
111: jeql 1f
112: bbs $0,_scoplp,0b /* if set scope loop on error */
113: movl $1,_ercode /* error code data miscompare */
114: movl r6,_actual /* actual data */
115: movl $6,_expected /* expected data */
116: jmp *badrtn
117: 1: cmpl r7,$7
118: jeql 1f
119: bbs $0,_scoplp,0b /* if set scope loop on error */
120: movl $1,_ercode /* error code data miscompare */
121: movl r7,_actual /* actual data */
122: movl $7,_expected /* expected data */
123: jmp *badrtn
124: 1: cmpl r8,$0x8
125: jeql 1f
126: bbs $0,_scoplp,0b /* if set scope loop on error */
127: movl $1,_ercode /* error code data miscompare */
128: movl r8,_actual /* actual data */
129: movl $8,_expected /* expected data */
130: jmp *badrtn
131: 1: cmpl r9,$0x9
132: jeql 1f
133: bbs $0,_scoplp,0b /* if set scope loop on error */
134: movl $1,_ercode /* error code data miscompare */
135: movl r9,_actual /* actual data */
136: movl $9,_expected /* expected data */
137: jmp *badrtn
138: 1: cmpl r10,$0xa
139: jeql 1f
140: bbs $0,_scoplp,0b /* if set scope loop on error */
141: movl $1,_ercode /* error code data miscompare */
142: movl r10,_actual /* actual data */
143: movl $0xa,_expected /* expected data */
144: jmp *badrtn
145: 1: cmpl r11,$0xb
146: jeql 1f
147: bbs $0,_scoplp,0b /* if set scope loop on error */
148: movl $1,_ercode /* error code data miscompare */
149: movl r11,_actual /* actual data */
150: movl $0xb,_expected /* expected data */
151: jmp *badrtn
152: 1: cmpl r12,$0xc
153: jeql 1f
154: bbs $0,_scoplp,0b /* if set scope loop on error */
155: movl $1,_ercode /* error code data miscompare */
156: movl r12,_actual /* actual data */
157: movl $0xc,_expected /* expected data */
158: jmp *badrtn
159: 1: movab (r14),r0
160: cmpl r0,bfp /* check if sp,fp get restored properly */
161: jeql 1f
162: bbs $0,_scoplp,0b /* if set scope loop on error */
163: movl $1,_ercode /* error code data miscompare */
164: movl r0,_actual /* actual data */
165: movl bfp,_expected /* expected data */
166: jmp *badrtn
167: cmpl fp,bfp
168: jeql callp2
169: bbs $0,_scoplp,0b /* if set scope loop on error */
170: movl $1,_ercode /* error code data miscompare */
171: movl fp,_actual /* actual data */
172: movl bfp,_expected /* expected data */
173: jmp *badrtn
174:
175:
176: callp2:
177: bbs $0,_force_lp,0b /* if set loop on last subtest */
178: c2: callf $4,_setjmp /* save contextfor error return */
179: movab c2,_stpc /* save address of subtest */
180: movl $2,_subtst /* subtest number */
181: movl $2,_no_opr /* number of operands in use */
182: movl $NOARG2,_opr /* first operand */
183: movl $MASK2,_opr + 4 /* second operand */
184: 0: movw $MASK2,proc2 /* set entry mask in called procedure */
185: pushl $ARG1
186: pushl $ARG2
187: movl $3,r3 /* init. r3,r5,r7,r9,r11 */
188: movl $5,r5
189: movl $7,r7
190: movl $0x9,r9
191: movl $0xb,r11
192: movab (r14),estk /* save sp */
193: /* compute expected sp after calls */
194: subl2 $(3*4),estk /* Space for fp,MASK,PC */
195: subl2 $(5*4),estk /* Space for r3,5,7,9,11 */
196: /* compute expected fp after calls */
197: movl fp,efp
198: subl2 $(3*4),efp
199: movab proc2,r12
200: movl $(NOARG2*4+4),r6 /* load reg with argument info */
201: bispsw $(N|V) /* set n,v flags */
202: bicpsw $(Z|C) /* clear z,c flags */
203: calls r6,(r12) /* call procedure with 2 arguments */
204: retcall2:
205: jneq error2 /* error if z,c flags clear */
206: jcc error2
207: jlss error2 /* error if n,v flags set */
208: jvs error2
209: jeql 1f
210: error2: movpsl _actual /* actual data */
211: bbs $0,_scoplp,0b /* if set scope loop on error */
212: movl $2,_ercode /* error code flag failure */
213: jmp *badrtn
214: 1: cmpl r3,$3 /* check if r3,5,7,9,11 restored properly */
215: jeql 1f
216: bbs $0,_scoplp,0b /* if set scope loop on error */
217: movl $1,_ercode /* error code data miscompare */
218: movl r3,_actual /* actual data */
219: movl $3,_expected /* expected data */
220: jmp *badrtn
221: 1: cmpl r5,$5
222: jeql 1f
223: bbs $0,_scoplp,0b /* if set scope loop on error */
224: movl $1,_ercode /* error code data miscompare */
225: movl r5,_actual /* actual data */
226: movl $5,_expected /* expected data */
227: jmp *badrtn
228: 1: cmpl r7,$7
229: jeql 1f
230: bbs $0,_scoplp,0b /* if set scope loop on error */
231: movl $1,_ercode /* error code data miscompare */
232: movl r7,_actual /* actual data */
233: movl $3,_expected /* expected data */
234: jmp *badrtn
235: 1: cmpl r9,$0x9
236: jeql 1f
237: bbs $0,_scoplp,0b /* if set scope loop on error */
238: movl $1,_ercode /* error code data miscompare */
239: movl r9,_actual /* actual data */
240: movl $9,_expected /* expected data */
241: jmp *badrtn
242: 1: cmpl r11,$0xb
243: jeql 1f
244: bbs $0,_scoplp,0b /* if set scope loop on error */
245: movl $1,_ercode /* error code data miscompare */
246: movl r11,_actual /* actual data */
247: movl $0xb,_expected /* expected data */
248: jmp *badrtn
249: 1: movab (r14),r0
250: cmpl r0,bfp /* check if sp,fp restored properly */
251: jeql 1f
252: bbs $0,_scoplp,0b /* if set scope loop on error */
253: movl $1,_ercode /* error code data miscompare */
254: movl r0,_actual /* actual data */
255: movl bfp,_expected /* expected data */
256: jmp *badrtn
257: 1: cmpl fp,bfp
258: jeql 1f
259: bbs $0,_scoplp,0b /* if set scope loop on error */
260: movl $1,_ercode /* error code data miscompare */
261: movl fp,_actual /* actual data */
262: movl bfp,_expected /* expected data */
263: jmp *badrtn
264: 1: jmp *return
265:
266:
267: /* TEST DATA */
268: .align 2
269: stack:
270: .space 400 /* 400 bytes for the stack */
271: stkbase:
272: .long 0
273: prevpc1:
274: .long retcall1
275: prevpc2:
276: .long retcall2
277: prono:
278: .long 0 /* current procedure called : 1/2 */
279: astk:
280: .long 0 /* actual sp after calls */
281: estk:
282: .long 0 /* expected sp after calls */
283: efp: .long 0 /* expected fp after calls */
284: bfp: .long 0 /* fp before calls */
285:
286: temp0: .long 0
287: temp1: .long 0
288:
289: /* PROCEDURE 1 */
290: proc1:
291: .word 0 /* entry mask */
292: jlss error3 /* error if N set */
293: jeql error3 /* error if Z set */
294: jvc error3 /* error if v,c clear */
295: jcc error3
296: jmp 1f
297: error3: movpsl _actual /* actual data */
298: bbs $0,_scoplp,0b /* if set scope loop on error */
299: movl $2,_ercode /* error code flag failure */
300: jmp *badrtn
301: 1: movab (r14),astk
302: cmpl astk,estk /* check if sp decremented properly */
303: jeql 1f
304: bbs $0,_scoplp,0b /* if set scope loop on error */
305: movl $1,_ercode /* error code data miscompare */
306: movl astk,_actual /* actual data */
307: movl estk,_expected /* expected data */
308: jmp *badrtn
309: 1: cmpl fp,efp /* check if fp decrmented properly */
310: jeql 1f
311: bbs $0,_scoplp,0b /* if set scope loop on error */
312: movl $1,_ercode /* error code data miscompare */
313: movl fp,_actual /* actual data */
314: movl efp,_expected /* expected data */
315: jmp *badrtn
316: 1: cmpl (fp),bfp /* check previous fp saved on the stack */
317: jeql 1f
318: bbs $0,_scoplp,0b /* if set scope loop on error */
319: movl $1,_ercode /* error code data miscompare */
320: movl (fp),_actual /* actual data */
321: movl bfp,_expected /* expected data */
322: jmp *badrtn
323: 1: movl fp,temp0
324: subl2 $4,temp0
325: movl *(temp0),temp0 /* get mask/argument longword from stack */
326: movl $MASK1,temp1
327: shll $16,temp1,temp1
328: addl2 $(4*NOARG1+4),temp1
329: cmpl temp0,temp1 /* check mask/argnum longword */
330: jeql 1f
331: bbs $0,_scoplp,0b /* if set scope loop on error */
332: movl $1,_ercode /* error code data miscompare */
333: movl temp0,_actual /* actual data */
334: movl temp1,_expected /* expected data */
335: jmp *badrtn
336: 1: cmpl -8(fp),prevpc1 /* check saved PC on the stack */
337: jeql 1f
338: bbs $0,_scoplp,0b /* if set scope loop on error */
339: movl $1,_ercode /* error code data miscompare */
340: movl -8(fp),_actual /* actual data */
341: movl prevpc1,_expected /* expected data */
342: jmp *badrtn
343: 1: cmpl (sp),$2 /* check saved r2 - r12 on stack */
344: jeql 1f
345: bbs $0,_scoplp,0b /* if set scope loop on error */
346: movl $1,_ercode /* error code data miscompare */
347: movl (sp),_actual /* actual data */
348: movl $0x2,_expected /* expected data */
349: jmp *badrtn
350: 1: cmpl 4(sp),$3
351: jeql 1f
352: bbs $0,_scoplp,0b /* if set scope loop on error */
353: movl $1,_ercode /* error code data miscompare */
354: movl 4(sp),_actual /* actual data */
355: movl $0x3,_expected /* expected data */
356: jmp *badrtn
357: 1: cmpl 8(sp),$4
358: jeql 1f
359: bbs $0,_scoplp,0b /* if set scope loop on error */
360: movl $1,_ercode /* error code data miscompare */
361: movl 8(sp),_actual /* actual data */
362: movl $0x4,_expected /* expected data */
363: jmp *badrtn
364: 1: cmpl 12(sp),$5
365: jeql 1f
366: bbs $0,_scoplp,0b /* if set scope loop on error */
367: movl $1,_ercode /* error code data miscompare */
368: movl 12(sp),_actual /* actual data */
369: movl $0x5,_expected /* expected data */
370: jmp *badrtn
371: 1: cmpl 16(sp),$6
372: jeql 1f
373: bbs $0,_scoplp,0b /* if set scope loop on error */
374: movl $1,_ercode /* error code data miscompare */
375: movl 16(sp),_actual /* actual data */
376: movl $0x6,_expected /* expected data */
377: jmp *badrtn
378: 1: cmpl 20(sp),$7
379: jeql 1f
380: bbs $0,_scoplp,0b /* if set scope loop on error */
381: movl $1,_ercode /* error code data miscompare */
382: movl 20(sp),_actual /* actual data */
383: movl $0x7,_expected /* expected data */
384: jmp *badrtn
385: 1: cmpl 24(sp),$0x8
386: jeql 1f
387: bbs $0,_scoplp,0b /* if set scope loop on error */
388: movl $1,_ercode /* error code data miscompare */
389: movl 24(sp),_actual /* actual data */
390: movl $0x8,_expected /* expected data */
391: jmp *badrtn
392: 1: cmpl 28(sp),$0x9
393: jeql 1f
394: bbs $0,_scoplp,0b /* if set scope loop on error */
395: movl $1,_ercode /* error code data miscompare */
396: movl 28(sp),_actual /* actual data */
397: movl $0x9,_expected /* expected data */
398: jmp *badrtn
399: 1: cmpl 32(sp),$0xa
400: jeql 1f
401: bbs $0,_scoplp,0b /* if set scope loop on error */
402: movl $1,_ercode /* error code data miscompare */
403: movl 32(sp),_actual /* actual data */
404: movl $0xa,_expected /* expected data */
405: jmp *badrtn
406: 1: cmpl 36(sp),$0xb
407: jeql 1f
408: bbs $0,_scoplp,0b /* if set scope loop on error */
409: movl $1,_ercode /* error code data miscompare */
410: movl 36(sp),_actual /* actual data */
411: movl $0xb,_expected /* expected data */
412: jmp *badrtn
413: 1: cmpl 40(sp),$0xc
414: jeql 1f
415: bbs $0,_scoplp,0b /* if set scope loop on error */
416: movl $1,_ercode /* error code data miscompare */
417: movl 40(sp),_actual /* actual data */
418: movl $0xc,_expected /* expected data */
419: jmp *badrtn
420:
421: /* all checked out */
422: 1: movl $0,r2 /* zero out r2 - r12 */
423: movl r2,r3
424: movl r2,r4
425: movl r2,r5
426: movl r2,r6
427: movl r2,r7
428: movl r2,r8
429: movl r2,r9
430: movl r2,r10
431: movl r2,r11
432: movl r2,r12
433: bicpsw $(N|Z|V|C) /* clear all flags */
434: ret /* TESTING RET ..... */
435: /* RET does not work */
436: bbs $0,_scoplp,0b /* if set scope loop on error */
437: jmp *badrtn
438:
439:
440:
441: /* PROCEDURE 2 */
442: .align 2
443: proc2:
444: .word 0 /* entry mask */
445: jgeq error5 /* error if n,v flag clear */
446: jvc error5
447: jeql error5 /* error if z,c flag set */
448: jcs error5
449: jmp 1f
450: error5: movpsl _actual /* actual data */
451: bbs $0,_scoplp,0b /* if set scope loop on error */
452: movl $2,_ercode /* error code flag failure */
453: jmp *badrtn
454: 1: movab (r14),astk
455: cmpl astk,estk /* check if sp get decrement */
456: jeql 1f
457: bbs $0,_scoplp,0b /* if set scope loop on error */
458: movl $1,_ercode /* error code data miscompare */
459: movl astk,_actual /* actual data */
460: movl estk,_expected /* expected data */
461: jmp *badrtn
462: 1: cmpl fp,efp /* check if fp get decrement properly */
463: jeql 1f
464: bbs $0,_scoplp,0b /* if set scope loop on error */
465: movl $1,_ercode /* error code data miscompare */
466: movl fp,_actual /* actual data */
467: movl efp,_expected /* expected data */
468: jmp *badrtn
469: 1: cmpl (fp),bfp /* check previous fp saved on stack */
470: jeql 1f
471: bbs $0,_scoplp,0b /* if set scope loop on error */
472: movl $1,_ercode /* error code data miscompare */
473: movl (fp),_actual /* actual data */
474: movl bfp,_expected /* expected data */
475: jmp *badrtn
476: 1: movl fp,temp0
477: subl2 $4,temp0
478: movl *(temp0),temp0 /* get mask/argument longword from stack */
479: movl $MASK2,temp1
480: shll $16,temp1,temp1
481: addl2 $(4*NOARG2+4),temp1
482: cmpl temp0,temp1 /* check mask/argnum longword */
483: jeql 1f
484: bbs $0,_scoplp,0b /* if set scope loop on error */
485: movl $1,_ercode /* error code data miscompare */
486: movl temp0,_actual /* actual data */
487: movl temp1,_expected /* expected data */
488: jmp *badrtn
489: 1: cmpl -8(fp),prevpc2 /* check saved PC on the stack */
490: jeql 1f
491: bbs $0,_scoplp,0b /* if set scope loop on error */
492: movl $1,_ercode /* error code data miscompare */
493: movl -8(fp),_actual /* actual data */
494: movl prevpc2,_expected /* expected data */
495: jmp *badrtn
496: 1: cmpl (sp),$3 /* check saved r3,5,7,9,11 saved on stack */
497: jeql 1f
498: bbs $0,_scoplp,0b /* if set scope loop on error */
499: movl $1,_ercode /* error code data miscompare */
500: movl (sp),_actual /* actual data */
501: movl $0x3,_expected /* expected data */
502: jmp *badrtn
503: 1: cmpl 4(sp),$5
504: jeql 1f
505: bbs $0,_scoplp,0b /* if set scope loop on error */
506: movl $1,_ercode /* error code data miscompare */
507: movl 4(sp),_actual /* actual data */
508: movl $0x5,_expected /* expected data */
509: jmp *badrtn
510: 1: cmpl 8(sp),$7
511: jeql 1f
512: bbs $0,_scoplp,0b /* if set scope loop on error */
513: movl $1,_ercode /* error code data miscompare */
514: movl 8(sp),_actual /* actual data */
515: movl $0x7,_expected /* expected data */
516: jmp *badrtn
517: 1: cmpl 12(sp),$9
518: jeql 1f
519: bbs $0,_scoplp,0b /* if set scope loop on error */
520: movl $1,_ercode /* error code data miscompare */
521: movl 19(sp),_actual /* actual data */
522: movl $0x9,_expected /* expected data */
523: jmp *badrtn
524: 1: cmpl 16(sp),$0xb
525: jeql 1f
526: bbs $0,_scoplp,0b /* if set scope loop on error */
527: movl $1,_ercode /* error code data miscompare */
528: movl 16(sp),_actual /* actual data */
529: movl $0xb,_expected /* expected data */
530: jmp *badrtn
531: /* all checked out */
532: 1: movl $0,r3 /* zero out r3,5,7,9,11 */
533: movl $0,r5
534: movl $0,r7
535: movl $0,r9
536: movl $0,r11
537: bispsw $(Z|C) /* set z,c flags */
538: bicpsw $(N|V) /* clear n,v flags */
539: ret /* TESTING RET */
540: nop /* ret does not work !!! */
541: error6: movpsl _actual /* actual data */
542: bbs $0,_scoplp,0b /* if set scope loop on error */
543: movl $1,_ercode /* error code data miscompare */
544: jmp *badrtn
545:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.