oaknut: Add PAUTH instructions

This commit is contained in:
Wunkolo 2023-10-07 17:22:11 -07:00 committed by merry
parent 1ca13c3b63
commit 94c726ce03
2 changed files with 204 additions and 0 deletions

View file

@ -1,6 +1,78 @@
// SPDX-FileCopyrightText: Copyright (c) 2023 merryhime <https://mary.rs> // SPDX-FileCopyrightText: Copyright (c) 2023 merryhime <https://mary.rs>
// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
void AUTDA(XReg xd, XRegSp xn)
{
emit<"110110101100000100Z110nnnnnddddd", "Z", "d", "n">(0, xd, xn);
}
void AUTDB(XReg xd, XRegSp xn)
{
emit<"110110101100000100Z111nnnnnddddd", "Z", "d", "n">(0, xd, xn);
}
void AUTDZA(XReg xd)
{
emit<"110110101100000100Z11011111ddddd", "Z", "d">(1, xd);
}
void AUTDZB(XReg xd)
{
emit<"110110101100000100Z11111111ddddd", "Z", "d">(1, xd);
}
void AUTIA(XReg xd, XRegSp xn)
{
emit<"110110101100000100Z100nnnnnddddd", "Z", "d", "n">(0, xd, xn);
}
void AUTIB(XReg xd, XRegSp xn)
{
emit<"110110101100000100Z101nnnnnddddd", "Z", "d", "n">(0, xd, xn);
}
void AUTIZA(XReg xd)
{
emit<"110110101100000100Z10011111ddddd", "Z", "d">(1, xd);
}
void AUTIZB(XReg xd)
{
emit<"110110101100000100Z10111111ddddd", "Z", "d">(1, xd);
}
void BLRAA(XReg xn, XRegSp xm)
{
emit<"1101011Z0011111100001Mnnnnnmmmmm", "Z", "M", "n", "m">(1, 0, xn, xm);
}
void BLRAAZ(XReg xn)
{
emit<"1101011Z0011111100001Mnnnnn11111", "Z", "M", "n">(0, 0, xn);
}
void BLRAB(XReg xn, XRegSp xm)
{
emit<"1101011Z0011111100001Mnnnnnmmmmm", "Z", "M", "n", "m">(1, 1, xn, xm);
}
void BLRABZ(XReg xn)
{
emit<"1101011Z0011111100001Mnnnnn11111", "Z", "M", "n">(0, 1, xn);
}
void BRAA(XReg xn, XRegSp xm)
{
emit<"1101011Z0001111100001Mnnnnnmmmmm", "Z", "M", "n", "m">(1, 0, xn, xm);
}
void BRAAZ(XReg xn)
{
emit<"1101011Z0001111100001Mnnnnn11111", "Z", "M", "n">(0, 0, xn);
}
void BRAB(XReg xn, XRegSp xm)
{
emit<"1101011Z0001111100001Mnnnnnmmmmm", "Z", "M", "n", "m">(1, 1, xn, xm);
}
void BRABZ(XReg xn)
{
emit<"1101011Z0001111100001Mnnnnn11111", "Z", "M", "n">(0, 1, xn);
}
void ERETAA()
{
emit<"110101101001111100001M1111111111", "M">(0);
}
void ERETAB()
{
emit<"110101101001111100001M1111111111", "M">(1);
}
void LDAPR(WReg wt, XRegSp xn) void LDAPR(WReg wt, XRegSp xn)
{ {
emit<"1011100010111111110000nnnnnttttt", "t", "n">(wt, xn); emit<"1011100010111111110000nnnnnttttt", "t", "n">(wt, xn);
@ -16,4 +88,72 @@ void LDAPRB(WReg wt, XRegSp xn)
void LDAPRH(WReg wt, XRegSp xn) void LDAPRH(WReg wt, XRegSp xn)
{ {
emit<"0111100010111111110000nnnnnttttt", "t", "n">(wt, xn); emit<"0111100010111111110000nnnnnttttt", "t", "n">(wt, xn);
}
void LDRAA(XReg xt, XRegSp xn, SOffset<13, 3> simm = 0)
{
emit<"11111000Mi1iiiiiiiiiW1nnnnnttttt", "M", "W", "t", "n", "i">(0, 0, xt, xn, simm);
}
void LDRAB(XReg xt, XRegSp xn, SOffset<13, 3> simm = 0)
{
emit<"11111000Mi1iiiiiiiiiW1nnnnnttttt", "M", "W", "t", "n", "i">(1, 0, xt, xn, simm);
}
void LDRAA(XReg xt, XRegSp xn, PreIndexed, SOffset<13, 3> simm)
{
emit<"11111000Mi1iiiiiiiiiW1nnnnnttttt", "M", "W", "t", "n", "i">(0, 1, xt, xn, simm);
}
void LDRAB(XReg xt, XRegSp xn, PreIndexed, SOffset<13, 3> simm)
{
emit<"11111000Mi1iiiiiiiiiW1nnnnnttttt", "M", "W", "t", "n", "i">(1, 1, xt, xn, simm);
}
void PACDA(XReg xd, XRegSp xn)
{
emit<"110110101100000100Z010nnnnnddddd", "Z", "d", "n">(0, xd, xn);
}
void PACDB(XReg xd, XRegSp xn)
{
emit<"110110101100000100Z011nnnnnddddd", "Z", "d", "n">(0, xd, xn);
}
void PACDZA(XReg xd)
{
emit<"110110101100000100Z01011111ddddd", "Z", "d">(1, xd);
}
void PACDZB(XReg xd)
{
emit<"110110101100000100Z01111111ddddd", "Z", "d">(1, xd);
}
void PACGA(XReg xd, XReg xn, XRegSp xm)
{
emit<"10011010110mmmmm001100nnnnnddddd", "d", "n", "m">(xd, xn, xm);
}
void PACIA(XReg xd, XRegSp xn)
{
emit<"110110101100000100Z000nnnnnddddd", "Z", "d", "n">(0, xd, xn);
}
void PACIB(XReg xd, XRegSp xn)
{
emit<"110110101100000100Z001nnnnnddddd", "Z", "d", "n">(0, xd, xn);
}
void PACIZA(XReg xd)
{
emit<"110110101100000100Z00011111ddddd", "Z", "d">(1, xd);
}
void PACIZB(XReg xd)
{
emit<"110110101100000100Z00111111ddddd", "Z", "d">(1, xd);
}
void RETAA()
{
emit<"110101100101111100001M1111111111", "M">(0);
}
void RETAB()
{
emit<"110101100101111100001M1111111111", "M">(1);
}
void XPACD(XReg xd)
{
emit<"110110101100000101000D11111nnnnn", "D", "n">(1, xd);
}
void XPACI(XReg xd)
{
emit<"110110101100000101000D11111nnnnn", "D", "n">(0, xd);
} }

View file

@ -111,6 +111,18 @@ T(0x9ac22a3f, ASRV(XZR, X17, X2))
// T(0xd50f78af, AT(SYS 7, C7, C8, 5, X15)) // T(0xd50f78af, AT(SYS 7, C7, C8, 5, X15))
// T(0xd50c79a4, AT(SYS 4, C7, C9, 5, X4)) // T(0xd50c79a4, AT(SYS 4, C7, C9, 5, X4))
// T(0xd5087926, AT(SYS 0, C7, C9, 1, X6)) // T(0xd5087926, AT(SYS 0, C7, C9, 1, X6))
T(0xdac11883, AUTDA(X3, X4))
T(0xdac11be5, AUTDA(X5, SP))
T(0xdac11c83, AUTDB(X3, X4))
T(0xdac11fe5, AUTDB(X5, SP))
T(0xdac13be5, AUTDZA(X5))
T(0xdac13fe5, AUTDZB(X5))
T(0xdac11083, AUTIA(X3, X4))
T(0xdac113e5, AUTIA(X5, SP))
T(0xdac11483, AUTIB(X3, X4))
T(0xdac117e5, AUTIB(X5, SP))
T(0xdac133e5, AUTIZA(X5))
T(0xdac137e5, AUTIZB(X5))
T(0x161e54bf, B(-126266628)) T(0x161e54bf, B(-126266628))
T(0x17a62057, B(-23559844)) T(0x17a62057, B(-23559844))
T(0x16345f90, B(-120488384)) T(0x16345f90, B(-120488384))
@ -140,9 +152,21 @@ T(0x95b27a60, BL(113895808))
T(0x956ab105, BL(95077396)) T(0x956ab105, BL(95077396))
T(0xd63f0160, BLR(X11)) T(0xd63f0160, BLR(X11))
T(0xd63f0220, BLR(X17)) T(0xd63f0220, BLR(X17))
T(0xd73f0822, BLRAA(X1, X2))
T(0xd73f087f, BLRAA(X3, SP))
T(0xd63f08bf, BLRAAZ(X5))
T(0xd73f0c22, BLRAB(X1, X2))
T(0xd73f0c7f, BLRAB(X3, SP))
T(0xd63f0cbf, BLRABZ(X5))
T(0xd61f0280, BR(X20)) T(0xd61f0280, BR(X20))
T(0xd61f0260, BR(X19)) T(0xd61f0260, BR(X19))
T(0xd61f0320, BR(X25)) T(0xd61f0320, BR(X25))
T(0xd71f0822, BRAA(X1, X2))
T(0xd71f087f, BRAA(X3, SP))
T(0xd61f08bf, BRAAZ(X5))
T(0xd71f0c22, BRAB(X1, X2))
T(0xd71f0c7f, BRAB(X3, SP))
T(0xd61f0cbf, BRABZ(X5))
T(0xd433f1c0, BRK(0x9f8e)) T(0xd433f1c0, BRK(0x9f8e))
T(0xd43f7820, BRK(0xfbc1)) T(0xd43f7820, BRK(0xfbc1))
T(0xd43127c0, BRK(0x893e)) T(0xd43127c0, BRK(0x893e))
@ -303,6 +327,8 @@ T(0xca1512ba, EOR(X26, X21, X21, LSL, 4))
T(0xcadca40f, EOR(X15, X0, X28, ROR, 41)) T(0xcadca40f, EOR(X15, X0, X28, ROR, 41))
T(0xca450f15, EOR(X21, X24, X5, LSR, 3)) T(0xca450f15, EOR(X21, X24, X5, LSR, 3))
T(0xd69f03e0, ERET()) T(0xd69f03e0, ERET())
T(0xd69f0bff, ERETAA())
T(0xd69f0fff, ERETAB())
T(0x138122a5, EXTR(W5, W21, W1, 8)) T(0x138122a5, EXTR(W5, W21, W1, 8))
T(0x13815c7e, EXTR(W30, W3, W1, 23)) T(0x13815c7e, EXTR(W30, W3, W1, 23))
T(0x138b0722, EXTR(W2, W25, W11, 1)) T(0x138b0722, EXTR(W2, W25, W11, 1))
@ -418,6 +444,26 @@ T(0xb861d9f7, LDR(W23, X15, W1, SXTW, 2))
T(0xb864f8fa, LDR(W26, X7, X4, SXTX, 2)) T(0xb864f8fa, LDR(W26, X7, X4, SXTX, 2))
T(0xf861da0c, LDR(X12, X16, W1, SXTW, 3)) T(0xf861da0c, LDR(X12, X16, W1, SXTW, 3))
T(0xf8687a2b, LDR(X11, X17, X8, LSL, 3)) T(0xf8687a2b, LDR(X11, X17, X8, LSL, 3))
T(0xf8200441, LDRAA(X1, X2))
T(0xf87ff483, LDRAA(X3, X4, -8))
T(0xf82014c5, LDRAA(X5, X6, 8))
T(0xf83ff507, LDRAA(X7, X8, 4088))
T(0xf8600528, LDRAA(X8, X9, -4096))
T(0xf82007e2, LDRAA(X2, SP))
T(0xf87067e4, LDRAA(X4, SP, -2000))
T(0xf8201c62, LDRAA(X2, X3, PRE_INDEXED, 8))
T(0xf87ffca4, LDRAA(X4, X5, PRE_INDEXED, -8))
T(0xf83fffe6, LDRAA(X6, SP, PRE_INDEXED, 4088))
T(0xf8a00441, LDRAB(X1, X2))
T(0xf8fff483, LDRAB(X3, X4, -8))
T(0xf8a014c5, LDRAB(X5, X6, 8))
T(0xf8bff507, LDRAB(X7, X8, 4088))
T(0xf8e00528, LDRAB(X8, X9, -4096))
T(0xf8a007e2, LDRAB(X2, SP))
T(0xf8f067e4, LDRAB(X4, SP, -2000))
T(0xf8a01c62, LDRAB(X2, X3, PRE_INDEXED, 8))
T(0xf8fffca4, LDRAB(X4, X5, PRE_INDEXED, -8))
T(0xf8bfffe6, LDRAB(X6, SP, PRE_INDEXED, 4088))
T(0x385a47e7, LDRB(W7, SP, POST_INDEXED, -92)) T(0x385a47e7, LDRB(W7, SP, POST_INDEXED, -92))
T(0x3843e560, LDRB(W0, X11, POST_INDEXED, 62)) T(0x3843e560, LDRB(W0, X11, POST_INDEXED, 62))
T(0x3845244b, LDRB(W11, X2, POST_INDEXED, 82)) T(0x3845244b, LDRB(W11, X2, POST_INDEXED, 82))
@ -726,6 +772,20 @@ T(0x2a556110, ORR(W16, W8, W21, LSR, 24))
T(0xaa977e5e, ORR(X30, X18, X23, ASR, 31)) T(0xaa977e5e, ORR(X30, X18, X23, ASR, 31))
T(0xaa949fd6, ORR(X22, X30, X20, ASR, 39)) T(0xaa949fd6, ORR(X22, X30, X20, ASR, 39))
T(0xaa918fd6, ORR(X22, X30, X17, ASR, 35)) T(0xaa918fd6, ORR(X22, X30, X17, ASR, 35))
T(0xdac10883, PACDA(X3, X4))
T(0xdac10be5, PACDA(X5, SP))
T(0xdac10c83, PACDB(X3, X4))
T(0xdac10fe5, PACDB(X5, SP))
T(0xdac12be5, PACDZA(X5))
T(0xdac12fe5, PACDZB(X5))
T(0x9ac33041, PACGA(X1, X2, X3))
T(0x9adf3041, PACGA(X1, X2, SP))
T(0xdac10083, PACIA(X3, X4))
T(0xdac103e5, PACIA(X5, SP))
T(0xdac10483, PACIB(X3, X4))
T(0xdac107e5, PACIB(X5, SP))
T(0xdac123e5, PACIZA(X5))
T(0xdac127e5, PACIZB(X5))
// T(0xf98f5696, PRFM(22, [X20, 7848])) // T(0xf98f5696, PRFM(22, [X20, 7848]))
// T(0xf9ae98c3, PRFM(PLDL2STRM, [X6, 23856])) // T(0xf9ae98c3, PRFM(PLDL2STRM, [X6, 23856]))
// T(0xf983faf6, PRFM(22, [X23, 2032])) // T(0xf983faf6, PRFM(22, [X23, 2032]))
@ -746,6 +806,8 @@ T(0xdac0003a, RBIT(X26, X1))
T(0xd65f0220, RET(X17)) T(0xd65f0220, RET(X17))
T(0xd65f0080, RET(X4)) T(0xd65f0080, RET(X4))
T(0xd65f0300, RET(X24)) T(0xd65f0300, RET(X24))
T(0xd65f0bff, RETAA())
T(0xd65f0fff, RETAB())
T(0x5ac00940, REV(W0, W10)) T(0x5ac00940, REV(W0, W10))
T(0x5ac00931, REV(W17, W9)) T(0x5ac00931, REV(W17, W9))
T(0x5ac00a6e, REV(W14, W19)) T(0x5ac00a6e, REV(W14, W19))
@ -1082,4 +1144,6 @@ T(0x53003de4, UXTH(W4, W15))
T(0x53003ce2, UXTH(W2, W7)) T(0x53003ce2, UXTH(W2, W7))
T(0xd503205f, WFE()) T(0xd503205f, WFE())
T(0xd503207f, WFI()) T(0xd503207f, WFI())
T(0xdac143e5, XPACI(X5))
T(0xdac147e5, XPACD(X5))
T(0xd503203f, YIELD()) T(0xd503203f, YIELD())