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

/*	ORB2 (or byte 2 operand) test					*/

/*Test name = orb2							*/
/*Description =								*/
/*	This test checks 'orb2' 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		0xff          0 1 1 0   	*/
/*	0x00		0x00		0x00	      1 0 x 0		*/
/*									*/
/*									*/
/*									*/
/*									*/
/*	Constants							*/
/*									*/
	.set	VALUEB,0x555555aa
	.set	VALUEW,0X5555aaaa
	.set	VALUEL,0xaaaaaaaa
	.set	VALUE3B,0X00000000
	.set	VALUE3W,VALUE3B
	.set	VALUE3L,VALUE3B
	.set	MASK1B,0xaa
	.set	MASK1W,0xaaaa
	.set	MASK1L,0xaaaaaaaa
	.set	MASK2B,0x55
	.set	MASK2W,0x5555
	.set	MASK2L,0x55555555
	.set	MASK3B,0x00
	.set	MASK3W,0x0000
	.set	MASK3L,0x00000000
	.set	EXP1B,0x555555aa
	.set	EXP1W,0x5555aaaa
	.set	EXP1L,0xaaaaaaaa
	.set	EXP2B,0x555555ff
	.set	EXP2W,0x5555ffff
	.set	EXP2L,0xffffffff
	.set	EXP3B,0x00000000
	.set	EXP3W,EXP3B
	.set	EXP3L,EXP3B

/*									*/
/*									*/
/*									*/
/*	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	_or_b2
_or_b2:
	callf	$4,_setjmp	/* save context for error return */
	movab	_or_b2,_stpc	/* save starting address 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,r4	/*set r4 = 0xaa				*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	orb2	$MASK1B,r4	/*mask r4 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			*/
	jmp	1f
error1:	movpsl	_actual		/* actual = psl MAYBE it is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure	*/
	jmp	*badrtn
1:	cmpl	r4,$EXP1B	/*if r4 <> expected,			*/
	jeql	o2		/* if correct continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r4,_actual	/* actual data */
	movl	$EXP1B,_expected /* expected data */
	jmp	*badrtn

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

o2:
	bbs	$0,_force_lp,0b	/* if set loop on last error */
ao2:	callf	$4,_setjmp	/* save context for error return */
	movab	ao2,_stpc	/* save starting address 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 3			*/
	bispsw	$(Z|V)	     	/*overflow & zero bits ON		*/
	orb2	r3,r4		/*mask r4 with 0x55 reg to reg		*/
	beql	error2		/*error if Z = 1			*/
	blss	error2		/*error if N = 1			*/
	bcc	error2		/*error if C = 0			*/
	bvs	error2		/*error if V = 1			*/
	jmp	1f
error2:	movpsl	_actual		/* actual = psl MAYBE it is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure	*/
	jmp	*badrtn
1:	cmpl	r4,$EXP2B	/*if r4 <> expected,			*/
	jeql	o3		/* if correct continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r4,_actual	/* actual data */
	movl	$EXP2B,_expected /* expected data */
	jmp	*badrtn
/*									*/
/*	Now try another mask(0x00) & dest(0x00) reg to mem		*/
/*									*/

o3:
	bbs	$0,_force_lp,0b	/* if set loop on last error */
ao3:	callf	$4,_setjmp	/* save context for error return */
	movab	ao3,_stpc	/* save starting address of subtest */
	movl	$3,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$MASK3B,_opr	/* first operand */
	movl	$VALUE3B,_opr + 4 /* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$VALUE3B,r3	/*set r3 = 0x00				*/
	movl	$MASK3B,dest
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	orb2	r3,dest		/*mask r3 with 0x00 reg to mem		*/
	bneq	error3		/*error if Z = 0			*/
	blss	error3		/*error if N = 1			*/
	bcc	error3		/*error if C = 0			*/
	bvs	error3		/*error if V = 1			*/
	jmp	1f
error3:	movpsl	_actual		/* actual = psl MAYBE it is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure	*/
	jmp	*badrtn
1:	cmpl	dest,$EXP3B	/*if dest <> expected,			*/
	jeql	orb2m		/* if correct continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	dest,_actual	/* actual data */
	movl	$EXP3B,_expected /* expected data */
	jmp	*badrtn

/*									*/
/*	Now use memory location instead of register as destination	*/
/*									*/
orb2m:	
	bbs	$0,_force_lp,0b	/* if set loop on last error */
ao4:	callf	$4,_setjmp	/* save context for error return */
	movab	ao4,_stpc	/* save starting address of subtest */
	movl	$4,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$-0x56,_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		*/
	orb2	$-0x56,dest+3	/*mask dest with 0xaa data to mem	*/
	beql	error4		/*error if Z = 1			*/
	bgeq	error4		/*error if N = 0			*/
	bcc	error4		/*error if C = 0			*/
	bvs	error4		/*error if V = 1			*/
	jmp	1f
error4:	movpsl	_actual		/* actual = psl MAYBE it is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure	*/
	jmp	*badrtn
1:	cmpl	dest,$EXP1B	/*if dest <> expected,			*/
	jeql	o5		/* if correct continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	dest,_actual	/* actual data */
	movl	$EXP1B,_expected /* expected data */
	jmp	*badrtn

/*	Now try another mask(0x55) mem to reg				*/
/*									*/

o5:	
	bbs	$0,_force_lp,0b	/* if set loop on last error */
ao5:	callf	$4,_setjmp	/* save context for error return */
	movab	ao5,_stpc	/* save starting address of subtest */
	movl	$5,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$VALUEB,_opr	/* first operand */
	movl	$MASK2B,_opr + 4 /* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$VALUEB,dest	/*set dest = 0xaa			*/
	movl	$MASK2B,r3	/* mask value in reg r3			*/
	bispsw	$(Z|V)	     	/*overflow & zero bits ON		*/
	orb2	dest+3,r3	/*mask dest with 0x55			*/
	beql	error5		/*error if Z = 1			*/
	bgeq	error5		/*error if N = 0			*/
	bcc	error5		/*error if C = 0			*/
	bvs	error5		/*error if V = 1			*/
	jmp	1f
error5:	movpsl	_actual		/* actual = psl MAYBE it is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure	*/
	jmp	*badrtn
1:	cmpl	$EXP2L,r3	/*if dest <> expected,			*/
	jeql	o6		/* if correct continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r3,_actual	/* actual data */
	movl	$EXP2L,_expected /* expected data */
	jmp	*badrtn


/*									*/
/*	Now try another mask(0x00) & dest(0x00) mem to mem		*/
/*									*/

o6:	
	bbs	$0,_force_lp,0b	/* if set loop on last error */
ao6:	callf	$4,_setjmp	/* save context for error return */
	movab	ao6,_stpc	/* save starting address of subtest */
	movl	$6,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$VALUEB,_opr	/* first operand */
	movl	$MASK2B,_opr + 4 /* second operand */
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$VALUE3B,dest	/*set dest = 0x00			*/
	movl	$MASK3B,srce	/* load mask into loc srce		*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	orb2	srce,dest+3	/*mask dest with 0x00 mem to 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			*/
	jmp	1f
error6:	movpsl	_actual		/* actual = psl MAYBE it is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure	*/
	jmp	*badrtn
1:	cmpl	dest,$EXP3B	/*if dest <> expected,			*/
	jeql	aldn		/* if correct continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	dest,_actual	/* actual data */
	movl	$EXP3B,_expected /* expected data */
	jmp	*badrtn

aldn:	bbs	$0,_force_lp,0b	/* if set loop on last error */
	jmp	*return		/* good, return to monitor */

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

unix.superglobalmegacorp.com

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