summaryrefslogtreecommitdiff
path: root/vendor/github.com/bytedance/sonic/internal/jit
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/bytedance/sonic/internal/jit')
-rw-r--r--vendor/github.com/bytedance/sonic/internal/jit/assembler_amd64.go12
1 files changed, 12 insertions, 0 deletions
diff --git a/vendor/github.com/bytedance/sonic/internal/jit/assembler_amd64.go b/vendor/github.com/bytedance/sonic/internal/jit/assembler_amd64.go
index 00e6009db..d7d1751e5 100644
--- a/vendor/github.com/bytedance/sonic/internal/jit/assembler_amd64.go
+++ b/vendor/github.com/bytedance/sonic/internal/jit/assembler_amd64.go
@@ -72,6 +72,18 @@ func (self *BaseAssembler) NOPn(n int) {
}
}
+func (self *BaseAssembler) StorePtr(ptr int64, to obj.Addr, tmp obj.Addr) {
+ if (to.Type != obj.TYPE_MEM) || (tmp.Type != obj.TYPE_REG) {
+ panic("must store imm to memory, tmp must be register")
+ }
+ if (ptr >> 32) != 0 {
+ self.Emit("MOVQ", Imm(ptr), tmp)
+ self.Emit("MOVQ", tmp, to)
+ } else {
+ self.Emit("MOVQ", Imm(ptr), to);
+ }
+}
+
func (self *BaseAssembler) Byte(v ...byte) {
for ; len(v) >= 8; v = v[8:] { self.From("QUAD", Imm(rt.Get64(v))) }
for ; len(v) >= 4; v = v[4:] { self.From("LONG", Imm(int64(rt.Get32(v)))) }