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

/*	  DECW instruction test				*/
/*	  DECL has been tested prior to this test	*/
/*	  Privilege registers		*/

	.set	IPL,8
	.set    MAPEN,9
	.set    KSP,19

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

/*	  constants			*/
	.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	_dec_w
_dec_w:
	callf	$4,_setjmp	/* save context for error return */
	movab	_dec_w,_stpc	/* save address of subtest start */
	movl	$1,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$1,_opr		/* first operand */
0:	movl	$1,r3		/* load r3 with 1		*/
	bispsw	$(N|V)		/* set n,v flags		*/
	bicpsw	$(C|Z)		/* clear c,z flag		*/
	decw 	r3		/* decrement r3			*/
	jneq	error1		/* error if z flag not set	*/
	jcc	error1		/* error if c flag not set	*/
	jlss	error1		/* error if n flag still set	*/
	jvs	error1		/* error if v flag still set	*/
	jmp	1f
error1:	movpsl	_actual		/* actual = psl MAYBE it is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	cmpl	$0,r3		/* compare r3 to 0		*/
	jeql	ovf1		/* no error then continue */
	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

ovf1:			/* To be tested in phase 2 */
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
ad2:	callf	$4,_setjmp	/* save context for error return */
	movab	ad2,_stpc	/* save address of subtest start */
	movl	$2,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$MAXNEGL,_opr		/* first operand */
0:	movl	$MAXNEGL,r3	/* load r3 with largest neg. value	*/
	bispsw	$Z		/* set z flags			*/
	bicpsw	$(V|C|N)	/* clear n,v,c  flag		*/
	decw 	r3		/* decrement r3			*/
	jeql	error2		/* error if z flag still set	*/
	jgeq	error2		/* error if n flag not set	*/
	jcc	error2		/* error if c flag not set	*/
	jvs	error2		/* error if v flag not set	*/
	jmp	1f
error2:	movpsl	_actual		/* actual = psl MAYBE it is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	cmpl	$MAXPOSL,r3	/* compare r3 to largest pos. value	*/
	jeql	d3		/* no error then continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r3,_actual	/* actual data */
	movl	$MAXPOSL,_expected	/* expected data */
	jmp	*badrtn

d3:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
ad3:	callf	$4,_setjmp	/* save context for error return */
	movab	ad3,_stpc	/* save address of subtest start */
	movl	$3,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$0,_opr		/* first operand */
0:	movl	$0,r3
	bispsw	$(C|Z|V)	/* set c,z,v flags		*/
	bicpsw	$N		/* clear n  flag		*/
	decw	r3
	jeql	error3		/* error if z flag still set	*/
	jcs	error3		/* error if c flag still set	*/
	jvs	error3		/* error if v flag still set	*/
	jgeq	error3		/* error if n flag clear	*/
	jmp	1f
error3:	movpsl	_actual		/* actual = psl MAYBE it 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	/* compare r3 to -1		*/
	jeql	decmw		/* no error then continue */
	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

decmw:				/* DECREMENT MEMORY		*/
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
ad4:	callf	$4,_setjmp	/* save context for error return */
	movab	ad4,_stpc	/* save address of subtest start */
	movl	$4,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$0x0001ffff,_opr	/* first operand */
0:	movl	$0x0001ffff,tstloc	/* load tstloc with 0x0001ffff	*/
	bispsw	$(N|V)		/* set n,v flags		*/
	bicpsw	$(C|Z)		/* clear c,z flag		*/
	decw 	tstloc		/* decrement value in tstloc	*/
	jneq	error4		/* error if z flag not set	*/
	jcc	error4		/* error if c flag not set	*/
	jlss	error4		/* error if n flag still set	*/
	jvs	error4		/* error if v flag still set	*/
	jmp	1f
error4:	movpsl	_actual		/* actual = psl MAYBE it is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
	bicpsw	$Z
1:	cmpl	$0x0000ffff,tstloc	/* compare tstloc to 0x0000ffff	*/
	jeql	ovf2		/* no error then continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	tstloc,_actual	/* actual data */
	movl	$0x0000ffff,_expected	/* expected data */
	jmp	*badrtn
ovf2:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
ad5:	callf	$4,_setjmp	/* save context for error return */
	movab	ad5,_stpc	/* save address of subtest start */
	movl	$5,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$0x80003333,_opr		/* first operand */
0:	movl	$0x80003333,tstloc
	bispsw	$Z		/* set z flags			*/
	bicpsw	$(V|C|N)	/* clear n,v,c flags		*/
	decw 	tstloc		/* decrement tstloc		*/
	jeql	error5		/* error if z flag still set	*/
	jgeq	error5		/* error if n flag not set	*/
	jcc	error5		/* error if c flag not set	*/
	jvc	error5		/* error if v flag not set	*/
	jmp	1f
error5:	movpsl	_actual		/* actual = psl MAYBE it is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	cmpl	$0x7fff3333,tstloc /* tstloc == 0x7fff3333	*/
	jeql	d6		/* no error then continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	tstloc,_actual	/* actual data */
	movl	$0x7fff3333,_expected	/* expected data */
	jmp	*badrtn

d6:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
ad6:	callf	$4,_setjmp	/* save context for error return */
	movab	ad6,_stpc	/* save address of subtest start */
	movl	$6,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$0x0000ffff,_opr		/* first operand */
0:	movl 	$0x0000ffff,tstloc	/* set tstloc = 0x0000ffff	*/
	bispsw	$(Z|V|C)	/* set z,v,c flags		*/
	bicpsw	$N		/* clear n flag			*/
	decw	tstloc		/* decrement tstloc		*/
	jgeq	error6		/* error if n flag not set	*/
	jeql	error6		/* error if z flag still set	*/
	jvs	error6		/* error if v flag still set	*/
	jcs	error6		/* error if c flag still set	*/
	jmp	1f
error6:	movpsl	_actual		/* actual = psl MAYBE it 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	/* tstloc == 0xffffffff	*/
	jeql	aldn		/* no error then continue */
	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

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.