packages feed

llvm-general-0.1: src/LLVM/General/Internal/FFI/Target.hs

{-# LANGUAGE
  ForeignFunctionInterface,
  GeneralizedNewtypeDeriving,
  EmptyDataDecls
  #-}

module LLVM.General.Internal.FFI.Target where

import Foreign.Ptr
import Foreign.C

import LLVM.General.Internal.FFI.LLVMCTypes

data Target

foreign import ccall unsafe "LLVM_General_InitializeNativeTarget" initializeNativeTarget ::
    IO LLVMBool

foreign import ccall unsafe "LLVM_General_LookupTarget" lookupTarget ::
    CString -> CString -> Ptr CString -> Ptr CString -> IO (Ptr Target)

data TargetOptions

foreign import ccall unsafe "LLVM_General_CreateTargetOptions" createTargetOptions ::
  IO (Ptr TargetOptions)

foreign import ccall unsafe "LLVM_General_SetTargetOptionFlag" setTargetOptionFlag ::
  Ptr TargetOptions -> TargetOptionFlag -> LLVMBool -> IO ()

foreign import ccall unsafe "LLVM_General_GetTargetOptionFlag" getTargetOptionsFlag ::
  Ptr TargetOptions -> TargetOptionFlag -> IO LLVMBool

foreign import ccall unsafe "LLVM_General_SetStackAlignmentOverride" setStackAlignmentOverride ::
  Ptr TargetOptions -> CUInt -> IO ()

foreign import ccall unsafe "LLVM_General_GetStackAlignmentOverride" getStackAlignmentOverride ::
  Ptr TargetOptions -> IO CUInt

foreign import ccall unsafe "LLVM_General_SetTrapFuncName" setTrapFuncName ::
  Ptr TargetOptions -> CString -> IO ()

foreign import ccall unsafe "LLVM_General_GetTrapFuncName" getTrapFuncName ::
  Ptr TargetOptions -> IO CString

foreign import ccall unsafe "LLVM_General_SetFloatABIType" setFloatABIType ::
  Ptr TargetOptions -> FloatABIType -> IO ()

foreign import ccall unsafe "LLVM_General_GetFloatABIType" getFloatABIType ::
  Ptr TargetOptions -> IO FloatABIType

foreign import ccall unsafe "LLVM_General_SetAllowFPOpFusion" setAllowFPOpFusion ::
  Ptr TargetOptions -> FPOpFusionMode -> IO ()

foreign import ccall unsafe "LLVM_General_GetAllowFPOpFusion" getAllowFPOpFusion ::
  Ptr TargetOptions -> IO FPOpFusionMode

foreign import ccall unsafe "LLVM_General_SetSSPBufferSize" setSSPBufferSize ::
  Ptr TargetOptions -> CUInt -> IO ()

foreign import ccall unsafe "LLVM_General_GetSSPBufferSize" getSSPBufferSize ::
  Ptr TargetOptions -> IO CUInt

foreign import ccall unsafe "LLVM_General_DisposeTargetOptions" disposeTargetOptions ::
    Ptr TargetOptions -> IO ()

data TargetMachine

foreign import ccall unsafe "LLVM_General_CreateTargetMachine" createTargetMachine ::
    Ptr Target
    -> CString 
    -> CString
    -> CString
    -> Ptr TargetOptions
    -> RelocModel
    -> CodeModel
    -> CodeGenOptLevel
    -> IO (Ptr TargetMachine)

foreign import ccall unsafe "LLVMDisposeTargetMachine" disposeTargetMachine ::
    Ptr TargetMachine -> IO ()

data TargetLowering

foreign import ccall unsafe "LLVM_General_GetTargetLowering" getTargetLowering ::
    Ptr TargetMachine -> IO (Ptr TargetLowering)