|
|
Power 6/32 Unix version 1.2b
/* CASEL instruction 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 DISABLE,0 .set ENABLE,1 .set HIGH,31 /* highest interrupt priority */ .globl _casel _casel: callf $4,_setjmp /* save context for error return */ movab _casel,_stpc /* save subtest address for return */ movl $1,_subtst /* subtest number */ movl $3,_no_opr /* number of operands in use */ movl $0,_opr /* first operand */ movl $1,_opr + 4 /* second operand */ movl $7,_opr + 8 /* third operand */ 0: bicpsw $(IV|T) /* disable exceptions */ /* */ case: /* LIMIT > (SELECTOR-BASE) */ movl $0,r0 /* set selector = r0 = 0 */ movl $0,r1 /* set base = r1 = 0 */ movl $7,r2 /* set limit = 7; 8 cases .. */ bispsw $(N|C) /* set n,c flags */ bicpsw $(Z|V) /* clear z,v flags */ casel r0,r1,r2 .align 1 /* displacement list is word align */ cpc0: .word loc0-cpc0 .word loc1-cpc0 .word loc2-cpc0 .word loc3-cpc0 .word loc4-cpc0 .word loc5-cpc0 .word loc6-cpc0 .word loc7-cpc0 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r2,_actual /* actual data */ movl $7,_expected /* expected data */ jmp *badrtn /* bad return failed */ .space 1000 /* reserve 1000 bytes */ loc0: jgeq error1 /* error if n flag not set */ jcc error1 /* error if c flag not set */ jeql error1 /* error if z or v flag set */ jvs error1 jmp 1f error1: movpsl _actual /* actual data psl MAYBE is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* bad return failed */ 1: cmpl r0,$0 /* make sure selector,base,limit unchanged*/ jeql 1f bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl r0,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn /* bad return failed */ 1: bicpsw $Z cmpl r0,r1 jeql 1f bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl r1,_actual /* actual data */ movl r0,_expected /* expected data */ jmp *badrtn /* bad return failed */ bicpsw $Z cmpl r2,$0x7 jeql 1f bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl r2,_actual /* actual data */ movl $7,_expected /* expected data */ jmp *badrtn /* bad return failed */ 1: jmp step1 loc1: jmp loc7 /* take wrong displacement */ loc2: jmp loc7 /* take wrong displacement */ loc3: jmp loc7 /* take wrong displacement */ loc4: jmp loc7 /* take wrong displacement */ loc5: jmp loc7 /* take wrong displacement */ loc6: jmp loc7 /* take wrong displacement */ loc7: bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code wrong operand (displacement) */ jmp *badrtn step1: bbs $0,_force_lp,0b /* if set loop on last subtest */ c2: callf $4,_setjmp /* save context for error return */ movab c2,_stpc /* save subtest address for return */ movl $2,_subtst /* subtest number */ movl $3,_no_opr /* number of operands in use */ movl $5,_opr /* first operand */ movl $0,_opr + 4 /* second operand */ movl $7,_opr + 8 /* third operand */ 0: movl $5,r0 /* set selector = r0 = 5 */ movl $0,r1 /* set base = r1 = 0 */ movl $7,r2 /* set limit = 7; 8 cases .. */ bispsw $(N|C) /* set n,c flags */ bicpsw $(Z|V) /* clear z,v flags */ casel $5,$0,r2 .align 1 /* displacement list is word align */ pc0: .word l0-pc0 .word l1-pc0 .word l2-pc0 .word l3-pc0 .word l4-pc0 .word l5-pc0 .word l6-pc0 .word l7-pc0 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r2,_actual /* actual data */ movl $7,_expected /* expected data */ jmp *badrtn /* bad return failed */ .space 1000 /* reserve 1000 bytes */ l5: jgeq error2 /* error if n flag not set */ jcc error2 /* error if c flag not set */ jeql error2 /* error if z or v flag set */ jvs error2 jmp 1f error2: movpsl _actual /* actual data psl MAYBE is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* bad return failed */ 1: cmpl r0,$5 /* make sure selector,base,limit unchanged*/ jeql 1f bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl r0,_actual /* actual data */ movl $5,_expected /* expected data */ jmp *badrtn /* bad return failed */ 1: bicpsw $Z cmpl r2,$0x7 jeql 1f bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl r2,_actual /* actual data */ movl $7,_expected /* expected data */ jmp *badrtn /* bad return failed */ 1: jmp step2 l0: jmp l7 /* take wrong displacement */ l1: jmp l7 /* take wrong displacement */ l2: jmp l7 /* take wrong displacement */ l3: jmp l7 /* take wrong displacement */ l4: jmp l7 /* take wrong displacement */ l6: jmp l7 /* take wrong displacement */ l7: bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code wrong operand (displacement) */ jmp *badrtn /* LIMIT = (SELECTOR-BASE) */ step2: bbs $0,_force_lp,0b /* if set loop on last subtest */ c3: callf $4,_setjmp /* save context for error return */ movab c3,_stpc /* save subtest address for return */ movl $3,_subtst /* subtest number */ movl $3,_no_opr /* number of operands in use */ movl $7,_opr /* first operand */ movl $0,_opr + 4 /* second operand */ movl $7,_opr + 8 /* third operand */ 0: movl $0x7,sel /* set selector = 7 */ movl $0,base /* set base = 0 */ movl $0x7,limit /* set limit = 7 */ bispsw $Z /* set z flag */ bicpsw $(N|V|C) /* clear n,c,v flags */ casel sel,base,limit .align 1 /* displacement list is word align */ cpc1: .word lc0-cpc1 .word lc1-cpc1 .word lc2-cpc1 .word lc3-cpc1 .word lc4-cpc1 .word lc5-cpc1 .word lc6-cpc1 .word lc7-cpc1 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl limit,_actual /* actual data */ movl $7,_expected /* expected data */ jmp *badrtn /* bad return failed */ .space 1000 /* reserve 1000 bytes */ lc0: jmp lc6 lc1: jmp lc6 /* take wrong displacement */ lc2: jmp lc6 /* take wrong displacement */ lc3: jmp lc6 /* take wrong displacement */ lc4: jmp lc6 /* take wrong displacement */ lc5: jmp lc6 /* take wrong displacement */ lc6: bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code wrong operand (displacement) */ jmp *badrtn lc7: jneq error3 /* error if z flag not set */ jlss error3 /* error if n,v,c flags set */ jcs error3 jvs error3 jmp 1f error3: movpsl _actual /* actual data psl MAYBE is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* bad return failed */ 1: cmpl sel,$0x7 /* make sure selector,base,limit unchanged*/ jeql 1f bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl sel,_actual /* actual data */ movl $7,_expected /* expected data */ jmp *badrtn /* bad return failed */ 1: bicpsw $Z cmpl base,$0 jeql 1f bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl base,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn /* bad return failed */ 1: bicpsw $Z cmpl limit,$0x7 jeql step3 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl limit,_actual /* actual data */ movl $7,_expected /* expected data */ jmp *badrtn /* bad return failed */ /* LIMIT < (SELECTOR-BASE) */ step3: bbs $0,_force_lp,0b /* if set loop on last subtest */ c4: callf $4,_setjmp /* save context for error return */ movab c4,_stpc /* save subtest address for return */ movl $4,_subtst /* subtest number */ movl $3,_no_opr /* number of operands in use */ movl $19,_opr /* first operand */ movl $10,_opr + 4 /* second operand */ movl $7,_opr + 8 /* third operand */ 0: movl $19,sel /* set selector = 19 */ movl $10,base /* set base = 10 */ bicpsw $(N|Z|V|C) /* clear n,z,c,v flags */ casel sel,base,$7 .align 1 /* displacement list is word align */ cpc2: .word lx0-cpc2 .word lx1-cpc2 .word lx2-cpc2 .word lx3-cpc2 .word lx4-cpc2 .word lx5-cpc2 .word lx6-cpc2 .word lx7-cpc2 jmp default .space 1000 /* reserve 1000 bytes */ lx0: jmp lx7 lx1: jmp lx7 /* take wrong displacement */ lx2: jmp lx7 /* take wrong displacement */ lx3: jmp lx7 /* take wrong displacement */ lx4: jmp lx7 /* take wrong displacement */ lx5: jmp lx7 /* take wrong displacement */ lx6: jmp lx7 /* take wrong displacement */ lx7: bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code wrong operand (displacement) */ jmp *badrtn default: jlss error4 /* error if n,z,v,c flags set */ jeql error4 jcs error4 jvs error4 jmp 1f error4: movpsl _actual /* actual data psl MAYBE is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* bad return failed */ 1: cmpl sel,$19 /* make sure selector,base,limit unchanged*/ jeql 1f bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl sel,_actual /* actual data */ movl $19,_expected /* expected data */ jmp *badrtn /* bad return failed */ 1: bicpsw $Z cmpl base,$10 jeql done bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand miscompare */ movl base,_actual /* actual data */ movl $10,_expected /* expected data */ jmp *badrtn /* bad return failed */ done: bbs $0,_force_lp,0b /* if set loop on last subtest */ jmp *return /* TEST DATA */ .align 2 sel: .long 0 base: .long 0 limit: .long 0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.