|
|
Power 6/32 Unix version 1.2b
/* ADDB2 (add byte 2) test */ /* */ /*Test name = addb2 */ /*Description = */ /* This test checks 'addb2' instruction as follows: */ /*add sum result N Z V C (flags) */ /*___ ___ ______ _______________ */ /*0x11107fff 0x11107fff 0x1110fffe 0 0 1 0 */ /*0x11108000 0x11108000 0x11100000 0 1 1 1 */ /*0x8000 0xffff 0x7fff 0 0 1 1 */ /*0x8001 0x7fff 0x0000 0 1 0 1 */ /*0x8000 0x7fff 0xffff 1 0 0 0 */ /*0xc000 0xc000 0x8000 1 0 0 1 */ /* */ /* */ /* */ /* */ /* constants definition for 'addx' tests. */ /* */ .set A1B1,0x1111107f/*+127, highest +ve number, byte */ .set A1W1,0x11107fff .set A1L1,0x7fffffff .set A2B1,0x1111107f/* +127 */ .set A2W1,0x11107fff .set A2L1,A1L1 .set RB1,0x111110fe .set RW1,0x1110fffe .set RL1,0xfffffffe .set A1B2,0x11111080/* -128 */ .set A1W2,0x11108000 .set A1L2,0x80000000 .set A2B2,0x11111080/* -128 */ .set A2W2,0x11118000 .set A2L2,0X80000000 .set RB2,0x11111000/* 0 */ .set RW2,0x11100000 .set RL2,0x00000000 .set A1B3,0X80 /* -128 */ .set A1W3,0x8000 .set A1L3,0x80000000 .set A2B3,0xff /* -1 */ .set A2W3,0xffff .set A2L3,0xffffffff .set RB3,0x0000007f .set RW3,0X00007fff .set RL3,0X7fffffff .set A1B4,0x81 /* -127 */ .set A1W4,0x8001 .set A1L4,0x80000001 .set A2B4,0x7f /* 127 */ .set A2W4,0x7fff .set A2L4,0x7fffffff .set RB4,0 /* 0 */ .set RW4,RB4 .set RL4,RB4 .set A1B5,A1B3 /* -128 */ .set A1W5,A1W3 .set A1L5,A1L3 .set A2B5,A2B4 /* 127 */ .set A2W5,A2W4 .set A2L5,A2L4 .set RB5,0xff /* -1 */ .set RW5,0xffff .set RL5,0xffffffff .set A1B6,0xc0 /* -64 */ .set A1W6,0xc000 .set A1L6,0xc0000000 .set A2B6,A1B6 /* -64 */ .set A2W6,A1W6 .set A2L6,A1L6 .set RB6,0x00000080 /* -128 */ .set RW6,0x00008000 .set RL6,0X80000000 .set BMSK,0xff /* mask value for byte compare operations */ .set INITB,0x11111055/* initialization values for 3 operand */ .set INITW,0x11105555 .set INITL,0X55555555 /* */ /* 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 _addb2 _addb2: ab1: callf $4,_setjmp /* save context for error return */ movab ab1,_stpc /* save pc of subtest */ movl $1,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $A1B1,_opr /* first operand */ movl $A2B1,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $A1B1,add /*first operand */ movl $A2B1,sum /*second operand */ bispsw $(N|Z|C) /* these flags ON */ addb2 add+3,sum+3 /* try 'add' instruction mem to mem */ jlss e1 /*error if N = 1 */ jeql e1 /*error if Z = 1 */ jvc e1 /*error if V = 0 */ jcs e1 /*error if C = 1 */ bicpsw $Z movl $RB1,r4 cmpl $RB1,sum /*sum = expected ? */ jgeq ab1r bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code flag failure */ movl sum,_actual /* actual data */ movl $RB1,_expected /* expected data */ jmp *badrtn e1: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* reverse operands data to memory operation */ ab1r: bbs $0,_force_lp,0b /* if set loop on last subtest */ aab1r: callf $4,_setjmp /* save context for error return */ movab aab1r,_stpc /* save pc of subtest */ movl $2,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $0x7f,_opr /* first operand */ movl $A1B1,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $A1B1,sum /*second operand */ bispsw $(N|Z|C) /* these flags ON */ addb2 $0x7f,sum+3 /* try 'add' instruction data to mem */ jlss e2 /*error if N = 1 */ jeql e2 /*error if Z = 1 */ jvc e2 /*error if V = 0 */ jcs e2 /*error if C = 1 */ bicpsw $Z movl $RB1,r4 cmpl $RB1,sum /*sum = expected ? */ jeql ab2 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code flag failure */ movl sum,_actual /* actual data */ movl $RB1,_expected /* expected data */ jmp *badrtn e2: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn ab2: bbs $0,_force_lp,0b /* if set loop on last subtest */ aab2: callf $4,_setjmp /* save context for error return */ movab aab2,_stpc /* save pc of subtest */ movl $3,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $A1B2,_opr /* first operand */ movl $A2B2,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $A1B2,tmp movb tmp+3,r5 /*first operand */ movl $A2B2,sum /*second operand */ bispsw $N /* these flags ON */ addb2 r5,sum+3 /* try 'add' instruction reg to mem */ jgeq e3 /*error if N = 0 */ jeql e3 /*error if Z = 1 */ jvc e3 /*error if V = 0 */ jcc e3 /*error if C = 0 */ bicpsw $Z movl $RB2,r4 cmpl $RB2,sum /*sum = expected ? */ jeql ab2r /*if not, error */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code flag failure */ movl sum,_actual /* actual data */ movl $RB2,_expected /* expected data */ jmp *badrtn e3: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* reverse operands memory to register operation */ ab2r: bbs $0,_force_lp,0b /* if set loop on last subtest */ aab2r: callf $4,_setjmp /* save context for error return */ movab aab2r,_stpc /* save pc of subtest */ movl $4,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $A2B2,_opr /* first operand */ movl $A1B2,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $A2B2,add /*first operand */ movl $A1B2,tmp movb tmp+3,r5 /*first operand */ bispsw $N /* these flags ON */ addb2 add+3,r5 /* try 'add' instruction */ jgeq e4 /*error if N = 0 */ jeql e4 /*error if Z = 1 */ jvc e4 /*error if V = 0 */ jcc e4 /*error if C = 0 */ bicpsw $Z movl $RB2,r4 andl2 $BMSK,r4 andl2 $BMSK,r5 /* mask off don't care bits */ cmpl r4,r5 /*sum = expected ? */ jeql ab3 /*if not, error */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code flag failure */ movl r5,_actual /* actual data */ movl r4,_expected /* expected data */ jmp *badrtn e4: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn ab3: bbs $0,_force_lp,0b /* if set loop on last subtest */ aab3: callf $4,_setjmp /* save context for error return */ movab aab3,_stpc /* save pc of subtest */ movl $5,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $-0x80,_opr /* first operand */ movl $A2B3,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $A2B3,tmp /*second operand */ movb tmp+3,r5 /*second operand */ bispsw $(N|Z) /* these flags ON */ addb2 $-0x80,r5 /* try 'add' instruction data to reg */ jgeq e5 /*error if N = 0 */ jeql e5 /*error if Z = 1 */ jvc e5 /*error if V = 0 */ jcc e5 /*error if C = 0 */ bicpsw $Z movl $RB3,r4 andl2 $BMSK,r4 andl2 $BMSK,r5 /* mask off don't care bits */ cmpl r4,r5 /*sum = expected ? */ jeql ab3r /*if not, error */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code flag failure */ movl r5,_actual /* actual data */ movl r4,_expected /* expected data */ jmp *badrtn e5: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* reverse operands register to register operation */ ab3r: bbs $0,_force_lp,0b /* if set loop on last subtest */ aab3r: callf $4,_setjmp /* save context for error return */ movab aab3r,_stpc /* save pc of subtest */ movl $6,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $A2B3,_opr /* first operand */ movl $A1B3,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $A2B3,tmp /*first operand */ movb tmp+3,r5 /*first operand */ movl $A1B3,tmp2 /*second operand */ movb tmp2+3,r6 /*second operand */ bispsw $(N|Z) /* these flags ON */ addb2 r5,r6 /* try 'add' instruction reg to reg */ jgeq e6 /*error if N = 0 */ jeql e6 /*error if Z = 1 */ jvc e6 /*error if V = 0 */ jcc e6 /*error if C = 0 */ bicpsw $Z movl $RB3,r4 andl2 $BMSK,r4 andl2 $BMSK,r6 /* mask off don't care bits */ cmpl r4,r6 /*sum = expected ? */ jeql ab4 /*if not, error */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code flag failure */ movl r6,_actual /* actual data */ movl r4,_expected /* expected data */ jmp *badrtn e6: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn ab4: bbs $0,_force_lp,0b /* if set loop on last subtest */ aab4: callf $4,_setjmp /* save context for error return */ movab aab4,_stpc /* save pc of subtest */ movl $7,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $A2B3,_opr /* first operand */ movl $A1B3,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $A1B4,add /*first operand */ movl $A2B4,sum /*second operand */ bispsw $(N|V) /* these flags ON */ addb2 add+3,sum+3 /* try 'add' instruction */ jlss e7 /*error if N = 1 */ jneq e7 /*error if Z = 0 */ jvs e7 /*error if V = 1 */ jcc e7 /*error if C = 0 */ bicpsw $Z cmpl $RB4,sum /*sum = expected ? */ jeql ab4r /*if not, error */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code flag failure */ movl $RB4,_actual /* actual data */ movl sum,_expected /* expected data */ jmp *badrtn e7: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set scope loop on error */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* reverse operands */ ab4r: bbs $0,_force_lp,0b /* if set loop on last subtest */ aab4r: callf $4,_setjmp /* save context for error return */ movab aab4r,_stpc /* save pc of subtest */ movl $8,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $A2B4,_opr /* first operand */ movl $A1B4,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $A2B4,add /*first operand */ movl $A1B4,sum /*second operand */ bispsw $(N|V) /* these flags ON */ addb2 add+3,sum+3 /* try 'add' instruction */ jlss e8 /*error if N = 1 */ jneq e8 /*error if Z = 0 */ jvs e8 /*error if V = 1 */ jcc e8 /*error if C = 0 */ bicpsw $Z movl $0,r4 cmpl r4,sum /*sum = expected ? */ jeql ab5 /*if not, error */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code flag failure */ movl sum,_actual /* actual data */ movl r4,_expected /* expected data */ jmp *badrtn e8: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set scope loop on error */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn ab5: bbs $0,_force_lp,0b /* if set loop on last subtest */ aab5: callf $4,_setjmp /* save context for error return */ movab aab5,_stpc /* save pc of subtest */ movl $9,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $A1B5,_opr /* first operand */ movl $A2B5,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $A1B5,add /*first operand */ movl $A2B5,sum /*second operand */ bispsw $(V|Z|C) /* these flags ON */ addb2 add+3,sum+3 /* try 'add' instruction */ jgeq e9 /*error if N = 0 */ jeql e9 /*error if Z = 1 */ jvs e9 /*error if V = 1 */ jcs e9 /*error if C = 1 */ bicpsw $Z movl $RB5,r4 cmpl $RB5,sum /*sum = expected ? */ jeql ab6 /*if not, error */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code flag failure */ movl sum,_actual /* actual data */ movl r4,_expected /* expected data */ jmp *badrtn e9: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set scope loop on error */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* reverse operands */ ab5r: bbs $0,_force_lp,0b /* if set loop on last subtest */ aab5r: callf $4,_setjmp /* save context for error return */ movab aab5r,_stpc /* save pc of subtest */ movl $0xa,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $A2B5,_opr /* first operand */ movl $A1B5,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $A2B5,add /*first operand */ movl $A1B5,sum /*second operand */ bispsw $(V|Z|C) /* these flags ON */ addb2 add+3,sum+3 /* try 'add' instruction */ jgeq e10 /*error if N = 0 */ jeql e10 /*error if Z = 1 */ jvs e10 /*error if V = 1 */ jcs e10 /*error if C = 1 */ bicpsw $Z movl $0xff,r4 cmpl r4,sum /*sum = expected ? */ jeql ab6 /*if not, error */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code flag failure */ movl sum,_actual /* actual data */ movl r4,_expected /* expected data */ jmp *badrtn e10: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn ab6: bbs $0,_force_lp,0b /* if set loop on last subtest */ aab6: callf $4,_setjmp /* save context for error return */ movab aab6,_stpc /* save pc of subtest */ movl $0xb,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $A1B6,_opr /* first operand */ movl $A2B6,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $A1B6,add /*first operand */ movl $A2B6,sum /*second operand */ bispsw $(Z|V) /* these flags ON */ addb2 add+3,sum+3 /* try 'add' instruction */ jgeq e11 /*error if N = 0 */ jeql e11 /*error if Z = 1 */ jvs e11 /*error if V = 1 */ jcc e11 /*error if C = 0 */ bicpsw $Z movl $RB6,r4 cmpl $RB6,sum /*sum = expected ? */ jeql ab6r /*if not, error */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code flag failure */ movl sum,_actual /* actual data */ movl r4,_expected /* expected data */ jmp *badrtn e11: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /* reverse operands */ ab6r: bbs $0,_force_lp,0b /* if set loop on last subtest */ aab6r: callf $4,_setjmp /* save context for error return */ movab aab6r,_stpc /* save pc of subtest */ movl $0xc,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $A2B6,_opr /* first operand */ movl $A1B6,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $A2B6,add /*first operand */ movl $A1B6,sum /*second operand */ bispsw $(Z|V) /* these flags ON */ addb2 add+3,sum+3 /* try 'add' instruction */ jgeq e12 /*error if N = 0 */ jeql e12 /*error if Z = 1 */ jvs e12 /*error if V = 1 */ jcc e12 /*error if C = 0 */ bicpsw $Z cmpl $RB6,sum /*sum = expected ? */ jneq e555 /*if not, error */ bbs $0,_force_lp,0b /* if set loop on last subtest */ jmp *return e555: bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code flag failure */ movl sum,_actual /* actual data */ movl $RB6,_expected /* expected data */ jmp *badrtn e12: movpsl _actual /* actual = psl */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag failure */ jmp *badrtn /*good run, goto monitor */ /* */ /* Variables */ /* */ .align 2 add1: .space 4 add2: .space 4 sum: .space 4 add: .space 4 tmp: .space 4 /* temp location for variable manipulation */ tmp2: .space 4 /* temp location for variable manipulation */ /* End of file */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.