[meta] Split FormatBuilder::imm to avoid the extra Into<> parameter type;
This commit is contained in:
@@ -89,27 +89,6 @@ pub struct InstructionFormatBuilder {
|
||||
typevar_operand: Option<usize>,
|
||||
}
|
||||
|
||||
pub struct ImmParameter {
|
||||
kind: OperandKind,
|
||||
member: &'static str,
|
||||
}
|
||||
impl Into<ImmParameter> for (&'static str, &OperandKind) {
|
||||
fn into(self) -> ImmParameter {
|
||||
ImmParameter {
|
||||
kind: self.1.clone(),
|
||||
member: self.0,
|
||||
}
|
||||
}
|
||||
}
|
||||
impl Into<ImmParameter> 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<ImmParameter>) -> 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
|
||||
|
||||
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user