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



/*	ANDW3 (and word 3 operand) test					*/

/*Test name = andw3							*/
/*Description =								*/
/*	This test checks 'andw3' instruction as follows:		*/
/*	source  	mask		destination   Z N C V(flags)    */
/*	___________	____		___________   _____________	*/
/*	0xaaaa		0xaaaa		0x7fffaaaa    0 0 1 0   	*/
/*	0xaaaa		0x5555		0x7fff0000    1 0 1 0   	*/
/*	R		R		R		---		*/
/*	M		M		M		---		*/
/*	R		M		M		---		*/
/*	M		R		R		---		*/
/*									*/
/*									*/
/*	Constants							*/
/*									*/
	.set	MASK1B3,0xaa
	.set	MASK1W3,0xaaaa
	.set	MASK1L3,0xaaaaaaaa
	.set	MASK2B3,0x55
	.set	MASK2W3,0x5555
	.set	MASK2L3,0x55555555
	.set	SOURCE1B3,0xaa
	.set	SOURCE1W3,0xaaaa
	.set	SOURCE1L3,0xaaaaaaaa
	.set	SOURCE2B3,0xaa
	.set	SOURCE2W3,0xaaaa
	.set	SOURCE2L3,0xaaaaaaaa
	.set	INITIAL3,0x7fffffff
	.set	EXP1B3,0x7fffffaa
	.set	EXP1W3,0x7fffaaaa
	.set	EXP1L3,0xaaaaaaaa
	.set	EXP2B3,0x7fffff00
	.set	EXP2W3,0x7fff0000
	.set	EXP2L3,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	_andw3
_andw3:	callf	$4,_setjmp	/* save context for error return */
	movab	_andw3,_stpc	/* subtest address */
	movl	$1,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK1W3,_opr	/* first operand */
	movl	$SOURCE1W3,_opr + 4 /* second operand */
0:	movl	$MASK1W3,r3	/*mask					*/
	movl	$SOURCE1W3,r4	/*source				*/
	movl	$INITIAL3,r5	/*destination				*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	andw3	r3,r4,r5	/*try it reg reg reg			*/
	jeql	error1		/*error if Z = 1			*/
	jlss	error1          /*error if N = 1			*/
	jcc	error1		/*error if C = 0			*/
	jvs	error1		/*error if V = 1			*/
	movl	$0xaaaa,r4
	cmpl	r5,$0xaaaa	/*if dest <> expected value,		*/
	jeql	a2		/* if correct continue */
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	r5,_actual	/* actual data */
	movl	$0xaaaa,_expected	/* expected data */
	jmp	*badrtn
error1:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag miscompare */
	jmp	*badrtn

/*	Now try another mask(0x55)					*/
/*									*/
a2:	bbs	$0,_force_lp,0b	/* if set loop on error */
aa2:	callf	$4,_setjmp	/* save context for error return */
	movab	aa2,_stpc	/* subtest address */
	movl	$2,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK2W3,_opr	/* first operand */
	movl	$SOURCE2W3,_opr + 4 /* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK2W3,mask	/*mask					*/
	movl	$INITIAL3,r5	/*destination				*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	andw3	mask+2,$SOURCE2W3,r5/* try again mem data reg		*/
	jneq	error2		/*error if Z = 0			*/
	jlss	error2		/*error if N = 1			*/
	jcc	error2		/*error if C = 1			*/
	jvs	error2		/*error if V = 1			*/
	cmpl	r5,$0		/*if dest <> expected value,		*/
	jeql	andw3mmm		/* if correct continue */
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	r5,_actual	/* actual data */
	movl	$0,_expected	/* expected data */
	jmp	*badrtn
error2:	movpsl	_actual		/* actual = psl it is incorrect */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag miscompare */
	jmp	*badrtn
/*									*/
/*	now try source = M, mask = M, destination = M			*/
andw3mmm:
	
	bbs	$0,_force_lp,0b	/* if set loop on error */
aa3:	callf	$4,_setjmp	/* save context for error return */
	movab	aa3,_stpc	/* subtest address */
	movl	$3,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK1W3,_opr	/* first operand */
	movl	$SOURCE1W3,_opr + 4 /* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK1W3,mask	/*mask					*/
	movl	$SOURCE1W3,source/*source				*/
	movl	$INITIAL3,dest	/*destination				*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	andw3	mask+2,source+2,dest+2/*try it mem mem mem		*/
	jeql	error3		/*error if Z = 1			*/
	jgeq	error3		/*error if N = 1			*/
	jcc	error3		/*error if C = 0			*/
	jvs	error3		/*error if V = 1			*/
	cmpl	dest,$EXP1W3	/*if dest <> expected value,		*/
	jeql	a4		/* if correct continue */
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	dest,_actual	/* actual data */
	movl	$EXP1W3,_expected	/* expected data */
	jmp	*badrtn
error3:	movpsl	_actual		/* actual = psl it is incorrect */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag miscompare */
	jmp	*badrtn

/*	Now try another mask(0x55)					*/
/*									*/

a4:	bbs	$0,_force_lp,0b	/* if set loop on error */
aa4:	callf	$4,_setjmp	/* save context for error return */
	movab	aa4,_stpc	/* subtest address */
	movl	$4,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK2W3,_opr	/* first operand */
	movl	$SOURCE2W3,_opr + 4 /* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK2W3,mask	/*mask					*/
	movl	$SOURCE2W3,source/*source				*/
	movl	$INITIAL3,r5	/*destination				*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	andw3	mask+2,source+2,r5/* try again mem mem reg		*/
	jneq	error4		/*error if Z = 0			*/
	jlss	error4		/*error if N = 1			*/
	jcc	error4		/*error if C = 1			*/
	jvs	error4		/*error if V = 1			*/
	movl	$0x0,r4
	cmpl	r5,r4		/*if dest <> expected value,		*/
	jeql	andw3mrm		/* if correct continue */
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	r5,_actual	/* actual data */
	movl	$0,_expected	/* expected data */
	jmp	*badrtn
error4:	movpsl	_actual		/* actual = psl it is incorrect */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag miscompare */
	jmp	*badrtn
/*									*/
/*	Now use mask = R, source & destination = M			*/
andw3mrm:
	bbs	$0,_force_lp,0b	/* if set loop on error */
aa5:	callf	$4,_setjmp	/* save context for error return */
	movab	aa5,_stpc	/* subtest address */
	movl	$5,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK1W3,_opr	/* first operand */
	movl	$SOURCE1W3,_opr + 4 /* second operand */
0:	
	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK1W3,r3	/*mask					*/
	movl	$SOURCE1W3,source/*source				*/
	movl	$INITIAL3,dest	/*destination				*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	andw3	r3,source+2,dest+2	/*try it reg mem mem		*/
	jeql	error5		/*error if Z = 1			*/
	jlss	error5		/*error if N = 1			*/
	jcc	error5		/*error if C = 0			*/
	jvs	error5		/*error if V = 1			*/
	movl	$EXP1W3,r4
	cmpl	dest,$EXP1W3	/*if dest <> expected value,		*/
	jeql	a6		/* if correct continue */
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	dest,_actual	/* actual data */
	movl	$EXP1W3,_expected	/* expected data */
	jmp	*badrtn
error5:	movpsl	_actual		/* actual = psl it is incorrect */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag miscompare */
	jmp	*badrtn
/*									*/
/*	Now try another mask(0x55)					*/
/*									*/
a6:	bbs	$0,_force_lp,0b	/* if set loop on error */
aa6:	callf	$4,_setjmp	/* save context for error return */
	movab	aa6,_stpc	/* subtest address */
	movl	$6,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK2W3,_opr	/* first operand */
	movl	$SOURCE2W3,_opr + 4 /* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$INITIAL3,dest	/*destination				*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	andw3	$MASK2W3,$SOURCE2W3,dest+2/* try again data data mem	*/
	jneq	error6		/*error if Z = 0			*/
	jlss	error6		/*error if N = 1			*/
	jcc	error6		/*error if C = 1			*/
	jvs	error6		/*error if V = 1			*/
	movl	$EXP2W3,r4
	cmpl	dest,$EXP2W3	/*if dest <> expected value,		*/
	jeql	andw3rmm	/* if correct continue */
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	dest,_actual	/* actual data */
	movl	$EXP2W3,_expected	/* expected data */
	jmp	*badrtn
error6:	movpsl	_actual		/* actual = psl it is incorrect */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag miscompare */
	jmp	*badrtn
/*									*/
/*	Now try mask = M, source = R, dest = M				*/
/*									*/
andw3rmm:
	bbs	$0,_force_lp,0b	/* if set loop on error */
aa7:	callf	$4,_setjmp	/* save context for error return */
	movab	aa7,_stpc	/* subtest address */
	movl	$7,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK1W3,_opr	/* first operand */
	movl	$SOURCE1W3,_opr + 4 /* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK1W3,mask	/*mask					*/
	movl	$SOURCE1W3,r4	/*source				*/
	movl	$INITIAL3,dest	/*destination				*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	andw3	mask+2,r4,dest+2/*try it mem reg mem			*/
	jeql	error7		/*error if Z = 1			*/
	jlss	error7		/*error if N = 1			*/
	jcc	error7		/*error if C = 0			*/
	jvs	error7		/*error if V = 1			*/
	movl	$EXP1W3,r4
	cmpl	dest,$EXP1W3	/*if dest <> expected value,		*/
	jeql	a8		/* if correct continue */
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	dest,_actual	/* actual data */
	movl	$EXP1W3,_expected	/* expected data */
	jmp	*badrtn
error7:	movpsl	_actual		/* actual = psl it is incorrect */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag miscompare */
	jmp	*badrtn

/*	Now try another mask(0x55)					*/
/*									*/

a8:	bbs	$0,_force_lp,0b	/* if set loop on error */
aa8:	callf	$4,_setjmp	/* save context for error return */
	movab	aa8,_stpc	/* subtest address */
	movl	$8,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK2W3,_opr	/* first operand */
	movl	$SOURCE2W3,_opr + 4 /* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$SOURCE2W3,r4	/*source				*/
	movl	$INITIAL3,dest	/*destination				*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	andw3	$MASK2W3,r4,dest+2/* try again data reg mem		*/
	jneq	error8		/*error if Z = 0			*/
	jlss	error8		/*error if N = 1			*/
	jcc	error8		/*error if C = 1			*/
	jvs	error8		/*error if V = 1			*/
	movl	$EXP2W3,r4
	cmpl	dest,$EXP2W3	/*if dest <> expected value,		*/
	jeql	andw3mrr	/* if correct continue */
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	dest,_actual	/* actual data */
	movl	$EXP2W3,_expected	/* expected data */
	jmp	*badrtn
error8:	movpsl	_actual		/* actual = psl it is incorrect */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag miscompare */
	jmp	*badrtn
/*									*/
/*	Now try mask = R, source = M, dest = R				*/
/*									*/
andw3mrr:
	bbs	$0,_force_lp,0b	/* if set loop on error */
aa9:	callf	$4,_setjmp	/* save context for error return */
	movab	aa9,_stpc	/* subtest address */
	movl	$9,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK1W3,_opr	/* first operand */
	movl	$SOURCE1W3,_opr + 4 /* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK1W3,r3	/*mask					*/
	movl	$SOURCE1W3,source/*source				*/
	movl	$INITIAL3,r5	/*destination				*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	andw3	r3,source+2,r5	/*try it reg mem reg			*/
	jeql	error9		/*error if Z = 1			*/
	jlss	error9		/*error if N = 1			*/
	jcc	error9		/*error if C = 0			*/
	jvs	error9		/*error if V = 1			*/
	cmpl	r5,$0xaaaa	/*if dest <> expected value,		*/
	jeql	a10		/* if correct continue */
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	r5,_actual	/* actual data */
	movl	$0xaaaa,_expected	/* expected data */
	jmp	*badrtn
error9:	movpsl	_actual		/* actual = psl it is incorrect */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag miscompare */
	jmp	*badrtn

/*	Now try another mask(0x55)					*/
/*									*/

a10:	bbs	$0,_force_lp,0b	/* if set loop on error */
aa10:	callf	$4,_setjmp	/* save context for error return */
	movab	aa10,_stpc	/* subtest address */
	movl	$0xa,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK2W3,_opr	/* first operand */
	movl	$SOURCE2W3,_opr + 4 /* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$SOURCE2W3,r4	/*source				*/
	movl	$INITIAL3,r5	/*destination				*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	andw3	$MASK2W3,r4,r5	/* try again data reg reg		*/
	jneq	error10		/*error if Z = 0			*/
	jlss	error10		/*error if N = 1			*/
	jcc	error10		/*error if C = 1			*/
	jvs	error10		/*error if V = 1			*/
	cmpl	r5,$0		/*if dest <> expected value,		*/
	jeql	a11		/* if correct continue */
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	r5,_actual	/* actual data */
	movl	$0,_expected	/* expected data */
	jmp	*badrtn
error10: movpsl	_actual		/* actual = psl it is incorrect */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag miscompare */
	jmp	*badrtn

a11:	bbs	$0,_force_lp,0b	/* if set loop on error */
aa11:	callf	$4,_setjmp	/* save context for error return */
	movab	aa11,_stpc	/* subtest address */
	movl	$0xb,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK1W3,_opr	/* first operand */
	movl	$SOURCE1W3,_opr + 4 /* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK1W3,r3	/*mask					*/
	movl	$INITIAL3,r5	/*destination				*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	andw3	r3,$SOURCE1W3,r5/*try it reg data reg			*/
	jeql	error11		/*error if Z = 1			*/
	jlss	error11		/*error if N = 1			*/
	jcc	error11		/*error if C = 0			*/
	jvs	error11		/*error if V = 1			*/
	cmpl	r5,$0xaaaa	/*if dest <> expected value,		*/
	jeql	a12		/* if correct continue */
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	r5,_actual	/* actual data */
	movl	$0xaaaa,_expected	/* expected data */
	jmp	*badrtn
error11: movpsl	_actual		/* actual = psl it is incorrect */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag miscompare */
	jmp	*badrtn

a12:	bbs	$0,_force_lp,0b	/* if set loop on error */
aa12:	callf	$4,_setjmp	/* save context for error return */
	movab	aa12,_stpc	/* subtest address */
	movl	$0xc,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK1W3,_opr	/* first operand */
	movl	$SOURCE1W3,_opr + 4 /* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK1W3,r3	/*mask					*/
	movl	$SOURCE1W3,r4	/*source				*/
	movl	$INITIAL3,dest	/*destination				*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	andw3	r3,r4,dest+2	/*try it reg reg mem			*/
	jeql	error12		/*error if Z = 1			*/
	jlss	error12		/*error if N = 1			*/
	jcc	error12		/*error if C = 0			*/
	jvs	error12		/*error if V = 1			*/
	movl	$0x7fffaaaa,r4
	cmpl	dest,r4		/*if dest <> expected value,		*/
	jeql	aldn		/* if correct continue */
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	dest,_actual	/* actual data */
	movl	$0xffffaaaa,_expected	/* expected data */
	jmp	*badrtn
error12: movpsl	_actual		/* actual = psl it is incorrect */
	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 error */
	jmp	*return		/*good pass, goto monitor		*/

/*									*/
/*	Variables							*/
/*									*/
	.align	2
mask: 	.space	4
source:	.space	4
dest:	.space	4

/*									*/
/*	End of file							*/


unix.superglobalmegacorp.com

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