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

/*	ANDB2 (and byte 2 operand) test					*/

/*Test name = andb2							*/
/*Description =								*/
/*	This test checks 'andb2' instruction as follows:		*/
/*	destination = r1, memory location (dest)			*/
/*	destination	mask		result        Z N C V(flags)    */
/*	___________	____		_____         _____________	*/
/*	0xaa		0xaa		0xaa          0 0 1 0   	*/
/*	0xaa		0x55		0x00          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	_andb2
_andb2:
	callf	$4,_setjmp	/* save context for error return */
	movab	_andb2,_stpc	/* save program counter of subtest */
	movl	$1,_subtst	/* subtest number */	
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK1B,_opr	/* first operand */
	movl	$VALUEB,_opr + 4	/* second operand */
0:
	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$VALUEB,r3	/*set r3 = 0xaa				*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	andb2	$MASK1B,r3	/*mask r1 with 0xaa 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			*/
	cmpl	r3,$EXP1B	/*if r1 <> expected(0xaa),		*/
	beql	a2		/*correct then continue */
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	r3,_actual	/* actual data */
	movl	$EXP1B,_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 program counter of subtest */
	movl	$2,_subtst	/* subtest number */	
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK2B,_opr	/* first operand */
	movl	$VALUEB,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$VALUEB,r4	/*set r4 = 0xaa				*/
	movl	$MASK2B,r3	/* load mask into reg r3		*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	andb2	r3,r4		/*mask r4 */
	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	r4,$EXP2B	/*if r4 <> expected(0x00),		*/
	beql	andb2m		/*correct then continue */
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	r4,_actual	/* actual data */
	movl	$EXP2B,_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 use memory location instead of register as destination	*/
/*									*/
andb2m:	
	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	/* subtest number */	
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK1B,_opr	/* first operand */
	movl	$VALUEB,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$VALUEB,dest	/*set dest = 0xaa			*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	andb2	$MASK1B,dest+3	/*mask dest with 0xaa data to reg	*/
	beql	error3		/*error if Z = 1			*/
	blss	error3		/*error if N = 1			*/
	bcc	error3		/*error if C = 0			*/
	bvs	error3		/*error if V = 1			*/
	movl	$EXP1B,r2	
	cmpl	dest,$EXP1B	/*if dest <> expected(0xaa),		*/
	beql	a4		/*correct then continue */
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	dest,_actual	/* actual data */
	movl	$EXP1B,_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 program counter of subtest */
	movl	$4,_subtst	/* subtest number */	
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK2B,_opr	/* first operand */
	movl	$VALUEB,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$VALUEB,dest	/*set dest = 0xaa			*/
	movl	$MASK2B,r3	/* load mask into reg r3		*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	andb2	r3,dest+3	/*mask dest with 0x55 reg to memory	*/
	bneq	error4		/*error if Z = 0			*/
	blss	error4		/*error if N = 1			*/
	bcc	error4		/*error if C = 0			*/
	bvs	error4		/*error if V = 1			*/
	cmpl	dest,$EXP2B	/*if dest <> expected(0x00),		*/
	beql	a5		/*correct then continue */
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	dest,_actual	/* actual data */
	movl	$EXP2B,_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

a5:
	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	/* subtest number */	
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK2B,_opr	/* first operand */
	movl	$VALUEB,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$VALUEB,dest	/*set dest = 0xaa			*/
	movl	$MASK2B,r3	/* load mask into reg r3		*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	andb2	dest+3,r3	/*mask dest with 0x55 memory to reg	*/
	bneq	error5		/*error if Z = 0			*/
	blss	error5		/*error if N = 1			*/
	bcc	error5		/*error if C = 0			*/
	bvs	error5		/*error if V = 1			*/
	cmpl	r3,$EXP2B	/*if dest <> expected(0x00),		*/
	beql	a6		/*correct then continue */
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	r3,_actual	/* actual data */
	movl	$EXP2B,_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

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	/* subtest number */	
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK2B,_opr	/* first operand */
	movl	$VALUEB,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$VALUEB,dest	/*set dest = 0xaa			*/
	movl	$MASK2B,dest2	/* load mask into reg r1		*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	andb2	dest+3,dest2+3	/*mask dest with 0x55 memory to memory	*/
	bneq	error6		/*error if Z = 0			*/
	blss	error6		/*error if N = 1			*/
	bcc	error6		/*error if C = 0			*/
	bvs	error6		/*error if V = 1			*/
	movl	$EXP2B,r4	
	cmpl	dest2,$EXP2B	/*if dest <> expected(0x00),		*/
	beql	aldn		/*correct then continue */
	movl	$1,_ercode	/* error code data miscompare */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	dest2,_actual	/* actual data */
	movl	$EXP2B,_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

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.