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



/*	ANDL3 (and long 3 operand) test					*/

/*Test name = andl3							*/
/*Description =								*/
/*	This test checks 'andl3' instruction as follows:		*/
/*	source  	mask		destination   Z N C V(flags)    */
/*	___________	____		___________   _____________	*/
/*	0xaaaaaaaa	0xaaaaaaaa	0xaaaaaaaa    0 1 1 0   	*/
/*	0xaaaaaaaa	0x55555555	0x00000000    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	_andl3
_andl3:
	callf	$4,_setjmp	/* save context for error return */
	movab	_andl3,_stpc	/* save program counter of subtest */
	movl	$1,_subtst	/* number of subtest */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK1L3,_opr	/* first operand */
	movl	$SOURCE1L3,_opr + 4	/* second operand */
0:	movl	$MASK1L3,r3	/*mask					*/
	movl	$SOURCE1L3,r4	/*source				*/
	movl	$INITIAL3,r5	/*destination				*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	andl3	r3,r4,r5	/*try it reg reg reg			*/
	jeql	error1		/*error if Z = 1			*/
	jgeq	error1		/*error if N = 0			*/
	jcc	error1		/*error if C = 0			*/
	jvs	error1		/*error if V = 1			*/
	cmpl	r5,$EXP1L3	/*if dest <> expected value,		*/
	jeql	a2		/* if correct continue */
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	r5,_actual	/* actual data */
	movl	$EXP1L3,_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(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 program counter of subtest */
	movl	$2,_subtst	/* number of subtest */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK2L3,_opr	/* first operand */
	movl	$SOURCE2L3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK2L3,r3	/*mask					*/
	movl	$SOURCE2L3,r4	/*source				*/
	movl	$INITIAL3,dest	/*destination				*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	andl3	r3,r4,dest	/* try again reg reg dest		*/
	jneq	error2		/*error if Z = 0			*/
	jlss	error2		/*error if N = 1			*/
	jcc	error2		/*error if C = 0			*/
	jvs	error2		/*error if V = 1			*/
	cmpl	dest,$EXP2L3	/*if dest <> expected value,		*/
	jeql	andl3mmm		/* 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	$EXP2L3,_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 try source = M, mask = M, destination = M			*/
andl3mmm:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aa3:	callf	$4,_setjmp	/* save context for error return */
	movab	aa3,_stpc	/* save program counter of subtest */
	movl	$3,_subtst	/* number of subtest */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK1L3,_opr	/* first operand */
	movl	$SOURCE1L3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$SOURCE1L3,r4	/*source				*/
	movl	$INITIAL3,dest	/*destination				*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	andl3	$MASK1L3,r4,dest/*try it reg data mem data reg mem	*/
	jeql	error3		/*error if Z = 1			*/
	jgeq	error3		/*error if N = 0			*/
	jcc	error3		/*error if C = 0			*/
	jvs	error3		/*error if V = 1			*/
	movl	$EXP1L3,r4	
	cmpl	dest,$EXP1L3	/*if dest <> expected value,		*/
	jneq	error5		/*then error				*/
	jeql	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	$EXP1L3,_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(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 program counter of subtest */
	movl	$4,_subtst	/* number of subtest */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK2L3,_opr	/* first operand */
	movl	$SOURCE1L3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK2L3,r3	/*mask					*/
	movl	$INITIAL3,dest	/*destination				*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	andl3	r3,$SOURCE1L3,dest/* try again reg 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,$EXP2L3	/*if dest <> expected value,		*/
	jeql	andl3mrm	/* 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	$EXP2L3,_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 use mask = R, source & destination = M			*/
andl3mrm:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aa5:	callf	$4,_setjmp	/* save context for error return */
	movab	aa5,_stpc	/* save program counter of subtest */
	movl	$5,_subtst	/* number of subtest */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK1L3,_opr	/* first operand */
	movl	$SOURCE1L3,_opr + 4	/* second operand */
0:	
	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$SOURCE1L3,r4	/*source				*/
	movl	$INITIAL3,r5	/*destination				*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	andl3	$MASK1L3,r4,r5	/*try it data reg reg			*/
	jeql	error5		/*error if Z = 1			*/
	jgeq	error5		/*error if N = 0			*/
	jcc	error5		/*error if C = 0			*/
	jvs	error5		/*error if V = 1			*/
	cmpl	r5,$EXP1L3	/*if dest <> expected value,		*/
	jeql	a6		/* if correct continue */
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	r5,_actual	/* actual data */
	movl	$EXP1L3,_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(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 program counter of subtest */
	movl	$6,_subtst	/* number of subtest */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK2L3,_opr	/* first operand */
	movl	$SOURCE2L3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK2L3,r3	/*mask					*/
	movl	$SOURCE2L3,source/*source				*/
	movl	$INITIAL3,r5	/*destination				*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	andl3	r3,$SOURCE2L3,r5/* try again reg data reg		*/
	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	r5,$EXP2L3	/*if dest <> expected value,		*/
	jeql	andl3rmm	/* if correct continue */
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	r5,_actual	/* actual data */
	movl	$EXP2L3,_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
/*									*/
/*	Now try mask = M, source = R, dest = M				*/
/*									*/
andl3rmm:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aa7:	callf	$4,_setjmp	/* save context for error return */
	movab	aa7,_stpc	/* save program counter of subtest */
	movl	$7,_subtst	/* number of subtest */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK1L3,_opr	/* first operand */
	movl	$SOURCE1L3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$INITIAL3,r5	/*destination				*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	andl3	$MASK1L3,$SOURCE1L3,r5/*try it data data reg		*/
	jeql	error7		/*error if Z = 1			*/
	jgeq	error7		/*error if N = 0			*/
	jcc	error7		/*error if C = 0			*/
	jvs	error7		/*error if V = 1			*/
	movl	$EXP1L3,r4	
	cmpl	r5,$EXP1L3	/*if dest <> expected value,		*/
	jeql	a8		/* if correct continue */
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	r5,_actual	/* actual data */
	movl	$EXP1L3,_expected	/* expected data */
	jmp	*badrtn
error7:	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(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 program counter of subtest */
	movl	$8,_subtst	/* number of subtest */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK2L3,_opr	/* first operand */
	movl	$SOURCE2L3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$INITIAL3,dest	/*destination				*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	andl3	$MASK2L3,$SOURCE2L3,dest/* try again data data mem	*/
	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	dest,$EXP2L3	/*if dest <> expected value,		*/
	jeql	andl3mrr		/* 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	$EXP2L3,_expected	/* expected data */
	jmp	*badrtn
error8:	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 mask = R, source = M, dest = R				*/
/*									*/
andl3mrr:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aa9:	callf	$4,_setjmp	/* save context for error return */
	movab	aa9,_stpc	/* save program counter of subtest */
	movl	$9,_subtst	/* number of subtest */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK1L3,_opr	/* first operand */
	movl	$SOURCE1L3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$SOURCE1L3,r4	/*source				*/
	movl	$INITIAL3,r5	/*destination				*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	andl3	$MASK1L3,r4,r5	/*try it data reg reg			*/
	jeql	error9		/*error if Z = 1			*/
	jgeq	error9		/*error if N = 0			*/
	jcc	error9		/*error if C = 0			*/
	jvs	error9		/*error if V = 1			*/
	cmpl	r5,$EXP1L3	/*if dest <> expected value,		*/
	jeql	a10		/* if correct continue */
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	r5,_actual	/* actual data */
	movl	$EXP1L3,_expected	/* expected data */
	jmp	*badrtn
error9:	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(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 program counter of subtest */
	movl	$0xa,_subtst	/* number of subtest */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK2L3,_opr	/* first operand */
	movl	$SOURCE2L3,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK2L3,r3	/*mask					*/
	movl	$SOURCE2L3,source/*source				*/
	movl	$INITIAL3,r5	/*destination				*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	andl3	r3,source,r5	/* try again				*/
	jneq	error10		/*error if Z = 0			*/
	jlss	error10		/*error if N = 1			*/
	jcc	error10		/*error if C = 0			*/
	jvs	error10		/*error if V = 1			*/
	cmpl	r5,$EXP2L3	/*if dest <> expected value,		*/
	jeql	aldn		/* if correct continue */
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	r5,_actual	/* actual data */
	movl	$EXP2L3,_expected	/* expected data */
	jmp	*badrtn
error10: 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		/* test passed, return to 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.