From 01b9a8771250025aa28efd60ae3c582422d502c3 Mon Sep 17 00:00:00 2001 From: Andrew Brown Date: Tue, 13 Apr 2021 12:38:35 -0700 Subject: [PATCH] x64: store to all scalar sizes Previously, `Inst::store` only understood a subset of the scalar types, which resulted in failures seen in #2826. This change allows `Inst::store` to generate instructions for all scalar widths (`8 | 16 | 32 | 64`) since all of these are supported in the emission code of `Inst::MovRM`. --- cranelift/codegen/src/isa/x64/inst/mod.rs | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/cranelift/codegen/src/isa/x64/inst/mod.rs b/cranelift/codegen/src/isa/x64/inst/mod.rs index 099c97553152..0e8b8d9f1739 100644 --- a/cranelift/codegen/src/isa/x64/inst/mod.rs +++ b/cranelift/codegen/src/isa/x64/inst/mod.rs @@ -1126,16 +1126,7 @@ impl Inst { pub(crate) fn store(ty: Type, from_reg: Reg, to_addr: impl Into) -> Inst { let rc = from_reg.get_class(); match rc { - RegClass::I64 => Inst::mov_r_m( - match ty { - types::B1 => OperandSize::Size8, - types::I32 | types::R32 => OperandSize::Size32, - types::I64 | types::R64 => OperandSize::Size64, - _ => unimplemented!("integer store of type: {}", ty), - }, - from_reg, - to_addr, - ), + RegClass::I64 => Inst::mov_r_m(OperandSize::from_ty(ty), from_reg, to_addr), RegClass::V128 => { let opcode = match ty { types::F32 => SseOpcode::Movss,