File:  [Power 6/32 Unix Tahoe 4.2BSD] / cci / d / entry / callf.s
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Sun Jul 28 12:24:19 2019 UTC (7 years ago) by root
Branches: bsd, MAIN
CVS tags: v12b, v121, HEAD
Power 6/32 Unix version 1.2b

/*	CALLF RET instruction test		*/
/*	  Privilege registers		*/

	.set	IPL,8
	.set	MAPEN,9
	.set	KSP,19

/*	  PSL fields			*/
	.set	IV,32
	.set 	T,16
	.set	N,8
	.set	Z,4
	.set	V,2
	.set	C,1

/*	  constants			*/
	.set	DISABLE,0
	.set 	ENABLE,1
	.set	HIGH,31			/* highest interrupt priority	*/

	.set 	NOARG1,3
	.set 	NOARG2,2
	.set	ARG1,0xf
	.set	ARG2,0xff
	.set	ARG3,0xfff
	.set	R0_12,0x3fff		/* mask to save r0 thru r12	*/
	.set	R2_12,0x1ffc		/* mask to save r2 thru r12	*/
	.set	R357911,0xaa8		/* mask to save r3,r5,r7,r9,r11 */
	.set	MASK1,R2_12		/* save r2-r12 */
	.set	MASK2,R357911  		/* save r3,5,7,9,11 */


	.globl	_callfx
_callfx:
	bicpsw	$(IV|T)		/* disable exceptions		*/
/*								*/
strt:
	callf	$4,_setjmp	/* save context for error return */
	movab	strt,_stpc	/* save subtest address */
	movl	$1,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$NOARG1,_opr	/* first operand */
	movl	$MASK1,_opr + 4	/* second operand */
0:	movab	stkbase,sp	/* init. stack pointer			*/
	movab	stkbase,fp	/* init. frame pointer			*/
	movl	fp,bfp		/* save fp				*/
	movw	$MASK1,proc1	/* set entry mask in called procedure	*/
	pushl	$ARG1
	pushl	$ARG2
	pushl	$ARG3		/* push 3 arguments on stacks		*/
	movl	$2,r2		/* initialize r2 - r12			*/
	movl	$3,r3
	movl	$4,r4
	movl	$5,r5
	movl	$6,r6
	movl	$7,r7
	movl	$0x8,r8
	movl	$0x9,r9
	movl	$0xa,r10
	movl	$0xb,r11
	movl	$0xc,r12
	movab	(r14),estk	/* save sp				*/
/* 	compute expected sp after  callf	*/
	subl2	$(3*4),estk	/* Space for fp,MASK,PC 		*/
	subl2	$(11*4),estk	/* Space for r2-r12			*/
/* 	compute expected fp after  callf	*/
	movl	fp,efp
	subl2   $(4*4),efp
	bicpsw	$(N|Z|V|C)	/* clear all flags			*/
	bispsw	$(N|V|C)	/* set all flags			*/
	callf	$(4*NOARG1+4),proc1	/* call procedure with 3 arguments */
retcall1:
	blss	error1		/* error if any of the n,z,v,c flags set */
	beql	error1
	bvs	error1
	bcs	error1
	jmp	1f
error1:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b
	movl	$2,_ercode	/* error code flag miscompare */
	jmp	*badrtn
1:	cmpl	r2,$2		/* check if r2 - r12 get restored properly */
	beql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	r2,_actual	/* actual data */
	movl	$2,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	r3,$3
	beql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	r3,_actual	/* actual data */
	movl	$3,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	r4,$4
	beql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	r4,_actual	/* actual data */
	movl	$4,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	r5,$5
	beql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	r5,_actual	/* actual data */
	movl	$5,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	r6,$6
	beql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	r6,_actual	/* actual data */
	movl	$6,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	r7,$7
	beql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	r7,_actual	/* actual data */
	movl	$7,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	r8,$0x8
	beql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	r8,_actual	/* actual data */
	movl	$8,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	r9,$0x9
	beql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	r9,_actual	/* actual data */
	movl	$9,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	r10,$0xa
	beql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	r10,_actual	/* actual data */
	movl	$0xa,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	r11,$0xb
	beql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	r11,_actual	/* actual data */
	movl	$0xb,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	r12,$0xc
	beql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	r11,_actual	/* actual data */
	movl	$0xc,_expected	/* expected data */
	jmp	*badrtn
1:	movab	(r14),r0
	cmpl	r0,bfp		/* check if sp,fp get restored properly	*/
	beql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	r0,_actual	/* actual data */
	movl	bfp,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	fp,bfp
	beql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	fp,_actual	/* actual data */
	movl	bfp,_expected	/* expected data */
	jmp	*badrtn
1:	jmp	callp2		/* call procedure no. 2			*/


callp2:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
c2:	callf	$4,_setjmp	/* save context for error return */
	movab	c2,_stpc	/* save subtest address */
	movl	$2,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$NOARG2,_opr	/* first operand */
	movl	$MASK2,_opr + 4	/* second operand */
0:	movw	$MASK2,proc2	/* set entry mask in called procedure	*/
	pushl	$ARG1
	pushl	$ARG2
	movl	$3,r3		/* init. r3,r5,r7,r9,r11		*/
	movl	$5,r5
	movl	$7,r7
	movl	$0x9,r9
	movl	$0xb,r11
	movab	(r14),estk	/* save sp				*/
/* 	compute expected sp after  callf	*/
	subl2	$(3*4),estk	/* Space for fp,MASK,PC 		*/
	subl2	$(5*4),estk	/* Space for r3,5,7,9,11		*/ 
/* 	compute expected fp after  callf	*/
	movl	fp,efp
	subl2   $(3*4),efp
	movab	proc2,r12
	movl	$(NOARG2*4+4),r6	/* load reg with argument data  */
	bispsw	$(N|V)		/* set n,v flags			*/
	bicpsw	$(Z|C)		/* clear z,c flags			*/
	callf	$(NOARG2*4+4),proc2	/* cll procedure with 2 argu	*/
retcall2:
	jneq	error2		/* error if z,c flags clear		*/
	jcc	error2
	jlss	error2		/* error if n,v flags set		*/
	jvs	error2
	jmp	1f
error2:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b
	movl	$2,_ercode	/* error code flag miscompare */
	jmp	*badrtn
1:	cmpl	r3,$3		/* check if r3,5,7,9,11 restored properly */
	beql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	r3,_actual	/* actual data */
	movl	$3,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	r5,$5
	beql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	r5,_actual	/* actual data */
	movl	$5,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	r7,$7
	beql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	r7,_actual	/* actual data */
	movl	$7,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	r9,$0x9
	beql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	r9,_actual	/* actual data */
	movl	$0x9,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	r11,$0xb
	beql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	r11,_actual	/* actual data */
	movl	$0xb,_expected	/* expected data */
	jmp	*badrtn
1:	movab	(r14),r0
	cmpl	r0,bfp		/* check if sp,fp restored properly	*/
	beql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	r0,_actual	/* actual data */
	movl	bfp,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	fp,bfp
	beql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	fp,_actual	/* actual data */
	movl	bfp,_expected	/* expected data */
	jmp	*badrtn
1:	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
	jmp	*return


/*	TEST DATA		*/
	.align	2
stack:
	.space	400		/* 400 bytes for the stack	*/
stkbase:
	.long	0
prevpc1:
	.long	retcall1
prevpc2:
	.long	retcall2
prono:
	.long	0		/* current procedure called : 1/2 */
astk:
	.long   0		/* actual sp after callf 	  */
estk:
	.long   0		/* expected sp after callf 	  */
efp:	.long   0		/* expected fp after callf 	  */
bfp:	.long	0		/* fp before callf		  */

temp0:	.long	0
temp1:	.long	0

/*	PROCEDURE 1		*/
proc1:
	.word	0		/* entry mask				*/
	jgeq	err1		/* error if any of n,v,c flag clear	*/
	jeql	err1
	jvc	err1
	jcc	err1
	jmp	1f
err1:	movpsl	_actual		/* actal psl MAYBE it is incorrect */
	bbs	$0,_scoplp,0b
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	movab	(r14),astk
	cmpl	astk,estk	/* check if sp decremented properly 	*/
	jeql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	astk,_actual	/* actual data */
	movl	estk,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	fp,efp		/* check if fp decrmented properly	*/
	jeql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	fp,_actual	/* actual data */
	movl	efp,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	(fp),bfp	/* check previous fp saved on the stack	*/
	jeql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	(fp),_actual	/* actual data */
	movl	bfp,_expected	/* expected data */
	jmp	*badrtn
1:	movl	fp,temp0
	subl2	$4,temp0
	movl	*(temp0),temp0	/* get mask/argument longword from stack */
	movl	$MASK1,temp1
	shll	$16,temp1,temp1
	addl2   $(4*NOARG1+4),temp1
	cmpl	temp0,temp1	/* check mask/argnum longword		*/
	jeql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	temp0,_actual	/* actual data */
	movl	temp1,_expected	/* expected data */
	jmp	*badrtn
	cmpl	-8(fp),prevpc1	/* check saved PC on the stack		*/
	jeql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	-8(fp),_actual	/* actual data */
	movl	prevpc1,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	(sp),$2		/* check saved r2 - r12 on stack	*/
	jeql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	(sp),_actual	/* actual data */
	movl	$2,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	4(sp),$3
	jeql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	4(sp),_actual	/* actual data */
	movl	$3,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	8(sp),$4
	jeql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	8(sp),_actual	/* actual data */
	movl	$4,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	12(sp),$5
	jeql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	12(sp),_actual	/* actual data */
	movl	$5,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	16(sp),$6
	jeql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	16(sp),_actual	/* actual data */
	movl	$6,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	20(sp),$7
	jeql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	20(sp),_actual	/* actual data */
	movl	$7,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	24(sp),$0x8
	jeql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	24(sp),_actual	/* actual data */
	movl	$8,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	28(sp),$0x9
	jeql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	28(sp),_actual	/* actual data */
	movl	$9,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	32(sp),$0xa
	jeql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	32(sp),_actual	/* actual data */
	movl	$0xa,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	36(sp),$0xb
	jeql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	36(sp),_actual	/* actual data */
	movl	$0xb,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	40(sp),$0xc
	jeql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	40(sp),_actual	/* actual data */
	movl	$0xc,_expected	/* expected data */
	jmp	*badrtn

/*	all checked out		*/
1:	movl	$0,r2		/* zero out r2 - r12			*/
	movl	r2,r3
	movl	r2,r4
	movl	r2,r5
	movl	r2,r6
	movl	r2,r7
	movl	r2,r8
	movl	r2,r9
	movl	r2,r10
	movl	r2,r11
	movl	r2,r12
	bicpsw	$(N|Z|V|C)	/* clear all flags 			*/
	ret			/* TESTING RET .....			*/
	bbs	$0,_scoplp,0b
	movl	$3,_ercode	/* error code operand was modified did not ret*/
	jmp	*badrtn


/*	PROCEDURE 2		*/
	.align	2
proc2:
	.word	0		/* entry mask				*/
	jgeq	error4		/* error if n,v flag clear		*/
	jvc	error4
	jeql	error4		/* error if z,c flag set		*/
	jcs	error4
	jmp	1f
error4: movpsl	_actual		/* actal psl MAYBE it is incorrect */
	bbs	$0,_scoplp,0b
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	movab	(r14),astk
	cmpl	astk,estk	/* check if sp get decrement	 	*/
	jeql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	astk,_actual	/* actual data */
	movl	estk,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	fp,efp 		/* check if fp get decrement properly	*/
	jeql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	fp,_actual	/* actual data */
	movl	efp,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	(fp),bfp	/* check previous fp saved on stack	*/
	jeql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	(fp),_actual	/* actual data */
	movl	bfp,_expected	/* expected data */
	jmp	*badrtn

1:	movl	fp,temp0
	subl2	$4,temp0
	movl	*(temp0),temp0	/* get mask/argument longword from stack */
	movl	$MASK2,temp1
	shll	$16,temp1,temp1
	addl2   $(4*NOARG2+4),temp1
1:	cmpl	temp0,temp1	/* check mask/argnum longword		*/
	jeql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	temp0,_actual	/* actual data */
	movl	temp1,_expected	/* expected data */
	jmp	*badrtn
	cmpl	-8(fp),prevpc2	/* check saved PC on the stack		*/
	jeql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	-8(fp),_actual	/* actual data */
	movl	prevpc2,_expected	/* expected data */
	jmp	*badrtn

1:	cmpl	(sp),$3		/* check saved r3,5,7,9,11 saved on stack */
	jeql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	(sp),_actual	/* actual data */
	movl	$0x3,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	4(sp),$5
	jeql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	4(sp),_actual	/* actual data */
	movl	$0x5,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	8(sp),$7
	jeql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	8(sp),_actual	/* actual data */
	movl	$0x7,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	12(sp),$9
	jeql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	12(sp),_actual	/* actual data */
	movl	$0x9,_expected	/* expected data */
	jmp	*badrtn
1:	cmpl	16(sp),$0xb
	jeql	1f
	bbs	$0,_scoplp,0b
	movl	$1,_ercode	/* error code data miscompare */
	movl	16(sp),_actual	/* actual data */
	movl	$0xb,_expected	/* expected data */
	jmp	*badrtn
/*	all checked out		*/
1:	movl	$0,r3		/* zero out r3,5,7,9,11			*/
	movl	$0,r5
	movl	$0,r7
	movl	$0,r9
	movl	$0,r11
	bispsw	$(Z|C)		/* set z,c flags			*/
	bicpsw	$(N|V)		/* clear n,v flags			*/
	ret			/* TESTING RET				*/


unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.