|
|
Power 6/32 Unix version 1.2b
/* CMPL (compare long) test */ /* */ /*Test name = cmpl */ /*Description = */ /* This test checks 'cmpl' 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 .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_l _cmp_l: callf $4,_setjmp /* save context for error return */ movab _cmp_l,_stpc /* save address of subtest start */ movl $1,_subtst /* subtest number */ movl $2,_no_opr /* number of operands in use */ movl $SRC1L1,_opr /* first operand */ movl $SRC2L1,_opr + 4 /* second operand */ 0: movl $SRC1L1,tloc1 /*tloc1 = source1 */ movl $SRC2L1,tloc2 /*tloc2 = source2 */ bicpsw $PSWMASK /*disable overflow & other enable bits */ bispsw $(N|V|C) /*turn neg, overflow, & carry ON */ cmpl tloc1,tloc2 /*execute compare mem to mem */ 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 failure */ jmp *badrtn 1: bicpsw $Z /*clear Z flag */ cmpl $SRC1L1,tloc1 /*check tloc1 & tlco2 unchanged */ jeql 1f bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand was changed */ movl tloc1,_actual /* actual data */ movl $SRC1L1,_expected /* expected data */ jmp *badrtn 1: bicpsw $Z cmpl $SRC2L1,tloc2 jeql c2 bbs $0,_scoplp,0b /* if set scope loop on error */ movl $3,_ercode /* error code operand was changed */ movl tloc2,_actual /* actual data */ movl $SRC2L1,_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 $SRC1L2,_opr /* first operand */ movl $SRC2L2,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRC1L2,r3 /*tloc1 = source1 */ movl $SRC2L2,tloc2 /*tloc2 = source2 */ bispsw $(N|V|C) /*turn neg, overflow, & carry ON */ cmpl r3,tloc2 /*execute compare reg to mem */ 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 cmplnc 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 failure */ jmp *badrtn cmplnc: 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 $SRC1L3,_opr /* first operand */ movl $SRC2L3,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRC1L3,tloc1 /*tloc1 = source1 */ movl $SRC2L3,r4 /*tloc2 = source2 */ bispsw $(Z|V) /*turn overflow, & zero ON */ cmpl tloc1,r4 /*execute compare memory to reg4 */ 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 failure */ 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 $SRC1L4,_opr /* first operand */ movl $SRC2L4,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRC1L4,r3 /*tloc1 = source1 */ movl $SRC2L4,r4 /*tloc2 = source2 */ bispsw $(Z|V) /*turn overflow, & zero ON */ cmpl r3,r4 /*execute compare reg to reg */ beql error4 /*error if Z = 1 */ bgeq error4 /*error if N = 0 */ bvs error4 /*error if V = 1 */ bcs error4 /*error if C = 1 */ jmp cmpln 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 failure */ jmp *badrtn cmpln: 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 $SRC1L5,_opr /* first operand */ movl $SRC2L5,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRC1L5,tloc1 /*tloc1 = source1 */ movl $SRC2L5,tloc2 /*tloc2 = source2 */ bispsw $(Z|V|C) /*turn zero, overflow, & carry ON */ cmpl tloc1,tloc2 /*execute compare */ beql error5 /*error if Z = 1 */ bgeq error5 /*error if N = 0 */ 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 failure */ 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 $SRC1L6,_opr /* first operand */ movl $SRC2L6,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRC1L6,tloc1 /*tloc1 = source1 */ movl $SRC2L6,tloc2 /*tloc2 = source2 */ bispsw $(Z|V|C) /*turn zero, overflow, & carry ON */ cmpl tloc1,tloc2 /*execute compare */ 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 failure */ 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 $SRC1L7,_opr /* first operand */ movl $SRC2L7,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRC1L7,tloc1 /*tloc1 = source1 */ movl $SRC2L7,tloc2 /*tloc2 = source2 */ bispsw $(Z|V|C) /*turn zero, overflow, & carry ON */ cmpl tloc1,tloc2 /*execute compare */ beql error7 /*error if Z = 1 */ bgeq error7 /*error if N = 0 */ bvs error7 /*error if V = 1 */ bcc error7 /*error if C = 0 */ jmp cmplc 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 failure */ jmp *badrtn cmplc: 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 $SRC1L8,_opr /* first operand */ movl $SRC2L8,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRC1L8,tloc1 /*tloc1 = source1 */ movl $SRC2L8,tloc2 /*tloc2 = source2 */ bispsw $(Z|V|N) /*turn zero, overflow, & neg ON */ cmpl tloc1,tloc2 /*execute compare */ 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 failure */ 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 $SRC1L9,_opr /* first operand */ movl $SRC2L9,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRC1L9,tloc1 /*tloc1 = source1 */ movl $SRC2L9,tloc2 /*tloc2 = source2 */ bispsw $(Z|V|N) /*turn zero, overflow, & neg ON */ cmpl tloc1,tloc2 /*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 failure */ 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 $SRC1L10,_opr /* first operand */ movl $SRC2L10,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRC1L10,tloc1 /*tloc1 = source1 */ movl $SRC2L10,tloc2 /*tloc2 = source2 */ bispsw $(Z|V|N) /*turn zero, overflow, & neg ON */ cmpl tloc1,tloc2 /*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 cmploff 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 failure */ jmp *badrtn cmploff: 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 $SRC1L11,_opr /* first operand */ movl $SRC2L11,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRC1L11,tloc1 /*tloc1 = source1 */ movl $SRC2L11,tloc2 /*tloc2 = source2 */ bispsw $(Z|N|V|C) /*turn Z, neg, overflow, & carry ON */ cmpl tloc1,tloc2 /*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 cmploff1 jmp cmploff 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 failure */ jmp *badrtn cmploff1: 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 $SRC1L12,_opr /* first operand */ movl $SRC2L12,_opr + 4 /* second operand */ 0: bicpsw $PSWMASK /*disable overflow & other enable bits */ movl $SRC1L12,tloc1 /*tloc1 = source1 */ movl $SRC2L12,tloc2 /*tloc2 = source2 */ bispsw $(Z|N|V|C) /*turn Z, neg, overflow, & carry ON */ cmpl tloc1,tloc2 /*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 failure */ 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.