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



/*	ANDB3 (and byte 3 operand) test					*/

/*Test name = andb3							*/
/*Description =								*/
/*	This test checks 'andb3' instruction as follows:		*/
/*	source  	mask		destination   Z N C V(flags)    */
/*	___________	____		___________   _____________	*/
/*	0xaa		0xaa		0x7fffffaa    0 0 1 0   	*/
/*	0xaa		0x55		0x7fffff00    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	_andb3
_andb3:
	callf	$4,_setjmp	/* save context for error return */
	movab	_andb3,_stpc	/* save subtest program counter */
	movl	$1,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK1B3,_opr	/* first operand */
	movl	$SOURCE1B3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK1B3,r3	/*mask					*/
	movl	$SOURCE1B3,r4	/*source				*/
	movl	$INITIAL3,r5	/*destination				*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	andb3	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			*/
	cmpl	r5,$0xaa	/*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	$0xaa,_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 failure */
	jmp	*badrtn

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

a2:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aa2:	callf	$4,_setjmp	/* save context for error return */
	movab	aa2,_stpc	/* save subtest program counter */
	movl	$2,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK2B3,_opr	/* first operand */
	movl	$SOURCE2B3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK2B3,mask	/*mask					*/
	movl	$SOURCE2B3,r4	/*source				*/
	movl	$INITIAL3,dest	/*destination				*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	andb3	mask+3,r4,dest+3/* try again mem reg mem		*/
	jneq	error2		/*error if Z = 0			*/
	jlss	error2		/*error if N = 1			*/
	jcc	error2		/*error if C = 0			*/
	jvs	error2		/*error if V = 1			*/
	cmpb	dest+3,$0		/*if dest <> expected value,		*/
	jeql	andb3mmm
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	dest,_actual	/* actual data */
	movl	$0,_expected	/* expected data */
	jmp	*badrtn
error2:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
/*									*/
/*	now try source = M, mask = M, destination = M			*/
andb3mmm:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aa3:	callf	$4,_setjmp	/* save context for error return */
	movab	aa3,_stpc	/* save subtest program counter */
	movl	$3,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK1B3,_opr	/* first operand */
	movl	$SOURCE1B3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK1B3,mask	/*mask					*/
	movl	$SOURCE1B3,source/*source				*/
	movl	$INITIAL3,dest	/*destination				*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	andb3	mask+3,source+3,dest+3	/*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,$EXP1B3	/*if dest <> expected value,		*/
	jeql	a4
	movl	$1,_ercode	/* error code data miscompare */
1:	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	dest,_actual	/* actual data */
	movl	$EXP1B3,_expected	/* expected data */
	jmp	*badrtn
error3:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn

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

a4:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aa4:	callf	$4,_setjmp	/* save context for error return */
	movab	aa4,_stpc	/* save subtest program counter */
	movl	$4,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK2B3,_opr	/* first operand */
	movl	$SOURCE2B3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK2B3,mask	/*mask					*/
	movl	$SOURCE2B3,source/*source				*/
	movl	$INITIAL3,dest	/*destination				*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	andb3	mask+3,$SOURCE1B3,dest+3/* try again mem data mem	*/
	jneq	error4		/*error if Z = 0			*/
	jlss	error4		/*error if N = 1			*/
	jcc	error4		/*error if C = 0			*/
	jvs	error4		/*error if V = 1			*/
	cmpl	dest,$EXP2B3	/*if dest <> expected value,		*/
	jeql	andb3mrm	/* 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	$EXP2B3,_expected	/* expected data */
	jmp	*badrtn
error4:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
/*									*/
/*	Now use mask = R, source & destination = M			*/
andb3mrm:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aa5:	callf	$4,_setjmp	/* save context for error return */
	movab	aa5,_stpc	/* save subtest program counter */
	movl	$5,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK1B3,_opr	/* first operand */
	movl	$SOURCE1B3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK1B3,r3	/*mask					*/
	movl	$SOURCE1B3,source/*source				*/
	movl	$INITIAL3,dest	/*destination				*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	andb3	r3,source+3,dest+3/*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			*/
	cmpl	dest,$EXP1B3	/*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	$EXP1B3,_expected	/* expected data */
	jmp	*badrtn
error5:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
/*									*/
/*	Now try another mask(0x55)					*/
/*									*/
a6:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aa6:	callf	$4,_setjmp	/* save context for error return */
	movab	aa6,_stpc	/* save subtest program counter */
	movl	$6,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK2B3,_opr	/* first operand */
	movl	$SOURCE2B3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$INITIAL3,dest	/*destination				*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	andb3	$MASK2B3,$SOURCE2B3,dest+3/* try again data data mem	*/
	jneq	error6		/*error if Z = 0			*/
	jlss	error6		/*error if N = 1			*/
	jcc	error6		/*error if C = 0			*/
	jvs	error6		/*error if V = 1			*/
	cmpl	dest,$EXP2B3	/*if dest <> expected value,		*/
	jneq	error2		/*then error				*/
	jeql	andb3rmm		/* 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	$EXP2B3,_expected	/* expected data */
	jmp	*badrtn
error6:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
/*									*/
/*	Now try mask = M, source = R, dest = M				*/
/*									*/
andb3rmm:
	
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aa7:	callf	$4,_setjmp	/* save context for error return */
	movab	aa7,_stpc	/* save subtest program counter */
	movl	$7,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK1B3,_opr	/* first operand */
	movl	$SOURCE1B3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK1B3,mask	/*mask					*/
	movl	$SOURCE1B3,r4	/*source				*/
	movl	$INITIAL3,dest	/*destination				*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	andb3	mask+3,r4,dest+3/*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	$EXP1B3,r6
	cmpl	dest,$EXP1B3	/*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	$EXP1B3,_expected	/* expected data */
	jmp	*badrtn
error7:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn

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

a8:	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aa8:	callf	$4,_setjmp	/* save context for error return */
	movab	aa8,_stpc	/* save subtest program counter */
	movl	$8,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK2B3,_opr	/* first operand */
	movl	$SOURCE2B3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK2B3,mask	/*mask					*/
	movl	$SOURCE2B3,source/*source				*/
	movl	$INITIAL3,r5	/*destination				*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	andb3	mask+3,source+3,r5/* try again mem mem reg		*/
	jneq	error8		/*error if Z = 0			*/
	jlss	error8		/*error if N = 1			*/
	jcc	error8		/*error if C = 0			*/
	jvs	error8		/*error if V = 1			*/
	cmpl	r5,$0		/*if dest <> expected value,		*/
	jeql	andb3mrr		/* 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
error8:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
/*									*/
/*	Now try mask = R, source = M, dest = R				*/
/*									*/
andb3mrr:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aa9:	callf	$4,_setjmp	/* save context for error return */
	movab	aa9,_stpc	/* save subtest program counter */
	movl	$9,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK1B3,_opr	/* first operand */
	movl	$SOURCE1B3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK1B3,r3	/*mask					*/
	movl	$SOURCE1B3,source/*source				*/
	movl	$INITIAL3,r5	/*destination				*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	andb3	r3,source+3,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			*/
	cmpb	r5,$0xaa	/*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	$0xaa,_expected	/* expected data */
	jmp	*badrtn
error9:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn

/*	Now try another mask(0x55)					*/
/*									*/
a10:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aa10:	callf	$4,_setjmp	/* save context for error return */
	movab	aa10,_stpc	/* save subtest program counter */
	movl	$0xa,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK2B3,_opr	/* first operand */
	movl	$SOURCE2B3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$SOURCE2B3,r4	/*source				*/
	movl	$INITIAL3,dest	/*destination				*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	andb3	$MASK2B3,r4,dest+3 /* try again data reg mem		*/
	jneq	error10		/*error if Z = 0			*/
	jlss	error10		/*error if N = 1			*/
	jcc	error10		/*error if C = 0			*/
	jvs	error10		/*error if V = 1			*/
	cmpb	dest+3,$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	dest,_actual	/* actual data */
	movl	$0,_expected	/* expected data */
	jmp	*badrtn
error10: movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn

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

a11:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aa11:	callf	$4,_setjmp	/* save context for error return */
	movab	aa11,_stpc	/* save subtest program counter */
	movl	$0xb,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK2B3,_opr	/* first operand */
	movl	$SOURCE2B3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$SOURCE2B3,r4	/*source				*/
	movl	$INITIAL3,r5	/*destination				*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	andb3	$MASK2B3,r4,r5	/* try again data reg reg		*/
	jneq	error11		/*error if Z = 0			*/
	jlss	error11		/*error if N = 1			*/
	jcc	error11		/*error if C = 0			*/
	jvs	error11		/*error if V = 1			*/
	cmpl	r5,$0		/*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	$0,_expected	/* expected data */
	jmp	*badrtn
error11: movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn

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

a12:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aa12:	callf	$4,_setjmp	/* save context for error return */
	movab	aa12,_stpc	/* save subtest program counter */
	movl	$0xc,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK2B3,_opr	/* first operand */
	movl	$SOURCE2B3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK2B3,r3	/*mask					*/
	movl	$INITIAL3,r5	/*destination				*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	andb3	r3,$SOURCE2B3,r5/* try again reg data reg		*/
	jneq	error12		/*error if Z = 0			*/
	jlss	error12		/*error if N = 1			*/
	jcc	error12		/*error if C = 0			*/
	jvs	error12		/*error if V = 1			*/
	cmpl	r5,$0		/*if dest <> expected value,		*/
	jeql	a13		/* 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
error12: movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn

a13:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aa13:	callf	$4,_setjmp	/* save context for error return */
	movab	aa13,_stpc	/* save subtest program counter */
	movl	$0xd,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK1B3,_opr	/* first operand */
	movl	$SOURCE1B3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK1B3,r3	/*mask					*/
	movl	$SOURCE1B3,r4	/*source				*/
	movl	$INITIAL3,dest	/*destination				*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	andb3	r3,r4,dest+3	/*try it reg reg mem			*/
	jeql	error13		/*error if Z = 1			*/
	jlss	error13		/*error if N = 1			*/
	jcc	error13		/*error if C = 0			*/
	jvs	error13		/*error if V = 1			*/
	movl	$0x7fffffaa,r6
	cmpl	dest,r6	/*if dest <> expected value,		*/
	jneq	error2		/*then error				*/
	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	r6,_expected	/* expected data */
	jmp	*badrtn
error13: movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set 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	
/*									*/
/*	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.