[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 <vgupta@synopsys.com>

        PR 89877

        * longlong.h [__arc__] (add_ssaaaa): Add cc clobber
        (sub_ddmmss): Likewise.

Signed-off-by: Claudiu Zissulescu <claziss@gmail.com>

From-SVN: r270118
This commit is contained in:
Vineet Gupta 2019-04-03 09:53:03 +00:00 committed by Claudiu Zissulescu
parent 59e36c85e7
commit 67a9a71183
2 changed files with 10 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2019-04-03 Vineet Gupta <vgupta@synopsys.com>
PR89877
* 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.

View File

@ -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__