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




/*		TESTB (test byte) test					*/

/*Test name = tstb							*/
/*Description =								*/
/*	This test checks "tstb" instruction to see that			*/
/*	(1)Z, V, & C flags are set to zero (src < 0) & N = 1		*/
/*	(2)N, V, & C flags are set to zero (src = 0) & Z = 1		*/
/*	(3)all the flags are zero (src > 0).				*/
/*	Register 1 (r1) & memory location tmloc(lebel) are used as	*/
/*	src(source).							*/
/*									*/
/*	Constants definition						*/
/*									*/
	.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	PSWMASK,0x003f
	.set	SRCB1,0xff
	.set	SRCW1,0xffff
	.set	SRCL1,0xffffffff
	.set	SRCB2,0
	.set	SRCW2,0
	.set	SRCL2,0
	.set	SRCB3,1
	.set	SRCW3,1
	.set	SRCL3,1

	.globl	_tst_b
_tst_b:
	callf	$4,_setjmp	/* save context for error return */
	movab	_tst_b,_stpc	/* save address of subtest start */
	movl	$1,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$SRCB1,_opr	/* first operand */
0:	movl	$SRCB1,r1	/*r1 = source				*/
	bispsw	$(Z|V|C)	/*turn zero, overflow, & carry ON	*/
	tstb	r1		/*execute "tstb"			*/
	beql	error1		/*error if Z = 1			*/
	blss	error1		/*error if N = 1			*/
	bvs	error1		/*error if V = 1			*/
	bcc	error1		/*error if C = 0			*/
	jmp	t2		/* if correct continue */
error1:	movpsl	_actual		/* actual = psl incorrect for some reason */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
/*									*/
/*	Now try src = 0							*/
/*									*/
t2:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest	*/
at2:	callf	$4,_setjmp	/* save context for error return */
	movab	at2,_stpc	/* save address of subtest start */
	movl	$2,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$SRCB2,_opr	/* first operand */
0:	bicpsw	$PSWMASK	/*disable overflow & other enable bits  */
	movl	$SRCB2,r1	/*r1 = source				*/
	bispsw	$(N|V|C)	/*turn neg, overflow, & carry ON	*/
	tstb	r1		/*execute "tstb"			*/
	bneq	error2		/*error if Z = 0			*/
	blss	error2		/*error if N = 1			*/
	bvs	error2		/*error if V = 1			*/
	bcc	error2		/*error if C = 0			*/
	jmp	t3		/* if correct continue */
error2:	movpsl	_actual		/* actual = psl incorrect for some reason */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
/*									*/
/*	Now try src > 0							*/
/*									*/
	
t3:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest	*/
at3:	callf	$4,_setjmp	/* save context for error return */
	movab	at3,_stpc	/* save address of subtest start */
	movl	$3,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$SRCB3,_opr	/* first operand */
0:	bicpsw	$PSWMASK	/*disable overflow & other enable bits  */
	movl	$SRCB3,r1	/*r1 = source				*/
	bispsw	$(Z|N|V|C)	/*turn zero, neg, overflow, & carry ON	*/
	tstb	r1		/*execute "tstb"			*/
	beql	error3		/*error if Z = 1			*/
	blss	error3		/*error if N = 1			*/
	bvs	error3		/*error if V = 1			*/
	bcc	error3		/*error if C = 0			*/
	jmp	tstbm
error3:	movpsl	_actual		/* actual = psl incorrect for some reason */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn

/*									*/
/*	Now use memory location(tmloc) instead of r1			*/
/*									*/
tstbm:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest	*/
at4:	callf	$4,_setjmp	/* save context for error return */
	movab	at4,_stpc	/* save address of subtest start */
	movl	$4,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$SRCB1,_opr	/* first operand */
0:	bicpsw	$PSWMASK	/*disable overflow & other enable bits  */
	movl	$SRCB1,tmloc	/*tmloc = source			*/
	bispsw	$(Z|V|C)	/*turn zero, overflow, & carry ON	*/
	tstb	tmloc+3		/*execute "tstb"			*/
	beql	error4		/*error if Z = 1			*/
	bgeq	error4		/*error if N = 0			*/
	bvs	error4		/*error if V = 1			*/
	bcc	error4		/*error if C = 0			*/
	jmp	t5
error4:	movpsl	_actual		/* actual = psl incorrect for some reason */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
/*									*/
/*	Now try src = 0							*/
/*									*/
t5:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest	*/
at5:	callf	$4,_setjmp	/* save context for error return */
	movab	at5,_stpc	/* save address of subtest start */
	movl	$5,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$SRCB2,_opr	/* first operand */
0:	bicpsw	$PSWMASK	/*disable overflow & other enable bits  */
	movl	$SRCB2,tmloc	/*tmloc = source			*/
	bispsw	$(N|V|C)	/*turn neg, overflow, & carry ON	*/
	tstb	tmloc		/*execute "tstb"			*/
	bneq	error5		/*error if Z = 0			*/
	blss	error5		/*error if N = 1			*/
	bvs	error5		/*error if V = 1			*/
	bcc	error5		/*error if C = 0			*/
	jmp	t6
error5:	movpsl	_actual		/* actual = psl incorrect for some reason */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
/*									*/
/*									*/
/*	Now try src > 0							*/
/*									*/
	
t6:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest	*/
at6:	callf	$4,_setjmp	/* save context for error return */
	movab	at6,_stpc	/* save address of subtest start */
	movl	$6,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$SRCB3,_opr	/* first operand */
0:	bicpsw	$PSWMASK	/*disable overflow & other enable bits  */
	movl	$SRCB3,tmloc	/*tmloc = source			*/
	bispsw	$(Z|N|V|C)	/*turn zero, neg, overflow, & carry ON	*/
	tstb	tmloc+3		/*execute "tstb"			*/
	beql	error6		/*error if Z = 1			*/
	blss	error6		/*error if N = 1			*/
	bvs	error6		/*error if V = 1			*/
	bcc	error6		/*error if C = 0			*/
	jmp	aldn
error6:	movpsl	_actual		/* actual = psl incorrect for some reason */
	bbs	$0,_scoplp,0b	/* if set scope 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		/* good, return to monitor */


/*									*/
/*	Variables							*/
/*									*/
	.align	2
tmloc:	.space	4


unix.superglobalmegacorp.com

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