summaryrefslogtreecommitdiffstats
path: root/llgo/irgen/runtime.go
diff options
context:
space:
mode:
Diffstat (limited to 'llgo/irgen/runtime.go')
-rw-r--r--llgo/irgen/runtime.go39
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]
OpenPOWER on IntegriCloud