]> gitweb.factorcode.org Git - factor.git/blob - extra/llvm/ffi/ffi.factor
Switch to https urls
[factor.git] / extra / llvm / ffi / ffi.factor
1 ! Copyright (C) 2009 Matthew Willis, 2017 Björn Lindqvist
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: alien alien.c-types alien.libraries alien.syntax combinators
4 kernel ldcache system ;
5 IN: llvm.ffi
6
7 << "llvm" {
8     { [ os linux? ] [ "LLVM-3.9" find-so ] }
9     { [ os macosx? ] [ "/usr/local/opt/llvm/lib/libLLVM.dylib" ] }
10     [ f ]
11 } cond [ cdecl add-library ] [ drop ] if*
12 >>
13
14 LIBRARY: llvm
15
16 CONSTANT: LLVMAbortProcessAction    0
17 CONSTANT: LLVMPrintMessageAction    1
18 CONSTANT: LLVMReturnStatusAction    2
19
20 TYPEDEF: uint unsigned
21 TYPEDEF: unsigned enum
22 TYPEDEF: int LLVMBool
23
24 ! Reference types
25 TYPEDEF: void* LLVMExecutionEngineRef
26 TYPEDEF: void* LLVMModuleRef
27 TYPEDEF: void* LLVMPassManagerRef
28 TYPEDEF: void* LLVMModuleProviderRef
29 TYPEDEF: void* LLVMTypeRef
30 TYPEDEF: void* LLVMValueRef
31 TYPEDEF: void* LLVMBasicBlockRef
32 TYPEDEF: void* LLVMBuilderRef
33 TYPEDEF: void* LLVMMemoryBufferRef
34 TYPEDEF: void* LLVMTargetRef
35 TYPEDEF: void* LLVMPassRegistryRef
36
37 ! Type types
38 ENUM: LLVMTypeKind
39     LLVMVoidTypeKind
40     LLVMHalfTypeKind
41     LLVMFloatTypeKind
42     LLVMDoubleTypeKind
43     LLVMX86_FP80TypeKind
44     LLVMFP128TypeKind
45     LLVMPPC_FP128TypeKind
46     LLVMLabelTypeKind
47     LLVMIntegerTypeKind
48     LLVMFunctionTypeKind
49     LLVMStructTypeKind
50     LLVMArrayTypeKind
51     LLVMPointerTypeKind
52     LLVMVectorTypeKind
53     LLVMMetadataTypeKind
54     LLVMX86_MMXTypeKind
55     LLVMTokenTypeKind ;
56
57 ! Modules
58 FUNCTION: LLVMModuleRef LLVMModuleCreateWithName ( c-string ModuleID )
59 FUNCTION: void LLVMDisposeModule ( LLVMModuleRef M )
60 FUNCTION: void LLVMDumpModule ( LLVMModuleRef M )
61 FUNCTION: LLVMBool LLVMVerifyModule ( LLVMModuleRef M, int Action, char **OutMessage )
62 FUNCTION: c-string LLVMGetTarget ( LLVMModuleRef M )
63
64 ! Types
65
66 ! ! Basic  types
67 FUNCTION: LLVMTypeRef LLVMFloatType ( )
68 FUNCTION: LLVMTypeRef LLVMDoubleType ( )
69
70 FUNCTION: LLVMTypeRef LLVMX86FP80Type ( )
71 FUNCTION: LLVMTypeRef LLVMFP128Type ( )
72 FUNCTION: LLVMTypeRef LLVMPPCFP128Type ( )
73
74 FUNCTION: LLVMTypeRef LLVMVoidType ( )
75 FUNCTION: LLVMTypeRef LLVMLabelType ( )
76
77 ! ! Integer type
78 FUNCTION: LLVMTypeRef LLVMInt1Type ( )
79 FUNCTION: LLVMTypeRef LLVMInt8Type ( )
80 FUNCTION: LLVMTypeRef LLVMInt16Type ( )
81 FUNCTION: LLVMTypeRef LLVMInt32Type ( )
82 FUNCTION: LLVMTypeRef LLVMInt64Type ( )
83 FUNCTION: LLVMTypeRef LLVMIntType ( unsigned NumBits )
84 FUNCTION: unsigned LLVMGetIntTypeWidth ( LLVMTypeRef IntegerTy )
85
86 ! ! Array type
87 FUNCTION: LLVMTypeRef LLVMArrayType ( LLVMTypeRef ElementType, unsigned ElementCount )
88 FUNCTION: unsigned LLVMGetArrayLength ( LLVMTypeRef ArrayTy )
89
90 ! ! Pointer type
91 FUNCTION: LLVMTypeRef LLVMPointerType ( LLVMTypeRef ElementType, unsigned AddressSpace )
92
93 ! ! Vector type
94 FUNCTION: LLVMTypeRef LLVMVectorType ( LLVMTypeRef ElementType, unsigned ElementCount )
95 FUNCTION: unsigned LLVMGetVectorSize ( LLVMTypeRef VectorTy )
96
97 ! ! Function type
98 FUNCTION: LLVMTypeRef LLVMFunctionType ( LLVMTypeRef ReturnType,
99                                          LLVMTypeRef* ParamTypes,
100                                          unsigned ParamCount, int IsVarArg )
101 FUNCTION: LLVMTypeRef LLVMGetReturnType ( LLVMTypeRef FunctionTy )
102 FUNCTION: int LLVMIsFunctionVarArg ( LLVMTypeRef FunctionTy )
103 FUNCTION: unsigned LLVMCountParamTypes ( LLVMTypeRef FunctionTy )
104 FUNCTION: void LLVMGetParamTypes ( LLVMTypeRef FunctionTy, LLVMTypeRef* Dest )
105
106 ! ! Struct type
107 FUNCTION: LLVMTypeRef LLVMStructType ( LLVMTypeRef* ElementTypes,
108                                        unsigned ElementCount, int Packed )
109 FUNCTION: int LLVMIsPackedStruct ( LLVMTypeRef StructTy )
110 FUNCTION: unsigned LLVMCountStructElementTypes ( LLVMTypeRef StructTy )
111 FUNCTION: void LLVMGetStructElementTypes ( LLVMTypeRef StructTy, LLVMTypeRef* Dest )
112
113 ! ! Type util
114 FUNCTION: LLVMTypeKind LLVMGetTypeKind ( LLVMTypeRef Ty )
115 FUNCTION: LLVMTypeRef LLVMGetElementType ( LLVMTypeRef Ty )
116
117 ! Values
118 FUNCTION: LLVMValueRef LLVMAddFunction ( LLVMModuleRef M,
119                                          c-string Name,
120                                          LLVMTypeRef FunctionTy )
121 FUNCTION: LLVMValueRef LLVMGetParam ( LLVMValueRef Fn,
122                                       unsigned index )
123 FUNCTION: c-string LLVMGetValueName ( LLVMValueRef Val )
124 FUNCTION: unsigned LLVMCountParams ( LLVMValueRef Fn )
125 FUNCTION: LLVMTypeRef LLVMTypeOf ( LLVMValueRef Val )
126 FUNCTION: void LLVMDumpValue ( LLVMValueRef Val )
127
128 ! Basic blocks
129 FUNCTION: LLVMBasicBlockRef LLVMAppendBasicBlock ( LLVMValueRef Fn,
130                                                    c-string Name )
131
132 ! Builders
133 FUNCTION: LLVMBuilderRef LLVMCreateBuilder ( )
134 FUNCTION: void LLVMDisposeBuilder ( LLVMBuilderRef Builder )
135 FUNCTION: void LLVMPositionBuilderBefore ( LLVMBuilderRef Builder,
136                                            LLVMValueRef Instr )
137 FUNCTION: void LLVMPositionBuilderAtEnd ( LLVMBuilderRef Builder,
138                                           LLVMBasicBlockRef Block )
139
140 FUNCTION: LLVMValueRef LLVMBuildAdd ( LLVMBuilderRef Builder,
141                                       LLVMValueRef LHS,
142                                       LLVMValueRef RHS,
143                                       c-string Name )
144 FUNCTION: LLVMValueRef LLVMBuildSub ( LLVMBuilderRef Builder,
145                                       LLVMValueRef LHS,
146                                       LLVMValueRef RHS,
147                                       c-string Name )
148 FUNCTION: LLVMValueRef LLVMBuildMul ( LLVMBuilderRef Builder,
149                                       LLVMValueRef LHS,
150                                       LLVMValueRef RHS,
151                                       c-string Name )
152 FUNCTION: LLVMValueRef LLVMBuildRet ( LLVMBuilderRef Builder,
153                                       LLVMValueRef V )
154
155 ! Execution Engines
156 FUNCTION: LLVMBool LLVMCreateExecutionEngineForModule (
157     LLVMExecutionEngineRef* OutEE,
158     LLVMModuleRef M,
159     char **OutMessage )
160 FUNCTION: void LLVMDisposeExecutionEngine ( LLVMExecutionEngineRef E )
161 FUNCTION: uint64_t LLVMGetGlobalValueAddress ( LLVMExecutionEngineRef E, c-string name )
162 FUNCTION: LLVMBool LLVMFindFunction ( LLVMExecutionEngineRef E,
163                                       c-string name,
164                                       LLVMValueRef OutFn )
165 FUNCTION: void* LLVMGetPointerToGlobal ( LLVMExecutionEngineRef EE,
166                                          LLVMValueRef Global )
167
168 ! Memory buffers
169 FUNCTION: LLVMBool LLVMCreateMemoryBufferWithContentsOfFile (
170     c-string Path,
171     LLVMMemoryBufferRef* OutMemBuf,
172     c-string* OutMessage )
173 FUNCTION: void LLVMDisposeMemoryBuffer ( LLVMMemoryBufferRef MemBuf )
174 FUNCTION: size_t LLVMGetBufferSize ( LLVMMemoryBufferRef MemBuf )
175 ! Deprecated and should be replaced with LLVMParseBitcode2.
176 FUNCTION: int LLVMParseBitcode ( LLVMMemoryBufferRef MemBuf,
177                                  LLVMModuleRef* OutModule,
178                                  c-string* OutMessage )
179
180 ! Module providers
181 FUNCTION: LLVMModuleProviderRef LLVMCreateModuleProviderForExistingModule ( LLVMModuleRef M )
182 FUNCTION: void LLVMDisposeModuleProvider ( LLVMModuleProviderRef MP )
183
184 ! Targets
185 FUNCTION: LLVMTargetRef LLVMGetFirstTarget ( )
186 FUNCTION: c-string LLVMGetTargetName ( LLVMTargetRef T )
187
188 ! Messages
189 FUNCTION: void LLVMDisposeMessage ( char *Message )
190
191 ! Pass Registry
192 FUNCTION: LLVMPassRegistryRef LLVMGetGlobalPassRegistry ( )
193
194 ! Initialization
195 FUNCTION: void LLVMInitializeCore ( LLVMPassRegistryRef PR )
196 FUNCTION: void LLVMLinkInMCJIT ( )
197 FUNCTION: void LLVMInitializeX86AsmPrinter ( )
198 FUNCTION: void LLVMInitializeX86TargetInfo ( )
199 FUNCTION: void LLVMInitializeX86Target ( )
200 FUNCTION: void LLVMInitializeX86TargetMC ( )
201
202 ! Removed symbols: LLVMCreateJITCompiler, LLVMCreateTypeHandle, LLVMOpaqueType