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

/*	SHAL instruction test		*/
#	R2 = error code
#	     1 : error in flags
#	     2 : result is not as expected
#	     3 : source 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	_shiftal
_shiftal:
	callf	$4,_setjmp	/* save context for error return */
	movab	_shiftal,_stpc	/* save starting address of subtest */
	movl	$1,_subtst	/* subtst 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		*/
/*								*/
shftl:				/* SHIFT LEFT LONG FROM MEMORY TO REGISTER */
	movl	$0x55555555,srcloc	/* set srcloc = 0x55555555	*/
	movl	$(0x55555555<<1),r4	/* set r4 = 0xaaaaaaaa		*/
	bispsw	$Z			/* set z flag			*/
	bicpsw	$(N|V|C)		/* clear n,v,c flag		*/
					/* data memory register		*/
	shal	$1,srcloc,r3		/* shift left 1 and put in r3	*/
	jgeq	error1			/* error if n flag not set	*/
	jvc	error1			/* error if v flag not set	*/
	jcc	error1			/* error if c flag not set	*/
	jeql	error1			/* error if z flag not clear	*/
	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	r3,r4			/* 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	r3,_actual	/* actual data */
	movl	r4,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	$0x55555555,srcloc	/* check if source get affected */
	jeql	s2		/* if correct continue */
	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 LEFT 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	/* subtst number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$1,_opr		/* first operand */
	movl	$0x55555555,_opr + 4 /* second operand */
0:	movb	$1,temp		/* set temp = shift count		*/
	bispsw	$(N|Z)		/* set n,z flags			*/
	bicpsw  $(V|C)		/* clear c,v flag			*/
				/* memory register memory entry point	*/
	shal	temp,r3,dstloc	/* shift r3 left 1 and put in dstloc	*/
	jlss	error2		/* error if n,z flag still set		*/
	jeql	error2
	jvc	error2		/* error if v,c flag clear		*/
	jcc	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,$0x55555554	/* 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	dstloc,_actual	/* actual data */
	movl	$0x55555554,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	r3,$0xaaaaaaaa	/* make sure source unchanged		*/
	jeql	s3		/* if correct continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare  */
	movl	r3,_actual	/* actual data */
	movl	$0xaaaaaaaa,_expected	/* expected data */
	jmp	*badrtn
/*				  SHIFT LEFT 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	/* subtst number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$0xffffffe4,_opr		/* first operand */
	movl	srcloc,_opr + 4 /* second operand */
0:	movl	$0xffffffe4,r3	/* set r3[0:4] = shift count = 4	*/
	bispsw	$(N|Z)		/* set n,z flag				*/
	bicpsw  $(V|C)		/* clear v,c flag			*/
				/* register memory memory entry point	*/
	shal	r3,srcloc,srcloc  /* shift and put result back in srcloc */
	jlss	error3		/* error if n,z flag still set		*/
	jeql	error3
	jcc	error3		/* error if c,v flags not set		*/
	jvc	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,$0x55555550	/* check result			*/
	jeql	s4		/* if correct continue */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare  */
	movl	srcloc,_actual	/* actual data */
	movl	$0x55555550,_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 starting address of subtest */
	movl	$4,_subtst	/* subtst number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$0,_opr		/* first operand */
	movl	$0x55555555,_opr + 4 /* second operand */
0:	movl	$0x55555555,srcloc	/* set srcloc = 0x55555555	*/
	movl	$-1,r3
	bispsw	$(N|Z|V)		/* set n,z,v flags		*/
	bicpsw  $C			/* clear C flag			*/
					/* shift zero entry point	*/
	shal	$0,srcloc,r3		/* shift left 0 and put in r3	*/
	jlss	error4			/* error if n,z,v flag still set */
	jeql	error4
	jvs	error4	
	jcc	error4			/* error if c flag not 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	$0x55555555,r3		/* 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	r3,_actual	/* actual data */
	movl	$0x55555555,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	$0x55555555,srcloc	/* check if source get affected */
	jeql	s5		/* if correct continue */
	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 = MAX COUNT = 31			*/
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	/* subtst number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$-1,_opr		/* first operand */
	movl	$-1,_opr + 4 /* second operand */
0:	movb	$-1,r3		/* set shift count = 31			*/
	bispsw	$(Z|V)		/* set z,v flag				*/
	bicpsw	$(N|C)		/* clear n,c flag			*/
				/* register register register		*/
	shal	r3,r3,r3	/* shift r3 left 31 and put back in r3 */
	jgeq	error5		/* error if n,c flag not set		*/
	jcc	error5
	jeql	error5		/* error if z,v 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 	r3,$0x80000000	/* check result				*/
	jeql	aldn		/* if correct continue */
	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 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.