mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-23 17:29:19 +00:00
[APFloat] Added isFiniteNonZero predicate.
This is the first patch in a series of patches to rename isNormal => isFiniteNonZero and isIEEENormal => isNormal. In order to prevent careless errors on my part the overall plan is: 1. Add the isFiniteNonZero predicate with tests. I can do this in a method independent of isNormal. (This step is this patch). 2. Convert all references to isNormal with isFiniteNonZero. My plan is to comment out isNormal locally and continually convert isNormal references => isFiniteNonZero until llvm/clang compiles. 3. Remove old isNormal and rename isIEEENormal to isNormal. 4. Look through all of said references from patch 2 and see if we can simplify them by using the new isNormal. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184350 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ea44281d5d
commit
7032c883cd
@ -395,6 +395,7 @@ public:
|
|||||||
const fltSemantics &getSemantics() const { return *semantics; }
|
const fltSemantics &getSemantics() const { return *semantics; }
|
||||||
bool isNonZero() const { return category != fcZero; }
|
bool isNonZero() const { return category != fcZero; }
|
||||||
bool isNormal() const { return category == fcNormal; }
|
bool isNormal() const { return category == fcNormal; }
|
||||||
|
bool isFiniteNonZero() const { return isFinite() && !isZero(); }
|
||||||
bool isPosZero() const { return isZero() && !isNegative(); }
|
bool isPosZero() const { return isZero() && !isNegative(); }
|
||||||
bool isNegZero() const { return isZero() && isNegative(); }
|
bool isNegZero() const { return isZero() && isNegative(); }
|
||||||
|
|
||||||
|
@ -1458,4 +1458,32 @@ TEST(APFloatTest, isNaN) {
|
|||||||
EXPECT_FALSE(APFloat(APFloat::IEEEsingle, "0x1p-159").isNaN());
|
EXPECT_FALSE(APFloat(APFloat::IEEEsingle, "0x1p-159").isNaN());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(APFloatTest, isFiniteNonZero) {
|
||||||
|
// Test positive/negative normal value.
|
||||||
|
EXPECT_TRUE(APFloat(APFloat::IEEEsingle, "0x1p+0").isFiniteNonZero());
|
||||||
|
EXPECT_TRUE(APFloat(APFloat::IEEEsingle, "-0x1p+0").isFiniteNonZero());
|
||||||
|
|
||||||
|
// Test positive/negative denormal value.
|
||||||
|
EXPECT_TRUE(APFloat(APFloat::IEEEsingle, "0x1p-149").isFiniteNonZero());
|
||||||
|
EXPECT_TRUE(APFloat(APFloat::IEEEsingle, "-0x1p-149").isFiniteNonZero());
|
||||||
|
|
||||||
|
// Test +/- Infinity.
|
||||||
|
EXPECT_FALSE(APFloat::getInf(APFloat::IEEEsingle, false).isFiniteNonZero());
|
||||||
|
EXPECT_FALSE(APFloat::getInf(APFloat::IEEEsingle, true).isFiniteNonZero());
|
||||||
|
|
||||||
|
// Test +/- Zero.
|
||||||
|
EXPECT_FALSE(APFloat::getZero(APFloat::IEEEsingle, false).isFiniteNonZero());
|
||||||
|
EXPECT_FALSE(APFloat::getZero(APFloat::IEEEsingle, true).isFiniteNonZero());
|
||||||
|
|
||||||
|
// Test +/- qNaN. +/- dont mean anything with qNaN but paranoia can't hurt in
|
||||||
|
// this instance.
|
||||||
|
EXPECT_FALSE(APFloat::getNaN(APFloat::IEEEsingle, false).isFiniteNonZero());
|
||||||
|
EXPECT_FALSE(APFloat::getNaN(APFloat::IEEEsingle, true).isFiniteNonZero());
|
||||||
|
|
||||||
|
// Test +/- sNaN. +/- dont mean anything with sNaN but paranoia can't hurt in
|
||||||
|
// this instance.
|
||||||
|
EXPECT_FALSE(APFloat::getSNaN(APFloat::IEEEsingle, false).isFiniteNonZero());
|
||||||
|
EXPECT_FALSE(APFloat::getSNaN(APFloat::IEEEsingle, true).isFiniteNonZero());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user