@@ -7,10 +7,9 @@ use super::{
77use anyhow:: { anyhow, bail, Result } ;
88
99use crate :: masm:: {
10- DivKind , ExtendKind , ExtractLaneKind , FloatCmpKind , Imm as I , IntCmpKind , LoadKind ,
10+ DivKind , Extend , ExtendKind , ExtractLaneKind , FloatCmpKind , Imm as I , IntCmpKind , LoadKind ,
1111 MacroAssembler as Masm , MemOpKind , MulWideKind , OperandSize , RegImm , RemKind , RmwOp ,
12- RoundingMode , ShiftKind , SplatKind , TrapCode , TruncKind , UnsignedExtend , TRUSTED_FLAGS ,
13- UNTRUSTED_FLAGS ,
12+ RoundingMode , ShiftKind , SplatKind , TrapCode , TruncKind , Zero , TRUSTED_FLAGS , UNTRUSTED_FLAGS ,
1413} ;
1514use crate :: {
1615 abi:: { self , align_to, calculate_frame_adjustment, LocalSlot } ,
@@ -34,7 +33,7 @@ use cranelift_codegen::{
3433 isa:: {
3534 unwind:: UnwindInst ,
3635 x64:: {
37- args:: { ExtMode , FenceKind , CC } ,
36+ args:: { FenceKind , CC } ,
3837 settings as x64_settings, AtomicRmwSeqOp ,
3938 } ,
4039 } ,
@@ -246,7 +245,12 @@ impl Masm for MacroAssembler {
246245 let _ = match ( dst. to_reg ( ) . class ( ) , size) {
247246 ( RegClass :: Int , OperandSize :: S32 ) => {
248247 let addr = self . address_from_sp ( current_sp) ?;
249- self . asm . movzx_mr ( & addr, dst, size. into ( ) , TRUSTED_FLAGS ) ;
248+ self . asm . movzx_mr (
249+ & addr,
250+ dst,
251+ size. extend_to :: < Zero > ( OperandSize :: S64 ) ,
252+ TRUSTED_FLAGS ,
253+ ) ;
250254 self . free_stack ( size. bytes ( ) ) ?;
251255 }
252256 ( RegClass :: Int , OperandSize :: S64 ) => {
@@ -313,10 +317,13 @@ impl Masm for MacroAssembler {
313317 bail ! ( CodeGenError :: unexpected_operand_size( ) ) ;
314318 }
315319
316- if ext. signed ( ) {
317- self . asm . movsx_mr ( & src, dst, ext, UNTRUSTED_FLAGS ) ;
318- } else {
319- self . load_impl :: < Self > ( src, dst, size, UNTRUSTED_FLAGS ) ?
320+ match ext {
321+ ExtendKind :: Signed ( ext) => {
322+ self . asm . movsx_mr ( & src, dst, ext, UNTRUSTED_FLAGS ) ;
323+ }
324+ ExtendKind :: Unsigned ( _) => {
325+ self . load_impl :: < Self > ( src, dst, size, UNTRUSTED_FLAGS ) ?
326+ }
320327 }
321328 }
322329 LoadKind :: Operand ( _) => {
@@ -1040,11 +1047,15 @@ impl Masm for MacroAssembler {
10401047 }
10411048
10421049 fn extend ( & mut self , dst : WritableReg , src : Reg , kind : ExtendKind ) -> Result < ( ) > {
1043- if !kind. signed ( ) {
1044- self . asm . movzx_rr ( src, dst, kind) ;
1045- } else {
1046- self . asm . movsx_rr ( src, dst, kind) ;
1050+ match kind {
1051+ ExtendKind :: Signed ( ext) => {
1052+ self . asm . movsx_rr ( src, dst, ext) ;
1053+ }
1054+ ExtendKind :: Unsigned ( ext) => {
1055+ self . asm . movzx_rr ( src, dst, ext) ;
1056+ }
10471057 }
1058+
10481059 Ok ( ( ) )
10491060 }
10501061
@@ -1126,7 +1137,7 @@ impl Masm for MacroAssembler {
11261137 self . extend (
11271138 writable ! ( src) ,
11281139 src,
1129- ExtendKind :: Unsigned ( UnsignedExtend :: I64Extend32U ) ,
1140+ ExtendKind :: Unsigned ( Extend :: I64Extend32 ) ,
11301141 ) ?;
11311142 }
11321143
@@ -1422,7 +1433,7 @@ impl Masm for MacroAssembler {
14221433 size : OperandSize ,
14231434 op : RmwOp ,
14241435 flags : MemFlags ,
1425- extend : Option < UnsignedExtend > ,
1436+ extend : Option < Extend < Zero > > ,
14261437 ) -> Result < ( ) > {
14271438 let res = match op {
14281439 RmwOp :: Add => {
@@ -1598,16 +1609,8 @@ impl MacroAssembler {
15981609 M : Masm ,
15991610 {
16001611 if dst. to_reg ( ) . is_int ( ) {
1601- let access_bits = size. num_bits ( ) as u16 ;
1602-
1603- let ext_mode = match access_bits {
1604- 8 => Some ( ExtMode :: BQ ) ,
1605- 16 => Some ( ExtMode :: WQ ) ,
1606- 32 => Some ( ExtMode :: LQ ) ,
1607- _ => None ,
1608- } ;
1609-
1610- self . asm . movzx_mr ( & src, dst, ext_mode, flags) ;
1612+ let ext = size. extend_to :: < Zero > ( OperandSize :: S64 ) ;
1613+ self . asm . movzx_mr ( & src, dst, ext, flags) ;
16111614 } else {
16121615 self . asm . xmm_mov_mr ( & src, dst, size, flags) ;
16131616 }
0 commit comments