diff --git a/include/oaknut/impl/mnemonics_generic_v8.3.inc.hpp b/include/oaknut/impl/mnemonics_generic_v8.3.inc.hpp index e574c70..528d99e 100644 --- a/include/oaknut/impl/mnemonics_generic_v8.3.inc.hpp +++ b/include/oaknut/impl/mnemonics_generic_v8.3.inc.hpp @@ -1,6 +1,78 @@ // SPDX-FileCopyrightText: Copyright (c) 2023 merryhime // 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) { emit<"1011100010111111110000nnnnnttttt", "t", "n">(wt, xn); @@ -16,4 +88,72 @@ void LDAPRB(WReg wt, XRegSp xn) void LDAPRH(WReg wt, XRegSp 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); } \ No newline at end of file diff --git a/tests/general.cpp b/tests/general.cpp index 7e774c7..6b04fc8 100644 --- a/tests/general.cpp +++ b/tests/general.cpp @@ -111,6 +111,18 @@ T(0x9ac22a3f, ASRV(XZR, X17, X2)) // T(0xd50f78af, AT(SYS 7, C7, C8, 5, X15)) // T(0xd50c79a4, AT(SYS 4, C7, C9, 5, X4)) // 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(0x17a62057, B(-23559844)) T(0x16345f90, B(-120488384)) @@ -140,9 +152,21 @@ T(0x95b27a60, BL(113895808)) T(0x956ab105, BL(95077396)) T(0xd63f0160, BLR(X11)) 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(0xd61f0260, BR(X19)) 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(0xd43f7820, BRK(0xfbc1)) 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(0xca450f15, EOR(X21, X24, X5, LSR, 3)) T(0xd69f03e0, ERET()) +T(0xd69f0bff, ERETAA()) +T(0xd69f0fff, ERETAB()) T(0x138122a5, EXTR(W5, W21, W1, 8)) T(0x13815c7e, EXTR(W30, W3, W1, 23)) 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(0xf861da0c, LDR(X12, X16, W1, SXTW, 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(0x3843e560, LDRB(W0, X11, POST_INDEXED, 62)) 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(0xaa949fd6, ORR(X22, X30, X20, ASR, 39)) 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(0xf9ae98c3, PRFM(PLDL2STRM, [X6, 23856])) // T(0xf983faf6, PRFM(22, [X23, 2032])) @@ -746,6 +806,8 @@ T(0xdac0003a, RBIT(X26, X1)) T(0xd65f0220, RET(X17)) T(0xd65f0080, RET(X4)) T(0xd65f0300, RET(X24)) +T(0xd65f0bff, RETAA()) +T(0xd65f0fff, RETAB()) T(0x5ac00940, REV(W0, W10)) T(0x5ac00931, REV(W17, W9)) T(0x5ac00a6e, REV(W14, W19)) @@ -1082,4 +1144,6 @@ T(0x53003de4, UXTH(W4, W15)) T(0x53003ce2, UXTH(W2, W7)) T(0xd503205f, WFE()) T(0xd503207f, WFI()) +T(0xdac143e5, XPACI(X5)) +T(0xdac147e5, XPACD(X5)) T(0xd503203f, YIELD())