YJIT: Try splitting getlocal/setlocal blocks (#10648)
This commit is contained in:
parent
46480e3042
commit
ab228bd084
@ -2265,6 +2265,12 @@ fn gen_getlocal_generic(
|
|||||||
ep_offset: u32,
|
ep_offset: u32,
|
||||||
level: u32,
|
level: u32,
|
||||||
) -> Option<CodegenStatus> {
|
) -> Option<CodegenStatus> {
|
||||||
|
// Start the block with this instruction for EP-escape invalidation
|
||||||
|
if level == 0 && !jit.at_current_insn() {
|
||||||
|
defer_compilation(jit, asm, ocb);
|
||||||
|
return Some(EndBlock);
|
||||||
|
}
|
||||||
|
|
||||||
let local_opnd = if level == 0 && jit.assume_no_ep_escape(asm, ocb) {
|
let local_opnd = if level == 0 && jit.assume_no_ep_escape(asm, ocb) {
|
||||||
// Load the local using SP register
|
// Load the local using SP register
|
||||||
asm.ctx.ep_opnd(-(ep_offset as i32))
|
asm.ctx.ep_opnd(-(ep_offset as i32))
|
||||||
@ -2326,6 +2332,12 @@ fn gen_setlocal_generic(
|
|||||||
ep_offset: u32,
|
ep_offset: u32,
|
||||||
level: u32,
|
level: u32,
|
||||||
) -> Option<CodegenStatus> {
|
) -> Option<CodegenStatus> {
|
||||||
|
// Start the block with this instruction for EP-escape invalidation
|
||||||
|
if level == 0 && !jit.at_current_insn() {
|
||||||
|
defer_compilation(jit, asm, ocb);
|
||||||
|
return Some(EndBlock);
|
||||||
|
}
|
||||||
|
|
||||||
let value_type = asm.ctx.get_opnd_type(StackOpnd(0));
|
let value_type = asm.ctx.get_opnd_type(StackOpnd(0));
|
||||||
|
|
||||||
// Fallback because of write barrier
|
// Fallback because of write barrier
|
||||||
|
Loading…
x
Reference in New Issue
Block a user