@@ -8223,6 +8223,7 @@ fn gen_struct_aset(
8223
8223
fn gen_send_dynamic < F : Fn ( & mut Assembler ) -> Opnd > (
8224
8224
jit : & mut JITState ,
8225
8225
asm : & mut Assembler ,
8226
+ ocb : & mut OutlinedCb ,
8226
8227
cd : * const rb_call_data ,
8227
8228
sp_pops : usize ,
8228
8229
vm_sendish : F ,
@@ -8262,7 +8263,10 @@ fn gen_send_dynamic<F: Fn(&mut Assembler) -> Opnd>(
8262
8263
gen_counter_incr ( asm, Counter :: num_send_dynamic) ;
8263
8264
8264
8265
jit_perf_symbol_pop ! ( jit, asm, PerfMap :: Codegen ) ;
8265
- Some ( KeepCompiling )
8266
+
8267
+ // End the current block for invalidationg and sharing the same successor
8268
+ jump_to_next_insn ( jit, asm, ocb) ;
8269
+ Some ( EndBlock )
8266
8270
}
8267
8271
8268
8272
fn gen_send_general (
@@ -8776,7 +8780,7 @@ fn gen_opt_send_without_block(
8776
8780
}
8777
8781
8778
8782
// Otherwise, fallback to dynamic dispatch using the interpreter's implementation of send
8779
- gen_send_dynamic ( jit, asm, cd, unsafe { rb_yjit_sendish_sp_pops ( ( * cd) . ci ) } , |asm| {
8783
+ gen_send_dynamic ( jit, asm, ocb , cd, unsafe { rb_yjit_sendish_sp_pops ( ( * cd) . ci ) } , |asm| {
8780
8784
extern "C" {
8781
8785
fn rb_vm_opt_send_without_block ( ec : EcPtr , cfp : CfpPtr , cd : VALUE ) -> VALUE ;
8782
8786
}
@@ -8801,7 +8805,7 @@ fn gen_send(
8801
8805
8802
8806
// Otherwise, fallback to dynamic dispatch using the interpreter's implementation of send
8803
8807
let blockiseq = jit. get_arg ( 1 ) . as_iseq ( ) ;
8804
- gen_send_dynamic ( jit, asm, cd, unsafe { rb_yjit_sendish_sp_pops ( ( * cd) . ci ) } , |asm| {
8808
+ gen_send_dynamic ( jit, asm, ocb , cd, unsafe { rb_yjit_sendish_sp_pops ( ( * cd) . ci ) } , |asm| {
8805
8809
extern "C" {
8806
8810
fn rb_vm_send ( ec : EcPtr , cfp : CfpPtr , cd : VALUE , blockiseq : IseqPtr ) -> VALUE ;
8807
8811
}
@@ -8824,7 +8828,7 @@ fn gen_invokeblock(
8824
8828
}
8825
8829
8826
8830
// Otherwise, fallback to dynamic dispatch using the interpreter's implementation of send
8827
- gen_send_dynamic ( jit, asm, cd, unsafe { rb_yjit_invokeblock_sp_pops ( ( * cd) . ci ) } , |asm| {
8831
+ gen_send_dynamic ( jit, asm, ocb , cd, unsafe { rb_yjit_invokeblock_sp_pops ( ( * cd) . ci ) } , |asm| {
8828
8832
extern "C" {
8829
8833
fn rb_vm_invokeblock ( ec : EcPtr , cfp : CfpPtr , cd : VALUE ) -> VALUE ;
8830
8834
}
@@ -8984,7 +8988,7 @@ fn gen_invokesuper(
8984
8988
8985
8989
// Otherwise, fallback to dynamic dispatch using the interpreter's implementation of send
8986
8990
let blockiseq = jit. get_arg ( 1 ) . as_iseq ( ) ;
8987
- gen_send_dynamic ( jit, asm, cd, unsafe { rb_yjit_sendish_sp_pops ( ( * cd) . ci ) } , |asm| {
8991
+ gen_send_dynamic ( jit, asm, ocb , cd, unsafe { rb_yjit_sendish_sp_pops ( ( * cd) . ci ) } , |asm| {
8988
8992
extern "C" {
8989
8993
fn rb_vm_invokesuper ( ec : EcPtr , cfp : CfpPtr , cd : VALUE , blockiseq : IseqPtr ) -> VALUE ;
8990
8994
}
0 commit comments