|
|
Power 6/32 Unix version 1.2b
/* ADDB3 (add byte 3) test */ /* */ /*Test name = addb3 */ /*Description = */ /* This test checks 'addb3' instruction as follows: */ /*add1 add2 sum N Z V C (flags) */ /*___ ___ ______ _______________ */ /*0x1111107f 0x1111107f 0x111110fe 0 0 1 0 */ /*(127) (127) */ /*0x11111080 0x11111080 0x11111000 0 1 1 1 */ /*(-128) (-128) (0) */ /*0x80 0xff 0x7f 0 0 1 1 */ /*(-128) (-1) (127) */ /*0x81 0x7f 0x00 0 1 0 1 */ /*(-127) (127) (0) */ /*0x80 0x7f 0xff 1 0 0 0 */ /*(-128) (127) (-1) */ /*0xc0 0xc0 0x80 1 0 0 1 */ /*(-64) (-64) (-128) */ /* */ /* */ /* */ /* */ /* 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 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 .set BMSK,0xff .globl _addb3 _addb3: ab1: callf $4,_setjmp /* save context for error return */ movab ab1,_stpc /* progranm counter of subtest */ movl $1,_subtst /*no error*/ 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,add1 /*first operand */ movl $A2B1,tmp2 /*second operand */ movb tmp2+3,r7 /*second operand */ movl $INITB,sum /*initial value */ bispsw $(N|Z|C) /* these flags ON */ addb3 add1+3,r7,sum+3 /* try 'add' instruction */ 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 cmpl $RB1,sum /*sum = expected ? */ jeql ab1r /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ 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 */ ab1r: bbs $0,_force_lp,0b /* if set loop on last subtest */ aab1r: callf $4,_setjmp /* save context for error return */ movab aab1r,_stpc /* progranm counter of subtest */ movl $2,_subtst /*no error*/ movl $2,_no_opr /* number of operands in use */ movl $A2B1,_opr /* first operand */ movl $0x7f,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $A2B1,add1 /*first operand */ movl $INITB,sum bispsw $(N|Z|C) /* these flags ON */ addb3 add1+3,$0x7f,sum+3/* try 'add' instruction mem data 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,r5 /*expected result*/ cmpl $RB1,sum /*sum = expected ? */ jeql ab2 /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ 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 /* progranm counter of subtest */ movl $3,_subtst /*no error*/ movl $2,_no_opr /* number of operands in use */ movl $-0x80,_opr /* first operand */ movl $-0x80,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $INITB,sum bispsw $N /* these flags ON */ addb3 $-0x80,$-0x80,sum+3/* try 'add' instruction data data mem */ jgeq e3 /*error if N = 1 */ jeql e3 /*error if Z = 0 */ jvc e3 /*error if V = 0 */ jcc e3 /*error if C = 0 */ bicpsw $Z movl $RB2,r5 /*expected result*/ cmpl $RB2,sum /*sum = expected ? */ jeql ab2r /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ 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 */ ab2r: bbs $0,_force_lp,0b /* if set loop on last subtest */ aab2r: callf $4,_setjmp /* save context for error return */ movab aab2r,_stpc /* progranm counter of subtest */ movl $4,_subtst /*no error*/ 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,add1 /*first operand */ movl $A1B2,add2 /*second operand */ movl $INITB,tmp3 movb tmp3+3,r8 bispsw $N /* these flags ON */ addb3 add1+3,add2+3,r8/* try 'add' instruction mem mem reg */ jgeq e4 /*error if N = 1 */ jeql e4 /*error if Z = 0 */ jvc e4 /*error if V = 0 */ jcc e4 /*error if C = 0 */ bicpsw $Z movl $RB2,r5 /*expected result*/ andl2 $BMSK,r5 andl2 $BMSK,r8 /* mask off don't care bits */ cmpl r5,r8 /*sum = expected ? */ jeql ab3 /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r5,_actual /* actual data */ movl r8,_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 /* progranm counter of subtest */ movl $5,_subtst /*no error*/ 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,tmp2 movb tmp2+3,r7 movl $0,sum bispsw $(N|Z) /* these flags ON */ addb3 $-0x80,r7,sum+3 /* ' add ' inst, data reg mem */ jgeq e5 /*error if N = 1 */ jeql e5 /*error if Z = 1 */ jvc e5 /*error if V = 0 */ jcc e5 /*error if C = 0 */ bicpsw $Z cmpl $RB3,sum /*sum = expected ? */ jeql ab3r /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl $RB3,_actual /* actual data */ movl sum,_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 */ ab3r: bbs $0,_force_lp,0b /* if set loop on last subtest */ aab3r: callf $4,_setjmp /* save context for error return */ movab aab3r,_stpc /* progranm counter of subtest */ movl $6,_subtst /*no error*/ 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 $A1B3,tmp2 /*second operand */ movb tmp2+3,r7 /*second operand */ movl $0,r8 bispsw $(N|Z) /* these flags ON */ addb3 $-1,r7,r8 /* try 'add' instruction data reg reg */ jgeq e6 /*error if N = 1 */ jeql e6 /*error if Z = 1 */ jvc e6 /*error if V = 0 */ jcc e6 /*error if C = 0 */ bicpsw $Z movl $RB3,r5 /*expected result*/ andl2 $BMSK,r5 andl2 $BMSK,r8 /* mask off don't care bits */ cmpl r5,r8 /*sum = expected ? */ jeql ab4 /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r8,_actual /* actual data */ movl $RB3,_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 /* progranm counter of subtest */ movl $7,_subtst /*no error*/ movl $2,_no_opr /* number of operands in use */ movl $A1B4,_opr /* first operand */ movl $A2B4,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $A1B4,tmp /*first operand */ movb tmp+3,r6 /*first operand */ movl $0,r8 bispsw $(N|V) /* these flags ON */ addb3 r6,$A2B4,r8 /* try 'add' instruction reg data reg */ 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 movl $RB4,r5 /*expected result*/ andl2 $BMSK,r5 andl2 $BMSK,r8 /* mask off don't cares */ cmpl r5,r8 /*sum = expected ? */ jeql ab4r /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r8,_actual /* actual data */ movl $RB4,_expected /* expected data */ jmp *badrtn e7: 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 */ ab4r: bbs $0,_force_lp,0b /* if set loop on last subtest */ aab4r: callf $4,_setjmp /* save context for error return */ movab aab4r,_stpc /* progranm counter of subtest */ movl $8,_subtst /*no error*/ 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,tmp /*first operand */ movb tmp+3,r6 /*first operand */ movl $A2B4,r6 /*first operand */ movl $A1B4,tmp2 /*first operand */ movb tmp2+3,r7 /*first operand */ movl $0,r8 bispsw $(N|V) /* these flags ON */ addb3 r6,r7,r8 /* try 'add' instruction reg reg reg */ 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 $RB4,r5 /*expected result*/ andl2 $BMSK,r5 andl2 $BMSK,r8 /* mask off don't cares */ cmpl r5,r8 /*sum = expected ? */ jeql ab5 /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r8,_actual /* actual data */ movl $RB4,_expected /* expected data */ jmp *badrtn e8: movpsl _actual /* actual = psl */ 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 /* progranm counter of subtest */ movl $9,_subtst /*no error*/ 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,add1 /*first operand */ movl $A2B5,add2 /*second operand */ movl $0,sum bispsw $(V|Z|C) /* these flags ON */ addb3 add1+3,add2+3,sum+3/* try 'add' instr mem mem mem */ 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,r5 /*expected result*/ cmpl $RB5,sum /*sum = expected ? */ jeql ab5r /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl sum,_actual /* actual data */ movl $RB5,_expected /* expected data */ jmp *badrtn e9: 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 */ ab5r: bbs $0,_force_lp,0b /* if set loop on last subtest */ aab5r: callf $4,_setjmp /* save context for error return */ movab aab5r,_stpc /* progranm counter of subtest */ movl $0xa,_subtst /*no error*/ 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,tmp movb tmp+3,r6 movl $A1B5,tmp2 /*second operand */ movb tmp2+3,r7 /*second operand */ movl $0,sum bispsw $(V|Z|C) /* these flags ON */ addb3 r6,r7,sum+3 /* try 'add' instruction reg reg mem */ 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 $RB5,r5 /*expected result*/ cmpl $RB5,sum /*sum = expected ? */ jeql ab6 /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl sum,_actual /* actual data */ movl $RB5,_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 /* progranm counter of subtest */ movl $0xb,_subtst /*no error*/ 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,add1 /*first operand */ movl $A2B6,add2 /*second operand */ movl $0,sum bispsw $(Z|V) /* these flags ON */ addb3 add1+3,add2+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,r5 /*expected result*/ cmpl $RB6,sum /*sum = expected ? */ jeql ab6r /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl sum,_actual /* actual data */ movl $RB6,_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 /* progranm counter of subtest */ movl $0xc,_subtst /*no error*/ 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 $A2B6,add1 /*first operand */ movl $A1B6,add2 /*second operand */ movl $0,sum bispsw $(Z|V) /* these flags ON */ addb3 add1+3,add2+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 movl $RB6,r5 /*expected result*/ cmpl $RB6,sum /*sum = expected ? */ jeql e555 /* if correct continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ 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 e555: bbs $0,_force_lp,0b /* if set loop on last subtest */ jmp *return /*test passed , goto monitor */ /* */ /* Variables */ /* */ .align 2 add1: .space 4 add2: .space 4 sum: .space 4 add: .space 4 tmp: .space 4 tmp2: .space 4 tmp3: .space 4 /* End of file */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.