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


/*		BITW (bit word) test					*/
/*									*/
/*Test name = bitw							*/
/*Description =								*/
/*	This test checks 'bitw' instruction as follows:			*/
/*	source		mask		N Z V C (flags)			*/
/*	______		____		______________			*/
/*	0xaa		0x55		0 1 0 1				*/
/*	0x55		0xaa		0 1 0 1				*/
/*	0x80		0x80		0 0 0 1				*/
/*	 R		 M		  ---				*/
/*	 M		 R		  ---				*/
/*									*/

/*									*/
/*	Constants definition for 'bit_x' tests				*/
/*									*/
	.set	SRCB1,0xaa
	.set	SRCW1,0xaaaa
	.set	SRCL1,0xaaaaaaaa
	.set	MASKB1,0x55
	.set	MASKW1,0x5555
	.set	MASKL1,0x55555555
	.set	SRCB2,MASKB1
	.set	SRCW2,MASKW1
	.set	SRCL2,MASKL1
	.set	MASKB2,SRCB1
	.set	MASKW2,SRCW1
	.set	MASKL2,SRCL1
	.set	SRCB3,0x80
	.set	SRCW3,0x8000
	.set	SRCL3,0x80000000
	.set	MASKB3,SRCB3
	.set	MASKW3,SRCW3
	.set	MASKL3,SRCL3
/*									*/
/*	Syst.s - Constants						*/
/*									*/
	.set	IPL,8
	.set	HIGH,31
	.set	ZERO,0
	.set	ONES,0xffffffff
	.set	N,8
	.set	Z,4
	.set	V,2
	.set	C,1
	.set	T,16
	.set	IV,32
	.set	FU,64
	.set	DV,128
	.set	PSWMASK,0x003f

	.globl	_bit_w
_bit_w:
	callf	$4,_setjmp	/* save context for return from error */
	movab	_bit_w,_stpc	/* save address of subtest */
	movl	$1,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASKW1,_opr	/* first operand */
	movl	$SRCW1,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*clear overflow enable			*/
	movl	$SRCW1,r4	/*r4 = source				*/
	movl	$MASKW1,tloc	/*tloc = mask				*/
	bispsw	$(N|V|C)	/*neg,overflow, & carry ON		*/
	bitw	tloc+2,r4	/*tloc AND r4 mem to reg		*/
	bneq	error1		/*error if Z = 0			*/
	blss	error1		/*error if N =1				*/
	bvs	error1		/*error if V = 1			*/
	bcc	error1		/*error if C = 0			*/
	jmp	1f
error1:	movpsl	_actual		/* actual psl MAYBE it is incorrect	*/
	bbs	$0,_scoplp,0b	/* if set loop on error			*/
	movl	$2,_ercode	/* error code flag failure		*/
	jmp	*badrtn
1:	cmpl	$SRCW1,r4	/*check source & mask are unchanged	*/
	beql	1f		/*error - source changed		*/
	bbs	$0,_scoplp,0b	/* if set loop on error			*/
	movl	$3,_ercode	/* error code operand was modified */
	movl	r4,_actual	/* actual data */
	movl	$SRCW1,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw	$Z		/*clear Z flag				*/
	cmpl	$MASKW1,tloc	/*					*/
	beql	t2		/* if correct then continue */
	bbs	$0,_scoplp,0b	/* if set loop on error			*/
	movl	$3,_ercode	/* error code operand was modified */
	movl	tloc,_actual	/* actual data */
	movl	$MASKW1,_expected	/* expected data */
	jmp	*badrtn

/*	Now use different patterns for source & mask			*/

t2:	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
st2:	callf	$4,_setjmp	/* save context for return from error */
	movab	st2,_stpc	/* save address of subtest */
	movl	$2,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASKW2,_opr	/* first operand */
	movl	$SRCW2,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*clear overflow enable			*/
	movl	$SRCW2,tloc	/*r1 = source				*/
	movl	$MASKW2,r3	/*tloc = mask data to memory		*/
	bispsw	$(N|V|C)	/*neg,overflow, & carry ON		*/
	bitw	r3,tloc+2	/*r3 AND tloc	reg to memory		*/
	bneq	error2		/*error if Z = 0			*/
	blss	error2		/*error if N =1				*/
	bvs	error2		/*error if V = 1			*/
	bcc	error2		/*error if C = 0			*/
	jmp	t3
error2:	movpsl	_actual		/* actual psl MAYBE it is incorrect	*/
	bbs	$0,_scoplp,0b	/* if set loop on error			*/
	movl	$2,_ercode	/* error code flag failure		*/
	jmp	*badrtn

/*	Yet another patterns for source & mask				*/

t3:	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
st3:	callf	$4,_setjmp	/* save context for return from error */
	movab	st3,_stpc	/* save address of subtest */
	movl	$3,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASKW3,_opr	/* first operand */
	movl	$SRCW3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*clear overflow enable			*/
	movl	$SRCW3,r4	/*r4 = source				*/
	movl	$MASKW3,r3	/*r3 = mask				*/
	bispsw	$(Z|V)	 	/*zero, & overflow ON			*/
	bitw	r3,r4		/* r3 AND r4 register to register	*/
	beql	error3		/*error if Z = 1			*/
	blss	error3		/*error if N =1				*/
	bvs	error3		/*error if V = 1			*/
	bcc	error3		/*error if C = 0			*/
	jmp	bitwm
	jmp	t3
error3:	movpsl	_actual		/* actual psl MAYBE it is incorrect	*/
	bbs	$0,_scoplp,0b	/* if set loop on error			*/
	movl	$2,_ercode	/* error code flag failure		*/
	jmp	*badrtn

	
/*									*/
/*	Repeat the above with source = M, & mask = R			*/
/*									*/

bitwm:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
st4:	callf	$4,_setjmp	/* save context for return from error */
	movab	st4,_stpc	/* save address of subtest */
	movl	$4,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASKW1,_opr	/* first operand */
	movl	$SRCW1,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*clear overflow enable			*/
	movl	$MASKW1,r3	/*r3 = mask				*/
	bispsw	$(N|V|C)	/*neg,overflow, & carry ON		*/
	bitw	r3,$SRCW1	/*r3 AND $SRCW1 reg to data		*/
	bneq	error4		/*error if Z = 0			*/
	blss	error4		/*error if N =1				*/
	bvs	error4		/*error if V = 1			*/
	bcc	error4		/*error if C = 0			*/
	jmp	1f
error4:	movpsl	_actual		/* actual psl MAYBE it is incorrect	*/
	bbs	$0,_scoplp,0b	/* if set loop on error			*/
	movl	$2,_ercode	/* error code flag failure		*/
	jmp	*badrtn
1:	bicpsw	$Z		/*clear Z flag				*/
	cmpl	$MASKW1,r3
	beql	t5		/*error - mask changed			*/
	bbs	$0,_scoplp,0b	/* if set loop on error			*/
	movl	$3,_ercode	/* error code operand was modified */
	movl	r3,_actual	/* actual data */
	movl	$MASKW1,_expected	/* expected data */
	jmp	*badrtn

/*	Now use different patterns for source & mask			*/

t5:	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
st5:	callf	$4,_setjmp	/* save context for return from error */
	movab	st5,_stpc	/* save address of subtest */
	movl	$5,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASKW2,_opr	/* first operand */
	movl	$SRCW2,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*clear overflow enable			*/
	movl	$SRCW2,tloc	/*tloc = source				*/
	movl	$MASKW2,r4	/*r4 = mask				*/
	bispsw	$(N|V|C)	/*neg,overflow, & carry ON		*/
	bitw	$SRCW2,r4	/* data AND tloc data to register	*/
	jneq	error5		/*error if Z = 0			*/
	jlss	error5		/*error if N =1				*/
	jvs	error5		/*error if V = 1			*/
	jcc	error5		/*error if C = 0			*/
	jmp	t6
error5:	movpsl	_actual		/* actual psl MAYBE it is incorrect	*/
	bbs	$0,_scoplp,0b	/* if set loop on error			*/
	movl	$2,_ercode	/* error code flag failure		*/
	jmp	*badrtn

/*	Yet another patterns for source & mask				*/

t6:	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
st6:	callf	$4,_setjmp	/* save context for return from error */
	movab	st6,_stpc	/* save address of subtest */
	movl	$6,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASKW3,_opr	/* first operand */
	movl	$SRCW3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*clear overflow enable			*/
	movl	$SRCW3,tloc	/*tloc = source				*/
	movl	$MASKW3,tloc2	/*r1 = mask				*/
	bispsw	$(Z|V)	 	/*zero, & overflow ON			*/
	bitw	tloc2+2,tloc+2	/*tloc2 AND tloc memory to memory	*/
	jeql	error6		/*error if Z = 1			*/
	jgeq	error6		/*error if N =1				*/
	jvs	error6		/*error if V = 1			*/
	jcc	error6		/*error if C = 0			*/
	jmp	t7
error6:	movpsl	_actual		/* actual psl MAYBE it is incorrect	*/
	bbs	$0,_scoplp,0b	/* if set loop on error			*/
	movl	$2,_ercode	/* error code flag failure		*/
	jmp	*badrtn

/*	Yet another patterns for source & mask				*/

t7:	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
st7:	callf	$4,_setjmp	/* save context for return from error */
	movab	st7,_stpc	/* save address of subtest */
	movl	$7,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASKW3,_opr	/* first operand */
	movl	$SRCW3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*clear overflow enable			*/
	movl	$SRCW3,tloc	/*tloc = source				*/
	bispsw	$(Z|V)	 	/*zero, & overflow ON			*/
	bitw	tloc+2,$MASKW3	/*tloc2 AND tloc memory to data		*/
	jeql	error7		/*error if Z = 1			*/
	jlss	error7		/*error if N =1				*/
	jvs	error7		/*error if V = 1			*/
	jcc	error7		/*error if C = 0			*/
	jmp	aldn
error7:	movpsl	_actual		/* actual psl MAYBE it is incorrect	*/
	bbs	$0,_scoplp,0b	/* if set loop on error			*/
	movl	$2,_ercode	/* error code flag failure		*/
	jmp	*badrtn
aldn:	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
	jmp	*return		/* good, return to monitor */


/*									*/
/*	Variables							*/
/*									*/
	.align	2
tloc:	.space	4		/*test location 			*/

	.align	2
tloc2:
	.space	4



unix.superglobalmegacorp.com

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