@@ -889,13 +889,18 @@ fn emit_lea_or_mov(buffer: &mut CodeBuffer<X64Fixup>, dest: PhysReg, addr: RawAd
889889 index : None ,
890890 offset : 0 ,
891891 } => emit_mov_r_r ( buffer, dest, base) ,
892- _ => emit_lea ( buffer, dest, addr) ,
892+ _ => emit_lea ( buffer, OperandSize :: S64 , dest, addr) ,
893893 }
894894}
895895
896- fn emit_lea ( buffer : & mut CodeBuffer < X64Fixup > , dest : PhysReg , addr : RawAddrMode ) {
896+ fn emit_lea (
897+ buffer : & mut CodeBuffer < X64Fixup > ,
898+ op_size : OperandSize ,
899+ dest : PhysReg ,
900+ addr : RawAddrMode ,
901+ ) {
897902 buffer. instr ( |sink| {
898- emit_lea_instr ( sink, dest, addr) ;
903+ emit_lea_instr ( sink, op_size , dest, addr) ;
899904 } ) ;
900905}
901906
@@ -904,13 +909,25 @@ fn emit_lea_rip_reloc(buffer: &mut CodeBuffer<X64Fixup>, dest: PhysReg, target:
904909 BufferRelocTarget :: Function ( target) ,
905910 -4 ,
906911 RELOC_PC32 ,
907- |sink| emit_lea_instr ( sink, dest, RawAddrMode :: RipOff { offset : 0 } ) ,
912+ |sink| {
913+ emit_lea_instr (
914+ sink,
915+ OperandSize :: S64 ,
916+ dest,
917+ RawAddrMode :: RipOff { offset : 0 } ,
918+ )
919+ } ,
908920 ) ;
909921}
910922
911- fn emit_lea_instr ( sink : & mut InstrSink < ' _ > , dest : PhysReg , addr : RawAddrMode ) -> InstrAnchor {
923+ fn emit_lea_instr (
924+ sink : & mut InstrSink < ' _ > ,
925+ op_size : OperandSize ,
926+ dest : PhysReg ,
927+ addr : RawAddrMode ,
928+ ) -> InstrAnchor {
912929 let ( rex, modrm_sib) = encode_mem_parts ( addr, |rex : & mut RexPrefix | {
913- rex. encode_operand_size ( OperandSize :: S64 ) ;
930+ rex. encode_operand_size ( op_size ) ;
914931 rex. encode_modrm_reg ( dest)
915932 } ) ;
916933 rex. emit ( sink) ;
0 commit comments