aboutsummaryrefslogtreecommitdiff
path: root/stdlib
diff options
context:
space:
mode:
authorVineet Gupta <vgupta@synopsys.com>2019-03-28 15:24:35 -0700
committerVineet Gupta <vgupta@synopsys.com>2020-03-10 18:57:28 -0700
commita9f4703d9341507b5a25924de1410df5bf260adc (patch)
tree103c55456f475fd9557557c9aca64d7323badb8a /stdlib
parentd8faf2955aeea873fb6878f888dce4632bc4ba5c (diff)
downloadglibc-a9f4703d9341507b5a25924de1410df5bf260adc.tar
glibc-a9f4703d9341507b5a25924de1410df5bf260adc.tar.gz
glibc-a9f4703d9341507b5a25924de1410df5bf260adc.tar.bz2
glibc-a9f4703d9341507b5a25924de1410df5bf260adc.zip
gcc PR 89877: 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: Vineet Gupta <vgupta@synopsys.com>
Diffstat (limited to 'stdlib')
-rw-r--r--stdlib/longlong.h6
1 files changed, 4 insertions, 2 deletions
diff --git a/stdlib/longlong.h b/stdlib/longlong.h
index ee4aac1bb5..638b7894d4 100644
--- a/stdlib/longlong.h
+++ b/stdlib/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__