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

/*	MOVOW instruction test					*/
/*	MOVL have been tested prior to this test.		*/
/*	constant definitions 					*/

	.set	HIGH,31
	.set	IPL,8
	.set	ZERO,0
	.set	ONES,0xffffffff
	.set	IV,32
	.set 	T,16
	.set	N,8
	.set	Z,4
	.set	V,2
	.set	C,1
	.set    NEGNO,0xa000ffff
	.set    NEGVAL,0xff0fffff
	.set	WORD,0xffff
	.set	BYTE,0xff
	.set	MASKHW,0x55550000
	.set	MASKLW,0x5555
	.set	MASKB,0x55555500

	.globl	_movow
_movow:
	
	callf	$4,_setjmp	/* save context for return from error */
	movab	_movow,_stpc	/* save subtest starting address */
	movw	$1,_subtst	/* subtest no : Used MOVOW to clear latch */
	movl	$1,_no_opr	/* number of operands */
	movl	negno,_opr	/* first operand in use */
0:	
	bicpsw  $(IV|T)		/* disable overflow,trace exceptions	*/
movwmr:				/* MOVE MEMORY TO REGISTER	*/
	movl	$MASKHW,r4	/* initialize r4 = 0x55550000	*/
	bispsw	$(Z|V|C)	/* set z,v,c flags      */
	bicpsw  $N		/* clear n flag		*/
	movow	negno,r4	/* move word 0xa000 to r4	*/
	jgeq	error1		/* error if n flag not set	*/
	jeql	error1		/* error if z flag set	*/
	jvs	error1		/* error if v flag set  */
	jcc	error1		/* error if c flag not set	*/
	jmp	1f
error1:	movpsl	_actual		/* actual = psl MAYBE it is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	cmpl	expr5,r4	/* compare r4 to 0xffffa000	*/
	jeql	1f
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r4,_actual	/* actual data */
	movl	expr5,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	$NEGNO,negno	/* make sure source unchanged   */
	jeql	movwrr
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand was modiefied */
	movl	negno,_actual	/* actual data */
	movl	$NEGNO,_expected	/* expected data */
	jmp	*badrtn
movwrr:				/* MOVE REGISTER TO REGISTER	*/
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
m2:	callf	$4,_setjmp	/* save context for return from error */
	movab	m2,_stpc	/* save subtest starting address */
	movl	$2,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands */
	movl	$MASKLW,_opr	/* first operand in use */
0:	movl	$MASKLW,r3	/* initialize r3 = 0x5555	*/
	movl	r3,expval
	movl	$0xffffffff,r4	/* initialize r4 = 0xffffffff	*/
	bispsw  $(Z|N|V)	/* set Z,V,N flags		*/
	bicpsw  $C		/* clear C flag			*/
	movow	r3,r4		/* move r3 to r4	*/
	jlss	error2		/* error if n flag set	*/
	jeql	error2		/* error if z flag set	*/
	jvs	error2		/* error if v flag set  */
	jcc	error2		/* error if c flag not set	*/
	jmp	1f
error2:	movpsl	_actual		/* actual = psl MAYBE it is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
	cmpl	r4,expval
	jeql	1f
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r4,_actual	/* actual data */
	movl	expval,_expected	/* expected data */
	jmp	*badrtn
1:	movow	r4,r5		/* move r4 to r5	*/
	movow	r5,r6		/* move r5 to r6	*/
	movow	r6,r7		/* move r6 to r7	*/
	movow	r7,r9		/* move r7 to r9	*/
	movl	r9,oldval	/* save value of source = 0x00005555 */
	movow	r9,r11		/* move r9 to r11	*/
	cmpl	expval,r11   	/* compare r11 to 0x00005555	*/
	jneq	error2		/* error if not equal; z flag not set */
	jeql	1f
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r4,_actual	/* actual data */
	movl	expval,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	oldval,r9	/* make sure source unchanged   */
	jeql	m3
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand was modiefied */
	movl	r9,_actual	/* actual data */
	movl	oldval,_expected	/* expected data */
	jmp	*badrtn

m3:	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
am3:	callf	$4,_setjmp	/* save context for return from error */
	movab	am3,_stpc	/* save subtest starting address */
	movl	$3,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands */
	movl	negval,_opr	/* first operand in use */
0:	movl	$0x0,r4
	movw	negval,r3	/* move word 0xff0f to r3 */
	movl	r3,expval	/* save source		  */
	bispsw  $(Z|V)
	bicpsw  $(C|N)
	movow	r3,r4		/* move 0xffffff0f to r4  */
	jgeq	error3		/* error if n flag not set	*/
	jeql	error3		/* error if z flag set	*/
	jvs	error3		/* error if v flag set  */
	jcc	error3		/* error if c flag not set	*/
	jmp	1f
error3:	movpsl	_actual		/* actual = psl MAYBE it is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	cmpl	r4,expval
	jeql	1f
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r4,_actual	/* actual data */
	movl	expval,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	r3,expval
	jeql	movwmm
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand was modiefied */
	movl	r3,_actual	/* actual data */
	movl	expval,_expected	/* expected data */
	jmp	*badrtn
movwmm:				/* MOVE MEMORY TO MEMORY	*/
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
m4:	callf	$4,_setjmp	/* save context for return from error */
	movab	m4,_stpc	/* save subtest starting address */
	movl	$4,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands */
	movl	$0xffff0000,_opr	/* first operand in use */
0:	movl	$0x0,tstloc
	movl	$0xffff0000,oprd
	movl	oprd,oldval	/* save source		*/
	bispsw	$(Z|V)		/* set z,v flags	*/
	bicpsw	$(C|N)		/* clear n,c flag	*/
	movow   oprd,tstloc+2	
	jgeq	error4		/* error if n flag not set	*/
	jeql	error4		/* error if z flag set	*/
	jvs	error4		/* error if v flag set  	*/
	jcc	error4		/* error if c flag not set	*/
	jmp	1f
error4:	movpsl	_actual		/* actual = psl MAYBE it is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:
	andl2	$0xffff,tstloc
	cmpl 	$0xffff,tstloc   /* compare tstloc to expected value */
	jeql	1f
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	tstloc,_actual	/* actual data */
	movl	$0xffff,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	oprd,oldval	/* make sure source unchanged   */
	jeql	m5
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand was modiefied */
	movl	oprd,_actual	/* actual data */
	movl	oldval,_expected	/* expected data */
	jmp	*badrtn

m5:				/* MOVE MEMORY TO MEMORY	*/
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
am5:	callf	$4,_setjmp	/* save context for return from error */
	movab	am5,_stpc	/* save subtest starting address */
	movl	$5,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands */
	movl	$0x5555,_opr	/* first operand in use */
0:	movl	$0x5555,tstloc
	movl	tstloc,oldval	/* save source		*/
	bispsw	$(N|V|Z)	/* set n,v,z flags	*/
	bicpsw	$C		/* clear c flag		*/
	movow    tstloc+2,oprd+2	
	jlss	error5		/* error if n flag set	*/
	jeql	error5		/* error if z flag set	*/
	jvs	error5		/* error if v flag set  */
	jcc	error5		/* error if c flag not set	*/
	jmp	1f
error5:	movpsl	_actual		/* actual = psl MAYBE it is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:
	andl2	$0xffff,oprd
	cmpl 	$0x5555,oprd   /* compare oprd to expected value */
	jeql	1f
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	oprd,_actual	/* actual data */
	movl	$0x5555,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	tstloc,oldval	/* make sure source unchanged   */
	jeql	movwdm
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand was modiefied */
	movl	tstloc,_actual	/* actual data */
	movl	oldval,_expected	/* expected data */
	jmp	*badrtn
movwdm:				/* MOVE DATA TO MEMORY	*/
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
m6:	callf	$4,_setjmp	/* save context for return from error */
	movab	m6,_stpc	/* save subtest starting address */
	movl	$6,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands */
	movl	$0x5555,_opr	/* first operand in use */
0:	movl	$0x0,tstloc
	movl	$0xffff0000,oprd
	movl	oprd,oldval	/* save source		*/
	bispsw	$(Z|V)		/* set z,v flags	*/
	bicpsw	$(C|N)		/* clear n,c flag	*/
	movow    $-0x0001,tstloc+2	
	jgeq	error6		/* error if n flag not set	*/
	jeql	error6		/* error if z flag set	*/
	jvs	error6		/* error if v flag set  	*/
	jcc	error6		/* error if c flag not set	*/
	jmp	1f
error6:	movpsl	_actual		/* actual = psl MAYBE it is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:
	andl2	$0xffff,tstloc
	cmpl 	$0xffff,tstloc   /* compare tstloc to expected value */
	jeql	1f
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	tstloc,_actual	/* actual data */
	movl	$0x0000ffff,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	oprd,oldval	/* make sure source unchanged   */
	jeql	movwrm
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand was modiefied */
	movl	oprd,_actual	/* actual data */
	movl	oldval,_expected	/* expected data */
	jmp	*badrtn
movwrm:
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
m7:	callf	$4,_setjmp	/* save context for return from error */
	movab	m7,_stpc	/* save subtest starting address */
	movl	$7,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands */
	movl	$0xff0f,_opr	/* first operand in use */
0:	movl	$0xff0f,expval	/* move word 0xff0f to expval */
	movl	$0xff0f,tmp	/* save source		  */
	movw	tmp+2,r3
	bispsw  $(Z|V)
	bicpsw  $(C|N)
	movow	r3,tstloc+2	/* move 0xffffff0f to tstloc+2 */
	jgeq	error7		/* error if n flag not set	*/
	jeql	error7		/* error if z flag set	*/
	jvs	error7		/* error if v flag set  */
	jcc	error7		/* error if c flag not set	*/
	jmp	1f
error7:	movpsl	_actual		/* actual = psl MAYBE it is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:
	andl2	$0xffff,tstloc
	cmpl	tstloc,expval
	jeql	movwdr
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	tstloc,_actual	/* actual data */
	movl	expval,_expected	/* expected data */
	jmp	*badrtn

movwdr:				/* MOVE DATA TO REGISTER */
	bbs	$0,_force_lp,0b	/* if set loop on last subtest */
m8:	callf	$4,_setjmp	/* save context for return from error */
	movab	m8,_stpc	/* save subtest starting address */
	movl	$8,_subtst	/* subtest number */
	movl	$1,_no_opr	/* number of operands */
	movl	negval,_opr	/* first operand in use */
0:	movl	$0x0,r4
	movow	negval,r3	/* move word 0xff0f to r3 */
	movl	r3,expval	/* save source		  */
	bispsw  $(Z|V)
	bicpsw  $(C|N)
	movow	$-0x00f1,r4	/* move 0xffffff0f to r4  */
	jgeq	error8		/* error if n flag not set	*/
	jeql	error8		/* error if z flag set	*/
	jvs	error8		/* error if v flag set  */
	jcc	error8		/* error if c flag not set	*/
	jmp	1f
error8:	movpsl	_actual		/* actual = psl MAYBE it is incorrect */
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$2,_ercode	/* error code flag failure */
	jmp	*badrtn
1:	cmpl	r4,expval
	jeql	1f
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$1,_ercode	/* error code data miscompare */
	movl	r4,_actual	/* actual data */
	movl	expval,_expected	/* expected data */
	jmp	*badrtn
1:	bicpsw  $Z
	cmpl	r3,expval
	jeql	aldn	
	bbs	$0,_scoplp,0b	/* if set scope loop on error */
	movl	$3,_ercode	/* error code operand was modiefied */
	movl	r3,_actual	/* actual data */
	movl	oldval,_expected	/* expected data */
	jmp	*badrtn


aldn:	bbs	$0,_force_lp,0b	/* if set loop on last error */
	jmp	*return		/* good, return to monitor */

/*	test data		*/
	.align 	2
negval:	.long	NEGVAL		/* 0xf0ffffff	*/	
zero:	.long	0x0
expval:	.long	0x0
oldval:	.long	0x0
negno:  .long   NEGNO
expr5:  .long   0xffffa000
tstloc:	.long	0x0
tmp:	.long	0x0
oprd:	.long	0x0

unix.superglobalmegacorp.com

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