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

/*	PUSHAB 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	MAXPOSW,0x7fff
	.set	MAXNEGL,0x8000ffff
	.set	HIGH,31			/* highest interrupt priority	*/
	.set	DISP,2
	.set	LONG,4
	.set 	WORD,2
	.set	BYTE,1

	.globl	_pushab
_pushab:
	callf	$4,_setjmp	/* save context for error return	*/
	movab	_pushab,_stpc	/* save subtest starting address 	*/
	movl	$1,_subtst	/* subtest number			*/
	movl	$1,_no_opr	/* number of operands in use		*/
	movab	tstloc,_opr	/* first operand			*/
0:	bicpsw	$(IV|T)			/* disable exceptions		*/
/*									*/
pshab:
/*			        MOVE ADDRESS FROM MEMORY TO STACK(R14)	*/
	movab	stk,r14			/* initialize stack		*/
	movab	stk,r10
	bispsw	$(N|Z|V	)		/* set n,z,v flags		*/
	bicpsw  $Z
	pushab  tstloc  		/* push address tstloc on stack	*/
	jlss	error1			/* error if any of the n,z,v	*/
	jeql	error1			/* flags still set		*/
	jvs	error1	
	jcc	error1			/* error if c flag clear	*/
	jmp	1f
error1:	movpsl	_actual		/* actual = psl MAYBE incorrect		*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$2,_ercode	/* error code flag failure		*/
	jmp	*badrtn
1:	cmpl	(r14),result		/* check if stack has valid adr	*/
	jeql	1f		/* no error then continue		*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$1,_ercode	/* error code data miscompare		*/
	movl	(r14),_actual	/* actual data */
	movl	result,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	movab   (r14),r13
	decl	r10
	decl	r10
	decl	r10
	decl	r10
	cmpl	r10,r13			/* check if stack get decrement	*/
	jeql	p2		/* if no error continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$1,_ercode	/* error code data miscompare		*/
	movl	r10,_actual	/* actual data */
	movl	r13,_expected	/* expected data */
	jmp	*badrtn
/*				MOVE ADDRESS FROM REGISTER TO STACK	*/
p2:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest		*/
ap2:	callf	$4,_setjmp	/* save context for error return	*/
	movab	ap2,_stpc	/* save subtest starting address 	*/
	movl	$2,_subtst	/* subtest number			*/
	movl	$1,_no_opr	/* number of operands in use		*/
	movl	result,_opr	/* first operand			*/
0:	movl	result,r12		/* set r12 = address of tstloc	*/
	pushab  (r12)			/* push address in r12 on stack	*/
	cmpl	(r14),result		/* compare result		*/
	jeql	1f		/* no error then continue		*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$1,_ercode	/* error code data miscompare		*/
	movl	(r14),_actual	/* actual data */
	movl	result,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	movab	(r14),r13
	decl	r10
	decl	r10
	decl	r10
	decl	r10
	cmpl	r10,r13			/* check if stack get decrement	*/
	jeql	chkflag		/* no error then continue		*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$1,_ercode	/* error code data miscompare		*/
	movl	r10,_actual	/* actual data */
	movl	r13,_expected	/* expected data */
	jmp	*badrtn
/*				TESTING CONDITION FLAGS			*/
chkflag:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest		*/
ap3:	callf	$4,_setjmp	/* save context for error return	*/
	movab	ap3,_stpc	/* save subtest starting address 	*/
	movl	$3,_subtst	/* subtest number			*/
	movl	$1,_no_opr	/* number of operands in use		*/
	movl	$MAXNEGL,_opr	/* first operand			*/
0:	movl	$MAXNEGL,r13		/* set r13 = $MAXNEGL		*/
	bispsw	$(Z|V)			/* set z,v flags		*/
	bicpsw	$(C|N)			/* clear n,c flag		*/
	pushab	(r13)			/* push adr. in r13 on stack 	*/
	jgeq	error2			/* error if n flag clear	*/
	jcc	error2			/* error if c flag clear	*/
	jeql	error2			/* error if z flag still set	*/
	jvs	error2			/* error if v flag still set	*/
	jmp	1f
error2:	movpsl	_actual		/* actual = psl MAYBE incorrect		*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$2,_ercode	/* error code flag failure		*/
	jmp	*badrtn
1:	cmpl	(r14),$MAXNEGL		/* check address in temp	*/
	jeql	p4		/* no error then continue		*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$1,_ercode	/* error code data miscompare		*/
	movl	r10,_actual	/* actual data */
	movl	r13,_expected	/* expected data */
	jmp	*badrtn

p4:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest		*/
ap4:	callf	$4,_setjmp	/* save context for error return	*/
	movab	ap4,_stpc	/* save subtest starting address 	*/
	movl	$4,_subtst	/* subtest number			*/
	movl	$1,_no_opr	/* number of operands in use		*/
	movl	$0,_opr		/* first operand			*/
0:	movl	$0,r11			/* set r11 = $0			*/
	bispsw	$(N|V)			/* set n,v flags		*/
	bicpsw	$(Z|C)			/* clear z,c flag		*/
	pushab	(r11)			/* push adr. in r11 on stack    */
	jcc	error3			/* error if c flag clear	*/
	jneq	error3			/* error if z flag clear	*/
	jlss	error3			/* error if n flag still set	*/
	jvs	error3			/* error if v flag still set	*/
	jmp	1f
error3:	movpsl	_actual		/* actual = psl MAYBE incorrect		*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$2,_ercode	/* error code flag failure		*/
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	(r14),$0		/* check address in temp	*/
	jeql	p5		/* no error then continue		*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$1,_ercode	/* error code data miscompare		*/
	movl	(r14),_actual	/* actual data */
	movl	$0,_expected	/* expected data */
	jmp	*badrtn
/*				CHECKING INDEXING MODE			*/
p5:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest		*/
ap5:	callf	$4,_setjmp	/* save context for error return	*/
	movab	ap5,_stpc	/* save subtest starting address 	*/
	movl	$5,_subtst	/* subtest number			*/
	movl	$1,_no_opr	/* number of operands in use		*/
	movl	tstloc,_opr	/* first operand			*/
0:	movl	$DISP,r0		/* set r0 = DISP = 2		*/
	bispsw	$(N|Z|V)		/* set n,z,v flags		*/
	bicpsw  $Z
	pushab  tstloc[r0]		/* move address tstloc on stack */
	jlss	error4			/* error if any of the n,z,v	*/
	jeql	error4			/* flags still set		*/
	jvs	error4	
	jcc	error4			/* error if c flag clear	*/
	jmp	1f
error4:	movpsl	_actual		/* actual = psl MAYBE incorrect		*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$2,_ercode	/* error code flag failure		*/
	jmp	*badrtn
1:	cmpl	(r14),resul1		/* check if stack has valid adr	*/
	jeql	aldn		/* no error then continue		*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$1,_ercode	/* error code data miscompare		*/
	movl	(r14),_actual	/* actual data */
	movl	$0,_expected	/* expected data */
	jmp	*badrtn


aldn:	bbs	$0,_force_lp,0b	/* if set loop on last subtest		*/
	jmp	*return		/* good, return to monitor */


/*	test data							*/
	.align	2			/* align on longword boundery	*/
/*	STACK SPACE							*/
	.space	40			/* 10 long words for stack	*/
stk:	.long	0
tstloc:	.long	0
result:	.long	tstloc
resul1:	.long	tstloc+(DISP*BYTE)

unix.superglobalmegacorp.com

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