|
|
Power 6/32 Unix version 1.2b
/* ANDW2 (and word 2 operand) test */ /*Test name = andw2 */ /*Description = */ /* This test checks 'andw2' instruction as follows: */ /* destination = r1, memory location (dest) */ /* destination mask result Z N C V(flags) */ /* ___________ ____ _____ _____________ */ /* 0xaaaa 0xaaaa 0xaaaa 0 0 1 0 */ /* 0xaaaa 0x5555 0x0000 1 0 1 0 */ /* */ /* */ /* Constants */ /* */ .set VALUEB,0x000000aa .set VALUEW,0X0000aaaa .set VALUEL,0xaaaaaaaa .set MASK1B,0xaa .set MASK1W,0xaaaa .set MASK1L,0xaaaaaaaa .set MASK2B,0x55 .set MASK2W,0x5555 .set MASK2L,0x55555555 .set EXP1B,0x000000aa .set EXP1W,0x0000aaaa .set EXP1L,0xaaaaaaaa .set EXP2B,0x00000000 .set EXP2W,0x00000000 .set EXP2L,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 _andw2 _andw2: callf $4,_setjmp /* save context for return from error */ movab _andw2,_stpc /* subtest address */ movl $1,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK1W,_opr /* first operand */ movl $VALUEW,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUEW,r4 /*set r4 = 0xaaaa */ bispsw $(Z|V|C) /*overflow, Z & carry bits ON */ andw2 $MASK1W,r4 /*mask r4 with 0xaaaa data to reg */ beql error1 /*error if Z = 1 */ blss error1 /*error if N = 1 */ bcc error1 /*error if C = 0 */ bvs error1 /*error if V = 1 */ movl $EXP1W,r3 cmpl r4,$EXP1W /*if r4 <> expected(0xaaaa), */ beql a2 /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl r4,_actual /* actual data */ movl $EXP1W,_expected /* expected data */ jmp *badrtn error1: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag miscompare */ jmp *badrtn /* Now try another mask(0x5555) memory to register */ /* */ a2: bbs $0,_force_lp,0b /* if set loop on last subtest */ aa2: callf $4,_setjmp /* save context for return from error */ movab aa2,_stpc /* subtest address */ movl $2,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK2W,_opr /* first operand */ movl $VALUEW,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUEW,r4 /*set r4 = 0xaaaa */ movl $MASK2W,dest /* load mask into location dest */ bispsw $(N|V) /*overflow & negetive bits ON */ andw2 dest+2,r4 /*mask r4 with 0x5555 memory to reg */ bneq error2 /*error if Z = 0 */ blss error2 /*error if N = 1 */ bcc error2 /*error if C = 1 */ bvs error2 /*error if V = 1 */ cmpl r4,$EXP2W /*if r4 <> expected(0x0000), */ beql andw2m /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl r4,_actual /* actual data */ movl $EXP2W,_expected /* expected data */ jmp *badrtn error2: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag miscompare */ jmp *badrtn /* */ /* Now use memory location instead of register as destination */ /* data to memory operation */ andw2m: bbs $0,_force_lp,0b /* if set loop on last subtest */ aa3: callf $4,_setjmp /* save context for return from error */ movab aa3,_stpc /* subtest address */ movl $3,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK1W,_opr /* first operand */ movl $VALUEW,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUEW,dest /*set dest = 0xaaaa */ bispsw $(Z|V|C) /*overflow, Z & carry bits ON */ andw2 $MASK1W,dest+2 /*mask dest with 0xaaaa data to mem */ jeql error3 /*error if Z = 1 */ jlss error3 /*error if N = 1 */ jcc error3 /*error if C = 0 */ jvs error3 /*error if V = 1 */ cmpl dest,$EXP1W /*if dest <> expected(0xaaaa), */ beql a4 /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl dest,_actual /* actual data */ movl $EXP1W,_expected /* expected data */ jmp *badrtn error3: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag miscompare */ jmp *badrtn /* Now try another mask(0x5555) memory to memory */ /* */ a4: bbs $0,_force_lp,0b /* if set loop on last subtest */ aa4: callf $4,_setjmp /* save context for return from error */ movab aa4,_stpc /* subtest address */ movl $4,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK2W,_opr /* first operand */ movl $VALUEW,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUEW,dest /*set dest = 0xaaaa */ movl $MASK2W,dest2 /* set dest2 = 0x5555 */ bispsw $(N|V) /*overflow & negetive bits ON */ andw2 dest2+2,dest+2 /*mask dest with 0x5555 mem to mem */ jneq error4 /*error if Z = 0 */ jlss error4 /*error if N = 1 */ jcc error4 /*error if C = 1 */ jvs error4 /*error if V = 1 */ cmpl dest,$EXP2W /*if dest <> expected(0x0000), */ beql a5 /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl dest,_actual /* actual data */ movl $EXP2W,_expected /* expected data */ jmp *badrtn error4: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag miscompare */ jmp *badrtn /* Now try another mask(0x5555) register to memory */ /* */ a5: bbs $0,_force_lp,0b /* if set loop on last subtest */ aa5: callf $4,_setjmp /* save context for return from error */ movab aa5,_stpc /* subtest address */ movl $5,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK2W,_opr /* first operand */ movl $VALUEW,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUEW,dest /*set dest = 0xaaaa */ movl $MASK2W,r3 /* set r3 = 0x5555 */ bispsw $(N|V) /*overflow & negetive bits ON */ andw2 r3,dest+2 /*mask dest with 0x5555 reg to mem */ jneq error5 /*error if Z = 0 */ jlss error5 /*error if N = 1 */ jcc error5 /*error if C = 1 */ jvs error5 /*error if V = 1 */ cmpl dest,$EXP2W /*if dest <> expected(0x0000), */ beql a6 /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl dest,_actual /* actual data */ movl $EXP2W,_expected /* expected data */ jmp *badrtn error5: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag miscompare */ jmp *badrtn /* */ /* Now try another mask(0x5555) register to register */ /* */ a6: bbs $0,_force_lp,0b /* if set loop on last subtest */ aa6: callf $4,_setjmp /* save context for return from error */ movab aa6,_stpc /* subtest address */ movl $6,_subtst /* subtest number */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUEW,r4 /*set r4 = 0xaaaa */ movl $MASK2W,r3 /* set r3 = 0x5555 */ bispsw $(N|V) /*overflow & negetive bits ON */ andw2 r3,r4 /*mask r4 with 0x5555 reg to r4 */ jneq error6 /*error if Z = 0 */ jlss error6 /*error if N = 1 */ jcc error6 /*error if C = 1 */ jvs error6 /*error if V = 1 */ cmpl r4,$EXP2W /*if r5 <> expected(0x0000), */ beql aldn /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl r4,_actual /* actual data */ movl $EXP2W,_expected /* expected data */ jmp *badrtn error6: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag miscompare */ jmp *badrtn aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */ jmp *return /* */ /* variables */ /* */ .align 2 dest: .space 4 .align 2 dest2: .space 4
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.