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

/*		BITB (bit byte) test					*/
/*									*/
/*Test name = bitb							*/
/*Description =								*/
/*	This test checks 'bitb' 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 0				*/
/*	 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_b
_bit_b:
bitbx:	
	callf	$4,_setjmp	/* save context for error return */
	movab	bitbx,_stpc	/* save address of subtest */
	movl	$1,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASKB1,_opr	/* first operand */
	movl	$SRCB1,_opr + 4	/* second operand */
0:	
	bicpsw	$PSWMASK	/*clear overflow enable			*/
	movl	$SRCB1,r4	/*r4 = source				*/
	movl	$MASKB1,tloc	/*tloc = mask				*/
	bispsw	$(N|V|C)	/*neg,overflow, & carry ON		*/
	bitb	tloc+3,r4	/*tloc AND r4 mem to reg		*/
	jneq	error1		/*error if Z = 0			*/
	jlss	error1		/*error if N =1				*/
	jvs	error1		/*error if V = 1			*/
	jcc	error1		/*error if C = 0			*/
	jmp	1f
error1:	movpsl	_actual		/* actual psl MAYBE is incorrect */
	bbs	$0,_scoplp,0b	/* if set scoplp on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	cmpl	$SRCB1,r4	/*check source & mask are unchanged	*/
	jeql	1f		/*error - source changed		*/
	bbs	$0,_scoplp,0b	/* if set loop om error */
	movl	$3,_ercode	/* error code operand was modified */
	movl	r4,_actual	/* actual data */
	movl	$SRCB1,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw	$Z		/*clear Z flag				*/
	cmpl	$MASKB1,tloc	/*					*/
	jeql	1f		/*error - mask changed			*/
	bbs	$0,_scoplp,0b	/* if set loop om error */
	movl	$3,_ercode	/* error code operand was modified */
	movl	tloc,_actual	/* actual data */
	movl	$MASKB1,_expected	/* expected data */
	jmp	*badrtn

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

1:	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
st2:	callf	$4,_setjmp	/* save context for error return */
	movab	st2,_stpc	/* save address of subtest */
	movl	$2,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASKB2,_opr	/* first operand */
	movl	$SRCB2,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*clear overflow enable			*/
	movl	$SRCB2,tloc	/*r1 = source				*/
	movl	$MASKB2,r3	/*tloc = mask				*/
	bispsw	$(N|V|C)	/*neg,overflow, & carry ON		*/
	bitb	r3,tloc+3	/*tloc AND r3 reg to mem		*/
	jneq	error2		/*error if Z = 0			*/
	jlss	error2		/*error if N =1				*/
	jvs	error2		/*error if V = 1			*/
	jcc	error2		/*error if C = 0			*/
	jmp	bitbm1
error2:	movpsl	_actual		/* actual psl MAYBE is incorrect */
	bbs	$0,_scoplp,0b	/* if set scoplp on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn

/*	Yet another patterns for source & mask				*/

bitbm1:	
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
st3:	callf	$4,_setjmp	/* save context for error return */
	movab	st3,_stpc	/* save address of subtest */
	movl	$3,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASKB3,_opr	/* first operand */
	movl	$SRCB3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*clear overflow enable			*/
	movl	$SRCB3,tloc2	/*r1 = source				*/
	movl	$MASKB3,tloc	/*tloc = mask				*/
	bispsw	$(Z|V)	 	/*zero, & overflow ON			*/
	bitb	tloc+3,tloc2+3	/*tloc AND  tloc2 mem to mem		*/
	beql	error3		/*error if Z = 1			*/
	jgeq	error3		/*error if N =0				*/
	jvs	error3		/*error if V = 1			*/
	jcc	error3		/*error if C = 0			*/
	jmp	t4
error3:	movpsl	_actual		/* actual psl MAYBE is incorrect */
	bbs	$0,_scoplp,0b	/* if set scoplp on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
/*	Yet another patterns for source & mask				*/

t4:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
st4:	callf	$4,_setjmp	/* save context for error return */
	movab	st4,_stpc	/* save address of subtest */
	movl	$4,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASKB3,_opr	/* first operand */
	movl	$SRCB3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*clear overflow enable			*/
	movl	$SRCB3,tloc2	/*tloc2 = source				*/
	movl	$MASKB3,tloc	/*tloc = mask				*/
	bispsw	$(Z|V)	 	/*zero, & overflow ON			*/
	bitb	tloc+3,$SRCB3	/*tloc AND  tloc2 mem to  data		*/
	beql	error4		/*error if Z = 1			*/
	jlss	error4		/*error if N =1				*/
	jvs	error4		/*error if V = 1			*/
	jcc	error4		/*error if C = 0			*/
	jmp	bitbm
error4:	movpsl	_actual		/* actual psl MAYBE is incorrect */
	bbs	$0,_scoplp,0b	/* if set scoplp on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn

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

bitbm:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
st5:	callf	$4,_setjmp	/* save context for error return */
	movab	st5,_stpc	/* save address of subtest */
	movl	$5,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASKB1,_opr	/* first operand */
	movl	$SRCB1,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*clear overflow enable			*/
	movl	$SRCB1,r4	/*tloc = source				*/
	movl	$MASKB1,r3	/*r3 = mask				*/
	bispsw	$(N|V|C)	/*neg,overflow, & carry ON		*/
	bitb	r3,r4		/*r3 AND r4 reg to reg			*/
	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	1f
error5:	movpsl	_actual		/* actual psl MAYBE is incorrect */
	bbs	$0,_scoplp,0b	/* if set scoplp on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	cmpl	$SRCB1,r4	/*check source & mask are unchanged	*/
	jeql	1f		/*error - source changed		*/
	bbs	$0,_scoplp,0b	/* if set loop om error */
	movl	$3,_ercode	/* error code operand was modified */
	movl	r4,_actual	/* actual data */
	movl	$SRCB1,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw	$Z		/*clear Z flag				*/
	cmpl	$MASKB1,r3
	jeql	t6		/*error - source changed		*/
	bbs	$0,_scoplp,0b	/* if set loop om error */
	movl	$3,_ercode	/* error code operand was modified */
	movl	r3,_actual	/* actual data */
	movl	$MASKB1,_expected	/* expected data */
	jmp	*badrtn

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

t6:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
st6:	callf	$4,_setjmp	/* save context for error return */
	movab	st6,_stpc	/* save address of subtest */
	movl	$6,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASKB2,_opr	/* first operand */
	movl	$SRCB2,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*clear overflow enable			*/
	movl	$SRCB2,tloc	/*tloc = source				*/
	bispsw	$(N|V|C)	/*neg,overflow, & carry ON		*/
	bitb	$MASKB2,tloc+3	/* $MASKB2 AND tloc data to mem		*/
	jneq	error6		/*error if Z = 0			*/
	jlss	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 is incorrect */
	bbs	$0,_scoplp,0b	/* if set scoplp 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 error return */
	movab	st7,_stpc	/* save address of subtest */
	movl	$7,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASKB3,_opr	/* first operand */
	movl	$SRCB3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*clear overflow enable			*/
	movl	$SRCB3,r4	/*tloc = source				*/
	bispsw	$(Z|V)	 	/*zero, & overflow ON			*/
	bitb	$MASKB3,r4	/*r4 AND tloc data to reg		*/
	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	t8
error7:	movpsl	_actual		/* actual psl MAYBE is incorrect */
	bbs	$0,_scoplp,0b	/* if set scoplp on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn

/*	Yet another patterns for source & mask				*/

t8:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
st8:	callf	$4,_setjmp	/* save context for error return */
	movab	st8,_stpc	/* save address of subtest */
	movl	$8,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASKB3,_opr	/* first operand */
	movl	$SRCB3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*clear overflow enable			*/
	movl	$MASKB3,r3
	bispsw	$(Z|V)	 	/*zero, & overflow ON			*/
	bitb	r3,$SRCB3	/*r3 AND tloc reg to data		 */
	jeql	error8		/*error if Z = 1			*/
	jlss	error8		/*error if N =1				*/
	jvs	error8		/*error if V = 1			*/
	jcc	error8		/*error if C = 0			*/
	jmp	aldn
error8:	movpsl	_actual		/* actual psl MAYBE is incorrect */
	bbs	$0,_scoplp,0b	/* if set scoplp 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		/* test location two			*/



unix.superglobalmegacorp.com

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