|
|
Power 6/32 Unix version 1.2b
/* SUBL3 (subtract long 3) test */ /* */ /*Test name = subl3 */ /*Description = */ /* This test checks 'subl3' instruction as follows: */ /*sub min dif N Z V C (flags) */ /*___ ___ ______ _______________ */ /*0x7fffffff 0x7fffffff 0x00000000 0 1 0 1 */ /*0xffffffff 0x00000001 0x00000002 0 0 0 0 */ /*0x00000001 0xffffffff 0xfffffffe 1 0 0 1 */ /*0x80000001 0x7fffffff 0xfffffffe 1 0 1 0 */ /*0x80000001 0x80000000 0xffffffff 1 0 0 0 */ /*0x7fffffff 0x80000001 0x00000002 0 0 1 1 */ /* */ /* */ /* */ /* */ /* constants definition for 'subx' tests. */ /* */ .set SB1,0x11111f7f/*+127, highest +ve number, byte */ .set SW1,0x111f7fff .set SL1,0x7fffffff .set MB1,0x11111f7f/* +127 */ .set MW1,0x111f7fff .set ML1,SL1 .set RB1,0x11111f00 .set RW1,0x111f0000 .set RL1,0x00000000 .set SB2,0xff /* -1 */ .set SW2,0xffff .set SL2,0xffffffff .set MB2,0x01 /* +1 */ .set MW2,0x0001 .set ML2,0X00000001 .set RB2,0x00000002 /* +2 */ .set RW2,RB2 .set RL2,RB2 .set SB3,MB2 /* +1 */ .set SW3,MW2 .set SL3,ML2 .set MB3,0xff /* -1 */ .set MW3,0xffff .set ML3,0xffffffff .set RB3,0x000000fe /* -2 */ .set RW3,0x0000fffe .set RL3,0Xfffffffe .set SB4,0x81 /* -127 */ .set SW4,0x8001 .set SL4,0x80000001 .set MB4,0x7f /* 127 */ .set MW4,0x7fff .set ML4,0x7fffffff .set RB4,0xfe /* -2 */ .set RW4,0xfffe .set RL4,0xfffffffe .set SB5,SB4 /* -127 */ .set SW5,SW4 .set SL5,SL4 .set MB5,0x80 /* -128 */ .set MW5,0x8000 .set ML5,0x80000000 .set RB5,0xff /* -1 */ .set RW5,0xffff .set RL5,0xffffffff .set SB6,0x7f/* +127 */ .set SW6,0x7fff .set SL6,0x7fffffff .set MB6,SB4 /* -127 */ .set MW6,SW4 .set ML6,SL4 .set RB6,0x02 .set RW6,0x02 .set RL6,0x02 .set INITB,0x11111f55/* initialization values for 3 operand */ .set INITW,0x111f5555 .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 _sub_l3 _sub_l3: callf $4,_setjmp /* save context for error return */ movab _sub_l3,_stpc /* address of subtest */ movl $1,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $SL1,_opr /* first operand */ movl $ML1,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $SL1,sub /*first operand */ movl $ML1,min /*second operand */ movl $INITL,dif /*initialize destination */ bicpsw $PSWMASK /*PSW = 0 */ bispsw $(N|V|C) /* these flags ON */ subl3 sub,min,dif /* try 'sub' instruction mem mem mem */ jlss e1 /*error if N = 1 */ jneq e1 /*error if Z = 0 */ jvs e1 /*error if V = 1 */ jcc e1 /*error if C = 0 */ jmp 1f e1: 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: bicpsw $Z cmpl $RL1,dif /*dif = expected ? */ jeql sl2 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl dif,_actual /* actual data */ movl $RL1,_expected /* expected data */ jmp *badrtn sl2: bbs $0,_force_lp,0b /* if set loop on last subtest */ as2: callf $4,_setjmp /* save context for error return */ movab as2,_stpc /* address of subtest */ movl $2,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $SL2,_opr /* first operand */ movl $ML2,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $SL2,r6 /*first operand */ movl $ML2,r7 /*second operand */ movl $0,r8 /*initialize destination */ bicpsw $PSWMASK /*PSW = 0 */ bispsw $(N|Z|V) /* these flags ON */ subl3 r6,r7,r8 /* try 'sub' instruction reg reg reg */ jlss e2 /*error if N = 1 */ jeql e2 /*error if Z = 1 */ jvs e2 /*error if V = 1 */ jcs e2 /*error if C = 1 */ jmp 1f e2: 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: bicpsw $Z cmpl $RL2,r8 /*dif = expected ? */ jeql sl3 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r8,_actual /* actual data */ movl $RL2,_expected /* expected data */ jmp *badrtn sl3: bbs $0,_force_lp,0b /* if set loop on last subtest */ as3: callf $4,_setjmp /* save context for error return */ movab as3,_stpc /* address of subtest */ movl $3,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $SL3,_opr /* first operand */ movl $ML3,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $SL3,r6 /*first operand */ movl $ML3,r7 /*second operand */ movl $0,dif /*initialize destination */ bicpsw $PSWMASK /*PSW = 0 */ bispsw $(V|Z|C) /* these flags ON */ subl3 r6,r7,dif /* try 'sub' instruction reg reg mem */ jgeq e3 /*error if N = 0 */ jeql e3 /*error if Z = 1 */ jvs e3 /*error if V = 1 */ jcc e3 /*error if C = 0 */ jmp 1f e3: 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: bicpsw $Z cmpl $RL3,dif /*dif = expected ? */ jeql sl4 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl dif,_actual /* actual data */ movl $RL3,_expected /* expected data */ jmp *badrtn sl4: bbs $0,_force_lp,0b /* if set loop on last subtest */ as4: callf $4,_setjmp /* save context for error return */ movab as4,_stpc /* address of subtest */ movl $4,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $SL4,_opr /* first operand */ movl $ML4,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $SL4,r6 /*first operand */ movl $0,dif /*initialize destination */ bicpsw $PSWMASK /*PSW = 0 */ bispsw $Z /* these flags ON */ subl3 r6,$ML4,dif /* try 'sub' instruction reg data mem */ jlss e4 /*error if N = 0 */ jeql e4 /*error if Z = 1 */ jvc e4 /*error if V = 0 */ jcs e4 /*error if C = 1 */ jmp 1f e4: 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: bicpsw $Z cmpl $RL4,dif /*dif = expected ? */ jeql sl5 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl dif,_actual /* actual data */ movl $RL4,_expected /* expected data */ jmp *badrtn sl5: bbs $0,_force_lp,0b /* if set loop on last subtest */ as5: callf $4,_setjmp /* save context for error return */ movab as5,_stpc /* address of subtest */ movl $5,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $SL5,_opr /* first operand */ movl $ML5,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $0,dif /*initialize destination */ bicpsw $PSWMASK /*PSW = 0 */ bispsw $(V|Z) /* these flags ON */ subl3 $SL5,$ML5,dif /* try 'sub' instruction data data mem */ jgeq e5 /*error if N = 0 */ jeql e5 /*error if Z = 1 */ jvs e5 /*error if V = 1 */ jcs e5 /*error if C = 1 */ jmp 1f e5: 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: bicpsw $Z cmpl $RL5,dif /*dif = expected ? */ jeql sl6 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl dif,_actual /* actual data */ movl $RL5,_expected /* expected data */ jmp *badrtn sl6: bbs $0,_force_lp,0b /* if set loop on last subtest */ as6: callf $4,_setjmp /* save context for error return */ movab as6,_stpc /* address of subtest */ movl $6,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $SL6,_opr /* first operand */ movl $ML6,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $0,r8 /*initialize destination */ bicpsw $PSWMASK /*PSW = 0 */ bispsw $(Z|C|N) /* these flags ON */ subl3 $SL6,$ML6,r8 /* try 'sub' instruction data data 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 */ jmp 1f e6: 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: bicpsw $Z cmpl $RL6,r8 /*dif = expected ? */ jeql sl7 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r8,_actual /* actual data */ movl $RL6,_expected /* expected data */ jmp *badrtn sl7: bbs $0,_force_lp,0b /* if set loop on last subtest */ as7: callf $4,_setjmp /* save context for error return */ movab as7,_stpc /* address of subtest */ movl $7,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $SL6,_opr /* first operand */ movl $ML6,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $SL6,r6 movl $0,r8 /*initialize destination */ bicpsw $PSWMASK /*PSW = 0 */ bispsw $(Z|C|N) /* these flags ON */ subl3 r6,$ML6,r8 /* try 'sub' instruction reg data reg */ jgeq e7 /*error if N = 1 */ jeql e7 /*error if Z = 1 */ jvc e7 /*error if V = 0 */ jcc e7 /*error if C = 0 */ jmp 1f e7: 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: bicpsw $Z cmpl $RL6,r8 /*dif = expected ? */ jeql sl8 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r8,_actual /* actual data */ movl $RL6,_expected /* expected data */ jmp *badrtn sl8: bbs $0,_force_lp,0b /* if set loop on last subtest */ as8: callf $4,_setjmp /* save context for error return */ movab as8,_stpc /* address of subtest */ movl $8,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $SL3,_opr /* first operand */ movl $ML3,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $ML3,r7 /*second operand */ movl $0,dif /*initialize destination */ bicpsw $PSWMASK /*PSW = 0 */ bispsw $(V|Z|C) /* these flags ON */ subl3 $SL3,r7,dif /* try 'sub' instruction data reg mem */ jgeq e8 /*error if N = 0 */ jeql e8 /*error if Z = 1 */ jvs e8 /*error if V = 1 */ jcc e8 /*error if C = 0 */ jmp 1f e8: 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: bicpsw $Z cmpl $RL3,dif /*dif = expected ? */ jeql sl9 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl dif,_actual /* actual data */ movl $RL3,_expected /* expected data */ jmp *badrtn sl9: bbs $0,_force_lp,0b /* if set loop on last subtest */ as9: callf $4,_setjmp /* save context for error return */ movab as9,_stpc /* address of subtest */ movl $9,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $SL2,_opr /* first operand */ movl $ML2,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*PSW = 0 */ movl $ML2,r7 /*second operand */ movl $0,r8 /*initialize destination */ bicpsw $PSWMASK /*PSW = 0 */ bispsw $(N|Z|V) /* these flags ON */ subl3 $SL2,r7,r8 /* try 'sub' instruction data reg reg */ jlss e9 /*error if N = 1 */ jeql e9 /*error if Z = 1 */ jvs e9 /*error if V = 1 */ jcs e9 /*error if C = 1 */ jmp 1f e9: 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: bicpsw $Z cmpl $RL2,r8 /*dif = expected ? */ jeql aldn bbs $0,_scoplp,0b /* if set scope loop on error */ movl $1,_ercode /* error code data miscompare */ movl r8,_actual /* actual data */ movl $RL2,_expected /* expected data */ jmp *badrtn aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */ jmp *return /* */ /* Variables */ /* */ .align 2 min: .space 4 dif: .space 4 sub: .space 4 /* End of file */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.