1# AArch64 A64 allowed instruction decoding 2# 3# Copyright (c) 2023 Linaro, Ltd 4# 5# This library is free software; you can redistribute it and/or 6# modify it under the terms of the GNU Lesser General Public 7# License as published by the Free Software Foundation; either 8# version 2.1 of the License, or (at your option) any later version. 9# 10# This library is distributed in the hope that it will be useful, 11# but WITHOUT ANY WARRANTY; without even the implied warranty of 12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13# Lesser General Public License for more details. 14# 15# You should have received a copy of the GNU Lesser General Public 16# License along with this library; if not, see <http://www.gnu.org/licenses/>. 17 18# 19# This file is processed by scripts/decodetree.py 20# 21 22%rd 0:5 23%esz_sd 22:1 !function=plus_2 24%esz_hsd 22:2 !function=xor_2 25%hl 11:1 21:1 26%hlm 11:1 20:2 27 28&r rn 29&ri rd imm 30&rri_sf rd rn imm sf 31&i imm 32&rr_e rd rn esz 33&rri_e rd rn imm esz 34&rrr_e rd rn rm esz 35&rrx_e rd rn rm idx esz 36&rrrr_e rd rn rm ra esz 37&qrr_e q rd rn esz 38&qrri_e q rd rn imm esz 39&qrrr_e q rd rn rm esz 40&qrrx_e q rd rn rm idx esz 41&qrrrr_e q rd rn rm ra esz 42 43@rr_h ........ ... ..... ...... rn:5 rd:5 &rr_e esz=1 44@rr_d ........ ... ..... ...... rn:5 rd:5 &rr_e esz=3 45@rr_sd ........ ... ..... ...... rn:5 rd:5 &rr_e esz=%esz_sd 46 47@rrr_h ........ ... rm:5 ...... rn:5 rd:5 &rrr_e esz=1 48@rrr_d ........ ... rm:5 ...... rn:5 rd:5 &rrr_e esz=3 49@rrr_sd ........ ... rm:5 ...... rn:5 rd:5 &rrr_e esz=%esz_sd 50@rrr_hsd ........ ... rm:5 ...... rn:5 rd:5 &rrr_e esz=%esz_hsd 51@rrr_e ........ esz:2 . rm:5 ...... rn:5 rd:5 &rrr_e 52@r2r_e ........ esz:2 . ..... ...... rm:5 rd:5 &rrr_e rn=%rd 53 54@rrx_h ........ .. .. rm:4 .... . . rn:5 rd:5 &rrx_e esz=1 idx=%hlm 55@rrx_s ........ .. . rm:5 .... . . rn:5 rd:5 &rrx_e esz=2 idx=%hl 56@rrx_d ........ .. . rm:5 .... idx:1 . rn:5 rd:5 &rrx_e esz=3 57 58@rr_q1e0 ........ ........ ...... rn:5 rd:5 &qrr_e q=1 esz=0 59@rr_q1e2 ........ ........ ...... rn:5 rd:5 &qrr_e q=1 esz=2 60@r2r_q1e0 ........ ........ ...... rm:5 rd:5 &qrrr_e rn=%rd q=1 esz=0 61@rrr_q1e0 ........ ... rm:5 ...... rn:5 rd:5 &qrrr_e q=1 esz=0 62@rrr_q1e3 ........ ... rm:5 ...... rn:5 rd:5 &qrrr_e q=1 esz=3 63@rrrr_q1e3 ........ ... rm:5 . ra:5 rn:5 rd:5 &qrrrr_e q=1 esz=3 64 65@qrr_h . q:1 ...... .. ...... ...... rn:5 rd:5 &qrr_e esz=1 66@qrr_e . q:1 ...... esz:2 ...... ...... rn:5 rd:5 &qrr_e 67 68@qrrr_b . q:1 ...... ... rm:5 ...... rn:5 rd:5 &qrrr_e esz=0 69@qrrr_h . q:1 ...... ... rm:5 ...... rn:5 rd:5 &qrrr_e esz=1 70@qrrr_s . q:1 ...... ... rm:5 ...... rn:5 rd:5 &qrrr_e esz=2 71@qrrr_sd . q:1 ...... ... rm:5 ...... rn:5 rd:5 &qrrr_e esz=%esz_sd 72@qrrr_e . q:1 ...... esz:2 . rm:5 ...... rn:5 rd:5 &qrrr_e 73@qr2r_e . q:1 ...... esz:2 . ..... ...... rm:5 rd:5 &qrrr_e rn=%rd 74 75@qrrx_h . q:1 .. .... .. .. rm:4 .... . . rn:5 rd:5 \ 76 &qrrx_e esz=1 idx=%hlm 77@qrrx_s . q:1 .. .... .. . rm:5 .... . . rn:5 rd:5 \ 78 &qrrx_e esz=2 idx=%hl 79@qrrx_d . q:1 .. .... .. . rm:5 .... idx:1 . rn:5 rd:5 \ 80 &qrrx_e esz=3 81 82### Data Processing - Immediate 83 84# PC-rel addressing 85 86%imm_pcrel 5:s19 29:2 87@pcrel . .. ..... ................... rd:5 &ri imm=%imm_pcrel 88 89ADR 0 .. 10000 ................... ..... @pcrel 90ADRP 1 .. 10000 ................... ..... @pcrel 91 92# Add/subtract (immediate) 93 94%imm12_sh12 10:12 !function=shl_12 95@addsub_imm sf:1 .. ...... . imm:12 rn:5 rd:5 96@addsub_imm12 sf:1 .. ...... . ............ rn:5 rd:5 imm=%imm12_sh12 97 98ADD_i . 00 100010 0 ............ ..... ..... @addsub_imm 99ADD_i . 00 100010 1 ............ ..... ..... @addsub_imm12 100ADDS_i . 01 100010 0 ............ ..... ..... @addsub_imm 101ADDS_i . 01 100010 1 ............ ..... ..... @addsub_imm12 102 103SUB_i . 10 100010 0 ............ ..... ..... @addsub_imm 104SUB_i . 10 100010 1 ............ ..... ..... @addsub_imm12 105SUBS_i . 11 100010 0 ............ ..... ..... @addsub_imm 106SUBS_i . 11 100010 1 ............ ..... ..... @addsub_imm12 107 108# Add/subtract (immediate with tags) 109 110&rri_tag rd rn uimm6 uimm4 111@addsub_imm_tag . .. ...... . uimm6:6 .. uimm4:4 rn:5 rd:5 &rri_tag 112 113ADDG_i 1 00 100011 0 ...... 00 .... ..... ..... @addsub_imm_tag 114SUBG_i 1 10 100011 0 ...... 00 .... ..... ..... @addsub_imm_tag 115 116# Logical (immediate) 117 118&rri_log rd rn sf dbm 119@logic_imm_64 1 .. ...... dbm:13 rn:5 rd:5 &rri_log sf=1 120@logic_imm_32 0 .. ...... 0 dbm:12 rn:5 rd:5 &rri_log sf=0 121 122AND_i . 00 100100 . ...... ...... ..... ..... @logic_imm_64 123AND_i . 00 100100 . ...... ...... ..... ..... @logic_imm_32 124ORR_i . 01 100100 . ...... ...... ..... ..... @logic_imm_64 125ORR_i . 01 100100 . ...... ...... ..... ..... @logic_imm_32 126EOR_i . 10 100100 . ...... ...... ..... ..... @logic_imm_64 127EOR_i . 10 100100 . ...... ...... ..... ..... @logic_imm_32 128ANDS_i . 11 100100 . ...... ...... ..... ..... @logic_imm_64 129ANDS_i . 11 100100 . ...... ...... ..... ..... @logic_imm_32 130 131# Move wide (immediate) 132 133&movw rd sf imm hw 134@movw_64 1 .. ...... hw:2 imm:16 rd:5 &movw sf=1 135@movw_32 0 .. ...... 0 hw:1 imm:16 rd:5 &movw sf=0 136 137MOVN . 00 100101 .. ................ ..... @movw_64 138MOVN . 00 100101 .. ................ ..... @movw_32 139MOVZ . 10 100101 .. ................ ..... @movw_64 140MOVZ . 10 100101 .. ................ ..... @movw_32 141MOVK . 11 100101 .. ................ ..... @movw_64 142MOVK . 11 100101 .. ................ ..... @movw_32 143 144# Bitfield 145 146&bitfield rd rn sf immr imms 147@bitfield_64 1 .. ...... 1 immr:6 imms:6 rn:5 rd:5 &bitfield sf=1 148@bitfield_32 0 .. ...... 0 0 immr:5 0 imms:5 rn:5 rd:5 &bitfield sf=0 149 150SBFM . 00 100110 . ...... ...... ..... ..... @bitfield_64 151SBFM . 00 100110 . ...... ...... ..... ..... @bitfield_32 152BFM . 01 100110 . ...... ...... ..... ..... @bitfield_64 153BFM . 01 100110 . ...... ...... ..... ..... @bitfield_32 154UBFM . 10 100110 . ...... ...... ..... ..... @bitfield_64 155UBFM . 10 100110 . ...... ...... ..... ..... @bitfield_32 156 157# Extract 158 159&extract rd rn rm imm sf 160 161EXTR 1 00 100111 1 0 rm:5 imm:6 rn:5 rd:5 &extract sf=1 162EXTR 0 00 100111 0 0 rm:5 0 imm:5 rn:5 rd:5 &extract sf=0 163 164# Branches 165 166%imm26 0:s26 !function=times_4 167@branch . ..... .......................... &i imm=%imm26 168 169B 0 00101 .......................... @branch 170BL 1 00101 .......................... @branch 171 172%imm19 5:s19 !function=times_4 173&cbz rt imm sf nz 174 175CBZ sf:1 011010 nz:1 ................... rt:5 &cbz imm=%imm19 176 177%imm14 5:s14 !function=times_4 178%imm31_19 31:1 19:5 179&tbz rt imm nz bitpos 180 181TBZ . 011011 nz:1 ..... .............. rt:5 &tbz imm=%imm14 bitpos=%imm31_19 182 183# B.cond and BC.cond 184B_cond 0101010 0 ................... c:1 cond:4 imm=%imm19 185 186BR 1101011 0000 11111 000000 rn:5 00000 &r 187BLR 1101011 0001 11111 000000 rn:5 00000 &r 188RET 1101011 0010 11111 000000 rn:5 00000 &r 189 190&braz rn m 191BRAZ 1101011 0000 11111 00001 m:1 rn:5 11111 &braz # BRAAZ, BRABZ 192BLRAZ 1101011 0001 11111 00001 m:1 rn:5 11111 &braz # BLRAAZ, BLRABZ 193 194&reta m 195RETA 1101011 0010 11111 00001 m:1 11111 11111 &reta # RETAA, RETAB 196 197&bra rn rm m 198BRA 1101011 1000 11111 00001 m:1 rn:5 rm:5 &bra # BRAA, BRAB 199BLRA 1101011 1001 11111 00001 m:1 rn:5 rm:5 &bra # BLRAA, BLRAB 200 201ERET 1101011 0100 11111 000000 11111 00000 202ERETA 1101011 0100 11111 00001 m:1 11111 11111 &reta # ERETAA, ERETAB 203 204# We don't need to decode DRPS because it always UNDEFs except when 205# the processor is in halting debug state (which we don't implement). 206# The pattern is listed here as documentation. 207# DRPS 1101011 0101 11111 000000 11111 00000 208 209# Hint instruction group 210{ 211 [ 212 YIELD 1101 0101 0000 0011 0010 0000 001 11111 213 WFE 1101 0101 0000 0011 0010 0000 010 11111 214 WFI 1101 0101 0000 0011 0010 0000 011 11111 215 # We implement WFE to never block, so our SEV/SEVL are NOPs 216 # SEV 1101 0101 0000 0011 0010 0000 100 11111 217 # SEVL 1101 0101 0000 0011 0010 0000 101 11111 218 # Our DGL is a NOP because we don't merge memory accesses anyway. 219 # DGL 1101 0101 0000 0011 0010 0000 110 11111 220 XPACLRI 1101 0101 0000 0011 0010 0000 111 11111 221 PACIA1716 1101 0101 0000 0011 0010 0001 000 11111 222 PACIB1716 1101 0101 0000 0011 0010 0001 010 11111 223 AUTIA1716 1101 0101 0000 0011 0010 0001 100 11111 224 AUTIB1716 1101 0101 0000 0011 0010 0001 110 11111 225 ESB 1101 0101 0000 0011 0010 0010 000 11111 226 PACIAZ 1101 0101 0000 0011 0010 0011 000 11111 227 PACIASP 1101 0101 0000 0011 0010 0011 001 11111 228 PACIBZ 1101 0101 0000 0011 0010 0011 010 11111 229 PACIBSP 1101 0101 0000 0011 0010 0011 011 11111 230 AUTIAZ 1101 0101 0000 0011 0010 0011 100 11111 231 AUTIASP 1101 0101 0000 0011 0010 0011 101 11111 232 AUTIBZ 1101 0101 0000 0011 0010 0011 110 11111 233 AUTIBSP 1101 0101 0000 0011 0010 0011 111 11111 234 ] 235 # The canonical NOP has CRm == op2 == 0, but all of the space 236 # that isn't specifically allocated to an instruction must NOP 237 NOP 1101 0101 0000 0011 0010 ---- --- 11111 238} 239 240# System instructions with register argument 241WFET 1101 0101 0000 0011 0001 0000 000 rd:5 242WFIT 1101 0101 0000 0011 0001 0000 001 rd:5 243 244# Barriers 245 246CLREX 1101 0101 0000 0011 0011 ---- 010 11111 247DSB_DMB 1101 0101 0000 0011 0011 domain:2 types:2 10- 11111 248ISB 1101 0101 0000 0011 0011 ---- 110 11111 249SB 1101 0101 0000 0011 0011 0000 111 11111 250 251# PSTATE 252 253CFINV 1101 0101 0000 0 000 0100 0000 000 11111 254XAFLAG 1101 0101 0000 0 000 0100 0000 001 11111 255AXFLAG 1101 0101 0000 0 000 0100 0000 010 11111 256 257# These are architecturally all "MSR (immediate)"; we decode the destination 258# register too because there is no commonality in our implementation. 259@msr_i .... .... .... . ... .... imm:4 ... ..... 260MSR_i_UAO 1101 0101 0000 0 000 0100 .... 011 11111 @msr_i 261MSR_i_PAN 1101 0101 0000 0 000 0100 .... 100 11111 @msr_i 262MSR_i_SPSEL 1101 0101 0000 0 000 0100 .... 101 11111 @msr_i 263MSR_i_SBSS 1101 0101 0000 0 011 0100 .... 001 11111 @msr_i 264MSR_i_DIT 1101 0101 0000 0 011 0100 .... 010 11111 @msr_i 265MSR_i_TCO 1101 0101 0000 0 011 0100 .... 100 11111 @msr_i 266MSR_i_DAIFSET 1101 0101 0000 0 011 0100 .... 110 11111 @msr_i 267MSR_i_DAIFCLEAR 1101 0101 0000 0 011 0100 .... 111 11111 @msr_i 268MSR_i_ALLINT 1101 0101 0000 0 001 0100 000 imm:1 000 11111 269MSR_i_SVCR 1101 0101 0000 0 011 0100 0 mask:2 imm:1 011 11111 270 271# MRS, MSR (register), SYS, SYSL. These are all essentially the 272# same instruction as far as QEMU is concerned. 273# NB: op0 is bits [20:19], but op0=0b00 is other insns, so we have 274# to hand-decode it. 275SYS 1101 0101 00 l:1 01 op1:3 crn:4 crm:4 op2:3 rt:5 op0=1 276SYS 1101 0101 00 l:1 10 op1:3 crn:4 crm:4 op2:3 rt:5 op0=2 277SYS 1101 0101 00 l:1 11 op1:3 crn:4 crm:4 op2:3 rt:5 op0=3 278 279# Exception generation 280 281@i16 .... .... ... imm:16 ... .. &i 282SVC 1101 0100 000 ................ 000 01 @i16 283HVC 1101 0100 000 ................ 000 10 @i16 284SMC 1101 0100 000 ................ 000 11 @i16 285BRK 1101 0100 001 ................ 000 00 @i16 286HLT 1101 0100 010 ................ 000 00 @i16 287# These insns always UNDEF unless in halting debug state, which 288# we don't implement. So we don't need to decode them. The patterns 289# are listed here as documentation. 290# DCPS1 1101 0100 101 ................ 000 01 @i16 291# DCPS2 1101 0100 101 ................ 000 10 @i16 292# DCPS3 1101 0100 101 ................ 000 11 @i16 293 294# Loads and stores 295 296&stxr rn rt rt2 rs sz lasr 297&stlr rn rt sz lasr 298@stxr sz:2 ...... ... rs:5 lasr:1 rt2:5 rn:5 rt:5 &stxr 299@stlr sz:2 ...... ... ..... lasr:1 ..... rn:5 rt:5 &stlr 300%imm1_30_p2 30:1 !function=plus_2 301@stxp .. ...... ... rs:5 lasr:1 rt2:5 rn:5 rt:5 &stxr sz=%imm1_30_p2 302STXR .. 001000 000 ..... . ..... ..... ..... @stxr # inc STLXR 303LDXR .. 001000 010 ..... . ..... ..... ..... @stxr # inc LDAXR 304STLR .. 001000 100 11111 . 11111 ..... ..... @stlr # inc STLLR 305LDAR .. 001000 110 11111 . 11111 ..... ..... @stlr # inc LDLAR 306 307STXP 1 . 001000 001 ..... . ..... ..... ..... @stxp # inc STLXP 308LDXP 1 . 001000 011 ..... . ..... ..... ..... @stxp # inc LDAXP 309 310# CASP, CASPA, CASPAL, CASPL (we don't decode the bits that determine 311# acquire/release semantics because QEMU's cmpxchg always has those) 312CASP 0 . 001000 0 - 1 rs:5 - 11111 rn:5 rt:5 sz=%imm1_30_p2 313# CAS, CASA, CASAL, CASL 314CAS sz:2 001000 1 - 1 rs:5 - 11111 rn:5 rt:5 315 316&ldlit rt imm sz sign 317@ldlit .. ... . .. ................... rt:5 &ldlit imm=%imm19 318 319LD_lit 00 011 0 00 ................... ..... @ldlit sz=2 sign=0 320LD_lit 01 011 0 00 ................... ..... @ldlit sz=3 sign=0 321LD_lit 10 011 0 00 ................... ..... @ldlit sz=2 sign=1 322LD_lit_v 00 011 1 00 ................... ..... @ldlit sz=2 sign=0 323LD_lit_v 01 011 1 00 ................... ..... @ldlit sz=3 sign=0 324LD_lit_v 10 011 1 00 ................... ..... @ldlit sz=4 sign=0 325 326# PRFM 327NOP 11 011 0 00 ------------------- ----- 328 329&ldstpair rt2 rt rn imm sz sign w p 330@ldstpair .. ... . ... . imm:s7 rt2:5 rn:5 rt:5 &ldstpair 331 332# STNP, LDNP: Signed offset, non-temporal hint. We don't emulate caches 333# so we ignore hints about data access patterns, and handle these like 334# plain signed offset. 335STP 00 101 0 000 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 336LDP 00 101 0 000 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 337STP 10 101 0 000 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 338LDP 10 101 0 000 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 339STP_v 00 101 1 000 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 340LDP_v 00 101 1 000 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 341STP_v 01 101 1 000 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 342LDP_v 01 101 1 000 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 343STP_v 10 101 1 000 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0 344LDP_v 10 101 1 000 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0 345 346# STP and LDP: post-indexed 347STP 00 101 0 001 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1 348LDP 00 101 0 001 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1 349LDP 01 101 0 001 1 ....... ..... ..... ..... @ldstpair sz=2 sign=1 p=1 w=1 350STP 10 101 0 001 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1 351LDP 10 101 0 001 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1 352STP_v 00 101 1 001 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1 353LDP_v 00 101 1 001 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1 354STP_v 01 101 1 001 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1 355LDP_v 01 101 1 001 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1 356STP_v 10 101 1 001 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=1 w=1 357LDP_v 10 101 1 001 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=1 w=1 358 359# STP and LDP: offset 360STP 00 101 0 010 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 361LDP 00 101 0 010 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 362LDP 01 101 0 010 1 ....... ..... ..... ..... @ldstpair sz=2 sign=1 p=0 w=0 363STP 10 101 0 010 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 364LDP 10 101 0 010 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 365STP_v 00 101 1 010 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 366LDP_v 00 101 1 010 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 367STP_v 01 101 1 010 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 368LDP_v 01 101 1 010 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 369STP_v 10 101 1 010 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0 370LDP_v 10 101 1 010 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0 371 372# STP and LDP: pre-indexed 373STP 00 101 0 011 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1 374LDP 00 101 0 011 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1 375LDP 01 101 0 011 1 ....... ..... ..... ..... @ldstpair sz=2 sign=1 p=0 w=1 376STP 10 101 0 011 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1 377LDP 10 101 0 011 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1 378STP_v 00 101 1 011 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1 379LDP_v 00 101 1 011 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1 380STP_v 01 101 1 011 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1 381LDP_v 01 101 1 011 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1 382STP_v 10 101 1 011 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=1 383LDP_v 10 101 1 011 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=1 384 385# STGP: store tag and pair 386STGP 01 101 0 001 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1 387STGP 01 101 0 010 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 388STGP 01 101 0 011 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1 389 390# Load/store register (unscaled immediate) 391&ldst_imm rt rn imm sz sign w p unpriv ext 392@ldst_imm .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=0 p=0 w=0 393@ldst_imm_pre .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=0 p=0 w=1 394@ldst_imm_post .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=0 p=1 w=1 395@ldst_imm_user .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=1 p=0 w=0 396 397STR_i sz:2 111 0 00 00 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 398LDR_i 00 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=1 sz=0 399LDR_i 01 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=1 sz=1 400LDR_i 10 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=1 sz=2 401LDR_i 11 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 sz=3 402LDR_i 00 111 0 00 10 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=0 sz=0 403LDR_i 01 111 0 00 10 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=0 sz=1 404LDR_i 10 111 0 00 10 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=0 sz=2 405LDR_i 00 111 0 00 11 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=1 sz=0 406LDR_i 01 111 0 00 11 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=1 sz=1 407 408STR_i sz:2 111 0 00 00 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 409LDR_i 00 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=1 sz=0 410LDR_i 01 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=1 sz=1 411LDR_i 10 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=1 sz=2 412LDR_i 11 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 sz=3 413LDR_i 00 111 0 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=0 sz=0 414LDR_i 01 111 0 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=0 sz=1 415LDR_i 10 111 0 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=0 sz=2 416LDR_i 00 111 0 00 11 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=1 sz=0 417LDR_i 01 111 0 00 11 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=1 sz=1 418 419STR_i sz:2 111 0 00 00 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=0 420LDR_i 00 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=1 sz=0 421LDR_i 01 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=1 sz=1 422LDR_i 10 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=1 sz=2 423LDR_i 11 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=0 sz=3 424LDR_i 00 111 0 00 10 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=0 sz=0 425LDR_i 01 111 0 00 10 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=0 sz=1 426LDR_i 10 111 0 00 10 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=0 sz=2 427LDR_i 00 111 0 00 11 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=1 sz=0 428LDR_i 01 111 0 00 11 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=1 sz=1 429 430STR_i sz:2 111 0 00 00 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 431LDR_i 00 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=1 sz=0 432LDR_i 01 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=1 sz=1 433LDR_i 10 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=1 sz=2 434LDR_i 11 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 sz=3 435LDR_i 00 111 0 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=0 sz=0 436LDR_i 01 111 0 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=0 sz=1 437LDR_i 10 111 0 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=0 sz=2 438LDR_i 00 111 0 00 11 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=1 sz=0 439LDR_i 01 111 0 00 11 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=1 sz=1 440 441# PRFM : prefetch memory: a no-op for QEMU 442NOP 11 111 0 00 10 0 --------- 00 ----- ----- 443 444STR_v_i sz:2 111 1 00 00 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 445STR_v_i 00 111 1 00 10 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 sz=4 446LDR_v_i sz:2 111 1 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 447LDR_v_i 00 111 1 00 11 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 sz=4 448 449STR_v_i sz:2 111 1 00 00 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 450STR_v_i 00 111 1 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 sz=4 451LDR_v_i sz:2 111 1 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 452LDR_v_i 00 111 1 00 11 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 sz=4 453 454STR_v_i sz:2 111 1 00 00 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 455STR_v_i 00 111 1 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 sz=4 456LDR_v_i sz:2 111 1 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 457LDR_v_i 00 111 1 00 11 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 sz=4 458 459# Load/store with an unsigned 12 bit immediate, which is scaled by the 460# element size. The function gets the sz:imm and returns the scaled immediate. 461%uimm_scaled 10:12 sz:3 !function=uimm_scaled 462 463@ldst_uimm .. ... . .. .. ............ rn:5 rt:5 &ldst_imm unpriv=0 p=0 w=0 imm=%uimm_scaled 464 465STR_i sz:2 111 0 01 00 ............ ..... ..... @ldst_uimm sign=0 ext=0 466LDR_i 00 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=1 sz=0 467LDR_i 01 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=1 sz=1 468LDR_i 10 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=1 sz=2 469LDR_i 11 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=0 sz=3 470LDR_i 00 111 0 01 10 ............ ..... ..... @ldst_uimm sign=1 ext=0 sz=0 471LDR_i 01 111 0 01 10 ............ ..... ..... @ldst_uimm sign=1 ext=0 sz=1 472LDR_i 10 111 0 01 10 ............ ..... ..... @ldst_uimm sign=1 ext=0 sz=2 473LDR_i 00 111 0 01 11 ............ ..... ..... @ldst_uimm sign=1 ext=1 sz=0 474LDR_i 01 111 0 01 11 ............ ..... ..... @ldst_uimm sign=1 ext=1 sz=1 475 476# PRFM 477NOP 11 111 0 01 10 ------------ ----- ----- 478 479STR_v_i sz:2 111 1 01 00 ............ ..... ..... @ldst_uimm sign=0 ext=0 480STR_v_i 00 111 1 01 10 ............ ..... ..... @ldst_uimm sign=0 ext=0 sz=4 481LDR_v_i sz:2 111 1 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=0 482LDR_v_i 00 111 1 01 11 ............ ..... ..... @ldst_uimm sign=0 ext=0 sz=4 483 484# Load/store with register offset 485&ldst rm rn rt sign ext sz opt s 486@ldst .. ... . .. .. . rm:5 opt:3 s:1 .. rn:5 rt:5 &ldst 487STR sz:2 111 0 00 00 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 488LDR 00 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=1 sz=0 489LDR 01 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=1 sz=1 490LDR 10 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=1 sz=2 491LDR 11 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 sz=3 492LDR 00 111 0 00 10 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=0 sz=0 493LDR 01 111 0 00 10 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=0 sz=1 494LDR 10 111 0 00 10 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=0 sz=2 495LDR 00 111 0 00 11 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=1 sz=0 496LDR 01 111 0 00 11 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=1 sz=1 497 498# PRFM 499NOP 11 111 0 00 10 1 ----- -1- - 10 ----- ----- 500 501STR_v sz:2 111 1 00 00 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 502STR_v 00 111 1 00 10 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 sz=4 503LDR_v sz:2 111 1 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 504LDR_v 00 111 1 00 11 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 sz=4 505 506# Atomic memory operations 507&atomic rs rn rt a r sz 508@atomic sz:2 ... . .. a:1 r:1 . rs:5 . ... .. rn:5 rt:5 &atomic 509LDADD .. 111 0 00 . . 1 ..... 0000 00 ..... ..... @atomic 510LDCLR .. 111 0 00 . . 1 ..... 0001 00 ..... ..... @atomic 511LDEOR .. 111 0 00 . . 1 ..... 0010 00 ..... ..... @atomic 512LDSET .. 111 0 00 . . 1 ..... 0011 00 ..... ..... @atomic 513LDSMAX .. 111 0 00 . . 1 ..... 0100 00 ..... ..... @atomic 514LDSMIN .. 111 0 00 . . 1 ..... 0101 00 ..... ..... @atomic 515LDUMAX .. 111 0 00 . . 1 ..... 0110 00 ..... ..... @atomic 516LDUMIN .. 111 0 00 . . 1 ..... 0111 00 ..... ..... @atomic 517SWP .. 111 0 00 . . 1 ..... 1000 00 ..... ..... @atomic 518 519LDAPR sz:2 111 0 00 1 0 1 11111 1100 00 rn:5 rt:5 520 521# Load/store register (pointer authentication) 522 523# LDRA immediate is 10 bits signed and scaled, but the bits aren't all contiguous 524%ldra_imm 22:s1 12:9 !function=times_8 525 526LDRA 11 111 0 00 m:1 . 1 ......... w:1 1 rn:5 rt:5 imm=%ldra_imm 527 528&ldapr_stlr_i rn rt imm sz sign ext 529@ldapr_stlr_i .. ...... .. . imm:s9 .. rn:5 rt:5 &ldapr_stlr_i 530STLR_i sz:2 011001 00 0 ......... 00 ..... ..... @ldapr_stlr_i sign=0 ext=0 531LDAPR_i sz:2 011001 01 0 ......... 00 ..... ..... @ldapr_stlr_i sign=0 ext=0 532LDAPR_i 00 011001 10 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=0 sz=0 533LDAPR_i 01 011001 10 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=0 sz=1 534LDAPR_i 10 011001 10 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=0 sz=2 535LDAPR_i 00 011001 11 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=1 sz=0 536LDAPR_i 01 011001 11 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=1 sz=1 537 538# Load/store multiple structures 539# The 4-bit opcode in [15:12] encodes repeat count and structure elements 540&ldst_mult rm rn rt sz q p rpt selem 541@ldst_mult . q:1 ...... p:1 . . rm:5 .... sz:2 rn:5 rt:5 &ldst_mult 542ST_mult 0 . 001100 . 0 0 ..... 0000 .. ..... ..... @ldst_mult rpt=1 selem=4 543ST_mult 0 . 001100 . 0 0 ..... 0010 .. ..... ..... @ldst_mult rpt=4 selem=1 544ST_mult 0 . 001100 . 0 0 ..... 0100 .. ..... ..... @ldst_mult rpt=1 selem=3 545ST_mult 0 . 001100 . 0 0 ..... 0110 .. ..... ..... @ldst_mult rpt=3 selem=1 546ST_mult 0 . 001100 . 0 0 ..... 0111 .. ..... ..... @ldst_mult rpt=1 selem=1 547ST_mult 0 . 001100 . 0 0 ..... 1000 .. ..... ..... @ldst_mult rpt=1 selem=2 548ST_mult 0 . 001100 . 0 0 ..... 1010 .. ..... ..... @ldst_mult rpt=2 selem=1 549 550LD_mult 0 . 001100 . 1 0 ..... 0000 .. ..... ..... @ldst_mult rpt=1 selem=4 551LD_mult 0 . 001100 . 1 0 ..... 0010 .. ..... ..... @ldst_mult rpt=4 selem=1 552LD_mult 0 . 001100 . 1 0 ..... 0100 .. ..... ..... @ldst_mult rpt=1 selem=3 553LD_mult 0 . 001100 . 1 0 ..... 0110 .. ..... ..... @ldst_mult rpt=3 selem=1 554LD_mult 0 . 001100 . 1 0 ..... 0111 .. ..... ..... @ldst_mult rpt=1 selem=1 555LD_mult 0 . 001100 . 1 0 ..... 1000 .. ..... ..... @ldst_mult rpt=1 selem=2 556LD_mult 0 . 001100 . 1 0 ..... 1010 .. ..... ..... @ldst_mult rpt=2 selem=1 557 558# Load/store single structure 559&ldst_single rm rn rt p selem index scale 560 561%ldst_single_selem 13:1 21:1 !function=plus_1 562 563%ldst_single_index_b 30:1 10:3 564%ldst_single_index_h 30:1 11:2 565%ldst_single_index_s 30:1 12:1 566 567@ldst_single_b .. ...... p:1 .. rm:5 ...... rn:5 rt:5 \ 568 &ldst_single scale=0 selem=%ldst_single_selem \ 569 index=%ldst_single_index_b 570@ldst_single_h .. ...... p:1 .. rm:5 ...... rn:5 rt:5 \ 571 &ldst_single scale=1 selem=%ldst_single_selem \ 572 index=%ldst_single_index_h 573@ldst_single_s .. ...... p:1 .. rm:5 ...... rn:5 rt:5 \ 574 &ldst_single scale=2 selem=%ldst_single_selem \ 575 index=%ldst_single_index_s 576@ldst_single_d . index:1 ...... p:1 .. rm:5 ...... rn:5 rt:5 \ 577 &ldst_single scale=3 selem=%ldst_single_selem 578 579ST_single 0 . 001101 . 0 . ..... 00 . ... ..... ..... @ldst_single_b 580ST_single 0 . 001101 . 0 . ..... 01 . ..0 ..... ..... @ldst_single_h 581ST_single 0 . 001101 . 0 . ..... 10 . .00 ..... ..... @ldst_single_s 582ST_single 0 . 001101 . 0 . ..... 10 . 001 ..... ..... @ldst_single_d 583 584LD_single 0 . 001101 . 1 . ..... 00 . ... ..... ..... @ldst_single_b 585LD_single 0 . 001101 . 1 . ..... 01 . ..0 ..... ..... @ldst_single_h 586LD_single 0 . 001101 . 1 . ..... 10 . .00 ..... ..... @ldst_single_s 587LD_single 0 . 001101 . 1 . ..... 10 . 001 ..... ..... @ldst_single_d 588 589# Replicating load case 590LD_single_repl 0 q:1 001101 p:1 1 . rm:5 11 . 0 scale:2 rn:5 rt:5 selem=%ldst_single_selem 591 592%tag_offset 12:s9 !function=scale_by_log2_tag_granule 593&ldst_tag rn rt imm p w 594@ldst_tag ........ .. . ......... .. rn:5 rt:5 &ldst_tag imm=%tag_offset 595@ldst_tag_mult ........ .. . 000000000 .. rn:5 rt:5 &ldst_tag imm=0 596 597STZGM 11011001 00 1 ......... 00 ..... ..... @ldst_tag_mult p=0 w=0 598STG 11011001 00 1 ......... 01 ..... ..... @ldst_tag p=1 w=1 599STG 11011001 00 1 ......... 10 ..... ..... @ldst_tag p=0 w=0 600STG 11011001 00 1 ......... 11 ..... ..... @ldst_tag p=0 w=1 601 602LDG 11011001 01 1 ......... 00 ..... ..... @ldst_tag p=0 w=0 603STZG 11011001 01 1 ......... 01 ..... ..... @ldst_tag p=1 w=1 604STZG 11011001 01 1 ......... 10 ..... ..... @ldst_tag p=0 w=0 605STZG 11011001 01 1 ......... 11 ..... ..... @ldst_tag p=0 w=1 606 607STGM 11011001 10 1 ......... 00 ..... ..... @ldst_tag_mult p=0 w=0 608ST2G 11011001 10 1 ......... 01 ..... ..... @ldst_tag p=1 w=1 609ST2G 11011001 10 1 ......... 10 ..... ..... @ldst_tag p=0 w=0 610ST2G 11011001 10 1 ......... 11 ..... ..... @ldst_tag p=0 w=1 611 612LDGM 11011001 11 1 ......... 00 ..... ..... @ldst_tag_mult p=0 w=0 613STZ2G 11011001 11 1 ......... 01 ..... ..... @ldst_tag p=1 w=1 614STZ2G 11011001 11 1 ......... 10 ..... ..... @ldst_tag p=0 w=0 615STZ2G 11011001 11 1 ......... 11 ..... ..... @ldst_tag p=0 w=1 616 617# Memory operations (memset, memcpy, memmove) 618# Each of these comes in a set of three, eg SETP (prologue), SETM (main), 619# SETE (epilogue), and each of those has different flavours to 620# indicate whether memory accesses should be unpriv or non-temporal. 621# We don't distinguish temporal and non-temporal accesses, but we 622# do need to report it in syndrome register values. 623 624# Memset 625&set rs rn rd unpriv nontemp 626# op2 bit 1 is nontemporal bit 627@set .. ......... rs:5 .. nontemp:1 unpriv:1 .. rn:5 rd:5 &set 628 629SETP 00 011001110 ..... 00 . . 01 ..... ..... @set 630SETM 00 011001110 ..... 01 . . 01 ..... ..... @set 631SETE 00 011001110 ..... 10 . . 01 ..... ..... @set 632 633# Like SET, but also setting MTE tags 634SETGP 00 011101110 ..... 00 . . 01 ..... ..... @set 635SETGM 00 011101110 ..... 01 . . 01 ..... ..... @set 636SETGE 00 011101110 ..... 10 . . 01 ..... ..... @set 637 638# Memmove/Memcopy: the CPY insns allow overlapping src/dest and 639# copy in the correct direction; the CPYF insns always copy forwards. 640# 641# options has the nontemporal and unpriv bits for src and dest 642&cpy rs rn rd options 643@cpy .. ... . ..... rs:5 options:4 .. rn:5 rd:5 &cpy 644 645CPYFP 00 011 0 01000 ..... .... 01 ..... ..... @cpy 646CPYFM 00 011 0 01010 ..... .... 01 ..... ..... @cpy 647CPYFE 00 011 0 01100 ..... .... 01 ..... ..... @cpy 648CPYP 00 011 1 01000 ..... .... 01 ..... ..... @cpy 649CPYM 00 011 1 01010 ..... .... 01 ..... ..... @cpy 650CPYE 00 011 1 01100 ..... .... 01 ..... ..... @cpy 651 652### Cryptographic AES 653 654AESE 01001110 00 10100 00100 10 ..... ..... @r2r_q1e0 655AESD 01001110 00 10100 00101 10 ..... ..... @r2r_q1e0 656AESMC 01001110 00 10100 00110 10 ..... ..... @rr_q1e0 657AESIMC 01001110 00 10100 00111 10 ..... ..... @rr_q1e0 658 659### Cryptographic three-register SHA 660 661SHA1C 0101 1110 000 ..... 000000 ..... ..... @rrr_q1e0 662SHA1P 0101 1110 000 ..... 000100 ..... ..... @rrr_q1e0 663SHA1M 0101 1110 000 ..... 001000 ..... ..... @rrr_q1e0 664SHA1SU0 0101 1110 000 ..... 001100 ..... ..... @rrr_q1e0 665SHA256H 0101 1110 000 ..... 010000 ..... ..... @rrr_q1e0 666SHA256H2 0101 1110 000 ..... 010100 ..... ..... @rrr_q1e0 667SHA256SU1 0101 1110 000 ..... 011000 ..... ..... @rrr_q1e0 668 669### Cryptographic two-register SHA 670 671SHA1H 0101 1110 0010 1000 0000 10 ..... ..... @rr_q1e0 672SHA1SU1 0101 1110 0010 1000 0001 10 ..... ..... @rr_q1e0 673SHA256SU0 0101 1110 0010 1000 0010 10 ..... ..... @rr_q1e0 674 675### Cryptographic three-register SHA512 676 677SHA512H 1100 1110 011 ..... 100000 ..... ..... @rrr_q1e0 678SHA512H2 1100 1110 011 ..... 100001 ..... ..... @rrr_q1e0 679SHA512SU1 1100 1110 011 ..... 100010 ..... ..... @rrr_q1e0 680RAX1 1100 1110 011 ..... 100011 ..... ..... @rrr_q1e3 681SM3PARTW1 1100 1110 011 ..... 110000 ..... ..... @rrr_q1e0 682SM3PARTW2 1100 1110 011 ..... 110001 ..... ..... @rrr_q1e0 683SM4EKEY 1100 1110 011 ..... 110010 ..... ..... @rrr_q1e0 684 685### Cryptographic two-register SHA512 686 687SHA512SU0 1100 1110 110 00000 100000 ..... ..... @rr_q1e0 688SM4E 1100 1110 110 00000 100001 ..... ..... @r2r_q1e0 689 690### Cryptographic four-register 691 692EOR3 1100 1110 000 ..... 0 ..... ..... ..... @rrrr_q1e3 693BCAX 1100 1110 001 ..... 0 ..... ..... ..... @rrrr_q1e3 694SM3SS1 1100 1110 010 ..... 0 ..... ..... ..... @rrrr_q1e3 695 696### Cryptographic three-register, imm2 697 698&crypto3i rd rn rm imm 699@crypto3i ........ ... rm:5 .. imm:2 .. rn:5 rd:5 &crypto3i 700 701SM3TT1A 11001110 010 ..... 10 .. 00 ..... ..... @crypto3i 702SM3TT1B 11001110 010 ..... 10 .. 01 ..... ..... @crypto3i 703SM3TT2A 11001110 010 ..... 10 .. 10 ..... ..... @crypto3i 704SM3TT2B 11001110 010 ..... 10 .. 11 ..... ..... @crypto3i 705 706### Cryptographic XAR 707 708XAR 1100 1110 100 rm:5 imm:6 rn:5 rd:5 709 710### Advanced SIMD scalar copy 711 712DUP_element_s 0101 1110 000 imm:5 0 0000 1 rn:5 rd:5 713 714### Advanced SIMD copy 715 716DUP_element_v 0 q:1 00 1110 000 imm:5 0 0000 1 rn:5 rd:5 717DUP_general 0 q:1 00 1110 000 imm:5 0 0001 1 rn:5 rd:5 718INS_general 0 1 00 1110 000 imm:5 0 0011 1 rn:5 rd:5 719SMOV 0 q:1 00 1110 000 imm:5 0 0101 1 rn:5 rd:5 720UMOV 0 q:1 00 1110 000 imm:5 0 0111 1 rn:5 rd:5 721INS_element 0 1 10 1110 000 di:5 0 si:4 1 rn:5 rd:5 722 723### Advanced SIMD scalar three same 724 725FADD_s 0001 1110 ..1 ..... 0010 10 ..... ..... @rrr_hsd 726FSUB_s 0001 1110 ..1 ..... 0011 10 ..... ..... @rrr_hsd 727FDIV_s 0001 1110 ..1 ..... 0001 10 ..... ..... @rrr_hsd 728FMUL_s 0001 1110 ..1 ..... 0000 10 ..... ..... @rrr_hsd 729FNMUL_s 0001 1110 ..1 ..... 1000 10 ..... ..... @rrr_hsd 730 731FMAX_s 0001 1110 ..1 ..... 0100 10 ..... ..... @rrr_hsd 732FMIN_s 0001 1110 ..1 ..... 0101 10 ..... ..... @rrr_hsd 733FMAXNM_s 0001 1110 ..1 ..... 0110 10 ..... ..... @rrr_hsd 734FMINNM_s 0001 1110 ..1 ..... 0111 10 ..... ..... @rrr_hsd 735 736FMULX_s 0101 1110 010 ..... 00011 1 ..... ..... @rrr_h 737FMULX_s 0101 1110 0.1 ..... 11011 1 ..... ..... @rrr_sd 738 739FCMEQ_s 0101 1110 010 ..... 00100 1 ..... ..... @rrr_h 740FCMEQ_s 0101 1110 0.1 ..... 11100 1 ..... ..... @rrr_sd 741 742FCMGE_s 0111 1110 010 ..... 00100 1 ..... ..... @rrr_h 743FCMGE_s 0111 1110 0.1 ..... 11100 1 ..... ..... @rrr_sd 744 745FCMGT_s 0111 1110 110 ..... 00100 1 ..... ..... @rrr_h 746FCMGT_s 0111 1110 1.1 ..... 11100 1 ..... ..... @rrr_sd 747 748FACGE_s 0111 1110 010 ..... 00101 1 ..... ..... @rrr_h 749FACGE_s 0111 1110 0.1 ..... 11101 1 ..... ..... @rrr_sd 750 751FACGT_s 0111 1110 110 ..... 00101 1 ..... ..... @rrr_h 752FACGT_s 0111 1110 1.1 ..... 11101 1 ..... ..... @rrr_sd 753 754FABD_s 0111 1110 110 ..... 00010 1 ..... ..... @rrr_h 755FABD_s 0111 1110 1.1 ..... 11010 1 ..... ..... @rrr_sd 756 757FRECPS_s 0101 1110 010 ..... 00111 1 ..... ..... @rrr_h 758FRECPS_s 0101 1110 0.1 ..... 11111 1 ..... ..... @rrr_sd 759 760FRSQRTS_s 0101 1110 110 ..... 00111 1 ..... ..... @rrr_h 761FRSQRTS_s 0101 1110 1.1 ..... 11111 1 ..... ..... @rrr_sd 762 763SQADD_s 0101 1110 ..1 ..... 00001 1 ..... ..... @rrr_e 764UQADD_s 0111 1110 ..1 ..... 00001 1 ..... ..... @rrr_e 765SQSUB_s 0101 1110 ..1 ..... 00101 1 ..... ..... @rrr_e 766UQSUB_s 0111 1110 ..1 ..... 00101 1 ..... ..... @rrr_e 767 768SUQADD_s 0101 1110 ..1 00000 00111 0 ..... ..... @r2r_e 769USQADD_s 0111 1110 ..1 00000 00111 0 ..... ..... @r2r_e 770 771SSHL_s 0101 1110 111 ..... 01000 1 ..... ..... @rrr_d 772USHL_s 0111 1110 111 ..... 01000 1 ..... ..... @rrr_d 773SRSHL_s 0101 1110 111 ..... 01010 1 ..... ..... @rrr_d 774URSHL_s 0111 1110 111 ..... 01010 1 ..... ..... @rrr_d 775SQSHL_s 0101 1110 ..1 ..... 01001 1 ..... ..... @rrr_e 776UQSHL_s 0111 1110 ..1 ..... 01001 1 ..... ..... @rrr_e 777SQRSHL_s 0101 1110 ..1 ..... 01011 1 ..... ..... @rrr_e 778UQRSHL_s 0111 1110 ..1 ..... 01011 1 ..... ..... @rrr_e 779 780ADD_s 0101 1110 111 ..... 10000 1 ..... ..... @rrr_d 781SUB_s 0111 1110 111 ..... 10000 1 ..... ..... @rrr_d 782CMGT_s 0101 1110 111 ..... 00110 1 ..... ..... @rrr_d 783CMHI_s 0111 1110 111 ..... 00110 1 ..... ..... @rrr_d 784CMGE_s 0101 1110 111 ..... 00111 1 ..... ..... @rrr_d 785CMHS_s 0111 1110 111 ..... 00111 1 ..... ..... @rrr_d 786CMTST_s 0101 1110 111 ..... 10001 1 ..... ..... @rrr_d 787CMEQ_s 0111 1110 111 ..... 10001 1 ..... ..... @rrr_d 788 789SQDMULH_s 0101 1110 ..1 ..... 10110 1 ..... ..... @rrr_e 790SQRDMULH_s 0111 1110 ..1 ..... 10110 1 ..... ..... @rrr_e 791SQRDMLAH_s 0111 1110 ..0 ..... 10000 1 ..... ..... @rrr_e 792SQRDMLSH_s 0111 1110 ..0 ..... 10001 1 ..... ..... @rrr_e 793 794# Decode scalar x scalar as scalar x indexed, with index 0. 795SQDMULL_si 0101 1110 011 rm:5 11010 0 rn:5 rd:5 &rrx_e idx=0 esz=1 796SQDMULL_si 0101 1110 101 rm:5 11010 0 rn:5 rd:5 &rrx_e idx=0 esz=2 797SQDMLAL_si 0101 1110 011 rm:5 10010 0 rn:5 rd:5 &rrx_e idx=0 esz=1 798SQDMLAL_si 0101 1110 101 rm:5 10010 0 rn:5 rd:5 &rrx_e idx=0 esz=2 799SQDMLSL_si 0101 1110 011 rm:5 10110 0 rn:5 rd:5 &rrx_e idx=0 esz=1 800SQDMLSL_si 0101 1110 101 rm:5 10110 0 rn:5 rd:5 &rrx_e idx=0 esz=2 801 802### Advanced SIMD scalar pairwise 803 804FADDP_s 0101 1110 0011 0000 1101 10 ..... ..... @rr_h 805FADDP_s 0111 1110 0.11 0000 1101 10 ..... ..... @rr_sd 806 807FMAXP_s 0101 1110 0011 0000 1111 10 ..... ..... @rr_h 808FMAXP_s 0111 1110 0.11 0000 1111 10 ..... ..... @rr_sd 809 810FMINP_s 0101 1110 1011 0000 1111 10 ..... ..... @rr_h 811FMINP_s 0111 1110 1.11 0000 1111 10 ..... ..... @rr_sd 812 813FMAXNMP_s 0101 1110 0011 0000 1100 10 ..... ..... @rr_h 814FMAXNMP_s 0111 1110 0.11 0000 1100 10 ..... ..... @rr_sd 815 816FMINNMP_s 0101 1110 1011 0000 1100 10 ..... ..... @rr_h 817FMINNMP_s 0111 1110 1.11 0000 1100 10 ..... ..... @rr_sd 818 819ADDP_s 0101 1110 1111 0001 1011 10 ..... ..... @rr_d 820 821### Advanced SIMD three same 822 823FADD_v 0.00 1110 010 ..... 00010 1 ..... ..... @qrrr_h 824FADD_v 0.00 1110 0.1 ..... 11010 1 ..... ..... @qrrr_sd 825 826FSUB_v 0.00 1110 110 ..... 00010 1 ..... ..... @qrrr_h 827FSUB_v 0.00 1110 1.1 ..... 11010 1 ..... ..... @qrrr_sd 828 829FDIV_v 0.10 1110 010 ..... 00111 1 ..... ..... @qrrr_h 830FDIV_v 0.10 1110 0.1 ..... 11111 1 ..... ..... @qrrr_sd 831 832FMUL_v 0.10 1110 010 ..... 00011 1 ..... ..... @qrrr_h 833FMUL_v 0.10 1110 0.1 ..... 11011 1 ..... ..... @qrrr_sd 834 835FMAX_v 0.00 1110 010 ..... 00110 1 ..... ..... @qrrr_h 836FMAX_v 0.00 1110 0.1 ..... 11110 1 ..... ..... @qrrr_sd 837 838FMIN_v 0.00 1110 110 ..... 00110 1 ..... ..... @qrrr_h 839FMIN_v 0.00 1110 1.1 ..... 11110 1 ..... ..... @qrrr_sd 840 841FMAXNM_v 0.00 1110 010 ..... 00000 1 ..... ..... @qrrr_h 842FMAXNM_v 0.00 1110 0.1 ..... 11000 1 ..... ..... @qrrr_sd 843 844FMINNM_v 0.00 1110 110 ..... 00000 1 ..... ..... @qrrr_h 845FMINNM_v 0.00 1110 1.1 ..... 11000 1 ..... ..... @qrrr_sd 846 847FMULX_v 0.00 1110 010 ..... 00011 1 ..... ..... @qrrr_h 848FMULX_v 0.00 1110 0.1 ..... 11011 1 ..... ..... @qrrr_sd 849 850FMLA_v 0.00 1110 010 ..... 00001 1 ..... ..... @qrrr_h 851FMLA_v 0.00 1110 0.1 ..... 11001 1 ..... ..... @qrrr_sd 852 853FMLS_v 0.00 1110 110 ..... 00001 1 ..... ..... @qrrr_h 854FMLS_v 0.00 1110 1.1 ..... 11001 1 ..... ..... @qrrr_sd 855 856FMLAL_v 0.00 1110 001 ..... 11101 1 ..... ..... @qrrr_h 857FMLSL_v 0.00 1110 101 ..... 11101 1 ..... ..... @qrrr_h 858FMLAL2_v 0.10 1110 001 ..... 11001 1 ..... ..... @qrrr_h 859FMLSL2_v 0.10 1110 101 ..... 11001 1 ..... ..... @qrrr_h 860 861FCMEQ_v 0.00 1110 010 ..... 00100 1 ..... ..... @qrrr_h 862FCMEQ_v 0.00 1110 0.1 ..... 11100 1 ..... ..... @qrrr_sd 863 864FCMGE_v 0.10 1110 010 ..... 00100 1 ..... ..... @qrrr_h 865FCMGE_v 0.10 1110 0.1 ..... 11100 1 ..... ..... @qrrr_sd 866 867FCMGT_v 0.10 1110 110 ..... 00100 1 ..... ..... @qrrr_h 868FCMGT_v 0.10 1110 1.1 ..... 11100 1 ..... ..... @qrrr_sd 869 870FACGE_v 0.10 1110 010 ..... 00101 1 ..... ..... @qrrr_h 871FACGE_v 0.10 1110 0.1 ..... 11101 1 ..... ..... @qrrr_sd 872 873FACGT_v 0.10 1110 110 ..... 00101 1 ..... ..... @qrrr_h 874FACGT_v 0.10 1110 1.1 ..... 11101 1 ..... ..... @qrrr_sd 875 876FABD_v 0.10 1110 110 ..... 00010 1 ..... ..... @qrrr_h 877FABD_v 0.10 1110 1.1 ..... 11010 1 ..... ..... @qrrr_sd 878 879FRECPS_v 0.00 1110 010 ..... 00111 1 ..... ..... @qrrr_h 880FRECPS_v 0.00 1110 0.1 ..... 11111 1 ..... ..... @qrrr_sd 881 882FRSQRTS_v 0.00 1110 110 ..... 00111 1 ..... ..... @qrrr_h 883FRSQRTS_v 0.00 1110 1.1 ..... 11111 1 ..... ..... @qrrr_sd 884 885FADDP_v 0.10 1110 010 ..... 00010 1 ..... ..... @qrrr_h 886FADDP_v 0.10 1110 0.1 ..... 11010 1 ..... ..... @qrrr_sd 887 888FMAXP_v 0.10 1110 010 ..... 00110 1 ..... ..... @qrrr_h 889FMAXP_v 0.10 1110 0.1 ..... 11110 1 ..... ..... @qrrr_sd 890 891FMINP_v 0.10 1110 110 ..... 00110 1 ..... ..... @qrrr_h 892FMINP_v 0.10 1110 1.1 ..... 11110 1 ..... ..... @qrrr_sd 893 894FMAXNMP_v 0.10 1110 010 ..... 00000 1 ..... ..... @qrrr_h 895FMAXNMP_v 0.10 1110 0.1 ..... 11000 1 ..... ..... @qrrr_sd 896 897FMINNMP_v 0.10 1110 110 ..... 00000 1 ..... ..... @qrrr_h 898FMINNMP_v 0.10 1110 1.1 ..... 11000 1 ..... ..... @qrrr_sd 899 900ADDP_v 0.00 1110 ..1 ..... 10111 1 ..... ..... @qrrr_e 901SMAXP_v 0.00 1110 ..1 ..... 10100 1 ..... ..... @qrrr_e 902SMINP_v 0.00 1110 ..1 ..... 10101 1 ..... ..... @qrrr_e 903UMAXP_v 0.10 1110 ..1 ..... 10100 1 ..... ..... @qrrr_e 904UMINP_v 0.10 1110 ..1 ..... 10101 1 ..... ..... @qrrr_e 905 906AND_v 0.00 1110 001 ..... 00011 1 ..... ..... @qrrr_b 907BIC_v 0.00 1110 011 ..... 00011 1 ..... ..... @qrrr_b 908ORR_v 0.00 1110 101 ..... 00011 1 ..... ..... @qrrr_b 909ORN_v 0.00 1110 111 ..... 00011 1 ..... ..... @qrrr_b 910EOR_v 0.10 1110 001 ..... 00011 1 ..... ..... @qrrr_b 911BSL_v 0.10 1110 011 ..... 00011 1 ..... ..... @qrrr_b 912BIT_v 0.10 1110 101 ..... 00011 1 ..... ..... @qrrr_b 913BIF_v 0.10 1110 111 ..... 00011 1 ..... ..... @qrrr_b 914 915SQADD_v 0.00 1110 ..1 ..... 00001 1 ..... ..... @qrrr_e 916UQADD_v 0.10 1110 ..1 ..... 00001 1 ..... ..... @qrrr_e 917SQSUB_v 0.00 1110 ..1 ..... 00101 1 ..... ..... @qrrr_e 918UQSUB_v 0.10 1110 ..1 ..... 00101 1 ..... ..... @qrrr_e 919 920SUQADD_v 0.00 1110 ..1 00000 00111 0 ..... ..... @qr2r_e 921USQADD_v 0.10 1110 ..1 00000 00111 0 ..... ..... @qr2r_e 922 923SSHL_v 0.00 1110 ..1 ..... 01000 1 ..... ..... @qrrr_e 924USHL_v 0.10 1110 ..1 ..... 01000 1 ..... ..... @qrrr_e 925SRSHL_v 0.00 1110 ..1 ..... 01010 1 ..... ..... @qrrr_e 926URSHL_v 0.10 1110 ..1 ..... 01010 1 ..... ..... @qrrr_e 927SQSHL_v 0.00 1110 ..1 ..... 01001 1 ..... ..... @qrrr_e 928UQSHL_v 0.10 1110 ..1 ..... 01001 1 ..... ..... @qrrr_e 929SQRSHL_v 0.00 1110 ..1 ..... 01011 1 ..... ..... @qrrr_e 930UQRSHL_v 0.10 1110 ..1 ..... 01011 1 ..... ..... @qrrr_e 931 932ADD_v 0.00 1110 ..1 ..... 10000 1 ..... ..... @qrrr_e 933SUB_v 0.10 1110 ..1 ..... 10000 1 ..... ..... @qrrr_e 934CMGT_v 0.00 1110 ..1 ..... 00110 1 ..... ..... @qrrr_e 935CMHI_v 0.10 1110 ..1 ..... 00110 1 ..... ..... @qrrr_e 936CMGE_v 0.00 1110 ..1 ..... 00111 1 ..... ..... @qrrr_e 937CMHS_v 0.10 1110 ..1 ..... 00111 1 ..... ..... @qrrr_e 938CMTST_v 0.00 1110 ..1 ..... 10001 1 ..... ..... @qrrr_e 939CMEQ_v 0.10 1110 ..1 ..... 10001 1 ..... ..... @qrrr_e 940SHADD_v 0.00 1110 ..1 ..... 00000 1 ..... ..... @qrrr_e 941UHADD_v 0.10 1110 ..1 ..... 00000 1 ..... ..... @qrrr_e 942SHSUB_v 0.00 1110 ..1 ..... 00100 1 ..... ..... @qrrr_e 943UHSUB_v 0.10 1110 ..1 ..... 00100 1 ..... ..... @qrrr_e 944SRHADD_v 0.00 1110 ..1 ..... 00010 1 ..... ..... @qrrr_e 945URHADD_v 0.10 1110 ..1 ..... 00010 1 ..... ..... @qrrr_e 946SMAX_v 0.00 1110 ..1 ..... 01100 1 ..... ..... @qrrr_e 947UMAX_v 0.10 1110 ..1 ..... 01100 1 ..... ..... @qrrr_e 948SMIN_v 0.00 1110 ..1 ..... 01101 1 ..... ..... @qrrr_e 949UMIN_v 0.10 1110 ..1 ..... 01101 1 ..... ..... @qrrr_e 950SABD_v 0.00 1110 ..1 ..... 01110 1 ..... ..... @qrrr_e 951UABD_v 0.10 1110 ..1 ..... 01110 1 ..... ..... @qrrr_e 952SABA_v 0.00 1110 ..1 ..... 01111 1 ..... ..... @qrrr_e 953UABA_v 0.10 1110 ..1 ..... 01111 1 ..... ..... @qrrr_e 954MUL_v 0.00 1110 ..1 ..... 10011 1 ..... ..... @qrrr_e 955PMUL_v 0.10 1110 001 ..... 10011 1 ..... ..... @qrrr_b 956MLA_v 0.00 1110 ..1 ..... 10010 1 ..... ..... @qrrr_e 957MLS_v 0.10 1110 ..1 ..... 10010 1 ..... ..... @qrrr_e 958 959SQDMULH_v 0.00 1110 ..1 ..... 10110 1 ..... ..... @qrrr_e 960SQRDMULH_v 0.10 1110 ..1 ..... 10110 1 ..... ..... @qrrr_e 961SQRDMLAH_v 0.10 1110 ..0 ..... 10000 1 ..... ..... @qrrr_e 962SQRDMLSH_v 0.10 1110 ..0 ..... 10001 1 ..... ..... @qrrr_e 963 964SDOT_v 0.00 1110 100 ..... 10010 1 ..... ..... @qrrr_s 965UDOT_v 0.10 1110 100 ..... 10010 1 ..... ..... @qrrr_s 966USDOT_v 0.00 1110 100 ..... 10011 1 ..... ..... @qrrr_s 967BFDOT_v 0.10 1110 010 ..... 11111 1 ..... ..... @qrrr_s 968BFMLAL_v 0.10 1110 110 ..... 11111 1 ..... ..... @qrrr_h 969BFMMLA 0110 1110 010 ..... 11101 1 ..... ..... @rrr_q1e0 970SMMLA 0100 1110 100 ..... 10100 1 ..... ..... @rrr_q1e0 971UMMLA 0110 1110 100 ..... 10100 1 ..... ..... @rrr_q1e0 972USMMLA 0100 1110 100 ..... 10101 1 ..... ..... @rrr_q1e0 973 974FCADD_90 0.10 1110 ..0 ..... 11100 1 ..... ..... @qrrr_e 975FCADD_270 0.10 1110 ..0 ..... 11110 1 ..... ..... @qrrr_e 976 977FCMLA_v 0 q:1 10 1110 esz:2 0 rm:5 110 rot:2 1 rn:5 rd:5 978 979SMULL_v 0.00 1110 ..1 ..... 11000 0 ..... ..... @qrrr_e 980UMULL_v 0.10 1110 ..1 ..... 11000 0 ..... ..... @qrrr_e 981SMLAL_v 0.00 1110 ..1 ..... 10000 0 ..... ..... @qrrr_e 982UMLAL_v 0.10 1110 ..1 ..... 10000 0 ..... ..... @qrrr_e 983SMLSL_v 0.00 1110 ..1 ..... 10100 0 ..... ..... @qrrr_e 984UMLSL_v 0.10 1110 ..1 ..... 10100 0 ..... ..... @qrrr_e 985 986SADDL_v 0.00 1110 ..1 ..... 00000 0 ..... ..... @qrrr_e 987UADDL_v 0.10 1110 ..1 ..... 00000 0 ..... ..... @qrrr_e 988SSUBL_v 0.00 1110 ..1 ..... 00100 0 ..... ..... @qrrr_e 989USUBL_v 0.10 1110 ..1 ..... 00100 0 ..... ..... @qrrr_e 990SABAL_v 0.00 1110 ..1 ..... 01010 0 ..... ..... @qrrr_e 991UABAL_v 0.10 1110 ..1 ..... 01010 0 ..... ..... @qrrr_e 992SABDL_v 0.00 1110 ..1 ..... 01110 0 ..... ..... @qrrr_e 993UABDL_v 0.10 1110 ..1 ..... 01110 0 ..... ..... @qrrr_e 994 995SQDMULL_v 0.00 1110 011 ..... 11010 0 ..... ..... @qrrr_h 996SQDMULL_v 0.00 1110 101 ..... 11010 0 ..... ..... @qrrr_s 997SQDMLAL_v 0.00 1110 011 ..... 10010 0 ..... ..... @qrrr_h 998SQDMLAL_v 0.00 1110 101 ..... 10010 0 ..... ..... @qrrr_s 999SQDMLSL_v 0.00 1110 011 ..... 10110 0 ..... ..... @qrrr_h 1000SQDMLSL_v 0.00 1110 101 ..... 10110 0 ..... ..... @qrrr_s 1001 1002SADDW 0.00 1110 ..1 ..... 00010 0 ..... ..... @qrrr_e 1003UADDW 0.10 1110 ..1 ..... 00010 0 ..... ..... @qrrr_e 1004SSUBW 0.00 1110 ..1 ..... 00110 0 ..... ..... @qrrr_e 1005USUBW 0.10 1110 ..1 ..... 00110 0 ..... ..... @qrrr_e 1006 1007ADDHN 0.00 1110 ..1 ..... 01000 0 ..... ..... @qrrr_e 1008RADDHN 0.10 1110 ..1 ..... 01000 0 ..... ..... @qrrr_e 1009SUBHN 0.00 1110 ..1 ..... 01100 0 ..... ..... @qrrr_e 1010RSUBHN 0.10 1110 ..1 ..... 01100 0 ..... ..... @qrrr_e 1011 1012PMULL_p8 0.00 1110 001 ..... 11100 0 ..... ..... @qrrr_b 1013PMULL_p64 0.00 1110 111 ..... 11100 0 ..... ..... @qrrr_b 1014 1015### Advanced SIMD scalar x indexed element 1016 1017FMUL_si 0101 1111 00 .. .... 1001 . 0 ..... ..... @rrx_h 1018FMUL_si 0101 1111 10 . ..... 1001 . 0 ..... ..... @rrx_s 1019FMUL_si 0101 1111 11 0 ..... 1001 . 0 ..... ..... @rrx_d 1020 1021FMLA_si 0101 1111 00 .. .... 0001 . 0 ..... ..... @rrx_h 1022FMLA_si 0101 1111 10 .. .... 0001 . 0 ..... ..... @rrx_s 1023FMLA_si 0101 1111 11 0. .... 0001 . 0 ..... ..... @rrx_d 1024 1025FMLS_si 0101 1111 00 .. .... 0101 . 0 ..... ..... @rrx_h 1026FMLS_si 0101 1111 10 .. .... 0101 . 0 ..... ..... @rrx_s 1027FMLS_si 0101 1111 11 0. .... 0101 . 0 ..... ..... @rrx_d 1028 1029FMULX_si 0111 1111 00 .. .... 1001 . 0 ..... ..... @rrx_h 1030FMULX_si 0111 1111 10 . ..... 1001 . 0 ..... ..... @rrx_s 1031FMULX_si 0111 1111 11 0 ..... 1001 . 0 ..... ..... @rrx_d 1032 1033SQDMULH_si 0101 1111 01 .. .... 1100 . 0 ..... ..... @rrx_h 1034SQDMULH_si 0101 1111 10 .. .... 1100 . 0 ..... ..... @rrx_s 1035 1036SQRDMULH_si 0101 1111 01 .. .... 1101 . 0 ..... ..... @rrx_h 1037SQRDMULH_si 0101 1111 10 . ..... 1101 . 0 ..... ..... @rrx_s 1038 1039SQRDMLAH_si 0111 1111 01 .. .... 1101 . 0 ..... ..... @rrx_h 1040SQRDMLAH_si 0111 1111 10 .. .... 1101 . 0 ..... ..... @rrx_s 1041 1042SQRDMLSH_si 0111 1111 01 .. .... 1111 . 0 ..... ..... @rrx_h 1043SQRDMLSH_si 0111 1111 10 .. .... 1111 . 0 ..... ..... @rrx_s 1044 1045SQDMULL_si 0101 1111 01 .. .... 1011 . 0 ..... ..... @rrx_h 1046SQDMULL_si 0101 1111 10 . ..... 1011 . 0 ..... ..... @rrx_s 1047 1048SQDMLAL_si 0101 1111 01 .. .... 0011 . 0 ..... ..... @rrx_h 1049SQDMLAL_si 0101 1111 10 . ..... 0011 . 0 ..... ..... @rrx_s 1050 1051SQDMLSL_si 0101 1111 01 .. .... 0111 . 0 ..... ..... @rrx_h 1052SQDMLSL_si 0101 1111 10 . ..... 0111 . 0 ..... ..... @rrx_s 1053 1054### Advanced SIMD vector x indexed element 1055 1056FMUL_vi 0.00 1111 00 .. .... 1001 . 0 ..... ..... @qrrx_h 1057FMUL_vi 0.00 1111 10 . ..... 1001 . 0 ..... ..... @qrrx_s 1058FMUL_vi 0.00 1111 11 0 ..... 1001 . 0 ..... ..... @qrrx_d 1059 1060FMLA_vi 0.00 1111 00 .. .... 0001 . 0 ..... ..... @qrrx_h 1061FMLA_vi 0.00 1111 10 . ..... 0001 . 0 ..... ..... @qrrx_s 1062FMLA_vi 0.00 1111 11 0 ..... 0001 . 0 ..... ..... @qrrx_d 1063 1064FMLS_vi 0.00 1111 00 .. .... 0101 . 0 ..... ..... @qrrx_h 1065FMLS_vi 0.00 1111 10 . ..... 0101 . 0 ..... ..... @qrrx_s 1066FMLS_vi 0.00 1111 11 0 ..... 0101 . 0 ..... ..... @qrrx_d 1067 1068FMULX_vi 0.10 1111 00 .. .... 1001 . 0 ..... ..... @qrrx_h 1069FMULX_vi 0.10 1111 10 . ..... 1001 . 0 ..... ..... @qrrx_s 1070FMULX_vi 0.10 1111 11 0 ..... 1001 . 0 ..... ..... @qrrx_d 1071 1072FMLAL_vi 0.00 1111 10 .. .... 0000 . 0 ..... ..... @qrrx_h 1073FMLSL_vi 0.00 1111 10 .. .... 0100 . 0 ..... ..... @qrrx_h 1074FMLAL2_vi 0.10 1111 10 .. .... 1000 . 0 ..... ..... @qrrx_h 1075FMLSL2_vi 0.10 1111 10 .. .... 1100 . 0 ..... ..... @qrrx_h 1076 1077MUL_vi 0.00 1111 01 .. .... 1000 . 0 ..... ..... @qrrx_h 1078MUL_vi 0.00 1111 10 . ..... 1000 . 0 ..... ..... @qrrx_s 1079 1080MLA_vi 0.10 1111 01 .. .... 0000 . 0 ..... ..... @qrrx_h 1081MLA_vi 0.10 1111 10 . ..... 0000 . 0 ..... ..... @qrrx_s 1082 1083MLS_vi 0.10 1111 01 .. .... 0100 . 0 ..... ..... @qrrx_h 1084MLS_vi 0.10 1111 10 . ..... 0100 . 0 ..... ..... @qrrx_s 1085 1086SQDMULH_vi 0.00 1111 01 .. .... 1100 . 0 ..... ..... @qrrx_h 1087SQDMULH_vi 0.00 1111 10 . ..... 1100 . 0 ..... ..... @qrrx_s 1088 1089SQRDMULH_vi 0.00 1111 01 .. .... 1101 . 0 ..... ..... @qrrx_h 1090SQRDMULH_vi 0.00 1111 10 . ..... 1101 . 0 ..... ..... @qrrx_s 1091 1092SQRDMLAH_vi 0.10 1111 01 .. .... 1101 . 0 ..... ..... @qrrx_h 1093SQRDMLAH_vi 0.10 1111 10 .. .... 1101 . 0 ..... ..... @qrrx_s 1094 1095SQRDMLSH_vi 0.10 1111 01 .. .... 1111 . 0 ..... ..... @qrrx_h 1096SQRDMLSH_vi 0.10 1111 10 .. .... 1111 . 0 ..... ..... @qrrx_s 1097 1098SDOT_vi 0.00 1111 10 .. .... 1110 . 0 ..... ..... @qrrx_s 1099UDOT_vi 0.10 1111 10 .. .... 1110 . 0 ..... ..... @qrrx_s 1100SUDOT_vi 0.00 1111 00 .. .... 1111 . 0 ..... ..... @qrrx_s 1101USDOT_vi 0.00 1111 10 .. .... 1111 . 0 ..... ..... @qrrx_s 1102BFDOT_vi 0.00 1111 01 .. .... 1111 . 0 ..... ..... @qrrx_s 1103BFMLAL_vi 0.00 1111 11 .. .... 1111 . 0 ..... ..... @qrrx_h 1104 1105FCMLA_vi 0 0 10 1111 01 idx:1 rm:5 0 rot:2 1 0 0 rn:5 rd:5 esz=1 q=0 1106FCMLA_vi 0 1 10 1111 01 . rm:5 0 rot:2 1 . 0 rn:5 rd:5 esz=1 idx=%hl q=1 1107FCMLA_vi 0 1 10 1111 10 0 rm:5 0 rot:2 1 idx:1 0 rn:5 rd:5 esz=2 q=1 1108 1109SMULL_vi 0.00 1111 01 .. .... 1010 . 0 ..... ..... @qrrx_h 1110SMULL_vi 0.00 1111 10 . ..... 1010 . 0 ..... ..... @qrrx_s 1111UMULL_vi 0.10 1111 01 .. .... 1010 . 0 ..... ..... @qrrx_h 1112UMULL_vi 0.10 1111 10 . ..... 1010 . 0 ..... ..... @qrrx_s 1113 1114SMLAL_vi 0.00 1111 01 .. .... 0010 . 0 ..... ..... @qrrx_h 1115SMLAL_vi 0.00 1111 10 . ..... 0010 . 0 ..... ..... @qrrx_s 1116UMLAL_vi 0.10 1111 01 .. .... 0010 . 0 ..... ..... @qrrx_h 1117UMLAL_vi 0.10 1111 10 . ..... 0010 . 0 ..... ..... @qrrx_s 1118 1119SMLSL_vi 0.00 1111 01 .. .... 0110 . 0 ..... ..... @qrrx_h 1120SMLSL_vi 0.00 1111 10 . ..... 0110 . 0 ..... ..... @qrrx_s 1121UMLSL_vi 0.10 1111 01 .. .... 0110 . 0 ..... ..... @qrrx_h 1122UMLSL_vi 0.10 1111 10 . ..... 0110 . 0 ..... ..... @qrrx_s 1123 1124SQDMULL_vi 0.00 1111 01 .. .... 1011 . 0 ..... ..... @qrrx_h 1125SQDMULL_vi 0.00 1111 10 . ..... 1011 . 0 ..... ..... @qrrx_s 1126 1127SQDMLAL_vi 0.00 1111 01 .. .... 0011 . 0 ..... ..... @qrrx_h 1128SQDMLAL_vi 0.00 1111 10 . ..... 0011 . 0 ..... ..... @qrrx_s 1129 1130SQDMLSL_vi 0.00 1111 01 .. .... 0111 . 0 ..... ..... @qrrx_h 1131SQDMLSL_vi 0.00 1111 10 . ..... 0111 . 0 ..... ..... @qrrx_s 1132 1133# Floating-point conditional select 1134 1135FCSEL 0001 1110 .. 1 rm:5 cond:4 11 rn:5 rd:5 esz=%esz_hsd 1136 1137# Floating-point data-processing (3 source) 1138 1139@rrrr_hsd .... .... .. . rm:5 . ra:5 rn:5 rd:5 &rrrr_e esz=%esz_hsd 1140 1141FMADD 0001 1111 .. 0 ..... 0 ..... ..... ..... @rrrr_hsd 1142FMSUB 0001 1111 .. 0 ..... 1 ..... ..... ..... @rrrr_hsd 1143FNMADD 0001 1111 .. 1 ..... 0 ..... ..... ..... @rrrr_hsd 1144FNMSUB 0001 1111 .. 1 ..... 1 ..... ..... ..... @rrrr_hsd 1145 1146# Advanced SIMD Extract 1147 1148EXT_d 0010 1110 00 0 rm:5 00 imm:3 0 rn:5 rd:5 1149EXT_q 0110 1110 00 0 rm:5 0 imm:4 0 rn:5 rd:5 1150 1151# Advanced SIMD Table Lookup 1152 1153TBL_TBX 0 q:1 00 1110 000 rm:5 0 len:2 tbx:1 00 rn:5 rd:5 1154 1155# Advanced SIMD Permute 1156 1157UZP1 0.00 1110 .. 0 ..... 0 001 10 ..... ..... @qrrr_e 1158UZP2 0.00 1110 .. 0 ..... 0 101 10 ..... ..... @qrrr_e 1159TRN1 0.00 1110 .. 0 ..... 0 010 10 ..... ..... @qrrr_e 1160TRN2 0.00 1110 .. 0 ..... 0 110 10 ..... ..... @qrrr_e 1161ZIP1 0.00 1110 .. 0 ..... 0 011 10 ..... ..... @qrrr_e 1162ZIP2 0.00 1110 .. 0 ..... 0 111 10 ..... ..... @qrrr_e 1163 1164# Advanced SIMD Across Lanes 1165 1166ADDV 0.00 1110 .. 11000 11011 10 ..... ..... @qrr_e 1167SADDLV 0.00 1110 .. 11000 00011 10 ..... ..... @qrr_e 1168UADDLV 0.10 1110 .. 11000 00011 10 ..... ..... @qrr_e 1169SMAXV 0.00 1110 .. 11000 01010 10 ..... ..... @qrr_e 1170UMAXV 0.10 1110 .. 11000 01010 10 ..... ..... @qrr_e 1171SMINV 0.00 1110 .. 11000 11010 10 ..... ..... @qrr_e 1172UMINV 0.10 1110 .. 11000 11010 10 ..... ..... @qrr_e 1173 1174FMAXNMV_h 0.00 1110 00 11000 01100 10 ..... ..... @qrr_h 1175FMAXNMV_s 0110 1110 00 11000 01100 10 ..... ..... @rr_q1e2 1176 1177FMINNMV_h 0.00 1110 10 11000 01100 10 ..... ..... @qrr_h 1178FMINNMV_s 0110 1110 10 11000 01100 10 ..... ..... @rr_q1e2 1179 1180FMAXV_h 0.00 1110 00 11000 01111 10 ..... ..... @qrr_h 1181FMAXV_s 0110 1110 00 11000 01111 10 ..... ..... @rr_q1e2 1182 1183FMINV_h 0.00 1110 10 11000 01111 10 ..... ..... @qrr_h 1184FMINV_s 0110 1110 10 11000 01111 10 ..... ..... @rr_q1e2 1185 1186# Floating-point Immediate 1187 1188FMOVI_s 0001 1110 .. 1 imm:8 100 00000 rd:5 esz=%esz_hsd 1189 1190# Advanced SIMD Modified Immediate / Shift by Immediate 1191 1192%abcdefgh 16:3 5:5 1193 1194# Right shifts are encoded as N - shift, where N is the element size in bits. 1195%neon_rshift_i6 16:6 !function=rsub_64 1196%neon_rshift_i5 16:5 !function=rsub_32 1197%neon_rshift_i4 16:4 !function=rsub_16 1198%neon_rshift_i3 16:3 !function=rsub_8 1199 1200@q_shri_b . q:1 .. ..... 0001 ... ..... . rn:5 rd:5 \ 1201 &qrri_e esz=0 imm=%neon_rshift_i3 1202@q_shri_h . q:1 .. ..... 001 .... ..... . rn:5 rd:5 \ 1203 &qrri_e esz=1 imm=%neon_rshift_i4 1204@q_shri_s . q:1 .. ..... 01 ..... ..... . rn:5 rd:5 \ 1205 &qrri_e esz=2 imm=%neon_rshift_i5 1206@q_shri_d . 1 .. ..... 1 ...... ..... . rn:5 rd:5 \ 1207 &qrri_e esz=3 imm=%neon_rshift_i6 q=1 1208 1209@q_shli_b . q:1 .. ..... 0001 imm:3 ..... . rn:5 rd:5 &qrri_e esz=0 1210@q_shli_h . q:1 .. ..... 001 imm:4 ..... . rn:5 rd:5 &qrri_e esz=1 1211@q_shli_s . q:1 .. ..... 01 imm:5 ..... . rn:5 rd:5 &qrri_e esz=2 1212@q_shli_d . 1 .. ..... 1 imm:6 ..... . rn:5 rd:5 &qrri_e esz=3 q=1 1213 1214FMOVI_v_h 0 q:1 00 1111 00000 ... 1111 11 ..... rd:5 %abcdefgh 1215 1216# MOVI, MVNI, ORR, BIC, FMOV are all intermixed via cmode. 1217Vimm 0 q:1 op:1 0 1111 00000 ... cmode:4 01 ..... rd:5 %abcdefgh 1218 1219SSHR_v 0.00 11110 .... ... 00000 1 ..... ..... @q_shri_b 1220SSHR_v 0.00 11110 .... ... 00000 1 ..... ..... @q_shri_h 1221SSHR_v 0.00 11110 .... ... 00000 1 ..... ..... @q_shri_s 1222SSHR_v 0.00 11110 .... ... 00000 1 ..... ..... @q_shri_d 1223 1224USHR_v 0.10 11110 .... ... 00000 1 ..... ..... @q_shri_b 1225USHR_v 0.10 11110 .... ... 00000 1 ..... ..... @q_shri_h 1226USHR_v 0.10 11110 .... ... 00000 1 ..... ..... @q_shri_s 1227USHR_v 0.10 11110 .... ... 00000 1 ..... ..... @q_shri_d 1228 1229SSRA_v 0.00 11110 .... ... 00010 1 ..... ..... @q_shri_b 1230SSRA_v 0.00 11110 .... ... 00010 1 ..... ..... @q_shri_h 1231SSRA_v 0.00 11110 .... ... 00010 1 ..... ..... @q_shri_s 1232SSRA_v 0.00 11110 .... ... 00010 1 ..... ..... @q_shri_d 1233 1234USRA_v 0.10 11110 .... ... 00010 1 ..... ..... @q_shri_b 1235USRA_v 0.10 11110 .... ... 00010 1 ..... ..... @q_shri_h 1236USRA_v 0.10 11110 .... ... 00010 1 ..... ..... @q_shri_s 1237USRA_v 0.10 11110 .... ... 00010 1 ..... ..... @q_shri_d 1238 1239SRSHR_v 0.00 11110 .... ... 00100 1 ..... ..... @q_shri_b 1240SRSHR_v 0.00 11110 .... ... 00100 1 ..... ..... @q_shri_h 1241SRSHR_v 0.00 11110 .... ... 00100 1 ..... ..... @q_shri_s 1242SRSHR_v 0.00 11110 .... ... 00100 1 ..... ..... @q_shri_d 1243 1244URSHR_v 0.10 11110 .... ... 00100 1 ..... ..... @q_shri_b 1245URSHR_v 0.10 11110 .... ... 00100 1 ..... ..... @q_shri_h 1246URSHR_v 0.10 11110 .... ... 00100 1 ..... ..... @q_shri_s 1247URSHR_v 0.10 11110 .... ... 00100 1 ..... ..... @q_shri_d 1248 1249SRSRA_v 0.00 11110 .... ... 00110 1 ..... ..... @q_shri_b 1250SRSRA_v 0.00 11110 .... ... 00110 1 ..... ..... @q_shri_h 1251SRSRA_v 0.00 11110 .... ... 00110 1 ..... ..... @q_shri_s 1252SRSRA_v 0.00 11110 .... ... 00110 1 ..... ..... @q_shri_d 1253 1254URSRA_v 0.10 11110 .... ... 00110 1 ..... ..... @q_shri_b 1255URSRA_v 0.10 11110 .... ... 00110 1 ..... ..... @q_shri_h 1256URSRA_v 0.10 11110 .... ... 00110 1 ..... ..... @q_shri_s 1257URSRA_v 0.10 11110 .... ... 00110 1 ..... ..... @q_shri_d 1258 1259SRI_v 0.10 11110 .... ... 01000 1 ..... ..... @q_shri_b 1260SRI_v 0.10 11110 .... ... 01000 1 ..... ..... @q_shri_h 1261SRI_v 0.10 11110 .... ... 01000 1 ..... ..... @q_shri_s 1262SRI_v 0.10 11110 .... ... 01000 1 ..... ..... @q_shri_d 1263 1264SHL_v 0.00 11110 .... ... 01010 1 ..... ..... @q_shli_b 1265SHL_v 0.00 11110 .... ... 01010 1 ..... ..... @q_shli_h 1266SHL_v 0.00 11110 .... ... 01010 1 ..... ..... @q_shli_s 1267SHL_v 0.00 11110 .... ... 01010 1 ..... ..... @q_shli_d 1268 1269SLI_v 0.10 11110 .... ... 01010 1 ..... ..... @q_shli_b 1270SLI_v 0.10 11110 .... ... 01010 1 ..... ..... @q_shli_h 1271SLI_v 0.10 11110 .... ... 01010 1 ..... ..... @q_shli_s 1272SLI_v 0.10 11110 .... ... 01010 1 ..... ..... @q_shli_d 1273 1274SSHLL_v 0.00 11110 .... ... 10100 1 ..... ..... @q_shli_b 1275SSHLL_v 0.00 11110 .... ... 10100 1 ..... ..... @q_shli_h 1276SSHLL_v 0.00 11110 .... ... 10100 1 ..... ..... @q_shli_s 1277 1278USHLL_v 0.10 11110 .... ... 10100 1 ..... ..... @q_shli_b 1279USHLL_v 0.10 11110 .... ... 10100 1 ..... ..... @q_shli_h 1280USHLL_v 0.10 11110 .... ... 10100 1 ..... ..... @q_shli_s 1281 1282SHRN_v 0.00 11110 .... ... 10000 1 ..... ..... @q_shri_b 1283SHRN_v 0.00 11110 .... ... 10000 1 ..... ..... @q_shri_h 1284SHRN_v 0.00 11110 .... ... 10000 1 ..... ..... @q_shri_s 1285 1286RSHRN_v 0.00 11110 .... ... 10001 1 ..... ..... @q_shri_b 1287RSHRN_v 0.00 11110 .... ... 10001 1 ..... ..... @q_shri_h 1288RSHRN_v 0.00 11110 .... ... 10001 1 ..... ..... @q_shri_s 1289 1290SQSHL_vi 0.00 11110 .... ... 01110 1 ..... ..... @q_shli_b 1291SQSHL_vi 0.00 11110 .... ... 01110 1 ..... ..... @q_shli_h 1292SQSHL_vi 0.00 11110 .... ... 01110 1 ..... ..... @q_shli_s 1293SQSHL_vi 0.00 11110 .... ... 01110 1 ..... ..... @q_shli_d 1294 1295UQSHL_vi 0.10 11110 .... ... 01110 1 ..... ..... @q_shli_b 1296UQSHL_vi 0.10 11110 .... ... 01110 1 ..... ..... @q_shli_h 1297UQSHL_vi 0.10 11110 .... ... 01110 1 ..... ..... @q_shli_s 1298UQSHL_vi 0.10 11110 .... ... 01110 1 ..... ..... @q_shli_d 1299 1300SQSHLU_vi 0.10 11110 .... ... 01100 1 ..... ..... @q_shli_b 1301SQSHLU_vi 0.10 11110 .... ... 01100 1 ..... ..... @q_shli_h 1302SQSHLU_vi 0.10 11110 .... ... 01100 1 ..... ..... @q_shli_s 1303SQSHLU_vi 0.10 11110 .... ... 01100 1 ..... ..... @q_shli_d 1304 1305SQSHRN_v 0.00 11110 .... ... 10010 1 ..... ..... @q_shri_b 1306SQSHRN_v 0.00 11110 .... ... 10010 1 ..... ..... @q_shri_h 1307SQSHRN_v 0.00 11110 .... ... 10010 1 ..... ..... @q_shri_s 1308 1309UQSHRN_v 0.10 11110 .... ... 10010 1 ..... ..... @q_shri_b 1310UQSHRN_v 0.10 11110 .... ... 10010 1 ..... ..... @q_shri_h 1311UQSHRN_v 0.10 11110 .... ... 10010 1 ..... ..... @q_shri_s 1312 1313SQSHRUN_v 0.10 11110 .... ... 10000 1 ..... ..... @q_shri_b 1314SQSHRUN_v 0.10 11110 .... ... 10000 1 ..... ..... @q_shri_h 1315SQSHRUN_v 0.10 11110 .... ... 10000 1 ..... ..... @q_shri_s 1316 1317SQRSHRN_v 0.00 11110 .... ... 10011 1 ..... ..... @q_shri_b 1318SQRSHRN_v 0.00 11110 .... ... 10011 1 ..... ..... @q_shri_h 1319SQRSHRN_v 0.00 11110 .... ... 10011 1 ..... ..... @q_shri_s 1320 1321UQRSHRN_v 0.10 11110 .... ... 10011 1 ..... ..... @q_shri_b 1322UQRSHRN_v 0.10 11110 .... ... 10011 1 ..... ..... @q_shri_h 1323UQRSHRN_v 0.10 11110 .... ... 10011 1 ..... ..... @q_shri_s 1324 1325SQRSHRUN_v 0.10 11110 .... ... 10001 1 ..... ..... @q_shri_b 1326SQRSHRUN_v 0.10 11110 .... ... 10001 1 ..... ..... @q_shri_h 1327SQRSHRUN_v 0.10 11110 .... ... 10001 1 ..... ..... @q_shri_s 1328 1329# Advanced SIMD scalar shift by immediate 1330 1331@shri_b .... ..... 0001 ... ..... . rn:5 rd:5 \ 1332 &rri_e esz=0 imm=%neon_rshift_i3 1333@shri_h .... ..... 001 .... ..... . rn:5 rd:5 \ 1334 &rri_e esz=1 imm=%neon_rshift_i4 1335@shri_s .... ..... 01 ..... ..... . rn:5 rd:5 \ 1336 &rri_e esz=2 imm=%neon_rshift_i5 1337@shri_d .... ..... 1 ...... ..... . rn:5 rd:5 \ 1338 &rri_e esz=3 imm=%neon_rshift_i6 1339 1340@shli_b .... ..... 0001 imm:3 ..... . rn:5 rd:5 &rri_e esz=0 1341@shli_h .... ..... 001 imm:4 ..... . rn:5 rd:5 &rri_e esz=1 1342@shli_s .... ..... 01 imm:5 ..... . rn:5 rd:5 &rri_e esz=2 1343@shli_d .... ..... 1 imm:6 ..... . rn:5 rd:5 &rri_e esz=3 1344 1345SSHR_s 0101 11110 .... ... 00000 1 ..... ..... @shri_d 1346USHR_s 0111 11110 .... ... 00000 1 ..... ..... @shri_d 1347SSRA_s 0101 11110 .... ... 00010 1 ..... ..... @shri_d 1348USRA_s 0111 11110 .... ... 00010 1 ..... ..... @shri_d 1349SRSHR_s 0101 11110 .... ... 00100 1 ..... ..... @shri_d 1350URSHR_s 0111 11110 .... ... 00100 1 ..... ..... @shri_d 1351SRSRA_s 0101 11110 .... ... 00110 1 ..... ..... @shri_d 1352URSRA_s 0111 11110 .... ... 00110 1 ..... ..... @shri_d 1353SRI_s 0111 11110 .... ... 01000 1 ..... ..... @shri_d 1354 1355SHL_s 0101 11110 .... ... 01010 1 ..... ..... @shli_d 1356SLI_s 0111 11110 .... ... 01010 1 ..... ..... @shli_d 1357 1358SQSHL_si 0101 11110 .... ... 01110 1 ..... ..... @shli_b 1359SQSHL_si 0101 11110 .... ... 01110 1 ..... ..... @shli_h 1360SQSHL_si 0101 11110 .... ... 01110 1 ..... ..... @shli_s 1361SQSHL_si 0101 11110 .... ... 01110 1 ..... ..... @shli_d 1362 1363UQSHL_si 0111 11110 .... ... 01110 1 ..... ..... @shli_b 1364UQSHL_si 0111 11110 .... ... 01110 1 ..... ..... @shli_h 1365UQSHL_si 0111 11110 .... ... 01110 1 ..... ..... @shli_s 1366UQSHL_si 0111 11110 .... ... 01110 1 ..... ..... @shli_d 1367 1368SQSHLU_si 0111 11110 .... ... 01100 1 ..... ..... @shli_b 1369SQSHLU_si 0111 11110 .... ... 01100 1 ..... ..... @shli_h 1370SQSHLU_si 0111 11110 .... ... 01100 1 ..... ..... @shli_s 1371SQSHLU_si 0111 11110 .... ... 01100 1 ..... ..... @shli_d 1372 1373SQSHRN_si 0101 11110 .... ... 10010 1 ..... ..... @shri_b 1374SQSHRN_si 0101 11110 .... ... 10010 1 ..... ..... @shri_h 1375SQSHRN_si 0101 11110 .... ... 10010 1 ..... ..... @shri_s 1376 1377UQSHRN_si 0111 11110 .... ... 10010 1 ..... ..... @shri_b 1378UQSHRN_si 0111 11110 .... ... 10010 1 ..... ..... @shri_h 1379UQSHRN_si 0111 11110 .... ... 10010 1 ..... ..... @shri_s 1380 1381SQSHRUN_si 0111 11110 .... ... 10000 1 ..... ..... @shri_b 1382SQSHRUN_si 0111 11110 .... ... 10000 1 ..... ..... @shri_h 1383SQSHRUN_si 0111 11110 .... ... 10000 1 ..... ..... @shri_s 1384 1385SQRSHRN_si 0101 11110 .... ... 10011 1 ..... ..... @shri_b 1386SQRSHRN_si 0101 11110 .... ... 10011 1 ..... ..... @shri_h 1387SQRSHRN_si 0101 11110 .... ... 10011 1 ..... ..... @shri_s 1388 1389UQRSHRN_si 0111 11110 .... ... 10011 1 ..... ..... @shri_b 1390UQRSHRN_si 0111 11110 .... ... 10011 1 ..... ..... @shri_h 1391UQRSHRN_si 0111 11110 .... ... 10011 1 ..... ..... @shri_s 1392 1393SQRSHRUN_si 0111 11110 .... ... 10001 1 ..... ..... @shri_b 1394SQRSHRUN_si 0111 11110 .... ... 10001 1 ..... ..... @shri_h 1395SQRSHRUN_si 0111 11110 .... ... 10001 1 ..... ..... @shri_s 1396