|
|
Power 6/32 Unix version 1.2b
/* ADDW3 (add word 3) test */ /* */ /*Test name = addw3 */ /*Description = */ /* This test checks 'addw3' instruction as follows: */ /*add1 add2 sum 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,0x11108000 .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 WMSK,0xffff /* mask for word register compares */ .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 # R2 : error code # 1 : error in flags # 2 : result is not as expected # R1 : indicate which part of the test that failed .globl _addw3 _addw3: callf $4,_setjmp /* save context for error return */ movab _addw3,_stpc /* save program counter of subtest */ movl $1,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $A1W1,_opr /* first operand */ movl $A2W1,_opr + 4 /* second opernad */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $A1W1,add1 /*first operand */ movl $A2W1,tmp2 /*second operand */ movw tmp2+2,r7 /*second operand */ movl $INITW,sum /*initial value */ bispsw $(N|Z|C) /* these flags ON */ addw3 add1+2,r7,sum+2/* try 'add' instruction mem reg 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 $RW1,r5 /*expected result*/ cmpl $RW1,sum /*sum = expected ? */ jeql aw1r /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl sum,_actual /* actual data */ movl $RW1,_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 */ aw1r: bbs $0,_force_lp,0b /* if set loop on last subtest */ aaw1r: callf $4,_setjmp /* save context for error return */ movab aaw1r,_stpc /* save program counter of subtest */ movl $2,_subtst /* subtest number */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $A2W1,add1 /*first operand */ movl $INITW,sum bispsw $(N|Z|C) /* these flags ON */ addw3 add1+2,$0x7fff,sum+2 /* try 'add' inst 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 $RW1,r5 /*expected result*/ cmpl $RW1,sum /*sum = expected ? */ jeql aw2 /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl sum,_actual /* actual data */ movl $RW1,_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 aw2: bbs $0,_force_lp,0b /* if set loop on last subtest */ aaw2: callf $4,_setjmp /* save context for error return */ movab aaw2,_stpc /* save program counter of subtest */ movl $3,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $-0x8000,_opr /* first operand */ movl $-0x8000,_opr + 4 /* second opernad */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $INITW,sum bispsw $N /* these flags ON */ addw3 $-0x8000,$-0x8000,sum+2 /* 'add' 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 $RW2,r5 /*expected result*/ cmpl $RW2,sum /*sum = expected ? */ jeql aw2r /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl sum,_actual /* actual data */ movl $RW2,_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 */ aw2r: bbs $0,_force_lp,0b /* if set loop on last subtest */ aaw2r: callf $4,_setjmp /* save context for error return */ movab aaw2r,_stpc /* save program counter of subtest */ movl $4,_subtst /* subtest number */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $A2W2,add1 /*first operand */ movl $A1W2,add2 /*second operand */ movl $INITW,tmp3 movw tmp3+2,r8 bispsw $N /* these flags ON */ addw3 add1+2,add2+2,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 $RW2,r5 /*expected result*/ andl2 $WMSK,r5 andl2 $WMSK,r8 cmpl r5,r8 /*sum = expected ? */ jeql aw3 /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl r8,_actual /* actual data */ movl $RW2,_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 aw3: bbs $0,_force_lp,0b /* if set loop on last subtest */ aaw3: callf $4,_setjmp /* save context for error return */ movab aaw3,_stpc /* save program counter of subtest */ movl $5,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $-0x8000,_opr /* first operand */ movl $A2W3,_opr + 4 /* second opernad */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $A2W3,tmp2 /*second operand */ movw tmp2+2,r7 /*second operand */ movl $0,sum bispsw $(N|Z) /* these flags ON */ addw3 $-0x8000,r7,sum+2 /* try 'add' instruction 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 movl $RW3,r5 /*expected result*/ cmpl $RW3,sum /*sum = expected ? */ jeql aw3r /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl sum,_actual /* actual data */ movl $RW3,_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 */ aw3r: bbs $0,_force_lp,0b /* if set loop on last subtest */ aaw3r: callf $4,_setjmp /* save context for error return */ movab aaw3r,_stpc /* save program counter of subtest */ movl $6,_subtst /* subtest number */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $A1W3,tmp2 /*second operand */ movw tmp2+2,r7 /*second operand */ movl $0,r8 bispsw $(N|Z) /* these flags ON */ addw3 $-1,r7,r8 /* try 'add' instruction */ 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 $RW3,r5 /*expected result*/ andl2 $WMSK,r5 andl2 $WMSK,r8 cmpl r5,r8 /*sum = expected ? */ jeql aw4 /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl r8,_actual /* actual data */ movl $RW3,_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 aw4: bbs $0,_force_lp,0b /* if set loop on last subtest */ aaw4: callf $4,_setjmp /* save context for error return */ movab aaw4,_stpc /* save program counter of subtest */ movl $7,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $A1W4,_opr /* first operand */ movl $A2W4,_opr + 4 /* second opernad */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $A1W4,tmp /*first operand */ movw tmp+2,r6 /*first operand */ movl $0,r8 bispsw $(N|V) /* these flags ON */ addw3 r6,$A2W4,r8 /* 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 movl $RW4,r5 /*expected result*/ andl2 $WMSK,r5 andl2 $WMSK,r8 cmpl r5,r8 /*sum = expected ? */ jeql aw4r /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl r8,_actual /* actual data */ movl $RW4,_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 */ aw4r: bbs $0,_force_lp,0b /* if set loop on last subtest */ aaw4r: callf $4,_setjmp /* save context for error return */ movab aaw4r,_stpc /* save program counter of subtest */ movl $8,_subtst /* subtest number */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $A2W4,tmp movw tmp+2,r6 movl $A1W4,tmp2 /*second operand */ movw tmp2+2,r7 /*second operand */ movl $0,r8 bispsw $(N|V) /* these flags ON */ addw3 r6,r7,r8 /* 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 $RW4,r5 /*expected result*/ andl2 $WMSK,r5 andl2 $WMSK,r8 cmpl r5,r8 /*sum = expected ? */ jeql aw5 /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl r8,_actual /* actual data */ movl $RW4,_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 aw5: bbs $0,_force_lp,0b /* if set loop on last subtest */ aaw5: callf $4,_setjmp /* save context for error return */ movab aaw5,_stpc /* save program counter of subtest */ movl $9,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $A1W5,_opr /* first operand */ movl $A2W5,_opr + 4 /* second opernad */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $A1W5,add1 /*first operand */ movl $A2W5,add2 /*second operand */ movl $0,sum bispsw $(V|Z|C) /* these flags ON */ addw3 add1+2,add2+2,sum+2/* try 'add' instruction 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 cmpl $RW5,sum /*sum = expected ? */ jeql aw5r /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl sum,_actual /* actual data */ movl $RW5,_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 */ aw5r: bbs $0,_force_lp,0b /* if set loop on last subtest */ aaw5r: callf $4,_setjmp /* save context for error return */ movab aaw5r,_stpc /* save program counter of subtest */ movl $0xa,_subtst /* subtest number */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $A2W5,tmp /*first operand */ movw tmp+2,r6 /*first operand */ movl $A1W5,tmp2 /*second operand */ movw tmp2+2,r7 /*second operand */ movl $0,sum bispsw $(V|Z|C) /* these flags ON */ addw3 r6,r7,sum+2 /* 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 $RW5,r5 /*expected result*/ cmpl $RW5,sum /*sum = expected ? */ jeql aw6 /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl sum,_actual /* actual data */ movl $RW5,_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 aw6: bbs $0,_force_lp,0b /* if set loop on last subtest */ aaw6: callf $4,_setjmp /* save context for error return */ movab aaw6,_stpc /* save program counter of subtest */ movl $0xb,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $A1W6,_opr /* first operand */ movl $A2W6,_opr + 4 /* second opernad */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $A1W6,add1 /*first operand */ movl $A2W6,add2 /*second operand */ movl $0,sum bispsw $(Z|V) /* these flags ON */ addw3 add1+2,add2+2,sum+2/* 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 cmpl $RW6,sum /*sum = expected ? */ jeql aw6r /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl sum,_actual /* actual data */ movl $RW6,_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 */ aw6r: bbs $0,_force_lp,0b /* if set loop on last subtest */ aaw6r: callf $4,_setjmp /* save context for error return */ movab aaw6r,_stpc /* save program counter of subtest */ movl $0xc,_subtst /* subtest number */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $A2W6,add1 /*first operand */ movl $A1W6,add2 /*second operand */ movl $0,sum bispsw $(Z|V) /* these flags ON */ addw3 add1+2,add2+2,sum+2/* 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 $RW6,r5 /*expected result*/ cmpl $RW6,sum /*sum = expected ? */ jeql aldn /* if correct continue */ movl $1,_ercode /* error code data miscompare */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl sum,_actual /* actual data */ movl $RW6,_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 aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */ jmp *return /* */ /* 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.