about summary refs log tree commit diff
path: root/src/rustllvm/RustWrapper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/rustllvm/RustWrapper.cpp')
-rw-r--r--src/rustllvm/RustWrapper.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/rustllvm/RustWrapper.cpp b/src/rustllvm/RustWrapper.cpp
index 20ea8d70302..db6802320b3 100644
--- a/src/rustllvm/RustWrapper.cpp
+++ b/src/rustllvm/RustWrapper.cpp
@@ -1373,6 +1373,19 @@ extern "C" bool LLVMRustConstInt128Get(LLVMValueRef CV, bool sext, uint64_t *hig
     return true;
 }
 
+extern "C" uint64_t LLVMRustConstFloatGetBits(LLVMValueRef CV) {
+    auto C = unwrap<llvm::ConstantFP>(CV);
+    APInt Bits = C->getValueAPF().bitcastToAPInt();
+    if (!Bits.isIntN(64)) {
+      report_fatal_error("Float bit pattern >64 bits");
+    }
+    return Bits.getLimitedValue();
+}
+
+extern "C" bool LLVMRustIsConstantFP(LLVMValueRef CV) {
+  return isa<llvm::ConstantFP>(unwrap<llvm::Value>(CV));
+}
+
 extern "C" LLVMContextRef LLVMRustGetValueContext(LLVMValueRef V) {
   return wrap(&unwrap(V)->getContext());
 }