|
|
Power 6/32 Unix version 1.2b
/* ORL2 (or long 2 operand) test */ /*Test name = orl2 */ /*Description = */ /* This test checks 'orl2' instruction as follows: */ /* destination = r1, memory location (dest) */ /* destination mask result Z N C V(flags) */ /* ___________ ____ _____ _____________ */ /* 0xaaaaaaaa 0xaaaaaaaa 0xaaaaaaaa 0 0 1 0 */ /* 0xaaaaaaaa 0x55555555 0xffffffff 0 0 1 0 */ /* 0x00000000 0x00000000 0x00000000 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_l2 _or_l2: callf $4,_setjmp /* save context for error return */ movab _or_l2,_stpc /* save subtest starting address */ movl $1,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK1L,_opr /* first operand in use */ movl $VALUEL,_opr + 4 /* second operand in use */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUEL,r4 /*set r4 = 0xaaaaaaaa */ bispsw $(Z|V|C) /*overflow, Z & carry bits ON */ orl2 $MASK1L,r4 /*mask r4 with 0xaaaaaaaa data to reg */ jeql error1 /*error if Z = 1 */ jgeq error1 /*error if N = 0 */ jcc error1 /*error if C = 0 */ jvs error1 /*error if V = 1 */ jmp 1f error1: movpsl _actual /* actual = psl MAYBE incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl r4,$EXP1L /*if r4 <> expected, */ jeql o2 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r4,_actual /* actual data */ movl $EXP1L,_expected /* expected data */ jmp *badrtn /* Now try another mask(0x55555555) reg to reg */ /* */ o2: bbs $0,_force_lp,0b /* if set loop on last subtest */ ao2: callf $4,_setjmp /* save context for error return */ movab ao2,_stpc /* save subtest starting address */ movl $2,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK2L,_opr /* first operand in use */ movl $VALUEL,_opr + 4 /* second operand in use */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUEL,r4 /*set r4 = 0xaaaaaaaaaa */ movl $MASK2L,r3 /* set up r3 as mask reg */ bispsw $(Z|V) /*overflow & zero bits ON */ orl2 r3,r4 /*mask r4 with 0x55555555 reg to reg */ jeql error2 /*error if Z = 1 */ jgeq error2 /*error if N = 0 */ jcc error2 /*error if C = 0 */ jvs error2 /*error if V = 1 */ jmp 1f error2: movpsl _actual /* actual = psl MAYBE incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl r4,$EXP2L /*if r4 <> expected, */ jeql o3 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r4,_actual /* actual data */ movl $EXP2L,_expected /* expected data */ jmp *badrtn /* */ /* Now try another mask(0x00000000) & dest(0x00000000) */ /* */ o3: bbs $0,_force_lp,0b /* if set loop on last subtest */ ao3: callf $4,_setjmp /* save context for error return */ movab ao3,_stpc /* save subtest starting address */ movl $3,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK3L,_opr /* first operand in use */ movl $VALUE3L,_opr + 4 /* second operand in use */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUE3L,r4 /*set r4 = 0x00000000 */ bispsw $(N|V) /*overflow & negetive bits ON */ orl2 $MASK3L,r4 /*mask r4 with 0x00000000 */ jneq error3 /*error if Z = 0 */ jlss error3 /*error if N = 1 */ jcc error3 /*error if C = 0 */ jvs error3 /*error if V = 1 */ jmp 1f error3: movpsl _actual /* actual = psl MAYBE incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl r4,$EXP3L /*if r4 <> expected, */ jeql orl2m bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r4,_actual /* actual data */ movl $EXP3L,_expected /* expected data */ jmp *badrtn /* */ /* Now use memory location instead of register as destination */ /* */ orl2m: bbs $0,_force_lp,0b /* if set loop on last subtest */ ao4: callf $4,_setjmp /* save context for error return */ movab ao4,_stpc /* save subtest starting address */ movl $4,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK1L,_opr /* first operand in use */ movl $VALUEL,_opr + 4 /* second operand in use */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUEL,dest /*set dest = 0xaaaaaaaa */ bispsw $(Z|V|C) /*overflow, Z & carry bits ON */ orl2 $MASK1L,dest /*mask dest with 0xaaaaaaaa data to mem */ jeql error4 /*error if Z = 1 */ jgeq error4 /*error if N = 0 */ jcc error4 /*error if C = 0 */ jvs error4 /*error if V = 1 */ jmp 1f error4: movpsl _actual /* actual = psl MAYBE incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl dest,$EXP1L /*if dest <> expected, */ jeql o5 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl dest,_actual /* actual data */ movl $EXP1L,_expected /* expected data */ jmp *badrtn /* Now try another mask(0x55555555) reg to mem */ /* */ o5: bbs $0,_force_lp,0b /* if set loop on last subtest */ ao5: callf $4,_setjmp /* save context for error return */ movab ao5,_stpc /* save subtest starting address */ movl $5,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK2L,_opr /* first operand in use */ movl $VALUEL,_opr + 4 /* second operand in use */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUEL,dest /*set dest = 0xaaaaaaaa */ movl $MASK2L,r3 /* set r3 as mask reg */ bispsw $(Z|V) /*overflow & zero bits ON */ orl2 r3,dest /*mask dest with 0x55555555 reg to mem */ jeql error5 /*error if Z = 1 */ jgeq error5 /*error if N = 0 */ jcc error5 /*error if C = 0 */ jvs error5 /*error if V = 1 */ jmp 1f error5: movpsl _actual /* actual = psl MAYBE incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl dest,$EXP2L /*if dest <> expected, */ jeql o6 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl dest,_actual /* actual data */ movl $EXP2L,_expected /* expected data */ jmp *badrtn /* */ /* Now try another mask(0x00000000) & dest(0x00000000) */ /* */ o6: bbs $0,_force_lp,0b /* if set loop on last subtest */ ao6: callf $4,_setjmp /* save context for error return */ movab ao6,_stpc /* save subtest starting address */ movl $6,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK3L,_opr /* first operand in use */ movl $VALUE3L,_opr + 4 /* second operand in use */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUE3L,dest /*set dest = 0x00000000 */ bispsw $(N|V) /*overflow & negetive bits ON */ orl2 $MASK3L,dest /*mask dest with 0x00000000 */ 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 incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl dest,$EXP3L /*if dest <> expected, */ jeql aldn bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl dest,_actual /* actual data */ movl $EXP3L,_expected /* expected data */ jmp *badrtn aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */ jmp *return /* good, 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.