|
|
Power 6/32 Unix version 1.2b
/* MOVL instruction test */ /* */ /* constant definitions */ .set HIGH,31 .set IPL,8 .set ZERO,0 .set ONES,0xffffffff .set DV,128 .set FU,64 .set IV,32 .set T,16 .set N,8 .set Z,4 .set V,2 .set C,1 .set NEGVAL,0xff0fffff .globl _movl _movl: bicpsw $(IV|T) /* disable overflow,trace exceptions */ movlmr: /* MOVE MEMORY TO REGISTER */ callf $4,_setjmp /* save context for error return */ movab movlmr,_stpc /* save address of subtest start */ movl $1,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $NEGVAL,_opr /* first operand */ movl $NEGVAL,negval /* restore original value of negval */ 0: bispsw $(Z|V) /* set z,v flags */ bicpsw $(N|C) /* clear n,c flag */ movl negval,r4 /* move negative value to r4 mem to reg */ movpsl actpsl 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 negval,r4 /* compare r4 to negval */ 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 negval,_expected /* expected data */ jmp *badrtn 1: cmpl $NEGVAL,negval /* make sure source unchanged */ jeql movlrr /* no error then continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl negval,_actual /* actual data */ movl $NEGVAL,_expected /* expected data */ jmp *badrtn movlrr: /* MOVE REGISTER TO REGISTER */ bbs $0,_force_lp,0b /* if set loop on last subtest */ am2: callf $4,_setjmp /* save context for error return */ movab am2,_stpc /* save address of subtest start */ movl $2,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $NEGVAL,_opr /* first operand */ 0: movl negval,r3 /* move negval to r3*/ bispsw $(Z|V|C) /* set z,v,c flags */ bicpsw $N /* clear N flag */ movl r3,r4 /* move r3 to r4 */ movpsl actpsl jgeq error2 /* error if n flag not 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 1: movl r4,r5 /* move r4 to r5 */ movl r5,r6 /* move r5 to r6 */ movl r6,r7 /* move r6 to r7 */ movl r7,r8 /* move r7 to r8 */ movl r8,r9 /* move r8 to r9 */ movl r9,r10 /* move r9 to r10 */ movl r10,r11 /* move r10 to r11 */ movl r11,r12 /* move r11 to r12 */ cmpl negval,r12 /* compare r12 to negval */ jeql 1f bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r12,_actual /* actual data */ movl negval,_expected /* expected data */ jmp *badrtn 1: cmpl r3,r11 /* make sure source unchanged */ jeql movlmm bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r3,_actual /* actual data */ movl negval,_expected /* expected data */ jmp *badrtn movlmm: /* MOVE REGISTER TO MEMORY */ bbs $0,_force_lp,0b /* if set loop on last subtest */ am3: callf $4,_setjmp /* save context for error return */ movab am3,_stpc /* save address of subtest start */ movl $3,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl zero,_opr /* first operand */ 0: movl zero,r3 /* load starting register */ bispsw $(N|V|C) /* set n,v,c flags */ bicpsw $Z /* clear z flag */ movl r3,negval /* clear negval */ movpsl actpsl jlss error3 /* error if n flag set */ jneq error3 /* error if z flag not 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 $ZERO,negval /* compare negval to 0 */ jeql 1f bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl negval,_actual /* actual data */ movl $ZERO,_expected /* expected data */ jmp *badrtn 1: cmpl $ZERO,zero /* compare source to 0 */ jneq error3 /* error if value changed */ jeql aldn bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl zero,_actual /* actual data */ movl $ZERO,_expected /* expected data */ jmp *badrtn aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */ jmp *return /* test data */ .align 2 negval: .long NEGVAL zero: .long 0 actpsl: .long 0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.