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

/*	SHRL instruction test		*/
#	R2 = error code
#	     1 : error in flags
#	     2 : result incorrect
#	     3 : operand get modified

	.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	DISABLE,0
	.set 	ENABLE,1
	.set	HIGH,31			/* highest interrupt priority	*/

	.globl	_shrl
_shrl:
	callf	$4,_setjmp	/* save context for error return */
	movab	_shrl,_stpc	/* save starting address of subtest */
	movl	$1,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$1,_opr		/* first operand */
	movl	$0x55555555,_opr + 4 /* second operand */
0:	bicpsw	$(IV|T)		/* disable exceptions		*/
/*								*/
shftr:				/* SHIFT RIGHT LONG FROM MEMORY TO REGISTER */
	movl	$0x55555555,srcloc	/* set srcloc = 0x55555555	*/
	movl	$(0x55555555/2),r12	/* set r12 = 0x2aaaaaaa		*/
	bispsw	$(Z|V|N)		/* set n,z,v flags		*/
	bicpsw  $C
	shrl	$1,srcloc,r11		/* shift right 1 and put in r11	*/
	jcc	error1			/* error if c flag clear 	*/
	jlss	error1			/* error if n flag still set	*/
	jeql	error1			/* error if z flag still set	*/
	jvs	error1			/* error if v flag still set	*/
	jmp	1f
error1: movpsl	_actual		/* actual = psl maybe incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	cmpl	r11,r12			/* check result			*/
	jeql	1f
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r11,_actual	/* actual data */
	movl	r12,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	$0x55555555,srcloc	/* check if source get affected */
	jeql	s2
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	srcloc,_actual	/* actual data */
	movl	$0x55555555,_expected	/* expected data */
	jmp	*badrtn
/*				  SHIFT RIGHT LONG FROM REGISTER TO MEMORY */
s2:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
as2:	callf	$4,_setjmp	/* save context for error return */
	movab	as2,_stpc	/* save starting address of subtest */
	movl	$2,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$1,_opr		/* first operand */
	movl	r11,_opr + 4	/* second operand */
0:	movb	$1,temp		/* set temp = shift count		*/
	bispsw	$(Z|V|N)		/* set n,z,v flags		*/
	bicpsw  $C
	shrl	temp,r11,dstloc	/* shift r11 right 1 and put in dstloc	*/
	jcc	error2		/* error if c flags clear 		*/
	jlss	error2		/* error if n flag still set		*/
	jeql	error2		/* error if z flag still set		*/
	jvs	error2
	jmp	1f
error2: movpsl	_actual		/* actual = psl maybe incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	cmpl 	dstloc,$0x15555555	/* check result			*/
	jeql	1f
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	dstloc,_actual	/* actual data */
	movl	$0x1555555,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	r11,r12		/* make sure source unchanged		*/
	jeql	s3
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	r11,_actual	/* actual data */
	movl	r12,_expected	/* expected data */
	jmp	*badrtn
/*				  SHIFT RIGHT LONG FROM MEMORY TO MEMORY */
s3:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
as3:	callf	$4,_setjmp	/* save context for error return */
	movab	as3,_stpc	/* save starting address of subtest */
	movl	$3,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	r11,_opr		/* first operand */
	movl	$0xf,_opr + 4	/* second operand */
0:	movl	$0xf,srcloc	/* set srcloc = 0xf			*/
	movb	$4,r11		/* set r11 = shift count		*/
	bispsw	$(C|V|N)	/* set n,c,v flags			*/
	bicpsw	$Z		/* clear z flag				*/
	shrl	r11,srcloc,srcloc  /* shift and put result back in srcloc */
	jcc	error3		/* error if c flags clear 		*/
	jneq	error3		/* error if z flag clear		*/
	jlss	error3		/* error if n flag still set		*/
	jvs	error3
	jmp	1f
error3: movpsl	_actual		/* actual = psl maybe incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	cmpl	srcloc,$0x0	/* check result				*/
	jeql	s4
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	srcloc,_actual	/* actual data */
	movl	$0,_expected	/* expected data */
	jmp	*badrtn
				/* REGISTER, REGISTER, REGISTER		*/
s4:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
as4:	callf	$4,_setjmp	/* save context for error return */
	movab	as4,_stpc	/* save starting address of subtest */
	movl	$4,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$4,_opr		/* first operand */
	movl	$0xf,_opr + 4	/* second operand */
0:	movl	$0xf,r12	/* set r12 = 0xf			*/
	movb	$4,r11		/* set r11 = shift count		*/
	bispsw	$(C|V|N)	/* set n,c,v flags			*/
	bicpsw	$Z		/* clear z flag				*/
	shrl	r11,r12,r13     /* shift register to register 		*/
	jcc	error4		/* error if c flags clear 		*/
	jneq	error4		/* error if z flag clear		*/
	jlss	error4		/* error if n flag still set		*/
	jvs	error4
	jmp	1f
error4: movpsl	_actual		/* actual = psl maybe incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	cmpl	r13,$0x0	/* check result				*/
	jeql	s5
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r13,_actual	/* actual data */
	movl	$0,_expected	/* expected data */
	jmp	*badrtn
				/* REGISTER, IMM. DATA, REGISTER	*/
s5:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
as5:	callf	$4,_setjmp	/* save context for error return */
	movab	as5,_stpc	/* save starting address of subtest */
	movl	$5,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$4,_opr		/* first operand */
	movl	$0xf,_opr + 4	/* second operand */
0:	movb	$4,r11		/* set r11 = shift count		*/
	bispsw	$(C|V|N)	/* set n,c,v flags			*/
	bicpsw	$Z		/* clear z flag				*/
	shrl	r11,$0xf,r13    /* shift imm. data to register 		*/
	jcc	error5		/* error if c flags clear 		*/
	jneq	error5		/* error if z flag clear		*/
	jlss	error5		/* error if n flag still set		*/
	jvs	error5
	jmp	1f
error5: movpsl	_actual		/* actual = psl maybe incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	cmpl	r13,$0x0	/* check result				*/
	jeql	s6
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r13,_actual	/* actual data */
	movl	$0,_expected	/* expected data */
	jmp	*badrtn
/*				  SPECIAL CASES				*/
/*					shift count = 0			*/
s6:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
as6:	callf	$4,_setjmp	/* save context for error return */
	movab	as6,_stpc	/* save starting address of subtest */
	movl	$6,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$4,_opr		/* first operand */
	movl	$0xf,_opr + 4	/* second operand */
0:	movl	$0x55555555,srcloc	/* set srcloc = 0x55555555	*/
	bispsw	$(C|V|N)		/* set n,c,v flags		*/
	bicpsw	$Z			/* clear z flag			*/
	shrl	$0,srcloc,r11		/* shift right 0 and put in r11	*/
	jlss	error6			/* error if n flag still set	*/
	jeql	error6			/* error if z flag still set	*/
	jvs	error6			/* error if v flag still set	*/
	jcc	error6			/* error if c flag clear 	*/
	jmp	1f
error6: movpsl	_actual		/* actual = psl maybe incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	cmpl	srcloc,r11		/* check result			*/
	jeql	1f
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r11,_actual	/* actual data */
	movl	srcloc,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	$0x55555555,srcloc	/* check if source get affected */
	jeql	s7
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	srcloc,_actual	/* actual data */
	movl	$0x55555555,_expected	/* expected data */
	jmp	*badrtn
/*				  	shift count > 32		*/
s7:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
as7:	callf	$4,_setjmp	/* save context for error return */
	movab	as7,_stpc	/* save starting address of subtest */
	movl	$7,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$33,_opr		/* first operand */
	movl	r11,_opr + 4	/* second operand */
0:	movb	$33,temp	/* set shift count = 33			*/
	bispsw	$(C|V|N)	/* set n,z,v flags			*/
	bicpsw	$Z		/* clear z flag				*/
	shll	temp,r11,r13	/* shift r11 left 33 and put in r13	*/
	jneq	error7		/* error if z flag not set		*/
	jlss	error7		/* error if n flag still set		*/
	jvs	error7
	jcc	error7		/* error if c flags clear 		*/
	jmp	1f
error7: movpsl	_actual		/* actual = psl maybe incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	cmpl 	r13,$0		/* check result				*/
	jeql	1f
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r13,_actual	/* actual data */
	movl	$0,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	r11,$0x55555555	/* make sure source unchanged		*/
	jeql	s8
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	r11,_actual	/* actual data */
	movl	$0x55555555,_expected	/* expected data */
	jmp	*badrtn
/*				  	check overflow flag		*/
s8:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
as8:	callf	$4,_setjmp	/* save context for error return */
	movab	as8,_stpc	/* save starting address of subtest */
	movl	$8,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$8,_opr		/* first operand */
	movl	$0xffffffff,_opr + 4	/* second operand */
0:	movb	$8,r3			/* set r3 = shift count		*/
	movl	$0xffffffff,srcloc	/* set srcloc = 0xffffffff	*/
	bispsw	$(Z|C|N)		/* set n,z,c flags		*/
	bicpsw	$V			/* clear v flag			*/
	shrl	r3,srcloc,srcloc   /* shift right 8 and put in srcloc   */
	jcc	error8			/* error if c flag not set	*/
	jvs	error8			/* error if v flag still set	*/
	jlss	error8			/* error if n flag still set	*/
	jeql	error8			/* error if z flag still set	*/
	jmp	1f
error8: movpsl	_actual		/* actual = psl maybe incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	cmpl	srcloc,$0xffffff	/* check result			*/
	jeql	aldn
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	srcloc,_actual	/* actual data */
	movl	$0xffffff,_expected	/* expected data */
	jmp	*badrtn



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



/*	test data		*/
	.align	2
srcloc:	.long	0
dstloc:	.long	0
temp:	.long	0



unix.superglobalmegacorp.com

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