diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2011-11-16 12:15:54 -0800 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2011-11-16 15:27:09 -0800 |
| commit | 834b6879ea89135d60b3903755589e14f816449a (patch) | |
| tree | c68a3618324aa5730e49d6389bccfa30b7c9ec06 /src | |
| parent | 938b23e228f4fd313973190f8f78163476cc4a3f (diff) | |
| download | rust-834b6879ea89135d60b3903755589e14f816449a.tar.gz rust-834b6879ea89135d60b3903755589e14f816449a.zip | |
temp workaround for failure to pass ulonglong successfully
Diffstat (limited to 'src')
| -rw-r--r-- | src/comp/lib/llvm.rs | 2 | ||||
| -rw-r--r-- | src/comp/middle/trans_common.rs | 4 | ||||
| -rw-r--r-- | src/rustllvm/RustWrapper.cpp | 10 | ||||
| -rw-r--r-- | src/rustllvm/rustllvm.def.in | 1 |
4 files changed, 15 insertions, 2 deletions
diff --git a/src/comp/lib/llvm.rs b/src/comp/lib/llvm.rs index 68ba8624268..7010bc82f01 100644 --- a/src/comp/lib/llvm.rs +++ b/src/comp/lib/llvm.rs @@ -865,7 +865,7 @@ native mod llvm { fn LLVMRustParseBitcode(MemBuf: MemoryBufferRef) -> ModuleRef; /** FiXME: Hacky adaptor for lack of ULongLong in FFI: */ - fn LLVMRustConstSmallInt(IntTy: TypeRef, N: uint, SignExtend: Bool) -> + fn LLVMRustConstInt(IntTy: TypeRef, N_hi: uint, N_lo: uint, SignExtend: Bool) -> ValueRef; fn LLVMRustAddPrintModulePass(PM: PassManagerRef, M: ModuleRef, diff --git a/src/comp/middle/trans_common.rs b/src/comp/middle/trans_common.rs index 276a7460f8c..4b2791f66c8 100644 --- a/src/comp/middle/trans_common.rs +++ b/src/comp/middle/trans_common.rs @@ -725,7 +725,9 @@ fn T_opaque_chan_ptr() -> TypeRef { ret T_ptr(T_i8()); } fn C_null(t: TypeRef) -> ValueRef { ret llvm::LLVMConstNull(t); } fn C_integral(t: TypeRef, u: u64, sign_extend: Bool) -> ValueRef { - ret llvm::LLVMConstInt(t, u, sign_extend); + let u_hi = (u >> 32u64) as uint; + let u_lo = u as uint; + ret llvm::LLVMRustConstInt(t, u_hi, u_lo, sign_extend); } fn C_float(cx: @crate_ctxt, s: str) -> ValueRef { diff --git a/src/rustllvm/RustWrapper.cpp b/src/rustllvm/RustWrapper.cpp index c0553b3c1d9..635030fd0ad 100644 --- a/src/rustllvm/RustWrapper.cpp +++ b/src/rustllvm/RustWrapper.cpp @@ -126,6 +126,16 @@ extern "C" LLVMValueRef LLVMRustConstSmallInt(LLVMTypeRef IntTy, unsigned N, return LLVMConstInt(IntTy, (unsigned long long)N, SignExtend); } +extern "C" LLVMValueRef LLVMRustConstInt(LLVMTypeRef IntTy, + unsigned N_hi, + unsigned N_lo, + LLVMBool SignExtend) { + unsigned long long N = N_hi; + N <<= 32; + N |= N_lo; + return LLVMConstInt(IntTy, N, SignExtend); +} + extern bool llvm::TimePassesIsEnabled; extern "C" void LLVMRustEnableTimePasses() { TimePassesIsEnabled = true; diff --git a/src/rustllvm/rustllvm.def.in b/src/rustllvm/rustllvm.def.in index 9712ea60371..75d8dc8229e 100644 --- a/src/rustllvm/rustllvm.def.in +++ b/src/rustllvm/rustllvm.def.in @@ -4,6 +4,7 @@ LLVMRustWriteOutputFile LLVMRustGetLastError LLVMRustGetHostTriple LLVMRustConstSmallInt +LLVMRustConstInt LLVMRustParseBitcode LLVMRustPrintPassTimings LLVMRustEnableSegmentedStacks |
