18058c831SPeter Maydell# AArch64 A64 allowed instruction decoding 28058c831SPeter Maydell# 38058c831SPeter Maydell# Copyright (c) 2023 Linaro, Ltd 48058c831SPeter Maydell# 58058c831SPeter Maydell# This library is free software; you can redistribute it and/or 68058c831SPeter Maydell# modify it under the terms of the GNU Lesser General Public 78058c831SPeter Maydell# License as published by the Free Software Foundation; either 88058c831SPeter Maydell# version 2.1 of the License, or (at your option) any later version. 98058c831SPeter Maydell# 108058c831SPeter Maydell# This library is distributed in the hope that it will be useful, 118058c831SPeter Maydell# but WITHOUT ANY WARRANTY; without even the implied warranty of 128058c831SPeter Maydell# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 138058c831SPeter Maydell# Lesser General Public License for more details. 148058c831SPeter Maydell# 158058c831SPeter Maydell# You should have received a copy of the GNU Lesser General Public 168058c831SPeter Maydell# License along with this library; if not, see <http://www.gnu.org/licenses/>. 178058c831SPeter Maydell 188058c831SPeter Maydell# 198058c831SPeter Maydell# This file is processed by scripts/decodetree.py 208058c831SPeter Maydell# 2145fda88eSRichard Henderson 22c0b5e394SPeter Maydell&r rn 2345fda88eSRichard Henderson&ri rd imm 243ce7b5eaSRichard Henderson&rri_sf rd rn imm sf 256201b2a4SPeter Maydell&i imm 2645fda88eSRichard Henderson 2745fda88eSRichard Henderson 2845fda88eSRichard Henderson### Data Processing - Immediate 2945fda88eSRichard Henderson 3045fda88eSRichard Henderson# PC-rel addressing 3145fda88eSRichard Henderson 3245fda88eSRichard Henderson%imm_pcrel 5:s19 29:2 3345fda88eSRichard Henderson@pcrel . .. ..... ................... rd:5 &ri imm=%imm_pcrel 3445fda88eSRichard Henderson 3545fda88eSRichard HendersonADR 0 .. 10000 ................... ..... @pcrel 3645fda88eSRichard HendersonADRP 1 .. 10000 ................... ..... @pcrel 373ce7b5eaSRichard Henderson 383ce7b5eaSRichard Henderson# Add/subtract (immediate) 393ce7b5eaSRichard Henderson 403ce7b5eaSRichard Henderson%imm12_sh12 10:12 !function=shl_12 413ce7b5eaSRichard Henderson@addsub_imm sf:1 .. ...... . imm:12 rn:5 rd:5 423ce7b5eaSRichard Henderson@addsub_imm12 sf:1 .. ...... . ............ rn:5 rd:5 imm=%imm12_sh12 433ce7b5eaSRichard Henderson 443ce7b5eaSRichard HendersonADD_i . 00 100010 0 ............ ..... ..... @addsub_imm 453ce7b5eaSRichard HendersonADD_i . 00 100010 1 ............ ..... ..... @addsub_imm12 463ce7b5eaSRichard HendersonADDS_i . 01 100010 0 ............ ..... ..... @addsub_imm 473ce7b5eaSRichard HendersonADDS_i . 01 100010 1 ............ ..... ..... @addsub_imm12 483ce7b5eaSRichard Henderson 493ce7b5eaSRichard HendersonSUB_i . 10 100010 0 ............ ..... ..... @addsub_imm 503ce7b5eaSRichard HendersonSUB_i . 10 100010 1 ............ ..... ..... @addsub_imm12 513ce7b5eaSRichard HendersonSUBS_i . 11 100010 0 ............ ..... ..... @addsub_imm 523ce7b5eaSRichard HendersonSUBS_i . 11 100010 1 ............ ..... ..... @addsub_imm12 5386002eccSRichard Henderson 5486002eccSRichard Henderson# Add/subtract (immediate with tags) 5586002eccSRichard Henderson 5686002eccSRichard Henderson&rri_tag rd rn uimm6 uimm4 5786002eccSRichard Henderson@addsub_imm_tag . .. ...... . uimm6:6 .. uimm4:4 rn:5 rd:5 &rri_tag 5886002eccSRichard Henderson 5986002eccSRichard HendersonADDG_i 1 00 100011 0 ...... 00 .... ..... ..... @addsub_imm_tag 6086002eccSRichard HendersonSUBG_i 1 10 100011 0 ...... 00 .... ..... ..... @addsub_imm_tag 618127f46aSRichard Henderson 628127f46aSRichard Henderson# Logical (immediate) 638127f46aSRichard Henderson 648127f46aSRichard Henderson&rri_log rd rn sf dbm 658127f46aSRichard Henderson@logic_imm_64 1 .. ...... dbm:13 rn:5 rd:5 &rri_log sf=1 668127f46aSRichard Henderson@logic_imm_32 0 .. ...... 0 dbm:12 rn:5 rd:5 &rri_log sf=0 678127f46aSRichard Henderson 688127f46aSRichard HendersonAND_i . 00 100100 . ...... ...... ..... ..... @logic_imm_64 698127f46aSRichard HendersonAND_i . 00 100100 . ...... ...... ..... ..... @logic_imm_32 708127f46aSRichard HendersonORR_i . 01 100100 . ...... ...... ..... ..... @logic_imm_64 718127f46aSRichard HendersonORR_i . 01 100100 . ...... ...... ..... ..... @logic_imm_32 728127f46aSRichard HendersonEOR_i . 10 100100 . ...... ...... ..... ..... @logic_imm_64 738127f46aSRichard HendersonEOR_i . 10 100100 . ...... ...... ..... ..... @logic_imm_32 748127f46aSRichard HendersonANDS_i . 11 100100 . ...... ...... ..... ..... @logic_imm_64 758127f46aSRichard HendersonANDS_i . 11 100100 . ...... ...... ..... ..... @logic_imm_32 76ee0daeb9SRichard Henderson 77ee0daeb9SRichard Henderson# Move wide (immediate) 78ee0daeb9SRichard Henderson 79ee0daeb9SRichard Henderson&movw rd sf imm hw 80ee0daeb9SRichard Henderson@movw_64 1 .. ...... hw:2 imm:16 rd:5 &movw sf=1 81ee0daeb9SRichard Henderson@movw_32 0 .. ...... 0 hw:1 imm:16 rd:5 &movw sf=0 82ee0daeb9SRichard Henderson 83ee0daeb9SRichard HendersonMOVN . 00 100101 .. ................ ..... @movw_64 84ee0daeb9SRichard HendersonMOVN . 00 100101 .. ................ ..... @movw_32 85ee0daeb9SRichard HendersonMOVZ . 10 100101 .. ................ ..... @movw_64 86ee0daeb9SRichard HendersonMOVZ . 10 100101 .. ................ ..... @movw_32 87ee0daeb9SRichard HendersonMOVK . 11 100101 .. ................ ..... @movw_64 88ee0daeb9SRichard HendersonMOVK . 11 100101 .. ................ ..... @movw_32 895e451ae6SRichard Henderson 905e451ae6SRichard Henderson# Bitfield 915e451ae6SRichard Henderson 925e451ae6SRichard Henderson&bitfield rd rn sf immr imms 935e451ae6SRichard Henderson@bitfield_64 1 .. ...... 1 immr:6 imms:6 rn:5 rd:5 &bitfield sf=1 945e451ae6SRichard Henderson@bitfield_32 0 .. ...... 0 0 immr:5 0 imms:5 rn:5 rd:5 &bitfield sf=0 955e451ae6SRichard Henderson 965e451ae6SRichard HendersonSBFM . 00 100110 . ...... ...... ..... ..... @bitfield_64 975e451ae6SRichard HendersonSBFM . 00 100110 . ...... ...... ..... ..... @bitfield_32 985e451ae6SRichard HendersonBFM . 01 100110 . ...... ...... ..... ..... @bitfield_64 995e451ae6SRichard HendersonBFM . 01 100110 . ...... ...... ..... ..... @bitfield_32 1005e451ae6SRichard HendersonUBFM . 10 100110 . ...... ...... ..... ..... @bitfield_64 1015e451ae6SRichard HendersonUBFM . 10 100110 . ...... ...... ..... ..... @bitfield_32 1024240fb61SPeter Maydell 1034240fb61SPeter Maydell# Extract 1044240fb61SPeter Maydell 1054240fb61SPeter Maydell&extract rd rn rm imm sf 1064240fb61SPeter Maydell 1074240fb61SPeter MaydellEXTR 1 00 100111 1 0 rm:5 imm:6 rn:5 rd:5 &extract sf=1 1084240fb61SPeter MaydellEXTR 0 00 100111 0 0 rm:5 0 imm:5 rn:5 rd:5 &extract sf=0 1096201b2a4SPeter Maydell 1106201b2a4SPeter Maydell# Branches 1116201b2a4SPeter Maydell 1126201b2a4SPeter Maydell%imm26 0:s26 !function=times_4 1136201b2a4SPeter Maydell@branch . ..... .......................... &i imm=%imm26 1146201b2a4SPeter Maydell 1156201b2a4SPeter MaydellB 0 00101 .......................... @branch 1166201b2a4SPeter MaydellBL 1 00101 .......................... @branch 117f8977d50SPeter Maydell 118f8977d50SPeter Maydell%imm19 5:s19 !function=times_4 119f8977d50SPeter Maydell&cbz rt imm sf nz 120f8977d50SPeter Maydell 121f8977d50SPeter MaydellCBZ sf:1 011010 nz:1 ................... rt:5 &cbz imm=%imm19 122e505828dSPeter Maydell 123e505828dSPeter Maydell%imm14 5:s14 !function=times_4 124e505828dSPeter Maydell%imm31_19 31:1 19:5 125e505828dSPeter Maydell&tbz rt imm nz bitpos 126e505828dSPeter Maydell 127e505828dSPeter MaydellTBZ . 011011 nz:1 ..... .............. rt:5 &tbz imm=%imm14 bitpos=%imm31_19 128484df362SPeter Maydell 129484df362SPeter MaydellB_cond 0101010 0 ................... 0 cond:4 imm=%imm19 130c0b5e394SPeter Maydell 131c0b5e394SPeter MaydellBR 1101011 0000 11111 000000 rn:5 00000 &r 132c0b5e394SPeter MaydellBLR 1101011 0001 11111 000000 rn:5 00000 &r 133c0b5e394SPeter MaydellRET 1101011 0010 11111 000000 rn:5 00000 &r 1340ebbe902SPeter Maydell 1350ebbe902SPeter Maydell&braz rn m 1360ebbe902SPeter MaydellBRAZ 1101011 0000 11111 00001 m:1 rn:5 11111 &braz # BRAAZ, BRABZ 1370ebbe902SPeter MaydellBLRAZ 1101011 0001 11111 00001 m:1 rn:5 11111 &braz # BLRAAZ, BLRABZ 1380ebbe902SPeter Maydell 1390ebbe902SPeter Maydell&reta m 1400ebbe902SPeter MaydellRETA 1101011 0010 11111 00001 m:1 11111 11111 &reta # RETAA, RETAB 141c990fde6SPeter Maydell 142c990fde6SPeter Maydell&bra rn rm m 143c990fde6SPeter MaydellBRA 1101011 1000 11111 00001 m:1 rn:5 rm:5 &bra # BRAA, BRAB 144c990fde6SPeter MaydellBLRA 1101011 1001 11111 00001 m:1 rn:5 rm:5 &bra # BLRAA, BLRAB 145442c9d68SPeter Maydell 146442c9d68SPeter MaydellERET 1101011 0100 11111 000000 11111 00000 147442c9d68SPeter MaydellERETA 1101011 0100 11111 00001 m:1 11111 11111 &reta # ERETAA, ERETAB 148442c9d68SPeter Maydell 149442c9d68SPeter Maydell# We don't need to decode DRPS because it always UNDEFs except when 150442c9d68SPeter Maydell# the processor is in halting debug state (which we don't implement). 151442c9d68SPeter Maydell# The pattern is listed here as documentation. 152442c9d68SPeter Maydell# DRPS 1101011 0101 11111 000000 11111 00000 1537fefc706SPeter Maydell 1547fefc706SPeter Maydell# Hint instruction group 1557fefc706SPeter Maydell{ 1567fefc706SPeter Maydell [ 1577fefc706SPeter Maydell YIELD 1101 0101 0000 0011 0010 0000 001 11111 1587fefc706SPeter Maydell WFE 1101 0101 0000 0011 0010 0000 010 11111 1597fefc706SPeter Maydell WFI 1101 0101 0000 0011 0010 0000 011 11111 1607fefc706SPeter Maydell # We implement WFE to never block, so our SEV/SEVL are NOPs 1617fefc706SPeter Maydell # SEV 1101 0101 0000 0011 0010 0000 100 11111 1627fefc706SPeter Maydell # SEVL 1101 0101 0000 0011 0010 0000 101 11111 1637fefc706SPeter Maydell # Our DGL is a NOP because we don't merge memory accesses anyway. 1647fefc706SPeter Maydell # DGL 1101 0101 0000 0011 0010 0000 110 11111 1657fefc706SPeter Maydell XPACLRI 1101 0101 0000 0011 0010 0000 111 11111 1667fefc706SPeter Maydell PACIA1716 1101 0101 0000 0011 0010 0001 000 11111 1677fefc706SPeter Maydell PACIB1716 1101 0101 0000 0011 0010 0001 010 11111 1687fefc706SPeter Maydell AUTIA1716 1101 0101 0000 0011 0010 0001 100 11111 1697fefc706SPeter Maydell AUTIB1716 1101 0101 0000 0011 0010 0001 110 11111 1707fefc706SPeter Maydell ESB 1101 0101 0000 0011 0010 0010 000 11111 1717fefc706SPeter Maydell PACIAZ 1101 0101 0000 0011 0010 0011 000 11111 1727fefc706SPeter Maydell PACIASP 1101 0101 0000 0011 0010 0011 001 11111 1737fefc706SPeter Maydell PACIBZ 1101 0101 0000 0011 0010 0011 010 11111 1747fefc706SPeter Maydell PACIBSP 1101 0101 0000 0011 0010 0011 011 11111 1757fefc706SPeter Maydell AUTIAZ 1101 0101 0000 0011 0010 0011 100 11111 1767fefc706SPeter Maydell AUTIASP 1101 0101 0000 0011 0010 0011 101 11111 1777fefc706SPeter Maydell AUTIBZ 1101 0101 0000 0011 0010 0011 110 11111 1787fefc706SPeter Maydell AUTIBSP 1101 0101 0000 0011 0010 0011 111 11111 1797fefc706SPeter Maydell ] 1807fefc706SPeter Maydell # The canonical NOP has CRm == op2 == 0, but all of the space 1817fefc706SPeter Maydell # that isn't specifically allocated to an instruction must NOP 1827fefc706SPeter Maydell NOP 1101 0101 0000 0011 0010 ---- --- 11111 1837fefc706SPeter Maydell} 184afcd5df5SPeter Maydell 185afcd5df5SPeter Maydell# Barriers 186afcd5df5SPeter Maydell 187afcd5df5SPeter MaydellCLREX 1101 0101 0000 0011 0011 ---- 010 11111 188afcd5df5SPeter MaydellDSB_DMB 1101 0101 0000 0011 0011 domain:2 types:2 10- 11111 189afcd5df5SPeter MaydellISB 1101 0101 0000 0011 0011 ---- 110 11111 190afcd5df5SPeter MaydellSB 1101 0101 0000 0011 0011 0000 111 11111 191d78b662fSPeter Maydell 192d78b662fSPeter Maydell# PSTATE 193d78b662fSPeter Maydell 194d78b662fSPeter MaydellCFINV 1101 0101 0000 0 000 0100 0000 000 11111 195d78b662fSPeter MaydellXAFLAG 1101 0101 0000 0 000 0100 0000 001 11111 196d78b662fSPeter MaydellAXFLAG 1101 0101 0000 0 000 0100 0000 010 11111 19745d063d1SPeter Maydell 19845d063d1SPeter Maydell# These are architecturally all "MSR (immediate)"; we decode the destination 19945d063d1SPeter Maydell# register too because there is no commonality in our implementation. 20045d063d1SPeter Maydell@msr_i .... .... .... . ... .... imm:4 ... ..... 20145d063d1SPeter MaydellMSR_i_UAO 1101 0101 0000 0 000 0100 .... 011 11111 @msr_i 20245d063d1SPeter MaydellMSR_i_PAN 1101 0101 0000 0 000 0100 .... 100 11111 @msr_i 20345d063d1SPeter MaydellMSR_i_SPSEL 1101 0101 0000 0 000 0100 .... 101 11111 @msr_i 20445d063d1SPeter MaydellMSR_i_SBSS 1101 0101 0000 0 011 0100 .... 001 11111 @msr_i 20545d063d1SPeter MaydellMSR_i_DIT 1101 0101 0000 0 011 0100 .... 010 11111 @msr_i 20645d063d1SPeter MaydellMSR_i_TCO 1101 0101 0000 0 011 0100 .... 100 11111 @msr_i 20745d063d1SPeter MaydellMSR_i_DAIFSET 1101 0101 0000 0 011 0100 .... 110 11111 @msr_i 20845d063d1SPeter MaydellMSR_i_DAIFCLEAR 1101 0101 0000 0 011 0100 .... 111 11111 @msr_i 20945d063d1SPeter MaydellMSR_i_SVCR 1101 0101 0000 0 011 0100 0 mask:2 imm:1 011 11111 2106e3c8049SPeter Maydell 2116e3c8049SPeter Maydell# MRS, MSR (register), SYS, SYSL. These are all essentially the 2126e3c8049SPeter Maydell# same instruction as far as QEMU is concerned. 2136e3c8049SPeter Maydell# NB: op0 is bits [20:19], but op0=0b00 is other insns, so we have 2146e3c8049SPeter Maydell# to hand-decode it. 2156e3c8049SPeter MaydellSYS 1101 0101 00 l:1 01 op1:3 crn:4 crm:4 op2:3 rt:5 op0=1 2166e3c8049SPeter MaydellSYS 1101 0101 00 l:1 10 op1:3 crn:4 crm:4 op2:3 rt:5 op0=2 2176e3c8049SPeter MaydellSYS 1101 0101 00 l:1 11 op1:3 crn:4 crm:4 op2:3 rt:5 op0=3 218a97d3c18SPeter Maydell 219a97d3c18SPeter Maydell# Exception generation 220a97d3c18SPeter Maydell 221a97d3c18SPeter Maydell@i16 .... .... ... imm:16 ... .. &i 222a97d3c18SPeter MaydellSVC 1101 0100 000 ................ 000 01 @i16 223a97d3c18SPeter MaydellHVC 1101 0100 000 ................ 000 10 @i16 224a97d3c18SPeter MaydellSMC 1101 0100 000 ................ 000 11 @i16 225a97d3c18SPeter MaydellBRK 1101 0100 001 ................ 000 00 @i16 226a97d3c18SPeter MaydellHLT 1101 0100 010 ................ 000 00 @i16 227a97d3c18SPeter Maydell# These insns always UNDEF unless in halting debug state, which 228a97d3c18SPeter Maydell# we don't implement. So we don't need to decode them. The patterns 229a97d3c18SPeter Maydell# are listed here as documentation. 230a97d3c18SPeter Maydell# DCPS1 1101 0100 101 ................ 000 01 @i16 231a97d3c18SPeter Maydell# DCPS2 1101 0100 101 ................ 000 10 @i16 232a97d3c18SPeter Maydell# DCPS3 1101 0100 101 ................ 000 11 @i16 23384693e67SPeter Maydell 23484693e67SPeter Maydell# Loads and stores 23584693e67SPeter Maydell 23684693e67SPeter Maydell&stxr rn rt rt2 rs sz lasr 23784693e67SPeter Maydell&stlr rn rt sz lasr 23884693e67SPeter Maydell@stxr sz:2 ...... ... rs:5 lasr:1 rt2:5 rn:5 rt:5 &stxr 23984693e67SPeter Maydell@stlr sz:2 ...... ... ..... lasr:1 ..... rn:5 rt:5 &stlr 240e8a149a3SPeter Maydell%imm1_30_p2 30:1 !function=plus_2 241e8a149a3SPeter Maydell@stxp .. ...... ... rs:5 lasr:1 rt2:5 rn:5 rt:5 &stxr sz=%imm1_30_p2 24284693e67SPeter MaydellSTXR .. 001000 000 ..... . ..... ..... ..... @stxr # inc STLXR 24384693e67SPeter MaydellLDXR .. 001000 010 ..... . ..... ..... ..... @stxr # inc LDAXR 24484693e67SPeter MaydellSTLR .. 001000 100 11111 . 11111 ..... ..... @stlr # inc STLLR 24584693e67SPeter MaydellLDAR .. 001000 110 11111 . 11111 ..... ..... @stlr # inc LDLAR 246e8a149a3SPeter Maydell 247e8a149a3SPeter MaydellSTXP 1 . 001000 001 ..... . ..... ..... ..... @stxp # inc STLXP 248e8a149a3SPeter MaydellLDXP 1 . 001000 011 ..... . ..... ..... ..... @stxp # inc LDAXP 249e8a149a3SPeter Maydell 250e8a149a3SPeter Maydell# CASP, CASPA, CASPAL, CASPL (we don't decode the bits that determine 251e8a149a3SPeter Maydell# acquire/release semantics because QEMU's cmpxchg always has those) 252e8a149a3SPeter MaydellCASP 0 . 001000 0 - 1 rs:5 - 11111 rn:5 rt:5 sz=%imm1_30_p2 253e8a149a3SPeter Maydell# CAS, CASA, CASAL, CASL 254e8a149a3SPeter MaydellCAS sz:2 001000 1 - 1 rs:5 - 11111 rn:5 rt:5 255a752c2f4SPeter Maydell 256a752c2f4SPeter Maydell&ldlit rt imm sz sign 257a752c2f4SPeter Maydell@ldlit .. ... . .. ................... rt:5 &ldlit imm=%imm19 258a752c2f4SPeter Maydell 259a752c2f4SPeter MaydellLD_lit 00 011 0 00 ................... ..... @ldlit sz=2 sign=0 260a752c2f4SPeter MaydellLD_lit 01 011 0 00 ................... ..... @ldlit sz=3 sign=0 261a752c2f4SPeter MaydellLD_lit 10 011 0 00 ................... ..... @ldlit sz=2 sign=1 262a752c2f4SPeter MaydellLD_lit_v 00 011 1 00 ................... ..... @ldlit sz=2 sign=0 263a752c2f4SPeter MaydellLD_lit_v 01 011 1 00 ................... ..... @ldlit sz=3 sign=0 264a752c2f4SPeter MaydellLD_lit_v 10 011 1 00 ................... ..... @ldlit sz=4 sign=0 265a752c2f4SPeter Maydell 266a752c2f4SPeter Maydell# PRFM 267a752c2f4SPeter MaydellNOP 11 011 0 00 ------------------- ----- 2688c212eb6SPeter Maydell 2698c212eb6SPeter Maydell&ldstpair rt2 rt rn imm sz sign w p 2708c212eb6SPeter Maydell@ldstpair .. ... . ... . imm:s7 rt2:5 rn:5 rt:5 &ldstpair 2718c212eb6SPeter Maydell 2728c212eb6SPeter Maydell# STNP, LDNP: Signed offset, non-temporal hint. We don't emulate caches 2738c212eb6SPeter Maydell# so we ignore hints about data access patterns, and handle these like 2748c212eb6SPeter Maydell# plain signed offset. 2758c212eb6SPeter MaydellSTP 00 101 0 000 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 2768c212eb6SPeter MaydellLDP 00 101 0 000 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 2778c212eb6SPeter MaydellSTP 10 101 0 000 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 2788c212eb6SPeter MaydellLDP 10 101 0 000 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 2798c212eb6SPeter MaydellSTP_v 00 101 1 000 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 2808c212eb6SPeter MaydellLDP_v 00 101 1 000 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 2818c212eb6SPeter MaydellSTP_v 01 101 1 000 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 2828c212eb6SPeter MaydellLDP_v 01 101 1 000 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 2838c212eb6SPeter MaydellSTP_v 10 101 1 000 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0 2848c212eb6SPeter MaydellLDP_v 10 101 1 000 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0 2858c212eb6SPeter Maydell 2868c212eb6SPeter Maydell# STP and LDP: post-indexed 2878c212eb6SPeter MaydellSTP 00 101 0 001 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1 2888c212eb6SPeter MaydellLDP 00 101 0 001 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1 2898c212eb6SPeter MaydellLDP 01 101 0 001 1 ....... ..... ..... ..... @ldstpair sz=2 sign=1 p=1 w=1 2908c212eb6SPeter MaydellSTP 10 101 0 001 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1 2918c212eb6SPeter MaydellLDP 10 101 0 001 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1 2928c212eb6SPeter MaydellSTP_v 00 101 1 001 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1 2938c212eb6SPeter MaydellLDP_v 00 101 1 001 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1 2948c212eb6SPeter MaydellSTP_v 01 101 1 001 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1 2958c212eb6SPeter MaydellLDP_v 01 101 1 001 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1 2968c212eb6SPeter MaydellSTP_v 10 101 1 001 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=1 w=1 2978c212eb6SPeter MaydellLDP_v 10 101 1 001 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=1 w=1 2988c212eb6SPeter Maydell 2998c212eb6SPeter Maydell# STP and LDP: offset 3008c212eb6SPeter MaydellSTP 00 101 0 010 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 3018c212eb6SPeter MaydellLDP 00 101 0 010 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 3028c212eb6SPeter MaydellLDP 01 101 0 010 1 ....... ..... ..... ..... @ldstpair sz=2 sign=1 p=0 w=0 3038c212eb6SPeter MaydellSTP 10 101 0 010 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 3048c212eb6SPeter MaydellLDP 10 101 0 010 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 3058c212eb6SPeter MaydellSTP_v 00 101 1 010 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 3068c212eb6SPeter MaydellLDP_v 00 101 1 010 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 3078c212eb6SPeter MaydellSTP_v 01 101 1 010 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 3088c212eb6SPeter MaydellLDP_v 01 101 1 010 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 3098c212eb6SPeter MaydellSTP_v 10 101 1 010 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0 3108c212eb6SPeter MaydellLDP_v 10 101 1 010 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0 3118c212eb6SPeter Maydell 3128c212eb6SPeter Maydell# STP and LDP: pre-indexed 3138c212eb6SPeter MaydellSTP 00 101 0 011 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1 3148c212eb6SPeter MaydellLDP 00 101 0 011 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1 3158c212eb6SPeter MaydellLDP 01 101 0 011 1 ....... ..... ..... ..... @ldstpair sz=2 sign=1 p=0 w=1 3168c212eb6SPeter MaydellSTP 10 101 0 011 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1 3178c212eb6SPeter MaydellLDP 10 101 0 011 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1 3188c212eb6SPeter MaydellSTP_v 00 101 1 011 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1 3198c212eb6SPeter MaydellLDP_v 00 101 1 011 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1 3208c212eb6SPeter MaydellSTP_v 01 101 1 011 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1 3218c212eb6SPeter MaydellLDP_v 01 101 1 011 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1 3228c212eb6SPeter MaydellSTP_v 10 101 1 011 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=1 3238c212eb6SPeter MaydellLDP_v 10 101 1 011 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=1 3248c212eb6SPeter Maydell 3258c212eb6SPeter Maydell# STGP: store tag and pair 3268c212eb6SPeter MaydellSTGP 01 101 0 001 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1 3278c212eb6SPeter MaydellSTGP 01 101 0 010 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 3288c212eb6SPeter MaydellSTGP 01 101 0 011 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1 32960cd7ba9SPeter Maydell 33060cd7ba9SPeter Maydell# Load/store register (unscaled immediate) 33160cd7ba9SPeter Maydell&ldst_imm rt rn imm sz sign w p unpriv ext 33260cd7ba9SPeter Maydell@ldst_imm .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=0 p=0 w=0 33360cd7ba9SPeter Maydell@ldst_imm_pre .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=0 p=0 w=1 33460cd7ba9SPeter Maydell@ldst_imm_post .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=0 p=1 w=1 33560cd7ba9SPeter Maydell@ldst_imm_user .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=1 p=0 w=0 33660cd7ba9SPeter Maydell 33760cd7ba9SPeter MaydellSTR_i sz:2 111 0 00 00 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 33860cd7ba9SPeter MaydellLDR_i 00 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=1 sz=0 33960cd7ba9SPeter MaydellLDR_i 01 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=1 sz=1 34060cd7ba9SPeter MaydellLDR_i 10 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=1 sz=2 34160cd7ba9SPeter MaydellLDR_i 11 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 sz=3 34260cd7ba9SPeter MaydellLDR_i 00 111 0 00 10 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=0 sz=0 34360cd7ba9SPeter MaydellLDR_i 01 111 0 00 10 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=0 sz=1 34460cd7ba9SPeter MaydellLDR_i 10 111 0 00 10 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=0 sz=2 34560cd7ba9SPeter MaydellLDR_i 00 111 0 00 11 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=1 sz=0 34660cd7ba9SPeter MaydellLDR_i 01 111 0 00 11 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=1 sz=1 34760cd7ba9SPeter Maydell 34860cd7ba9SPeter MaydellSTR_i sz:2 111 0 00 00 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 34960cd7ba9SPeter MaydellLDR_i 00 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=1 sz=0 35060cd7ba9SPeter MaydellLDR_i 01 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=1 sz=1 35160cd7ba9SPeter MaydellLDR_i 10 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=1 sz=2 35260cd7ba9SPeter MaydellLDR_i 11 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 sz=3 35360cd7ba9SPeter MaydellLDR_i 00 111 0 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=0 sz=0 35460cd7ba9SPeter MaydellLDR_i 01 111 0 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=0 sz=1 35560cd7ba9SPeter MaydellLDR_i 10 111 0 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=0 sz=2 35660cd7ba9SPeter MaydellLDR_i 00 111 0 00 11 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=1 sz=0 35760cd7ba9SPeter MaydellLDR_i 01 111 0 00 11 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=1 sz=1 35860cd7ba9SPeter Maydell 35960cd7ba9SPeter MaydellSTR_i sz:2 111 0 00 00 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=0 36060cd7ba9SPeter MaydellLDR_i 00 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=1 sz=0 36160cd7ba9SPeter MaydellLDR_i 01 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=1 sz=1 36260cd7ba9SPeter MaydellLDR_i 10 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=1 sz=2 36360cd7ba9SPeter MaydellLDR_i 11 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=0 sz=3 36460cd7ba9SPeter MaydellLDR_i 00 111 0 00 10 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=0 sz=0 36560cd7ba9SPeter MaydellLDR_i 01 111 0 00 10 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=0 sz=1 36660cd7ba9SPeter MaydellLDR_i 10 111 0 00 10 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=0 sz=2 36760cd7ba9SPeter MaydellLDR_i 00 111 0 00 11 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=1 sz=0 36860cd7ba9SPeter MaydellLDR_i 01 111 0 00 11 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=1 sz=1 36960cd7ba9SPeter Maydell 37060cd7ba9SPeter MaydellSTR_i sz:2 111 0 00 00 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 37160cd7ba9SPeter MaydellLDR_i 00 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=1 sz=0 37260cd7ba9SPeter MaydellLDR_i 01 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=1 sz=1 37360cd7ba9SPeter MaydellLDR_i 10 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=1 sz=2 37460cd7ba9SPeter MaydellLDR_i 11 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 sz=3 37560cd7ba9SPeter MaydellLDR_i 00 111 0 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=0 sz=0 37660cd7ba9SPeter MaydellLDR_i 01 111 0 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=0 sz=1 37760cd7ba9SPeter MaydellLDR_i 10 111 0 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=0 sz=2 37860cd7ba9SPeter MaydellLDR_i 00 111 0 00 11 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=1 sz=0 37960cd7ba9SPeter MaydellLDR_i 01 111 0 00 11 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=1 sz=1 38060cd7ba9SPeter Maydell 38160cd7ba9SPeter Maydell# PRFM : prefetch memory: a no-op for QEMU 38260cd7ba9SPeter MaydellNOP 11 111 0 00 10 0 --------- 00 ----- ----- 38360cd7ba9SPeter Maydell 38460cd7ba9SPeter MaydellSTR_v_i sz:2 111 1 00 00 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 38560cd7ba9SPeter MaydellSTR_v_i 00 111 1 00 10 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 sz=4 38660cd7ba9SPeter MaydellLDR_v_i sz:2 111 1 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 38760cd7ba9SPeter MaydellLDR_v_i 00 111 1 00 11 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 sz=4 38860cd7ba9SPeter Maydell 38960cd7ba9SPeter MaydellSTR_v_i sz:2 111 1 00 00 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 39060cd7ba9SPeter MaydellSTR_v_i 00 111 1 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 sz=4 39160cd7ba9SPeter MaydellLDR_v_i sz:2 111 1 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 39260cd7ba9SPeter MaydellLDR_v_i 00 111 1 00 11 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 sz=4 39360cd7ba9SPeter Maydell 39460cd7ba9SPeter MaydellSTR_v_i sz:2 111 1 00 00 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 39560cd7ba9SPeter MaydellSTR_v_i 00 111 1 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 sz=4 39660cd7ba9SPeter MaydellLDR_v_i sz:2 111 1 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 39760cd7ba9SPeter MaydellLDR_v_i 00 111 1 00 11 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 sz=4 39861edd8f8SPeter Maydell 39961edd8f8SPeter Maydell# Load/store with an unsigned 12 bit immediate, which is scaled by the 40061edd8f8SPeter Maydell# element size. The function gets the sz:imm and returns the scaled immediate. 40161edd8f8SPeter Maydell%uimm_scaled 10:12 sz:3 !function=uimm_scaled 40261edd8f8SPeter Maydell 40361edd8f8SPeter Maydell@ldst_uimm .. ... . .. .. ............ rn:5 rt:5 &ldst_imm unpriv=0 p=0 w=0 imm=%uimm_scaled 40461edd8f8SPeter Maydell 40561edd8f8SPeter MaydellSTR_i sz:2 111 0 01 00 ............ ..... ..... @ldst_uimm sign=0 ext=0 40661edd8f8SPeter MaydellLDR_i 00 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=1 sz=0 40761edd8f8SPeter MaydellLDR_i 01 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=1 sz=1 40861edd8f8SPeter MaydellLDR_i 10 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=1 sz=2 40961edd8f8SPeter MaydellLDR_i 11 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=0 sz=3 41061edd8f8SPeter MaydellLDR_i 00 111 0 01 10 ............ ..... ..... @ldst_uimm sign=1 ext=0 sz=0 41161edd8f8SPeter MaydellLDR_i 01 111 0 01 10 ............ ..... ..... @ldst_uimm sign=1 ext=0 sz=1 41261edd8f8SPeter MaydellLDR_i 10 111 0 01 10 ............ ..... ..... @ldst_uimm sign=1 ext=0 sz=2 41361edd8f8SPeter MaydellLDR_i 00 111 0 01 11 ............ ..... ..... @ldst_uimm sign=1 ext=1 sz=0 41461edd8f8SPeter MaydellLDR_i 01 111 0 01 11 ............ ..... ..... @ldst_uimm sign=1 ext=1 sz=1 41561edd8f8SPeter Maydell 41661edd8f8SPeter Maydell# PRFM 41761edd8f8SPeter MaydellNOP 11 111 0 01 10 ------------ ----- ----- 41861edd8f8SPeter Maydell 41961edd8f8SPeter MaydellSTR_v_i sz:2 111 1 01 00 ............ ..... ..... @ldst_uimm sign=0 ext=0 42061edd8f8SPeter MaydellSTR_v_i 00 111 1 01 10 ............ ..... ..... @ldst_uimm sign=0 ext=0 sz=4 42161edd8f8SPeter MaydellLDR_v_i sz:2 111 1 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=0 42261edd8f8SPeter MaydellLDR_v_i 00 111 1 01 11 ............ ..... ..... @ldst_uimm sign=0 ext=0 sz=4 423f36bf0c1SPeter Maydell 424f36bf0c1SPeter Maydell# Load/store with register offset 425f36bf0c1SPeter Maydell&ldst rm rn rt sign ext sz opt s 426f36bf0c1SPeter Maydell@ldst .. ... . .. .. . rm:5 opt:3 s:1 .. rn:5 rt:5 &ldst 427f36bf0c1SPeter MaydellSTR sz:2 111 0 00 00 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 428f36bf0c1SPeter MaydellLDR 00 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=1 sz=0 429f36bf0c1SPeter MaydellLDR 01 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=1 sz=1 430f36bf0c1SPeter MaydellLDR 10 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=1 sz=2 431f36bf0c1SPeter MaydellLDR 11 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 sz=3 432f36bf0c1SPeter MaydellLDR 00 111 0 00 10 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=0 sz=0 433f36bf0c1SPeter MaydellLDR 01 111 0 00 10 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=0 sz=1 434f36bf0c1SPeter MaydellLDR 10 111 0 00 10 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=0 sz=2 435f36bf0c1SPeter MaydellLDR 00 111 0 00 11 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=1 sz=0 436f36bf0c1SPeter MaydellLDR 01 111 0 00 11 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=1 sz=1 437f36bf0c1SPeter Maydell 438f36bf0c1SPeter Maydell# PRFM 439f36bf0c1SPeter MaydellNOP 11 111 0 00 10 1 ----- -1- - 10 ----- ----- 440f36bf0c1SPeter Maydell 441f36bf0c1SPeter MaydellSTR_v sz:2 111 1 00 00 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 442f36bf0c1SPeter MaydellSTR_v 00 111 1 00 10 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 sz=4 443f36bf0c1SPeter MaydellLDR_v sz:2 111 1 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 444f36bf0c1SPeter MaydellLDR_v 00 111 1 00 11 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 sz=4 44554a9ab74SPeter Maydell 44654a9ab74SPeter Maydell# Atomic memory operations 44754a9ab74SPeter Maydell&atomic rs rn rt a r sz 44854a9ab74SPeter Maydell@atomic sz:2 ... . .. a:1 r:1 . rs:5 . ... .. rn:5 rt:5 &atomic 44954a9ab74SPeter MaydellLDADD .. 111 0 00 . . 1 ..... 0000 00 ..... ..... @atomic 45054a9ab74SPeter MaydellLDCLR .. 111 0 00 . . 1 ..... 0001 00 ..... ..... @atomic 45154a9ab74SPeter MaydellLDEOR .. 111 0 00 . . 1 ..... 0010 00 ..... ..... @atomic 45254a9ab74SPeter MaydellLDSET .. 111 0 00 . . 1 ..... 0011 00 ..... ..... @atomic 45354a9ab74SPeter MaydellLDSMAX .. 111 0 00 . . 1 ..... 0100 00 ..... ..... @atomic 45454a9ab74SPeter MaydellLDSMIN .. 111 0 00 . . 1 ..... 0101 00 ..... ..... @atomic 45554a9ab74SPeter MaydellLDUMAX .. 111 0 00 . . 1 ..... 0110 00 ..... ..... @atomic 45654a9ab74SPeter MaydellLDUMIN .. 111 0 00 . . 1 ..... 0111 00 ..... ..... @atomic 45754a9ab74SPeter MaydellSWP .. 111 0 00 . . 1 ..... 1000 00 ..... ..... @atomic 45854a9ab74SPeter Maydell 45954a9ab74SPeter MaydellLDAPR sz:2 111 0 00 1 0 1 11111 1100 00 rn:5 rt:5 460be23a049SPeter Maydell 461be23a049SPeter Maydell# Load/store register (pointer authentication) 462be23a049SPeter Maydell 463be23a049SPeter Maydell# LDRA immediate is 10 bits signed and scaled, but the bits aren't all contiguous 464be23a049SPeter Maydell%ldra_imm 22:s1 12:9 !function=times_2 465be23a049SPeter Maydell 466be23a049SPeter MaydellLDRA 11 111 0 00 m:1 . 1 ......... w:1 1 rn:5 rt:5 imm=%ldra_imm 4672521b607SPeter Maydell 4682521b607SPeter Maydell&ldapr_stlr_i rn rt imm sz sign ext 4692521b607SPeter Maydell@ldapr_stlr_i .. ...... .. . imm:9 .. rn:5 rt:5 &ldapr_stlr_i 4702521b607SPeter MaydellSTLR_i sz:2 011001 00 0 ......... 00 ..... ..... @ldapr_stlr_i sign=0 ext=0 4712521b607SPeter MaydellLDAPR_i sz:2 011001 01 0 ......... 00 ..... ..... @ldapr_stlr_i sign=0 ext=0 4722521b607SPeter MaydellLDAPR_i 00 011001 10 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=0 sz=0 4732521b607SPeter MaydellLDAPR_i 01 011001 10 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=0 sz=1 4742521b607SPeter MaydellLDAPR_i 10 011001 10 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=0 sz=2 4752521b607SPeter MaydellLDAPR_i 00 011001 11 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=1 sz=0 4762521b607SPeter MaydellLDAPR_i 01 011001 11 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=1 sz=1 477e25ba1faSPeter Maydell 478e25ba1faSPeter Maydell# Load/store multiple structures 479e25ba1faSPeter Maydell# The 4-bit opcode in [15:12] encodes repeat count and structure elements 480e25ba1faSPeter Maydell&ldst_mult rm rn rt sz q p rpt selem 481e25ba1faSPeter Maydell@ldst_mult . q:1 ...... p:1 . . rm:5 .... sz:2 rn:5 rt:5 &ldst_mult 482e25ba1faSPeter MaydellST_mult 0 . 001100 . 0 0 ..... 0000 .. ..... ..... @ldst_mult rpt=1 selem=4 483e25ba1faSPeter MaydellST_mult 0 . 001100 . 0 0 ..... 0010 .. ..... ..... @ldst_mult rpt=4 selem=1 484e25ba1faSPeter MaydellST_mult 0 . 001100 . 0 0 ..... 0100 .. ..... ..... @ldst_mult rpt=1 selem=3 485e25ba1faSPeter MaydellST_mult 0 . 001100 . 0 0 ..... 0110 .. ..... ..... @ldst_mult rpt=3 selem=1 486e25ba1faSPeter MaydellST_mult 0 . 001100 . 0 0 ..... 0111 .. ..... ..... @ldst_mult rpt=1 selem=1 487e25ba1faSPeter MaydellST_mult 0 . 001100 . 0 0 ..... 1000 .. ..... ..... @ldst_mult rpt=1 selem=2 488e25ba1faSPeter MaydellST_mult 0 . 001100 . 0 0 ..... 1010 .. ..... ..... @ldst_mult rpt=2 selem=1 489e25ba1faSPeter Maydell 490e25ba1faSPeter MaydellLD_mult 0 . 001100 . 1 0 ..... 0000 .. ..... ..... @ldst_mult rpt=1 selem=4 491e25ba1faSPeter MaydellLD_mult 0 . 001100 . 1 0 ..... 0010 .. ..... ..... @ldst_mult rpt=4 selem=1 492e25ba1faSPeter MaydellLD_mult 0 . 001100 . 1 0 ..... 0100 .. ..... ..... @ldst_mult rpt=1 selem=3 493e25ba1faSPeter MaydellLD_mult 0 . 001100 . 1 0 ..... 0110 .. ..... ..... @ldst_mult rpt=3 selem=1 494e25ba1faSPeter MaydellLD_mult 0 . 001100 . 1 0 ..... 0111 .. ..... ..... @ldst_mult rpt=1 selem=1 495e25ba1faSPeter MaydellLD_mult 0 . 001100 . 1 0 ..... 1000 .. ..... ..... @ldst_mult rpt=1 selem=2 496e25ba1faSPeter MaydellLD_mult 0 . 001100 . 1 0 ..... 1010 .. ..... ..... @ldst_mult rpt=2 selem=1 497*3d507213SPeter Maydell 498*3d507213SPeter Maydell# Load/store single structure 499*3d507213SPeter Maydell&ldst_single rm rn rt p selem index scale 500*3d507213SPeter Maydell 501*3d507213SPeter Maydell%ldst_single_selem 13:1 21:1 !function=plus_1 502*3d507213SPeter Maydell 503*3d507213SPeter Maydell%ldst_single_index_b 30:1 10:3 504*3d507213SPeter Maydell%ldst_single_index_h 30:1 11:2 505*3d507213SPeter Maydell%ldst_single_index_s 30:1 12:1 506*3d507213SPeter Maydell 507*3d507213SPeter Maydell@ldst_single_b .. ...... p:1 .. rm:5 ...... rn:5 rt:5 \ 508*3d507213SPeter Maydell &ldst_single scale=0 selem=%ldst_single_selem \ 509*3d507213SPeter Maydell index=%ldst_single_index_b 510*3d507213SPeter Maydell@ldst_single_h .. ...... p:1 .. rm:5 ...... rn:5 rt:5 \ 511*3d507213SPeter Maydell &ldst_single scale=1 selem=%ldst_single_selem \ 512*3d507213SPeter Maydell index=%ldst_single_index_h 513*3d507213SPeter Maydell@ldst_single_s .. ...... p:1 .. rm:5 ...... rn:5 rt:5 \ 514*3d507213SPeter Maydell &ldst_single scale=2 selem=%ldst_single_selem \ 515*3d507213SPeter Maydell index=%ldst_single_index_s 516*3d507213SPeter Maydell@ldst_single_d . index:1 ...... p:1 .. rm:5 ...... rn:5 rt:5 \ 517*3d507213SPeter Maydell &ldst_single scale=3 selem=%ldst_single_selem 518*3d507213SPeter Maydell 519*3d507213SPeter MaydellST_single 0 . 001101 . 0 . ..... 00 . ... ..... ..... @ldst_single_b 520*3d507213SPeter MaydellST_single 0 . 001101 . 0 . ..... 01 . ..0 ..... ..... @ldst_single_h 521*3d507213SPeter MaydellST_single 0 . 001101 . 0 . ..... 10 . .00 ..... ..... @ldst_single_s 522*3d507213SPeter MaydellST_single 0 . 001101 . 0 . ..... 10 . 001 ..... ..... @ldst_single_d 523*3d507213SPeter Maydell 524*3d507213SPeter MaydellLD_single 0 . 001101 . 1 . ..... 00 . ... ..... ..... @ldst_single_b 525*3d507213SPeter MaydellLD_single 0 . 001101 . 1 . ..... 01 . ..0 ..... ..... @ldst_single_h 526*3d507213SPeter MaydellLD_single 0 . 001101 . 1 . ..... 10 . .00 ..... ..... @ldst_single_s 527*3d507213SPeter MaydellLD_single 0 . 001101 . 1 . ..... 10 . 001 ..... ..... @ldst_single_d 528*3d507213SPeter Maydell 529*3d507213SPeter Maydell# Replicating load case 530*3d507213SPeter MaydellLD_single_repl 0 q:1 001101 p:1 1 . rm:5 11 . 0 scale:2 rn:5 rt:5 selem=%ldst_single_selem 531