|
|
Power 6/32 Unix version 1.2b
/* BISPSW 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 _bispsw _bispsw: bicpsw $(IV|T) /* disable exceptions */ /* */ spsw: callf $4,_setjmp /* save context for error return */ movab spsw,_stpc /* save address of subtest */ movl $1,_subtst /* subtest number */ movl $0,_no_opr /* no operands we manipulate psw */ movl $0,_actual /* no actual data */ movl $0,_expected /* no expected data */ 0: movl $0xf,r3 /* R3 : mask clear all flags N Z V C */ bicpsw r3 /* clear all flags */ bispsw $(N|Z|V|C) /* set all flags */ movpsl r4 andl2 $0xf,r4 cmpl $0xf,r4 jeql nxt /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r4,_actual /* actual data */ movl $0xf,_expected /* expected data */ jmp *badrtn nxt: bbs $0,_force_lp,0b /* if set loop on error */ st2: callf $4,_setjmp /* save context for error return */ movab st2,_stpc /* save address of subtest */ movl $2,_subtst /* subtest number */ 0: movl $0xf,r3 /* R3 : mask clear all flags N Z V C */ bicpsw r3 /* clear all flags */ bispsw $N /* set n flag */ jlss nxt1 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r4,_actual /* actual data */ movl $0xf,_expected /* expected data */ jmp *badrtn nxt1: jeql error1 /* error if z also set */ jvs error1 /* error if v also set */ jcs error1 /* error if c also set */ jmp t3 error1: movpsl _actual /* actual psl may be bad */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn t3: bbs $0,_force_lp,0b /* if set loop on error */ st3: callf $4,_setjmp /* save context for error return */ movab st3,_stpc /* save address of subtest */ movl $3,_subtst /* subtest number */ 0: bicpsw $(N|Z|V|C) /* clear all flags */ bispsw $Z /* set z flag */ jeql nxt2 jmp error2 nxt2: jlss error2 /* error if n also set */ jvs error2 /* error if v also set */ jcs error2 /* error if c also set */ jmp t4 error2: movpsl _actual /* actual psl may be bad */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn t4: bbs $0,_force_lp,0b /* if set loop on error */ st4: callf $4,_setjmp /* save context for error return */ movab st4,_stpc /* save address of subtest */ movl $4,_subtst /* subtest number */ 0: movl vflg,r3 /* r3 = mask */ bicpsw $(N|Z|V|C) /* clear all flags */ bispsw r3 /* set v flag */ jvs nxt3 jmp error3 nxt3: jlss error3 /* error if n also set */ jeql error3 /* error if z also set */ jcs error3 /* error if c also set */ jmp t5 error3: movpsl _actual /* actual psl may be bad */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn t5: bbs $0,_force_lp,0b /* if set loop on error */ st5: callf $4,_setjmp /* save context for error return */ movab st5,_stpc /* save address of subtest */ movl $5,_subtst /* subtest number */ 0: bicpsw $(N|Z|V|C) /* clear all flags */ bispsw cflg /* set c flag */ jcs nxt4 jmp error4 nxt4: jlss error4 /* error if n also set */ jeql error4 /* error if z also set */ jvs error4 /* error if v also set */ jmp comb error4: movpsl _actual /* actual psl may be bad */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn comb: bbs $0,_force_lp,0b /* if set loop on error */ st6: callf $4,_setjmp /* save context for error return */ movab st6,_stpc /* save address of subtest */ movl $6,_subtst /* subtest number */ 0: bicpsw $(N|V|C|V) bispsw $(V|C) jvc error5 jcc error5 jlss error5 jeql error5 jmp t7 error5: movpsl _actual /* actual psl may be bad */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn t7: bbs $0,_force_lp,0b /* if set loop on error */ st7: callf $4,_setjmp /* save context for error return */ movab st7,_stpc /* save address of subtest */ movl $7,_subtst /* subtest number */ 0: bicpsw $(N|V|C|V) bispsw $(Z|C) jvs error6 jcc error6 jlss error6 jneq error6 jmp t8 error6: movpsl _actual /* actual psl may be bad */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn t8: bbs $0,_force_lp,0b /* if set loop on error */ st8: callf $4,_setjmp /* save context for error return */ movab st8,_stpc /* save address of subtest */ movl $8,_subtst /* subtest number */ 0: bicpsw $(N|V|C|V) bispsw $(N|C) jvs error7 jcc error7 jeql error7 jlss 1f error7: movpsl _actual /* actual psl may be bad */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: bbs $0,_force_lp,0b /* if set loop on error */ jmp *return /* test data */ .align 2 vflg: .long V zflg: .long Z t0: .long 0xffffffff cflg: .word C t1: .word 0xffff
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.