|
|
Power 6/32 Unix version 1.2b
/* ORW2 (or word 2 operand) test */ /*Test name = orw2 */ /*Description = */ /* This test checks 'orw2' 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 0xffff 0 0 1 0 */ /* 0x0000 0x0000 0x0000 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_w2 _or_w2: callf $4,_setjmp /* save context for error return */ movab _or_w2,_stpc /* save starting address of subtest */ movl $1,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK1W,_actual /* actual data */ movl $VALUEW,_expected /* expected data */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUEW,r4 /*set r4 = 0xaaaa */ bispsw $(Z|V|C) /*overflow, Z & carry bits ON */ orw2 $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 */ jmp 1f error1: movpsl _actual /* actual = psl may be incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl r4,$EXP1W /*if r4 <> expected, */ jeql o2 /* no error then continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r4,_actual /* actual data */ movl $EXP1W,_expected /* expected data */ jmp *badrtn /* Now try another mask(0x5555) 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 starting address of subtest */ movl $2,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK2W,_actual /* actual data */ movl $VALUEW,_expected /* expected data */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUEW,r4 /*set r4 = 0xaaaa */ movl $MASK2W,r3 /* mask value in reg r3 */ bispsw $(Z|V) /*overflow & zero bits ON */ orw2 r3,r4 /*mask r4 with 0x5555 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 may be incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl r4,$EXP2W /*if r4 <> expected, */ jeql o3 /* no error then continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r4,_actual /* actual data */ movl $EXP2W,_expected /* expected data */ jmp *badrtn /* */ /* Now try another mask(0x0000) & dest(0x0000) mem to reg */ /* */ 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 starting address of subtest */ movl $3,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK3W,_actual /* actual data */ movl $VALUE3W,_expected /* expected data */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUE3W,r4 /*set r4 = 0x0000 */ movl $MASK3W,dest /* load mem loc with mask */ bispsw $(N|V) /*overflow & negetive bits ON */ orw2 dest,r4 /*mask r4 with 0x0000 mem to reg */ 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 may be incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl r4,$EXP3W /*if r4 <> expected, */ jeql orw2m /* no error then continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r4,_actual /* actual data */ movl $EXP3W,_expected /* expected data */ jmp *badrtn /* */ /* Now use memory location instead of register as destination */ /* */ orw2m: bbs $0,_force_lp,0b /* if set loop on last subtest */ 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 $MASK1W,_actual /* actual data */ movl $VALUEW,_expected /* expected data */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUEW,dest /*set dest = 0xaaaa */ bispsw $(Z|V|C) /*overflow, Z & carry bits ON */ orw2 $MASK1W,dest+2 /*mask dest with 0xaaaa data to mem */ beql error4 /*error if Z = 1 */ bgeq error4 /*error if N = 1 */ bcc error4 /*error if C = 0 */ bvs error4 /*error if V = 1 */ jmp 1f error4: movpsl _actual /* actual = psl may be incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl dest,$EXP1W /*if dest <> expected, */ jeql o5 /* no error then continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl dest,_actual /* actual data */ movl $EXP1W,_expected /* expected data */ jmp *badrtn /* Now try another mask(0x5555) reg to memory */ /* */ 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 starting address of subtest */ movl $5,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK2W,_actual /* actual data */ movl $VALUEW,_expected /* expected data */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUEW,dest /*set dest = 0xaaaa */ movl $MASK2W,r3 /* reg 3 is mask reg */ bispsw $(Z|V) /*overflow & zero bits ON */ orw2 r3,dest+2 /*mask dest with 0x5555 reg to mem */ beql error5 /*error if Z = 1 */ bgeq error5 /*error if N = 1 */ bcc error5 /*error if C = 0 */ bvs error5 /*error if V = 1 */ jmp 1f error5: movpsl _actual /* actual = psl may be incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl dest,$EXP2W /*if dest <> expected, */ jeql o6 /* no error then continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl dest,_actual /* actual data */ movl $EXP2W,_expected /* expected data */ jmp *badrtn /* */ /* Now try another mask(0x0000) & dest(0x0000) mem to mem */ /* */ 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 starting address of subtest */ movl $6,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $MASK3W,_actual /* actual data */ movl $VALUE3W,_expected /* expected data */ 0: bicpsw $PSWMASK /*turn overflow enable bit off */ movl $VALUE3W,dest /*set dest = 0x0000 */ movl $MASK3W,srce /* load location called source */ bispsw $(N|V) /*overflow & negetive bits ON */ orw2 srce,dest+2 /*mask dest with 0x0000 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 may be incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn 1: cmpl dest,$EXP3W /*if dest <> expected, */ jeql aldn /* no error then continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl dest,_actual /* actual data */ movl $EXP2W,_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 .align 2 srce: .space 4
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.