mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
Expose creating constant ints and floats from strings in llvm-c.
llvm-svn: 79213
This commit is contained in:
parent
d7980d95e8
commit
f9173af0b5
@ -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,
|
||||
|
@ -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 ...................................--*/
|
||||
|
Loading…
Reference in New Issue
Block a user