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

/*	  INCB instruction test				*/
/*	  Privilege registers				*/

	.set	IPL,0x8
	.set	MAPEN,0x9
	.set	KSP,0x19

/*	  PSL fields			*/
	.set	IV,32
	.set 	T,16
	.set	N,8
	.set	Z,4
	.set	V,2
	.set	C,1

/*	  constants			*/
	.set	DISABLE,0
	.set 	ENABLE,1
	.set 	MAXPOSL,0x7fffffff
	.set	MAXNEGL,0x80000000
	.set	MAXPOSW,0x7fff
	.set	MAXNEGW,0x8000
	.set	MAXPOSB,0x7f
	.set	MAXNEGB,0x80
	.set	ZERO,0
	.set	ONES,0xffffffff
	.set	HIGH,31			/* highest interrupt priority	*/

	.globl	_inc_b
_inc_b:
	callf	$4,_setjmp	/* save context for error return */
	movab	_inc_b,_stpc	/* save address of subtest start */
	movl	$1,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$0xfffffffe,_opr /* first operand */
0:	bicpsw	$(IV|T)		/* disable overflow,trace exceptions 	*/
incrb:				/* INCREMENT REGISTER 			*/
	movl	$0xfffffffe,r3	/* load r3 with -2			*/
	bispsw	$(Z|V|C)	/* set z,v,c flags			*/
	bicpsw	$N		/* clear n flag				*/
	incb	r3		/* increment r3				*/
	jgeq	error1		/* error if n flag not set		*/
 	jeql	error1		/* error if z flag still set		*/
	jvs	error1		/* error if v flag still set		*/
	jcs	error1		/* error if c flag still set		*/
	jmp	1f
error1:	movpsl	_actual		/* actual = psl MAYBE is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	cmpl	$0xffffffff,r3	/* is r3 = -1				*/
	jeql	step2
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r3,_actual	/* actual data */
	movl	$0xffffffff,_expected /* expected data */
	jmp	*badrtn
step2:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
ai2:	callf	$4,_setjmp	/* save context for error return */
	movab	ai2,_stpc	/* save address of subtest start */
	movl	$2,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$0xfffffffe,_opr /* first operand */
0:	bispsw	$(N|V)		/* set n,v flags			*/
	bicpsw	$(Z|C)		/* clear z,c flag			*/
	incb	r3		/* increment r3				*/
	jlss	error2		/* error if n flag still set		*/
	jvs	error2		/* error if v flag still set		*/
 	jneq	error2		/* error if z flag not set		*/
	jcc	error2		/* error if c flag not set		*/
	jmp	1f
error2:	movpsl	_actual		/* actual = psl MAYBE is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	$0x0,r3		/* is r3 == 0x0				*/
	jeql	ovfl
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r3,_actual	/* actual data */
	movl	$0,_expected /* expected data */
	jmp	*badrtn
ovfl:
# To be investigate : what hareware does if this happen !! an incb is executed
# to an incorrect data
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
ai3:	callf	$4,_setjmp	/* save context for error return */
	movab	ai3,_stpc	/* save address of subtest start */
	movl	$3,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$0x7fffffff,_opr /* first operand */
0:	movl 	$0x7fffffff,r3   /* set r3 = 0x7fffffff	*/
	bispsw 	$(Z|C|N)	/* set n,z,c flags			*/
	bicpsw	$V		/* clear v flags			*/
	incb	r3		/* increment r3				*/
	jvs	error3		/* error if v flag not set		*/
	jlss	error3		/* error if n flag set			*/
	jeql	error3		/* error if z flag still set		*/
	jcs	error3		/* error if c flag still set		*/
	jmp	1f
error3:	movpsl	_actual		/* actual = psl MAYBE is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	cmpl	$MAXNEGL,r3  	/* is r3 == 0x80000000	*/
	jeql	incmb
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r3,_actual	/* actual data */
	movl	$MAXNEGL,_expected /* expected data */
	jmp	*badrtn
incmb:				/* INCREMENT MEMORY			*/
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
ai4:	callf	$4,_setjmp	/* save context for error return */
	movab	ai4,_stpc	/* save address of subtest start */
	movl	$4,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$0xfeffffff,_opr /* first operand */
0:	movl	$0xfeffffff,tstloc	/* load tstloc with -2 (byte)	*/
	bispsw	$(Z|V|C) 	/* set z,v,c flags			*/
	bicpsw	$N		/* clear n flag				*/
	incb	tstloc		/* increment tstloc			*/
	jgeq	error4		/* error if n flag not set		*/
 	jeql	error4		/* error if z flag still set		*/
	jvs	error4		/* error if v flag still set		*/
	jcs	error4		/* error if c flag still set		*/
	jmp	1f
error4:	movpsl	_actual		/* actual = psl MAYBE is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	cmpl	$0xffffffff,tstloc	/* is tstloc == -1		*/
	jeql	stp2
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	tstloc,_actual	/* actual data */
	movl	$0xffffffff,_expected /* expected data */
	jmp	*badrtn
stp2:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
ai5:	callf	$4,_setjmp	/* save context for error return */
	movab	ai5,_stpc	/* save address of subtest start */
	movl	$5,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$0xffffffff,_opr /* first operand */
0:	bispsw	$(N|V)		/* set n,v flags			*/
	bicpsw	$(Z|C)		/* clear z,c flag			*/
	incb	tstloc		/* increment tstloc			*/
	jlss	error5		/* error if n flag still set		*/
	jvs	error5		/* error if v flag still set		*/
 	jneq	error5		/* error if z flag not set		*/
	jcc	error5		/* error if c flag not set		*/
	jmp	1f
error5:	movpsl	_actual		/* actual = psl MAYBE is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	$0x00ffffff,tstloc	/* is tstloc == 0x00ffffff	*/
	jeql	ovfl1
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	tstloc,_actual	/* actual data */
	movl	$0x00ffffff,_expected /* expected data */
	jmp	*badrtn
ovfl1:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
ai6:	callf	$4,_setjmp	/* save context for error return */
	movab	ai6,_stpc	/* save address of subtest start */
	movl	$6,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$0x7fffffff,_opr /* first operand */
0:	movl 	$0x7fffffff,tstloc  /* tstloc = 0x7fffffff		*/
	bispsw 	$(Z|C|N)	/* set n,z,c flags			*/
	bicpsw	$V		/* clear n,v flags			*/
	incb	tstloc		/* increment tstloc			*/
	jvc	error6		/* error if v flag not set		*/
	jlss	error6		/* error if n flag set			*/
	jeql	error6		/* error if z flag still set		*/
	jcs	error6		/* error if c flag still set		*/
	jmp	1f
error6:	movpsl	_actual		/* actual = psl MAYBE is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	cmpl	$0x80ffffff,tstloc	/* is tstloc == 0x80ffffff	*/
	jeql	aldn
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	tstloc,_actual	/* actual data */
	movl	$0x80ffffff,_expected /* expected data */
	jmp	*badrtn

aldn:	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
	jmp	*return
/*									*/
/*	test data							*/
	.align	2
tstloc:	.long	0


unix.superglobalmegacorp.com

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