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

/*	ANDL2 (and long 2 operand) test					*/

/*Test name = andl2							*/
/*Description =								*/
/*	This test checks 'andl2' instruction as follows:		*/
/*	destination = r1, memory location (dest)			*/
/*	destination	mask		result        Z N C V(flags)    */
/*	___________	____		_____         _____________	*/
/*	0xaaaaaaaa	0xaaaaaaaa	0xaaaaaaaa    0 1 1 0   	*/
/*	0xaaaaaaaa	0x55555555	0x00000000    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	_andl2
_andl2:
	callf	$4,_setjmp	/* save context for error return */
	movab	_andl2,_stpc	/* save subtest address */
	movl	$1,_subtst	/* subtst number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK1L,_opr	/* first operand */
	movl	$VALUEL,_opr + 4	/* second operand */
0:	movl	$VALUEL,r3	/*set r3 = 0xaaaaaaaa			*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	andl2	$MASK1L,r3	/*mask r3 with 0xaaaaaaaa data to reg	*/
	beql	error1		/*error if Z = 1			*/
	bgeq	error1		/*error if N = 0			*/
	bcc	error1		/*error if C = 0			*/
	bvs	error1		/*error if V = 1			*/
	cmpl	r3,$EXP1L	/*if r1 <> expected(0xaaaaaaaa),	*/
	beql	a2		/* if correct then continue */
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	r3,_actual	/* actual data of inst execution */
	movl	$EXP1L,_expected	/* expected data */
	jmp	*badrtn
error1:	movpsl	_actual		/* error code flag miscompare */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag miscompare */
	jmp	*badrtn

/*	Now try another mask(0x55555555) register to memory		*/
/*									*/
a2:
	bbs	$0,_force_lp,0b	/* if set loop on subtest*/
aa2:	callf	$4,_setjmp	/* save context for error return */
	movab	aa2,_stpc	/* save subtest address */
	movl	$2,_subtst	/* subtst number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK2L,_opr	/* first operand */
	movl	$VALUEL,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$VALUEL,dest	/*set dest = 0xaaaaaaaa			*/
	movl	$MASK2L,r3	/* mask in reg r3			*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	andl2	r3,dest		/*mask r3 with 0x55555555 reg to mem	*/
	bneq	error2		/*error if Z = 0			*/
	blss	error2		/*error if N = 1			*/
	bcc	error2		/*error if C = 0			*/
	bvs	error2		/*error if V = 1			*/
	cmpl	dest,$EXP2L	/*if  dest <> expected(0x00000000),	*/
	beql	andl2m		/* if correct then continue */
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	dest,_actual	/* actual data of inst execution */
	movl	$EXP2L,_expected	/* expected data */
	jmp	*badrtn
error2:	movpsl	_actual		/* error code flag miscompare */
	bbs	$0,_scoplp,0b	/* if set 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				*/
andl2m:	
	bbs	$0,_force_lp,0b	/* if set loop on subtest*/
aa3:	callf	$4,_setjmp	/* save context for error return */
	movab	aa3,_stpc	/* save subtest address */
	movl	$3,_subtst	/* subtst number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK1L,_opr	/* first operand */
	movl	$VALUEL,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$VALUEL,dest	/*set dest = 0xaaaaaaaa			*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	andl2	$MASK1L,dest	/*mask dest with 0xaaaaaaaa		*/
	beql	error3		/*error if Z = 1			*/
	bgeq	error3		/*error if N = 0			*/
	bcc	error3		/*error if C = 0			*/
	bvs	error3		/*error if V = 1			*/
	cmpl	dest,$EXP1L	/*if dest <> expected(0xaaaaaaaa),	*/
	beql	a4		/* if correct then continue */
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	dest,_actual	/* actual data of inst execution */
	movl	$EXP1L,_expected	/* expected data */
	jmp	*badrtn
error3:	movpsl	_actual		/* error code flag miscompare */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag miscompare */
	jmp	*badrtn

/*	Now try another mask(0x55555555) register to register		*/
/*									*/
a4:
	bbs	$0,_force_lp,0b	/* if set loop on subtest*/
aa4:	callf	$4,_setjmp	/* save context for error return */
	movab	aa4,_stpc	/* save subtest address */
	movl	$4,_subtst	/* subtst number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK2L,_opr	/* first operand */
	movl	$VALUEL,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$VALUEL,r4	/*set r4 = 0xaaaaaaaa			*/
	movl	$MASK2L,r3	/* set r3 = 0x55555555			*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	andl2	r3,r4		/*mask dest with 0x55555555 reg to reg	*/
	bneq	error4		/*error if Z = 0			*/
	blss	error4		/*error if N = 1 */
	bcc	error4		/*error if C = 0			*/
	bvs	error4		/*error if V = 1			*/
	movl	$EXP2L,r3
	cmpl	r4,$EXP2L	/*if dest <> expected(0x00000000),	*/
	beql	aldn		/* if correct then continue */
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	r4,_actual	/* actual data of inst execution */
	movl	$EXP2L,_expected	/* expected data */
	jmp	*badrtn
error4:	movpsl	_actual		/* error code flag miscompare */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag miscompare */
	jmp	*badrtn
aldn:	bbs	$0,_force_lp,0b	/* if set loop on subtest*/
	jmp	*return		/* return to monitor */

/*									*/
/*	variables							*/
/*									*/
	.align	2
dest:	.space	4


unix.superglobalmegacorp.com

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