@@ -1091,6 +1091,24 @@ gen_putobject(jitstate_t* jit, ctx_t* ctx)
1091
1091
return YJIT_KEEP_COMPILING ;
1092
1092
}
1093
1093
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
+
1094
1112
static codegen_status_t
1095
1113
gen_putobject_int2fix (jitstate_t * jit , ctx_t * ctx )
1096
1114
{
@@ -4000,6 +4018,7 @@ yjit_init_codegen(void)
4000
4018
yjit_reg_op (BIN (concatstrings ), gen_concatstrings );
4001
4019
yjit_reg_op (BIN (putnil ), gen_putnil );
4002
4020
yjit_reg_op (BIN (putobject ), gen_putobject );
4021
+ yjit_reg_op (BIN (putstring ), gen_putstring );
4003
4022
yjit_reg_op (BIN (putobject_INT2FIX_0_ ), gen_putobject_int2fix );
4004
4023
yjit_reg_op (BIN (putobject_INT2FIX_1_ ), gen_putobject_int2fix );
4005
4024
yjit_reg_op (BIN (putself ), gen_putself );
0 commit comments