Re: [PATCH] [ARC] PR 88409: miscompilation due to missing cc clobber in longlong.h macros

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Pushed, thank you for your contribution,
Claudiu

On Tue, Apr 2, 2019 at 9:27 PM Vineet Gupta <vineet.gupta1@xxxxxxxxxxxx> 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@xxxxxxxxxxxx>
>
>         PR 89877
>
>         * longlong.h [__arc__] (add_ssaaaa): Add cc clobber
>         (sub_ddmmss): Likewise.
>
> Signed-off-by: Vineet Gupta <vgupta@xxxxxxxxxxxx>
> ---
>  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@xxxxxxxxxxxx>
> +
> +       PR 89877
> +
> +       * longlong.h [__arc__] (add_ssaaaa): Add cc clobber
> +       (sub_ddmmss): Likewise.
> +
>  2019-02-11  Philippe Waroquiers  <philippe.waroquiers@xxxxxxxxx>
>
>         * 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
>

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/linux-snps-arc



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux