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



/*		ADDB2 (add byte 2) test					*/
/*									*/
/*Test name = addb2							*/
/*Description =								*/
/*	This test checks 'addb2' instruction as follows:		*/
/*add		sum		result		N Z V C (flags)		*/
/*___		___		______		_______________		*/
/*0x11107fff	0x11107fff	0x1110fffe	0 0 1 0			*/
/*0x11108000	0x11108000	0x11100000	0 1 1 1			*/
/*0x8000	0xffff		0x7fff		0 0 1 1			*/
/*0x8001	0x7fff		0x0000		0 1 0 1			*/
/*0x8000	0x7fff		0xffff		1 0 0 0			*/
/*0xc000	0xc000		0x8000		1 0 0 1			*/
/*									*/
/*									*/
/*									*/
/*									*/
/*	constants definition for 'addx' tests.				*/
/*									*/

	.set	A1B1,0x1111107f/*+127, highest +ve number, byte	*/
	.set	A1W1,0x11107fff
	.set	A1L1,0x7fffffff
	.set	A2B1,0x1111107f/* +127 */
	.set	A2W1,0x11107fff
	.set	A2L1,A1L1
	.set	RB1,0x111110fe
	.set	RW1,0x1110fffe
	.set	RL1,0xfffffffe
	.set	A1B2,0x11111080/* -128 */
	.set	A1W2,0x11108000
	.set	A1L2,0x80000000
	.set	A2B2,0x11111080/* -128 */
	.set	A2W2,0x11118000
	.set	A2L2,0X80000000
	.set	RB2,0x11111000/* 0 */
	.set	RW2,0x11100000
	.set	RL2,0x00000000
	.set	A1B3,0X80	/* -128 */
	.set	A1W3,0x8000
	.set	A1L3,0x80000000
	.set	A2B3,0xff	/* -1 */
	.set	A2W3,0xffff
	.set	A2L3,0xffffffff
	.set	RB3,0x0000007f
	.set	RW3,0X00007fff
	.set	RL3,0X7fffffff
	.set	A1B4,0x81	/* -127 */
	.set	A1W4,0x8001
	.set	A1L4,0x80000001
	.set	A2B4,0x7f	/* 127 */
	.set	A2W4,0x7fff
	.set	A2L4,0x7fffffff
	.set	RB4,0		/* 0 */
	.set	RW4,RB4
	.set	RL4,RB4
	.set	A1B5,A1B3	/* -128 */
	.set	A1W5,A1W3
	.set	A1L5,A1L3
	.set	A2B5,A2B4	/* 127 */
	.set	A2W5,A2W4
	.set	A2L5,A2L4
	.set	RB5,0xff		/* -1 */
	.set	RW5,0xffff
	.set	RL5,0xffffffff
	.set	A1B6,0xc0	/* -64 */
	.set	A1W6,0xc000
	.set	A1L6,0xc0000000
	.set	A2B6,A1B6	/* -64 */
	.set	A2W6,A1W6
	.set	A2L6,A1L6
	.set	RB6,0x00000080	/* -128 */
	.set	RW6,0x00008000
	.set	RL6,0X80000000
	.set	BMSK,0xff	/* mask value for byte compare operations */

	.set	INITB,0x11111055/* initialization values for 3 operand */
	.set	INITW,0x11105555
	.set	INITL,0X55555555
	
/*									*/
/*	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	_addb2
_addb2:
ab1:
	callf	$4,_setjmp	/* save context for error return */
	movab	ab1,_stpc	/* save pc of subtest */
	movl	$1,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$A1B1,_opr	/* first operand */
	movl	$A2B1,_opr + 4	/* second operand */	
0:
	bicpsw	$PSWMASK	/*PSW = 0				*/
	movl	$A1B1,add	/*first operand				*/
	movl	$A2B1,sum	/*second operand			*/
	bispsw	$(N|Z|C)	/* these flags ON			*/
	addb2	add+3,sum+3	/* try 'add' instruction mem to mem	*/
	jlss	e1		/*error if N = 1			*/
	jeql	e1		/*error if Z = 1			*/
	jvc	e1		/*error if V = 0			*/
	jcs	e1		/*error if C = 1			*/
	bicpsw	$Z
	movl	$RB1,r4
	cmpl	$RB1,sum	/*sum = expected ?			*/
	jgeq	ab1r
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code flag failure */
	movl	sum,_actual	/* actual data */
	movl	$RB1,_expected	/* expected data */
	jmp	*badrtn
e1:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn

/*	reverse operands data to memory operation			*/

ab1r:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aab1r:	callf	$4,_setjmp	/* save context for error return */
	movab	aab1r,_stpc	/* save pc of subtest */
	movl	$2,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$0x7f,_opr	/* first operand */
	movl	$A1B1,_opr + 4	/* second operand */	
0:	bicpsw	$PSWMASK	/*PSW = 0				*/
	movl	$A1B1,sum	/*second operand			*/
	bispsw	$(N|Z|C)	/* these flags ON			*/
	addb2	$0x7f,sum+3	/* try 'add' instruction data to mem	*/
	jlss	e2		/*error if N = 1			*/
	jeql	e2		/*error if Z = 1			*/
	jvc	e2		/*error if V = 0			*/
	jcs	e2		/*error if C = 1			*/
	bicpsw	$Z
	movl	$RB1,r4
	cmpl	$RB1,sum	/*sum = expected ?			*/
	jeql	ab2
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code flag failure */
	movl	sum,_actual	/* actual data */
	movl	$RB1,_expected	/* expected data */
	jmp	*badrtn
e2:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn

ab2:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aab2:	callf	$4,_setjmp	/* save context for error return */
	movab	aab2,_stpc	/* save pc of subtest */
	movl	$3,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$A1B2,_opr	/* first operand */
	movl	$A2B2,_opr + 4	/* second operand */	
0:	bicpsw	$PSWMASK	/*PSW = 0				*/
	movl	$A1B2,tmp
	movb	tmp+3,r5	/*first operand				*/
	movl	$A2B2,sum	/*second operand			*/
	bispsw	$N		/* these flags ON			*/
	addb2	r5,sum+3	/* try 'add' instruction reg to mem	*/
	jgeq	e3		/*error if N = 0			*/
	jeql	e3		/*error if Z = 1			*/
	jvc	e3		/*error if V = 0			*/
	jcc	e3		/*error if C = 0			*/
	bicpsw	$Z
	movl	$RB2,r4
	cmpl	$RB2,sum	/*sum = expected ?			*/
	jeql	ab2r		/*if not, error				*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code flag failure */
	movl	sum,_actual	/* actual data */
	movl	$RB2,_expected	/* expected data */
	jmp	*badrtn
e3:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn

/*	reverse operands memory to register operation			*/

ab2r:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aab2r:	callf	$4,_setjmp	/* save context for error return */
	movab	aab2r,_stpc	/* save pc of subtest */
	movl	$4,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$A2B2,_opr	/* first operand */
	movl	$A1B2,_opr + 4	/* second operand */	
0:	bicpsw	$PSWMASK	/*PSW = 0				*/
	movl	$A2B2,add	/*first operand				*/
	movl	$A1B2,tmp
	movb	tmp+3,r5	/*first operand				*/
	bispsw	$N		/* these flags ON			*/
	addb2	add+3,r5	/* try 'add' instruction		*/
	jgeq	e4		/*error if N = 0			*/
	jeql	e4		/*error if Z = 1			*/
	jvc	e4		/*error if V = 0			*/
	jcc	e4		/*error if C = 0			*/
	bicpsw	$Z
	movl	$RB2,r4
	andl2	$BMSK,r4
	andl2	$BMSK,r5	/* mask off don't care bits		*/
	cmpl	r4,r5		/*sum = expected ?			*/
	jeql	ab3		/*if not, error				*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code flag failure */
	movl	r5,_actual	/* actual data */
	movl	r4,_expected	/* expected data */
	jmp	*badrtn
e4:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn



ab3:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aab3:	callf	$4,_setjmp	/* save context for error return */
	movab	aab3,_stpc	/* save pc of subtest */
	movl	$5,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$-0x80,_opr	/* first operand */
	movl	$A2B3,_opr + 4	/* second operand */	
0:	bicpsw	$PSWMASK	/*PSW = 0				*/
	movl	$A2B3,tmp	/*second operand			*/
	movb	tmp+3,r5	/*second operand			*/
	bispsw	$(N|Z)		/* these flags ON			*/
	addb2	$-0x80,r5	/* try 'add' instruction data to reg	*/
	jgeq	e5		/*error if N = 0			*/
	jeql	e5		/*error if Z = 1			*/
	jvc	e5		/*error if V = 0			*/
	jcc	e5		/*error if C = 0			*/
	bicpsw	$Z
	movl	$RB3,r4
	andl2	$BMSK,r4
	andl2	$BMSK,r5	/* mask off don't care bits		*/
	cmpl	r4,r5		/*sum = expected ?			*/
	jeql	ab3r		/*if not, error				*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code flag failure */
	movl	r5,_actual	/* actual data */
	movl	r4,_expected	/* expected data */
	jmp	*badrtn
e5:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn


/*	reverse operands register to register operation			*/

ab3r:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aab3r:	callf	$4,_setjmp	/* save context for error return */
	movab	aab3r,_stpc	/* save pc of subtest */
	movl	$6,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$A2B3,_opr	/* first operand */
	movl	$A1B3,_opr + 4	/* second operand */	
0:	bicpsw	$PSWMASK	/*PSW = 0				*/
	movl	$A2B3,tmp	/*first operand				*/
	movb	tmp+3,r5	/*first operand				*/
	movl	$A1B3,tmp2	/*second operand			*/
	movb	tmp2+3,r6	/*second operand			*/
	bispsw	$(N|Z)		/* these flags ON			*/
	addb2	r5,r6		/* try 'add' instruction reg to reg	*/
	jgeq	e6		/*error if N = 0			*/
	jeql	e6		/*error if Z = 1			*/
	jvc	e6		/*error if V = 0			*/
	jcc	e6		/*error if C = 0			*/
	bicpsw	$Z
	movl	$RB3,r4
	andl2	$BMSK,r4
	andl2	$BMSK,r6	/* mask off don't care bits		*/
	cmpl	r4,r6		/*sum = expected ?			*/
	jeql	ab4		/*if not, error				*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code flag failure */
	movl	r6,_actual	/* actual data */
	movl	r4,_expected	/* expected data */
	jmp	*badrtn
e6:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn

ab4:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aab4:	callf	$4,_setjmp	/* save context for error return */
	movab	aab4,_stpc	/* save pc of subtest */
	movl	$7,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$A2B3,_opr	/* first operand */
	movl	$A1B3,_opr + 4	/* second operand */	
0:	bicpsw	$PSWMASK	/*PSW = 0				*/
	movl	$A1B4,add	/*first operand				*/
	movl	$A2B4,sum	/*second operand			*/
	bispsw	$(N|V)		/* these flags ON			*/
	addb2	add+3,sum+3	/* try 'add' instruction		*/
	jlss	e7		/*error if N = 1			*/
	jneq	e7		/*error if Z = 0			*/
	jvs	e7		/*error if V = 1			*/
	jcc	e7		/*error if C = 0			*/
	bicpsw	$Z
	cmpl	$RB4,sum	/*sum = expected ?			*/
	jeql	ab4r		/*if not, error				*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code flag failure */
	movl	$RB4,_actual	/* actual data */
	movl	sum,_expected	/* expected data */
	jmp	*badrtn
e7:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn


/*	reverse operands						*/

ab4r:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aab4r:	callf	$4,_setjmp	/* save context for error return */
	movab	aab4r,_stpc	/* save pc of subtest */
	movl	$8,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$A2B4,_opr	/* first operand */
	movl	$A1B4,_opr + 4	/* second operand */	
0:	bicpsw	$PSWMASK	/*PSW = 0				*/
	movl	$A2B4,add	/*first operand				*/
	movl	$A1B4,sum	/*second operand			*/
	bispsw	$(N|V)		/* these flags ON			*/
	addb2	add+3,sum+3	/* try 'add' instruction		*/
	jlss	e8		/*error if N = 1			*/
	jneq	e8		/*error if Z = 0			*/
	jvs	e8		/*error if V = 1			*/
	jcc	e8		/*error if C = 0			*/
	bicpsw	$Z
	movl	$0,r4
	cmpl	r4,sum		/*sum = expected ?			*/
	jeql	ab5		/*if not, error				*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code flag failure */
	movl	sum,_actual	/* actual data */
	movl	r4,_expected	/* expected data */
	jmp	*badrtn
e8:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn



ab5:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aab5:	callf	$4,_setjmp	/* save context for error return */
	movab	aab5,_stpc	/* save pc of subtest */
	movl	$9,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$A1B5,_opr	/* first operand */
	movl	$A2B5,_opr + 4	/* second operand */	
0:	bicpsw	$PSWMASK	/*PSW = 0				*/
	movl	$A1B5,add	/*first operand				*/
	movl	$A2B5,sum	/*second operand			*/
	bispsw	$(V|Z|C)	/* these flags ON			*/
	addb2	add+3,sum+3	/* try 'add' instruction		*/
	jgeq	e9		/*error if N = 0			*/
	jeql	e9		/*error if Z = 1			*/
	jvs	e9		/*error if V = 1			*/
	jcs	e9		/*error if C = 1			*/
	bicpsw	$Z
	movl	$RB5,r4
	cmpl	$RB5,sum	/*sum = expected ?			*/
	jeql	ab6		/*if not, error				*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code flag failure */
	movl	sum,_actual	/* actual data */
	movl	r4,_expected	/* expected data */
	jmp	*badrtn
e9:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn


/*	reverse operands						*/

ab5r:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aab5r:	callf	$4,_setjmp	/* save context for error return */
	movab	aab5r,_stpc	/* save pc of subtest */
	movl	$0xa,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$A2B5,_opr	/* first operand */
	movl	$A1B5,_opr + 4	/* second operand */	
0:	bicpsw	$PSWMASK	/*PSW = 0				*/
	movl	$A2B5,add	/*first operand				*/
	movl	$A1B5,sum	/*second operand			*/
	bispsw	$(V|Z|C)	/* these flags ON			*/
	addb2	add+3,sum+3	/* try 'add' instruction		*/
	jgeq	e10		/*error if N = 0			*/
	jeql	e10		/*error if Z = 1			*/
	jvs	e10		/*error if V = 1			*/
	jcs	e10		/*error if C = 1			*/
	bicpsw	$Z
	movl	$0xff,r4
	cmpl	r4,sum		/*sum = expected ?			*/
	jeql	ab6		/*if not, error				*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code flag failure */
	movl	sum,_actual	/* actual data */
	movl	r4,_expected	/* expected data */
	jmp	*badrtn
e10:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn


ab6:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aab6:	callf	$4,_setjmp	/* save context for error return */
	movab	aab6,_stpc	/* save pc of subtest */
	movl	$0xb,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$A1B6,_opr	/* first operand */
	movl	$A2B6,_opr + 4	/* second operand */	
0:	bicpsw	$PSWMASK	/*PSW = 0				*/
	movl	$A1B6,add	/*first operand				*/
	movl	$A2B6,sum	/*second operand			*/
	bispsw	$(Z|V)		/* these flags ON			*/
	addb2	add+3,sum+3	/* try 'add' instruction		*/
	jgeq	e11		/*error if N = 0			*/
	jeql	e11		/*error if Z = 1			*/
	jvs	e11		/*error if V = 1			*/
	jcc	e11		/*error if C = 0			*/
	bicpsw	$Z
	movl	$RB6,r4
	cmpl	$RB6,sum	/*sum = expected ?			*/
	jeql	ab6r		/*if not, error				*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code flag failure */
	movl	sum,_actual	/* actual data */
	movl	r4,_expected	/* expected data */
	jmp	*badrtn
e11:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn


/*	reverse operands						*/

ab6r:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
aab6r:	callf	$4,_setjmp	/* save context for error return */
	movab	aab6r,_stpc	/* save pc of subtest */
	movl	$0xc,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$A2B6,_opr	/* first operand */
	movl	$A1B6,_opr + 4	/* second operand */	
0:	bicpsw	$PSWMASK	/*PSW = 0				*/
	movl	$A2B6,add	/*first operand				*/
	movl	$A1B6,sum	/*second operand			*/
	bispsw	$(Z|V)		/* these flags ON			*/
	addb2	add+3,sum+3	/* try 'add' instruction		*/
	jgeq	e12		/*error if N = 0			*/
	jeql	e12		/*error if Z = 1			*/
	jvs	e12		/*error if V = 1			*/
	jcc	e12		/*error if C = 0			*/
	bicpsw	$Z
	cmpl	$RB6,sum	/*sum = expected ?			*/
	jneq	e555		/*if not, error				*/
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
	jmp	*return
e555:	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code flag failure */
	movl	sum,_actual	/* actual data */
	movl	$RB6,_expected	/* expected data */
	jmp	*badrtn
e12:	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
				/*good run, goto monitor		*/

/*									*/
/*	Variables							*/
/*									*/
	.align	2
add1:	.space	4
add2:	.space	4
sum:	.space	4
add:	.space	4
tmp:	.space	4	/* temp location for variable manipulation */
tmp2:	.space	4	/* temp location for variable manipulation */

/*	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.