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


/*		BITL (bit long) test					*/
/*									*/
/*Test name = bitl							*/
/*Description =								*/
/*	This test checks 'bitl' 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_l
_bit_l:
	callf	$4,_setjmp	/* save context for return from error */
	movab	_bit_l,_stpc	/* save address of subtest */
	movl	$1,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operand in use */
	movl	$MASKL1,_opr	/* first operand */
	movl	$SRCL1,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*clear overflow enable			*/
	movl	$SRCL1,r4	/*r4 = source				*/
	movl	$MASKL1,tloc	/*tloc = mask				*/
	bispsw	$(N|V|C)	/*neg,overflow, & carry ON		*/
	bitl	tloc,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 it is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	cmpl	$SRCL1,r4	/*check source & mask are unchanged	*/
	beql	1f		/*error - source changed		*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand was modified */
	movl	r4,_actual	/* actual data */
	movl	$SRCL1,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw	$Z		/*clear Z flag				*/
	cmpl	$MASKL1,tloc	/*					*/
	beql	t2		/*error - source changed		*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand was modified */
	movl	tloc,_actual	/* actual data */
	movl	$MASKL1,_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 operand in use */
	movl	$MASKL2,_opr	/* first operand */
	movl	$SRCL2,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*clear overflow enable			*/
	movl	$SRCL2,r3	/*r3 = source				*/
	movl	$MASKL2,tloc	/*tloc = mask				*/
	bispsw	$(N|V|C)	/*neg,overflow, & carry ON		*/
	bitl	r3,tloc		/* r3 AND tloc reg to mem		*/
	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	st3
error2:	movpsl	_actual		/* actual psl MAYBE it is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope 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 operand in use */
	movl	$MASKL3,_opr	/* first operand */
	movl	$SRCL3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*clear overflow enable			*/
	movl	$MASKL3,r3	/*tloc = mask				*/
	bispsw	$(Z|V)	 	/*zero, & overflow ON			*/
	bitl	r3,$SRCL3	/*r3 AND data 	reg to data		*/
	beql	error3		/*error if Z = 1			*/
	bgeq	error3		/*error if N =1				*/
	bvs	error3		/*error if V = 1			*/
	bcc	error3		/*error if C = 0			*/
	jmp	bitlm
error3:	movpsl	_actual		/* actual psl MAYBE it is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn

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

bitlm:
	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 operand in use */
	movl	$MASKL1,_opr	/* first operand */
	movl	$SRCL1,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*clear overflow enable			*/
	movl	$SRCL1,r4	/*tloc = source				*/
	bispsw	$(N|V|C)	/*neg,overflow, & carry ON		*/
	bitl	$MASKL1,r4	/* data AND r1 data to reg		*/
	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 scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	cmpl	$SRCL1,r4	/*check source & mask are unchanged	*/
	beql	t5		/*error - source changed		*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand was modified */
	movl	r4,_actual	/* actual data */
	movl	$SRCL1,_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 operand in use */
	movl	$MASKL2,_opr	/* first operand */
	movl	$SRCL2,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*clear overflow enable			*/
	movl	$SRCL2,tloc	/*tloc = source				*/
	movl	$MASKL2,r3	/*r3 = mask				*/
	bispsw	$(N|V|C)	/*neg,overflow, & carry ON		*/
	bitl	$MASKL2,$SRCL2	/* data and data			*/
	jneq	error5		/*error if Z = 0			*/
	jlss	error5		/*error if N =1				*/
	jvs	error5		/*error if V = 1			*/
	jcc	error5		/*error if C = 0			*/
	jeql	t6
error5:	movpsl	_actual		/* actual psl MAYBE it is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope 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 operand in use */
	movl	$MASKL3,_opr	/* first operand */
	movl	$SRCL3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*clear overflow enable			*/
	movl	$SRCL3,tloc	/*tloc = source				*/
	movl	$MASKL3,r3	/*r3 = mask				*/
	bispsw	$(Z|V)	 	/*zero, & overflow ON			*/
	bitl	r3,tloc		/*r1 AND tloc				*/
	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 scope 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 operand in use */
	movl	$MASKL3,_opr	/* first operand */
	movl	$SRCL3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*clear overflow enable			*/
	movl	$SRCL3,r4	/*tloc = source				*/
	movl	$MASKL3,r3	/*r3 = mask				*/
	bispsw	$(Z|V)	 	/*zero, & overflow ON			*/
	bitl	r3,r4		/*r3 AND r4 reg to reg			*/
	jeql	error7		/*error if Z = 1			*/
	jgeq	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 scope 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 			*/



unix.superglobalmegacorp.com

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