[PATCH] [ARC] PR 88409: miscompilation due to missing cc clobber in longlong.h macros
Vineet Gupta
vineet.gupta1@synopsys.com
Wed Apr 3 17:28:00 GMT 2019
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 <vineet.gupta1@synopsys.com> 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 <vgupta@synopsys.com>
>>
>> PR 89877
>>
>> * longlong.h [__arc__] (add_ssaaaa): Add cc clobber
>> (sub_ddmmss): Likewise.
>>
>> Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
>> ---
>> 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 <vgupta@synopsys.com>
>> +
>> + PR 89877
>> +
>> + * longlong.h [__arc__] (add_ssaaaa): Add cc clobber
>> + (sub_ddmmss): Likewise.
>> +
>> 2019-02-11 Philippe Waroquiers <philippe.waroquiers@skynet.be>
>>
>> * 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
>>
More information about the Gcc-patches
mailing list