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






/*		TESTW (test word) test					*/

/*Test name = tstw							*/
/*Description =								*/
/*	This test checks "tstw" 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_w
_tst_w:
	callf	$4,_setjmp	/* save context for error return */
	movab	_tst_w,_stpc	/* starting address of subtest */
	movl	$1,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$SRCW1,_opr	/* first operand */
0:	movl	$SRCW1,r3	/*r3 = source				*/
	bispsw	$(Z|V|C)	/*turn zero, overflow, & carry ON	*/
	tstw	r3		/*execute "tstw"			*/
	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
error1:	movpsl	_actual		/* actual = psl is incorrect */
	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	/* starting address of subtest */
	movl	$2,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$SRCW2,_opr	/* first operand */
0:	bicpsw	$PSWMASK	/*disable overflow & other enable bits  */
	movl	$SRCW2,r3	/*r3 = source				*/
	bispsw	$(N|V|C)	/*turn neg, overflow, & carry ON	*/
	tstw	r3		/*execute "tstw"			*/
	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
error2:	movpsl	_actual		/* actual = psl is incorrect */
	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	/* starting address of subtest */
	movl	$3,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$SRCW3,_opr	/* first operand */
0:	bicpsw	$PSWMASK	/*disable overflow & other enable bits  */
	movl	$SRCW3,r3	/*r3 = source				*/
	bispsw	$(Z|N|V|C)	/*turn zero, neg, overflow, & carry ON	*/
	tstw	r3		/*execute "tstw"			*/
	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	tstwm
error3:	movpsl	_actual		/* actual = psl is incorrect */
	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 r3			*/
/*									*/
tstwm:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
at4:	callf	$4,_setjmp	/* save context for error return */
	movab	at4,_stpc	/* starting address of subtest */
	movl	$4,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$SRCW1,_opr	/* first operand */
0:	bicpsw	$PSWMASK	/*disable overflow & other enable bits  */
	movl	$SRCW1,tmloc	/*tmloc = source			*/
	bispsw	$(Z|V|C)	/*turn zero, overflow, & carry ON	*/
	tstw	tmloc+2		/*execute "tstw"			*/
	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 is incorrect */
	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	/* starting address of subtest */
	movl	$5,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$SRCW2,_opr	/* first operand */
0:	bicpsw	$PSWMASK	/*disable overflow & other enable bits  */
	bispsw	$(N|V|C)	/*turn neg, overflow, & carry ON	*/
	tstw	$SRCW2		/*execute "tstw" immediate data		*/
	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 is incorrect */
	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	/* starting address of subtest */
	movl	$6,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$SRCW3,_opr	/* first operand */
0:	bicpsw	$PSWMASK	/*disable overflow & other enable bits  */
	movl	$SRCW3,tmloc	/*tmloc = source			*/
	bispsw	$(Z|N|V|C)	/*turn zero, neg, overflow, & carry ON	*/
	tstw	tmloc+2		/*execute "tstw"			*/
	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 is incorrect */
	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.