|
|
Power 6/32 Unix version 1.2b
/* BITB (bit byte) test */ /* */ /*Test name = bitb */ /*Description = */ /* This test checks 'bitb' 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 0 */ /* 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_b _bit_b: bitbx: callf $4,_setjmp /* save context for error return */ movab bitbx,_stpc /* save address of subtest */ movl $1,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASKB1,_opr /* first operand */ movl $SRCB1,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*clear overflow enable */ movl $SRCB1,r4 /*r4 = source */ movl $MASKB1,tloc /*tloc = mask */ bispsw $(N|V|C) /*neg,overflow, & carry ON */ bitb tloc+3,r4 /*tloc AND r4 mem to reg */ jneq error1 /*error if Z = 0 */ jlss error1 /*error if N =1 */ jvs error1 /*error if V = 1 */ jcc error1 /*error if C = 0 */ jmp 1f error1: movpsl _actual /* actual psl MAYBE is incorrect */ bbs $0,_scoplp,0b /* if set scoplp on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl $SRCB1,r4 /*check source & mask are unchanged */ jeql 1f /*error - source changed */ bbs $0,_scoplp,0b /* if set loop om error */ movl $3,_ercode /* error code operand was modified */ movl r4,_actual /* actual data */ movl $SRCB1,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z /*clear Z flag */ cmpl $MASKB1,tloc /* */ jeql 1f /*error - mask changed */ bbs $0,_scoplp,0b /* if set loop om error */ movl $3,_ercode /* error code operand was modified */ movl tloc,_actual /* actual data */ movl $MASKB1,_expected /* expected data */ jmp *badrtn /* Now use different patterns for source & mask */ 1: bbs $0,_force_lp,0b /* if set loop on last subtest */ st2: callf $4,_setjmp /* save context for error return */ movab st2,_stpc /* save address of subtest */ movl $2,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASKB2,_opr /* first operand */ movl $SRCB2,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*clear overflow enable */ movl $SRCB2,tloc /*r1 = source */ movl $MASKB2,r3 /*tloc = mask */ bispsw $(N|V|C) /*neg,overflow, & carry ON */ bitb r3,tloc+3 /*tloc AND r3 reg to mem */ jneq error2 /*error if Z = 0 */ jlss error2 /*error if N =1 */ jvs error2 /*error if V = 1 */ jcc error2 /*error if C = 0 */ jmp bitbm1 error2: movpsl _actual /* actual psl MAYBE is incorrect */ bbs $0,_scoplp,0b /* if set scoplp on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* Yet another patterns for source & mask */ bitbm1: bbs $0,_force_lp,0b /* if set loop on last subtest */ st3: callf $4,_setjmp /* save context for error return */ movab st3,_stpc /* save address of subtest */ movl $3,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASKB3,_opr /* first operand */ movl $SRCB3,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*clear overflow enable */ movl $SRCB3,tloc2 /*r1 = source */ movl $MASKB3,tloc /*tloc = mask */ bispsw $(Z|V) /*zero, & overflow ON */ bitb tloc+3,tloc2+3 /*tloc AND tloc2 mem to mem */ beql error3 /*error if Z = 1 */ jgeq error3 /*error if N =0 */ jvs error3 /*error if V = 1 */ jcc error3 /*error if C = 0 */ jmp t4 error3: movpsl _actual /* actual psl MAYBE is incorrect */ bbs $0,_scoplp,0b /* if set scoplp on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* Yet another patterns for source & mask */ t4: bbs $0,_force_lp,0b /* if set loop on last subtest */ st4: callf $4,_setjmp /* save context for error return */ movab st4,_stpc /* save address of subtest */ movl $4,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASKB3,_opr /* first operand */ movl $SRCB3,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*clear overflow enable */ movl $SRCB3,tloc2 /*tloc2 = source */ movl $MASKB3,tloc /*tloc = mask */ bispsw $(Z|V) /*zero, & overflow ON */ bitb tloc+3,$SRCB3 /*tloc AND tloc2 mem to data */ beql error4 /*error if Z = 1 */ jlss error4 /*error if N =1 */ jvs error4 /*error if V = 1 */ jcc error4 /*error if C = 0 */ jmp bitbm error4: movpsl _actual /* actual psl MAYBE is incorrect */ bbs $0,_scoplp,0b /* if set scoplp on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* */ /* Repeat the above with source = M, & mask = R */ /* */ bitbm: bbs $0,_force_lp,0b /* if set loop on last subtest */ st5: callf $4,_setjmp /* save context for error return */ movab st5,_stpc /* save address of subtest */ movl $5,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASKB1,_opr /* first operand */ movl $SRCB1,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*clear overflow enable */ movl $SRCB1,r4 /*tloc = source */ movl $MASKB1,r3 /*r3 = mask */ bispsw $(N|V|C) /*neg,overflow, & carry ON */ bitb r3,r4 /*r3 AND r4 reg to reg */ 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 1f error5: movpsl _actual /* actual psl MAYBE is incorrect */ bbs $0,_scoplp,0b /* if set scoplp on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl $SRCB1,r4 /*check source & mask are unchanged */ jeql 1f /*error - source changed */ bbs $0,_scoplp,0b /* if set loop om error */ movl $3,_ercode /* error code operand was modified */ movl r4,_actual /* actual data */ movl $SRCB1,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z /*clear Z flag */ cmpl $MASKB1,r3 jeql t6 /*error - source changed */ bbs $0,_scoplp,0b /* if set loop om error */ movl $3,_ercode /* error code operand was modified */ movl r3,_actual /* actual data */ movl $MASKB1,_expected /* expected data */ jmp *badrtn /* Now use different patterns for source & mask */ t6: bbs $0,_force_lp,0b /* if set loop on last subtest */ st6: callf $4,_setjmp /* save context for error return */ movab st6,_stpc /* save address of subtest */ movl $6,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASKB2,_opr /* first operand */ movl $SRCB2,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*clear overflow enable */ movl $SRCB2,tloc /*tloc = source */ bispsw $(N|V|C) /*neg,overflow, & carry ON */ bitb $MASKB2,tloc+3 /* $MASKB2 AND tloc data to mem */ jneq error6 /*error if Z = 0 */ jlss 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 is incorrect */ bbs $0,_scoplp,0b /* if set scoplp 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 error return */ movab st7,_stpc /* save address of subtest */ movl $7,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASKB3,_opr /* first operand */ movl $SRCB3,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*clear overflow enable */ movl $SRCB3,r4 /*tloc = source */ bispsw $(Z|V) /*zero, & overflow ON */ bitb $MASKB3,r4 /*r4 AND tloc data to reg */ 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 t8 error7: movpsl _actual /* actual psl MAYBE is incorrect */ bbs $0,_scoplp,0b /* if set scoplp on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* Yet another patterns for source & mask */ t8: bbs $0,_force_lp,0b /* if set loop on last subtest */ st8: callf $4,_setjmp /* save context for error return */ movab st8,_stpc /* save address of subtest */ movl $8,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASKB3,_opr /* first operand */ movl $SRCB3,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*clear overflow enable */ movl $MASKB3,r3 bispsw $(Z|V) /*zero, & overflow ON */ bitb r3,$SRCB3 /*r3 AND tloc reg to data */ jeql error8 /*error if Z = 1 */ jlss error8 /*error if N =1 */ jvs error8 /*error if V = 1 */ jcc error8 /*error if C = 0 */ jmp aldn error8: movpsl _actual /* actual psl MAYBE is incorrect */ bbs $0,_scoplp,0b /* if set scoplp 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 /* test location two */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.