[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]