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

/*	ANDW2 (and word 2 operand) test					*/

/*Test name = andw2							*/
/*Description =								*/
/*	This test checks 'andw2' instruction as follows:		*/
/*	destination = r1, memory location (dest)			*/
/*	destination	mask		result        Z N C V(flags)    */
/*	___________	____		_____         _____________	*/
/*	0xaaaa		0xaaaa		0xaaaa        0 0 1 0   	*/
/*	0xaaaa		0x5555		0x0000        1 0 1 0   	*/
/*									*/
/*									*/
/*	Constants							*/	
/*									*/
	.set	VALUEB,0x000000aa
	.set	VALUEW,0X0000aaaa
	.set	VALUEL,0xaaaaaaaa
	.set	MASK1B,0xaa
	.set	MASK1W,0xaaaa
	.set	MASK1L,0xaaaaaaaa
	.set	MASK2B,0x55
	.set	MASK2W,0x5555
	.set	MASK2L,0x55555555
	.set	EXP1B,0x000000aa
	.set	EXP1W,0x0000aaaa
	.set	EXP1L,0xaaaaaaaa
	.set	EXP2B,0x00000000
	.set	EXP2W,0x00000000
	.set	EXP2L,0x00000000

/*									*/
/*									*/
/*									*/
/*	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	_andw2
_andw2:
	callf	$4,_setjmp	/* save context for return from error */
	movab	_andw2,_stpc	/* subtest address */
	movl	$1,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK1W,_opr	/* first operand */
	movl	$VALUEW,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$VALUEW,r4	/*set r4 = 0xaaaa			*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	andw2	$MASK1W,r4	/*mask r4 with 0xaaaa data to reg	*/
	beql	error1		/*error if Z = 1			*/
	blss	error1		/*error if N = 1			*/
	bcc	error1		/*error if C = 0			*/
	bvs	error1		/*error if V = 1			*/
	movl	$EXP1W,r3
	cmpl	r4,$EXP1W	/*if r4 <> expected(0xaaaa),		*/
	beql	a2		/* if correct continue */
	movl	$1,_ercode	/* error code data miscompare	*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	r4,_actual	/* actual data */
	movl	$EXP1W,_expected	/* expected data */
	jmp	*badrtn
error1:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag miscompare */
	jmp	*badrtn

/*	Now try another mask(0x5555) memory to register			*/
/*									*/
a2:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aa2:	callf	$4,_setjmp	/* save context for return from error */
	movab	aa2,_stpc	/* subtest address */
	movl	$2,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK2W,_opr	/* first operand */
	movl	$VALUEW,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$VALUEW,r4	/*set r4 = 0xaaaa			*/
	movl	$MASK2W,dest	/* load mask into location dest		*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	andw2	dest+2,r4	/*mask r4 with 0x5555 memory to reg	*/
	bneq	error2		/*error if Z = 0			*/
	blss	error2		/*error if N = 1			*/
	bcc	error2		/*error if C = 1			*/
	bvs	error2		/*error if V = 1			*/
	cmpl	r4,$EXP2W	/*if r4 <> expected(0x0000),		*/
	beql	andw2m		/* if correct continue */
	movl	$1,_ercode	/* error code data miscompare	*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	r4,_actual	/* actual data */
	movl	$EXP2W,_expected	/* expected data */
	jmp	*badrtn
error2:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag miscompare */
	jmp	*badrtn

/*									*/
/*	Now use memory location instead of register as destination	*/
/*		data to memory operation				*/
andw2m:	
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aa3:	callf	$4,_setjmp	/* save context for return from error */
	movab	aa3,_stpc	/* subtest address */
	movl	$3,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK1W,_opr	/* first operand */
	movl	$VALUEW,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$VALUEW,dest	/*set dest = 0xaaaa			*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	andw2	$MASK1W,dest+2	/*mask dest with 0xaaaa data to mem	*/
	jeql	error3		/*error if Z = 1			*/
	jlss	error3		/*error if N = 1			*/
	jcc	error3		/*error if C = 0			*/
	jvs	error3		/*error if V = 1			*/
	cmpl	dest,$EXP1W	/*if dest <> expected(0xaaaa),		*/
	beql	a4		/* if correct continue */
	movl	$1,_ercode	/* error code data miscompare	*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	dest,_actual	/* actual data */
	movl	$EXP1W,_expected	/* expected data */
	jmp	*badrtn
error3:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag miscompare */
	jmp	*badrtn

/*	Now try another mask(0x5555) memory to memory			*/
/*									*/
a4:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aa4:	callf	$4,_setjmp	/* save context for return from error */
	movab	aa4,_stpc	/* subtest address */
	movl	$4,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK2W,_opr	/* first operand */
	movl	$VALUEW,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$VALUEW,dest	/*set dest = 0xaaaa			*/
	movl	$MASK2W,dest2	/* set dest2 = 0x5555			*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	andw2	dest2+2,dest+2	/*mask dest with 0x5555 mem to mem	*/
	jneq	error4		/*error if Z = 0			*/
	jlss	error4		/*error if N = 1			*/
	jcc	error4		/*error if C = 1			*/
	jvs	error4		/*error if V = 1			*/
	cmpl	dest,$EXP2W	/*if dest <> expected(0x0000),		*/
	beql	a5		/* if correct continue */
	movl	$1,_ercode	/* error code data miscompare	*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	dest,_actual	/* actual data */
	movl	$EXP2W,_expected	/* expected data */
	jmp	*badrtn
error4:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag miscompare */
	jmp	*badrtn

/*	Now try another mask(0x5555) register to memory			*/
/*									*/

a5:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aa5:	callf	$4,_setjmp	/* save context for return from error */
	movab	aa5,_stpc	/* subtest address */
	movl	$5,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK2W,_opr	/* first operand */
	movl	$VALUEW,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$VALUEW,dest	/*set dest = 0xaaaa			*/
	movl	$MASK2W,r3	/* set r3 = 0x5555			*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	andw2	r3,dest+2	/*mask dest with 0x5555 reg to mem	*/
	jneq	error5		/*error if Z = 0			*/
	jlss	error5		/*error if N = 1			*/
	jcc	error5		/*error if C = 1			*/
	jvs	error5		/*error if V = 1			*/
	cmpl	dest,$EXP2W	/*if dest <> expected(0x0000),		*/
	beql	a6		/* if correct continue */
	movl	$1,_ercode	/* error code data miscompare	*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	dest,_actual	/* actual data */
	movl	$EXP2W,_expected	/* expected data */
	jmp	*badrtn
error5:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag miscompare */
	jmp	*badrtn
/*																			*/
/*	Now try another mask(0x5555) register to register		*/
/*									*/

a6:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aa6:	callf	$4,_setjmp	/* save context for return from error */
	movab	aa6,_stpc	/* subtest address */
	movl	$6,_subtst	/* subtest number */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$VALUEW,r4	/*set r4 = 0xaaaa			*/
	movl	$MASK2W,r3	/* set r3 = 0x5555			*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	andw2	r3,r4		/*mask r4 with 0x5555 reg to r4		*/
	jneq	error6		/*error if Z = 0			*/
	jlss	error6		/*error if N = 1			*/
	jcc	error6		/*error if C = 1			*/
	jvs	error6		/*error if V = 1			*/
	cmpl	r4,$EXP2W	/*if r5 <> expected(0x0000),		*/
	beql	aldn		/* if correct continue */
	movl	$1,_ercode	/* error code data miscompare	*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	r4,_actual	/* actual data */
	movl	$EXP2W,_expected	/* expected data */
	jmp	*badrtn
error6:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag miscompare */
	jmp	*badrtn
aldn:	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
	jmp	*return
/*									*/
/*	variables							*/
/*									*/
	.align	2
dest:	.space	4

	.align	2
dest2:	.space	4



unix.superglobalmegacorp.com

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