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

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

	.globl	_shrq
_shrq:
	callf	$4,_setjmp	/* save context for error return */
	movab	_shrq,_stpc	/* starting address of subtest */
	movl	$1,_subtst	/* subtest number */
	movl	$3,_no_opr	/* number of operands in use */
	movl	$32,_opr	/* first operand */
	movl	$0,_opr	+ 4	/* second operand */
	movl	$0xffffffff,_opr + 8 /* third operand */
0:	bicpsw	$(IV|T)		/* disable exceptions		*/
/*								*/
srq:				/* SHIFT RIGHT QUAD FROM MEMORY TO REGISTER */
	movl	$0,sloc0		/* set sloc0 		*/
	movl	$0xffffffff,sloc1	/* set sloc1 = 0xffffffff	*/
	movl	$0xffffffff,r4
	movl	$0xffffffff,r5
	bispsw	$(V|N|C)		/* set n,v,c flags		*/
	bicpsw	$Z			/* clear z flag			*/
	shrq	$32,sloc0,r4		/* shift right 32 and put in r4,r5 */
	jneq	error1			/* error if z flag not set	*/
	jcc	error1			/* error if c flag not set	*/
	jvs	error1			/* error if v flag set		*/
	jlss	error1			/* error if n flag 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:	bicpsw  $Z
	cmpl	r5,$0			/* check result			*/
	jeql	1f		/* if correct continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r5,_actual	/* actual data */
	movl	$0,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	r4,$0
	jeql	1f		/* if correct continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r4,_actual	/* actual data */
	movl	$0,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	$0xffffffff,sloc1	/* check if source get affected */
	jeql	1f		/* if correct continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	sloc1,_actual	/* actual data */
	movl	$0xffffffff,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl    sloc0,$0
	jeql	s2		/* if correct continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	sloc0,_actual	/* actual data */
	movl	$0,_expected	/* expected data */
	jmp	*badrtn
/*				  SHIFT RIGHT QUAD 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	/* starting address of subtest */
	movl	$2,_subtst	/* subtest number */
	movl	$3,_no_opr	/* number of operands in use */
	movl	$30,_opr	/* first operand */
	movl	$0xffffffff,_opr + 4	/* second operand */
	movl	$0xffffffff,_opr + 8 /* third operand */
0:	movl	$0xffffffff,dloc0	/* set dloc0 = dloc1 = 0xffffffff */
	movl	dloc0,dloc1
	movb	$30,temp	/* set temp = shift count		*/
	bispsw	$(N|V|C)	/* set n,v,c flags			*/
	bicpsw	$Z		/* clear z flag				*/
	shrq	temp,r4,dloc0  	/* shift r4,r5 left 32 and put in dloc	*/
	jneq	error2		/* error if z flag not set		*/
	jcc	error2		/* error if c flag not set		*/
	jvs	error2		/* error if v flag set			*/
	jlss	error2		/* error if n flag set			*/
	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 	dloc0,$0	/* check result				*/
	jeql	1f		/* if correct continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	dloc0,_actual	/* actual data */
	movl	$0,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	dloc1,dloc0
	jeql	1f		/* if correct continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	dloc1,_actual	/* actual data */
	movl	dloc0,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	r4,$0		/* make sure source unchanged		*/
	jeql	1f		/* if correct continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	r4,_actual	/* actual data */
	movl	$0,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	r5,$0
	jeql	s3		/* if correct continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	r5,_actual	/* actual data */
	movl	$0,_expected	/* expected data */
	jmp	*badrtn
/*				  SHIFT RIGHT QUAD 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	/* starting address of subtest */
	movl	$3,_subtst	/* subtest number */
	movl	$3,_no_opr	/* number of operands in use */
	movl	$3,_opr	/* first operand */
	movl	$0x55555555,_opr + 4	/* second operand */
	movl	$0x55555555,_opr + 8 /* third operand */
0:	movl	$0x55555555,sloc0	/* set sloc0 = sloc1 = 0x55555555 */
	movl	sloc0,sloc1
	movb	$3,r3		/* set r3 = shift count		*/
	bispsw	$(Z|V|C)	/* set v,z,c flags			*/
	bicpsw  $N
	shrq	r3,sloc0,sloc0  /* shift and put result back in sloc0  */
	jlss	error3		/* error if n flag still set		*/
	jvs	error3		/* error if v flag still set		*/
	jeql	error3		/* error if z flag still set		*/
	jcc	error3		/* error if c flag not set		*/
	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	sloc0,$0xaaaaaaa	/* check result			*/
	jeql	1f		/* if correct continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	sloc0,_actual	/* actual data */
	movl	$0xaaaaaaaa,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	sloc1,$0xaaaaaaaa
	jeql	s4		/* if correct continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	sloc1,_actual	/* actual data */
	movl	$0xaaaaaaaa,_expected	/* expected data */
	jmp	*badrtn
/*				  SPECIAL CASES				*/
/*					shift count = 0			*/
s4:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
as4:	callf	$4,_setjmp	/* save context for error return */
	movab	as4,_stpc	/* starting address of subtest */
	movl	$4,_subtst	/* subtest number */
	movl	$3,_no_opr	/* number of operands in use */
	movl	$0,_opr	/* first operand */
	movl	$0xfedcba98,_opr + 4	/* second operand */
	movl	$0x76543210,_opr + 8 /* third operand */
0:	movl	$0,r10			/* set r10 = r11 = 0		*/
	movl	r10,r11
	movl	r11,r6			/* set r6 = shift count		*/
	movl	$0xfedcba98,r4		/* set r4 = 0xfedcba98		*/
	movl	$0x76543210,r5		/* set r8 = 0x76543210		*/
	bispsw	$(C|Z|V)		/* set c,z,v flags		*/
	bicpsw  $N
	shrq	r6,r4,r10	/* shift right 0 and put in r10,r11	*/
	jgeq	error4			/* error if n flag not set	*/
	jcc	error4			/* error if c flag not set	*/
	jeql	error4			/* error if z flag still set	*/
	jvs	error4			/* error if v flag still set	*/
	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	$0xfedcba98,r10		/* check result			*/
	jeql	1f		/* if correct continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r10,_actual	/* actual data */
	movl	$0xfedcba98,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	$0x76543210,r11
	jeql	1f		/* if correct continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r11,_actual	/* actual data */
	movl	$0x76543210,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	r4,r10			/* make sure source unchanged	*/
	jeql	1f		/* if correct continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	r4,_actual	/* actual data */
	movl	r10,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	r5,r11
	jeql	s5		/* if correct continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	r5,_actual	/* actual data */
	movl	r11,_expected	/* expected data */
	jmp	*badrtn
/*				  	shift count = 64		*/
s5:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
as5:	callf	$4,_setjmp	/* save context for error return */
	movab	as5,_stpc	/* starting address of subtest */
	movl	$5,_subtst	/* subtest number */
	movl	$3,_no_opr	/* number of operands in use */
	movl	$64,_opr	/* first operand */
	movl	$0xfedcba98,_opr + 4	/* second operand */
	movl	$0x76543210,_opr + 8 /* third operand */
0:	movl	$0xffffffff,r4
	movl	r4,r5
	movb	$64,temp	/* set shift count = 64			*/
	bispsw	$(N|V|C)	/* set n,c,v flags			*/
	bicpsw	$Z		/* clear z flag				*/
	shrq	temp,r10,r4	/* shift r10,r11 left 64 and put in r4,r5*/
	jneq	error5		/* error if z flag not set		*/
	jcc	error5		/* error if c flag not set		*/
	jlss	error5		/* error if v,n flag 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:	bicpsw  $Z
	cmpl 	r4,$0		/* check result				*/
	jeql	1f		/* if correct continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r4,_actual	/* actual data */
	movl	$0,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	r4,r5
	jeql	1f		/* if correct continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r5,_actual	/* actual data */
	movl	r4,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	r10,$0xfedcba98	/* make sure source unchanged		*/
	jeql	1f		/* if correct continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	r10,_actual	/* actual data */
	movl	$0xfedcba98,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	r11,$0x76543210
	jeql	s6		/* if correct continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	r11,_actual	/* actual data */
	movl	$0x76543210,_expected	/* expected data */
	jmp	*badrtn

/*				  SHIFT RIGHT QUAD FROM DATA TO MEMORY */
s6:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
as6:	callf	$4,_setjmp	/* save context for error return */
	movab	as6,_stpc	/* starting address of subtest */
	movl	$6,_subtst	/* subtest number */
	movl	$3,_no_opr	/* number of operands in use */
	movl	$32,_opr	/* first operand */
	movl	$0xffffffff,_opr + 4	/* second operand */
	movl	$0,_opr + 8		 /* third operand */
0:	movl	$0xffffffff,dloc0	/* set dloc0 = dloc1 = 0xffffffff */
	movl	dloc0,dloc1
	movb	$32,temp	/* set temp = shift count		*/
	bispsw	$(N|V|C)	/* set n,v,c flags			*/
	bicpsw	$Z		/* clear z flag				*/
	shrq	temp,$0xffffffff,dloc0 /* shift data left 32 and put in dloc	*/
	jeql	error6		/* error if z flag set		*/
	jcc	error6		/* error if c flag not set		*/
	jvs	error6		/* error if v flag set			*/
	jlss	error6		/* error if n flag set			*/
	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 	dloc0,$0	/* check result				*/
	jeql	1f		/* if correct continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	dloc0,_actual	/* actual data */
	movl	$0,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	dloc1,$0xffffffff
	jeql	aldn		/* if correct continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	dloc1,_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		/* align on longword	*/
sloc0:	.long	0
sloc1:	.long	0
dloc0:	.long	0
dloc1:	.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.