Re: [PATCH] [ARC] PR 88409: miscompilation due to missing cc clobber in longlong.h macros
Done. On Wed, Apr 3, 2019 at 8:28 PM Vineet Gupta wrote: > > On 4/3/19 2:53 AM, Claudiu Zissulescu wrote: > > Pushed, thank you for your contribution, > > Claudiu > > Thx, can this be backported to gcc-8-stable please which is what glibc folks > use > for testing ! > > -Vineet > > > > > On Tue, Apr 2, 2019 at 9:27 PM Vineet Gupta > > wrote: > >> simple test such as below was failing. > >> > >> | void main(int argc, char *argv[]) > >> | { > >> |size_t total_time = 115424; // expected 115.424 > >> |double secs = (double)total_time/(double)1000; > >> |printf("%s %d %lf\n", "secs", total_time, secs); // prints 113.504 > >> |printf("%d\n", (size_t)secs); > >> | } > >> > >> The printf eventually called into glibc stdlib/divrem.c:__mpn_divrem() > >> which uses the __arc__ specific inline asm macros from longlong.h which > >> were causing miscompilation. > >> > >> include/ > >> 2019-03-28 Vineet Gupta > >> > >> PR 89877 > >> > >> * longlong.h [__arc__] (add_ss): Add cc clobber > >> (sub_ddmmss): Likewise. > >> > >> Signed-off-by: Vineet Gupta > >> --- > >> include/ChangeLog | 7 +++ > >> include/longlong.h | 6 -- > >> 2 files changed, 11 insertions(+), 2 deletions(-) > >> > >> diff --git a/include/ChangeLog b/include/ChangeLog > >> index be08141deeb9..96d967d10a52 100644 > >> --- a/include/ChangeLog > >> +++ b/include/ChangeLog > >> @@ -1,3 +1,10 @@ > >> +2019-03-28 Vineet Gupta > >> + > >> + PR 89877 > >> + > >> + * longlong.h [__arc__] (add_ss): Add cc clobber > >> + (sub_ddmmss): Likewise. > >> + > >> 2019-02-11 Philippe Waroquiers > >> > >> * splay-tree.h (splay_tree_delete_key_fn): Update comment. > >> diff --git a/include/longlong.h b/include/longlong.h > >> index 3dd8dc3aa80c..1f0ce4204255 100644 > >> --- a/include/longlong.h > >> +++ b/include/longlong.h > >> @@ -199,7 +199,8 @@ extern UDItype __udiv_qrnnd (UDItype *, UDItype, > >> UDItype, UDItype); > >>: "%r" ((USItype) (ah)), \ > >> "rICal" ((USItype) (bh)), \ > >> "%r" ((USItype) (al)), \ > >> -"rICal" ((USItype) (bl))) > >> +"rICal" ((USItype) (bl)) \ > >> + : "cc") > >> #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ > >>__asm__ ("sub.f %1, %4, %5\n\tsbc %0, %2, %3" \ > >>: "=r" ((USItype) (sh)), \ > >> @@ -207,7 +208,8 @@ extern UDItype __udiv_qrnnd (UDItype *, UDItype, > >> UDItype, UDItype); > >>: "r" ((USItype) (ah)), \ > >> "rICal" ((USItype) (bh)), \ > >> "r" ((USItype) (al)), \ > >> -"rICal" ((USItype) (bl))) > >> +"rICal" ((USItype) (bl)) \ > >> + : "cc") > >> > >> #define __umulsidi3(u,v) ((UDItype)(USItype)u*(USItype)v) > >> #ifdef __ARC_NORM__ > >> -- > >> 2.7.4 > >> >
Re: [PATCH] [ARC] PR 88409: miscompilation due to missing cc clobber in longlong.h macros
On 4/3/19 2:53 AM, Claudiu Zissulescu wrote: > Pushed, thank you for your contribution, > Claudiu Thx, can this be backported to gcc-8-stable please which is what glibc folks use for testing ! -Vineet > > On Tue, Apr 2, 2019 at 9:27 PM Vineet Gupta > wrote: >> simple test such as below was failing. >> >> | void main(int argc, char *argv[]) >> | { >> |size_t total_time = 115424; // expected 115.424 >> |double secs = (double)total_time/(double)1000; >> |printf("%s %d %lf\n", "secs", total_time, secs); // prints 113.504 >> |printf("%d\n", (size_t)secs); >> | } >> >> The printf eventually called into glibc stdlib/divrem.c:__mpn_divrem() >> which uses the __arc__ specific inline asm macros from longlong.h which >> were causing miscompilation. >> >> include/ >> 2019-03-28 Vineet Gupta >> >> PR 89877 >> >> * longlong.h [__arc__] (add_ss): Add cc clobber >> (sub_ddmmss): Likewise. >> >> Signed-off-by: Vineet Gupta >> --- >> include/ChangeLog | 7 +++ >> include/longlong.h | 6 -- >> 2 files changed, 11 insertions(+), 2 deletions(-) >> >> diff --git a/include/ChangeLog b/include/ChangeLog >> index be08141deeb9..96d967d10a52 100644 >> --- a/include/ChangeLog >> +++ b/include/ChangeLog >> @@ -1,3 +1,10 @@ >> +2019-03-28 Vineet Gupta >> + >> + PR 89877 >> + >> + * longlong.h [__arc__] (add_ss): Add cc clobber >> + (sub_ddmmss): Likewise. >> + >> 2019-02-11 Philippe Waroquiers >> >> * splay-tree.h (splay_tree_delete_key_fn): Update comment. >> diff --git a/include/longlong.h b/include/longlong.h >> index 3dd8dc3aa80c..1f0ce4204255 100644 >> --- a/include/longlong.h >> +++ b/include/longlong.h >> @@ -199,7 +199,8 @@ extern UDItype __udiv_qrnnd (UDItype *, UDItype, >> UDItype, UDItype); >>: "%r" ((USItype) (ah)), \ >> "rICal" ((USItype) (bh)), \ >> "%r" ((USItype) (al)), \ >> -"rICal" ((USItype) (bl))) >> +"rICal" ((USItype) (bl)) \ >> + : "cc") >> #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ >>__asm__ ("sub.f %1, %4, %5\n\tsbc %0, %2, %3" \ >>: "=r" ((USItype) (sh)), \ >> @@ -207,7 +208,8 @@ extern UDItype __udiv_qrnnd (UDItype *, UDItype, >> UDItype, UDItype); >>: "r" ((USItype) (ah)), \ >> "rICal" ((USItype) (bh)), \ >> "r" ((USItype) (al)), \ >> -"rICal" ((USItype) (bl))) >> +"rICal" ((USItype) (bl)) \ >> + : "cc") >> >> #define __umulsidi3(u,v) ((UDItype)(USItype)u*(USItype)v) >> #ifdef __ARC_NORM__ >> -- >> 2.7.4 >>
Re: [PATCH] [ARC] PR 88409: miscompilation due to missing cc clobber in longlong.h macros
Pushed, thank you for your contribution, Claudiu On Tue, Apr 2, 2019 at 9:27 PM Vineet Gupta wrote: > > simple test such as below was failing. > > | void main(int argc, char *argv[]) > | { > |size_t total_time = 115424; // expected 115.424 > |double secs = (double)total_time/(double)1000; > |printf("%s %d %lf\n", "secs", total_time, secs); // prints 113.504 > |printf("%d\n", (size_t)secs); > | } > > The printf eventually called into glibc stdlib/divrem.c:__mpn_divrem() > which uses the __arc__ specific inline asm macros from longlong.h which > were causing miscompilation. > > include/ > 2019-03-28 Vineet Gupta > > PR 89877 > > * longlong.h [__arc__] (add_ss): Add cc clobber > (sub_ddmmss): Likewise. > > Signed-off-by: Vineet Gupta > --- > include/ChangeLog | 7 +++ > include/longlong.h | 6 -- > 2 files changed, 11 insertions(+), 2 deletions(-) > > diff --git a/include/ChangeLog b/include/ChangeLog > index be08141deeb9..96d967d10a52 100644 > --- a/include/ChangeLog > +++ b/include/ChangeLog > @@ -1,3 +1,10 @@ > +2019-03-28 Vineet Gupta > + > + PR 89877 > + > + * longlong.h [__arc__] (add_ss): Add cc clobber > + (sub_ddmmss): Likewise. > + > 2019-02-11 Philippe Waroquiers > > * splay-tree.h (splay_tree_delete_key_fn): Update comment. > diff --git a/include/longlong.h b/include/longlong.h > index 3dd8dc3aa80c..1f0ce4204255 100644 > --- a/include/longlong.h > +++ b/include/longlong.h > @@ -199,7 +199,8 @@ extern UDItype __udiv_qrnnd (UDItype *, UDItype, UDItype, > UDItype); >: "%r" ((USItype) (ah)), \ > "rICal" ((USItype) (bh)), \ > "%r" ((USItype) (al)), \ > -"rICal" ((USItype) (bl))) > +"rICal" ((USItype) (bl)) \ > + : "cc") > #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ >__asm__ ("sub.f %1, %4, %5\n\tsbc %0, %2, %3" \ >: "=r" ((USItype) (sh)), \ > @@ -207,7 +208,8 @@ extern UDItype __udiv_qrnnd (UDItype *, UDItype, UDItype, > UDItype); >: "r" ((USItype) (ah)), \ > "rICal" ((USItype) (bh)), \ > "r" ((USItype) (al)), \ > -"rICal" ((USItype) (bl))) > +"rICal" ((USItype) (bl)) \ > + : "cc") > > #define __umulsidi3(u,v) ((UDItype)(USItype)u*(USItype)v) > #ifdef __ARC_NORM__ > -- > 2.7.4 >
[PATCH] [ARC] PR 88409: miscompilation due to missing cc clobber in longlong.h macros
simple test such as below was failing. | void main(int argc, char *argv[]) | { |size_t total_time = 115424; // expected 115.424 |double secs = (double)total_time/(double)1000; |printf("%s %d %lf\n", "secs", total_time, secs); // prints 113.504 |printf("%d\n", (size_t)secs); | } The printf eventually called into glibc stdlib/divrem.c:__mpn_divrem() which uses the __arc__ specific inline asm macros from longlong.h which were causing miscompilation. include/ 2019-03-28 Vineet Gupta PR 89877 * longlong.h [__arc__] (add_ss): Add cc clobber (sub_ddmmss): Likewise. Signed-off-by: Vineet Gupta --- include/ChangeLog | 7 +++ include/longlong.h | 6 -- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/include/ChangeLog b/include/ChangeLog index be08141deeb9..96d967d10a52 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,10 @@ +2019-03-28 Vineet Gupta + + PR 89877 + + * longlong.h [__arc__] (add_ss): Add cc clobber + (sub_ddmmss): Likewise. + 2019-02-11 Philippe Waroquiers * splay-tree.h (splay_tree_delete_key_fn): Update comment. diff --git a/include/longlong.h b/include/longlong.h index 3dd8dc3aa80c..1f0ce4204255 100644 --- a/include/longlong.h +++ b/include/longlong.h @@ -199,7 +199,8 @@ extern UDItype __udiv_qrnnd (UDItype *, UDItype, UDItype, UDItype); : "%r" ((USItype) (ah)), \ "rICal" ((USItype) (bh)), \ "%r" ((USItype) (al)), \ -"rICal" ((USItype) (bl))) +"rICal" ((USItype) (bl)) \ + : "cc") #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("sub.f %1, %4, %5\n\tsbc %0, %2, %3" \ : "=r" ((USItype) (sh)), \ @@ -207,7 +208,8 @@ extern UDItype __udiv_qrnnd (UDItype *, UDItype, UDItype, UDItype); : "r" ((USItype) (ah)), \ "rICal" ((USItype) (bh)), \ "r" ((USItype) (al)), \ -"rICal" ((USItype) (bl))) +"rICal" ((USItype) (bl)) \ + : "cc") #define __umulsidi3(u,v) ((UDItype)(USItype)u*(USItype)v) #ifdef __ARC_NORM__ -- 2.7.4
Re: [PATCH] [ARC] PR 88409: miscompilation due to missing cc clobber in longlong.h macros
On 3/28/19 5:07 PM, Marc Glisse wrote: > On Thu, 28 Mar 2019, Vineet Gupta wrote: > >> simple test such as below was failing. >> >> | void main(int argc, char *argv[]) >> | { >> |size_t total_time = 115424; // expected 115.424 >> |double secs = (double)total_time/(double)1000; >> |printf("%s %d %lf\n", "secs", total_time, secs); // prints 113.504 >> |printf("%d\n", (size_t)secs); >> | } >> >> The printf eventually called into glibc stdlib/divrem.c:__mpn_divrem() >> which uses the __arc__ specific inline asm macros from longlong.h which >> were causing miscompilation. > Hello, > > do you intend to post similar patches for glibc and gmp, which both have a > similar longlong.h? Yeah, glibc typically "syncs" longlong.h from gcc so once gcc patch is merged, I'll post a sync patch to glibc. Good tip about gmp, I wasn't aware of that. I suppose I could post there too once dust settles on gcc side. Thx, -Vinet
Re: [PATCH] [ARC] PR 88409: miscompilation due to missing cc clobber in longlong.h macros
On Thu, 28 Mar 2019, Vineet Gupta wrote: simple test such as below was failing. | void main(int argc, char *argv[]) | { |size_t total_time = 115424; // expected 115.424 |double secs = (double)total_time/(double)1000; |printf("%s %d %lf\n", "secs", total_time, secs); // prints 113.504 |printf("%d\n", (size_t)secs); | } The printf eventually called into glibc stdlib/divrem.c:__mpn_divrem() which uses the __arc__ specific inline asm macros from longlong.h which were causing miscompilation. Hello, do you intend to post similar patches for glibc and gmp, which both have a similar longlong.h? -- Marc Glisse
[PATCH] [ARC] PR 88409: miscompilation due to missing cc clobber in longlong.h macros
simple test such as below was failing. | void main(int argc, char *argv[]) | { |size_t total_time = 115424; // expected 115.424 |double secs = (double)total_time/(double)1000; |printf("%s %d %lf\n", "secs", total_time, secs); // prints 113.504 |printf("%d\n", (size_t)secs); | } The printf eventually called into glibc stdlib/divrem.c:__mpn_divrem() which uses the __arc__ specific inline asm macros from longlong.h which were causing miscompilation. include/ 2019-03-28 Vineet Gupta PR 89877 * longlong.h [__arc__] (add_ss): Add cc clobber (sub_ddmmss): Likewise. Signed-off-by: Vineet Gupta --- include/ChangeLog | 7 +++ include/longlong.h | 6 -- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/include/ChangeLog b/include/ChangeLog index be08141deeb9..96d967d10a52 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,10 @@ +2019-03-28 Vineet Gupta + + PR 89877 + + * longlong.h [__arc__] (add_ss): Add cc clobber + (sub_ddmmss): Likewise. + 2019-02-11 Philippe Waroquiers * splay-tree.h (splay_tree_delete_key_fn): Update comment. diff --git a/include/longlong.h b/include/longlong.h index 3dd8dc3aa80c..1f0ce4204255 100644 --- a/include/longlong.h +++ b/include/longlong.h @@ -199,7 +199,8 @@ extern UDItype __udiv_qrnnd (UDItype *, UDItype, UDItype, UDItype); : "%r" ((USItype) (ah)), \ "rICal" ((USItype) (bh)), \ "%r" ((USItype) (al)), \ -"rICal" ((USItype) (bl))) +"rICal" ((USItype) (bl)) \ + : "cc") #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("sub.f %1, %4, %5\n\tsbc %0, %2, %3" \ : "=r" ((USItype) (sh)), \ @@ -207,7 +208,8 @@ extern UDItype __udiv_qrnnd (UDItype *, UDItype, UDItype, UDItype); : "r" ((USItype) (ah)), \ "rICal" ((USItype) (bh)), \ "r" ((USItype) (al)), \ -"rICal" ((USItype) (bl))) +"rICal" ((USItype) (bl)) \ + : "cc") #define __umulsidi3(u,v) ((UDItype)(USItype)u*(USItype)v) #ifdef __ARC_NORM__ -- 2.7.4