mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00
ZJIT: Set PC before StringCopy (#14141)
ZJIT: Set PC before StringCopy This function allocates.
This commit is contained in:
parent
24d0b458cd
commit
a260bbc550
2 changed files with 36 additions and 33 deletions
|
@ -329,7 +329,7 @@ fn gen_insn(cb: &mut CodeBlock, jit: &mut JITState, asm: &mut Assembler, functio
|
|||
Insn::NewArray { elements, state } => gen_new_array(asm, opnds!(elements), &function.frame_state(*state)),
|
||||
Insn::NewRange { low, high, flag, state } => gen_new_range(asm, opnd!(low), opnd!(high), *flag, &function.frame_state(*state)),
|
||||
Insn::ArrayDup { val, state } => gen_array_dup(asm, opnd!(val), &function.frame_state(*state)),
|
||||
Insn::StringCopy { val, chilled } => gen_string_copy(asm, opnd!(val), *chilled),
|
||||
Insn::StringCopy { val, chilled, state } => gen_string_copy(asm, opnd!(val), *chilled, &function.frame_state(*state)),
|
||||
Insn::Param { idx } => unreachable!("block.insns should not have Insn::Param({idx})"),
|
||||
Insn::Snapshot { .. } => return Some(()), // we don't need to do anything for this instruction at the moment
|
||||
Insn::Jump(branch) => return gen_jump(jit, asm, branch),
|
||||
|
@ -871,8 +871,9 @@ fn gen_send_without_block_direct(
|
|||
}
|
||||
|
||||
/// Compile a string resurrection
|
||||
fn gen_string_copy(asm: &mut Assembler, recv: Opnd, chilled: bool) -> Opnd {
|
||||
fn gen_string_copy(asm: &mut Assembler, recv: Opnd, chilled: bool, state: &FrameState) -> Opnd {
|
||||
// TODO: split rb_ec_str_resurrect into separate functions
|
||||
gen_prepare_call_with_gc(asm, state);
|
||||
let chilled = if chilled { Opnd::Imm(1) } else { Opnd::Imm(0) };
|
||||
asm_ccall!(asm, rb_ec_str_resurrect, EC, recv, chilled)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue