diff --git a/src/comp/lib/llvm.rs b/src/comp/lib/llvm.rs index 68ba8624268c..7010bc82f010 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 276a7460f8cf..4b2791f66c81 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 c0553b3c1d9f..635030fd0adb 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 9712ea603712..75d8dc8229e2 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