mirror of
https://git.suyu.dev/suyu/dynarmic.git
synced 2026-03-26 00:58:42 +00:00
A64: Specialize sign-extension SBFM aliases
This commit is contained in:
@@ -85,6 +85,41 @@ bool TranslatorVisitor::UBFM(bool sf, bool N, Imm<6> immr, Imm<6> imms, Reg Rn,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TranslatorVisitor::SXTB_1(Reg Rn, Reg Rd) {
|
||||
const auto src = X(32, Rn);
|
||||
const auto result = ir.SignExtendToWord(ir.LeastSignificantByte(src));
|
||||
X(32, Rd, result);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TranslatorVisitor::SXTB_2(Reg Rn, Reg Rd) {
|
||||
const auto src = X(64, Rn);
|
||||
const auto result = ir.SignExtendToLong(ir.LeastSignificantByte(src));
|
||||
X(64, Rd, result);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TranslatorVisitor::SXTH_1(Reg Rn, Reg Rd) {
|
||||
const auto src = X(32, Rn);
|
||||
const auto result = ir.SignExtendToWord(ir.LeastSignificantHalf(src));
|
||||
X(32, Rd, result);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TranslatorVisitor::SXTH_2(Reg Rn, Reg Rd) {
|
||||
const auto src = X(64, Rn);
|
||||
const auto result = ir.SignExtendToLong(ir.LeastSignificantHalf(src));
|
||||
X(64, Rd, result);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TranslatorVisitor::SXTW(Reg Rn, Reg Rd) {
|
||||
const auto src = X(64, Rn);
|
||||
const auto result = ir.SignExtendToLong(ir.LeastSignificantWord(src));
|
||||
X(64, Rd, result);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TranslatorVisitor::EXTR(bool sf, bool N, Reg Rm, Imm<6> imms, Reg Rn, Reg Rd) {
|
||||
if (N != sf) {
|
||||
return UnallocatedEncoding();
|
||||
|
||||
@@ -94,6 +94,11 @@ struct TranslatorVisitor final {
|
||||
bool SBFM(bool sf, bool N, Imm<6> immr, Imm<6> imms, Reg Rn, Reg Rd);
|
||||
bool BFM(bool sf, bool N, Imm<6> immr, Imm<6> imms, Reg Rn, Reg Rd);
|
||||
bool UBFM(bool sf, bool N, Imm<6> immr, Imm<6> imms, Reg Rn, Reg Rd);
|
||||
bool SXTB_1(Reg Rn, Reg Rd);
|
||||
bool SXTB_2(Reg Rn, Reg Rd);
|
||||
bool SXTH_1(Reg Rn, Reg Rd);
|
||||
bool SXTH_2(Reg Rn, Reg Rd);
|
||||
bool SXTW(Reg Rn, Reg Rd);
|
||||
|
||||
// Data processing - Immediate - Extract
|
||||
bool EXTR(bool sf, bool N, Reg Rm, Imm<6> imms, Reg Rn, Reg Rd);
|
||||
|
||||
Reference in New Issue
Block a user