|
|
Power 6/32 Unix version 1.2b
/* INCB instruction test */ /* Privilege registers */ .set IPL,0x8 .set MAPEN,0x9 .set KSP,0x19 /* 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 */ .globl _inc_b _inc_b: callf $4,_setjmp /* save context for error return */ movab _inc_b,_stpc /* save address of subtest start */ movl $1,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $0xfffffffe,_opr /* first operand */ 0: bicpsw $(IV|T) /* disable overflow,trace exceptions */ incrb: /* INCREMENT REGISTER */ movl $0xfffffffe,r3 /* load r3 with -2 */ bispsw $(Z|V|C) /* set z,v,c flags */ bicpsw $N /* clear n flag */ incb r3 /* increment r3 */ jgeq error1 /* error if n flag not set */ jeql error1 /* error if z flag still set */ jvs error1 /* error if v flag still set */ jcs error1 /* error if c flag still set */ jmp 1f error1: movpsl _actual /* actual = psl MAYBE 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 /* is r3 = -1 */ jeql step2 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 step2: bbs $0,_force_lp,0b /* if set loop on last subtest */ ai2: callf $4,_setjmp /* save context for error return */ movab ai2,_stpc /* save address of subtest start */ movl $2,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $0xfffffffe,_opr /* first operand */ 0: bispsw $(N|V) /* set n,v flags */ bicpsw $(Z|C) /* clear z,c flag */ incb r3 /* increment r3 */ jlss error2 /* error if n flag still set */ jvs error2 /* error if v flag still set */ jneq error2 /* error if z flag not set */ jcc error2 /* error if c flag not set */ jmp 1f error2: movpsl _actual /* actual = 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 cmpl $0x0,r3 /* is r3 == 0x0 */ jeql ovfl 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 ovfl: # To be investigate : what hareware does if this happen !! an incb is executed # to an incorrect data bbs $0,_force_lp,0b /* if set loop on last subtest */ ai3: callf $4,_setjmp /* save context for error return */ movab ai3,_stpc /* save address of subtest start */ movl $3,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $0x7fffffff,_opr /* first operand */ 0: movl $0x7fffffff,r3 /* set r3 = 0x7fffffff */ bispsw $(Z|C|N) /* set n,z,c flags */ bicpsw $V /* clear v flags */ incb r3 /* increment r3 */ jvs error3 /* error if v flag not set */ jlss error3 /* error if n flag set */ jeql error3 /* error if z flag still set */ jcs error3 /* error if c flag still set */ jmp 1f error3: movpsl _actual /* actual = psl MAYBE is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl $MAXNEGL,r3 /* is r3 == 0x80000000 */ jeql incmb bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r3,_actual /* actual data */ movl $MAXNEGL,_expected /* expected data */ jmp *badrtn incmb: /* INCREMENT MEMORY */ bbs $0,_force_lp,0b /* if set loop on last subtest */ ai4: callf $4,_setjmp /* save context for error return */ movab ai4,_stpc /* save address of subtest start */ movl $4,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $0xfeffffff,_opr /* first operand */ 0: movl $0xfeffffff,tstloc /* load tstloc with -2 (byte) */ bispsw $(Z|V|C) /* set z,v,c flags */ bicpsw $N /* clear n flag */ incb tstloc /* increment tstloc */ jgeq error4 /* error if n flag not set */ jeql error4 /* error if z flag still set */ jvs error4 /* error if v flag still set */ jcs error4 /* error if c flag still set */ jmp 1f error4: movpsl _actual /* actual = psl MAYBE 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 /* is tstloc == -1 */ jeql stp2 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 stp2: bbs $0,_force_lp,0b /* if set loop on last subtest */ ai5: callf $4,_setjmp /* save context for error return */ movab ai5,_stpc /* save address of subtest start */ movl $5,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $0xffffffff,_opr /* first operand */ 0: bispsw $(N|V) /* set n,v flags */ bicpsw $(Z|C) /* clear z,c flag */ incb tstloc /* increment tstloc */ jlss error5 /* error if n flag still set */ jvs error5 /* error if v flag still set */ jneq error5 /* error if z flag not set */ jcc error5 /* error if c flag not set */ jmp 1f error5: movpsl _actual /* actual = 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 cmpl $0x00ffffff,tstloc /* is tstloc == 0x00ffffff */ jeql ovfl1 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl tstloc,_actual /* actual data */ movl $0x00ffffff,_expected /* expected data */ jmp *badrtn ovfl1: bbs $0,_force_lp,0b /* if set loop on last subtest */ ai6: callf $4,_setjmp /* save context for error return */ movab ai6,_stpc /* save address of subtest start */ movl $6,_subtst /* subtest number */ movl $1,_no_opr /* number of operands in use */ movl $0x7fffffff,_opr /* first operand */ 0: movl $0x7fffffff,tstloc /* tstloc = 0x7fffffff */ bispsw $(Z|C|N) /* set n,z,c flags */ bicpsw $V /* clear n,v flags */ incb tstloc /* increment tstloc */ jvc error6 /* error if v flag not set */ jlss error6 /* error if n flag set */ jeql error6 /* error if z flag still set */ jcs error6 /* error if c flag still set */ jmp 1f error6: movpsl _actual /* actual = psl MAYBE is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl $0x80ffffff,tstloc /* is tstloc == 0x80ffffff */ jeql aldn bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl tstloc,_actual /* actual data */ movl $0x80ffffff,_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.