diff --git a/cranelift/codegen/meta/src/cdsl/formats.rs b/cranelift/codegen/meta/src/cdsl/formats.rs index b716a8a976..a3249b4c6e 100644 --- a/cranelift/codegen/meta/src/cdsl/formats.rs +++ b/cranelift/codegen/meta/src/cdsl/formats.rs @@ -89,27 +89,6 @@ pub struct InstructionFormatBuilder { typevar_operand: Option, } -pub struct ImmParameter { - kind: OperandKind, - member: &'static str, -} -impl Into for (&'static str, &OperandKind) { - fn into(self) -> ImmParameter { - ImmParameter { - kind: self.1.clone(), - member: self.0, - } - } -} -impl Into for &OperandKind { - fn into(self) -> ImmParameter { - ImmParameter { - kind: self.clone(), - member: self.default_member.unwrap(), - } - } -} - impl InstructionFormatBuilder { pub fn new(name: &'static str) -> Self { Self { @@ -131,12 +110,21 @@ impl InstructionFormatBuilder { self } - pub fn imm(mut self, param: impl Into) -> Self { - let imm_param = param.into(); + pub fn imm(mut self, operand_kind: &OperandKind) -> Self { let field = FormatField { immnum: self.imm_fields.len(), - kind: imm_param.kind, - member: imm_param.member, + kind: operand_kind.clone(), + member: operand_kind.default_member.unwrap(), + }; + self.imm_fields.push(field); + self + } + + pub fn imm_with_name(mut self, member: &'static str, operand_kind: &OperandKind) -> Self { + let field = FormatField { + immnum: self.imm_fields.len(), + kind: operand_kind.clone(), + member, }; self.imm_fields.push(field); self diff --git a/cranelift/codegen/meta/src/shared/formats.rs b/cranelift/codegen/meta/src/shared/formats.rs index 394eb6d58f..2a16f250a1 100644 --- a/cranelift/codegen/meta/src/shared/formats.rs +++ b/cranelift/codegen/meta/src/shared/formats.rs @@ -60,10 +60,14 @@ pub fn define(immediates: &OperandKinds, entities: &OperandKinds) -> FormatRegis registry.insert( Builder::new("InsertLane") .value() - .imm(("lane", uimm8)) + .imm_with_name("lane", uimm8) .value(), ); - registry.insert(Builder::new("ExtractLane").value().imm(("lane", uimm8))); + registry.insert( + Builder::new("ExtractLane") + .value() + .imm_with_name("lane", uimm8), + ); registry.insert(Builder::new("IntCompare").imm(intcc).value().value()); registry.insert(Builder::new("IntCompareImm").imm(intcc).value().imm(imm64)); @@ -151,26 +155,26 @@ pub fn define(immediates: &OperandKinds, entities: &OperandKinds) -> FormatRegis registry.insert( Builder::new("RegMove") .value() - .imm(("src", regunit)) - .imm(("dst", regunit)), + .imm_with_name("src", regunit) + .imm_with_name("dst", regunit), ); registry.insert( Builder::new("CopySpecial") - .imm(("src", regunit)) - .imm(("dst", regunit)), + .imm_with_name("src", regunit) + .imm_with_name("dst", regunit), ); - registry.insert(Builder::new("CopyToSsa").imm(("src", regunit))); + registry.insert(Builder::new("CopyToSsa").imm_with_name("src", regunit)); registry.insert( Builder::new("RegSpill") .value() - .imm(("src", regunit)) - .imm(("dst", stack_slot)), + .imm_with_name("src", regunit) + .imm_with_name("dst", stack_slot), ); registry.insert( Builder::new("RegFill") .value() - .imm(("src", stack_slot)) - .imm(("dst", regunit)), + .imm_with_name("src", stack_slot) + .imm_with_name("dst", regunit), ); registry.insert(Builder::new("Trap").imm(trapcode));