mirror of
https://github.com/yuzu-mirror/oaknut.git
synced 2026-04-21 06:03:37 +00:00
Minor fixes
This commit is contained in:
parent
de827b00c8
commit
b78ce55fb6
5 changed files with 95 additions and 38 deletions
|
|
@ -32,10 +32,18 @@ void ADD(WRegWsp wd, WRegWsp wn, AddSubImm imm)
|
|||
{
|
||||
emit<"000100010siiiiiiiiiiiinnnnnddddd", "d", "n", "si">(wd, wn, imm);
|
||||
}
|
||||
void ADD(WRegWsp wd, WRegWsp wn, Imm<12> imm, LslSymbol, ImmChoice<0, 12> shift_amount)
|
||||
{
|
||||
ADD(wd, wn, AddSubImm{imm.value(), static_cast<AddSubImmShift>(shift_amount.m_encoded)});
|
||||
}
|
||||
void ADD(XRegSp xd, XRegSp xn, AddSubImm imm)
|
||||
{
|
||||
emit<"100100010siiiiiiiiiiiinnnnnddddd", "d", "n", "si">(xd, xn, imm);
|
||||
}
|
||||
void ADD(XRegSp xd, XRegSp xn, Imm<12> imm, LslSymbol, ImmChoice<0, 12> shift_amount)
|
||||
{
|
||||
ADD(xd, xn, AddSubImm{imm.value(), static_cast<AddSubImmShift>(shift_amount.m_encoded)});
|
||||
}
|
||||
void ADD(WReg wd, WReg wn, WReg wm, AddSubShift shift = AddSubShift::LSL, Imm<5> shift_amount = 0)
|
||||
{
|
||||
emit<"00001011ss0mmmmmiiiiiinnnnnddddd", "d", "n", "m", "s", "i">(wd, wn, wm, shift, shift_amount);
|
||||
|
|
@ -59,10 +67,18 @@ void ADDS(WReg wd, WRegWsp wn, AddSubImm imm)
|
|||
{
|
||||
emit<"001100010siiiiiiiiiiiinnnnnddddd", "d", "n", "si">(wd, wn, imm);
|
||||
}
|
||||
void ADDS(WReg wd, WRegWsp wn, Imm<12> imm, LslSymbol, ImmChoice<0, 12> shift_amount)
|
||||
{
|
||||
ADDS(wd, wn, AddSubImm{imm.value(), static_cast<AddSubImmShift>(shift_amount.m_encoded)});
|
||||
}
|
||||
void ADDS(XReg xd, XRegSp xn, AddSubImm imm)
|
||||
{
|
||||
emit<"101100010siiiiiiiiiiiinnnnnddddd", "d", "n", "si">(xd, xn, imm);
|
||||
}
|
||||
void ADDS(XReg xd, XRegSp xn, Imm<12> imm, LslSymbol, ImmChoice<0, 12> shift_amount)
|
||||
{
|
||||
ADDS(xd, xn, AddSubImm{imm.value(), static_cast<AddSubImmShift>(shift_amount.m_encoded)});
|
||||
}
|
||||
void ADDS(WReg wd, WReg wn, WReg wm, AddSubShift shift = AddSubShift::LSL, Imm<5> shift_amount = 0)
|
||||
{
|
||||
emit<"00101011ss0mmmmmiiiiiinnnnnddddd", "d", "n", "m", "s", "i">(wd, wn, wm, shift, shift_amount);
|
||||
|
|
@ -171,13 +187,13 @@ void BFXIL(WReg wd, WReg wn, Imm<5> lsb, Imm<5> width)
|
|||
{
|
||||
if (width.value() == 0 || width.value() > (32 - lsb.value()))
|
||||
throw "invalid width";
|
||||
emit<"0011001100rrrrrrssssssnnnnnddddd", "d", "n", "r", "s">(wd, wn, (-lsb.value()) & 31, width.value() - 1);
|
||||
emit<"0011001100rrrrrrssssssnnnnnddddd", "d", "n", "r", "s">(wd, wn, lsb.value(), lsb.value() + width.value() - 1);
|
||||
}
|
||||
void BFXIL(XReg xd, XReg xn, Imm<6> lsb, Imm<6> width)
|
||||
{
|
||||
if (width.value() == 0 || width.value() > (64 - lsb.value()))
|
||||
throw "invalid width";
|
||||
emit<"1011001101rrrrrrssssssnnnnnddddd", "d", "n", "r", "s">(xd, xn, (-lsb.value()) & 63, width.value() - 1);
|
||||
emit<"1011001101rrrrrrssssssnnnnnddddd", "d", "n", "r", "s">(xd, xn, lsb.value(), lsb.value() + width.value() - 1);
|
||||
}
|
||||
void BIC(WReg wd, WReg wn, WReg wm, LogShift shift = LogShift::LSL, Imm<5> shift_amount = 0)
|
||||
{
|
||||
|
|
@ -261,27 +277,27 @@ void CCMP(XReg xn, XReg xm, Imm<4> nzcv, Cond cond)
|
|||
}
|
||||
void CINC(WReg wd, WReg wn, Cond cond)
|
||||
{
|
||||
if (cond != Cond::AL && cond != Cond::NV)
|
||||
if (cond == Cond::AL || cond == Cond::NV)
|
||||
throw "invalid Cond";
|
||||
emit<"00011010100mmmmmcccc01nnnnnddddd", "d", "n", "c">(wd, wn, invert(cond));
|
||||
emit<"00011010100mmmmmcccc01nnnnnddddd", "d", "n", "m", "c">(wd, wn, wn, invert(cond));
|
||||
}
|
||||
void CINC(XReg xd, XReg xn, Cond cond)
|
||||
{
|
||||
if (cond != Cond::AL && cond != Cond::NV)
|
||||
if (cond == Cond::AL || cond == Cond::NV)
|
||||
throw "invalid Cond";
|
||||
emit<"10011010100mmmmmcccc01nnnnnddddd", "d", "n", "c">(xd, xn, invert(cond));
|
||||
emit<"10011010100mmmmmcccc01nnnnnddddd", "d", "n", "m", "c">(xd, xn, xn, invert(cond));
|
||||
}
|
||||
void CINV(WReg wd, WReg wn, Cond cond)
|
||||
{
|
||||
if (cond != Cond::AL && cond != Cond::NV)
|
||||
if (cond == Cond::AL || cond == Cond::NV)
|
||||
throw "invalid Cond";
|
||||
emit<"01011010100mmmmmcccc00nnnnnddddd", "d", "n", "c">(wd, wn, invert(cond));
|
||||
emit<"01011010100mmmmmcccc00nnnnnddddd", "d", "n", "m", "c">(wd, wn, wn, invert(cond));
|
||||
}
|
||||
void CINV(XReg xd, XReg xn, Cond cond)
|
||||
{
|
||||
if (cond != Cond::AL && cond != Cond::NV)
|
||||
if (cond == Cond::AL || cond == Cond::NV)
|
||||
throw "invalid Cond";
|
||||
emit<"11011010100mmmmmcccc00nnnnnddddd", "d", "n", "c">(xd, xn, invert(cond));
|
||||
emit<"11011010100mmmmmcccc00nnnnnddddd", "d", "n", "m", "c">(xd, xn, xn, invert(cond));
|
||||
}
|
||||
void CLREX(Imm<4> imm = 15)
|
||||
{
|
||||
|
|
@ -318,10 +334,18 @@ void CMN(WRegWsp wn, AddSubImm imm)
|
|||
{
|
||||
emit<"001100010siiiiiiiiiiiinnnnn11111", "n", "si">(wn, imm);
|
||||
}
|
||||
void CMN(WRegWsp wn, Imm<12> imm, LslSymbol, ImmChoice<0, 12> shift_amount)
|
||||
{
|
||||
CMN(wn, AddSubImm{imm.value(), static_cast<AddSubImmShift>(shift_amount.m_encoded)});
|
||||
}
|
||||
void CMN(XRegSp xn, AddSubImm imm)
|
||||
{
|
||||
emit<"101100010siiiiiiiiiiiinnnnn11111", "n", "si">(xn, imm);
|
||||
}
|
||||
void CMN(XRegSp xn, Imm<12> imm, LslSymbol, ImmChoice<0, 12> shift_amount)
|
||||
{
|
||||
CMN(xn, AddSubImm{imm.value(), static_cast<AddSubImmShift>(shift_amount.m_encoded)});
|
||||
}
|
||||
void CMN(WReg wn, WReg wm, AddSubShift shift = AddSubShift::LSL, Imm<5> shift_amount = 0)
|
||||
{
|
||||
emit<"00101011ss0mmmmmiiiiiinnnnn11111", "n", "m", "s", "i">(wn, wm, shift, shift_amount);
|
||||
|
|
@ -345,10 +369,18 @@ void CMP(WRegWsp wn, AddSubImm imm)
|
|||
{
|
||||
emit<"011100010siiiiiiiiiiiinnnnn11111", "n", "si">(wn, imm);
|
||||
}
|
||||
void CMP(WRegWsp wn, Imm<12> imm, LslSymbol, ImmChoice<0, 12> shift_amount)
|
||||
{
|
||||
CMP(wn, AddSubImm{imm.value(), static_cast<AddSubImmShift>(shift_amount.m_encoded)});
|
||||
}
|
||||
void CMP(XRegSp xn, AddSubImm imm)
|
||||
{
|
||||
emit<"111100010siiiiiiiiiiiinnnnn11111", "n", "si">(xn, imm);
|
||||
}
|
||||
void CMP(XRegSp xn, Imm<12> imm, LslSymbol, ImmChoice<0, 12> shift_amount)
|
||||
{
|
||||
CMP(xn, AddSubImm{imm.value(), static_cast<AddSubImmShift>(shift_amount.m_encoded)});
|
||||
}
|
||||
void CMP(WReg wn, WReg wm, AddSubShift shift = AddSubShift::LSL, Imm<5> shift_amount = 0)
|
||||
{
|
||||
emit<"01101011ss0mmmmmiiiiiinnnnn11111", "n", "m", "s", "i">(wn, wm, shift, shift_amount);
|
||||
|
|
@ -359,15 +391,15 @@ void CMP(XReg xn, XReg xm, AddSubShift shift = AddSubShift::LSL, Imm<6> shift_am
|
|||
}
|
||||
void CNEG(WReg wd, WReg wn, Cond cond)
|
||||
{
|
||||
if (cond != Cond::AL && cond != Cond::NV)
|
||||
if (cond == Cond::AL || cond == Cond::NV)
|
||||
throw "invalid Cond";
|
||||
emit<"01011010100mmmmmcccc01nnnnnddddd", "d", "n", "c">(wd, wn, invert(cond));
|
||||
emit<"01011010100mmmmmcccc01nnnnnddddd", "d", "n", "m", "c">(wd, wn, wn, invert(cond));
|
||||
}
|
||||
void CNEG(XReg xd, XReg xn, Cond cond)
|
||||
{
|
||||
if (cond != Cond::AL && cond != Cond::NV)
|
||||
if (cond == Cond::AL || cond == Cond::NV)
|
||||
throw "invalid Cond";
|
||||
emit<"11011010100mmmmmcccc01nnnnnddddd", "d", "n", "c">(xd, xn, invert(cond));
|
||||
emit<"11011010100mmmmmcccc01nnnnnddddd", "d", "n", "m", "c">(xd, xn, xn, invert(cond));
|
||||
}
|
||||
void CRC32B(WReg wd, WReg wn, WReg wm)
|
||||
{
|
||||
|
|
@ -415,25 +447,25 @@ void CSEL(XReg xd, XReg xn, XReg xm, Cond cond)
|
|||
}
|
||||
void CSET(WReg wd, Cond cond)
|
||||
{
|
||||
if (cond != Cond::AL && cond != Cond::NV)
|
||||
if (cond == Cond::AL || cond == Cond::NV)
|
||||
throw "invalid Cond";
|
||||
emit<"0001101010011111cccc0111111ddddd", "d", "c">(wd, invert(cond));
|
||||
}
|
||||
void CSET(XReg xd, Cond cond)
|
||||
{
|
||||
if (cond != Cond::AL && cond != Cond::NV)
|
||||
if (cond == Cond::AL || cond == Cond::NV)
|
||||
throw "invalid Cond";
|
||||
emit<"1001101010011111cccc0111111ddddd", "d", "c">(xd, invert(cond));
|
||||
}
|
||||
void CSETM(WReg wd, Cond cond)
|
||||
{
|
||||
if (cond != Cond::AL && cond != Cond::NV)
|
||||
if (cond == Cond::AL || cond == Cond::NV)
|
||||
throw "invalid Cond";
|
||||
emit<"0101101010011111cccc0011111ddddd", "d", "c">(wd, invert(cond));
|
||||
}
|
||||
void CSETM(XReg xd, Cond cond)
|
||||
{
|
||||
if (cond != Cond::AL && cond != Cond::NV)
|
||||
if (cond == Cond::AL || cond == Cond::NV)
|
||||
throw "invalid Cond";
|
||||
emit<"1101101010011111cccc0011111ddddd", "d", "c">(xd, invert(cond));
|
||||
}
|
||||
|
|
@ -1219,13 +1251,13 @@ void SBFX(WReg wd, WReg wn, Imm<5> lsb, Imm<5> width)
|
|||
{
|
||||
if (width.value() == 0 || width.value() > (32 - lsb.value()))
|
||||
throw "invalid width";
|
||||
emit<"0001001100rrrrrrssssssnnnnnddddd", "d", "n", "r", "s">(wd, wn, (-lsb.value()) & 31, width.value() - 1);
|
||||
emit<"0001001100rrrrrrssssssnnnnnddddd", "d", "n", "r", "s">(wd, wn, lsb.value(), lsb.value() + width.value() - 1);
|
||||
}
|
||||
void SBFX(XReg xd, XReg xn, Imm<6> lsb, Imm<6> width)
|
||||
{
|
||||
if (width.value() == 0 || width.value() > (64 - lsb.value()))
|
||||
throw "invalid width";
|
||||
emit<"1001001101rrrrrrssssssnnnnnddddd", "d", "n", "r", "s">(xd, xn, (-lsb.value()) & 63, width.value() - 1);
|
||||
emit<"1001001101rrrrrrssssssnnnnnddddd", "d", "n", "r", "s">(xd, xn, lsb.value(), lsb.value() + width.value() - 1);
|
||||
}
|
||||
void SDIV(WReg wd, WReg wn, WReg wm)
|
||||
{
|
||||
|
|
@ -1482,10 +1514,18 @@ void SUB(WRegWsp wd, WRegWsp wn, AddSubImm imm)
|
|||
{
|
||||
emit<"010100010siiiiiiiiiiiinnnnnddddd", "d", "n", "si">(wd, wn, imm);
|
||||
}
|
||||
void SUB(WRegWsp wd, WRegWsp wn, Imm<12> imm, LslSymbol, ImmChoice<0, 12> shift_amount)
|
||||
{
|
||||
SUB(wd, wn, AddSubImm{imm.value(), static_cast<AddSubImmShift>(shift_amount.m_encoded)});
|
||||
}
|
||||
void SUB(XRegSp xd, XRegSp xn, AddSubImm imm)
|
||||
{
|
||||
emit<"110100010siiiiiiiiiiiinnnnnddddd", "d", "n", "si">(xd, xn, imm);
|
||||
}
|
||||
void SUB(XRegSp xd, XRegSp xn, Imm<12> imm, LslSymbol, ImmChoice<0, 12> shift_amount)
|
||||
{
|
||||
SUB(xd, xn, AddSubImm{imm.value(), static_cast<AddSubImmShift>(shift_amount.m_encoded)});
|
||||
}
|
||||
void SUB(WReg wd, WReg wn, WReg wm, AddSubShift shift = AddSubShift::LSL, Imm<5> shift_amount = 0)
|
||||
{
|
||||
emit<"01001011ss0mmmmmiiiiiinnnnnddddd", "d", "n", "m", "s", "i">(wd, wn, wm, shift, shift_amount);
|
||||
|
|
@ -1509,10 +1549,18 @@ void SUBS(WReg wd, WRegWsp wn, AddSubImm imm)
|
|||
{
|
||||
emit<"011100010siiiiiiiiiiiinnnnnddddd", "d", "n", "si">(wd, wn, imm);
|
||||
}
|
||||
void SUBS(WReg wd, WRegWsp wn, Imm<12> imm, LslSymbol, ImmChoice<0, 12> shift_amount)
|
||||
{
|
||||
SUBS(wd, wn, AddSubImm{imm.value(), static_cast<AddSubImmShift>(shift_amount.m_encoded)});
|
||||
}
|
||||
void SUBS(XReg xd, XRegSp xn, AddSubImm imm)
|
||||
{
|
||||
emit<"111100010siiiiiiiiiiiinnnnnddddd", "d", "n", "si">(xd, xn, imm);
|
||||
}
|
||||
void SUBS(XReg xd, XRegSp xn, Imm<12> imm, LslSymbol, ImmChoice<0, 12> shift_amount)
|
||||
{
|
||||
SUBS(xd, xn, AddSubImm{imm.value(), static_cast<AddSubImmShift>(shift_amount.m_encoded)});
|
||||
}
|
||||
void SUBS(WReg wd, WReg wn, WReg wm, AddSubShift shift = AddSubShift::LSL, Imm<5> shift_amount = 0)
|
||||
{
|
||||
emit<"01101011ss0mmmmmiiiiiinnnnnddddd", "d", "n", "m", "s", "i">(wd, wn, wm, shift, shift_amount);
|
||||
|
|
@ -1599,13 +1647,13 @@ void UBFX(WReg wd, WReg wn, Imm<5> lsb, Imm<5> width)
|
|||
{
|
||||
if (width.value() == 0 || width.value() > (32 - lsb.value()))
|
||||
throw "invalid width";
|
||||
emit<"0101001100rrrrrrssssssnnnnnddddd", "d", "n", "r", "s">(wd, wn, (-lsb.value()) & 31, width.value() - 1);
|
||||
emit<"0101001100rrrrrrssssssnnnnnddddd", "d", "n", "r", "s">(wd, wn, lsb.value(), lsb.value() + width.value() - 1);
|
||||
}
|
||||
void UBFX(XReg xd, XReg xn, Imm<6> lsb, Imm<6> width)
|
||||
{
|
||||
if (width.value() == 0 || width.value() > (64 - lsb.value()))
|
||||
throw "invalid width";
|
||||
emit<"1101001101rrrrrrssssssnnnnnddddd", "d", "n", "r", "s">(xd, xn, (-lsb.value()) & 63, width.value() - 1);
|
||||
emit<"1101001101rrrrrrssssssnnnnnddddd", "d", "n", "r", "s">(xd, xn, lsb.value(), lsb.value() + width.value() - 1);
|
||||
}
|
||||
void UDF(Imm<16> imm)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -9,6 +9,10 @@ struct PostIndexed {};
|
|||
|
||||
struct PreIndexed {};
|
||||
|
||||
enum class LslSymbol {
|
||||
LSL,
|
||||
};
|
||||
|
||||
enum class Cond {
|
||||
EQ,
|
||||
NE,
|
||||
|
|
@ -30,7 +34,7 @@ enum class Cond {
|
|||
LO = CC,
|
||||
};
|
||||
|
||||
Cond invert(Cond c)
|
||||
constexpr Cond invert(Cond c)
|
||||
{
|
||||
return static_cast<Cond>(static_cast<unsigned>(c) ^ 1);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ public:
|
|||
|
||||
static bool is_valid(std::uint32_t value_)
|
||||
{
|
||||
return ((value_ & mask) != value_);
|
||||
return ((value_ & mask) == value_);
|
||||
}
|
||||
|
||||
private:
|
||||
|
|
@ -48,7 +48,7 @@ enum class AddSubImmShift {
|
|||
|
||||
struct AddSubImm {
|
||||
public:
|
||||
constexpr AddSubImm(std::uint16_t value_, AddSubImmShift shift_)
|
||||
constexpr AddSubImm(std::uint32_t value_, AddSubImmShift shift_)
|
||||
: m_encoded(value_ | ((shift_ == AddSubImmShift::SHL_12) ? 1 << 12 : 0))
|
||||
{
|
||||
if ((value_ & 0xFFF) != value_)
|
||||
|
|
@ -152,23 +152,25 @@ constexpr std::optional<std::uint32_t> encode_bit_imm(std::uint64_t value)
|
|||
return std::nullopt;
|
||||
|
||||
const std::size_t rotation = std::countr_zero(value & inverse_mask_from_trailing_ones(value));
|
||||
|
||||
const std::uint64_t emask = mask_from_esize(esize);
|
||||
const std::uint64_t rot_element = std::rotr(value, rotation) & emask;
|
||||
|
||||
if (!is_contiguous_mask_from_lsb(rot_element))
|
||||
return std::nullopt;
|
||||
|
||||
const std::uint32_t S = std::popcount(rot_element) - 1;
|
||||
const std::uint32_t R = rotation & (esize - 1);
|
||||
const std::uint32_t S = ((-esize) << 1) | (std::popcount(rot_element) - 1);
|
||||
const std::uint32_t R = (esize - rotation) & (esize - 1);
|
||||
const std::uint32_t N = (~S >> 6) & 1;
|
||||
|
||||
return static_cast<std::uint32_t>(((((-esize) << 7) | (S << 6) | R) ^ 0x1000) & 0x1fff);
|
||||
return static_cast<std::uint32_t>((S & 0b111111) | (R << 6) | (N << 12));
|
||||
}
|
||||
|
||||
constexpr std::optional<std::uint32_t> encode_bit_imm(std::uint32_t value)
|
||||
{
|
||||
const std::uint64_t value_u64 = (static_cast<std::uint64_t>(value) << 32) | static_cast<std::uint64_t>(value);
|
||||
const auto result = encode_bit_imm(value_u64);
|
||||
if (result && (*result & 0x3FF) != *result)
|
||||
if (result && (*result & 0b0'111111'111111) != *result)
|
||||
return std::nullopt;
|
||||
return result;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -86,14 +86,14 @@ struct WReg : public RReg {
|
|||
friend class BasicCodeGenerator;
|
||||
};
|
||||
|
||||
XReg RReg::toX() const
|
||||
inline XReg RReg::toX() const
|
||||
{
|
||||
if (index() == -1)
|
||||
throw "cannot convert SP/WSP to XReg";
|
||||
return XReg{index()};
|
||||
}
|
||||
|
||||
WReg RReg::toW() const
|
||||
inline WReg RReg::toW() const
|
||||
{
|
||||
if (index() == -1)
|
||||
throw "cannot convert SP/WSP to WReg";
|
||||
|
|
|
|||
|
|
@ -40,6 +40,9 @@ struct overloaded : Ts... {
|
|||
using Ts::operator()...;
|
||||
};
|
||||
|
||||
template<class... Ts>
|
||||
overloaded(Ts...) -> overloaded<Ts...>;
|
||||
|
||||
} // namespace detail
|
||||
|
||||
struct Label {
|
||||
|
|
@ -124,8 +127,8 @@ private:
|
|||
return encode_fn(Policy::current_address(), *label->m_addr);
|
||||
}
|
||||
|
||||
label->m_wbs.emplace_back({Policy::current_address(), ~splat, static_cast<Label::EmitFunctionType>(encode_fn)});
|
||||
return 0;
|
||||
label->m_wbs.emplace_back(Label::Writeback{Policy::current_address(), ~splat, static_cast<Label::EmitFunctionType>(encode_fn)});
|
||||
return 0u;
|
||||
},
|
||||
[&](void* p) {
|
||||
return encode_fn(Policy::current_address(), reinterpret_cast<std::uintptr_t>(p));
|
||||
|
|
@ -149,8 +152,8 @@ private:
|
|||
return encode_fn(Policy::current_address(), *label->m_addr);
|
||||
}
|
||||
|
||||
label->m_wbs.emplace_back({Policy::current_address(), ~splat, static_cast<Label::EmitFunctionType>(encode_fn)});
|
||||
return 0;
|
||||
label->m_wbs.emplace_back(Label::Writeback{Policy::current_address(), ~splat, static_cast<Label::EmitFunctionType>(encode_fn)});
|
||||
return 0u;
|
||||
},
|
||||
[&](void* p) {
|
||||
return encode_fn(Policy::current_address(), reinterpret_cast<std::uintptr_t>(p));
|
||||
|
|
@ -207,9 +210,9 @@ namespace util {
|
|||
|
||||
inline constexpr WReg W0{0}, W1{1}, W2{2}, W3{3}, W4{4}, W5{5}, W6{6}, W7{7}, W8{8}, W9{9}, W10{10}, W11{11}, W12{12}, W13{13}, W14{14}, W15{15}, W16{16}, W17{17}, W18{18}, W19{19}, W20{20}, W21{21}, W22{22}, W23{23}, W24{24}, W25{25}, W26{26}, W27{27}, W28{28}, W29{29}, W30{30};
|
||||
inline constexpr XReg X0{0}, X1{1}, X2{2}, X3{3}, X4{4}, X5{5}, X6{6}, X7{7}, X8{8}, X9{9}, X10{10}, X11{11}, X12{12}, X13{13}, X14{14}, X15{15}, X16{16}, X17{17}, X18{18}, X19{19}, X20{20}, X21{21}, X22{22}, X23{23}, X24{24}, X25{25}, X26{26}, X27{27}, X28{28}, X29{29}, X30{30};
|
||||
inline constexpr ZrReg ZR{};
|
||||
inline constexpr ZrReg ZR{}, XZR{};
|
||||
inline constexpr WzrReg WZR{};
|
||||
inline constexpr SpReg SP{};
|
||||
inline constexpr SpReg SP{}, XSP{};
|
||||
inline constexpr WspReg WSP{};
|
||||
|
||||
inline constexpr Cond EQ{Cond::EQ}, NE{Cond::NE}, CS{Cond::CS}, CC{Cond::CC}, MI{Cond::MI}, PL{Cond::PL}, VS{Cond::VS}, VC{Cond::VC}, HI{Cond::HI}, LS{Cond::LS}, GE{Cond::GE}, LT{Cond::LT}, GT{Cond::GT}, LE{Cond::LE}, AL{Cond::AL}, NV{Cond::NV}, HS{Cond::HS}, LO{Cond::LO};
|
||||
|
|
@ -222,7 +225,7 @@ inline constexpr auto SXTB{MultiTypedName<AddSubExt::SXTB>{}};
|
|||
inline constexpr auto SXTH{MultiTypedName<AddSubExt::SXTH>{}};
|
||||
inline constexpr auto SXTW{MultiTypedName<AddSubExt::SXTW, IndexExt::SXTW>{}};
|
||||
inline constexpr auto SXTX{MultiTypedName<AddSubExt::SXTX, IndexExt::SXTX>{}};
|
||||
inline constexpr auto LSL{MultiTypedName<AddSubExt::LSL, IndexExt::LSL, AddSubShift::LSL, LogShift::LSL>{}};
|
||||
inline constexpr auto LSL{MultiTypedName<AddSubExt::LSL, IndexExt::LSL, AddSubShift::LSL, LogShift::LSL, LslSymbol::LSL>{}};
|
||||
inline constexpr auto LSR{MultiTypedName<AddSubShift::LSR, LogShift::LSR>{}};
|
||||
inline constexpr auto ASR{MultiTypedName<AddSubShift::ASR, LogShift::ASR>{}};
|
||||
inline constexpr auto ROR{MultiTypedName<LogShift::ROR>{}};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue