|
|
Power 6/32 Unix version 1.2b
/* MOVAW instruction test */ /* MOVL,MOVW,MOVB have been tested prior to this test */ /* Privilege registers */ .set IPL,0x8 .set MAPEN,0x9 /* 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 MAXPOSL,0x7fffffff .set MAXNEGL,0x80000000 .set MAXPOSW,0x7fff .set MAXNEGW,0x8000 .set MAXPOSB,0x7f .set MAXNEGB,0x80 .set ZERO,0 .set ONES,0xffffffff .set HIGH,31 /* highest interrupt priority */ .set DISP,2 .set LONG,4 .set WORD,2 .set BYTE,1 .globl _movaw _movaw: callf $4,_setjmp /* save context for error return */ movab _movaw,_stpc /* save subtest starting address */ movl $1,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $MAXPOSL,_opr /* first operand */ 0: bicpsw $(IV|T) /* disable exceptions */ movaw1: movl $MAXPOSL,tstloc /* initialize tstloc */ bispsw $(N|Z|V|C) /* set n,z,v,c flags */ movaw tstloc,r3 /* move address tstloc to r3 */ jlss error1 /* error if any of the n,z,v */ jeql error1 /* flags still set */ jvs error1 jcc error1 /* error if c flag clear */ 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 r3,result /* check if r3 has valid adr. */ jeql m2 /* error if not */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r3,_actual /* actual data */ movl result,_expected /* expected data */ jmp *badrtn /* MOVE ADDRESS FROM REGISTER TO MEMORY */ m2: bbs $0,_force_lp,0b /* if set loop on last subtest */ am2: callf $4,_setjmp /* save context for error return */ movab am2,_stpc /* save subtest starting address */ movl $2,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $MAXPOSL,_opr /* first operand */ 0: movaw (r3),temp /* move address in r3 to temp */ cmpl temp,result /* compare result */ jeql chkflag /* error if not */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl temp,_actual /* actual data */ movl result,_expected /* expected data */ jmp *badrtn /* TESTING CONDITION FLAGS */ chkflag: bbs $0,_force_lp,0b /* if set loop on last subtest */ am3: callf $4,_setjmp /* save context for error return */ movab am3,_stpc /* save subtest starting address */ movl $3,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $MAXNEGL,_opr /* first operand */ 0: movl $0,temp /* clear temp */ movl $MAXNEGL,r3 /* set r3 = $MAXNEGL */ bispsw $(Z|V|C) /* set z,v,c flags */ bicpsw $N /* clear n flag */ movaw (r3),temp /* move adr. in r3 to temp */ jgeq error2 /* error if n flag not set */ jeql error2 /* error if z flag still set */ jvs error2 /* error if v flag still set */ jcc error2 /* error if c flag clear */ 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: cmpl temp,$MAXNEGL /* check address in temp */ jeql 1f /* error if not */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl temp,_actual /* actual data */ movl $MAXNEGL,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl r3,$MAXNEGL /* check source */ jeql m4 /* error if not */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand was modified */ movl r4,_actual /* actual data */ movl $MAXNEGL,_expected /* expected data */ jmp *badrtn m4: bbs $0,_force_lp,0b /* if set loop on last subtest */ am4: callf $4,_setjmp /* save context for error return */ movab am4,_stpc /* save subtest starting address */ movl $4,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $MAXNEGL,_opr /* first operand */ 0: movl $ONES,temp /* set temp = 0xffffffff */ movl $0,r3 /* set r3 = $0 */ bispsw $(N|V) /* set n,v flags */ bicpsw $(Z|C) /* clear z,c flag */ moval (r3),temp /* move adr. in r3 to temp */ jlss error3 /* error if n flag still set */ jneq error3 /* error if z flag not set */ jvs error3 /* error if v flag still set */ jcc error3 /* error if c flag clear */ 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 temp,$0 /* check address in temp */ jeql 1f /* error if not */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl temp,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl r3,$0 /* check source */ jeql m5 /* error if not */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand was modified */ movl r3,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn /* CHECKING INDEXING MODE */ m5: bbs $0,_force_lp,0b /* if set loop on last subtest */ am5: callf $4,_setjmp /* save context for error return */ movab am5,_stpc /* save subtest starting address */ movl $5,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $DISP,_opr /* first operand */ 0: movl $DISP,r3 /* set r3 = DISP = 2 */ bispsw $(N|Z|V|C) /* set n,z,v,c flags */ movaw tstloc[r3],r4 /* move address tstloc to r4 */ jlss error4 /* error if any of the n,z,v */ jeql error4 /* flags still set */ jvs error4 jcc error4 /* error if c flag clear */ 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: cmpl r4,resul1 /* check if r4 has valid adr. */ jeql aldn /* error if not */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r4,_actual /* actual data */ movl resul1,_expected /* expected data */ jmp *badrtn aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */ jmp *return /* test data */ .align 2 /* align on longword boundary */ tstloc: .long 0 result: .long tstloc resul1: .long tstloc+(DISP*WORD) temp: .long 0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.