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



/*	BBSSI (branch on bit set & set interlocked) test		*/
/*									*/
/*	This test checks 'bbssi' instruction as follows:		*/
/*	(1) forward/backward branch on bit set conditon			*/
/*	(2) no branch on bit off condition & bit is set			*/
/*	(3) no effect on condition codes				*/
/*									*/
/*									*/
/*	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,0xf

	.globl	_bbssi
_bbssi:
	callf	$4,_setjmp	/* save context for error return */
	movab	_bbssi,_stpc	/* save subtest program counter */
	movl	$1,_subtst		/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$0xfffffffe,_opr	/* first operand */
0:	movl	$0xfffffffe,r3	/* All bits are set except bit 0	*/
	bicpsw	$PSWMASK
	bispsw	$(V|Z|C)	/*these flags ON			*/
	bbssi	$0,r3,erc0	/*should not branch as bit 0 is OFF	*/
	jneq	errorc		/*Z changed - error			*/
	jlss	errorc		/*N changed - error			*/
	jvc	errorc		/*V changed - error			*/
	jcc	errorc		/*C changed - error			*/
	cmpl	$0xffffffff,r3	/*check that bit is set			*/
	jeql	nxt1
	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 */
	jmp	*badrtn		/*error - bit did not get set		*/
erc0:
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare*/
	movl	r3,_actual	/* actual data */
	movl	$0xffffffff,_expected	 /* expected */
	jmp	*badrtn		/*error - branch taken with bit off;	*/

errorc:
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	movl	r3,_actual	/* actual data */
	movl	$0xffffffff,_expected	 /* expected */
	jmp	*badrtn		/*error - error in flags		*/

	.space 	12		/*dangerous area - don't come in	*/
nxt1:
	bbs	$0,_force_lp,0	/* if set loop on last subtest */
nxt:	callf	$4,_setjmp	/* save context for error return */
	movab	nxt,_stpc	/* save subtest program counter */
	movl	$2,_subtst		/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$1,_opr		/* first operand */
0:	movl	$1,r3		/* All bit off except bit 0 		*/
	bispsw	$(Z|N|V|C)	/*these flags ON			*/
	bbssi	$0,r3,nxt2	/*now branch forward as bit in ON	*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	r3,_actual	/* actual data */
	movl	$1,_expected	 /* expected */
	jmp	*badrtn		/*error - did not branch with bit set;	*/
	.space	400
nxt2:
	movl	$3,r1		/* subtest number */
	cmpl	$1,r3		/* Check if bit is set			*/
	jeql	nxt3
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r3,_actual	/* actual data */
	movl	$1,_expected	 /* expected */
	jmp	*badrtn		/*error - bit did not get set		*/

nxt3:
	bbs	$0,_force_lp,0	/* if set loop on last subtest */
nx:	callf	$4,_setjmp	/* save context for error return */
	movab	nx,_stpc	/* save subtest program counter */
	movl	$3,_subtst		/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$0x7fffffff,_opr	/* first operand */
0:	movl	$0x7fffffff,r3	/* All bits are set except bit 31	*/
	bicpsw	$PSWMASK
	bispsw	$(V|N|C)	/*these flags ON			*/
	bbssi	$31,r3,erc1	/*should not branch as bit 31 is OFF	*/
	jeql	errord		/*Z changed - error			*/
	jgeq	errord		/*N changed - error			*/
	jvc	errord		/*V changed - error			*/
	jcc	errord		/*C changed - error			*/
	cmpl	$0xffffffff,r3	/*check that bit is set			*/
	jeql	nxt4
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r3,_actual	/* actual data */
	movl	$0x7fffffff,_expected	 /* expected */
	jmp	*badrtn		/*error - bit did not get set		*/
erc1:
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	r3,_actual	/* actual data */
	movl	$0x7fffffff,_expected	 /* expected */
	jmp	*badrtn		/*error - branch taken with bit off;	*/
errord:
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	movl	r3,_actual	/* actual data */
	movl	$0x7fffffff,_expected	 /* expected */
	jmp	*badrtn		/*error - error in flags		*/
nxt4:
	bbs	$0,_force_lp,0	/* if set loop on last subtest */
n:	callf	$4,_setjmp	/* save context for error return */
	movab	n,_stpc		/* save subtest program counter */
	movl	$4,_subtst		/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$0x80000000,_opr	/* first operand */
0:	movl	$0x80000000,r3	/* All bit off except bit 31 		*/
	bispsw	$(Z|N|V|C)	/*these flags ON			*/
	bbssi	$31,r3,nxt5	/*now branch forward as bit in ON	*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand misompare */
	movl	r3,_actual	/* actual data */
	movl	$0x80000000,_expected	 /* expected */
	jmp	*badrtn		/*error - did not branch with bit set;	*/
	.space	400
nxt5:
	cmpl	$0x80000000,r3	/* Check if bit still set ?		*/
	jeql	nxt6
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r3,_actual	/* actual data */
	movl	$0x80000000,_expected	 /* expected */
	jmp	*badrtn		/*error - bit did not get set		*/

/*									*/
/*	Now use memory location (tloc) instead of register		*/
/*									*/

nxt6:
	bbs	$0,_force_lp,0	/* if set loop on last subtest */
txn:	callf	$4,_setjmp	/* save context for error return */
	movab	txn,_stpc		/* save subtest program counter */
	movl	$5,_subtst		/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$0xfffffffe,_opr	/* first operand */
0:	movl	$0xfffffffe,tloc /* All bits are set except bit 0	*/
	bicpsw	$PSWMASK
	bispsw	$(V|Z|C)	/*these flags ON			*/
	bbssi	$0,tloc,erc2	/*should not branch as bit 0 is OFF	*/
	jneq	errore		/*Z changed - error			*/
	jlss	errore		/*N changed - error			*/
	jvc	errore		/*V changed - error			*/
	jcc	errore		/*C changed - error			*/
	cmpl	$0xffffffff,tloc 	/* Check that bit is set	*/
	jeql	nxt7
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	tloc,_actual	/* actual data */
	movl	$0xffffffff,_expected	 /* expected */
	jmp	*badrtn		/*error - bit did not get set		*/
erc2:
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	tloc,_actual	/* actual data */
	movl	$0xffffffff,_expected	 /* expected */
	jmp	*badrtn		/*error - branch taken with bit off;	*/

errore:
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error flag miscompare */
	movl	tloc,_actual	/* actual data */
	movl	$0xffffffff,_expected	 /* expected */
	jmp	*badrtn		/*error - error in flags		*/

nxt7:
	bbs	$0,_force_lp,0	/* if set loop on last subtest */
tx:	callf	$4,_setjmp	/* save context for error return */
	movab	tx,_stpc		/* save subtest program counter */
	movl	$6,_subtst		/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$1,_opr		/* first operand */
0:	movl	$1,tloc		/* All bit off except bit 0 		*/
	bbssi	$0,tloc,nxt8	/*now branch forward as bit in ON	*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	tloc,_actual	/* actual data */
	movl	$1,_expected	 /* expected */
	jmp	*badrtn		/*error - did not branch with bit set;	*/
	.space	400
nxt8:
	cmpl	$1,tloc		/* Check if bit is set			*/
	jeql	nxt9
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	tloc,_actual	/* actual data */
	movl	$1,_expected	 /* expected */
	jmp	*badrtn		/*error - bit did not get set		*/
nxt9:
	bbs	$0,_force_lp,0	/* if set loop on last subtest */
tx9:	callf	$4,_setjmp	/* save context for error return */
	movab	tx9,_stpc		/* save subtest program counter */
	movl	$7,_subtst		/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$0x7fffffff,_opr	/* first operand */
0:	movl	$0x7fffffff,tloc /* All bits are set except bit 31	*/
	bicpsw	$PSWMASK
	bispsw	$(V|N|C)	/*these flags ON			*/
	bbssi	$31,tloc,erc3	/*should not branch as bit 31 is OFF	*/
	jeql	errorf		/*Z changed - error			*/
	jgeq	errorf		/*N changed - error			*/
	jvc	errorf		/*V changed - error			*/
	jcc	errorf		/*C changed - error			*/
	cmpl	$0xffffffff,tloc	/* Check that bit is set	*/
	jeql	nxt10
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	tloc,_actual	/* actual data */
	movl	$0xffffffff,_expected	 /* expected */
	jmp	*badrtn		/*error - bit did not get set		*/
erc3:
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	tloc,_actual	/* actual data */
	movl	$0x7ffffffff,_expected	 /* expected */
	jmp	*badrtn		/*error - branch taken with bit off;	*/
errorf:
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error flag miscompare */
	movl	tloc,_actual	/* actual data */
	movl	$0xffffffff,_expected	 /* expected */
	jmp	*badrtn		/*error - error in flags		*/
nxt10:
	bbs	$0,_force_lp,0	/* if set loop on last subtest */
tx10:	callf	$4,_setjmp	/* save context for error return */
	movab	tx10,_stpc		/* save subtest program counter */
	movl	$8,_subtst		/* subtest number */
	movl	$1,_no_opr	/* number of operands in use */
	movl	$0x8000000,_opr	/* first operand */
0:	movl	$0x80000000,tloc	/* All bit off except bit 31	*/
	bbssi	$31,tloc,nxt11	/*now branch forward as bit in ON	*/
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	tloc,_actual	/* actual data */
	movl	$8000000,_expected	 /* expected */
	jmp	*badrtn		/*error - did not branch with bit set;	*/
	.space	400
nxt11:
	movl	$0xd,r1		/* subtest number */
	cmpl	$0x80000000,tloc	/* Check if bit still set ?	*/
	jeql	nxt12
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	tloc,_actual	/* actual data */
	movl	$0x80000000,_expected	 /* expected */
	jmp	*badrtn		/*error - bit did not get set		*/

nxt12:
	bbs	$0,_force_lp,0	/* if set loop on last subtest */
	movl	$0,_ercode		/* no error all done */
	jmp	*return		/*good , goto monitor		*/

/*									*/
/*	Variables							*/
/*									*/
	.align	2
tloc:	.long	0


unix.superglobalmegacorp.com

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