support simplified mnemonic conditions
This commit is contained in:
parent
c8c1daaa64
commit
e9041072e9
|
@ -6967,7 +6967,14 @@ impl Ins {
|
|||
return SimplifiedIns {
|
||||
mnemonic: "li",
|
||||
modifiers: Modifiers::default(),
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::GPR(GPR(
|
||||
(((self.code) >> (32 - 11u8)) & ((1 << 5usize) - 1)) as _,
|
||||
)),
|
||||
Argument::Simm(Simm(
|
||||
(((self.code) >> (32 - 32u8)) & ((1 << 16usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -6977,7 +6984,14 @@ impl Ins {
|
|||
return SimplifiedIns {
|
||||
mnemonic: "lis",
|
||||
modifiers: Modifiers::default(),
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::GPR(GPR(
|
||||
(((self.code) >> (32 - 11u8)) & ((1 << 5usize) - 1)) as _,
|
||||
)),
|
||||
Argument::Uimm(Uimm(
|
||||
(((self.code) >> (32 - 32u8)) & ((1 << 16usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -6992,7 +7006,14 @@ impl Ins {
|
|||
m.lk = self.bit(31);
|
||||
m
|
||||
},
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::CRBit(CRBit(
|
||||
(((self.code) >> (32 - 14u8)) & ((1 << 3usize) - 1)) as _,
|
||||
)),
|
||||
Argument::BranchDest(BranchDest(
|
||||
(((self.code) >> (32 - 30u8)) & ((1 << 14usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7005,7 +7026,14 @@ impl Ins {
|
|||
m.lk = self.bit(31);
|
||||
m
|
||||
},
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::CRBit(CRBit(
|
||||
(((self.code) >> (32 - 14u8)) & ((1 << 3usize) - 1)) as _,
|
||||
)),
|
||||
Argument::BranchDest(BranchDest(
|
||||
(((self.code) >> (32 - 30u8)) & ((1 << 14usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7018,7 +7046,14 @@ impl Ins {
|
|||
m.lk = self.bit(31);
|
||||
m
|
||||
},
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::CRBit(CRBit(
|
||||
(((self.code) >> (32 - 14u8)) & ((1 << 3usize) - 1)) as _,
|
||||
)),
|
||||
Argument::BranchDest(BranchDest(
|
||||
(((self.code) >> (32 - 30u8)) & ((1 << 14usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7031,7 +7066,14 @@ impl Ins {
|
|||
m.lk = self.bit(31);
|
||||
m
|
||||
},
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::CRBit(CRBit(
|
||||
(((self.code) >> (32 - 14u8)) & ((1 << 3usize) - 1)) as _,
|
||||
)),
|
||||
Argument::BranchDest(BranchDest(
|
||||
(((self.code) >> (32 - 30u8)) & ((1 << 14usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7044,7 +7086,14 @@ impl Ins {
|
|||
m.lk = self.bit(31);
|
||||
m
|
||||
},
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::CRBit(CRBit(
|
||||
(((self.code) >> (32 - 14u8)) & ((1 << 3usize) - 1)) as _,
|
||||
)),
|
||||
Argument::BranchDest(BranchDest(
|
||||
(((self.code) >> (32 - 30u8)) & ((1 << 14usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7057,7 +7106,14 @@ impl Ins {
|
|||
m.lk = self.bit(31);
|
||||
m
|
||||
},
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::CRBit(CRBit(
|
||||
(((self.code) >> (32 - 14u8)) & ((1 << 3usize) - 1)) as _,
|
||||
)),
|
||||
Argument::BranchDest(BranchDest(
|
||||
(((self.code) >> (32 - 30u8)) & ((1 << 14usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7070,7 +7126,14 @@ impl Ins {
|
|||
m.lk = self.bit(31);
|
||||
m
|
||||
},
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::CRBit(CRBit(
|
||||
(((self.code) >> (32 - 14u8)) & ((1 << 3usize) - 1)) as _,
|
||||
)),
|
||||
Argument::BranchDest(BranchDest(
|
||||
(((self.code) >> (32 - 30u8)) & ((1 << 14usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7083,7 +7146,14 @@ impl Ins {
|
|||
m.lk = self.bit(31);
|
||||
m
|
||||
},
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::CRBit(CRBit(
|
||||
(((self.code) >> (32 - 14u8)) & ((1 << 3usize) - 1)) as _,
|
||||
)),
|
||||
Argument::BranchDest(BranchDest(
|
||||
(((self.code) >> (32 - 30u8)) & ((1 << 14usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7098,7 +7168,9 @@ impl Ins {
|
|||
m.lk = self.bit(31);
|
||||
m
|
||||
},
|
||||
args: vec![],
|
||||
args: vec![Argument::BranchDest(BranchDest(
|
||||
(((self.code) >> (32 - 30u8)) & ((1 << 14usize) - 1)) as _,
|
||||
))],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7113,7 +7185,9 @@ impl Ins {
|
|||
m.lk = self.bit(31);
|
||||
m
|
||||
},
|
||||
args: vec![],
|
||||
args: vec![Argument::BranchDest(BranchDest(
|
||||
(((self.code) >> (32 - 30u8)) & ((1 << 14usize) - 1)) as _,
|
||||
))],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7127,7 +7201,14 @@ impl Ins {
|
|||
m.lk = self.bit(31);
|
||||
m
|
||||
},
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::CRBit(CRBit(
|
||||
(((self.code) >> (32 - 14u8)) & ((1 << 3usize) - 1)) as _,
|
||||
)),
|
||||
Argument::BranchDest(BranchDest(
|
||||
(((self.code) >> (32 - 30u8)) & ((1 << 14usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7139,7 +7220,14 @@ impl Ins {
|
|||
m.lk = self.bit(31);
|
||||
m
|
||||
},
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::CRBit(CRBit(
|
||||
(((self.code) >> (32 - 14u8)) & ((1 << 3usize) - 1)) as _,
|
||||
)),
|
||||
Argument::BranchDest(BranchDest(
|
||||
(((self.code) >> (32 - 30u8)) & ((1 << 14usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7151,7 +7239,14 @@ impl Ins {
|
|||
m.lk = self.bit(31);
|
||||
m
|
||||
},
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::CRBit(CRBit(
|
||||
(((self.code) >> (32 - 14u8)) & ((1 << 3usize) - 1)) as _,
|
||||
)),
|
||||
Argument::BranchDest(BranchDest(
|
||||
(((self.code) >> (32 - 30u8)) & ((1 << 14usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7163,7 +7258,14 @@ impl Ins {
|
|||
m.lk = self.bit(31);
|
||||
m
|
||||
},
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::CRBit(CRBit(
|
||||
(((self.code) >> (32 - 14u8)) & ((1 << 3usize) - 1)) as _,
|
||||
)),
|
||||
Argument::BranchDest(BranchDest(
|
||||
(((self.code) >> (32 - 30u8)) & ((1 << 14usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7175,7 +7277,14 @@ impl Ins {
|
|||
m.lk = self.bit(31);
|
||||
m
|
||||
},
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::CRBit(CRBit(
|
||||
(((self.code) >> (32 - 14u8)) & ((1 << 3usize) - 1)) as _,
|
||||
)),
|
||||
Argument::BranchDest(BranchDest(
|
||||
(((self.code) >> (32 - 30u8)) & ((1 << 14usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7187,7 +7296,14 @@ impl Ins {
|
|||
m.lk = self.bit(31);
|
||||
m
|
||||
},
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::CRBit(CRBit(
|
||||
(((self.code) >> (32 - 14u8)) & ((1 << 3usize) - 1)) as _,
|
||||
)),
|
||||
Argument::BranchDest(BranchDest(
|
||||
(((self.code) >> (32 - 30u8)) & ((1 << 14usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7199,7 +7315,14 @@ impl Ins {
|
|||
m.lk = self.bit(31);
|
||||
m
|
||||
},
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::CRBit(CRBit(
|
||||
(((self.code) >> (32 - 14u8)) & ((1 << 3usize) - 1)) as _,
|
||||
)),
|
||||
Argument::BranchDest(BranchDest(
|
||||
(((self.code) >> (32 - 30u8)) & ((1 << 14usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7211,7 +7334,14 @@ impl Ins {
|
|||
m.lk = self.bit(31);
|
||||
m
|
||||
},
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::CRBit(CRBit(
|
||||
(((self.code) >> (32 - 14u8)) & ((1 << 3usize) - 1)) as _,
|
||||
)),
|
||||
Argument::BranchDest(BranchDest(
|
||||
(((self.code) >> (32 - 30u8)) & ((1 << 14usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7235,7 +7365,14 @@ impl Ins {
|
|||
m.lk = self.bit(31);
|
||||
m
|
||||
},
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::CRBit(CRBit(
|
||||
(((self.code) >> (32 - 14u8)) & ((1 << 3usize) - 1)) as _,
|
||||
)),
|
||||
Argument::BranchDest(BranchDest(
|
||||
(((self.code) >> (32 - 30u8)) & ((1 << 14usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7247,7 +7384,14 @@ impl Ins {
|
|||
m.lk = self.bit(31);
|
||||
m
|
||||
},
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::CRBit(CRBit(
|
||||
(((self.code) >> (32 - 14u8)) & ((1 << 3usize) - 1)) as _,
|
||||
)),
|
||||
Argument::BranchDest(BranchDest(
|
||||
(((self.code) >> (32 - 30u8)) & ((1 << 14usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7259,7 +7403,14 @@ impl Ins {
|
|||
m.lk = self.bit(31);
|
||||
m
|
||||
},
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::CRBit(CRBit(
|
||||
(((self.code) >> (32 - 14u8)) & ((1 << 3usize) - 1)) as _,
|
||||
)),
|
||||
Argument::BranchDest(BranchDest(
|
||||
(((self.code) >> (32 - 30u8)) & ((1 << 14usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7271,7 +7422,14 @@ impl Ins {
|
|||
m.lk = self.bit(31);
|
||||
m
|
||||
},
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::CRBit(CRBit(
|
||||
(((self.code) >> (32 - 14u8)) & ((1 << 3usize) - 1)) as _,
|
||||
)),
|
||||
Argument::BranchDest(BranchDest(
|
||||
(((self.code) >> (32 - 30u8)) & ((1 << 14usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7283,7 +7441,14 @@ impl Ins {
|
|||
m.lk = self.bit(31);
|
||||
m
|
||||
},
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::CRBit(CRBit(
|
||||
(((self.code) >> (32 - 14u8)) & ((1 << 3usize) - 1)) as _,
|
||||
)),
|
||||
Argument::BranchDest(BranchDest(
|
||||
(((self.code) >> (32 - 30u8)) & ((1 << 14usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7295,7 +7460,14 @@ impl Ins {
|
|||
m.lk = self.bit(31);
|
||||
m
|
||||
},
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::CRBit(CRBit(
|
||||
(((self.code) >> (32 - 14u8)) & ((1 << 3usize) - 1)) as _,
|
||||
)),
|
||||
Argument::BranchDest(BranchDest(
|
||||
(((self.code) >> (32 - 30u8)) & ((1 << 14usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7307,7 +7479,14 @@ impl Ins {
|
|||
m.lk = self.bit(31);
|
||||
m
|
||||
},
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::CRBit(CRBit(
|
||||
(((self.code) >> (32 - 14u8)) & ((1 << 3usize) - 1)) as _,
|
||||
)),
|
||||
Argument::BranchDest(BranchDest(
|
||||
(((self.code) >> (32 - 30u8)) & ((1 << 14usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7319,7 +7498,14 @@ impl Ins {
|
|||
m.lk = self.bit(31);
|
||||
m
|
||||
},
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::CRBit(CRBit(
|
||||
(((self.code) >> (32 - 14u8)) & ((1 << 3usize) - 1)) as _,
|
||||
)),
|
||||
Argument::BranchDest(BranchDest(
|
||||
(((self.code) >> (32 - 30u8)) & ((1 << 14usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7329,7 +7515,14 @@ impl Ins {
|
|||
return SimplifiedIns {
|
||||
mnemonic: "cmpw",
|
||||
modifiers: Modifiers::default(),
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::GPR(GPR(
|
||||
(((self.code) >> (32 - 16u8)) & ((1 << 5usize) - 1)) as _,
|
||||
)),
|
||||
Argument::GPR(GPR(
|
||||
(((self.code) >> (32 - 21u8)) & ((1 << 5usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7339,7 +7532,14 @@ impl Ins {
|
|||
return SimplifiedIns {
|
||||
mnemonic: "cmpwi",
|
||||
modifiers: Modifiers::default(),
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::GPR(GPR(
|
||||
(((self.code) >> (32 - 16u8)) & ((1 << 5usize) - 1)) as _,
|
||||
)),
|
||||
Argument::Simm(Simm(
|
||||
(((self.code) >> (32 - 32u8)) & ((1 << 16usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7347,7 +7547,17 @@ impl Ins {
|
|||
return SimplifiedIns {
|
||||
mnemonic: "cmpwi",
|
||||
modifiers: Modifiers::default(),
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::CRBit(CRBit(
|
||||
(((self.code) >> (32 - 9u8)) & ((1 << 3usize) - 1)) as _,
|
||||
)),
|
||||
Argument::GPR(GPR(
|
||||
(((self.code) >> (32 - 16u8)) & ((1 << 5usize) - 1)) as _,
|
||||
)),
|
||||
Argument::Simm(Simm(
|
||||
(((self.code) >> (32 - 32u8)) & ((1 << 16usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7357,7 +7567,14 @@ impl Ins {
|
|||
return SimplifiedIns {
|
||||
mnemonic: "cmplw",
|
||||
modifiers: Modifiers::default(),
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::GPR(GPR(
|
||||
(((self.code) >> (32 - 16u8)) & ((1 << 5usize) - 1)) as _,
|
||||
)),
|
||||
Argument::GPR(GPR(
|
||||
(((self.code) >> (32 - 21u8)) & ((1 << 5usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7367,7 +7584,14 @@ impl Ins {
|
|||
return SimplifiedIns {
|
||||
mnemonic: "cmplwi",
|
||||
modifiers: Modifiers::default(),
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::GPR(GPR(
|
||||
(((self.code) >> (32 - 16u8)) & ((1 << 5usize) - 1)) as _,
|
||||
)),
|
||||
Argument::Uimm(Uimm(
|
||||
(((self.code) >> (32 - 32u8)) & ((1 << 16usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7375,7 +7599,17 @@ impl Ins {
|
|||
return SimplifiedIns {
|
||||
mnemonic: "cmplwi",
|
||||
modifiers: Modifiers::default(),
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::CRBit(CRBit(
|
||||
(((self.code) >> (32 - 9u8)) & ((1 << 3usize) - 1)) as _,
|
||||
)),
|
||||
Argument::GPR(GPR(
|
||||
(((self.code) >> (32 - 16u8)) & ((1 << 5usize) - 1)) as _,
|
||||
)),
|
||||
Argument::Uimm(Uimm(
|
||||
(((self.code) >> (32 - 32u8)) & ((1 << 16usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7385,7 +7619,9 @@ impl Ins {
|
|||
return SimplifiedIns {
|
||||
mnemonic: "mfxer",
|
||||
modifiers: Modifiers::default(),
|
||||
args: vec![],
|
||||
args: vec![Argument::GPR(GPR((((self.code) >> (32 - 11u8))
|
||||
& ((1 << 5usize) - 1))
|
||||
as _))],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7393,7 +7629,9 @@ impl Ins {
|
|||
return SimplifiedIns {
|
||||
mnemonic: "mflr",
|
||||
modifiers: Modifiers::default(),
|
||||
args: vec![],
|
||||
args: vec![Argument::GPR(GPR((((self.code) >> (32 - 11u8))
|
||||
& ((1 << 5usize) - 1))
|
||||
as _))],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7401,7 +7639,9 @@ impl Ins {
|
|||
return SimplifiedIns {
|
||||
mnemonic: "mfctr",
|
||||
modifiers: Modifiers::default(),
|
||||
args: vec![],
|
||||
args: vec![Argument::GPR(GPR((((self.code) >> (32 - 11u8))
|
||||
& ((1 << 5usize) - 1))
|
||||
as _))],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7409,7 +7649,9 @@ impl Ins {
|
|||
return SimplifiedIns {
|
||||
mnemonic: "mfdsisr",
|
||||
modifiers: Modifiers::default(),
|
||||
args: vec![],
|
||||
args: vec![Argument::GPR(GPR((((self.code) >> (32 - 11u8))
|
||||
& ((1 << 5usize) - 1))
|
||||
as _))],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7417,7 +7659,9 @@ impl Ins {
|
|||
return SimplifiedIns {
|
||||
mnemonic: "mfdbatu",
|
||||
modifiers: Modifiers::default(),
|
||||
args: vec![],
|
||||
args: vec![Argument::GPR(GPR((((self.code) >> (32 - 11u8))
|
||||
& ((1 << 5usize) - 1))
|
||||
as _))],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7425,7 +7669,9 @@ impl Ins {
|
|||
return SimplifiedIns {
|
||||
mnemonic: "mftdu",
|
||||
modifiers: Modifiers::default(),
|
||||
args: vec![],
|
||||
args: vec![Argument::GPR(GPR((((self.code) >> (32 - 11u8))
|
||||
& ((1 << 5usize) - 1))
|
||||
as _))],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7435,7 +7681,9 @@ impl Ins {
|
|||
return SimplifiedIns {
|
||||
mnemonic: "mtxer",
|
||||
modifiers: Modifiers::default(),
|
||||
args: vec![],
|
||||
args: vec![Argument::GPR(GPR((((self.code) >> (32 - 11u8))
|
||||
& ((1 << 5usize) - 1))
|
||||
as _))],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7443,7 +7691,9 @@ impl Ins {
|
|||
return SimplifiedIns {
|
||||
mnemonic: "mtlr",
|
||||
modifiers: Modifiers::default(),
|
||||
args: vec![],
|
||||
args: vec![Argument::GPR(GPR((((self.code) >> (32 - 11u8))
|
||||
& ((1 << 5usize) - 1))
|
||||
as _))],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7451,7 +7701,9 @@ impl Ins {
|
|||
return SimplifiedIns {
|
||||
mnemonic: "mtctr",
|
||||
modifiers: Modifiers::default(),
|
||||
args: vec![],
|
||||
args: vec![Argument::GPR(GPR((((self.code) >> (32 - 11u8))
|
||||
& ((1 << 5usize) - 1))
|
||||
as _))],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7459,7 +7711,9 @@ impl Ins {
|
|||
return SimplifiedIns {
|
||||
mnemonic: "mtdsisr",
|
||||
modifiers: Modifiers::default(),
|
||||
args: vec![],
|
||||
args: vec![Argument::GPR(GPR((((self.code) >> (32 - 11u8))
|
||||
& ((1 << 5usize) - 1))
|
||||
as _))],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7467,7 +7721,9 @@ impl Ins {
|
|||
return SimplifiedIns {
|
||||
mnemonic: "mtdbatu",
|
||||
modifiers: Modifiers::default(),
|
||||
args: vec![],
|
||||
args: vec![Argument::GPR(GPR((((self.code) >> (32 - 11u8))
|
||||
& ((1 << 5usize) - 1))
|
||||
as _))],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7475,12 +7731,32 @@ impl Ins {
|
|||
return SimplifiedIns {
|
||||
mnemonic: "mttdu",
|
||||
modifiers: Modifiers::default(),
|
||||
args: vec![],
|
||||
args: vec![Argument::GPR(GPR((((self.code) >> (32 - 11u8))
|
||||
& ((1 << 5usize) - 1))
|
||||
as _))],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
}
|
||||
Opcode::Or => {
|
||||
if (((self.code) >> (32 - 11u8)) & ((1 << 5usize) - 1))
|
||||
== (((self.code) >> (32 - 21u8)) & ((1 << 5usize) - 1))
|
||||
{
|
||||
return SimplifiedIns {
|
||||
mnemonic: "mr",
|
||||
modifiers: Modifiers::default(),
|
||||
args: vec![
|
||||
Argument::GPR(GPR(
|
||||
(((self.code) >> (32 - 16u8)) & ((1 << 5usize) - 1)) as _,
|
||||
)),
|
||||
Argument::GPR(GPR(
|
||||
(((self.code) >> (32 - 11u8)) & ((1 << 5usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
}
|
||||
Opcode::Or => {}
|
||||
Opcode::Ori => {
|
||||
if (((self.code) >> (32 - 16u8)) & ((1 << 5usize) - 1)) == 0
|
||||
&& (((self.code) >> (32 - 11u8)) & ((1 << 5usize) - 1)) == 0
|
||||
|
@ -7494,13 +7770,103 @@ impl Ins {
|
|||
};
|
||||
}
|
||||
}
|
||||
Opcode::Rlwinm => {}
|
||||
Opcode::Rlwinm => {
|
||||
if (((self.code) >> (32 - 21u8)) & ((1 << 5usize) - 1)) == 0
|
||||
&& (((self.code) >> (32 - 31u8)) & ((1 << 5usize) - 1)) == 31
|
||||
{
|
||||
return SimplifiedIns {
|
||||
mnemonic: "clrlwi",
|
||||
modifiers: Modifiers::default(),
|
||||
args: vec![
|
||||
Argument::GPR(GPR(
|
||||
(((self.code) >> (32 - 16u8)) & ((1 << 5usize) - 1)) as _,
|
||||
)),
|
||||
Argument::GPR(GPR(
|
||||
(((self.code) >> (32 - 11u8)) & ((1 << 5usize) - 1)) as _,
|
||||
)),
|
||||
Argument::OpaqueU(OpaqueU(
|
||||
(((self.code) >> (32 - 26u8)) & ((1 << 5usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
if (((self.code) >> (32 - 26u8)) & ((1 << 5usize) - 1)) == 0
|
||||
&& (((self.code) >> (32 - 31u8)) & ((1 << 5usize) - 1)) == 31
|
||||
{
|
||||
return SimplifiedIns {
|
||||
mnemonic: "rotlwi",
|
||||
modifiers: Modifiers::default(),
|
||||
args: vec![
|
||||
Argument::GPR(GPR(
|
||||
(((self.code) >> (32 - 16u8)) & ((1 << 5usize) - 1)) as _,
|
||||
)),
|
||||
Argument::GPR(GPR(
|
||||
(((self.code) >> (32 - 11u8)) & ((1 << 5usize) - 1)) as _,
|
||||
)),
|
||||
Argument::OpaqueU(OpaqueU(
|
||||
(((self.code) >> (32 - 21u8)) & ((1 << 5usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
if (((self.code) >> (32 - 26u8)) & ((1 << 5usize) - 1)) == 0
|
||||
&& 31 - (((self.code) >> (32 - 21u8)) & ((1 << 5usize) - 1))
|
||||
== (((self.code) >> (32 - 31u8)) & ((1 << 5usize) - 1))
|
||||
{
|
||||
return SimplifiedIns {
|
||||
mnemonic: "slwi",
|
||||
modifiers: Modifiers::default(),
|
||||
args: vec![
|
||||
Argument::GPR(GPR(
|
||||
(((self.code) >> (32 - 16u8)) & ((1 << 5usize) - 1)) as _,
|
||||
)),
|
||||
Argument::GPR(GPR(
|
||||
(((self.code) >> (32 - 11u8)) & ((1 << 5usize) - 1)) as _,
|
||||
)),
|
||||
Argument::OpaqueU(OpaqueU(
|
||||
(((self.code) >> (32 - 31u8)) & ((1 << 5usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
if (((self.code) >> (32 - 31u8)) & ((1 << 5usize) - 1)) == 31
|
||||
&& 32 - (((self.code) >> (32 - 26u8)) & ((1 << 5usize) - 1))
|
||||
== (((self.code) >> (32 - 21u8)) & ((1 << 5usize) - 1))
|
||||
{
|
||||
return SimplifiedIns {
|
||||
mnemonic: "srwi",
|
||||
modifiers: Modifiers::default(),
|
||||
args: vec![
|
||||
Argument::GPR(GPR(
|
||||
(((self.code) >> (32 - 16u8)) & ((1 << 5usize) - 1)) as _,
|
||||
)),
|
||||
Argument::GPR(GPR(
|
||||
(((self.code) >> (32 - 11u8)) & ((1 << 5usize) - 1)) as _,
|
||||
)),
|
||||
Argument::OpaqueU(OpaqueU(
|
||||
(((self.code) >> (32 - 26u8)) & ((1 << 5usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
}
|
||||
Opcode::Twi => {
|
||||
if (((self.code) >> (32 - 11u8)) & ((1 << 5usize) - 1)) == 8 {
|
||||
return SimplifiedIns {
|
||||
mnemonic: "twgti",
|
||||
modifiers: Modifiers::default(),
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::GPR(GPR(
|
||||
(((self.code) >> (32 - 16u8)) & ((1 << 5usize) - 1)) as _,
|
||||
)),
|
||||
Argument::Simm(Simm(
|
||||
(((self.code) >> (32 - 32u8)) & ((1 << 16usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -7508,7 +7874,14 @@ impl Ins {
|
|||
return SimplifiedIns {
|
||||
mnemonic: "twllei",
|
||||
modifiers: Modifiers::default(),
|
||||
args: vec![],
|
||||
args: vec![
|
||||
Argument::GPR(GPR(
|
||||
(((self.code) >> (32 - 16u8)) & ((1 << 5usize) - 1)) as _,
|
||||
)),
|
||||
Argument::Simm(Simm(
|
||||
(((self.code) >> (32 - 32u8)) & ((1 << 16usize) - 1)) as _,
|
||||
)),
|
||||
],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
|
|
@ -6,16 +6,17 @@ use num_traits::{AsPrimitive, PrimInt};
|
|||
pub use crate::iter::{disasm_iter, DisasmIterator};
|
||||
|
||||
pub mod formatter;
|
||||
mod iter;
|
||||
mod generated;
|
||||
mod iter;
|
||||
use generated::*;
|
||||
|
||||
pub mod prelude {
|
||||
pub use crate::formatter::FormattedIns;
|
||||
pub use crate::Argument;
|
||||
pub use crate::Field::*;
|
||||
pub use crate::Ins;
|
||||
pub use crate::Opcode::*;
|
||||
pub use crate::Modifiers;
|
||||
pub use crate::Opcode::*;
|
||||
pub use crate::SimplifiedIns;
|
||||
pub use crate::{
|
||||
Bit, BranchDest, CRBit, CRField, Offset, OpaqueU, Simm, Uimm, FPR, GPR, GQR, SPR, SR,
|
||||
|
|
|
@ -3,6 +3,7 @@ use std::fs::File;
|
|||
use std::io::Write;
|
||||
use std::ops::Range;
|
||||
use std::process::{Command, Stdio};
|
||||
use std::str::FromStr;
|
||||
|
||||
use itertools::Itertools;
|
||||
use proc_macro2::{Ident, Literal, Span, TokenStream, TokenTree};
|
||||
|
@ -30,16 +31,19 @@ fn _main() -> Result<()> {
|
|||
let isa = load_isa()?;
|
||||
|
||||
let mut unformatted_code = Vec::<u8>::new();
|
||||
writeln!(&mut unformatted_code, "{}", quote! {
|
||||
writeln!(
|
||||
&mut unformatted_code,
|
||||
"{}",
|
||||
quote! {
|
||||
use crate::prelude::*;
|
||||
})?;
|
||||
}
|
||||
)?;
|
||||
writeln!(&mut unformatted_code, "{}", isa.gen_opcode_enum()?)?;
|
||||
writeln!(&mut unformatted_code, "{}", isa.gen_field_enum()?)?;
|
||||
writeln!(&mut unformatted_code, "{}", isa.gen_ins_impl()?)?;
|
||||
|
||||
let formatted_code = rustfmt(unformatted_code);
|
||||
File::create("./disasm/src/generated.rs")?
|
||||
.write_all(&formatted_code)?;
|
||||
File::create("./disasm/src/generated.rs")?.write_all(&formatted_code)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
@ -321,7 +325,6 @@ impl Isa {
|
|||
Ok(field_enum)
|
||||
}
|
||||
|
||||
|
||||
pub(crate) fn gen_ins_impl(&self) -> Result<TokenStream> {
|
||||
// Map fields by name.
|
||||
let mut field_by_name = HashMap::<String, &Field>::new();
|
||||
|
@ -331,7 +334,10 @@ impl Isa {
|
|||
// Map mnemonics by opcode.
|
||||
let mut mnemonics_by_opcode = HashMap::<&String, Vec<&Mnemonic>>::new();
|
||||
for simple in &self.mnemonics {
|
||||
mnemonics_by_opcode.entry(&simple.opcode).or_insert_with(|| Vec::new()).push(simple)
|
||||
mnemonics_by_opcode
|
||||
.entry(&simple.opcode)
|
||||
.or_insert_with(|| Vec::new())
|
||||
.push(simple)
|
||||
}
|
||||
// Generate match arms for each opcode.
|
||||
let mut field_match_arms = Vec::new();
|
||||
|
@ -343,9 +349,9 @@ impl Isa {
|
|||
// Generate fields of opcode.
|
||||
let mut fields = Vec::new();
|
||||
for arg in &opcode.args {
|
||||
let field: &Field = field_by_name.get(arg).ok_or_else(|| {
|
||||
Error::from(format!("undefined field {}", arg))
|
||||
})?;
|
||||
let field: &Field = field_by_name
|
||||
.get(arg)
|
||||
.ok_or_else(|| Error::from(format!("undefined field {}", arg)))?;
|
||||
let variant = field.construct_variant_self();
|
||||
fields.extend(quote! { #variant, })
|
||||
}
|
||||
|
@ -360,7 +366,8 @@ impl Isa {
|
|||
let modifiers = ModifiersExpr {
|
||||
modifiers: opcode.modifiers.clone(),
|
||||
side_effects: opcode.side_effects.clone(),
|
||||
}.build()?;
|
||||
}
|
||||
.build()?;
|
||||
modifier_match_arms.push(quote! {
|
||||
Opcode::#ident => #modifiers,
|
||||
});
|
||||
|
@ -424,7 +431,7 @@ impl Isa {
|
|||
if let Some(mnemonics) = mnemonics_by_opcode.get(&opcode.name) {
|
||||
let mut simplified_conditions = Vec::new();
|
||||
for mnemonic in mnemonics {
|
||||
if mnemonic.matcher.is_empty() {
|
||||
if mnemonic.matcher.is_empty() && mnemonic.condition.is_empty() {
|
||||
continue; // TODO else branch
|
||||
}
|
||||
// Emit if condition.
|
||||
|
@ -439,21 +446,44 @@ impl Isa {
|
|||
})?;
|
||||
simplified_conditions.push(field.express_value_self());
|
||||
// Equate with literal.
|
||||
let lit_int = LitInt::new(&format!("{}", condition.value), Span::call_site());
|
||||
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(
|
||||
&field_by_name,
|
||||
&mnemonic.condition,
|
||||
)?);
|
||||
}
|
||||
// Emit branch.
|
||||
let mnemonic_lit = LitStr::new(&mnemonic.name, Span::call_site());
|
||||
// Extract modifier bits.
|
||||
let modifiers = ModifiersExpr {
|
||||
modifiers: mnemonic.modifiers.clone(),
|
||||
side_effects: vec![],
|
||||
}.build()?;
|
||||
}
|
||||
.build()?;
|
||||
// Extract arguments.
|
||||
let mut args = Vec::new();
|
||||
for arg in &mnemonic.args {
|
||||
let field = field_by_name
|
||||
.get(arg)
|
||||
.expect(&format!("field not found: {}", arg));
|
||||
let variant = Ident::new(field.arg.as_ref().unwrap(), Span::call_site());
|
||||
let value = field.express_value_self();
|
||||
args.push(quote!(Argument::#variant(#variant(#value as _)),));
|
||||
}
|
||||
let args = token_stream!(args);
|
||||
simplified_conditions.push(quote! {
|
||||
{
|
||||
return SimplifiedIns {
|
||||
mnemonic: #mnemonic_lit,
|
||||
modifiers: #modifiers,
|
||||
args: vec![],
|
||||
args: vec![#args],
|
||||
ins: self,
|
||||
};
|
||||
}
|
||||
|
@ -622,3 +652,20 @@ impl ModifiersExpr {
|
|||
quote!(Modifiers::default())
|
||||
}
|
||||
}
|
||||
|
||||
/// Compiles conditions such as `S == B` into valid Rust expressions on a PowerPC instruction.
|
||||
fn compile_mnemonic_condition(
|
||||
field_by_name: &HashMap<String, &Field>,
|
||||
code: &str,
|
||||
) -> Result<TokenStream> {
|
||||
let src_stream = TokenStream::from_str(code)?;
|
||||
let token_iter = src_stream.into_iter().flat_map(|token| {
|
||||
if let TokenTree::Ident(ref ident) = token {
|
||||
if let Some(field) = field_by_name.get(&ident.to_string()) {
|
||||
return field.express_value_self();
|
||||
}
|
||||
}
|
||||
token.into()
|
||||
});
|
||||
Ok(TokenStream::from_iter(token_iter))
|
||||
}
|
||||
|
|
50
isa.yaml
50
isa.yaml
|
@ -1968,7 +1968,7 @@ mnemonics:
|
|||
- name: "mr"
|
||||
opcode: "or"
|
||||
args: [ "rA", "rS" ]
|
||||
condition: "S == B"
|
||||
condition: "rS == rB"
|
||||
- name: "nop"
|
||||
opcode: "ori"
|
||||
match:
|
||||
|
@ -2148,56 +2148,56 @@ mnemonics:
|
|||
- name: "blt"
|
||||
opcode: "bc"
|
||||
modifiers: [ "AA", "LK" ]
|
||||
args: [ "crS.LT", "BD" ]
|
||||
args: [ "crfS", "BD" ]
|
||||
match:
|
||||
- arg: BO
|
||||
value: 12
|
||||
- name: "ble"
|
||||
opcode: "bc"
|
||||
modifiers: [ "AA", "LK" ]
|
||||
args: [ "crS.GT", "BD" ]
|
||||
args: [ "crfS", "BD" ]
|
||||
match:
|
||||
- arg: BO
|
||||
value: 4
|
||||
- name: "beq"
|
||||
opcode: "bc"
|
||||
modifiers: [ "AA", "LK" ]
|
||||
args: [ "crS.EQ", "BD" ]
|
||||
args: [ "crfS", "BD" ]
|
||||
match:
|
||||
- arg: BO
|
||||
value: 12
|
||||
- name: "bge"
|
||||
opcode: "bc"
|
||||
modifiers: [ "AA", "LK" ]
|
||||
args: [ "crS.LT", "BD" ]
|
||||
args: [ "crfS", "BD" ]
|
||||
match:
|
||||
- arg: BO
|
||||
value: 4
|
||||
- name: "bgt"
|
||||
opcode: "bc"
|
||||
modifiers: [ "AA", "LK" ]
|
||||
args: [ "crS.GT", "BD" ]
|
||||
args: [ "crfS", "BD" ]
|
||||
match:
|
||||
- arg: BO
|
||||
value: 12
|
||||
- name: "bne"
|
||||
opcode: "bc"
|
||||
modifiers: [ "AA", "LK" ]
|
||||
args: [ "crS.EQ", "BD" ]
|
||||
args: [ "crfS", "BD" ]
|
||||
match:
|
||||
- arg: BO
|
||||
value: 4
|
||||
- name: "bso"
|
||||
opcode: "bc"
|
||||
modifiers: [ "AA", "LK" ]
|
||||
args: [ "crS.SO", "BD" ]
|
||||
args: [ "crfS", "BD" ]
|
||||
match:
|
||||
- arg: BO
|
||||
value: 12
|
||||
- name: "bns"
|
||||
opcode: "bc"
|
||||
modifiers: [ "AA", "LK" ]
|
||||
args: [ "crS.SO", "BD" ]
|
||||
args: [ "crfS", "BD" ]
|
||||
match:
|
||||
- arg: BO
|
||||
value: 4
|
||||
|
@ -2225,56 +2225,56 @@ mnemonics:
|
|||
- name: "bltctr"
|
||||
opcode: "bcctr"
|
||||
modifiers: [ "LK" ]
|
||||
args: [ "crS.LT", "BD" ]
|
||||
args: [ "crfS", "BD" ]
|
||||
match:
|
||||
- arg: BO
|
||||
value: 12
|
||||
- name: "blectr"
|
||||
opcode: "bcctr"
|
||||
modifiers: [ "LK" ]
|
||||
args: [ "crS.GT", "BD" ]
|
||||
args: [ "crfS", "BD" ]
|
||||
match:
|
||||
- arg: BO
|
||||
value: 4
|
||||
- name: "beqctr"
|
||||
opcode: "bcctr"
|
||||
modifiers: [ "LK" ]
|
||||
args: [ "crS.EQ", "BD" ]
|
||||
args: [ "crfS", "BD" ]
|
||||
match:
|
||||
- arg: BO
|
||||
value: 12
|
||||
- name: "bgectr"
|
||||
opcode: "bcctr"
|
||||
modifiers: [ "LK" ]
|
||||
args: [ "crS.LT", "BD" ]
|
||||
args: [ "crfS", "BD" ]
|
||||
match:
|
||||
- arg: BO
|
||||
value: 4
|
||||
- name: "bgtctr"
|
||||
opcode: "bcctr"
|
||||
modifiers: [ "LK" ]
|
||||
args: [ "crS.GT", "BD" ]
|
||||
args: [ "crfS", "BD" ]
|
||||
match:
|
||||
- arg: BO
|
||||
value: 12
|
||||
- name: "bnectr"
|
||||
opcode: "bcctr"
|
||||
modifiers: [ "LK" ]
|
||||
args: [ "crS.EQ", "BD" ]
|
||||
args: [ "crfS", "BD" ]
|
||||
match:
|
||||
- arg: BO
|
||||
value: 4
|
||||
- name: "bsoctr"
|
||||
opcode: "bcctr"
|
||||
modifiers: [ "LK" ]
|
||||
args: [ "crS.SO", "BD" ]
|
||||
args: [ "crfS", "BD" ]
|
||||
match:
|
||||
- arg: BO
|
||||
value: 12
|
||||
- name: "bnsctr"
|
||||
opcode: "bcctr"
|
||||
modifiers: [ "LK" ]
|
||||
args: [ "crS.SO", "BD" ]
|
||||
args: [ "crfS", "BD" ]
|
||||
match:
|
||||
- arg: BO
|
||||
value: 4
|
||||
|
@ -2283,56 +2283,56 @@ mnemonics:
|
|||
- name: "bltlr"
|
||||
opcode: "bclr"
|
||||
modifiers: [ "LK" ]
|
||||
args: [ "crS.LT", "BD" ]
|
||||
args: [ "crfS", "BD" ]
|
||||
match:
|
||||
- arg: BO
|
||||
value: 12
|
||||
- name: "blelr"
|
||||
opcode: "bclr"
|
||||
modifiers: [ "LK" ]
|
||||
args: [ "crS.GT", "BD" ]
|
||||
args: [ "crfS", "BD" ]
|
||||
match:
|
||||
- arg: BO
|
||||
value: 4
|
||||
- name: "beqlr"
|
||||
opcode: "bclr"
|
||||
modifiers: [ "LK" ]
|
||||
args: [ "crS.EQ", "BD" ]
|
||||
args: [ "crfS", "BD" ]
|
||||
match:
|
||||
- arg: BO
|
||||
value: 12
|
||||
- name: "bgelr"
|
||||
opcode: "bclr"
|
||||
modifiers: [ "LK" ]
|
||||
args: [ "crS.LT", "BD" ]
|
||||
args: [ "crfS", "BD" ]
|
||||
match:
|
||||
- arg: BO
|
||||
value: 4
|
||||
- name: "bgtlr"
|
||||
opcode: "bclr"
|
||||
modifiers: [ "LK" ]
|
||||
args: [ "crS.GT", "BD" ]
|
||||
args: [ "crfS", "BD" ]
|
||||
match:
|
||||
- arg: BO
|
||||
value: 12
|
||||
- name: "bnelr"
|
||||
opcode: "bclr"
|
||||
modifiers: [ "LK" ]
|
||||
args: [ "crS.EQ", "BD" ]
|
||||
args: [ "crfS", "BD" ]
|
||||
match:
|
||||
- arg: BO
|
||||
value: 4
|
||||
- name: "bsolr"
|
||||
opcode: "bclr"
|
||||
modifiers: [ "LK" ]
|
||||
args: [ "crS.SO", "BD" ]
|
||||
args: [ "crfS", "BD" ]
|
||||
match:
|
||||
- arg: BO
|
||||
value: 12
|
||||
- name: "bnslr"
|
||||
opcode: "bclr"
|
||||
modifiers: [ "LK" ]
|
||||
args: [ "crS.SO", "BD" ]
|
||||
args: [ "crfS", "BD" ]
|
||||
match:
|
||||
- arg: BO
|
||||
value: 4
|
||||
|
|
Loading…
Reference in New Issue