diff options
Diffstat (limited to 'llgo/irgen/runtime.go')
-rw-r--r-- | llgo/irgen/runtime.go | 39 |
1 files changed, 22 insertions, 17 deletions
diff --git a/llgo/irgen/runtime.go b/llgo/irgen/runtime.go index c58d9df7784..6e131ce23af 100644 --- a/llgo/irgen/runtime.go +++ b/llgo/irgen/runtime.go @@ -64,6 +64,7 @@ type runtimeInterface struct { // Runtime intrinsics append, assertInterface, + byteArrayToString, canRecover, chanCap, chanLen, @@ -92,7 +93,6 @@ type runtimeInterface struct { New, newChannel, newMap, - NewNopointers, newSelect, panic, printBool, @@ -121,6 +121,7 @@ type runtimeInterface struct { stringiter2, stringPlus, stringSlice, + stringToByteArray, stringToIntArray, typeDescriptorsEqual, undefer runtimeFnInfo @@ -141,6 +142,7 @@ func newRuntimeInterface(module llvm.Module, tm *llvmTypeMap) (*runtimeInterface UnsafePointer := types.Typ[types.UnsafePointer] EmptyInterface := types.NewInterface(nil, nil) + ByteSlice := types.NewSlice(types.Typ[types.Byte]) IntSlice := types.NewSlice(types.Typ[types.Int]) for _, rt := range [...]struct { @@ -162,6 +164,13 @@ func newRuntimeInterface(module llvm.Module, tm *llvmTypeMap) (*runtimeInterface res: []types.Type{UnsafePointer}, }, { + name: "__go_byte_array_to_string", + rfi: &ri.byteArrayToString, + args: []types.Type{UnsafePointer, Int}, + res: []types.Type{String}, + attrs: []llvm.Attribute{llvm.NoUnwindAttribute}, + }, + { name: "__go_can_recover", rfi: &ri.canRecover, args: []types.Type{UnsafePointer}, @@ -301,10 +310,11 @@ func newRuntimeInterface(module llvm.Module, tm *llvmTypeMap) (*runtimeInterface res: []types.Type{Int}, }, { - name: "__go_new", - rfi: &ri.New, - args: []types.Type{UnsafePointer, Uintptr}, - res: []types.Type{UnsafePointer}, + name: "__go_new", + rfi: &ri.New, + args: []types.Type{UnsafePointer, Uintptr}, + res: []types.Type{UnsafePointer}, + attrs: []llvm.Attribute{llvm.NoUnwindAttribute}, }, { name: "__go_new_channel", @@ -319,12 +329,6 @@ func newRuntimeInterface(module llvm.Module, tm *llvmTypeMap) (*runtimeInterface res: []types.Type{UnsafePointer}, }, { - name: "__go_new_nopointers", - rfi: &ri.NewNopointers, - args: []types.Type{UnsafePointer, Uintptr}, - res: []types.Type{UnsafePointer}, - }, - { name: "runtime.newselect", rfi: &ri.newSelect, args: []types.Type{Int32}, @@ -466,6 +470,13 @@ func newRuntimeInterface(module llvm.Module, tm *llvmTypeMap) (*runtimeInterface res: []types.Type{String}, }, { + name: "__go_string_to_byte_array", + rfi: &ri.stringToByteArray, + args: []types.Type{String}, + res: []types.Type{ByteSlice}, + attrs: []llvm.Attribute{llvm.NoUnwindAttribute}, + }, + { name: "__go_string_to_int_array", rfi: &ri.stringToIntArray, args: []types.Type{String}, @@ -563,12 +574,6 @@ func (fr *frame) createZExtOrTrunc(v llvm.Value, t llvm.Type, name string) llvm. return v } -func (fr *frame) createMalloc(size llvm.Value) llvm.Value { - return fr.runtime.NewNopointers.callOnly(fr, - llvm.ConstNull(llvm.PointerType(llvm.Int8Type(), 0)), - fr.createZExtOrTrunc(size, fr.target.IntPtrType(), ""))[0] -} - func (fr *frame) createTypeMalloc(t types.Type) llvm.Value { size := llvm.ConstInt(fr.target.IntPtrType(), uint64(fr.llvmtypes.Sizeof(t)), false) malloc := fr.runtime.New.callOnly(fr, fr.types.ToRuntime(t), size)[0] |