|
|
Power 6/32 Unix version 1.2b
/* ANDB2 (and byte 2 operand) test */ /*Test name = andb2 */ /*Description = */ /* This test checks 'andb2' instruction as follows: */ /* destination = r1, memory location (dest) */ /* destination mask result Z N C V(flags) */ /* ___________ ____ _____ _____________ */ /* 0xaa 0xaa 0xaa 0 0 1 0 */ /* 0xaa 0x55 0x00 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 _andb2 _andb2: callf $4,_setjmp /* save context for error return */ movab _andb2,_stpc /* save program counter of subtest */ movl $1,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK1B,_opr /* first operand */ movl $VALUEB,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUEB,r3 /*set r3 = 0xaa */ bispsw $(Z|V|C) /*overflow, Z & carry bits ON */ andb2 $MASK1B,r3 /*mask r1 with 0xaa 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 */ cmpl r3,$EXP1B /*if r1 <> expected(0xaa), */ beql a2 /*correct then continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set loop on error */ movl r3,_actual /* actual data */ movl $EXP1B,_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 program counter of subtest */ movl $2,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK2B,_opr /* first operand */ movl $VALUEB,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUEB,r4 /*set r4 = 0xaa */ movl $MASK2B,r3 /* load mask into reg r3 */ bispsw $(N|V) /*overflow & negetive bits ON */ andb2 r3,r4 /*mask r4 */ 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 r4,$EXP2B /*if r4 <> expected(0x00), */ beql andb2m /*correct then continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set loop on error */ movl r4,_actual /* actual data */ movl $EXP2B,_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 use memory location instead of register as destination */ /* */ andb2m: bbs $0,_force_lp,0b /* if set loop on last subtest */ aa3: callf $4,_setjmp /* save context for error return */ movab aa3,_stpc /* save program counter of subtest */ movl $3,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK1B,_opr /* first operand */ movl $VALUEB,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUEB,dest /*set dest = 0xaa */ bispsw $(Z|V|C) /*overflow, Z & carry bits ON */ andb2 $MASK1B,dest+3 /*mask dest with 0xaa data to reg */ beql error3 /*error if Z = 1 */ blss error3 /*error if N = 1 */ bcc error3 /*error if C = 0 */ bvs error3 /*error if V = 1 */ movl $EXP1B,r2 cmpl dest,$EXP1B /*if dest <> expected(0xaa), */ beql a4 /*correct then continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set loop on error */ movl dest,_actual /* actual data */ movl $EXP1B,_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 program counter of subtest */ movl $4,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK2B,_opr /* first operand */ movl $VALUEB,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUEB,dest /*set dest = 0xaa */ movl $MASK2B,r3 /* load mask into reg r3 */ bispsw $(N|V) /*overflow & negetive bits ON */ andb2 r3,dest+3 /*mask dest with 0x55 reg to memory */ bneq error4 /*error if Z = 0 */ blss error4 /*error if N = 1 */ bcc error4 /*error if C = 0 */ bvs error4 /*error if V = 1 */ cmpl dest,$EXP2B /*if dest <> expected(0x00), */ beql a5 /*correct then continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set loop on error */ movl dest,_actual /* actual data */ movl $EXP2B,_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 a5: bbs $0,_force_lp,0b /* if set loop on last subtest */ aa5: callf $4,_setjmp /* save context for error return */ movab aa5,_stpc /* save program counter of subtest */ movl $5,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK2B,_opr /* first operand */ movl $VALUEB,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUEB,dest /*set dest = 0xaa */ movl $MASK2B,r3 /* load mask into reg r3 */ bispsw $(N|V) /*overflow & negetive bits ON */ andb2 dest+3,r3 /*mask dest with 0x55 memory to reg */ bneq error5 /*error if Z = 0 */ blss error5 /*error if N = 1 */ bcc error5 /*error if C = 0 */ bvs error5 /*error if V = 1 */ cmpl r3,$EXP2B /*if dest <> expected(0x00), */ beql a6 /*correct then continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set loop on error */ movl r3,_actual /* actual data */ movl $EXP2B,_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 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 program counter of subtest */ movl $6,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK2B,_opr /* first operand */ movl $VALUEB,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUEB,dest /*set dest = 0xaa */ movl $MASK2B,dest2 /* load mask into reg r1 */ bispsw $(N|V) /*overflow & negetive bits ON */ andb2 dest+3,dest2+3 /*mask dest with 0x55 memory to memory */ bneq error6 /*error if Z = 0 */ blss error6 /*error if N = 1 */ bcc error6 /*error if C = 0 */ bvs error6 /*error if V = 1 */ movl $EXP2B,r4 cmpl dest2,$EXP2B /*if dest <> expected(0x00), */ beql aldn /*correct then continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set loop on error */ movl dest2,_actual /* actual data */ movl $EXP2B,_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 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.