thumb32: Implement LSR (register)
This commit is contained in:
parent
fdd379a36c
commit
e06d4bcbb2
3 changed files with 15 additions and 1 deletions
|
@ -190,7 +190,7 @@ INST(thumb32_BLX_imm, "BLX (imm)", "11110Svvvvvvvvvv11j0jv
|
||||||
|
|
||||||
// Data Processing (register)
|
// Data Processing (register)
|
||||||
INST(thumb32_LSL_reg, "LSL (reg)", "111110100000mmmm1111dddd0000ssss")
|
INST(thumb32_LSL_reg, "LSL (reg)", "111110100000mmmm1111dddd0000ssss")
|
||||||
//INST(thumb32_LSR_reg, "LSR (reg)", "11111010001-----1111----0000----")
|
INST(thumb32_LSR_reg, "LSR (reg)", "111110100010mmmm1111dddd0000ssss")
|
||||||
//INST(thumb32_ASR_reg, "ASR (reg)", "11111010010-----1111----0000----")
|
//INST(thumb32_ASR_reg, "ASR (reg)", "11111010010-----1111----0000----")
|
||||||
//INST(thumb32_ROR_reg, "ROR (reg)", "11111010011-----1111----0000----")
|
//INST(thumb32_ROR_reg, "ROR (reg)", "11111010011-----1111----0000----")
|
||||||
INST(thumb32_SXTH, "SXTH", "11111010000011111111dddd10rrmmmm")
|
INST(thumb32_SXTH, "SXTH", "11111010000011111111dddd10rrmmmm")
|
||||||
|
|
|
@ -24,6 +24,19 @@ bool ThumbTranslatorVisitor::thumb32_LSL_reg(Reg m, Reg d, Reg s) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ThumbTranslatorVisitor::thumb32_LSR_reg(Reg m, Reg d, Reg s) {
|
||||||
|
if (d == Reg::PC || m == Reg::PC || s == Reg::PC) {
|
||||||
|
return UnpredictableInstruction();
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto shift_s = ir.LeastSignificantByte(ir.GetRegister(s));
|
||||||
|
const auto apsr_c = ir.GetCFlag();
|
||||||
|
const auto result_carry = ir.LogicalShiftRight(ir.GetRegister(m), shift_s, apsr_c);
|
||||||
|
|
||||||
|
ir.SetRegister(d, result_carry.result);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool ThumbTranslatorVisitor::thumb32_SXTB(Reg d, SignExtendRotation rotate, Reg m) {
|
bool ThumbTranslatorVisitor::thumb32_SXTB(Reg d, SignExtendRotation rotate, Reg m) {
|
||||||
if (d == Reg::PC || m == Reg::PC) {
|
if (d == Reg::PC || m == Reg::PC) {
|
||||||
return UnpredictableInstruction();
|
return UnpredictableInstruction();
|
||||||
|
|
|
@ -183,6 +183,7 @@ struct ThumbTranslatorVisitor final {
|
||||||
|
|
||||||
// thumb32 data processing (register) instructions
|
// thumb32 data processing (register) instructions
|
||||||
bool thumb32_LSL_reg(Reg m, Reg d, Reg s);
|
bool thumb32_LSL_reg(Reg m, Reg d, Reg s);
|
||||||
|
bool thumb32_LSR_reg(Reg m, Reg d, Reg s);
|
||||||
bool thumb32_SXTB(Reg d, SignExtendRotation rotate, Reg m);
|
bool thumb32_SXTB(Reg d, SignExtendRotation rotate, Reg m);
|
||||||
bool thumb32_SXTB16(Reg d, SignExtendRotation rotate, Reg m);
|
bool thumb32_SXTB16(Reg d, SignExtendRotation rotate, Reg m);
|
||||||
bool thumb32_SXTAB(Reg n, Reg d, SignExtendRotation rotate, Reg m);
|
bool thumb32_SXTAB(Reg n, Reg d, SignExtendRotation rotate, Reg m);
|
||||||
|
|
Loading…
Reference in a new issue