ruby-changes:73163
From: Maxime <ko1@a...>
Date: Tue, 30 Aug 2022 00:57:43 +0900 (JST)
Subject: [ruby-changes:73163] b45b29fdbf (master): Port gen_getlocal()
https://git.ruby-lang.org/ruby.git/commit/?id=b45b29fdbf From b45b29fdbf43ea6043c1df041372842a07f5b3a8 Mon Sep 17 00:00:00 2001 From: Maxime Chevalier-Boisvert <maxime.chevalierboisvert@s...> Date: Tue, 12 Jul 2022 14:59:31 -0400 Subject: Port gen_getlocal() --- yjit/src/codegen.rs | 20 +++++++++++--------- 1 file 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 { https://github.com/ruby/ruby/blob/trunk/yjit/src/codegen.rs#L1541 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( https://github.com/ruby/ruby/blob/trunk/yjit/src/codegen.rs#L1566 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, -- cgit v1.2.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/