|
|
Power 6/32 Unix version 1.2b
/* ANDL2 (and long 2 operand) test */ /*Test name = andl2 */ /*Description = */ /* This test checks 'andl2' instruction as follows: */ /* destination = r1, memory location (dest) */ /* destination mask result Z N C V(flags) */ /* ___________ ____ _____ _____________ */ /* 0xaaaaaaaa 0xaaaaaaaa 0xaaaaaaaa 0 1 1 0 */ /* 0xaaaaaaaa 0x55555555 0x00000000 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 _andl2 _andl2: callf $4,_setjmp /* save context for error return */ movab _andl2,_stpc /* save subtest address */ movl $1,_subtst /* subtst number */ movl $2,_no_opr /* number of operands in use */ movl $MASK1L,_opr /* first operand */ movl $VALUEL,_opr + 4 /* second operand */ 0: movl $VALUEL,r3 /*set r3 = 0xaaaaaaaa */ bispsw $(Z|V|C) /*overflow, Z & carry bits ON */ andl2 $MASK1L,r3 /*mask r3 with 0xaaaaaaaa data to reg */ beql error1 /*error if Z = 1 */ bgeq error1 /*error if N = 0 */ bcc error1 /*error if C = 0 */ bvs error1 /*error if V = 1 */ cmpl r3,$EXP1L /*if r1 <> expected(0xaaaaaaaa), */ beql a2 /* if correct then continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set loop on error */ movl r3,_actual /* actual data of inst execution */ movl $EXP1L,_expected /* expected data */ jmp *badrtn error1: movpsl _actual /* error code flag miscompare */ bbs $0,_scoplp,0b /* if set loop on error */ movl $2,_ercode /* error code flag miscompare */ jmp *badrtn /* Now try another mask(0x55555555) register to memory */ /* */ a2: bbs $0,_force_lp,0b /* if set loop on subtest*/ aa2: callf $4,_setjmp /* save context for error return */ movab aa2,_stpc /* save subtest address */ movl $2,_subtst /* subtst number */ movl $2,_no_opr /* number of operands in use */ movl $MASK2L,_opr /* first operand */ movl $VALUEL,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUEL,dest /*set dest = 0xaaaaaaaa */ movl $MASK2L,r3 /* mask in reg r3 */ bispsw $(N|V) /*overflow & negetive bits ON */ andl2 r3,dest /*mask r3 with 0x55555555 reg to mem */ bneq error2 /*error if Z = 0 */ blss error2 /*error if N = 1 */ bcc error2 /*error if C = 0 */ bvs error2 /*error if V = 1 */ cmpl dest,$EXP2L /*if dest <> expected(0x00000000), */ beql andl2m /* if correct then continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set loop on error */ movl dest,_actual /* actual data of inst execution */ movl $EXP2L,_expected /* expected data */ jmp *badrtn error2: movpsl _actual /* error code flag miscompare */ bbs $0,_scoplp,0b /* if set 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 */ andl2m: bbs $0,_force_lp,0b /* if set loop on subtest*/ aa3: callf $4,_setjmp /* save context for error return */ movab aa3,_stpc /* save subtest address */ movl $3,_subtst /* subtst number */ movl $2,_no_opr /* number of operands in use */ movl $MASK1L,_opr /* first operand */ movl $VALUEL,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUEL,dest /*set dest = 0xaaaaaaaa */ bispsw $(Z|V|C) /*overflow, Z & carry bits ON */ andl2 $MASK1L,dest /*mask dest with 0xaaaaaaaa */ beql error3 /*error if Z = 1 */ bgeq error3 /*error if N = 0 */ bcc error3 /*error if C = 0 */ bvs error3 /*error if V = 1 */ cmpl dest,$EXP1L /*if dest <> expected(0xaaaaaaaa), */ beql a4 /* if correct then continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set loop on error */ movl dest,_actual /* actual data of inst execution */ movl $EXP1L,_expected /* expected data */ jmp *badrtn error3: movpsl _actual /* error code flag miscompare */ bbs $0,_scoplp,0b /* if set loop on error */ movl $2,_ercode /* error code flag miscompare */ jmp *badrtn /* Now try another mask(0x55555555) register to register */ /* */ a4: bbs $0,_force_lp,0b /* if set loop on subtest*/ aa4: callf $4,_setjmp /* save context for error return */ movab aa4,_stpc /* save subtest address */ movl $4,_subtst /* subtst number */ movl $2,_no_opr /* number of operands in use */ movl $MASK2L,_opr /* first operand */ movl $VALUEL,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUEL,r4 /*set r4 = 0xaaaaaaaa */ movl $MASK2L,r3 /* set r3 = 0x55555555 */ bispsw $(N|V) /*overflow & negetive bits ON */ andl2 r3,r4 /*mask dest with 0x55555555 reg to reg */ bneq error4 /*error if Z = 0 */ blss error4 /*error if N = 1 */ bcc error4 /*error if C = 0 */ bvs error4 /*error if V = 1 */ movl $EXP2L,r3 cmpl r4,$EXP2L /*if dest <> expected(0x00000000), */ beql aldn /* if correct then continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set loop on error */ movl r4,_actual /* actual data of inst execution */ movl $EXP2L,_expected /* expected data */ jmp *badrtn error4: movpsl _actual /* error code flag miscompare */ bbs $0,_scoplp,0b /* if set loop on error */ movl $2,_ercode /* error code flag miscompare */ jmp *badrtn aldn: bbs $0,_force_lp,0b /* if set loop on subtest*/ jmp *return /* return to monitor */ /* */ /* variables */ /* */ .align 2 dest: .space 4
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.