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





/*		CMPL (compare long) test				*/
/*									*/
/*Test name = cmpl							*/
/*Description =								*/
/*	This test checks 'cmpl' instruction as follows:			*/
/*	src1		src2		N Z V C (flags)			*/
/*	____		____		_______________			*/
/*	+	=	+		0 1 0 1				*/
/*	-	= 	-		0 1 0 1				*/
/*	+	>	+		1 0 0 0				*/
/*	-	<	-		1 0 0 0				*/
/*	-	=	+		1 0 0 1				*/
/*	-	>	+		1 0 0 1				*/
/*	-	<	+		1 0 0 1				*/
/*	+	<	-		0 0 0 0				*/
/*	+	=	-		0 0 0 0				*/
/*	+	>	-		0 0 0 0				*/
/*	-	>	-		0 0 0 1				*/
/*	+	>	+		0 0 0 1				*/
/*	M     ----	M		-------				*/
/*	R     ----	M		-------				*/
/*									*/
/*									*/
/*									*/

/*									*/
/*	constants definition for 'cmpx' tests.				*/
/*									*/

	.set	SRC1B1,0x7f	/*+127, highest +ve number, byte	*/
	.set	SRC1W1,0x7fff
	.set	SRC1L1,0x7fffffff
	.set	SRC2B1,0x5555557f
	.set	SRC2W1,0x55557fff
	.set	SRC2L1,SRC1L1
	.set	SRC1B2,0xff	/*-1, highest -ve number, byte		*/
	.set	SRC1W2,0xffff
	.set	SRC1L2,0xffffffff
	.set	SRC2B2,SRC1B2
	.set	SRC2W2,SRC1W2
	.set	SRC2L2,SRC1L2
	.set	SRC1B3,0x01
	.set	SRC1W3,0X0001
	.set	SRC1L3,0x00000001
	.set	SRC2B3,0x02
	.set	SRC2W3,0x0002
	.set	SRC2L3,0x00000002
	.set	SRC1B4,0xfe	/*-2					*/
	.set	SRC1W4,0xfffe
	.set	SRC1L4,0xfffffffe
	.set	SRC2B4,0xff	/*-1					*/
	.set	SRC2W4,0xffff
	.set	SRC2L4,0xffffffff
	.set	SRC1B5,0x81	/*-127					*/
	.set	SRC1W5,0x8001
	.set	SRC1L5,0x80000001
	.set	SRC2B5,0x7f	/*+127					*/
	.set	SRC2W5,0x7fff
	.set	SRC2L5,0x7fffffff
	.set	SRC1B6,SRC1B4	/*-2					*/
	.set	SRC1W6,SRC1W4
	.set	SRC1L6,SRC1L4
	.set	SRC2B6,SRC1B3	/*+1					*/
	.set	SRC2W6,SRC1W3
	.set	SRC2L6,SRC1L3
	.set	SRC1B7,SRC2B4	/*-1					*/
	.set	SRC1W7,SRC2W4
	.set	SRC1L7,SRC2L4
	.set	SRC2B7,SRC2B3	
	.set	SRC2W7,SRC2W3	
	.set	SRC2L7,SRC2L3	
	.set	SRC1B8,SRC2B6	/*+1*/
	.set	SRC1W8,SRC2W6
	.set	SRC1L8,SRC2L6
	.set	SRC2B8,SRC1B4	/*-2*/
	.set	SRC2W8,SRC1W4
	.set	SRC2L8,SRC1L4
	.set	SRC1B9,SRC1B1	/*127*/
	.set	SRC1W9,SRC1W1
	.set	SRC1L9,SRC1L1
	.set	SRC2B9,SRC1B5	/*-127*/
	.set	SRC2W9,SRC1W5
	.set	SRC2L9,SRC1L5
	.set	SRC1B10,SRC2B3	/*2*/
	.set	SRC1W10,SRC2W3
	.set	SRC1L10,SRC2L3
	.set	SRC2B10,SRC1B2	/*-1*/
	.set	SRC2W10,SRC1W2
	.set	SRC2L10,SRC1L2
	.set	SRC1B11,SRC1B2	/*-1*/
	.set	SRC1W11,SRC1W2
	.set	SRC1L11,SRC1L2
	.set	SRC2B11,SRC1B4	/*-2*/
	.set	SRC2W11,SRC1W4
	.set	SRC2L11,SRC1L4
	.set	SRC1B12,SRC2B3	/*2*/
	.set	SRC1W12,SRC2W3
	.set	SRC1L12,SRC2L3
	.set	SRC2B12,SRC1B3	/*1*/
	.set	SRC2W12,SRC1W3
	.set	SRC2L12,SRC1L3

/*									*/
/*	Syst.s - Constants						*/
/*									*/
	.set	IPL,8
	.set	HIGH,31
	.set	ZERO,0
	.set	ONES,0xffffffff
	.set	N,8
	.set	Z,4
	.set	V,2
	.set	C,1
	.set	T,16
	.set	IV,32
	.set	FU,64
	.set	DV,128
	.set	PSWMASK,0x003f
/*									*/
/*	t1loc = M, t2loc = M						*/
/*									*/
	.globl	_cmp_l
_cmp_l:
	callf	$4,_setjmp	/* save context for error return */
	movab	_cmp_l,_stpc	/* save address of subtest start */
	movl	$1,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$SRC1L1,_opr	/* first operand */
	movl	$SRC2L1,_opr + 4 /* second operand */
0:	movl	$SRC1L1,tloc1	/*tloc1 = source1			*/
	movl	$SRC2L1,tloc2	/*tloc2 = source2			*/
	bicpsw	$PSWMASK	/*disable overflow & other enable bits  */
	bispsw	$(N|V|C)	/*turn neg, overflow, & carry ON	*/
	cmpl	tloc1,tloc2	/*execute compare mem to mem		*/
	bneq	error1		/*error if Z = 0			*/
	blss	error1		/*error if N = 1			*/
	bvs	error1		/*error if V = 1			*/
	bcc	error1		/*error if C = 0			*/
	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
1:	bicpsw	$Z		/*clear Z flag				*/
	cmpl	$SRC1L1,tloc1	/*check tloc1 & tlco2 unchanged		*/
	jeql	1f
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand was changed */ 
	movl	tloc1,_actual	/* actual data */
	movl	$SRC1L1,_expected /* expected data */
	jmp	*badrtn
1:	bicpsw	$Z
	cmpl	$SRC2L1,tloc2
	jeql	c2
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand was changed */ 
	movl	tloc2,_actual	/* actual data */
	movl	$SRC2L1,_expected /* expected data */
	jmp	*badrtn
/*									*/
/*	different patterns for source1 & source2			*/
/*									*/
c2:
	bbs	$0,_force_lp,0b /* if set loop on last subtest */
ac2:	callf	$4,_setjmp	/* save context for error return */
	movab	ac2,_stpc	/* save address of subtest start */
	movl	$2,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$SRC1L2,_opr	/* first operand */
	movl	$SRC2L2,_opr + 4 /* second operand */
0:	bicpsw	$PSWMASK	/*disable overflow & other enable bits  */
	movl	$SRC1L2,r3	/*tloc1 = source1			*/
	movl	$SRC2L2,tloc2	/*tloc2 = source2			*/
	bispsw	$(N|V|C)	/*turn neg, overflow, & carry ON	*/
	cmpl	r3,tloc2	/*execute compare reg to mem		*/
	bneq	error2		/*error if Z = 0			*/
	blss	error2		/*error if N = 1			*/
	bvs	error2		/*error if V = 1			*/
	bcc	error2		/*error if C = 0			*/
	jmp	cmplnc
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

cmplnc:

	bbs	$0,_force_lp,0b /* if set loop on last subtest */
ac3:	callf	$4,_setjmp	/* save context for error return */
	movab	ac3,_stpc	/* save address of subtest start */
	movl	$3,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$SRC1L3,_opr	/* first operand */
	movl	$SRC2L3,_opr + 4 /* second operand */
0:	bicpsw	$PSWMASK	/*disable overflow & other enable bits  */
	movl	$SRC1L3,tloc1	/*tloc1 = source1			*/
	movl	$SRC2L3,r4	/*tloc2 = source2			*/
	bispsw	$(Z|V)		/*turn overflow, & zero ON		*/
	cmpl	tloc1,r4	/*execute compare memory to reg4	*/
	beql	error3		/*error if Z = 1			*/
	bgeq	error3		/*error if N = 0			*/
	bvs	error3		/*error if V = 1			*/
	bcs	error3		/*error if C = 1			*/
	jmp	c4
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
/*									*/
/*	different patterns for source1 & source2			*/
/*									*/
c4:
	bbs	$0,_force_lp,0b /* if set loop on last subtest */
ac4:	callf	$4,_setjmp	/* save context for error return */
	movab	ac4,_stpc	/* save address of subtest start */
	movl	$4,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$SRC1L4,_opr	/* first operand */
	movl	$SRC2L4,_opr + 4 /* second operand */
0:	bicpsw	$PSWMASK	/*disable overflow & other enable bits  */
	movl	$SRC1L4,r3	/*tloc1 = source1			*/
	movl	$SRC2L4,r4	/*tloc2 = source2			*/
	bispsw	$(Z|V)		/*turn overflow, & zero ON		*/
	cmpl	r3,r4		/*execute compare reg to reg		*/
	beql	error4		/*error if Z = 1			*/
	bgeq	error4		/*error if N = 0			*/
	bvs	error4		/*error if V = 1			*/
	bcs	error4		/*error if C = 1			*/
	jmp	cmpln
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


cmpln:
	bbs	$0,_force_lp,0b /* if set loop on last subtest */
ac5:	callf	$4,_setjmp	/* save context for error return */
	movab	ac5,_stpc	/* save address of subtest start */
	movl	$5,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$SRC1L5,_opr	/* first operand */
	movl	$SRC2L5,_opr + 4 /* second operand */
0:	bicpsw	$PSWMASK	/*disable overflow & other enable bits  */
	movl	$SRC1L5,tloc1	/*tloc1 = source1			*/
	movl	$SRC2L5,tloc2	/*tloc2 = source2			*/
	bispsw	$(Z|V|C)	/*turn zero, overflow, & carry ON	*/
	cmpl	tloc1,tloc2	/*execute compare			*/
	beql	error5		/*error if Z = 1			*/
	bgeq	error5		/*error if N = 0			*/
	bvs	error5		/*error if V = 1			*/
	bcc	error5		/*error if C = 0			*/
	jmp	c6
error5:	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
/*									*/
/*	different patterns for source1 & source2			*/
/*									*/
c6:
	bbs	$0,_force_lp,0b /* if set loop on last subtest */
ac6:	callf	$4,_setjmp	/* save context for error return */
	movab	ac6,_stpc	/* save address of subtest start */
	movl	$6,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$SRC1L6,_opr	/* first operand */
	movl	$SRC2L6,_opr + 4 /* second operand */
0:	bicpsw	$PSWMASK	/*disable overflow & other enable bits  */
	movl	$SRC1L6,tloc1	/*tloc1 = source1			*/
	movl	$SRC2L6,tloc2	/*tloc2 = source2			*/
	bispsw	$(Z|V|C)	/*turn zero, overflow, & carry ON	*/
	cmpl	tloc1,tloc2	/*execute compare			*/
	beql	error6		/*error if Z = 1			*/
	bgeq	error6		/*error if N = 0			*/
	bvs	error6		/*error if V = 1			*/
	bcc	error6		/*error if C = 0			*/
	jmp	c7
error6:	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
/*									*/
/*	different patterns for source1 & source2			*/
/*									*/
c7:
	bbs	$0,_force_lp,0b /* if set loop on last subtest */
ac7:	callf	$4,_setjmp	/* save context for error return */
	movab	ac7,_stpc	/* save address of subtest start */
	movl	$7,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$SRC1L7,_opr	/* first operand */
	movl	$SRC2L7,_opr + 4 /* second operand */
0:	bicpsw	$PSWMASK	/*disable overflow & other enable bits  */
	movl	$SRC1L7,tloc1	/*tloc1 = source1			*/
	movl	$SRC2L7,tloc2	/*tloc2 = source2			*/
	bispsw	$(Z|V|C)	/*turn zero, overflow, & carry ON	*/
	cmpl	tloc1,tloc2	/*execute compare			*/
	beql	error7		/*error if Z = 1			*/
	bgeq	error7		/*error if N = 0			*/
	bvs	error7		/*error if V = 1			*/
	bcc	error7		/*error if C = 0			*/
	jmp	cmplc
error7:	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

cmplc:
	bbs	$0,_force_lp,0b /* if set loop on last subtest */
ac8:	callf	$4,_setjmp	/* save context for error return */
	movab	ac8,_stpc	/* save address of subtest start */
	movl	$8,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$SRC1L8,_opr	/* first operand */
	movl	$SRC2L8,_opr + 4 /* second operand */
0:	bicpsw	$PSWMASK	/*disable overflow & other enable bits  */
	movl	$SRC1L8,tloc1	/*tloc1 = source1			*/
	movl	$SRC2L8,tloc2	/*tloc2 = source2			*/
	bispsw	$(Z|V|N)	/*turn zero, overflow, & neg ON		*/
	cmpl	tloc1,tloc2	/*execute compare			*/
	beql	error8		/*error if Z = 1			*/
	blss	error8		/*error if N = 1			*/
	bvs	error8		/*error if V = 1			*/
	bcs	error8		/*error if C = 1			*/
	jmp	c9
error8:	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
/*									*/
/*	different patterns for source1 & source2			*/
/*									*/
c9:
	bbs	$0,_force_lp,0b /* if set loop on last subtest */
ac9:	callf	$4,_setjmp	/* save context for error return */
	movab	ac9,_stpc	/* save address of subtest start */
	movl	$9,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$SRC1L9,_opr	/* first operand */
	movl	$SRC2L9,_opr + 4 /* second operand */
0:	bicpsw	$PSWMASK	/*disable overflow & other enable bits  */
	movl	$SRC1L9,tloc1	/*tloc1 = source1			*/
	movl	$SRC2L9,tloc2	/*tloc2 = source2			*/
	bispsw	$(Z|V|N)	/*turn zero, overflow, & neg ON		*/
	cmpl	tloc1,tloc2	/*execute compare			*/
	beql	error9		/*error if Z = 1			*/
	blss	error9		/*error if N = 1			*/
	bvs	error9		/*error if V = 1			*/
	bcs	error9		/*error if C = 1			*/
	jmp	c10
error9:	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
/*									*/
/*	different patterns for source1 & source2			*/
/*									*/
c10:
	bbs	$0,_force_lp,0b /* if set loop on last subtest */
ac10:	callf	$4,_setjmp	/* save context for error return */
	movab	ac10,_stpc	/* save address of subtest start */
	movl	$0xa,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$SRC1L10,_opr	/* first operand */
	movl	$SRC2L10,_opr + 4 /* second operand */
0:	bicpsw	$PSWMASK	/*disable overflow & other enable bits  */
	movl	$SRC1L10,tloc1	/*tloc1 = source1			*/
	movl	$SRC2L10,tloc2	/*tloc2 = source2			*/
	bispsw	$(Z|V|N)	/*turn zero, overflow, & neg ON		*/
	cmpl	tloc1,tloc2	/*execute compare			*/
	jeql	error10		/*error if Z = 1			*/
	jlss	error10		/*error if N = 1			*/
	jvs	error10		/*error if V = 1			*/
	jcs	error10		/*error if C = 1			*/
	jmp	cmploff
error10: 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

cmploff:
	bbs	$0,_force_lp,0b /* if set loop on last subtest */
ac11:	callf	$4,_setjmp	/* save context for error return */
	movab	ac11,_stpc	/* save address of subtest start */
	movl	$0xb,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$SRC1L11,_opr	/* first operand */
	movl	$SRC2L11,_opr + 4 /* second operand */
0:	bicpsw	$PSWMASK	/*disable overflow & other enable bits  */
	movl	$SRC1L11,tloc1	/*tloc1 = source1			*/
	movl	$SRC2L11,tloc2	/*tloc2 = source2			*/
	bispsw	$(Z|N|V|C)	/*turn Z, neg, overflow, & carry ON	*/
	cmpl	tloc1,tloc2	/*execute compare			*/
	beql	error11		/*error if Z = 1			*/
	blss	error11		/*error if N = 1			*/
	bvs	error11		/*error if V = 1			*/
	bcc	error11		/*error if C = 0			*/
	jmp	cmploff1
	jmp	cmploff
error11: 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

cmploff1:
	bbs	$0,_force_lp,0b /* if set loop on last subtest */
ac12:	callf	$4,_setjmp	/* save context for error return */
	movab	ac12,_stpc	/* save address of subtest start */
	movl	$0xc,_subtst	/* subtest number */
	movl	$2,_no_opr	/* number of operands in use */
	movl	$SRC1L12,_opr	/* first operand */
	movl	$SRC2L12,_opr + 4 /* second operand */
0:	bicpsw	$PSWMASK	/*disable overflow & other enable bits  */
	movl	$SRC1L12,tloc1	/*tloc1 = source1			*/
	movl	$SRC2L12,tloc2	/*tloc2 = source2			*/
	bispsw	$(Z|N|V|C)	/*turn Z, neg, overflow, & carry ON	*/
	cmpl	tloc1,tloc2	/*execute compare			*/
	beql	error12		/*error if Z = 1			*/
	blss	error12		/*error if N = 1			*/
	bvs	error12		/*error if V = 1			*/
	bcc	error12		/*error if C = 0			*/
	jmp	aldn
error12: 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
aldn:	bbs	$0,_force_lp,0b /* if set loop on last subtest */
	jmp	*return		/* good, return to monitor */


/*	Variables	*/
	.align	2
tloc1:	.space	4
tloc2:	.space	4

/*	end of file	*/

unix.superglobalmegacorp.com

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