diff options
author | Maxime Chevalier-Boisvert <maxime.chevalierboisvert@shopify.com> | 2022-07-12 14:59:31 -0400 |
---|---|---|
committer | Takashi Kokubun <takashikkbn@gmail.com> | 2022-08-29 08:46:59 -0700 |
commit | b45b29fdbf43ea6043c1df041372842a07f5b3a8 (patch) | |
tree | 694590ed8342f8d3addadde9f447bbedb6a74542 /yjit | |
parent | 38c2fb8a90172bcaabc153016f0a43b92a921d9c (diff) | |
download | ruby-b45b29fdbf43ea6043c1df041372842a07f5b3a8.tar.gz |
Port gen_getlocal()
Diffstat (limited to 'yjit')
-rw-r--r-- | yjit/src/codegen.rs | 20 |
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, |