|
|
Power 6/32 Unix version 1.2b
/* DECW instruction test */ /* DECL has been tested prior to this 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 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 */ .globl _dec_w _dec_w: callf $4,_setjmp /* save context for error return */ movab _dec_w,_stpc /* save address of subtest start */ movl $1,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $1,_opr /* first operand */ 0: movl $1,r3 /* load r3 with 1 */ bispsw $(N|V) /* set n,v flags */ bicpsw $(C|Z) /* clear c,z flag */ decw r3 /* decrement r3 */ jneq error1 /* error if z flag not set */ jcc error1 /* error if c flag not set */ jlss error1 /* error if n flag still set */ jvs error1 /* error if v flag still 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 $0,r3 /* compare r3 to 0 */ jeql ovf1 /* no error then continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r3,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn ovf1: /* To be tested in phase 2 */ bbs $0,_force_lp,0b /* if set loop on last subtest */ ad2: callf $4,_setjmp /* save context for error return */ movab ad2,_stpc /* save address of subtest start */ movl $2,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $MAXNEGL,_opr /* first operand */ 0: movl $MAXNEGL,r3 /* load r3 with largest neg. value */ bispsw $Z /* set z flags */ bicpsw $(V|C|N) /* clear n,v,c flag */ decw r3 /* decrement r3 */ jeql error2 /* error if z flag still set */ jgeq error2 /* error if n flag not set */ jcc error2 /* error if c flag not set */ jvs error2 /* error if v 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: cmpl $MAXPOSL,r3 /* compare r3 to largest pos. value */ jeql d3 /* no error then continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r3,_actual /* actual data */ movl $MAXPOSL,_expected /* expected data */ jmp *badrtn d3: bbs $0,_force_lp,0b /* if set loop on last subtest */ ad3: callf $4,_setjmp /* save context for error return */ movab ad3,_stpc /* save address of subtest start */ movl $3,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $0,_opr /* first operand */ 0: movl $0,r3 bispsw $(C|Z|V) /* set c,z,v flags */ bicpsw $N /* clear n flag */ decw r3 jeql error3 /* error if z flag still set */ jcs error3 /* error if c flag still set */ jvs error3 /* error if v flag still set */ jgeq error3 /* error if n 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 $0xffffffff,r3 /* compare r3 to -1 */ jeql decmw /* no error then continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r3,_actual /* actual data */ movl $0xffffffff,_expected /* expected data */ jmp *badrtn decmw: /* DECREMENT MEMORY */ bbs $0,_force_lp,0b /* if set loop on last subtest */ ad4: callf $4,_setjmp /* save context for error return */ movab ad4,_stpc /* save address of subtest start */ movl $4,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $0x0001ffff,_opr /* first operand */ 0: movl $0x0001ffff,tstloc /* load tstloc with 0x0001ffff */ bispsw $(N|V) /* set n,v flags */ bicpsw $(C|Z) /* clear c,z flag */ decw tstloc /* decrement value in tstloc */ jneq error4 /* error if z flag not set */ jcc error4 /* error if c flag not set */ jlss error4 /* error if n flag still set */ jvs error4 /* error if v flag still 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 bicpsw $Z 1: cmpl $0x0000ffff,tstloc /* compare tstloc to 0x0000ffff */ jeql ovf2 /* no error then continue */ 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 ovf2: bbs $0,_force_lp,0b /* if set loop on last subtest */ ad5: callf $4,_setjmp /* save context for error return */ movab ad5,_stpc /* save address of subtest start */ movl $5,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $0x80003333,_opr /* first operand */ 0: movl $0x80003333,tstloc bispsw $Z /* set z flags */ bicpsw $(V|C|N) /* clear n,v,c flags */ decw tstloc /* decrement tstloc */ jeql error5 /* error if z flag still set */ jgeq error5 /* error if n flag not set */ jcc error5 /* error if c flag not set */ jvc error5 /* error if v 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: cmpl $0x7fff3333,tstloc /* tstloc == 0x7fff3333 */ jeql d6 /* no error then continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl tstloc,_actual /* actual data */ movl $0x7fff3333,_expected /* expected data */ jmp *badrtn d6: bbs $0,_force_lp,0b /* if set loop on last subtest */ ad6: callf $4,_setjmp /* save context for error return */ movab ad6,_stpc /* save address of subtest start */ movl $6,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $0x0000ffff,_opr /* first operand */ 0: movl $0x0000ffff,tstloc /* set tstloc = 0x0000ffff */ bispsw $(Z|V|C) /* set z,v,c flags */ bicpsw $N /* clear n flag */ decw tstloc /* decrement tstloc */ jgeq error6 /* error if n flag not set */ jeql error6 /* error if z flag still set */ jvs error6 /* error if v flag still set */ jcs error6 /* error if c flag still 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: cmpl $0xffffffff,tstloc /* tstloc == 0xffffffff */ jeql aldn /* no error then continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl tstloc,_actual /* actual data */ movl $0xffffffff,_expected /* expected data */ jmp *badrtn aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */ jmp *return /* test data */ .align 2 tstloc: .long 0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.