...
1
16
17 package jit
18
19 import (
20 `reflect`
21 `unsafe`
22
23 `github.com/bytedance/sonic/internal/rt`
24 `github.com/twitchyliquid64/golang-asm/obj`
25 )
26
27 func Func(f interface{}) obj.Addr {
28 if p := rt.UnpackEface(f); p.Type.Kind() != reflect.Func {
29 panic("f is not a function")
30 } else {
31 return Imm(*(*int64)(p.Value))
32 }
33 }
34
35 func Type(t reflect.Type) obj.Addr {
36 return Gtype(rt.UnpackType(t))
37 }
38
39 func Itab(i *rt.GoType, t reflect.Type) obj.Addr {
40 return Imm(int64(uintptr(unsafe.Pointer(rt.Getitab(rt.IfaceType(i), rt.UnpackType(t), false)))))
41 }
42
43 func Gitab(i *rt.GoItab) obj.Addr {
44 return Imm(int64(uintptr(unsafe.Pointer(i))))
45 }
46
47 func Gtype(t *rt.GoType) obj.Addr {
48 return Imm(int64(uintptr(unsafe.Pointer(t))))
49 }
50
View as plain text