genisa: remove matcher
This commit is contained in:
parent
82970d166b
commit
e8945a8e0d
|
@ -182,15 +182,6 @@ pub(crate) struct Mnemonic {
|
||||||
modifiers: Vec<String>,
|
modifiers: Vec<String>,
|
||||||
args: Vec<String>,
|
args: Vec<String>,
|
||||||
condition: String,
|
condition: String,
|
||||||
#[serde(rename = "match")]
|
|
||||||
matcher: Vec<MatchField>,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Deserialize, Default)]
|
|
||||||
#[serde(default)]
|
|
||||||
pub(crate) struct MatchField {
|
|
||||||
arg: String,
|
|
||||||
value: u32,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize, Default)]
|
#[derive(Deserialize, Default)]
|
||||||
|
@ -431,34 +422,14 @@ impl Isa {
|
||||||
if let Some(mnemonics) = mnemonics_by_opcode.get(&opcode.name) {
|
if let Some(mnemonics) = mnemonics_by_opcode.get(&opcode.name) {
|
||||||
let mut simplified_conditions = Vec::new();
|
let mut simplified_conditions = Vec::new();
|
||||||
for mnemonic in mnemonics {
|
for mnemonic in mnemonics {
|
||||||
if mnemonic.matcher.is_empty() && mnemonic.condition.is_empty() {
|
if mnemonic.condition.is_empty() {
|
||||||
continue; // TODO else branch
|
continue; // TODO else branch
|
||||||
}
|
}
|
||||||
// Emit if condition.
|
|
||||||
simplified_conditions.push(quote!(if));
|
simplified_conditions.push(quote!(if));
|
||||||
for (i, condition) in mnemonic.matcher.iter().enumerate() {
|
|
||||||
if i > 0 {
|
|
||||||
simplified_conditions.push(quote!(&&));
|
|
||||||
}
|
|
||||||
// Express value from opcode.
|
|
||||||
let field: &Field = field_by_name.get(&condition.arg).ok_or_else(|| {
|
|
||||||
Error::from(format!("undefined field {}", &condition.arg))
|
|
||||||
})?;
|
|
||||||
simplified_conditions.push(field.express_value_self());
|
|
||||||
// Equate with literal.
|
|
||||||
let lit_int =
|
|
||||||
LitInt::new(&format!("{}", condition.value), Span::call_site());
|
|
||||||
simplified_conditions.push(quote!(== #lit_int));
|
|
||||||
}
|
|
||||||
if !mnemonic.condition.is_empty() {
|
|
||||||
if mnemonic.matcher.len() > 0 {
|
|
||||||
simplified_conditions.push(quote!(&&));
|
|
||||||
}
|
|
||||||
simplified_conditions.push(compile_mnemonic_condition(
|
simplified_conditions.push(compile_mnemonic_condition(
|
||||||
&field_by_name,
|
&field_by_name,
|
||||||
&mnemonic.condition,
|
&mnemonic.condition,
|
||||||
)?);
|
)?);
|
||||||
}
|
|
||||||
// Emit branch.
|
// Emit branch.
|
||||||
let mnemonic_lit = LitStr::new(&mnemonic.name, Span::call_site());
|
let mnemonic_lit = LitStr::new(&mnemonic.name, Span::call_site());
|
||||||
// Extract modifier bits.
|
// Extract modifier bits.
|
||||||
|
|
Loading…
Reference in New Issue