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

ruby-changes:69084

From: John <ko1@a...>
Date: Thu, 21 Oct 2021 08:20:46 +0900 (JST)
Subject: [ruby-changes:69084] 69a2531249 (master): Implement gen_putstring

https://git.ruby-lang.org/ruby.git/commit/?id=69a2531249

From 69a2531249f17cb3a3bf0fde85256d5a20324344 Mon Sep 17 00:00:00 2001
From: John Hawthorn <john@h...>
Date: Fri, 21 May 2021 20:18:58 -0700
Subject: Implement gen_putstring

---
 yjit_codegen.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/yjit_codegen.c b/yjit_codegen.c
index 692389fed9..e79e716794 100644
--- a/yjit_codegen.c
+++ b/yjit_codegen.c
@@ -1092,6 +1092,25 @@ gen_putobject(jitstate_t* jit, ctx_t* ctx) https://github.com/ruby/ruby/blob/trunk/yjit_codegen.c#L1092
     return YJIT_KEEP_COMPILING;
 }
 
+static codegen_status_t
+gen_putstring(jitstate_t* jit, ctx_t* ctx)
+{
+    VALUE put_val = jit_get_arg(jit, 0);
+
+    // Save the PC and SP because the callee will allocate
+    jit_save_pc(jit, REG0);
+    jit_save_sp(jit, ctx);
+
+    mov(cb, C_ARG_REGS[0], REG_EC);
+    jit_mov_gc_ptr(jit, cb, C_ARG_REGS[1], put_val);
+    call_ptr(cb, REG0, (void *)rb_ec_str_resurrect);
+
+    x86opnd_t stack_top = ctx_stack_push(ctx, TYPE_STRING);
+    mov(cb, stack_top, RAX);
+
+    return YJIT_KEEP_COMPILING;
+}
+
 static codegen_status_t
 gen_putobject_int2fix(jitstate_t* jit, ctx_t* ctx)
 {
@@ -4001,6 +4020,7 @@ yjit_init_codegen(void) https://github.com/ruby/ruby/blob/trunk/yjit_codegen.c#L4020
     yjit_reg_op(BIN(concatstrings), gen_concatstrings);
     yjit_reg_op(BIN(putnil), gen_putnil);
     yjit_reg_op(BIN(putobject), gen_putobject);
+    yjit_reg_op(BIN(putstring), gen_putstring);
     yjit_reg_op(BIN(putobject_INT2FIX_0_), gen_putobject_int2fix);
     yjit_reg_op(BIN(putobject_INT2FIX_1_), gen_putobject_int2fix);
     yjit_reg_op(BIN(putself), gen_putself);
-- 
cgit v1.2.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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