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

/*	SHLQ 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 	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	_shlq
_shlq:
	callf	$4,_setjmp	/* save context for error return */
	movab	_shlq,_stpc	/* save subtest starting address */
	movl	$1,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$32,_opr	/* first operand */
	movl	$0xffffffff,_opr + 4 /* second operand */
0:	bicpsw	$(IV|T)		/* disable exceptions		*/
slq:				/* SHIFT LEFT QUAD FROM MEMORY TO REGISTER */
	movl	$1,r1		/* R1 : indicate which part of the test */
	movl	$0,sloc1		/* set sloc1 		*/
	movl	$0xffffffff,sloc0	/* set sloc0 = 0xffffffff	*/
	movl	$0xffffffff,r4
	movl	$0xffffffff,r5
	bispsw	$(V|N)			/* set n,v  flags		*/
	bicpsw	$(Z|C)			/* clear z,c flag		*/
				/* data memory register	*/
	shlq	$32,sloc0,r4		/* shift left 32 and put in r4,r5 */
	jlss	error1			/* error if n flag set		*/
	jvs	error1			/* error if v flag set		*/
	jneq	error1			/* error if z flag not set	*/
	jcc	error1			/* error if c flag not set	*/
	jmp	1f
error1:	movpsl	_actual		/* actual = psl maybe is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	cmpl	r5,$0x0			/* check result			*/
	jeql	1f		/* if no error 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 no error 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,sloc0	/* check if source get affected */
	jeql	1f		/* if no error continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	sloc0,_actual	/* actual data */
	movl	$0xffffffff,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl    sloc1,$0
	jeql	s2		/* if no error continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	sloc1,_actual	/* actual data */
	movl	$0,_expected	/* expected data */
	jmp	*badrtn
/*				  SHIFT LEFT 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	/* save subtest starting address */
	movl	$2,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$32,_opr	/* first operand */
	movl	$0,_opr + 4 	/* second operand */
0:	movl	$0xffffffff,dloc0	/* set dloc0 = dloc1 = 0xffffffff */
	movl	dloc0,dloc1
	movb	$32,temp		/* set temp = shift count	*/
	bispsw	$(V|N)			/* set v,n flags		*/
	bicpsw	$(Z|C)			/* clear z,c flags		*/
				/* memory register memory */
	shlq	temp,r4,dloc0  	/* shift r4,r5 left 32 and put in dloc	*/
	jvs	error2		/* error if v flag set			*/
	jlss	error2		/* error if n flag set			*/
	jneq	error2		/* error if z flag not set		*/
	jcc	error2		/* error if c flag not set		*/
	jmp	1f
error2:	movpsl	_actual		/* actual = psl maybe is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl 	dloc0,$0	/* check result				*/
	jeql	1f		/* if no error 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 no error 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	r5,$0x0		/* make sure source unchanged		*/
	jeql	1f		/* if no error 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
1:	bicpsw  $Z
	cmpl	r4,$0
	jeql	s3		/* if no error 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
/*				  SHIFT LEFT 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	/* save subtest starting address */
	movl	$3,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$3,_opr		/* first operand */
	movl	$0x55555555,_opr + 4 	/* second operand */
0:	movl	$0x55555555,sloc0	/* set sloc0 = sloc1 = 0x55555555 */
	movl	sloc0,sloc1
	movl	$3,r3		/* set r3 = shift count		*/
	bispsw	$(V|Z)		/* set z flags				*/
	bicpsw	$(C|N)		/* clear c,n flags			*/
				/* register memory memory */
	shlq	r3,sloc0,sloc0  /* shift and put result back in sloc0  */
	jgeq	error3		/* error if n flag not set		*/
	jvs	error3		/* error if v flag set			*/
	jcc	error3		/* error if c flags not set		*/
	jeql	error3		/* error if z flag still set		*/
	jmp	1f
error3:	movpsl	_actual		/* actual = psl maybe is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	cmpl	sloc0,$0xaaaaaaaa	/* check result			*/
	jeql	1f		/* if no error 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,$0xaaaaaaa8
	jeql	s4		/* if no error continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	sloc1,_actual	/* actual data */
	movl	$0xaaaaaaa8,_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	/* save subtest starting address */
	movl	$4,_subtst	/* subtest number */
	movl	$3,_no_opr	/* number of operands in use */
	movl	$0,_opr		/* first operand */
	movl	$0x12345678,_opr + 4 	/* second operand */
	movl	$0x9abcdef0,_opr + 8 /* third operand */
0:	movl	$0,r10			/* set r10 = r11 = 0		*/
	movl	r10,r11
	movl	r11,r6			/* set r6 = shift count		*/
	movl	$0x12345678,r8		/* set r8 = 0x12345678		*/
	movl	$0x9abcdef0,r9		/* set r9 = 0x9abcdef0		*/
	bispsw	$(N|Z|V|C)		/* set n,z,v,c flags		*/
				/* register register register */
	shlq	r6,r8,r10	/* shift left 0 and put in r10,r11	*/
	jlss	error4			/* error if n flag still set	*/
	jeql	error4			/* error if z flag still set	*/
	jvs	error4			/* error if v flag still set	*/
	jcc	error4			/* error if c flag not set	*/
	jmp	1f
error4:	movpsl	_actual		/* actual = psl maybe is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	cmpl	$0x12345678,r10		/* check result			*/
	jeql	1f		/* if no error continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r10,_actual	/* actual data */
	movl	$0x12345678,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	$0x9abcdef0,r11
	jeql	1f		/* if no error continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r11,_actual	/* actual data */
	movl	$0x9abcdef0,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	r8,r10			/* make sure source unchanged	*/
	jeql	1f		/* if no error continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	r8,_actual	/* actual data */
	movl	r10,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	r9,r11
	jeql	s5		/* if no error continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	r9,_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	/* save subtest starting address */
	movl	$5,_subtst	/* subtest number */
	movl	$3,_no_opr	/* number of operands in use */
	movl	$64,_opr		/* first operand */
	movl	$0x12345678,_opr + 4 	/* second operand */
	movl	$0x9abcdef0,_opr + 8 /* third operand */
0:	movb	$64,temp	/* set shift count = 64			*/
	bispsw	$(N|V)		/* set n,v flags			*/
	bicpsw	$(C|Z)		/* clear c,z flag			*/
				/* memory register memory */
	shlq	temp,r10,sloc0	
			/* shift r10,11 left 64 and put in sloc0,sloc1 */
	jneq	error5		/* error if z flag not set		*/
	jcc	error5		/* error if c flags not set		*/
	jlss	error5		/* error if n,v flags still set		*/
	jvs	error5
	jmp	1f
error5:	movpsl	_actual		/* actual = psl maybe is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl 	sloc0,$0	/* check result				*/
	jeql	1f		/* if no error continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	sloc0,_actual	/* actual data */
	movl	$0,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	sloc0,sloc1
	jeql	1f		/* if no error continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	sloc0,_actual	/* actual data */
	movl	sloc1,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	r10,$0x12345678	/* make sure source unchanged		*/
	jeql	1f		/* if no error continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	r10,_actual	/* actual data */
	movl	$0x12345678,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	r11,$0x9abcdef0
	jeql	aldn		/* if no error continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	r11,_actual	/* actual data */
	movl	$0x9abcdef0,_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.