Add IEEE quad support to DefineFloatMacros.

llvm-svn: 72314
This commit is contained in:
Eli Friedman
2009-05-23 03:50:01 +00:00
parent 223db1c9e5
commit 57406b2783

View File

@@ -127,15 +127,18 @@ static void AddImplicitIncludePTH(std::vector<char> &Buf, Preprocessor &PP,
/// specified FP model.
template <typename T>
static T PickFP(const llvm::fltSemantics *Sem, T IEEESingleVal,
T IEEEDoubleVal, T X87DoubleExtendedVal, T PPCDoubleDoubleVal) {
T IEEEDoubleVal, T X87DoubleExtendedVal, T PPCDoubleDoubleVal,
T IEEEQuadVal) {
if (Sem == &llvm::APFloat::IEEEsingle)
return IEEESingleVal;
if (Sem == &llvm::APFloat::IEEEdouble)
return IEEEDoubleVal;
if (Sem == &llvm::APFloat::x87DoubleExtended)
return X87DoubleExtendedVal;
assert(Sem == &llvm::APFloat::PPCDoubleDouble);
return PPCDoubleDoubleVal;
if (Sem == &llvm::APFloat::PPCDoubleDouble)
return PPCDoubleDoubleVal;
assert(Sem == &llvm::APFloat::IEEEquad);
return IEEEQuadVal;
}
static void DefineFloatMacros(std::vector<char> &Buf, const char *Prefix,
@@ -143,25 +146,29 @@ static void DefineFloatMacros(std::vector<char> &Buf, const char *Prefix,
const char *DenormMin, *Epsilon, *Max, *Min;
DenormMin = PickFP(Sem, "1.40129846e-45F", "4.9406564584124654e-324",
"3.64519953188247460253e-4951L",
"4.94065645841246544176568792868221e-324L");
int Digits = PickFP(Sem, 6, 15, 18, 31);
"4.94065645841246544176568792868221e-324L",
"6.47517511943802511092443895822764655e-4966L");
int Digits = PickFP(Sem, 6, 15, 18, 31, 33);
Epsilon = PickFP(Sem, "1.19209290e-7F", "2.2204460492503131e-16",
"1.08420217248550443401e-19L",
"4.94065645841246544176568792868221e-324L");
"4.94065645841246544176568792868221e-324L",
"1.92592994438723585305597794258492732e-34L");
int HasInifinity = 1, HasQuietNaN = 1;
int MantissaDigits = PickFP(Sem, 24, 53, 64, 106);
int Min10Exp = PickFP(Sem, -37, -307, -4931, -291);
int Max10Exp = PickFP(Sem, 38, 308, 4932, 308);
int MinExp = PickFP(Sem, -125, -1021, -16381, -968);
int MaxExp = PickFP(Sem, 128, 1024, 16384, 1024);
int MantissaDigits = PickFP(Sem, 24, 53, 64, 106, 113);
int Min10Exp = PickFP(Sem, -37, -307, -4931, -291, -4931);
int Max10Exp = PickFP(Sem, 38, 308, 4932, 308, 4932);
int MinExp = PickFP(Sem, -125, -1021, -16381, -968, -16381);
int MaxExp = PickFP(Sem, 128, 1024, 16384, 1024, 16384);
Min = PickFP(Sem, "1.17549435e-38F", "2.2250738585072014e-308",
"3.36210314311209350626e-4932L",
"2.00416836000897277799610805135016e-292L");
"2.00416836000897277799610805135016e-292L",
"3.36210314311209350626267781732175260e-4932L");
Max = PickFP(Sem, "3.40282347e+38F", "1.7976931348623157e+308",
"1.18973149535723176502e+4932L",
"1.79769313486231580793728971405301e+308L");
"1.79769313486231580793728971405301e+308L",
"1.18973149535723176508575932662800702e+4932L");
char MacroBuf[64];
char MacroBuf[100];
sprintf(MacroBuf, "__%s_DENORM_MIN__=%s", Prefix, DenormMin);
DefineBuiltinMacro(Buf, MacroBuf);
sprintf(MacroBuf, "__%s_DIG__=%d", Prefix, Digits);
@@ -421,7 +428,7 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
DefineBuiltinMacro(Buf, "__FLT_EVAL_METHOD__=0");
DefineBuiltinMacro(Buf, "__FLT_RADIX__=2");
sprintf(MacroBuf, "__DECIMAL_DIG__=%d",
PickFP(&TI.getLongDoubleFormat(), -1/*FIXME*/, 17, 21, 33));
PickFP(&TI.getLongDoubleFormat(), -1/*FIXME*/, 17, 21, 33, 36));
DefineBuiltinMacro(Buf, MacroBuf);
// Get other target #defines.