|
|
Power 6/32 Unix version 1.2b
/* ORB2 (or byte 2 operand) test */ /*Test name = orb2 */ /*Description = */ /* This test checks 'orb2' 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 0xff 0 1 1 0 */ /* 0x00 0x00 0x00 1 0 x 0 */ /* */ /* */ /* */ /* */ /* Constants */ /* */ .set VALUEB,0x555555aa .set VALUEW,0X5555aaaa .set VALUEL,0xaaaaaaaa .set VALUE3B,0X00000000 .set VALUE3W,VALUE3B .set VALUE3L,VALUE3B .set MASK1B,0xaa .set MASK1W,0xaaaa .set MASK1L,0xaaaaaaaa .set MASK2B,0x55 .set MASK2W,0x5555 .set MASK2L,0x55555555 .set MASK3B,0x00 .set MASK3W,0x0000 .set MASK3L,0x00000000 .set EXP1B,0x555555aa .set EXP1W,0x5555aaaa .set EXP1L,0xaaaaaaaa .set EXP2B,0x555555ff .set EXP2W,0x5555ffff .set EXP2L,0xffffffff .set EXP3B,0x00000000 .set EXP3W,EXP3B .set EXP3L,EXP3B /* */ /* */ /* */ /* 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 _or_b2 _or_b2: callf $4,_setjmp /* save context for error return */ movab _or_b2,_stpc /* save starting address 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,r4 /*set r4 = 0xaa */ bispsw $(Z|V|C) /*overflow, Z & carry bits ON */ orb2 $MASK1B,r4 /*mask r4 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 */ jmp 1f error1: movpsl _actual /* actual = psl MAYBE it is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl r4,$EXP1B /*if r4 <> expected, */ jeql o2 /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r4,_actual /* actual data */ movl $EXP1B,_expected /* expected data */ jmp *badrtn /* Now try another mask(0x55) register to register */ /* */ o2: bbs $0,_force_lp,0b /* if set loop on last error */ ao2: callf $4,_setjmp /* save context for error return */ movab ao2,_stpc /* save starting address 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 3 */ bispsw $(Z|V) /*overflow & zero bits ON */ orb2 r3,r4 /*mask r4 with 0x55 reg to reg */ beql error2 /*error if Z = 1 */ blss error2 /*error if N = 1 */ bcc error2 /*error if C = 0 */ bvs error2 /*error if V = 1 */ jmp 1f error2: movpsl _actual /* actual = psl MAYBE it is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl r4,$EXP2B /*if r4 <> expected, */ jeql o3 /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r4,_actual /* actual data */ movl $EXP2B,_expected /* expected data */ jmp *badrtn /* */ /* Now try another mask(0x00) & dest(0x00) reg to mem */ /* */ o3: bbs $0,_force_lp,0b /* if set loop on last error */ ao3: callf $4,_setjmp /* save context for error return */ movab ao3,_stpc /* save starting address of subtest */ movl $3,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK3B,_opr /* first operand */ movl $VALUE3B,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUE3B,r3 /*set r3 = 0x00 */ movl $MASK3B,dest bispsw $(N|V) /*overflow & negetive bits ON */ orb2 r3,dest /*mask r3 with 0x00 reg to mem */ bneq error3 /*error if Z = 0 */ blss error3 /*error if N = 1 */ bcc error3 /*error if C = 0 */ bvs error3 /*error if V = 1 */ jmp 1f error3: movpsl _actual /* actual = psl MAYBE it is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl dest,$EXP3B /*if dest <> expected, */ jeql orb2m /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl dest,_actual /* actual data */ movl $EXP3B,_expected /* expected data */ jmp *badrtn /* */ /* Now use memory location instead of register as destination */ /* */ orb2m: bbs $0,_force_lp,0b /* if set loop on last error */ ao4: callf $4,_setjmp /* save context for error return */ movab ao4,_stpc /* save starting address of subtest */ movl $4,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $-0x56,_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 */ orb2 $-0x56,dest+3 /*mask dest with 0xaa data to mem */ beql error4 /*error if Z = 1 */ bgeq error4 /*error if N = 0 */ bcc error4 /*error if C = 0 */ bvs error4 /*error if V = 1 */ jmp 1f error4: movpsl _actual /* actual = psl MAYBE it is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl dest,$EXP1B /*if dest <> expected, */ jeql o5 /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl dest,_actual /* actual data */ movl $EXP1B,_expected /* expected data */ jmp *badrtn /* Now try another mask(0x55) mem to reg */ /* */ o5: bbs $0,_force_lp,0b /* if set loop on last error */ ao5: callf $4,_setjmp /* save context for error return */ movab ao5,_stpc /* save starting address of subtest */ movl $5,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $VALUEB,_opr /* first operand */ movl $MASK2B,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUEB,dest /*set dest = 0xaa */ movl $MASK2B,r3 /* mask value in reg r3 */ bispsw $(Z|V) /*overflow & zero bits ON */ orb2 dest+3,r3 /*mask dest with 0x55 */ beql error5 /*error if Z = 1 */ bgeq error5 /*error if N = 0 */ bcc error5 /*error if C = 0 */ bvs error5 /*error if V = 1 */ jmp 1f error5: movpsl _actual /* actual = psl MAYBE it is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl $EXP2L,r3 /*if dest <> expected, */ jeql o6 /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r3,_actual /* actual data */ movl $EXP2L,_expected /* expected data */ jmp *badrtn /* */ /* Now try another mask(0x00) & dest(0x00) mem to mem */ /* */ o6: bbs $0,_force_lp,0b /* if set loop on last error */ ao6: callf $4,_setjmp /* save context for error return */ movab ao6,_stpc /* save starting address of subtest */ movl $6,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $VALUEB,_opr /* first operand */ movl $MASK2B,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUE3B,dest /*set dest = 0x00 */ movl $MASK3B,srce /* load mask into loc srce */ bispsw $(N|V) /*overflow & negetive bits ON */ orb2 srce,dest+3 /*mask dest with 0x00 mem to 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 */ jmp 1f error6: movpsl _actual /* actual = psl MAYBE it is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl dest,$EXP3B /*if dest <> expected, */ jeql aldn /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl dest,_actual /* actual data */ movl $EXP3B,_expected /* expected data */ jmp *badrtn aldn: bbs $0,_force_lp,0b /* if set loop on last error */ jmp *return /* good, return to monitor */ /* */ /* variables */ /* */ .align 2 dest: .space 4 .align 2 srce: .space 4
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.