| /*===-- llvm-c/ExecutionEngine.h - ExecutionEngine Lib C Iface --*- C++ -*-===*\ | 
 | |*                                                                            *| | 
 | |*                     The LLVM Compiler Infrastructure                       *| | 
 | |*                                                                            *| | 
 | |* This file is distributed under the University of Illinois Open Source      *| | 
 | |* License. See LICENSE.TXT for details.                                      *| | 
 | |*                                                                            *| | 
 | |*===----------------------------------------------------------------------===*| | 
 | |*                                                                            *| | 
 | |* This header declares the C interface to libLLVMExecutionEngine.o, which    *| | 
 | |* implements various analyses of the LLVM IR.                                *| | 
 | |*                                                                            *| | 
 | |* Many exotic languages can interoperate with C code but have a harder time  *| | 
 | |* with C++ due to name mangling. So in addition to C, this interface enables *| | 
 | |* tools written in such languages.                                           *| | 
 | |*                                                                            *| | 
 | \*===----------------------------------------------------------------------===*/ | 
 |  | 
 | #ifndef LLVM_C_EXECUTIONENGINE_H | 
 | #define LLVM_C_EXECUTIONENGINE_H | 
 |  | 
 | #include "llvm-c/Core.h" | 
 | #include "llvm-c/Target.h" | 
 |  | 
 | #ifdef __cplusplus | 
 | extern "C" { | 
 | #endif | 
 |  | 
 | typedef struct LLVMOpaqueGenericValue *LLVMGenericValueRef; | 
 | typedef struct LLVMOpaqueExecutionEngine *LLVMExecutionEngineRef; | 
 |  | 
 | /*===-- Operations on generic values --------------------------------------===*/ | 
 |  | 
 | LLVMGenericValueRef LLVMCreateGenericValueOfInt(LLVMTypeRef Ty, | 
 |                                                 unsigned long long N, | 
 |                                                 int IsSigned); | 
 |  | 
 | LLVMGenericValueRef LLVMCreateGenericValueOfPointer(void *P); | 
 |  | 
 | LLVMGenericValueRef LLVMCreateGenericValueOfFloat(LLVMTypeRef Ty, double N); | 
 |  | 
 | unsigned LLVMGenericValueIntWidth(LLVMGenericValueRef GenValRef); | 
 |  | 
 | unsigned long long LLVMGenericValueToInt(LLVMGenericValueRef GenVal, | 
 |                                          int IsSigned); | 
 |  | 
 | void *LLVMGenericValueToPointer(LLVMGenericValueRef GenVal); | 
 |  | 
 | double LLVMGenericValueToFloat(LLVMTypeRef TyRef, LLVMGenericValueRef GenVal); | 
 |  | 
 | void LLVMDisposeGenericValue(LLVMGenericValueRef GenVal); | 
 |  | 
 | /*===-- Operations on execution engines -----------------------------------===*/ | 
 |  | 
 | int LLVMCreateExecutionEngine(LLVMExecutionEngineRef *OutEE, | 
 |                               LLVMModuleProviderRef MP, | 
 |                               char **OutError); | 
 |  | 
 | int LLVMCreateInterpreter(LLVMExecutionEngineRef *OutInterp, | 
 |                           LLVMModuleProviderRef MP, | 
 |                           char **OutError); | 
 |  | 
 | int LLVMCreateJITCompiler(LLVMExecutionEngineRef *OutJIT, | 
 |                           LLVMModuleProviderRef MP, | 
 |                           char **OutError); | 
 |  | 
 | void LLVMDisposeExecutionEngine(LLVMExecutionEngineRef EE); | 
 |  | 
 | void LLVMRunStaticConstructors(LLVMExecutionEngineRef EE); | 
 |  | 
 | void LLVMRunStaticDestructors(LLVMExecutionEngineRef EE); | 
 |  | 
 | int LLVMRunFunctionAsMain(LLVMExecutionEngineRef EE, LLVMValueRef F, | 
 |                           unsigned ArgC, const char * const *ArgV, | 
 |                           const char * const *EnvP); | 
 |  | 
 | LLVMGenericValueRef LLVMRunFunction(LLVMExecutionEngineRef EE, LLVMValueRef F, | 
 |                                     unsigned NumArgs, | 
 |                                     LLVMGenericValueRef *Args); | 
 |  | 
 | void LLVMFreeMachineCodeForFunction(LLVMExecutionEngineRef EE, LLVMValueRef F); | 
 |  | 
 | void LLVMAddModuleProvider(LLVMExecutionEngineRef EE, LLVMModuleProviderRef MP); | 
 |  | 
 | int LLVMRemoveModuleProvider(LLVMExecutionEngineRef EE, | 
 |                              LLVMModuleProviderRef MP, | 
 |                              LLVMModuleRef *OutMod, char **OutError); | 
 |  | 
 | int LLVMFindFunction(LLVMExecutionEngineRef EE, const char *Name, | 
 |                      LLVMValueRef *OutFn); | 
 |  | 
 | LLVMTargetDataRef LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE); | 
 |  | 
 | #ifdef __cplusplus | 
 | } | 
 |  | 
 | namespace llvm { | 
 |   class GenericValue; | 
 |   class ExecutionEngine; | 
 |    | 
 |   #define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref)   \ | 
 |     inline ty *unwrap(ref P) {                          \ | 
 |       return reinterpret_cast<ty*>(P);                  \ | 
 |     }                                                   \ | 
 |                                                         \ | 
 |     inline ref wrap(const ty *P) {                      \ | 
 |       return reinterpret_cast<ref>(const_cast<ty*>(P)); \ | 
 |     } | 
 |    | 
 |   DEFINE_SIMPLE_CONVERSION_FUNCTIONS(GenericValue,    LLVMGenericValueRef   ) | 
 |   DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ExecutionEngine, LLVMExecutionEngineRef) | 
 |    | 
 |   #undef DEFINE_SIMPLE_CONVERSION_FUNCTIONS | 
 | } | 
 |    | 
 | #endif /* defined(__cplusplus) */ | 
 |  | 
 | #endif |