[libc-commits] [libc] e264548 - [libc][obvious] Fix x86 long double conversion to integer.
Siva Chandra Reddy via libc-commits
libc-commits at lists.llvm.org
Wed Aug 19 15:02:32 PDT 2020
Author: Siva Chandra Reddy
Date: 2020-08-19T14:48:55-07:00
New Revision: e2645488ca3b18dfb4f5cc8d7494a208f89e91a0
URL: https://github.com/llvm/llvm-project/commit/e2645488ca3b18dfb4f5cc8d7494a208f89e91a0
DIFF: https://github.com/llvm/llvm-project/commit/e2645488ca3b18dfb4f5cc8d7494a208f89e91a0.diff
LOG: [libc][obvious] Fix x86 long double conversion to integer.
Fixes incorrectly constructed ceill tests.
Added:
Modified:
libc/test/src/math/ceill_test.cpp
libc/utils/FPUtil/LongDoubleBitsX86.h
Removed:
################################################################################
diff --git a/libc/test/src/math/ceill_test.cpp b/libc/test/src/math/ceill_test.cpp
index ad1e16b57359..c1a385fff6ac 100644
--- a/libc/test/src/math/ceill_test.cpp
+++ b/libc/test/src/math/ceill_test.cpp
@@ -47,25 +47,25 @@ TEST(CeillTest, RoundedNumbers) {
}
TEST(CeillTest, Fractions) {
- EXPECT_FP_EQ(0.0l, __llvm_libc::ceill(0.5l));
+ EXPECT_FP_EQ(1.0l, __llvm_libc::ceill(0.5l));
EXPECT_FP_EQ(-0.0l, __llvm_libc::ceill(-0.5l));
- EXPECT_FP_EQ(0.0l, __llvm_libc::ceill(0.115l));
+ EXPECT_FP_EQ(1.0l, __llvm_libc::ceill(0.115l));
EXPECT_FP_EQ(-0.0l, __llvm_libc::ceill(-0.115l));
- EXPECT_FP_EQ(0.0l, __llvm_libc::ceill(0.715l));
+ EXPECT_FP_EQ(1.0l, __llvm_libc::ceill(0.715l));
EXPECT_FP_EQ(-0.0l, __llvm_libc::ceill(-0.715l));
- EXPECT_FP_EQ(1.0l, __llvm_libc::ceill(1.3l));
+ EXPECT_FP_EQ(2.0l, __llvm_libc::ceill(1.3l));
EXPECT_FP_EQ(-1.0l, __llvm_libc::ceill(-1.3l));
- EXPECT_FP_EQ(1.0l, __llvm_libc::ceill(1.5l));
+ EXPECT_FP_EQ(2.0l, __llvm_libc::ceill(1.5l));
EXPECT_FP_EQ(-1.0l, __llvm_libc::ceill(-1.5l));
- EXPECT_FP_EQ(1.0l, __llvm_libc::ceill(1.75l));
+ EXPECT_FP_EQ(2.0l, __llvm_libc::ceill(1.75l));
EXPECT_FP_EQ(-1.0l, __llvm_libc::ceill(-1.75l));
- EXPECT_FP_EQ(10.0l, __llvm_libc::ceill(10.32l));
+ EXPECT_FP_EQ(11.0l, __llvm_libc::ceill(10.32l));
EXPECT_FP_EQ(-10.0l, __llvm_libc::ceill(-10.32l));
- EXPECT_FP_EQ(10.0l, __llvm_libc::ceill(10.65l));
+ EXPECT_FP_EQ(11.0l, __llvm_libc::ceill(10.65l));
EXPECT_FP_EQ(-10.0l, __llvm_libc::ceill(-10.65l));
- EXPECT_FP_EQ(1234.0l, __llvm_libc::ceill(1234.38l));
+ EXPECT_FP_EQ(1235.0l, __llvm_libc::ceill(1234.38l));
EXPECT_FP_EQ(-1234.0l, __llvm_libc::ceill(-1234.38l));
- EXPECT_FP_EQ(1234.0l, __llvm_libc::ceill(1234.96l));
+ EXPECT_FP_EQ(1235.0l, __llvm_libc::ceill(1234.96l));
EXPECT_FP_EQ(-1234.0l, __llvm_libc::ceill(-1234.96l));
}
diff --git a/libc/utils/FPUtil/LongDoubleBitsX86.h b/libc/utils/FPUtil/LongDoubleBitsX86.h
index 4d64490c5a11..482c4de941f1 100644
--- a/libc/utils/FPUtil/LongDoubleBitsX86.h
+++ b/libc/utils/FPUtil/LongDoubleBitsX86.h
@@ -96,8 +96,8 @@ template <> struct __attribute__((packed)) FPBits<long double> {
// there can be garbage bits in the padding. So, we zero the padding bits
// in |result|.
static constexpr UIntType mask =
- (UIntType(1) << (sizeof(long double) -
- Padding<sizeof(uintptr_t)>::value / 8)) -
+ (UIntType(1) << (sizeof(long double) * 8 -
+ Padding<sizeof(uintptr_t)>::value)) -
1;
return result & mask;
}
More information about the libc-commits
mailing list