8000 Merge pull request #189 from jhawthorn/gen_putstring · jhawthorn/ruby@d67ffb9 · GitHub
[go: up one dir, main page]

Skip to content

Commit d67ffb9

Browse files
authored
Merge pull request ruby#189 from jhawthorn/gen_putstring
Implement gen_putstring
2 parents d061fa5 + 95a05fb commit d67ffb9

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

yjit_codegen.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1091,6 +1091,24 @@ gen_putobject(jitstate_t* jit, ctx_t* ctx)
10911091
return YJIT_KEEP_COMPILING;
10921092
}
10931093

1094+
static codegen_status_t
1095+
gen_putstring(jitstate_t* jit, ctx_t* ctx)
1096+
{
1097+
VALUE put_val = jit_get_arg(jit, 0);
1098+
1099+
// Save the PC and SP because the callee will allocate
1100+
jit_prepare_routine_call(jit, ctx, REG0);
1101+
1102+
mov(cb, C_ARG_REGS[0], REG_EC);
1103+
jit_mov_gc_ptr(jit, cb, C_ARG_REGS[1], put_val);
1104+
call_ptr(cb, REG0, (void *)rb_ec_str_resurrect);
1105+
1106+
x86opnd_t stack_top = ctx_stack_push(ctx, TYPE_STRING);
1107+
mov(cb, stack_top, RAX);
1108+
1109+
return YJIT_KEEP_COMPILING;
1110+
}
1111+
10941112
static codegen_status_t
10951113
gen_putobject_int2fix(jitstate_t* jit, ctx_t* ctx)
10961114
{
@@ -4000,6 +4018,7 @@ yjit_init_codegen(void)
40004018
yjit_reg_op(BIN(concatstrings), gen_concatstrings);
40014019
yjit_reg_op(BIN(putnil), gen_putnil);
40024020
yjit_reg_op(BIN(putobject), gen_putobject);
4021+
yjit_reg_op(BIN(putstring), gen_putstring);
40034022
yjit_reg_op(BIN(putobject_INT2FIX_0_), gen_putobject_int2fix);
40044023
yjit_reg_op(BIN(putobject_INT2FIX_1_), gen_putobject_int2fix);
40054024
yjit_reg_op(BIN(putself), gen_putself);

0 commit comments

Comments
 (0)
0