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

/*	CASEL 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	_casel
_casel:
	callf	$4,_setjmp	/* save context for error return */
	movab	_casel,_stpc	/* save subtest address for return */
	movl	$1,_subtst	/* subtest number */
	movl	$3,_no_opr	/* number of operands in use */
	movl	$0,_opr		/* first operand */
	movl	$1,_opr + 4	/* second operand */
	movl	$7,_opr + 8	/* third operand */
0:	bicpsw	$(IV|T) 	/* disable exceptions		*/

/*								*/
case:
/*	LIMIT > (SELECTOR-BASE)						*/
	movl	$0,r0		/* set selector = r0 = 0		*/
	movl	$0,r1		/* set base = r1 = 0			*/
	movl	$7,r2		/* set limit = 7; 8 cases ..		*/
	bispsw	$(N|C)		/* set n,c flags			*/
	bicpsw	$(Z|V)		/* clear z,v flags			*/
	casel	r0,r1,r2
	.align	1		/* displacement list is word align */
cpc0:
	.word   loc0-cpc0
	.word   loc1-cpc0
	.word   loc2-cpc0
	.word   loc3-cpc0
	.word   loc4-cpc0
	.word   loc5-cpc0
	.word   loc6-cpc0
	.word   loc7-cpc0
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r2,_actual	/* actual data */
	movl	$7,_expected	/* expected data */
	jmp	*badrtn		/* bad return failed */
	.space	1000		/* reserve 1000 bytes			*/
loc0:
	jgeq	error1		/* error if n flag not set		*/
	jcc	error1		/* error if c flag not set		*/
	jeql	error1		/* error if z or v flag set		*/
	jvs	error1
	jmp	1f
error1:	movpsl	_actual		/* actual data psl MAYBE is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn		/* bad return failed */
1:	cmpl	r0,$0		/* make sure selector,base,limit unchanged*/
	jeql	1f
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	r0,_actual	/* actual data */
	movl	$0,_expected	/* expected data */
	jmp	*badrtn		/* bad return failed */
1:	bicpsw  $Z
	cmpl	r0,r1
	jeql	1f
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	r1,_actual	/* actual data */
	movl	r0,_expected	/* expected data */
	jmp	*badrtn		/* bad return failed */
	bicpsw  $Z
	cmpl	r2,$0x7
	jeql	1f
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	r2,_actual	/* actual data */
	movl	$7,_expected	/* expected data */
	jmp	*badrtn		/* bad return failed */
1:	jmp	step1
loc1:
	jmp	loc7		/* take wrong displacement		*/
loc2:
	jmp	loc7		/* take wrong displacement		*/
loc3:
	jmp	loc7		/* take wrong displacement		*/
loc4:
	jmp	loc7		/* take wrong displacement		*/
loc5:
	jmp	loc7		/* take wrong displacement		*/
loc6:
	jmp	loc7		/* take wrong displacement		*/
loc7:
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$3,_ercode	/* error code wrong operand (displacement) */
	jmp	*badrtn


step1:	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
c2:	callf	$4,_setjmp	/* save context for error return */
	movab	c2,_stpc	/* save subtest address for return */
	movl	$2,_subtst	/* subtest number */
	movl	$3,_no_opr	/* number of operands in use */
	movl	$5,_opr		/* first operand */
	movl	$0,_opr + 4	/* second operand */
	movl	$7,_opr + 8	/* third operand */
0:	movl	$5,r0		/* set selector = r0 = 5		*/
	movl	$0,r1		/* set base = r1 = 0			*/
	movl	$7,r2		/* set limit = 7; 8 cases ..		*/
	bispsw	$(N|C)		/* set n,c flags			*/
	bicpsw	$(Z|V)		/* clear z,v flags			*/
	casel	$5,$0,r2
	.align	1		/* displacement list is word align */
pc0:
	.word   l0-pc0
	.word   l1-pc0
	.word   l2-pc0
	.word   l3-pc0
	.word   l4-pc0
	.word   l5-pc0
	.word   l6-pc0
	.word   l7-pc0

	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r2,_actual	/* actual data */
	movl	$7,_expected	/* expected data */
	jmp	*badrtn		/* bad return failed */
	.space	1000		/* reserve 1000 bytes			*/
l5:
	jgeq	error2		/* error if n flag not set		*/
	jcc	error2		/* error if c flag not set		*/
	jeql	error2		/* error if z or v flag set		*/
	jvs	error2
	jmp	1f
error2:	movpsl	_actual		/* actual data psl MAYBE is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn		/* bad return failed */
1:	cmpl	r0,$5		/* make sure selector,base,limit unchanged*/
	jeql	1f
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	r0,_actual	/* actual data */
	movl	$5,_expected	/* expected data */
	jmp	*badrtn		/* bad return failed */
1:	bicpsw  $Z
	cmpl	r2,$0x7
	jeql	1f
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	r2,_actual	/* actual data */
	movl	$7,_expected	/* expected data */
	jmp	*badrtn		/* bad return failed */
1:	jmp	step2
l0:
	jmp	l7		/* take wrong displacement		*/
l1:
	jmp	l7		/* take wrong displacement		*/
l2:
	jmp	l7		/* take wrong displacement		*/
l3:
	jmp	l7		/* take wrong displacement		*/
l4:
	jmp	l7		/* take wrong displacement		*/
l6:
	jmp	l7		/* take wrong displacement		*/
l7:
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$3,_ercode	/* error code wrong operand (displacement) */
	jmp	*badrtn

/*	LIMIT = (SELECTOR-BASE)						*/
step2:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
c3:	callf	$4,_setjmp	/* save context for error return */
	movab	c3,_stpc	/* save subtest address for return */
	movl	$3,_subtst	/* subtest number */
	movl	$3,_no_opr	/* number of operands in use */
	movl	$7,_opr		/* first operand */
	movl	$0,_opr + 4	/* second operand */
	movl	$7,_opr + 8	/* third operand */
0:	movl	$0x7,sel	/* set selector = 7			*/
	movl	$0,base		/* set base = 0				*/
	movl	$0x7,limit	/* set limit = 7			*/
	bispsw	$Z		/* set z flag				*/
	bicpsw	$(N|V|C) 	/* clear n,c,v flags			*/
	casel	sel,base,limit
	.align	1		/* displacement list is word align */
cpc1:
	.word   lc0-cpc1
	.word   lc1-cpc1
	.word   lc2-cpc1
	.word   lc3-cpc1
	.word   lc4-cpc1
	.word   lc5-cpc1
	.word   lc6-cpc1
	.word   lc7-cpc1

	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	limit,_actual	/* actual data */
	movl	$7,_expected	/* expected data */
	jmp	*badrtn		/* bad return failed */
	.space	1000		/* reserve 1000 bytes			*/
lc0:
	jmp	lc6	
lc1:
	jmp	lc6		/* take wrong displacement		*/
lc2:
	jmp	lc6		/* take wrong displacement		*/
lc3:
	jmp	lc6		/* take wrong displacement		*/
lc4:
	jmp	lc6		/* take wrong displacement		*/
lc5:
	jmp	lc6		/* take wrong displacement		*/
lc6:
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$3,_ercode	/* error code wrong operand (displacement) */
	jmp	*badrtn
lc7:
	jneq	error3		/* error if z flag not set		*/
	jlss	error3		/* error if n,v,c flags set		*/
	jcs	error3
	jvs	error3
	jmp	1f
error3:	movpsl	_actual		/* actual data psl MAYBE is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn		/* bad return failed */
1:	cmpl	sel,$0x7	/* make sure selector,base,limit unchanged*/
	jeql	1f
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	sel,_actual	/* actual data */
	movl	$7,_expected	/* expected data */
	jmp	*badrtn		/* bad return failed */
1:	bicpsw  $Z
	cmpl	base,$0	
	jeql	1f
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	base,_actual	/* actual data */
	movl	$0,_expected	/* expected data */
	jmp	*badrtn		/* bad return failed */
1:	bicpsw  $Z
	cmpl	limit,$0x7
	jeql	step3
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	limit,_actual	/* actual data */
	movl	$7,_expected	/* expected data */
	jmp	*badrtn		/* bad return failed */

/*	LIMIT < (SELECTOR-BASE)						*/
step3:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
c4:	callf	$4,_setjmp	/* save context for error return */
	movab	c4,_stpc	/* save subtest address for return */
	movl	$4,_subtst	/* subtest number */
	movl	$3,_no_opr	/* number of operands in use */
	movl	$19,_opr		/* first operand */
	movl	$10,_opr + 4	/* second operand */
	movl	$7,_opr + 8	/* third operand */
0:	movl	$19,sel		/* set selector = 19			*/
	movl	$10,base	/* set base = 10			*/
	bicpsw	$(N|Z|V|C)	/* clear n,z,c,v flags			*/
	casel	sel,base,$7
	.align	1		/* displacement list is word align */
cpc2:
	.word   lx0-cpc2
	.word   lx1-cpc2
	.word   lx2-cpc2
	.word   lx3-cpc2
	.word   lx4-cpc2
	.word   lx5-cpc2
	.word   lx6-cpc2
	.word   lx7-cpc2

	jmp	default	
	.space	1000		/* reserve 1000 bytes			*/
lx0:
	jmp	lx7	
lx1:
	jmp	lx7		/* take wrong displacement		*/
lx2:
	jmp	lx7		/* take wrong displacement		*/
lx3:
	jmp	lx7		/* take wrong displacement		*/
lx4:
	jmp	lx7		/* take wrong displacement		*/
lx5:
	jmp	lx7		/* take wrong displacement		*/
lx6:
	jmp	lx7		/* take wrong displacement		*/
lx7:
	bbs	$0,_scoplp,0b	/* if set scope loop on error		*/
	movl	$3,_ercode	/* error code wrong operand (displacement) */
	jmp	*badrtn
default:
	jlss	error4		/* error if n,z,v,c flags set		*/
	jeql	error4
	jcs	error4
	jvs	error4
	jmp	1f
error4:	movpsl	_actual		/* actual data psl MAYBE is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn		/* bad return failed */
1:	cmpl	sel,$19		/* make sure selector,base,limit unchanged*/
	jeql	1f
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	sel,_actual	/* actual data */
	movl	$19,_expected	/* expected data */
	jmp	*badrtn		/* bad return failed */
1:	bicpsw  $Z
	cmpl	base,$10	
	jeql	done
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand miscompare */
	movl	base,_actual	/* actual data */
	movl	$10,_expected	/* expected data */
	jmp	*badrtn		/* bad return failed */
done:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
	jmp	*return


/*	TEST DATA			*/
	.align  2
sel:
	.long	0
base:
	.long	0
limit:
	.long	0


unix.superglobalmegacorp.com

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