File:  [Power 6/32 Unix Tahoe 4.2BSD] / cci / d / entry / pushb.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

/*	PUSHB 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    NEGB,0xffffff80
	.set	MAXNEGB,0x80ffffff
	.set	HIGH,31			/* highest interrupt priority	*/

	.globl	_pushbt
_pushbt:
	callf	$4,_setjmp	/* save context for error return */
	movab	_pushbt,_stpc	/* starting address of subtest */
	movl	$1,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$NEGB,_opr	/* first operand */
0:	bicpsw	$(IV|T)		/* disable exceptions		*/
/*								*/
pushmw:				/* PUSH MEMORY ON STACK		*/
	movab	stk,r14		/* initialize stack pointer	*/
	movab   stk,r10
	bispsw	$(Z|V)		/* set z,v flags     	   	*/
	bicpsw  $(C|N)		/* clear c,n flag		*/
	pushb	negval		/* push negative value on stack	*/
	jgeq	error1		/* error if n flag not set	*/
	jcc	error1		/* error if c flag not set	*/
	jeql	error1		/* error if z flag set		*/
	jvs	error1		/* error if v flag set  	*/
	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 miscompare */
	jmp	*badrtn
1:	movab   (r14),r13
	decl	r10
	decl	r10
	decl	r10
	decl	r10
	cmpl	r13,r10		/* check if stack get decrement	*/
	jeql	1f
	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
1:	bicpsw	$Z
	cmpl	$NEGB,(r14)	/* check if value get put on stack	*/
	jeql	1f
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	(r14),_actual	/* actual data */
	movl	$NEGB,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw	$Z
	cmpl	negval,$MAXNEGB	/* check if source get affected	*/
	jeql	p2
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	negval,_actual	/* actual data */
	movl	$MAXNEGB,_expected	/* expected data */
	jmp	*badrtn

p2:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
ap2:	callf	$4,_setjmp	/* save context for error return */
	movab	_pushbt,_stpc	/* starting address of subtest */
	movl	$2,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	result,_opr	/* first operand */
0:	bispsw	$(Z|V|N)	/* set z,v,n flags     	   	*/
	bicpsw  $C		/* clear c flag			*/
	pushb	posval
	jcc	error2		/* error if c flag not set	*/
	jlss	error2		/* error if n flag set		*/
	jeql	error2		/* error if z flag set		*/
	jvs	error2		/* error if v flag 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 miscompare */
	jmp	*badrtn
1:	movab   (r14),r13
	decl	r10
	decl	r10
	decl	r10
	decl	r10
1:	cmpl	r13,r10		/* check if stack get decrement	*/
	jeql	1f
	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
1:	bicpsw	$Z
	cmpl	result,(r14)	/* check if value get put on stack	*/
	jeql	1f
	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
	cmpl	posval,$0x7faaaaaa	/* check if source get affected	*/
	jeql	pushrw
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	posval,_actual	/* actual data */
	movl	$0x7faaaaaa,_expected	/* expected data */
	jmp	*badrtn
pushrw:				/* PUSH REGISTER ON STACK	*/
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
ap3:	callf	$4,_setjmp	/* save context for error return */
	movab	ap3,_stpc	/* starting address of subtest */
	movl	$3,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	tstdat,_opr	/* first operand */
0:	movl	tstdat,r0	/* move test data to r0		*/
	bispsw	$(Z|V)		/* set z,v flags		*/
	bicpsw	$(C|N)		/* clear n,c flag		*/
	pushb	r0		/* push r0 on stack		*/
	jgeq	error3		/* error if n flag not set	*/
	jeql	error3		/* error if z flag set		*/
	jvs	error3		/* error if v flag set  	*/
	jcc	error3		/* error if c flag not 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 miscompare */
	jmp	*badrtn
1:	movab   (r14),r13
	decl	r10
	decl	r10
	decl	r10
	decl	r10
	cmpl	r13,r10		/* check if stack get decrement	*/
	jeql	1f
	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
1:	bicpsw	$Z
	cmpl	tstdat,(r14)	/* check if value get pushed	*/
	jeql	1f
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	(r14),_actual	/* actual data */
	movl	tstdat,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	r0,tstdat	/* make sure source unchanged   */
	jeql	zflag
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	tstdat,_actual	/* actual data */
	movl	r0,_expected	/* expected data */
	jmp	*badrtn
zflag:				/* check z flag			*/
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
ap4:	callf	$4,_setjmp	/* save context for error return */
	movab	ap4,_stpc	/* starting address of subtest */
	movl	$4,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$0,_opr	/* first operand */
0:	movl 	$0x0,r11 
	bispsw	$(N|V)		/* set n,v flags		*/
	bicpsw	$(C|Z)		/* clear z,c flag		*/
	pushb	r11		/* push r11 on stack		*/
	jlss	error4		/* error if n flag set		*/
	jvs	error4		/* error if v flag set  	*/
	jneq	error4		/* error if z flag not set	*/
	jcc	error4		/* error if c flag not set	*/
	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 miscompare */
	jmp	*badrtn
1:	movab	(r14),r13
	decl	r10	
	decl	r10	
	decl	r10	
	decl	r10	
	cmpl	r13,r10		/* check if stack get decrement	*/
	jeql	1f
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r13,_actual	/* actual data */
	movl	r10,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw	$Z
	cmpl 	$0,(r14)	/* compare r14 to 0		*/
	jeql	1f
	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
1:	bicpsw	$Z
	cmpl	$0,r11		/* compare source to 0		*/
	jeql	p5
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	r11,_actual	/* actual data */
	movl	$0,_expected	/* expected data */
	jmp	*badrtn


p5:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
ap5:	callf	$4,_setjmp	/* save context for error return */
	movab	ap5,_stpc	/* starting address of subtest */
	movl	$5,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$0x11,_opr	/* first operand */
0:	bispsw	$(N|V)		/* set n,v flags		*/
	bicpsw	$(C|Z)		/* clear z,c flag		*/
	pushb	$0x11		/* push literal		*/
	jlss	error5		/* error if n flag set		*/
	jvs	error5		/* error if v flag set  	*/
	jeql	error5		/* error if z flag set	*/
	jcc	error5		/* error if c flag not set	*/
	jmp	1f
error5:	movpsl	_actual		/* actual = psl maybe incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag miscompare */
	jmp	*badrtn
1:	movab	(r14),r13
	decl	r10	
	decl	r10	
	decl	r10	
	decl	r10	
	cmpl	r13,r10		/* check if stack get decrement	*/
	jeql	1f
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r13,_actual	/* actual data */
	movl	r10,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw	$Z
	cmpl 	$0x11,(r14)	/* compare r14 to literal	*/
	jeql	aldn
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	(r14),_actual	/* actual data */
	movl	$0x11,_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
/*	stack			*/
	.space	40
stk:	.long	0
negval:	.long	MAXNEGB 
tstdat: .long	0xffffff7a
posval: .long   0x7faaaaaa
result: .long   0x7f

unix.superglobalmegacorp.com

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