|
|
Power 6/32 Unix version 1.2b
/* BITW (bit word) test */ /* */ /*Test name = bitw */ /*Description = */ /* This test checks 'bitw' instruction as follows: */ /* source mask N Z V C (flags) */ /* ______ ____ ______________ */ /* 0xaa 0x55 0 1 0 1 */ /* 0x55 0xaa 0 1 0 1 */ /* 0x80 0x80 0 0 0 1 */ /* R M --- */ /* M R --- */ /* */ /* */ /* Constants definition for 'bit_x' tests */ /* */ .set SRCB1,0xaa .set SRCW1,0xaaaa .set SRCL1,0xaaaaaaaa .set MASKB1,0x55 .set MASKW1,0x5555 .set MASKL1,0x55555555 .set SRCB2,MASKB1 .set SRCW2,MASKW1 .set SRCL2,MASKL1 .set MASKB2,SRCB1 .set MASKW2,SRCW1 .set MASKL2,SRCL1 .set SRCB3,0x80 .set SRCW3,0x8000 .set SRCL3,0x80000000 .set MASKB3,SRCB3 .set MASKW3,SRCW3 .set MASKL3,SRCL3 /* */ /* Syst.s - Constants */ /* */ .set IPL,8 .set HIGH,31 .set ZERO,0 .set ONES,0xffffffff .set N,8 .set Z,4 .set V,2 .set C,1 .set T,16 .set IV,32 .set FU,64 .set DV,128 .set PSWMASK,0x003f .globl _bit_w _bit_w: callf $4,_setjmp /* save context for return from error */ movab _bit_w,_stpc /* save address of subtest */ movl $1,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASKW1,_opr /* first operand */ movl $SRCW1,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*clear overflow enable */ movl $SRCW1,r4 /*r4 = source */ movl $MASKW1,tloc /*tloc = mask */ bispsw $(N|V|C) /*neg,overflow, & carry ON */ bitw tloc+2,r4 /*tloc AND r4 mem to reg */ bneq error1 /*error if Z = 0 */ blss error1 /*error if N =1 */ bvs error1 /*error if V = 1 */ bcc error1 /*error if C = 0 */ jmp 1f error1: movpsl _actual /* actual psl MAYBE it is incorrect */ bbs $0,_scoplp,0b /* if set loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl $SRCW1,r4 /*check source & mask are unchanged */ beql 1f /*error - source changed */ bbs $0,_scoplp,0b /* if set loop on error */ movl $3,_ercode /* error code operand was modified */ movl r4,_actual /* actual data */ movl $SRCW1,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z /*clear Z flag */ cmpl $MASKW1,tloc /* */ beql t2 /* if correct then continue */ bbs $0,_scoplp,0b /* if set loop on error */ movl $3,_ercode /* error code operand was modified */ movl tloc,_actual /* actual data */ movl $MASKW1,_expected /* expected data */ jmp *badrtn /* Now use different patterns for source & mask */ t2: bbs $0,_force_lp,0b /* if set loop on last subtest */ st2: callf $4,_setjmp /* save context for return from error */ movab st2,_stpc /* save address of subtest */ movl $2,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASKW2,_opr /* first operand */ movl $SRCW2,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*clear overflow enable */ movl $SRCW2,tloc /*r1 = source */ movl $MASKW2,r3 /*tloc = mask data to memory */ bispsw $(N|V|C) /*neg,overflow, & carry ON */ bitw r3,tloc+2 /*r3 AND tloc reg to memory */ bneq error2 /*error if Z = 0 */ blss error2 /*error if N =1 */ bvs error2 /*error if V = 1 */ bcc error2 /*error if C = 0 */ jmp t3 error2: movpsl _actual /* actual psl MAYBE it is incorrect */ bbs $0,_scoplp,0b /* if set loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* Yet another patterns for source & mask */ t3: bbs $0,_force_lp,0b /* if set loop on last subtest */ st3: callf $4,_setjmp /* save context for return from error */ movab st3,_stpc /* save address of subtest */ movl $3,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASKW3,_opr /* first operand */ movl $SRCW3,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*clear overflow enable */ movl $SRCW3,r4 /*r4 = source */ movl $MASKW3,r3 /*r3 = mask */ bispsw $(Z|V) /*zero, & overflow ON */ bitw r3,r4 /* r3 AND r4 register to register */ beql error3 /*error if Z = 1 */ blss error3 /*error if N =1 */ bvs error3 /*error if V = 1 */ bcc error3 /*error if C = 0 */ jmp bitwm jmp t3 error3: movpsl _actual /* actual psl MAYBE it is incorrect */ bbs $0,_scoplp,0b /* if set loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* */ /* Repeat the above with source = M, & mask = R */ /* */ bitwm: bbs $0,_force_lp,0b /* if set loop on last subtest */ st4: callf $4,_setjmp /* save context for return from error */ movab st4,_stpc /* save address of subtest */ movl $4,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASKW1,_opr /* first operand */ movl $SRCW1,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*clear overflow enable */ movl $MASKW1,r3 /*r3 = mask */ bispsw $(N|V|C) /*neg,overflow, & carry ON */ bitw r3,$SRCW1 /*r3 AND $SRCW1 reg to data */ bneq error4 /*error if Z = 0 */ blss error4 /*error if N =1 */ bvs error4 /*error if V = 1 */ bcc error4 /*error if C = 0 */ jmp 1f error4: movpsl _actual /* actual psl MAYBE it is incorrect */ bbs $0,_scoplp,0b /* if set loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: bicpsw $Z /*clear Z flag */ cmpl $MASKW1,r3 beql t5 /*error - mask changed */ bbs $0,_scoplp,0b /* if set loop on error */ movl $3,_ercode /* error code operand was modified */ movl r3,_actual /* actual data */ movl $MASKW1,_expected /* expected data */ jmp *badrtn /* Now use different patterns for source & mask */ t5: bbs $0,_force_lp,0b /* if set loop on last subtest */ st5: callf $4,_setjmp /* save context for return from error */ movab st5,_stpc /* save address of subtest */ movl $5,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASKW2,_opr /* first operand */ movl $SRCW2,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*clear overflow enable */ movl $SRCW2,tloc /*tloc = source */ movl $MASKW2,r4 /*r4 = mask */ bispsw $(N|V|C) /*neg,overflow, & carry ON */ bitw $SRCW2,r4 /* data AND tloc data to register */ jneq error5 /*error if Z = 0 */ jlss error5 /*error if N =1 */ jvs error5 /*error if V = 1 */ jcc error5 /*error if C = 0 */ jmp t6 error5: movpsl _actual /* actual psl MAYBE it is incorrect */ bbs $0,_scoplp,0b /* if set loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* Yet another patterns for source & mask */ t6: bbs $0,_force_lp,0b /* if set loop on last subtest */ st6: callf $4,_setjmp /* save context for return from error */ movab st6,_stpc /* save address of subtest */ movl $6,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASKW3,_opr /* first operand */ movl $SRCW3,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*clear overflow enable */ movl $SRCW3,tloc /*tloc = source */ movl $MASKW3,tloc2 /*r1 = mask */ bispsw $(Z|V) /*zero, & overflow ON */ bitw tloc2+2,tloc+2 /*tloc2 AND tloc memory to memory */ jeql error6 /*error if Z = 1 */ jgeq error6 /*error if N =1 */ jvs error6 /*error if V = 1 */ jcc error6 /*error if C = 0 */ jmp t7 error6: movpsl _actual /* actual psl MAYBE it is incorrect */ bbs $0,_scoplp,0b /* if set loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* Yet another patterns for source & mask */ t7: bbs $0,_force_lp,0b /* if set loop on last subtest */ st7: callf $4,_setjmp /* save context for return from error */ movab st7,_stpc /* save address of subtest */ movl $7,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASKW3,_opr /* first operand */ movl $SRCW3,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*clear overflow enable */ movl $SRCW3,tloc /*tloc = source */ bispsw $(Z|V) /*zero, & overflow ON */ bitw tloc+2,$MASKW3 /*tloc2 AND tloc memory to data */ jeql error7 /*error if Z = 1 */ jlss error7 /*error if N =1 */ jvs error7 /*error if V = 1 */ jcc error7 /*error if C = 0 */ jmp aldn error7: movpsl _actual /* actual psl MAYBE it is incorrect */ bbs $0,_scoplp,0b /* if set loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */ jmp *return /* good, return to monitor */ /* */ /* Variables */ /* */ .align 2 tloc: .space 4 /*test location */ .align 2 tloc2: .space 4
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.