@@ -4,7 +4,7 @@ use super::{
44} ;
55use crate :: builtins:: BuiltinFunction ;
66use crate :: vm:: jit:: TraceStep ;
7- use crate :: vm:: { HostCallExecOutcome , Program , Value , Vm , VmError , VmResult } ;
7+ use crate :: vm:: { HostCallExecOutcome , Value , Vm , VmError , VmResult } ;
88use std:: sync:: OnceLock ;
99
1010pub ( super ) struct X86_64Backend ;
@@ -87,9 +87,9 @@ struct ValueLayout {
8787struct NativeStackLayout {
8888 vm_stack_offset : i32 ,
8989 vm_locals_offset : i32 ,
90- vm_program_offset : i32 ,
90+ vm_program_constants_ptr_offset : i32 ,
91+ vm_program_constants_len_offset : i32 ,
9192 vm_ip_offset : i32 ,
92- program_constants_offset : i32 ,
9393 stack_vec : VecLayout ,
9494 value : ValueLayout ,
9595}
@@ -362,20 +362,23 @@ fn detect_native_stack_layout() -> VmResult<NativeStackLayout> {
362362fn detect_native_stack_layout_uncached ( ) -> VmResult < NativeStackLayout > {
363363 let vm_stack_offset = usize_to_i32 ( std:: mem:: offset_of!( Vm , stack) , "Vm::stack offset" ) ?;
364364 let vm_locals_offset = usize_to_i32 ( std:: mem:: offset_of!( Vm , locals) , "Vm::locals offset" ) ?;
365- let vm_program_offset = usize_to_i32 ( std:: mem:: offset_of!( Vm , program) , "Vm::program offset" ) ?;
366- let vm_ip_offset = usize_to_i32 ( std:: mem:: offset_of!( Vm , ip) , "Vm::ip offset" ) ?;
367- let program_constants_offset = usize_to_i32 (
368- std:: mem:: offset_of!( Program , constants) ,
369- "Program::constants offset" ,
365+ let vm_program_constants_ptr_offset = usize_to_i32 (
366+ std:: mem:: offset_of!( Vm , program_constants_ptr) ,
367+ "Vm::program_constants_ptr offset" ,
368+ ) ?;
369+ let vm_program_constants_len_offset = usize_to_i32 (
370+ std:: mem:: offset_of!( Vm , program_constants_len) ,
371+ "Vm::program_constants_len offset" ,
370372 ) ?;
373+ let vm_ip_offset = usize_to_i32 ( std:: mem:: offset_of!( Vm , ip) , "Vm::ip offset" ) ?;
371374 let stack_vec = detect_vec_layout ( ) ?;
372375 let value = detect_value_layout ( ) ?;
373376 Ok ( NativeStackLayout {
374377 vm_stack_offset,
375378 vm_locals_offset,
376- vm_program_offset,
379+ vm_program_constants_ptr_offset,
380+ vm_program_constants_len_offset,
377381 vm_ip_offset,
378- program_constants_offset,
379382 stack_vec,
380383 value,
381384 } )
@@ -1198,13 +1201,8 @@ fn emit_native_step_ldc_inline(
11981201 let stack_len_offset = vec_len_disp ( layout. vm_stack_offset , layout. stack_vec ) ?;
11991202 let stack_ptr_offset = vec_ptr_disp ( layout. vm_stack_offset , layout. stack_vec ) ?;
12001203 let stack_cap_offset = vec_cap_disp ( layout. vm_stack_offset , layout. stack_vec ) ?;
1201- let constants_base = checked_add_i32 (
1202- layout. vm_program_offset ,
1203- layout. program_constants_offset ,
1204- "vm constants base overflow" ,
1205- ) ?;
1206- let constants_len_offset = vec_len_disp ( constants_base, layout. stack_vec ) ?;
1207- let constants_ptr_offset = vec_ptr_disp ( constants_base, layout. stack_vec ) ?;
1204+ let constants_len_offset = layout. vm_program_constants_len_offset ;
1205+ let constants_ptr_offset = layout. vm_program_constants_ptr_offset ;
12081206
12091207 code. extend_from_slice ( & [ 0x4C , 0x8B , 0x83 ] ) ; // mov r8, [rbx+disp32] ; constants len
12101208 code. extend_from_slice ( & constants_len_offset. to_le_bytes ( ) ) ;
0 commit comments