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




/*	ORW3 (or word 3 operand) test					*/

/*Test name = orw3							*/
/*Description =								*/
/*	This test checks 'orw3' instruction as follows:		*/
/*	source  	mask		destination   Z N C V(flags)    */
/*	___________	____		___________   _____________	*/
/*	0xaaaa		0xaaaa		0x7fffffaa    0 0 1 0   	*/
/*	0xaaaa		0x5555		0x7fffffff    0 0 1 0   	*/
/*	0x0000		0x0000		0x00000000    1 0 x 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	MASK3B3,0x00
	.set	MASK3W3,0x0000
	.set	MASK3L3,0x00000000
	.set	SOURCE1B3,0xaa
	.set	SOURCE1W3,0xaaaa
	.set	SOURCE1L3,0xaaaaaaaa
	.set	SOURCE2B3,0xaa
	.set	SOURCE2W3,0xaaaa
	.set	SOURCE2L3,0xaaaaaaaa
	.set	SOURCE3B3,0x00
	.set	SOURCE3W3,0x0000
	.set	SOURCE3L3,0x00000000
	.set	INIT1B3,0x7fffff00
	.set	INIT1W3,0x7fff0000
	.set	INIT1L3,0x00000000
	.set	INIT3B3,0x7fffffff
	.set	INIT3W3,INIT3B3
	.set	INIT3L3,INIT3B3
	.set	EXP1B3,0x7fffffaa
	.set	EXP1W3,0x7fffaaaa
	.set	EXP1L3,0xaaaaaaaa
	.set	EXP2B3,0x7fffffff
	.set	EXP2W3,0x7fffffff
	.set	EXP2L3,0xffffffff
	.set	EXP3B3,0x00000000
	.set	EXP3W3,EXP3B3
	.set	EXP3L3,EXP3B3

/*									*/
/*									*/
/*									*/
/*	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	_orw3
_orw3:
	callf	$4,_setjmp	/* save context for error return	*/
	movab	_orw3,_stpc	/* starting address of subtest		*/
	movl	$1,_subtst	/* subtest number			*/
	movl	$2,_no_opr	/* number of operands in use		*/
	movl	$MASK1W3,_opr	/* first operand			*/
	movl	$SOURCE1W3,_opr + 4 /* second operand			*/
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK1W3,r3	/*mask					*/
	movl	$SOURCE1W3,r4	/*source				*/
	movl	$INIT1W3,r5	/*destination				*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	orw3	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			*/
	jmp	1f
error1:	movpsl	_actual		/* actual data				*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$2,_ercode	/* error code flag failure		*/
	jmp	*badrtn
1:	cmpl	r5,$0xaaaa	/*if dest <> expected value,		*/
	jeql	o2		/* if no error continue			*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$1,_ercode	/* error code data miscompare		*/
	movl	r5,_actual	/* actual data				*/
	movl	$0xaaaa,_expected	/* expected data		*/
	jmp	*badrtn

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

o2:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest		*/
ao2:	callf	$4,_setjmp	/* save context for error return	*/
	movab	ao2,_stpc	/* starting address of subtest		*/
	movl	$2,_subtst	/* subtest number			*/
	movl	$2,_no_opr	/* number of operands in use		*/
	movl	$MASK2W3,_opr	/* first operand			*/
	movl	$SOURCE2W3,_opr + 4 /* second operand			*/
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK2W3,r3	/*mask					*/
	movl	$SOURCE2W3,r4	/*source				*/
	movl	$INIT1W3,dest	/*destination				*/
	bispsw	$(Z|V)	     	/*overflow & zero bits ON		*/
	orw3	r3,r4,dest+2	/* try again reg reg mem		*/
	jeql	error2		/*error if Z = 1			*/
	jlss	error2		/*error if N =1			*/
	jcc	error2		/*error if C = 0			*/
	jvs	error2		/*error if V = 1			*/
	jmp	1f
error2:	movpsl	_actual		/* actual data				*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$2,_ercode	/* error code flag failure		*/
	jmp	*badrtn
1:	movl	$0x7fffffff,r6
	cmpl	dest,r6		/*if dest <> expected value,		*/
	jeql	o3		/* if no error continue			*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$1,_ercode	/* error code data miscompare		*/
	movl	dest,_actual	/* actual data				*/
	movl	r6,_expected	/* expected data		*/
	jmp	*badrtn


/*	Now try another mask(0x0000), source(0x0000) & dest(0x0000)	*/

o3:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest		*/
ao3:	callf	$4,_setjmp	/* save context for error return	*/
	movab	ao3,_stpc	/* starting address of subtest		*/
	movl	$3,_subtst	/* subtest number			*/
	movl	$2,_no_opr	/* number of operands in use		*/
	movl	$MASK3W3,_opr	/* first operand			*/
	movl	$SOURCE3W3,_opr + 4 /* second operand			*/
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK3W3,r3	/*mask					*/
	movl	$INIT3W3,r5	/*destination				*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	orw3	r3,$SOURCE3W3,r5/* reg to data to reg			*/
	jneq	error3		/*error if Z = 0			*/
	jlss	error3		/*error if N = 1			*/
	jcc	error3		/*error if C = 0			*/
	jvs	error3		/*error if V = 1			*/
	jmp	1f
error3:	movpsl	_actual		/* actual data				*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$2,_ercode	/* error code flag failure		*/
	jmp	*badrtn
1:	cmpl	r5,$EXP3W3	/*if dest <> expected value,		*/
	jeql	orw3mmm		/* if no error continue			*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$1,_ercode	/* error code data miscompare		*/
	movl	r5,_actual	/* actual data				*/
	movl	$EXP3W3,_expected	/* expected data		*/
	jmp	*badrtn

/*									*/
/*	now try source = M, mask = M, destination = M			*/
orw3mmm:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest		*/
ao4:	callf	$4,_setjmp	/* save context for error return	*/
	movab	ao4,_stpc	/* starting address of subtest		*/
	movl	$4,_subtst	/* subtest number			*/
	movl	$2,_no_opr	/* number of operands in use		*/
	movl	$MASK3W3,_opr	/* first operand			*/
	movl	$SOURCE3W3,_opr + 4 /* second operand			*/
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK1W3,mask	/*mask					*/
	movl	$SOURCE1W3,source/*source				*/
	movl	$INIT1W3,dest	/*destination				*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	orw3	mask+2,source+2,dest+2/*try it mem mem mem		*/
	jeql	error4		/*error if Z = 1			*/
	jgeq	error4		/*error if N =0			*/
	jcc	error4		/*error if C = 0			*/
	jvs	error4		/*error if V = 1			*/
	jmp	1f
error4:	movpsl	_actual		/* actual data				*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$2,_ercode	/* error code flag failure		*/
	jmp	*badrtn
1:	cmpl	dest,$EXP1W3	/*if dest <> expected value,		*/
	jeql	o5		/* if no error continue			*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$1,_ercode	/* error code data miscompare		*/
	movl	dest,_actual	/* actual data				*/
	movl	$EXP1W3,_expected	/* expected data		*/
	jmp	*badrtn

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

o5:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest		*/
ao5:	callf	$4,_setjmp	/* save context for error return	*/
	movab	ao5,_stpc	/* starting address of subtest		*/
	movl	$5,_subtst	/* subtest number			*/
	movl	$2,_no_opr	/* number of operands in use		*/
	movl	$MASK2W3,_opr	/* first operand			*/
	movl	$SOURCE2W3,_opr + 4 /* second operand			*/
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK2W3,mask	/*mask					*/
	movl	$SOURCE2W3,source/*source				*/
	movl	$INIT1W3,r5	/*destination				*/
	bispsw	$(Z|V)	     	/*overflow & zero bits ON		*/
	orw3	mask+2,source+2,r5/*try it mem mem 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			*/
	jmp	1f
error5:	movpsl	_actual		/* actual data				*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$2,_ercode	/* error code flag failure		*/
	jmp	*badrtn
1:	movl	$EXP2L3,r6
	cmpl	r5,r6		/*if dest <> expected value,		*/
	jeql	o6		/* if no error continue			*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$1,_ercode	/* error code data miscompare		*/
	movl	r5,_actual	/* actual data				*/
	movl	r6,_expected	/* expected data		*/
	jmp	*badrtn
/*									*/
/*	Now try another mask(0x0000), source(0x0000), & dest(0x0000)	*/
/*									*/
o6:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest		*/
ao6:	callf	$4,_setjmp	/* save context for error return	*/
	movab	ao6,_stpc	/* starting address of subtest		*/
	movl	$6,_subtst	/* subtest number			*/
	movl	$2,_no_opr	/* number of operands in use		*/
	movl	$MASK3W3,_opr	/* first operand			*/
	movl	$SOURCE3W3,_opr + 4 /* second operand			*/
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK3W3,mask	/*mask					*/
	movl	$SOURCE3W3,r4	/*source				*/
	movl	$INIT3W3,dest	/*destination				*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	orw3	mask+2,r4,dest+2/*try it mem reg 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 data				*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$2,_ercode	/* error code flag failure		*/
	jmp	*badrtn
1:	movl	$0x7fff0000,r6
	cmpl	dest,r6		/*if dest <> expected value,		*/
	jeql	orw3mrm		/* if no error continue			*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$1,_ercode	/* error code data miscompare		*/
	movl	dest,_actual	/* actual data				*/
	movl	r6,_expected	/* expected data		*/
	jmp	*badrtn
/*									*/
/*	Now use mask = R, source & destination = M			*/
/*									*/
orw3mrm:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest		*/
ao7:	callf	$4,_setjmp	/* save context for error return	*/
	movab	ao7,_stpc	/* starting address of subtest		*/
	movl	$7,_subtst	/* subtest number			*/
	movl	$2,_no_opr	/* number of operands in use		*/
	movl	$MASK1W3,_opr	/* first operand			*/
	movl	$SOURCE1W3,_opr + 4 /* second operand			*/
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK1W3,r3	/*mask					*/
	movl	$SOURCE1W3,source/*source				*/
	movl	$INIT1W3,dest	/*destination				*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	orw3	r3,source+2,dest+2/*try it reg mem mem			*/
	jeql	error7		/*error if Z = 1			*/
	jgeq	error7		/*error if N =0			*/
	jcc	error7		/*error if C = 0			*/
	jvs	error7		/*error if V = 1			*/
	jmp	1f
error7:	movpsl	_actual		/* actual data				*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$2,_ercode	/* error code flag failure		*/
	jmp	*badrtn
1:	cmpl	dest,$EXP1W3	/*if dest <> expected value,		*/
	jeql	o8		/* if no error continue			*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$1,_ercode	/* error code data miscompare		*/
	movl	dest,_actual	/* actual data				*/
	movl	$EXP1W3,_expected	/* expected data		*/
	jmp	*badrtn
/*									*/
/*	Now try another mask(0x5555)					*/
/*									*/
o8:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest		*/
ao8:	callf	$4,_setjmp	/* save context for error return	*/
	movab	ao8,_stpc	/* starting address of subtest		*/
	movl	$8,_subtst	/* subtest number			*/
	movl	$2,_no_opr	/* number of operands in use		*/
	movl	$MASK2W3,_opr	/* first operand			*/
	movl	$SOURCE2W3,_opr + 4 /* second operand			*/
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK2W3,mask	/*mask					*/
	movl	$INIT1W3,dest	/*destination				*/
	bispsw	$(Z|V)	     	/*overflow & zero bits ON		*/
	orw3	mask+2,$SOURCE2W3,dest+2	/*try it mem data mem		*/
	jeql	error8		/*error if Z = 1			*/
	jlss	error8		/*error if N =1			*/
	jcc	error8		/*error if C = 0			*/
	jvs	error8		/*error if V = 1			*/
	jmp	1f
error8:	movpsl	_actual		/* actual data				*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$2,_ercode	/* error code flag failure		*/
	jmp	*badrtn
1:	cmpl	dest,$EXP2W3	/*if dest <> expected value,		*/
	jeql	o9		/* if no error continue			*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$1,_ercode	/* error code data miscompare		*/
	movl	dest,_actual	/* actual data				*/
	movl	$EXP2W3,_expected	/* expected data		*/
	jmp	*badrtn
/*									*/
/*	Now try another mask(0x0000), source(0x0000), & dest(0x0000)	*/
/*									*/
o9:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest		*/
ao9:	callf	$4,_setjmp	/* save context for error return	*/
	movab	ao9,_stpc	/* starting address of subtest		*/
	movl	$9,_subtst	/* subtest number			*/
	movl	$2,_no_opr	/* number of operands in use		*/
	movl	$MASK2W3,_opr	/* first operand			*/
	movl	$SOURCE2W3,_opr + 4 /* second operand			*/
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$SOURCE3W3,r4	/*source				*/
	movl	$INIT3W3,dest	/*destination				*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	orw3	$MASK3W3,r4,dest+2/*try it data reg mem		*/
	jneq	error9		/*error if Z = 0			*/
	jlss	error9		/*error if N = 1			*/
	jcc	error9		/*error if C = 0			*/
	jvs	error9		/*error if V = 1			*/
	jmp	1f
error9:	movpsl	_actual		/* actual data				*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$2,_ercode	/* error code flag failure		*/
	jmp	*badrtn
1:	movl	$0x7fff0000,r6
	cmpl	dest,r6		/*if dest <> expected value,		*/
	jeql	orw3rmm		/* if no error continue			*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$1,_ercode	/* error code data miscompare		*/
	movl	dest,_actual	/* actual data				*/
	movl	r6,_expected	/* expected data		*/
	jmp	*badrtn

/*									*/
/*	Now try mask = M, source = R, dest = M				*/
/*									*/
orw3rmm:
	
	bbs	$0,_force_lp,0b	/* if set loop on last subtest		*/
ao10:	callf	$4,_setjmp	/* save context for error return	*/
	movab	ao10,_stpc	/* starting address of subtest		*/
	movl	$0xa,_subtst	/* subtest number			*/
	movl	$2,_no_opr	/* number of operands in use		*/
	movl	$MASK1W3,_opr	/* first operand			*/
	movl	$SOURCE1W3,_opr + 4 /* second operand			*/
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$INIT1W3,dest	/*destination				*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	orw3	$MASK1W3,$SOURCE1W3,dest+2/*try it data data mem	*/
	jeql	error10		/*error if Z = 1			*/
	jlss	error10		/*error if N =0			*/
	jcc	error10		/*error if C = 0			*/
	jvs	error10		/*error if V = 1			*/
	jmp	1f
error10: movpsl	_actual		/* actual data				*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$2,_ercode	/* error code flag failure		*/
	jmp	*badrtn
1:	cmpl	dest,$EXP1W3	/*if dest <> expected value,		*/
	jeql	o11		/* if no error continue			*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$1,_ercode	/* error code data miscompare		*/
	movl	dest,_actual	/* actual data				*/
	movl	$EXP1W3,_expected	/* expected data		*/
	jmp	*badrtn

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

o11:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest		*/
ao11:	callf	$4,_setjmp	/* save context for error return	*/
	movab	ao11,_stpc	/* starting address of subtest		*/
	movl	$0xb,_subtst	/* subtest number			*/
	movl	$2,_no_opr	/* number of operands in use		*/
	movl	$MASK2W3,_opr	/* first operand			*/
	movl	$SOURCE2W3,_opr + 4 /* second operand			*/
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$SOURCE2W3,r4	/*source				*/
	movl	$INIT1W3,r5	/*destination				*/
	bispsw	$(Z|V)	     	/*overflow & zero bits ON		*/
	orw3	$MASK2W3,r4,r5	/*try it data reg reg	*/
	jeql	error11		/*error if Z = 1			*/
	jlss	error11		/*error if N =1			*/
	jcc	error11		/*error if C = 0			*/
	jvs	error11		/*error if V = 1			*/
	jmp	1f
error11: movpsl	_actual		/* actual data				*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$2,_ercode	/* error code flag failure		*/
	jmp	*badrtn
1:	movl	$0xffff,r6
	cmpl	r5,r6		/*if dest <> expected value,		*/
	jeql	o12		/* if no error continue			*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$1,_ercode	/* error code data miscompare		*/
	movl	r5,_actual	/* actual data				*/
	movl	r6,_expected	/* expected data		*/
	jmp	*badrtn
/*								*/
/*	Now try another mask(0x0000), mask(0x0000), dest(0x0000)	*/
/*									*/
o12:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest		*/
ao12:	callf	$4,_setjmp	/* save context for error return	*/
	movab	ao12,_stpc	/* starting address of subtest		*/
	movl	$0xc,_subtst	/* subtest number			*/
	movl	$2,_no_opr	/* number of operands in use		*/
	movl	$MASK3W3,_opr	/* first operand			*/
	movl	$SOURCE3W3,_opr + 4 /* second operand			*/
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK3W3,mask	/*mask					*/
	movl	$SOURCE3W3,r4	/*source				*/
	movl	$INIT3W3,dest	/*destination				*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	orw3	mask+2,r4,dest+2	/*try it			*/
	jneq	error1		/*error if Z = 0			*/
	jlss	error1		/*error if N = 1			*/
	jcc	error1		/*error if C = 0			*/
	jvs	error1		/*error if V = 1			*/
	jmp	1f
error12: movpsl	_actual		/* actual data				*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$2,_ercode	/* error code flag failure		*/
	jmp	*badrtn
1:	movl	$0x7fff0000,r6
	cmpl	dest,r6		/*if dest <> expected value,		*/
	jeql	orw3mrr		/* if no error continue			*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$1,_ercode	/* error code data miscompare		*/
	movl	dest,_actual	/* actual data				*/
	movl	r6,_expected	/* expected data		*/
	jmp	*badrtn
/*									*/
/*	Now try mask = R, source = M, dest = R				*/
/*									*/
orw3mrr:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest		*/
ao13:	callf	$4,_setjmp	/* save context for error return	*/
	movab	ao13,_stpc	/* starting address of subtest		*/
	movl	$0xd,_subtst	/* subtest number			*/
	movl	$2,_no_opr	/* number of operands in use		*/
	movl	$MASK1W3,_opr	/* first operand			*/
	movl	$SOURCE1W3,_opr + 4 /* second operand			*/
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK1W3,r3	/*mask					*/
	movl	$SOURCE1W3,source/*source				*/
	movl	$INIT1W3,r5	/*destination				*/
	bispsw	$(Z|V|C)	/*overflow, Z & carry bits ON		*/
	orw3	r3,source+2,r5	/*try it				*/
	jeql	error13		/*error if Z = 1			*/
	jgeq	error13		/*error if N =1			*/
	jcc	error13		/*error if C = 0			*/
	jvs	error13		/*error if V = 1			*/
	jmp	1f
error13: movpsl	_actual		/* actual data				*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$2,_ercode	/* error code flag failure		*/
	jmp	*badrtn
1:	movl	$0xffffaaaa,r6
	cmpl	r5,r6		/*if dest <> expected value,		*/
	jeql	o14		/* if no error continue			*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$1,_ercode	/* error code data miscompare		*/
	movl	r5,_actual	/* actual data				*/
	movl	r6,_expected	/* expected data		*/
	jmp	*badrtn

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

o14:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest		*/
ao14:	callf	$4,_setjmp	/* save context for error return	*/
	movab	ao14,_stpc	/* starting address of subtest		*/
	movl	$0xe,_subtst	/* subtest number			*/
	movl	$2,_no_opr	/* number of operands in use		*/
	movl	$MASK2W3,_opr	/* first operand			*/
	movl	$SOURCE2W3,_opr + 4 /* second operand			*/
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK2W3,r3	/*mask					*/
	movl	$SOURCE2W3,source/*source				*/
	movl	$INIT1W3,r5	/*destination				*/
	bispsw	$(Z|V)	     	/*overflow & zero bits ON		*/
	orw3	r3,source+2,r5	/*try it				*/
	jeql	error14		/*error if Z = 1			*/
	jgeq	error14		/*error if N =0			*/
	jcc	error14		/*error if C = 0			*/
	jvs	error14		/*error if V = 1			*/
	jmp	1f
error14: movpsl	_actual		/* actual data				*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$2,_ercode	/* error code flag failure		*/
	jmp	*badrtn
1:	movl	$-1,r6
	cmpl	r5,r6		/*if dest <> expected value,		*/
	jeql	o15		/* if no error continue			*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$1,_ercode	/* error code data miscompare		*/
	movl	r5,_actual	/* actual data				*/
	movl	r6,_expected	/* expected data		*/
	jmp	*badrtn
/*									*/
/*	Now try another mask(0x0000), mask(0x0000), & dest(0x0000)	*/
/*									*/
o15:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest		*/
ao15:	callf	$4,_setjmp	/* save context for error return	*/
	movab	ao15,_stpc	/* starting address of subtest		*/
	movl	$0xf,_subtst	/* subtest number			*/
	movl	$2,_no_opr	/* number of operands in use		*/
	movl	$MASK3W3,_opr	/* first operand			*/
	movl	$SOURCE3W3,_opr + 4 /* second operand			*/
0:	bicpsw	$PSWMASK	/*turn overflow enable bit off		*/
	movl	$MASK3W3,r3	/*mask					*/
	movl	$SOURCE3W3,source/*source				*/
	movl	$INIT3W3,r5	/*destination				*/
	bispsw	$(N|V)	     	/*overflow & negetive bits ON		*/
	orw3	r3,source+2,r5	/*try it				*/
	jneq	error15		/*error if Z = 0			*/
	jlss	error15		/*error if N = 1			*/
	jcc	error15		/*error if C = 0			*/
	jvs	error15		/*error if V = 1			*/
	jmp	1f
error15: movpsl	_actual		/* actual data				*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$2,_ercode	/* error code flag failure		*/
	jmp	*badrtn
1:	cmpl	r5,$EXP3W3	/*if dest <> expected value,		*/
	jeql	aldn		/* if no error continue			*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$1,_ercode	/* error code data miscompare		*/
	movl	r5,_actual	/* actual data				*/
	movl	r6,_expected	/* expected data		*/
	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.