aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/llvm-c/Core.h9
-rw-r--r--lib/VMCore/Core.cpp37
2 files changed, 26 insertions, 20 deletions
diff --git a/include/llvm-c/Core.h b/include/llvm-c/Core.h
index 50985e9064..0bcab83aed 100644
--- a/include/llvm-c/Core.h
+++ b/include/llvm-c/Core.h
@@ -33,6 +33,8 @@
#ifndef LLVM_C_CORE_H
#define LLVM_C_CORE_H
+#include "llvm/Support/DataTypes.h"
+
#ifdef __cplusplus
/* Need these includes to support the LLVM 'cast' template for the C++ 'wrap'
@@ -435,8 +437,15 @@ LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty);
/* Operations on scalar constants */
LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
int SignExtend);
+LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text,
+ uint8_t Radix);
+LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text,
+ unsigned SLen, uint8_t Radix);
LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
+LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text,
+ unsigned SLen);
+
/* Operations on composite constants */
LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
diff --git a/lib/VMCore/Core.cpp b/lib/VMCore/Core.cpp
index 1144e53a4d..b2aa9f4537 100644
--- a/lib/VMCore/Core.cpp
+++ b/lib/VMCore/Core.cpp
@@ -440,32 +440,29 @@ LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
return wrap(ConstantInt::get(unwrap<IntegerType>(IntTy), N, SignExtend != 0));
}
-static const fltSemantics &SemanticsForType(Type *Ty) {
- assert(Ty->isFloatingPoint() && "Type is not floating point!");
- if (Ty == Type::getFloatTy(Ty->getContext()))
- return APFloat::IEEEsingle;
- if (Ty == Type::getDoubleTy(Ty->getContext()))
- return APFloat::IEEEdouble;
- if (Ty == Type::getX86_FP80Ty(Ty->getContext()))
- return APFloat::x87DoubleExtended;
- if (Ty == Type::getFP128Ty(Ty->getContext()))
- return APFloat::IEEEquad;
- if (Ty == Type::getPPC_FP128Ty(Ty->getContext()))
- return APFloat::PPCDoubleDouble;
- return APFloat::Bogus;
+LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char Str[],
+ uint8_t Radix) {
+ return wrap(ConstantInt::get(unwrap<IntegerType>(IntTy), StringRef(Str),
+ Radix));
+}
+
+LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char Str[],
+ unsigned SLen, uint8_t Radix) {
+ return wrap(ConstantInt::get(unwrap<IntegerType>(IntTy), StringRef(Str, SLen),
+ Radix));
}
LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N) {
- APFloat APN(N);
- bool ignored;
- APN.convert(SemanticsForType(unwrap(RealTy)), APFloat::rmNearestTiesToEven,
- &ignored);
- return wrap(ConstantFP::get(getGlobalContext(), APN));
+ return wrap(ConstantFP::get(unwrap(RealTy), N));
}
LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text) {
- return wrap(ConstantFP::get(getGlobalContext(),
- APFloat(SemanticsForType(unwrap(RealTy)), Text)));
+ return wrap(ConstantFP::get(unwrap(RealTy), StringRef(Text)));
+}
+
+LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char Str[],
+ unsigned SLen) {
+ return wrap(ConstantFP::get(unwrap(RealTy), StringRef(Str, SLen)));
}
/*--.. Operations on composite constants ...................................--*/