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


/*		BBC (branch on bit clear) test				*/
/*									*/
/*Test name = bbc							*/
/*Description =								*/
/*	This test checks 'bbc' instruction as follows:			*/
/*	(1) forward/backward branch on bit set conditon			*/
/*	(2) no branch on bit off condition				*/
/*	(3) no effect on condition codes				*/
/*									*/
/*									*/

/*									*/
/*	constants							*/
/*									*/

	.set	P1,0x80808101	/*bits 0,8,15,23,31 ON*/
	.set	P2,0x7f7f7efe	/*same bits OFF	      */
	.set	BIT0,0
	.set	BIT8,8
	.set	BIT15,15
	.set	BIT23,23
	.set	BIT31,31

/*									*/
/*	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,0x003f

	.globl	_bbc
_bbc:
	callf	$4,_setjmp	/* save context for error return */
	movab	_bbc,_stpc	/* save address of subtest */
	movl	$1,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$BIT0,_opr	/* first operand */
	movl	$P2,_opr + 4	/* second operand */
	movl	$0,_actual	/* no data for this test it is zero */
	movl	$0,_expected	/* no data for this test it is zero */
0:	
	movl	$P2,r0		/*bits 0,8,15,23,31 OFF			*/
	bicpsw	$PSWMASK
	bispsw	$(N|Z|V|C)	/*these flags ON			*/
	bbs	$BIT0,r0,erc0	/*should not branch as bit 0 is OFF data reg*/
	bbc	$BIT0,r0,fs0	/*branch forward on bit clear data reg	*/
	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag failure bad jump action */
	jmp	*badrtn		/* no actual or expected data */
bs0:
	bbc	$BIT0,r0,flgs0	/*branch to flag test			*/
	jmp	error1
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
erc0:
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
	.space 	110		/*dangerous area - don't come in	*/
fs0:
	bbc	$BIT0,r0,bs0	/*branch backward on bit clear		*/
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
flgs0:
	jneq	errs1		/*Z != 1 - error			*/
	jlss	errs1		/*N != 0 - error			*/
	jvs	errs1		/*V != 0 - error			*/
	jcc	errs1		/*C != 1 - error			*/
	jmp	bn2		/* no errors - continue */
errs1:
	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn

bn2:	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
b2:	callf	$4,_setjmp	/* save context for error return */
	movab	b2,_stpc	/* save address of subtest */
	movl	$2,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$BIT31,_opr	/* first operand */
	movl	$P2,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*PSW = 0				*/
	movl	$P2,r0		/*bits 0,8,15,23,31 OFF			*/
	movl	$BIT31,r6
	bicpsw	$PSWMASK
	bbs	r6,r0,erc31	/*should not branch as bit 31 is OFF reg reg */
	bbc	r6,r0,fs31	/*branch forward on bit clear reg reg	*/
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
bs31:
	bbc	$BIT31,r0,flgc31 /*branch to flag test			*/
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
erc31:
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
	.space 	110		/*dangerous area - don't come in	*/
fs31:
	bbc	$BIT31,r0,bs31	/*branch backward on bit clear		*/
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
flgc31:
	jneq	errs2		/*Z != 1 - error			*/
	jlss	errs2		/*N != 0 - error			*/
	jvs	errs2		/*V != 0 - error			*/
	jcc	errs2		/*C != 1 - error			*/
	jmp	bn3		/* no errors - continue */
errs2:
	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn

bn3:	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
b3:	callf	$4,_setjmp	/* save context for error return */
	movab	b3,_stpc	/* save address of subtest */
	movl	$3,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$BIT8,_opr	/* first operand */
	movl	$P2,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*PSW = 0				*/
	movl	$P2,tloc	/*bits 0,8,15,23,31 OFF			*/
	bbs	$BIT8,tloc,erc8	/* should not branch as bit 8 is off data mem*/
	bbc	$BIT8,tloc,fs8	/*branch forward on bit clear data mem	*/
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
bs8:
	bbc	$BIT8,r0,s15	/*next test				*/
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
erc8:
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
	.space 	110		/*dangerous area - don't come in	*/
fs8:
	bbc	$BIT8,r0,bs8	/*branch backward on bit clear		*/
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1

s15:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
b4:	callf	$4,_setjmp	/* save context for error return */
	movab	b4,_stpc	/* save address of subtest */
	movl	$4,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$BIT15,_opr	/* first operand */
	movl	$P2,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*PSW = 0				*/
	movl	$P2,tloc	/*bits 0,8,15,23,31 OFF			*/
	movl	$BIT15,r0
	bbs	r0,tloc,erc15 /*should not branch as bit 15 is OFF reg mem*/
	bbc	r0,tloc,bs15
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
bs15:
	bbc	$BIT15,r0,s23	/*next test				*/
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
erc15:
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
	.space 	110		/*dangerous area - don't come in	*/
fs15:
	bbc	$BIT15,r0,bs15	/*branch backward on bit clear		*/
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1

s23:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
b5:	callf	$4,_setjmp	/* save context for error return */
	movab	b5,_stpc	/* save address of subtest */
	movl	$5,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$BIT23,_opr	/* first operand */
	movl	$P2,_opr + 4	/* second operand */
0:	bicpsw	$PSWMASK	/*PSW = 0				*/
	movl	$P2,r0		/*bits 0,8,15,23,31 OFF			*/
	bbs	$BIT23,r0,erc23	/*should not branch as bit 23 is OFF	*/
	bbc	$BIT23,r0,fs23	/*branch forward on bit clear		*/
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
bs23:
	bbc	$BIT23,r0,sm0	/*next test				*/
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
erc23:
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
	.space 	110		/*dangerous area - don't come in	*/
fs23:
	bbc	$BIT23,r0,bs23  /*branch backward on bit clear		*/
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1

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

sm0:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
b6:	callf	$4,_setjmp	/* save context for error return */
	movab	b6,_stpc	/* save address of subtest */
	movl	$6,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$BIT0,_opr	/* first operand */
0:	bicpsw	$PSWMASK	/*PSW = 0				*/
	movl	$P2,tloc	/*bits 0,8,15,23,31 OFF			*/
	bicpsw	$PSWMASK
	bispsw	$(N|Z|V|C)	/*these flags ON			*/
	bbs	$BIT0,tloc,ercm0/*should not branch as bit 0 is OFF	*/
	bbc	$BIT0,tloc,fsm0	/*branch forward on bit clear		*/
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
bsm0:
	bbc	$BIT0,tloc,flgsm0	/*branch to flag test		*/
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
ercm0:
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
	.space 	110		/*dangerous area - don't come in	*/
fsm0:
	bbc	$BIT0,tloc,bsm0	/*branch backward on bit clear		*/
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
flgsm0:
	jneq	errs3		/*Z changed - error			*/
	jlss	errs3		/*N changed - error			*/
	jvs	errs3		/*V changed - error			*/
	jcc	errs3		/*C changed - error			*/
	jmp	bn7		/* no errors - continue */
errs3:
	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn

bn7:	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
b7:	callf	$4,_setjmp	/* save context for error return */
	movab	b7,_stpc	/* save address of subtest */
	movl	$7,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$BIT31,_opr	/* first operand */
0:	bicpsw	$PSWMASK	/*PSW = 0				*/
	movl	$P2,tloc	/*bits 0,8,15,23,31 OFF			*/
	bicpsw	$PSWMASK
	bbs	$BIT31,tloc,ercm31 /*should not branch as bit 31 is OFF	*/
	bbc	$BIT31,tloc,fsm31 /*branch forward on bit clear		*/
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
bsm31:
	bbc	$BIT31,tloc,flgcm31/*branch to flag test		*/
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
ercm31:
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
	.space 	110		/*dangerous area - don't come in	*/
fsm31:
	bbc	$BIT31,tloc,bsm31 /*branch backward on bit clear	*/
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
flgcm31:
	jneq	errs4		/*Z changed - error			*/
	jlss	errs4		/*N changed - error			*/
	jvs	errs4		/*V changed - error			*/
	jcc	errs4		/*C changed - error			*/
	jmp	bn8		/* no errors - continue */
errs4:
	movpsl	_actual		/* actual = psl */
	bbs	$0,_scoplp,0b	/* if set loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn

bn8:	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
b8:	callf	$4,_setjmp	/* save context for error return */
	movab	b8,_stpc	/* save address of subtest */
	movl	$8,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$BIT8,_opr	/* first operand */
0:	bicpsw	$PSWMASK	/*PSW = 0				*/
	movl	$P2,tloc	/*bits 0,8,15,23,31 OFF			*/
	bbs	$BIT8,tloc,ercm8 /*should not branch as bit 8 is OFF	*/
	bbc	$BIT8,tloc,fsm8	/*branch forward on bit clear		*/
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
bsm8:
	bbc	$BIT8,tloc,sm15	/*next test				*/
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
ercm8:
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
	.space 	110		/*dangerous area - don't come in	*/
fsm8:
	bbc	$BIT8,tloc,bsm8	/*branch backward on bit clear		*/
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1

sm15:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
b9:	callf	$4,_setjmp	/* save context for error return */
	movab	b9,_stpc	/* save address of subtest */
	movl	$9,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$BIT15,_opr	/* first operand */
0:	bicpsw	$PSWMASK	/*PSW = 0				*/
	movl	$P2,tloc	/*bits 0,8,15,23,31 OFF			*/
	bbs	$BIT15,tloc,ercm15/*should not branch as bit 15 is OFF	*/
	bbc	$BIT15,tloc,fsm15/*branch forward on bit clear		*/
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
bsm15:
	bbc	$BIT15,tloc,sm23/*next test				*/
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
ercm15:
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
	.space 	110		/*dangerous area - don't come in	*/
fsm15:
	bbc	$BIT15,tloc,bsm15/*branch backward on bit clear		*/
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1

sm23:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
b10:	callf	$4,_setjmp	/* save context for error return */
	movab	b10,_stpc	/* save address of subtest */
	movl	$0xa,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$BIT23,_opr	/* first operand */
0:	bicpsw	$PSWMASK	/*PSW = 0				*/
	movl	$P2,tloc	/*bits 0,8,15,23,31 OFF			*/
	bbs	$BIT23,tloc,ercm23 /*should not branch as bit 23 is OFF	*/
	bbc	$BIT23,tloc,fsm23 /*branch forward on bit clear		*/
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
bsm23:
	bbc	$BIT23,tloc,last
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
ercm23:
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1
	.space 	110		/*dangerous area - don't come in	*/
fsm23:
	bbc	$BIT23,tloc,bsm23/*branch backward on bit clear		*/
	bbs	$0,_scoplp,0b	/* if set loop on error */
	jmp	error1

last:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
	jmp	*return

error1:
	movl	$1,_ercode /* error code data miscompare bad branch action */
	jmp	*badrtn		/* no actual or expected data */

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


/*	End of file							*/


unix.superglobalmegacorp.com

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