|
|
Power 6/32 Unix version 1.2b
/* ANDB3 (and byte 3 operand) test */ /*Test name = andb3 */ /*Description = */ /* This test checks 'andb3' instruction as follows: */ /* source mask destination Z N C V(flags) */ /* ___________ ____ ___________ _____________ */ /* 0xaa 0xaa 0x7fffffaa 0 0 1 0 */ /* 0xaa 0x55 0x7fffff00 1 0 1 0 */ /* R R R --- */ /* M M M --- */ /* R M M --- */ /* M R R --- */ /* */ /* */ /* */ /* Constants */ /* */ .set MASK1B3,0xaa .set MASK1W3,0xaaaa .set MASK1L3,0xaaaaaaaa .set MASK2B3,0x55 .set MASK2W3,0x5555 .set MASK2L3,0x55555555 .set SOURCE1B3,0xaa .set SOURCE1W3,0xaaaa .set SOURCE1L3,0xaaaaaaaa .set SOURCE2B3,0xaa .set SOURCE2W3,0xaaaa .set SOURCE2L3,0xaaaaaaaa .set INITIAL3,0x7fffffff .set EXP1B3,0x7fffffaa .set EXP1W3,0x7fffaaaa .set EXP1L3,0xaaaaaaaa .set EXP2B3,0x7fffff00 .set EXP2W3,0x7fff0000 .set EXP2L3,0x00000000 /* */ /* */ /* */ /* 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 _andb3 _andb3: callf $4,_setjmp /* save context for error return */ movab _andb3,_stpc /* save subtest program counter */ movl $1,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK1B3,_opr /* first operand */ movl $SOURCE1B3,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $MASK1B3,r3 /*mask */ movl $SOURCE1B3,r4 /*source */ movl $INITIAL3,r5 /*destination */ bispsw $(Z|V|C) /*overflow, Z & carry bits ON */ andb3 r3,r4,r5 /*try it reg reg reg */ jeql error1 /*error if Z = 1 */ jlss error1 /*error if N = 1 */ jcc error1 /*error if C = 0 */ jvs error1 /*error if V = 1 */ cmpl r5,$0xaa /*if dest <> expected value, */ jeql a2 /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set loop on error */ movl r5,_actual /* actual data */ movl $0xaa,_expected /* expected data */ jmp *badrtn error1: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* Now try another mask(0x55) */ /* */ a2: bbs $0,_force_lp,0b /* if set loop on last subtest */ aa2: callf $4,_setjmp /* save context for error return */ movab aa2,_stpc /* save subtest program counter */ movl $2,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK2B3,_opr /* first operand */ movl $SOURCE2B3,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $MASK2B3,mask /*mask */ movl $SOURCE2B3,r4 /*source */ movl $INITIAL3,dest /*destination */ bispsw $(N|V) /*overflow & negetive bits ON */ andb3 mask+3,r4,dest+3/* try again mem reg mem */ jneq error2 /*error if Z = 0 */ jlss error2 /*error if N = 1 */ jcc error2 /*error if C = 0 */ jvs error2 /*error if V = 1 */ cmpb dest+3,$0 /*if dest <> expected value, */ jeql andb3mmm movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set loop on error */ movl dest,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn error2: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* */ /* now try source = M, mask = M, destination = M */ andb3mmm: bbs $0,_force_lp,0b /* if set loop on last subtest */ aa3: callf $4,_setjmp /* save context for error return */ movab aa3,_stpc /* save subtest program counter */ movl $3,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK1B3,_opr /* first operand */ movl $SOURCE1B3,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $MASK1B3,mask /*mask */ movl $SOURCE1B3,source/*source */ movl $INITIAL3,dest /*destination */ bispsw $(Z|V|C) /*overflow, Z & carry bits ON */ andb3 mask+3,source+3,dest+3 /*try it mem mem mem */ jeql error3 /*error if Z = 1 */ jgeq error3 /*error if N = 1 */ jcc error3 /*error if C = 0 */ jvs error3 /*error if V = 1 */ cmpl dest,$EXP1B3 /*if dest <> expected value, */ jeql a4 movl $1,_ercode /* error code data miscompare */ 1: bbs $0,_scoplp,0b /* if set loop on error */ movl dest,_actual /* actual data */ movl $EXP1B3,_expected /* expected data */ jmp *badrtn error3: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* Now try another mask(0x55) */ /* */ a4: bbs $0,_force_lp,0b /* if set loop on last subtest */ aa4: callf $4,_setjmp /* save context for error return */ movab aa4,_stpc /* save subtest program counter */ movl $4,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK2B3,_opr /* first operand */ movl $SOURCE2B3,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $MASK2B3,mask /*mask */ movl $SOURCE2B3,source/*source */ movl $INITIAL3,dest /*destination */ bispsw $(N|V) /*overflow & negetive bits ON */ andb3 mask+3,$SOURCE1B3,dest+3/* try again mem data mem */ jneq error4 /*error if Z = 0 */ jlss error4 /*error if N = 1 */ jcc error4 /*error if C = 0 */ jvs error4 /*error if V = 1 */ cmpl dest,$EXP2B3 /*if dest <> expected value, */ jeql andb3mrm /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set loop on error */ movl dest,_actual /* actual data */ movl $EXP2B3,_expected /* expected data */ jmp *badrtn error4: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* */ /* Now use mask = R, source & destination = M */ andb3mrm: bbs $0,_force_lp,0b /* if set loop on last subtest */ aa5: callf $4,_setjmp /* save context for error return */ movab aa5,_stpc /* save subtest program counter */ movl $5,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK1B3,_opr /* first operand */ movl $SOURCE1B3,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $MASK1B3,r3 /*mask */ movl $SOURCE1B3,source/*source */ movl $INITIAL3,dest /*destination */ bispsw $(Z|V|C) /*overflow, Z & carry bits ON */ andb3 r3,source+3,dest+3/*try it reg mem mem */ jeql error5 /*error if Z = 1 */ jlss error5 /*error if N = 1 */ jcc error5 /*error if C = 0 */ jvs error5 /*error if V = 1 */ cmpl dest,$EXP1B3 /*if dest <> expected value, */ jeql a6 /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set loop on error */ movl dest,_actual /* actual data */ movl $EXP1B3,_expected /* expected data */ jmp *badrtn error5: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* */ /* Now try another mask(0x55) */ /* */ a6: bbs $0,_force_lp,0b /* if set loop on last subtest */ aa6: callf $4,_setjmp /* save context for error return */ movab aa6,_stpc /* save subtest program counter */ movl $6,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK2B3,_opr /* first operand */ movl $SOURCE2B3,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $INITIAL3,dest /*destination */ bispsw $(N|V) /*overflow & negetive bits ON */ andb3 $MASK2B3,$SOURCE2B3,dest+3/* try again data data mem */ jneq error6 /*error if Z = 0 */ jlss error6 /*error if N = 1 */ jcc error6 /*error if C = 0 */ jvs error6 /*error if V = 1 */ cmpl dest,$EXP2B3 /*if dest <> expected value, */ jneq error2 /*then error */ jeql andb3rmm /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set loop on error */ movl dest,_actual /* actual data */ movl $EXP2B3,_expected /* expected data */ jmp *badrtn error6: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* */ /* Now try mask = M, source = R, dest = M */ /* */ andb3rmm: bbs $0,_force_lp,0b /* if set loop on last subtest */ aa7: callf $4,_setjmp /* save context for error return */ movab aa7,_stpc /* save subtest program counter */ movl $7,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK1B3,_opr /* first operand */ movl $SOURCE1B3,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $MASK1B3,mask /*mask */ movl $SOURCE1B3,r4 /*source */ movl $INITIAL3,dest /*destination */ bispsw $(Z|V|C) /*overflow, Z & carry bits ON */ andb3 mask+3,r4,dest+3/*try it mem reg mem */ jeql error7 /*error if Z = 1 */ jlss error7 /*error if N = 1 */ jcc error7 /*error if C = 0 */ jvs error7 /*error if V = 1 */ movl $EXP1B3,r6 cmpl dest,$EXP1B3 /*if dest <> expected value, */ jeql a8 /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set loop on error */ movl dest,_actual /* actual data */ movl $EXP1B3,_expected /* expected data */ jmp *badrtn error7: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* Now try another mask(0x55) */ /* */ a8: bbs $0,_force_lp,0b /* if set loop on last subtest */ aa8: callf $4,_setjmp /* save context for error return */ movab aa8,_stpc /* save subtest program counter */ movl $8,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK2B3,_opr /* first operand */ movl $SOURCE2B3,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $MASK2B3,mask /*mask */ movl $SOURCE2B3,source/*source */ movl $INITIAL3,r5 /*destination */ bispsw $(N|V) /*overflow & negetive bits ON */ andb3 mask+3,source+3,r5/* try again mem mem reg */ jneq error8 /*error if Z = 0 */ jlss error8 /*error if N = 1 */ jcc error8 /*error if C = 0 */ jvs error8 /*error if V = 1 */ cmpl r5,$0 /*if dest <> expected value, */ jeql andb3mrr /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set loop on error */ movl r5,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn error8: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* */ /* Now try mask = R, source = M, dest = R */ /* */ andb3mrr: bbs $0,_force_lp,0b /* if set loop on last subtest */ aa9: callf $4,_setjmp /* save context for error return */ movab aa9,_stpc /* save subtest program counter */ movl $9,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK1B3,_opr /* first operand */ movl $SOURCE1B3,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $MASK1B3,r3 /*mask */ movl $SOURCE1B3,source/*source */ movl $INITIAL3,r5 /*destination */ bispsw $(Z|V|C) /*overflow, Z & carry bits ON */ andb3 r3,source+3,r5 /*try it reg mem reg */ jeql error9 /*error if Z = 1 */ jlss error9 /*error if N = 1 */ jcc error9 /*error if C = 0 */ jvs error9 /*error if V = 1 */ cmpb r5,$0xaa /*if dest <> expected value, */ jeql a10 /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set loop on error */ movl r5,_actual /* actual data */ movl $0xaa,_expected /* expected data */ jmp *badrtn error9: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* Now try another mask(0x55) */ /* */ a10: bbs $0,_force_lp,0b /* if set loop on last subtest */ aa10: callf $4,_setjmp /* save context for error return */ movab aa10,_stpc /* save subtest program counter */ movl $0xa,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK2B3,_opr /* first operand */ movl $SOURCE2B3,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $SOURCE2B3,r4 /*source */ movl $INITIAL3,dest /*destination */ bispsw $(N|V) /*overflow & negetive bits ON */ andb3 $MASK2B3,r4,dest+3 /* try again data reg mem */ jneq error10 /*error if Z = 0 */ jlss error10 /*error if N = 1 */ jcc error10 /*error if C = 0 */ jvs error10 /*error if V = 1 */ cmpb dest+3,$0 /*if dest <> expected value, */ jeql a11 /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set loop on error */ movl dest,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn error10: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* Now try another mask(0x55) */ /* */ a11: bbs $0,_force_lp,0b /* if set loop on last subtest */ aa11: callf $4,_setjmp /* save context for error return */ movab aa11,_stpc /* save subtest program counter */ movl $0xb,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK2B3,_opr /* first operand */ movl $SOURCE2B3,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $SOURCE2B3,r4 /*source */ movl $INITIAL3,r5 /*destination */ bispsw $(N|V) /*overflow & negetive bits ON */ andb3 $MASK2B3,r4,r5 /* try again data reg reg */ jneq error11 /*error if Z = 0 */ jlss error11 /*error if N = 1 */ jcc error11 /*error if C = 0 */ jvs error11 /*error if V = 1 */ cmpl r5,$0 /*if dest <> expected value, */ jeql a12 /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set loop on error */ movl r5,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn error11: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* Now try another mask(0x55) */ /* */ a12: bbs $0,_force_lp,0b /* if set loop on last subtest */ aa12: callf $4,_setjmp /* save context for error return */ movab aa12,_stpc /* save subtest program counter */ movl $0xc,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK2B3,_opr /* first operand */ movl $SOURCE2B3,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $MASK2B3,r3 /*mask */ movl $INITIAL3,r5 /*destination */ bispsw $(N|V) /*overflow & negetive bits ON */ andb3 r3,$SOURCE2B3,r5/* try again reg data reg */ jneq error12 /*error if Z = 0 */ jlss error12 /*error if N = 1 */ jcc error12 /*error if C = 0 */ jvs error12 /*error if V = 1 */ cmpl r5,$0 /*if dest <> expected value, */ jeql a13 /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set loop on error */ movl r5,_actual /* actual data */ movl $0,_expected /* expected data */ jmp *badrtn error12: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn a13: bbs $0,_force_lp,0b /* if set loop on last subtest */ aa13: callf $4,_setjmp /* save context for error return */ movab aa13,_stpc /* save subtest program counter */ movl $0xd,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK1B3,_opr /* first operand */ movl $SOURCE1B3,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $MASK1B3,r3 /*mask */ movl $SOURCE1B3,r4 /*source */ movl $INITIAL3,dest /*destination */ bispsw $(Z|V|C) /*overflow, Z & carry bits ON */ andb3 r3,r4,dest+3 /*try it reg reg mem */ jeql error13 /*error if Z = 1 */ jlss error13 /*error if N = 1 */ jcc error13 /*error if C = 0 */ jvs error13 /*error if V = 1 */ movl $0x7fffffaa,r6 cmpl dest,r6 /*if dest <> expected value, */ jneq error2 /*then error */ jeql aldn /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set loop on error */ movl dest,_actual /* actual data */ movl r6,_expected /* expected data */ jmp *badrtn error13: movpsl _actual /* actual = psl */ 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 /* */ /* Variables */ /* */ .align 2 mask: .space 4 source: .space 4 dest: .space 4 /* */ /* End of file */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.