Temporary commit
authorJan Vrany <jan.vrany@fit.cvut.cz>
Sat, 11 Jul 2015 10:03:12 +0100
changeset 4 d33c64726c86
parent 3 ddfc3a7db3a8
child 5 3ac0c9381634
Temporary commit
LLVM.st
LLVMFunction.st
LLVMModule.st
LLVMStXMethod.st
LLVMTargetData.st
LLVMType.st
LLVMValue.st
Make.proto
Make.spec
abbrev.stc
bc.mak
jv_libllvms.st
libInit.cc
--- a/LLVM.st	Sat Jul 11 06:38:54 2015 +0100
+++ b/LLVM.st	Sat Jul 11 10:03:12 2015 +0100
@@ -99,8 +99,10 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMAddFunction" ( LLVMModule charPointer LLVMType ) >
-    self primitiveFailed
+    <cdecl: LLVMFunction "LLVMAddFunction" ( LLVMModule charPointer LLVMType ) >
+    self primitiveFailed
+
+    "Modified: / 11-07-2015 / 07:43:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 AddFunctionAttr: Fn _: PA 
@@ -170,6 +172,16 @@
     self primitiveFailed
 !
 
+AddMethod: M _: Name _: FunctionTy 
+    "This is essentially AddFunction:_: but returns an instance
+     of LLVMStXMethod instead of LLVMFunction"
+
+    <cdecl: LLVMStXMethod "LLVMAddFunction" ( LLVMModule charPointer LLVMType ) >
+    self primitiveFailed
+
+    "Created: / 11-07-2015 / 08:54:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 AddModule: EE _: M 
     "@param EE: LLVMExecutionEngineRef
      @param M: LLVMModuleRef
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LLVMFunction.st	Sat Jul 11 10:03:12 2015 +0100
@@ -0,0 +1,41 @@
+"{ Package: 'jv:libllvms' }"
+
+"{ NameSpace: Smalltalk }"
+
+LLVMValue subclass:#LLVMFunction
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'LLVM-Core'
+!
+
+!LLVMFunction methodsFor:'accessing'!
+
+numArgs
+    ^ LLVM GetNumOperands: self.
+
+    "Created: / 11-07-2015 / 09:42:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+parameterAt: index
+    | value |
+
+    value := LLVM GetParam: self  _: index - 1.
+    value name isEmptyOrNil ifTrue:[
+        value name: 'arg', index printString.
+    ].
+    ^ value
+
+    "Created: / 07-07-2015 / 22:49:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 11-07-2015 / 09:45:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVMFunction methodsFor:'functions-adding'!
+
+addBasicBlockNamed: name
+    self assert: name isSingleByteString.
+    ^ LLVM AppendBasicBlock: self  _: name
+
+    "Created: / 08-07-2015 / 23:09:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/LLVMModule.st	Sat Jul 11 06:38:54 2015 +0100
+++ b/LLVMModule.st	Sat Jul 11 10:03:12 2015 +0100
@@ -17,6 +17,14 @@
     "Created: / 07-07-2015 / 20:22:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!LLVMModule methodsFor:'accessing'!
+
+dataLayoutString
+    ^ LLVM GetDataLayout: self.
+
+    "Created: / 11-07-2015 / 06:57:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !LLVMModule methodsFor:'adding & removing'!
 
 addFunctionNamed: name type: type
@@ -25,6 +33,23 @@
     ^ LLVM AddFunction: self _: name _: type.
 
     "Created: / 07-07-2015 / 21:59:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+addMethodForClass: class selector: selector
+    | name type typeObj typeIlcPtr argTypes|
+
+    name := LLVMStXMethod llvmFunctionNameForClass: class selector: selector.
+    typeObj := LLVMType intptr.
+    typeIlcPtr := LLVMType intptr.
+    argTypes := LLVMObjectArray new: 4"receiver, selector, clsOrNil, pIlc" + selector numArgs.
+    1 to: argTypes size do:[:i | 
+        argTypes at: i put: typeObj.
+    ].
+    argTypes at: 4 put: typeIlcPtr.
+    type := LLVMType function: argTypes  returning: typeObj.
+    ^ LLVM AddMethod: self _: name _: type.
+
+    "Created: / 11-07-2015 / 09:37:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !LLVMModule methodsFor:'debugging'!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LLVMStXMethod.st	Sat Jul 11 10:03:12 2015 +0100
@@ -0,0 +1,109 @@
+"{ Package: 'jv:libllvms' }"
+
+"{ NameSpace: Smalltalk }"
+
+LLVMFunction subclass:#LLVMStXMethod
+	instanceVariableNames:''
+	classVariableNames:'SelectorSpecialCharMappingTable'
+	poolDictionaries:''
+	category:'LLVM-StX'
+!
+
+!LLVMStXMethod class methodsFor:'initialization'!
+
+initialize
+    "Invoked at system start or when the class is dynamically loaded."
+
+    "/ please change as required (and remove this comment)
+
+    SelectorSpecialCharMappingTable := Dictionary withKeysAndValues:
+                #($+ 'pl'
+                  $- 'mi'
+                  $* 'mu'
+                  $/ 'di'
+                  $, 'co'
+                  $@ 'at'
+                  $< 'le'
+                  $> 'gr'
+                  $= 'eq'
+                  $~ 'ne'
+                  $| 'pi'
+                  $\ 'mo'
+                  $& 'am').
+
+    "Modified: / 11-07-2015 / 09:24:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVMStXMethod class methodsFor:'utilities'!
+
+llvmFunctionNameForClass: class selector: selector      
+    "For given class name and selector, returns the name 
+     used by LLVM"
+
+    ^ String streamContents:[ :s|
+        s nextPutAll: '__M_L_'.
+        s nextPutAll: (class name copyReplaceAll: $: with: $_).
+        s nextPut: $_.
+        selector isBinarySelector ifTrue:[ 
+            selector do:[:c |     
+                s nextPutAll: (SelectorSpecialCharMappingTable at: c)
+            ].
+        ] ifFalse:[ 
+            selector do:[:c |  
+                c isAlphaNumeric ifTrue:[ 
+                    s nextPut: c 
+                ] ifFalse:[
+                    c == $: ifTrue:[ 
+                        s nextPut: $_
+                    ] ifFalse:[  
+                        s nextPut: $_.
+                        c codePoint printOn: s.
+                    ]
+                ].
+            ]
+        ].
+    ].
+
+    "
+    LLVMStXMethod llvmFunctionNameForClass: LLVMStXMethod selector: #llvmFunctionNameForClass:selector: 
+    LLVMStXMethod llvmFunctionNameForClass: SmallInteger selector: #+
+    LLVMStXMethod llvmFunctionNameForClass: Object selector: #~=
+
+    "
+
+    "Created: / 11-07-2015 / 09:26:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVMStXMethod methodsFor:'accessing'!
+
+numArgs
+    ^ super numArgs - 4
+
+    "Created: / 11-07-2015 / 09:42:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+parameterAt: index
+    ^ super parameterAt: 4 + index.
+
+    "Created: / 11-07-2015 / 09:39:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVMStXMethod methodsFor:'initialization'!
+
+initialize
+    super initialize.
+
+    "Assign human readable names to parameters"
+    (super parameterAt: 1) name: 'self'.
+    (super parameterAt: 2) name: 'selector'.
+    (super parameterAt: 3) name: 'searchClass'.
+    (super parameterAt: 4) name: 'pIlc'.
+    1 to: self numArgs do:[:numArg | 
+        (super parameterAt: 4+numArg) name: 'marg', numArg printString.
+    ].
+
+    "Created: / 11-07-2015 / 09:41:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+
+LLVMStXMethod initialize!
--- a/LLVMTargetData.st	Sat Jul 11 06:38:54 2015 +0100
+++ b/LLVMTargetData.st	Sat Jul 11 10:03:12 2015 +0100
@@ -10,6 +10,21 @@
 !
 
 
+!LLVMTargetData class methodsFor:'instance creation'!
+
+new
+    ^ self newFromDescription: ''
+
+    "Created: / 11-07-2015 / 07:04:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+newFromDescription: aString
+    self assert: aString isSingleByteString.
+    ^ LLVM CreateTargetData: aString
+
+    "Created: / 11-07-2015 / 07:03:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !LLVMTargetData methodsFor:'initialization & release'!
 
 dispose
--- a/LLVMType.st	Sat Jul 11 06:38:54 2015 +0100
+++ b/LLVMType.st	Sat Jul 11 10:03:12 2015 +0100
@@ -4,8 +4,8 @@
 
 LLVMObject subclass:#LLVMType
 	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
+	classVariableNames:'Int1 Int16 Int32 Int64 IntPtr'
+	poolDictionaries:'LLVMTypeKind'
 	category:'LLVM-Core'
 !
 
@@ -19,9 +19,13 @@
 !
 
 int1
-    ^ LLVM Int1Type
+    Int64 isNil ifTrue:[  
+        Int64 := LLVM Int64Type
+    ].
+    ^ Int64
 
     "Created: / 07-07-2015 / 21:21:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 11-07-2015 / 07:01:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 int16
@@ -46,6 +50,15 @@
     ^ LLVM Int8Type
 
     "Created: / 07-07-2015 / 21:21:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+intptr
+    IntPtr isNil ifTrue:[
+        IntPtr := LLVM IntPtrType: LLVMTargetData new.  
+    ].
+    ^ IntPtr
+
+    "Created: / 11-07-2015 / 07:05:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !LLVMType methodsFor:'accessing'!
@@ -56,14 +69,6 @@
     "Created: / 07-07-2015 / 21:59:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
-!LLVMType methodsFor:'debugging'!
-
-dump
-    LLVM DumpType: self.
-
-    "Created: / 07-07-2015 / 22:03:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-! !
-
 !LLVMType methodsFor:'debugging-dumping'!
 
 dumpOn: aStream
@@ -81,5 +86,48 @@
     ^ str
 
     "Created: / 10-07-2015 / 14:31:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+printOn: aStream
+    | kind |
+
+    super printOn: aStream.
+    aStream nextPutAll: self dumpString.
+    aStream nextPutAll: ' ['.
+    kind := self kind.
+    kind == LLVMVoidTypeKind ifTrue:[ 
+        aStream nextPutAll:'void'  
+    ] ifFalse:[ kind == LLVMHalfTypeKind ifTrue:[ 
+        aStream nextPutAll:'half'  
+    ] ifFalse:[ kind == LLVMFloatTypeKind ifTrue:[ 
+        aStream nextPutAll:'float'  
+    ] ifFalse:[ kind == LLVMDoubleTypeKind ifTrue:[ 
+        aStream nextPutAll:'double'  
+    ] ifFalse:[ kind == LLVMX86_FP80TypeKind ifTrue:[ 
+        aStream nextPutAll:'x86-fp80'  
+    ] ifFalse:[ kind == LLVMFP128TypeKind ifTrue:[ 
+        aStream nextPutAll:'fp128'  
+    ] ifFalse:[ kind == LLVMLabelTypeKind ifTrue:[ 
+        aStream nextPutAll:'label'  
+    ] ifFalse:[ kind == LLVMIntegerTypeKind ifTrue:[ 
+        aStream nextPutAll:'int'  
+    ] ifFalse:[ kind == LLVMFunctionTypeKind ifTrue:[ 
+        aStream nextPutAll:'funct'  
+    ] ifFalse:[ kind == LLVMStructTypeKind ifTrue:[ 
+        aStream nextPutAll:'struct'  
+    ] ifFalse:[ kind == LLVMArrayTypeKind ifTrue:[ 
+        aStream nextPutAll:'array'  
+    ] ifFalse:[ kind == LLVMPointerTypeKind ifTrue:[ 
+        aStream nextPutAll:'ptr'  
+    ] ifFalse:[ kind == LLVMVectorTypeKind ifTrue:[ 
+        aStream nextPutAll:'vector'  
+    ] ifFalse:[ kind == LLVMMetadataTypeKind ifTrue:[ 
+        aStream nextPutAll:'md'  
+    ] ifFalse:[ kind == LLVMX86_MMXTypeKind ifTrue:[ 
+        aStream nextPutAll:'x86-mmx'  
+    ]]]]]]]]]]]]]]].
+    aStream nextPutAll: ']'.
+
+    "Created: / 11-07-2015 / 07:08:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
--- a/LLVMValue.st	Sat Jul 11 06:38:54 2015 +0100
+++ b/LLVMValue.st	Sat Jul 11 10:03:12 2015 +0100
@@ -9,6 +9,20 @@
 	category:'LLVM-Core'
 !
 
+!LLVMValue methodsFor:'accessing'!
+
+name
+    ^ LLVM GetValueName: self
+
+    "Created: / 11-07-2015 / 07:28:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+name: aString
+    ^ LLVM SetValueName: self  _: aString
+
+    "Created: / 11-07-2015 / 07:31:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !LLVMValue methodsFor:'debugging'!
 
 inspectorExtraAttributes 
@@ -38,22 +52,13 @@
     ^ str
 
     "Created: / 10-07-2015 / 14:31:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-! !
-
-!LLVMValue methodsFor:'functions-accessing'!
+!
 
-parameterAt: index
-    ^ LLVM GetParam: self  _: index - 1
+printOn: aStream
+    super printOn: aStream.
+    aStream nextPutAll: ' - '.
+    aStream nextPutAll: self dumpString
 
-    "Created: / 07-07-2015 / 22:49:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 11-07-2015 / 07:09:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
-!LLVMValue methodsFor:'functions-adding'!
-
-addBasicBlockNamed: name
-    self assert: name isSingleByteString.
-    ^ LLVM AppendBasicBlock: self  _: name
-
-    "Created: / 08-07-2015 / 23:09:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-! !
-
--- a/Make.proto	Sat Jul 11 06:38:54 2015 +0100
+++ b/Make.proto	Sat Jul 11 10:03:12 2015 +0100
@@ -148,17 +148,19 @@
 $(OUTDIR)LLVMMCJITCompilerOptions.$(O) LLVMMCJITCompilerOptions.$(H): LLVMMCJITCompilerOptions.st $(INCLUDE_TOP)/jv/libllvms/LLVMObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMPassRegistry.$(O) LLVMPassRegistry.$(H): LLVMPassRegistry.st $(INCLUDE_TOP)/jv/libllvms/LLVMObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMTargetLibraryInfo.$(O) LLVMTargetLibraryInfo.$(H): LLVMTargetLibraryInfo.st $(INCLUDE_TOP)/jv/libllvms/LLVMObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)LLVMType.$(O) LLVMType.$(H): LLVMType.st $(INCLUDE_TOP)/jv/libllvms/LLVMObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMType.$(O) LLVMType.$(H): LLVMType.st $(INCLUDE_TOP)/jv/libllvms/LLVMObject.$(H) $(INCLUDE_TOP)/jv/libllvms/LLVMTypeKind.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMUse.$(O) LLVMUse.$(H): LLVMUse.st $(INCLUDE_TOP)/jv/libllvms/LLVMObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMValue.$(O) LLVMValue.$(H): LLVMValue.st $(INCLUDE_TOP)/jv/libllvms/LLVMObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMBuilder.$(O) LLVMBuilder.$(H): LLVMBuilder.st $(INCLUDE_TOP)/jv/libllvms/LLVMDisposableObject.$(H) $(INCLUDE_TOP)/jv/libllvms/LLVMObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMExecutionEngine.$(O) LLVMExecutionEngine.$(H): LLVMExecutionEngine.st $(INCLUDE_TOP)/jv/libllvms/LLVMDisposableObject.$(H) $(INCLUDE_TOP)/jv/libllvms/LLVMObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMFunction.$(O) LLVMFunction.$(H): LLVMFunction.st $(INCLUDE_TOP)/jv/libllvms/LLVMObject.$(H) $(INCLUDE_TOP)/jv/libllvms/LLVMValue.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMGenericValue.$(O) LLVMGenericValue.$(H): LLVMGenericValue.st $(INCLUDE_TOP)/jv/libllvms/LLVMDisposableObject.$(H) $(INCLUDE_TOP)/jv/libllvms/LLVMObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMMCJITMemoryManager.$(O) LLVMMCJITMemoryManager.$(H): LLVMMCJITMemoryManager.st $(INCLUDE_TOP)/jv/libllvms/LLVMDisposableObject.$(H) $(INCLUDE_TOP)/jv/libllvms/LLVMObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMModule.$(O) LLVMModule.$(H): LLVMModule.st $(INCLUDE_TOP)/jv/libllvms/LLVMDisposableObject.$(H) $(INCLUDE_TOP)/jv/libllvms/LLVMObject.$(H) $(INCLUDE_TOP)/jv/libllvms/LLVMTypeKind.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMModuleProvider.$(O) LLVMModuleProvider.$(H): LLVMModuleProvider.st $(INCLUDE_TOP)/jv/libllvms/LLVMDisposableObject.$(H) $(INCLUDE_TOP)/jv/libllvms/LLVMObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMPassManager.$(O) LLVMPassManager.$(H): LLVMPassManager.st $(INCLUDE_TOP)/jv/libllvms/LLVMDisposableObject.$(H) $(INCLUDE_TOP)/jv/libllvms/LLVMObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMTargetData.$(O) LLVMTargetData.$(H): LLVMTargetData.st $(INCLUDE_TOP)/jv/libllvms/LLVMDisposableObject.$(H) $(INCLUDE_TOP)/jv/libllvms/LLVMObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMStXMethod.$(O) LLVMStXMethod.$(H): LLVMStXMethod.st $(INCLUDE_TOP)/jv/libllvms/LLVMFunction.$(H) $(INCLUDE_TOP)/jv/libllvms/LLVMObject.$(H) $(INCLUDE_TOP)/jv/libllvms/LLVMValue.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(STCHDR)
 
 # ENDMAKEDEPEND --- do not remove this line
--- a/Make.spec	Sat Jul 11 06:38:54 2015 +0100
+++ b/Make.spec	Sat Jul 11 10:03:12 2015 +0100
@@ -83,12 +83,14 @@
 	LLVMValue \
 	LLVMBuilder \
 	LLVMExecutionEngine \
+	LLVMFunction \
 	LLVMGenericValue \
 	LLVMMCJITMemoryManager \
 	LLVMModule \
 	LLVMModuleProvider \
 	LLVMPassManager \
 	LLVMTargetData \
+	LLVMStXMethod \
 
 
 
@@ -126,12 +128,14 @@
     $(OUTDIR_SLASH)LLVMValue.$(O) \
     $(OUTDIR_SLASH)LLVMBuilder.$(O) \
     $(OUTDIR_SLASH)LLVMExecutionEngine.$(O) \
+    $(OUTDIR_SLASH)LLVMFunction.$(O) \
     $(OUTDIR_SLASH)LLVMGenericValue.$(O) \
     $(OUTDIR_SLASH)LLVMMCJITMemoryManager.$(O) \
     $(OUTDIR_SLASH)LLVMModule.$(O) \
     $(OUTDIR_SLASH)LLVMModuleProvider.$(O) \
     $(OUTDIR_SLASH)LLVMPassManager.$(O) \
     $(OUTDIR_SLASH)LLVMTargetData.$(O) \
+    $(OUTDIR_SLASH)LLVMStXMethod.$(O) \
     $(OUTDIR_SLASH)extensions.$(O) \
 
 
--- a/abbrev.stc	Sat Jul 11 06:38:54 2015 +0100
+++ b/abbrev.stc	Sat Jul 11 10:03:12 2015 +0100
@@ -33,9 +33,11 @@
 LLVMValue LLVMValue jv:libllvms 'LLVM-Core' 0
 LLVMBuilder LLVMBuilder jv:libllvms 'LLVM-Core' 0
 LLVMExecutionEngine LLVMExecutionEngine jv:libllvms 'LLVM-Core' 0
+LLVMFunction LLVMFunction jv:libllvms 'LLVM-Core' 0
 LLVMGenericValue LLVMGenericValue jv:libllvms 'LLVM-Core' 0
 LLVMMCJITMemoryManager LLVMMCJITMemoryManager jv:libllvms 'LLVM-Core' 0
 LLVMModule LLVMModule jv:libllvms 'LLVM-Core' 0
 LLVMModuleProvider LLVMModuleProvider jv:libllvms 'LLVM-Core' 0
 LLVMPassManager LLVMPassManager jv:libllvms 'LLVM-Core' 0
 LLVMTargetData LLVMTargetData jv:libllvms 'LLVM-Core' 0
+LLVMStXMethod LLVMStXMethod jv:libllvms 'LLVM-StX' 0
--- a/bc.mak	Sat Jul 11 06:38:54 2015 +0100
+++ b/bc.mak	Sat Jul 11 10:03:12 2015 +0100
@@ -95,17 +95,19 @@
 $(OUTDIR)LLVMMCJITCompilerOptions.$(O) LLVMMCJITCompilerOptions.$(H): LLVMMCJITCompilerOptions.st $(INCLUDE_TOP)\jv\libllvms\LLVMObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMPassRegistry.$(O) LLVMPassRegistry.$(H): LLVMPassRegistry.st $(INCLUDE_TOP)\jv\libllvms\LLVMObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMTargetLibraryInfo.$(O) LLVMTargetLibraryInfo.$(H): LLVMTargetLibraryInfo.st $(INCLUDE_TOP)\jv\libllvms\LLVMObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)LLVMType.$(O) LLVMType.$(H): LLVMType.st $(INCLUDE_TOP)\jv\libllvms\LLVMObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMType.$(O) LLVMType.$(H): LLVMType.st $(INCLUDE_TOP)\jv\libllvms\LLVMObject.$(H) $(INCLUDE_TOP)\jv\libllvms\LLVMTypeKind.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMUse.$(O) LLVMUse.$(H): LLVMUse.st $(INCLUDE_TOP)\jv\libllvms\LLVMObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMValue.$(O) LLVMValue.$(H): LLVMValue.st $(INCLUDE_TOP)\jv\libllvms\LLVMObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMBuilder.$(O) LLVMBuilder.$(H): LLVMBuilder.st $(INCLUDE_TOP)\jv\libllvms\LLVMDisposableObject.$(H) $(INCLUDE_TOP)\jv\libllvms\LLVMObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMExecutionEngine.$(O) LLVMExecutionEngine.$(H): LLVMExecutionEngine.st $(INCLUDE_TOP)\jv\libllvms\LLVMDisposableObject.$(H) $(INCLUDE_TOP)\jv\libllvms\LLVMObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMFunction.$(O) LLVMFunction.$(H): LLVMFunction.st $(INCLUDE_TOP)\jv\libllvms\LLVMObject.$(H) $(INCLUDE_TOP)\jv\libllvms\LLVMValue.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMGenericValue.$(O) LLVMGenericValue.$(H): LLVMGenericValue.st $(INCLUDE_TOP)\jv\libllvms\LLVMDisposableObject.$(H) $(INCLUDE_TOP)\jv\libllvms\LLVMObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMMCJITMemoryManager.$(O) LLVMMCJITMemoryManager.$(H): LLVMMCJITMemoryManager.st $(INCLUDE_TOP)\jv\libllvms\LLVMDisposableObject.$(H) $(INCLUDE_TOP)\jv\libllvms\LLVMObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMModule.$(O) LLVMModule.$(H): LLVMModule.st $(INCLUDE_TOP)\jv\libllvms\LLVMDisposableObject.$(H) $(INCLUDE_TOP)\jv\libllvms\LLVMObject.$(H) $(INCLUDE_TOP)\jv\libllvms\LLVMTypeKind.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMModuleProvider.$(O) LLVMModuleProvider.$(H): LLVMModuleProvider.st $(INCLUDE_TOP)\jv\libllvms\LLVMDisposableObject.$(H) $(INCLUDE_TOP)\jv\libllvms\LLVMObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMPassManager.$(O) LLVMPassManager.$(H): LLVMPassManager.st $(INCLUDE_TOP)\jv\libllvms\LLVMDisposableObject.$(H) $(INCLUDE_TOP)\jv\libllvms\LLVMObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMTargetData.$(O) LLVMTargetData.$(H): LLVMTargetData.st $(INCLUDE_TOP)\jv\libllvms\LLVMDisposableObject.$(H) $(INCLUDE_TOP)\jv\libllvms\LLVMObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMStXMethod.$(O) LLVMStXMethod.$(H): LLVMStXMethod.st $(INCLUDE_TOP)\jv\libllvms\LLVMFunction.$(H) $(INCLUDE_TOP)\jv\libllvms\LLVMObject.$(H) $(INCLUDE_TOP)\jv\libllvms\LLVMValue.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(STCHDR)
 
 # ENDMAKEDEPEND --- do not remove this line
--- a/jv_libllvms.st	Sat Jul 11 06:38:54 2015 +0100
+++ b/jv_libllvms.st	Sat Jul 11 10:03:12 2015 +0100
@@ -100,12 +100,14 @@
         LLVMValue
         LLVMBuilder
         LLVMExecutionEngine
+        LLVMFunction
         LLVMGenericValue
         LLVMMCJITMemoryManager
         LLVMModule
         LLVMModuleProvider
         LLVMPassManager
         LLVMTargetData
+        LLVMStXMethod
     )
 !
 
--- a/libInit.cc	Sat Jul 11 06:38:54 2015 +0100
+++ b/libInit.cc	Sat Jul 11 10:03:12 2015 +0100
@@ -59,12 +59,14 @@
 _LLVMValue_Init(pass,__pRT__,snd);
 _LLVMBuilder_Init(pass,__pRT__,snd);
 _LLVMExecutionEngine_Init(pass,__pRT__,snd);
+_LLVMFunction_Init(pass,__pRT__,snd);
 _LLVMGenericValue_Init(pass,__pRT__,snd);
 _LLVMMCJITMemoryManager_Init(pass,__pRT__,snd);
 _LLVMModule_Init(pass,__pRT__,snd);
 _LLVMModuleProvider_Init(pass,__pRT__,snd);
 _LLVMPassManager_Init(pass,__pRT__,snd);
 _LLVMTargetData_Init(pass,__pRT__,snd);
+_LLVMStXMethod_Init(pass,__pRT__,snd);
 
 _jv_137libllvms_extensions_Init(pass,__pRT__,snd);
 __END_PACKAGE__();