Message ID | 20170915134656.1277-1-tuliom@linux.vnet.ibm.com |
---|---|
State | New |
Headers | show |
Series | [BZ,#22142] powerpc: Fix the carry bit on mpn_[add|sub]_n on POWER7 | expand |
On 15/09/2017 10:46, Tulio Magno Quites Machado Filho wrote: > Fix the ifdef clause that was being used in the opposite way, setting > a wrong value of the carry bit. > > This is also correcting 2 memory accesses that were mistakenly referring > to r0 while they were supposed to mean the immediate value 0. > > 2017-09-15 Tulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com> > > [BZ #22142] > * stdio-common/tst-printf.c (fp_test): Add tests for DBL_MAX and > -DBL_MAX. > (do_test): Likewise. > * stdio-common/tst-printf.sh: Likewise. > * sysdeps/powerpc/powerpc64/power7/add_n.S: Invert the initial > ifdef clause in order to set the carry bit right. Replace r0 by > 0 without changing the behavior. LGTM, this is sync with GMP code mpn/powerpc64/mode64/p7/aors_n.asm. > --- > stdio-common/tst-printf.c | 4 ++++ > stdio-common/tst-printf.sh | 8 ++++++++ > sysdeps/powerpc/powerpc64/power7/add_n.S | 8 ++++---- > 3 files changed, 16 insertions(+), 4 deletions(-) > > diff --git a/stdio-common/tst-printf.c b/stdio-common/tst-printf.c > index b6d62a5..162effa 100644 > --- a/stdio-common/tst-printf.c > +++ b/stdio-common/tst-printf.c > @@ -136,6 +136,8 @@ fp_test (void) > } > printf("%10s\n", (char *) NULL); > printf("%-10s\n", (char *) NULL); > + printf("%.8f\n", DBL_MAX); > + printf("%.8f\n", -DBL_MAX); > } > > static int > @@ -181,6 +183,8 @@ I am ready for my first lesson today."; > printf("null string:\t\"%s\"\n", (char *)NULL); > printf("limited string:\t\"%.22s\"\n", longstr); > > + printf("a-style max:\t\"%a\"\n", DBL_MAX); > + printf("a-style -max:\t\"%a\"\n", -DBL_MAX); > printf("e-style >= 1:\t\"%e\"\n", 12.34); > printf("e-style >= .1:\t\"%e\"\n", 0.1234); > printf("e-style < .1:\t\"%e\"\n", 0.001234); > diff --git a/stdio-common/tst-printf.sh b/stdio-common/tst-printf.sh > index c413980..48cb62c 100644 > --- a/stdio-common/tst-printf.sh > +++ b/stdio-common/tst-printf.sh > @@ -57,6 +57,8 @@ space-padded string: " Hi, Z." > left-adjusted S string: "Hi, Z. " > null string: "(null)" > limited string: "Good morning, Doctor C" > +a-style max: "0x1.fffffffffffffp+1023" > +a-style -max: "-0x1.fffffffffffffp+1023" > e-style >= 1: "1.234000e+01" > e-style >= .1: "1.234000e-01" > e-style < .1: "1.234000e-03" > @@ -124,6 +126,8 @@ prefix 6d 6o 6x 6X 6u > % | -123 | 377 | ff | FF |4294967295 | > (null) > (null) > +179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.00000000 > +-179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.00000000 > 1.234568e+06 should be 1.234568e+06 > 1234567.800000 should be 1234567.800000 > 1.23457e+06 should be 1.23457e+06 > @@ -173,6 +177,8 @@ space-padded string: " Hi, Z." > left-adjusted S string: "Hi, Z. " > null string: "(null)" > limited string: "Good morning, Doctor C" > +a-style max: "0x1.fffffffffffffp+1023" > +a-style -max: "-0x1.fffffffffffffp+1023" > e-style >= 1: "1.234000e+01" > e-style >= .1: "1.234000e-01" > e-style < .1: "1.234000e-03" > @@ -240,6 +246,8 @@ prefix 6d 6o 6x 6X 6u > % | -123 | 377 | ff | FF |4294967295 | > (null) > (null) > +179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.00000000 > +-179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.00000000 > 1.234568e+06 should be 1.234568e+06 > 1234567.800000 should be 1234567.800000 > 1.23457e+06 should be 1.23457e+06 > diff --git a/sysdeps/powerpc/powerpc64/power7/add_n.S b/sysdeps/powerpc/powerpc64/power7/add_n.S > index 02335c1..88aec84 100644 > --- a/sysdeps/powerpc/powerpc64/power7/add_n.S > +++ b/sysdeps/powerpc/powerpc64/power7/add_n.S > @@ -38,17 +38,17 @@ > > ENTRY_TOCLESS (FUNC, 5) > #ifdef USE_AS_SUB > - addic r0, r0, 0 > + addic r0, r1, -1 > #else > - addic r0, r1, -1 > + addic r0, r0, 0 > #endif > andi. r7, N, 1 > beq L(bx0) > > ld r7, 0(UP) > - ld r9, r0(VP) > + ld r9, 0(VP) > ADDSUBC r11, r9, r7 > - std r11, r0(RP) > + std r11, 0(RP) > cmpldi N, N, 1 > beq N, L(end) > addi UP, UP, 8 >
diff --git a/stdio-common/tst-printf.c b/stdio-common/tst-printf.c index b6d62a5..162effa 100644 --- a/stdio-common/tst-printf.c +++ b/stdio-common/tst-printf.c @@ -136,6 +136,8 @@ fp_test (void) } printf("%10s\n", (char *) NULL); printf("%-10s\n", (char *) NULL); + printf("%.8f\n", DBL_MAX); + printf("%.8f\n", -DBL_MAX); } static int @@ -181,6 +183,8 @@ I am ready for my first lesson today."; printf("null string:\t\"%s\"\n", (char *)NULL); printf("limited string:\t\"%.22s\"\n", longstr); + printf("a-style max:\t\"%a\"\n", DBL_MAX); + printf("a-style -max:\t\"%a\"\n", -DBL_MAX); printf("e-style >= 1:\t\"%e\"\n", 12.34); printf("e-style >= .1:\t\"%e\"\n", 0.1234); printf("e-style < .1:\t\"%e\"\n", 0.001234); diff --git a/stdio-common/tst-printf.sh b/stdio-common/tst-printf.sh index c413980..48cb62c 100644 --- a/stdio-common/tst-printf.sh +++ b/stdio-common/tst-printf.sh @@ -57,6 +57,8 @@ space-padded string: " Hi, Z." left-adjusted S string: "Hi, Z. " null string: "(null)" limited string: "Good morning, Doctor C" +a-style max: "0x1.fffffffffffffp+1023" +a-style -max: "-0x1.fffffffffffffp+1023" e-style >= 1: "1.234000e+01" e-style >= .1: "1.234000e-01" e-style < .1: "1.234000e-03" @@ -124,6 +126,8 @@ prefix 6d 6o 6x 6X 6u % | -123 | 377 | ff | FF |4294967295 | (null) (null) +179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.00000000 +-179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.00000000 1.234568e+06 should be 1.234568e+06 1234567.800000 should be 1234567.800000 1.23457e+06 should be 1.23457e+06 @@ -173,6 +177,8 @@ space-padded string: " Hi, Z." left-adjusted S string: "Hi, Z. " null string: "(null)" limited string: "Good morning, Doctor C" +a-style max: "0x1.fffffffffffffp+1023" +a-style -max: "-0x1.fffffffffffffp+1023" e-style >= 1: "1.234000e+01" e-style >= .1: "1.234000e-01" e-style < .1: "1.234000e-03" @@ -240,6 +246,8 @@ prefix 6d 6o 6x 6X 6u % | -123 | 377 | ff | FF |4294967295 | (null) (null) +179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.00000000 +-179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.00000000 1.234568e+06 should be 1.234568e+06 1234567.800000 should be 1234567.800000 1.23457e+06 should be 1.23457e+06 diff --git a/sysdeps/powerpc/powerpc64/power7/add_n.S b/sysdeps/powerpc/powerpc64/power7/add_n.S index 02335c1..88aec84 100644 --- a/sysdeps/powerpc/powerpc64/power7/add_n.S +++ b/sysdeps/powerpc/powerpc64/power7/add_n.S @@ -38,17 +38,17 @@ ENTRY_TOCLESS (FUNC, 5) #ifdef USE_AS_SUB - addic r0, r0, 0 + addic r0, r1, -1 #else - addic r0, r1, -1 + addic r0, r0, 0 #endif andi. r7, N, 1 beq L(bx0) ld r7, 0(UP) - ld r9, r0(VP) + ld r9, 0(VP) ADDSUBC r11, r9, r7 - std r11, r0(RP) + std r11, 0(RP) cmpldi N, N, 1 beq N, L(end) addi UP, UP, 8