diff options
author | Vineet Gupta <vgupta@synopsys.com> | 2019-03-28 15:24:35 -0700 |
---|---|---|
committer | Vineet Gupta <vgupta@synopsys.com> | 2020-03-10 18:57:28 -0700 |
commit | a9f4703d9341507b5a25924de1410df5bf260adc (patch) | |
tree | 103c55456f475fd9557557c9aca64d7323badb8a /stdlib | |
parent | d8faf2955aeea873fb6878f888dce4632bc4ba5c (diff) | |
download | glibc-a9f4703d9341507b5a25924de1410df5bf260adc.zip glibc-a9f4703d9341507b5a25924de1410df5bf260adc.tar.gz glibc-a9f4703d9341507b5a25924de1410df5bf260adc.tar.bz2 |
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.h | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/stdlib/longlong.h b/stdlib/longlong.h index ee4aac1..638b789 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__ |