summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxime Chevalier-Boisvert <maxime.chevalierboisvert@shopify.com>2022-07-12 14:59:31 -0400
committerTakashi Kokubun <takashikkbn@gmail.com>2022-08-29 08:46:59 -0700
commitb45b29fdbf43ea6043c1df041372842a07f5b3a8 (patch)
tree694590ed8342f8d3addadde9f447bbedb6a74542
parent38c2fb8a90172bcaabc153016f0a43b92a921d9c (diff)
Port gen_getlocal()
-rw-r--r--yjit/src/codegen.rs20
1 files changed, 11 insertions, 9 deletions
diff --git a/yjit/src/codegen.rs b/yjit/src/codegen.rs
index 06c7756c7a..e78463ce5e 100644
--- a/yjit/src/codegen.rs
+++ b/yjit/src/codegen.rs
@@ -1541,23 +1541,24 @@ fn gen_get_ep(asm: &mut Assembler, level: u32) -> Opnd {
ep_opnd
}
-/*
fn gen_getlocal_generic(
ctx: &mut Context,
- cb: &mut CodeBlock,
+ asm: &mut Assembler,
local_idx: u32,
level: u32,
) -> CodegenStatus {
- gen_get_ep(cb, REG0, level);
+ // Load environment pointer EP (level 0) from CFP
+ let ep_opnd = gen_get_ep(asm, level);
// Load the local from the block
// val = *(vm_get_ep(GET_EP(), level) - idx);
let offs = -(SIZEOF_VALUE as i32 * local_idx as i32);
- mov(cb, REG0, mem_opnd(64, REG0, offs));
+ let local_opnd = Opnd::mem(64, ep_opnd, offs);
// Write the local at SP
let stack_top = ctx.stack_push(Type::Unknown);
- mov(cb, stack_top, REG0);
+
+ asm.mov(stack_top, local_opnd);
KeepCompiling
}
@@ -1565,24 +1566,25 @@ fn gen_getlocal_generic(
fn gen_getlocal(
jit: &mut JITState,
ctx: &mut Context,
- cb: &mut CodeBlock,
+ asm: &mut Assembler,
_ocb: &mut OutlinedCb,
) -> CodegenStatus {
let idx = jit_get_arg(jit, 0);
let level = jit_get_arg(jit, 1);
- gen_getlocal_generic(ctx, cb, idx.as_u32(), level.as_u32())
+ gen_getlocal_generic(ctx, asm, idx.as_u32(), level.as_u32())
}
fn gen_getlocal_wc1(
jit: &mut JITState,
ctx: &mut Context,
- cb: &mut CodeBlock,
+ asm: &mut Assembler,
_ocb: &mut OutlinedCb,
) -> CodegenStatus {
let idx = jit_get_arg(jit, 0);
- gen_getlocal_generic(ctx, cb, idx.as_u32(), 1)
+ gen_getlocal_generic(ctx, asm, idx.as_u32(), 1)
}
+/*
fn gen_setlocal_wc0(
jit: &mut JITState,
ctx: &mut Context,