Tôi đang cố gắng thực hiện cuộc gọi đến mã nhập khẩu nước ngoài được viết bằng LLVM, sử dụng các ý tưởng từ số post này nhưng tôi chỉ tiếp tục nhận được segfaults. Đây là những gì tôi có hiện tại.gọi điện thoại nhập khẩu nước ngoài đến LLVM
Trong Haskell
{-# LANGUAGE GHCForeignImportPrim #-}
{-# LANGUAGE MagicHash, UnboxedTuples #-}
{-# LANGUAGE ForeignFunctionInterface, UnliftedFFITypes #-}
import GHC.Prim
foreign import prim "primllvm" primllvm :: Word# -> Word# -> (# Word#, Word# #)
Và trong .ll
tập tin
define cc10 void @primllvm(i64* %baseReg, i64* %sp, i64* %hp, i64* %buffer, i64 %length, i64 %r3, i64 %r4, i64 %r5, i64 %r6, i64* %spLim, float %f1, float %f2, float %f3, float %f4, double %d1, double %d2)
{
%fp = bitcast i64* %sp to void(i64*, i64*, i64*, i64*, i64, i64, i64, i64, i64, i64*, float, float, float, float, double, double)*
tail call cc10 void %fp(i64* %baseReg, i64* %sp, i64* %hp, i64* %buffer, i64 %length, i64 %r3, i64 %r4, i64 %r5, i64 %r6, i64* %spLim, float %f1, float %f2, float %f3, float %f4, double %d1, double %d2) noreturn;
ret void
}
Về lý thuyết Tôi nghĩ rằng đây chỉ phải trả lại nó lập luận như một tuple, nhưng cũng giống như tôi đã nói, nó chỉ segfaults. Bất kỳ trợ giúp để có được điều này làm việc đánh giá cao.