|
|
Power 6/32 Unix version 1.2b
/* CMPB (compare byte) test */ /* */ /*Test name = cmpb */ /*Description = */ /* This test checks 'cmpb' instruction as follows: */ /* src1 src2 N Z V C (flags) */ /* ____ ____ _______________ */ /* + = + 0 1 0 1 */ /* - = - 0 1 0 1 */ /* + > + 1 0 0 0 */ /* - < - 1 0 0 0 */ /* - = + 1 0 0 1 */ /* - > + 1 0 0 1 */ /* - < + 1 0 0 1 */ /* + < - 0 0 0 0 */ /* + = - 0 0 0 0 */ /* + > - 0 0 0 0 */ /* - > - 0 0 0 1 */ /* + > + 0 0 0 1 */ /* M ---- M ------- */ /* R ---- M ------- */ /* */ /* */ /* */ /* */ /* constants definition for 'cmpx' tests. */ /* */ .set SRC1B1,0x7f /*+127, highest +ve number, byte */ .set SRC1W1,0x7fff .set SRC1L1,0x7fffffff .set SRC2B1,0x5555557f .set SRC2W1,0x55557fff .set SRC2L1,SRC1L1 .set SRC1B2,0xff /*-1, highest -ve number, byte */ .set SRC1W2,0xffff .set SRC1L2,0xffffffff .set SRC2B2,SRC1B2 .set SRC2W2,SRC1W2 .set SRC2L2,SRC1L2 .set SRC1B3,0x01 .set SRC1W3,0X0001 .set SRC1L3,0x00000001 .set SRC2B3,0x02 .set SRC2W3,0x0002 .set SRC2L3,0x00000002 .set SRC1B4,0xfe /*-2 */ .set SRC1W4,0xfffe .set SRC1L4,0xfffffffe .set SRC2B4,0xff /*-1 */ .set SRC2W4,0xffff .set SRC2L4,0xffffffff .set SRC1B5,0x81 /*-127 */ .set SRC1W5,0x8001 .set SRC1L5,0x80000001 .set SRC2B5,0x7f /*+127 */ .set SRC2W5,0x7fff .set SRC2L5,0x7fffffff .set SRC1B6,SRC1B4 /*-2 */ .set SRC1W6,SRC1W4 .set SRC1L6,SRC1L4 .set SRC2B6,SRC1B3 /*+1 */ .set SRC2W6,SRC1W3 .set SRC2L6,SRC1L3 .set SRC1B7,SRC2B4 /*-1 */ .set SRC1W7,SRC2W4 .set SRC1L7,SRC2L4 .set SRC2B7,SRC2B3 /*+2*/ .set SRC2W7,SRC2W3 .set SRC2L7,SRC2L3 .set SRC1B8,SRC2B6 /*+1*/ .set SRC1W8,SRC2W6 .set SRC1L8,SRC2L6 .set SRC2B8,SRC1B4 /*-2*/ .set SRC2W8,SRC1W4 .set SRC2L8,SRC1L4 .set SRC1B9,SRC1B1 /*127*/ .set SRC1W9,SRC1W1 .set SRC1L9,SRC1L1 .set SRC2B9,SRC1B5 /*-127*/ .set SRC2W9,SRC1W5 .set SRC2L9,SRC1L5 .set SRC1B10,SRC2B3 /*2*/ .set SRC1W10,SRC2W3 .set SRC1L10,SRC2L3 .set SRC2B10,SRC1B2 /*-1*/ .set SRC2W10,SRC1W2 .set SRC2L10,SRC1L2 .set SRC1B11,SRC1B2 /*-1*/ .set SRC1W11,SRC1W2 .set SRC1L11,SRC1L2 .set SRC2B11,SRC1B4 /*-2*/ .set SRC2W11,SRC1W4 .set SRC2L11,SRC1L4 .set SRC1B12,SRC2B3 /*2*/ .set SRC1W12,SRC2W3 .set SRC1L12,SRC2L3 .set SRC2B12,SRC1B3 /*1*/ .set SRC2W12,SRC1W3 .set SRC2L12,SRC1L3 /* */ /* 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 /* */ /* t1loc = M, t2loc = M */ /* */ .globl _cmp_b _cmp_b: callf $4,_setjmp /* save context for error return */ movab _cmp_b,_stpc /* save address of subtest start */ movl $1,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $SRC1B1,_opr /* first operand */ movl $SRC2B1,_opr + 4 /* second operand */ 0: movl $SRC1B1,tloc1 /*tloc1 = source1 */ movl $SRC2B1,tloc2 /*tloc2 = source2 */ bicpsw $PSWMASK /*disable overflow & other enable bits */ bispsw $(N|V|C) /*turn neg, overflow, & carry ON */ cmpb tloc1+3,tloc2+3 /*execute compare memory to memory */ bneq error1 /*error if Z = 0 */ blss error1 /*error if N = 1 */ bvs error1 /*error if V = 1 */ bcc error1 /*error if C = 0 */ jmp 1f error1: movpsl _actual /* actual data psl MAYBE is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag miscompare */ jmp *badrtn 1: bicpsw $Z /*clear Z flag */ cmpl $SRC1B1,tloc1 /*check tloc1+3 & tlco2 unchanged */ beql 1f /* if no error continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand was modified */ movl tloc1,_actual /* actual data */ movl $SRC1B1,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl $SRC2B1,tloc2 beql c2 /* if no error continue */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand was modified */ movl tloc1,_actual /* actual data */ movl $SRC1B1,_expected /* expected data */ jmp *badrtn /* */ /* different patterns for source1 & source2 */ /* */ c2: bbs $0,_force_lp,0b /* if set loop on last subtest */ ac2: callf $4,_setjmp /* save context for error return */ movab ac2,_stpc /* save address of subtest start */ movl $2,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $SRC1B2,_opr /* first operand */ movl $-1,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRC1B2,tloc1 /*tloc1 = source1 */ bispsw $(N|V|C) /*turn neg, overflow, & carry ON */ cmpb tloc1+3,$-1 /*execute compare mem to data */ bneq error2 /*error if Z = 0 */ blss error2 /*error if N = 1 */ bvs error2 /*error if V = 1 */ bcc error2 /*error if C = 0 */ jmp cmpbnc error2: movpsl _actual /* actual data psl MAYBE is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag miscompare */ jmp *badrtn cmpbnc: bbs $0,_force_lp,0b /* if set loop on last subtest */ ac3: callf $4,_setjmp /* save context for error return */ movab ac3,_stpc /* save address of subtest start */ movl $3,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $SRC2B3,_opr /* first operand */ movl $SRC1B3,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRC2B3,tloc2 /*tloc2 = source2 */ bispsw $(Z|V) /*turn overflow, & zero ON */ cmpb $SRC1B3,tloc2+3 /*execute compare data to mem */ beql error3 /*error if Z = 1 */ bgeq error3 /*error if N = 0 */ bvs error3 /*error if V = 1 */ bcs error3 /*error if C = 1 */ jmp c4 error3: movpsl _actual /* actual data psl MAYBE is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag miscompare */ jmp *badrtn /* */ /* different patterns for source1 & source2 */ /* */ c4: bbs $0,_force_lp,0b /* if set loop on last subtest */ ac4: callf $4,_setjmp /* save context for error return */ movab ac4,_stpc /* save address of subtest start */ movl $4,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $SRC1B4,_opr /* first operand */ movl $SRC2B4,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRC1B4,tloc1 /*tloc1 = source1 */ movl $SRC2B4,r4 /* r4 = source2 */ bispsw $(Z|V) /*turn overflow, & zero ON */ cmpb tloc1+3,r4 /*execute compare memory to reg */ beql error4 /*error if Z = 1 */ bgeq error4 /*error if N = 0 */ bvs error4 /*error if V = 1 */ bcc error4 /*error if C = 0 */ jmp cmpbn error4: movpsl _actual /* actual data psl MAYBE is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag miscompare */ jmp *badrtn cmpbn: bbs $0,_force_lp,0b /* if set loop on last subtest */ ac5: callf $4,_setjmp /* save context for error return */ movab ac5,_stpc /* save address of subtest start */ movl $5,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $SRC1B5,_opr /* first operand */ movl $SRC2B5,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRC1B5,r3 /* r3 = source1 */ movl $SRC2B5,tloc2 /*tloc2 = source2 */ bispsw $(Z|V|C) /*turn zero, overflow, & carry ON */ cmpb r3,tloc2+3 /* execute compare reg to mem */ beql error5 /*error if Z = 1 */ blss error5 /*error if N = 1 */ bvs error5 /*error if V = 1 */ bcc error5 /*error if C = 0 */ jmp c6 error5: movpsl _actual /* actual data psl MAYBE is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag miscompare */ jmp *badrtn /* */ /* different patterns for source1 & source2 */ /* */ c6: bbs $0,_force_lp,0b /* if set loop on last subtest */ ac6: callf $4,_setjmp /* save context for error return */ movab ac6,_stpc /* save address of subtest start */ movl $6,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $-2,_opr /* first operand */ movl $SRC2B6,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRC2B6,r4 /*tloc2 = source2 */ bispsw $(Z|V|C) /*turn zero, overflow, & carry ON */ cmpb $-2,r4 /*execute compare data to reg */ beql error6 /*error if Z = 1 */ bgeq error6 /*error if N = 0 */ bvs error6 /*error if V = 1 */ bcc error6 /*error if C = 0 */ jmp c7 error6: movpsl _actual /* actual data psl MAYBE is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag miscompare */ jmp *badrtn /* */ /* different patterns for source1 & source2 */ /* */ c7: bbs $0,_force_lp,0b /* if set loop on last subtest */ ac7: callf $4,_setjmp /* save context for error return */ movab ac7,_stpc /* save address of subtest start */ movl $7,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $SRC1B7,_opr /* first operand */ movl $SRC2B7,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRC1B7,r3 /*tloc1 = source1 */ movl $SRC2B7,r4 /*tloc2 = source2 */ bispsw $(Z|V|C) /*turn zero, overflow, & carry ON */ cmpb r3,r4 /*execute compare reg to reg */ beql error7 /*error if Z = 1 */ blss error7 /*error if N = 1 */ bvs error7 /*error if V = 1 */ bcc error7 /*error if C = 0 */ jmp cmpbc error7: movpsl _actual /* actual data psl MAYBE is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag miscompare */ jmp *badrtn cmpbc: bbs $0,_force_lp,0b /* if set loop on last subtest */ ac8: callf $4,_setjmp /* save context for error return */ movab ac8,_stpc /* save address of subtest start */ movl $8,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $SRC1B8,_opr /* first operand */ movl $-2,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRC1B8,r3 /*tloc1 = source1 */ bispsw $(Z|V|N) /*turn zero, overflow, & neg ON */ cmpb r3,$-2 /*execute compare reg to data */ beql error8 /*error if Z = 1 */ blss error8 /*error if N = 1 */ bvs error8 /*error if V = 1 */ bcs error8 /*error if C = 1 */ jmp c9 error8: movpsl _actual /* actual data psl MAYBE is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag miscompare */ jmp *badrtn /* */ /* different patterns for source1 & source2 */ /* */ c9: bbs $0,_force_lp,0b /* if set loop on last subtest */ ac9: callf $4,_setjmp /* save context for error return */ movab ac9,_stpc /* save address of subtest start */ movl $9,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $SRC1B9,_opr /* first operand */ movl $SRC2B9,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRC1B9,tloc1 /*tloc1 = source1 */ movl $SRC2B9,tloc2 /*tloc2 = source2 */ bispsw $(Z|V|N) /*turn zero, overflow, & neg ON */ cmpb tloc1+3,tloc2+3 /*execute compare */ beql error9 /*error if Z = 1 */ blss error9 /*error if N = 1 */ bvs error9 /*error if V = 1 */ bcs error9 /*error if C = 1 */ jmp c10 error9: movpsl _actual /* actual data psl MAYBE is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag miscompare */ jmp *badrtn /* */ /* different patterns for source1 & source2 */ /* */ c10: bbs $0,_force_lp,0b /* if set loop on last subtest */ ac10: callf $4,_setjmp /* save context for error return */ movab ac10,_stpc /* save address of subtest start */ movl $0xa,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $SRC1B10,_opr /* first operand */ movl $SRC2B10,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRC1B10,tloc1 /*tloc1 = source1 */ movl $SRC2B10,tloc2 /*tloc2 = source2 */ bispsw $(Z|V|N) /*turn zero, overflow, & neg ON */ cmpb tloc1+3,tloc2+3 /*execute compare */ jeql error10 /*error if Z = 1 */ jlss error10 /*error if N = 1 */ jvs error10 /*error if V = 1 */ jcs error10 /*error if C = 1 */ jmp cmpboff error10: movpsl _actual /* actual data psl MAYBE is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag miscompare */ jmp *badrtn cmpboff: bbs $0,_force_lp,0b /* if set loop on last subtest */ ac11: callf $4,_setjmp /* save context for error return */ movab ac11,_stpc /* save address of subtest start */ movl $0xb,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $SRC1B11,_opr /* first operand */ movl $SRC2B11,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRC1B11,tloc1 /*tloc1 = source1 */ movl $SRC2B11,tloc2 /*tloc2 = source2 */ bispsw $(Z|N|V|C) /*turn Z, neg, overflow, & carry ON */ cmpb tloc1+3,tloc2+3 /*execute compare */ beql error11 /*error if Z = 1 */ blss error11 /*error if N = 1 */ bvs error11 /*error if V = 1 */ bcc error11 /*error if C = 0 */ jmp cmpboff1 error11: movpsl _actual /* actual data psl MAYBE is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag miscompare */ jmp *badrtn cmpboff1: bbs $0,_force_lp,0b /* if set loop on last subtest */ ac12: callf $4,_setjmp /* save context for error return */ movab ac12,_stpc /* save address of subtest start */ movl $0xc,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $SRC1B12,_opr /* first operand */ movl $SRC2B12,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRC1B12,tloc1 /*tloc1 = source1 */ movl $SRC2B12,tloc2 /*tloc2 = source2 */ bispsw $(Z|N|V|C) /*turn Z, neg, overflow, & carry ON */ cmpb tloc1+3,tloc2+3 /*execute compare */ beql error12 /*error if Z = 1 */ blss error12 /*error if N = 1 */ bvs error12 /*error if V = 1 */ bcc error12 /*error if C = 0 */ jmp aldn error12: movpsl _actual /* actual data psl MAYBE is incorrect */ bbs $0,_scoplp,0b /* if set scope loop on error */ movl $2,_ercode /* error code flag miscompare */ jmp *badrtn aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */ jmp *return /* good, return to monitor */ /* Variables */ .align 2 tloc1: .space 4 tloc2: .space 4 /* end of file */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.