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_hs 22:1 !function=plus_1 25%esz_hsd 22:2 !function=xor_2 26%hl 11:1 21:1 27%hlm 11:1 20:2 28 29&r rn 30&rrr rd rn rm 31&ri rd imm 32&rr rd rn 33&rr_sf rd rn sf 34&rri_sf rd rn imm sf 35&rrr_sf rd rn rm sf 36&i imm 37&rr_e rd rn esz 38&rri_e rd rn imm esz 39&rrr_e rd rn rm esz 40&rrx_e rd rn rm idx esz 41&rrrr_e rd rn rm ra esz 42&qrr_e q rd rn esz 43&qrri_e q rd rn imm esz 44&qrrr_e q rd rn rm esz 45&qrrx_e q rd rn rm idx esz 46&qrrrr_e q rd rn rm ra esz 47 48@rr_h ........ ... ..... ...... rn:5 rd:5 &rr_e esz=1 49@rr_s ........ ... ..... ...... rn:5 rd:5 &rr_e esz=2 50@rr_d ........ ... ..... ...... rn:5 rd:5 &rr_e esz=3 51@rr_e ........ esz:2 . ..... ...... rn:5 rd:5 &rr_e 52@rr_sd ........ ... ..... ...... rn:5 rd:5 &rr_e esz=%esz_sd 53@rr_hsd ........ ... ..... ...... rn:5 rd:5 &rr_e esz=%esz_hsd 54 55@rrr_b ........ ... rm:5 ...... rn:5 rd:5 &rrr_e esz=0 56@rrr_h ........ ... rm:5 ...... rn:5 rd:5 &rrr_e esz=1 57@rrr_s ........ ... rm:5 ...... rn:5 rd:5 &rrr_e esz=2 58@rrr_d ........ ... rm:5 ...... rn:5 rd:5 &rrr_e esz=3 59@rrr_sd ........ ... rm:5 ...... rn:5 rd:5 &rrr_e esz=%esz_sd 60@rrr_hsd ........ ... rm:5 ...... rn:5 rd:5 &rrr_e esz=%esz_hsd 61@rrr_e ........ esz:2 . rm:5 ...... rn:5 rd:5 &rrr_e 62@r2r_e ........ esz:2 . ..... ...... rm:5 rd:5 &rrr_e rn=%rd 63 64@rrx_h ........ .. .. rm:4 .... . . rn:5 rd:5 &rrx_e esz=1 idx=%hlm 65@rrx_s ........ .. . rm:5 .... . . rn:5 rd:5 &rrx_e esz=2 idx=%hl 66@rrx_d ........ .. . rm:5 .... idx:1 . rn:5 rd:5 &rrx_e esz=3 67 68@rr_q1e0 ........ ........ ...... rn:5 rd:5 &qrr_e q=1 esz=0 69@rr_q1e2 ........ ........ ...... rn:5 rd:5 &qrr_e q=1 esz=2 70@r2r_q1e0 ........ ........ ...... rm:5 rd:5 &qrrr_e rn=%rd q=1 esz=0 71@rrr_q1e0 ........ ... rm:5 ...... rn:5 rd:5 &qrrr_e q=1 esz=0 72@rrr_q1e3 ........ ... rm:5 ...... rn:5 rd:5 &qrrr_e q=1 esz=3 73@rrrr_q1e3 ........ ... rm:5 . ra:5 rn:5 rd:5 &qrrrr_e q=1 esz=3 74 75@qrr_b . q:1 ...... .. ...... ...... rn:5 rd:5 &qrr_e esz=0 76@qrr_h . q:1 ...... .. ...... ...... rn:5 rd:5 &qrr_e esz=1 77@qrr_s . q:1 ...... .. ...... ...... rn:5 rd:5 &qrr_e esz=2 78@qrr_bh . q:1 ...... . esz:1 ...... ...... rn:5 rd:5 &qrr_e 79@qrr_hs . q:1 ...... .. ...... ...... rn:5 rd:5 &qrr_e esz=%esz_hs 80@qrr_sd . q:1 ...... .. ...... ...... rn:5 rd:5 &qrr_e esz=%esz_sd 81@qrr_e . q:1 ...... esz:2 ...... ...... rn:5 rd:5 &qrr_e 82 83@qrrr_b . q:1 ...... ... rm:5 ...... rn:5 rd:5 &qrrr_e esz=0 84@qrrr_h . q:1 ...... ... rm:5 ...... rn:5 rd:5 &qrrr_e esz=1 85@qrrr_s . q:1 ...... ... rm:5 ...... rn:5 rd:5 &qrrr_e esz=2 86@qrrr_sd . q:1 ...... ... rm:5 ...... rn:5 rd:5 &qrrr_e esz=%esz_sd 87@qrrr_e . q:1 ...... esz:2 . rm:5 ...... rn:5 rd:5 &qrrr_e 88@qr2r_e . q:1 ...... esz:2 . ..... ...... rm:5 rd:5 &qrrr_e rn=%rd 89 90@qrrx_h . q:1 .. .... .. .. rm:4 .... . . rn:5 rd:5 \ 91 &qrrx_e esz=1 idx=%hlm 92@qrrx_s . q:1 .. .... .. . rm:5 .... . . rn:5 rd:5 \ 93 &qrrx_e esz=2 idx=%hl 94@qrrx_d . q:1 .. .... .. . rm:5 .... idx:1 . rn:5 rd:5 \ 95 &qrrx_e esz=3 96 97### Data Processing - Immediate 98 99# PC-rel addressing 100 101%imm_pcrel 5:s19 29:2 102@pcrel . .. ..... ................... rd:5 &ri imm=%imm_pcrel 103 104ADR 0 .. 10000 ................... ..... @pcrel 105ADRP 1 .. 10000 ................... ..... @pcrel 106 107# Add/subtract (immediate) 108 109%imm12_sh12 10:12 !function=shl_12 110@addsub_imm sf:1 .. ...... . imm:12 rn:5 rd:5 111@addsub_imm12 sf:1 .. ...... . ............ rn:5 rd:5 imm=%imm12_sh12 112 113ADD_i . 00 100010 0 ............ ..... ..... @addsub_imm 114ADD_i . 00 100010 1 ............ ..... ..... @addsub_imm12 115ADDS_i . 01 100010 0 ............ ..... ..... @addsub_imm 116ADDS_i . 01 100010 1 ............ ..... ..... @addsub_imm12 117 118SUB_i . 10 100010 0 ............ ..... ..... @addsub_imm 119SUB_i . 10 100010 1 ............ ..... ..... @addsub_imm12 120SUBS_i . 11 100010 0 ............ ..... ..... @addsub_imm 121SUBS_i . 11 100010 1 ............ ..... ..... @addsub_imm12 122 123# Add/subtract (immediate with tags) 124 125&rri_tag rd rn uimm6 uimm4 126@addsub_imm_tag . .. ...... . uimm6:6 .. uimm4:4 rn:5 rd:5 &rri_tag 127 128ADDG_i 1 00 100011 0 ...... 00 .... ..... ..... @addsub_imm_tag 129SUBG_i 1 10 100011 0 ...... 00 .... ..... ..... @addsub_imm_tag 130 131# Logical (immediate) 132 133&rri_log rd rn sf dbm 134@logic_imm_64 1 .. ...... dbm:13 rn:5 rd:5 &rri_log sf=1 135@logic_imm_32 0 .. ...... 0 dbm:12 rn:5 rd:5 &rri_log sf=0 136 137AND_i . 00 100100 . ...... ...... ..... ..... @logic_imm_64 138AND_i . 00 100100 . ...... ...... ..... ..... @logic_imm_32 139ORR_i . 01 100100 . ...... ...... ..... ..... @logic_imm_64 140ORR_i . 01 100100 . ...... ...... ..... ..... @logic_imm_32 141EOR_i . 10 100100 . ...... ...... ..... ..... @logic_imm_64 142EOR_i . 10 100100 . ...... ...... ..... ..... @logic_imm_32 143ANDS_i . 11 100100 . ...... ...... ..... ..... @logic_imm_64 144ANDS_i . 11 100100 . ...... ...... ..... ..... @logic_imm_32 145 146# Move wide (immediate) 147 148&movw rd sf imm hw 149@movw_64 1 .. ...... hw:2 imm:16 rd:5 &movw sf=1 150@movw_32 0 .. ...... 0 hw:1 imm:16 rd:5 &movw sf=0 151 152MOVN . 00 100101 .. ................ ..... @movw_64 153MOVN . 00 100101 .. ................ ..... @movw_32 154MOVZ . 10 100101 .. ................ ..... @movw_64 155MOVZ . 10 100101 .. ................ ..... @movw_32 156MOVK . 11 100101 .. ................ ..... @movw_64 157MOVK . 11 100101 .. ................ ..... @movw_32 158 159# Bitfield 160 161&bitfield rd rn sf immr imms 162@bitfield_64 1 .. ...... 1 immr:6 imms:6 rn:5 rd:5 &bitfield sf=1 163@bitfield_32 0 .. ...... 0 0 immr:5 0 imms:5 rn:5 rd:5 &bitfield sf=0 164 165SBFM . 00 100110 . ...... ...... ..... ..... @bitfield_64 166SBFM . 00 100110 . ...... ...... ..... ..... @bitfield_32 167BFM . 01 100110 . ...... ...... ..... ..... @bitfield_64 168BFM . 01 100110 . ...... ...... ..... ..... @bitfield_32 169UBFM . 10 100110 . ...... ...... ..... ..... @bitfield_64 170UBFM . 10 100110 . ...... ...... ..... ..... @bitfield_32 171 172# Extract 173 174&extract rd rn rm imm sf 175 176EXTR 1 00 100111 1 0 rm:5 imm:6 rn:5 rd:5 &extract sf=1 177EXTR 0 00 100111 0 0 rm:5 0 imm:5 rn:5 rd:5 &extract sf=0 178 179### Branches 180 181%imm26 0:s26 !function=times_4 182@branch . ..... .......................... &i imm=%imm26 183 184B 0 00101 .......................... @branch 185BL 1 00101 .......................... @branch 186 187%imm19 5:s19 !function=times_4 188&cbz rt imm sf nz 189 190CBZ sf:1 011010 nz:1 ................... rt:5 &cbz imm=%imm19 191 192%imm14 5:s14 !function=times_4 193%imm31_19 31:1 19:5 194&tbz rt imm nz bitpos 195 196TBZ . 011011 nz:1 ..... .............. rt:5 &tbz imm=%imm14 bitpos=%imm31_19 197 198# B.cond and BC.cond 199B_cond 0101010 0 ................... c:1 cond:4 imm=%imm19 200 201BR 1101011 0000 11111 000000 rn:5 00000 &r 202BLR 1101011 0001 11111 000000 rn:5 00000 &r 203RET 1101011 0010 11111 000000 rn:5 00000 &r 204 205&braz rn m 206BRAZ 1101011 0000 11111 00001 m:1 rn:5 11111 &braz # BRAAZ, BRABZ 207BLRAZ 1101011 0001 11111 00001 m:1 rn:5 11111 &braz # BLRAAZ, BLRABZ 208 209&reta m 210RETA 1101011 0010 11111 00001 m:1 11111 11111 &reta # RETAA, RETAB 211 212&bra rn rm m 213BRA 1101011 1000 11111 00001 m:1 rn:5 rm:5 &bra # BRAA, BRAB 214BLRA 1101011 1001 11111 00001 m:1 rn:5 rm:5 &bra # BLRAA, BLRAB 215 216ERET 1101011 0100 11111 000000 11111 00000 217ERETA 1101011 0100 11111 00001 m:1 11111 11111 &reta # ERETAA, ERETAB 218 219# We don't need to decode DRPS because it always UNDEFs except when 220# the processor is in halting debug state (which we don't implement). 221# The pattern is listed here as documentation. 222# DRPS 1101011 0101 11111 000000 11111 00000 223 224# Hint instruction group 225{ 226 [ 227 YIELD 1101 0101 0000 0011 0010 0000 001 11111 228 WFE 1101 0101 0000 0011 0010 0000 010 11111 229 WFI 1101 0101 0000 0011 0010 0000 011 11111 230 # We implement WFE to never block, so our SEV/SEVL are NOPs 231 # SEV 1101 0101 0000 0011 0010 0000 100 11111 232 # SEVL 1101 0101 0000 0011 0010 0000 101 11111 233 # Our DGL is a NOP because we don't merge memory accesses anyway. 234 # DGL 1101 0101 0000 0011 0010 0000 110 11111 235 XPACLRI 1101 0101 0000 0011 0010 0000 111 11111 236 PACIA1716 1101 0101 0000 0011 0010 0001 000 11111 237 PACIB1716 1101 0101 0000 0011 0010 0001 010 11111 238 AUTIA1716 1101 0101 0000 0011 0010 0001 100 11111 239 AUTIB1716 1101 0101 0000 0011 0010 0001 110 11111 240 ESB 1101 0101 0000 0011 0010 0010 000 11111 241 PACIAZ 1101 0101 0000 0011 0010 0011 000 11111 242 PACIASP 1101 0101 0000 0011 0010 0011 001 11111 243 PACIBZ 1101 0101 0000 0011 0010 0011 010 11111 244 PACIBSP 1101 0101 0000 0011 0010 0011 011 11111 245 AUTIAZ 1101 0101 0000 0011 0010 0011 100 11111 246 AUTIASP 1101 0101 0000 0011 0010 0011 101 11111 247 AUTIBZ 1101 0101 0000 0011 0010 0011 110 11111 248 AUTIBSP 1101 0101 0000 0011 0010 0011 111 11111 249 ] 250 # The canonical NOP has CRm == op2 == 0, but all of the space 251 # that isn't specifically allocated to an instruction must NOP 252 NOP 1101 0101 0000 0011 0010 ---- --- 11111 253} 254 255# System instructions with register argument 256WFET 1101 0101 0000 0011 0001 0000 000 rd:5 257WFIT 1101 0101 0000 0011 0001 0000 001 rd:5 258 259# Barriers 260 261CLREX 1101 0101 0000 0011 0011 ---- 010 11111 262DSB_DMB 1101 0101 0000 0011 0011 domain:2 types:2 10- 11111 263# For the DSB nXS variant, types always equals MBReqTypes_All and we ignore the 264# domain bits. 265DSB_nXS 1101 0101 0000 0011 0011 -- 10 001 11111 266ISB 1101 0101 0000 0011 0011 ---- 110 11111 267SB 1101 0101 0000 0011 0011 0000 111 11111 268 269# PSTATE 270 271CFINV 1101 0101 0000 0 000 0100 0000 000 11111 272XAFLAG 1101 0101 0000 0 000 0100 0000 001 11111 273AXFLAG 1101 0101 0000 0 000 0100 0000 010 11111 274 275# These are architecturally all "MSR (immediate)"; we decode the destination 276# register too because there is no commonality in our implementation. 277@msr_i .... .... .... . ... .... imm:4 ... ..... 278MSR_i_UAO 1101 0101 0000 0 000 0100 .... 011 11111 @msr_i 279MSR_i_PAN 1101 0101 0000 0 000 0100 .... 100 11111 @msr_i 280MSR_i_SPSEL 1101 0101 0000 0 000 0100 .... 101 11111 @msr_i 281MSR_i_SBSS 1101 0101 0000 0 011 0100 .... 001 11111 @msr_i 282MSR_i_DIT 1101 0101 0000 0 011 0100 .... 010 11111 @msr_i 283MSR_i_TCO 1101 0101 0000 0 011 0100 .... 100 11111 @msr_i 284MSR_i_DAIFSET 1101 0101 0000 0 011 0100 .... 110 11111 @msr_i 285MSR_i_DAIFCLEAR 1101 0101 0000 0 011 0100 .... 111 11111 @msr_i 286MSR_i_ALLINT 1101 0101 0000 0 001 0100 000 imm:1 000 11111 287MSR_i_SVCR 1101 0101 0000 0 011 0100 0 mask:2 imm:1 011 11111 288 289# MRS, MSR (register), SYS, SYSL. These are all essentially the 290# same instruction as far as QEMU is concerned. 291# NB: op0 is bits [20:19], but op0=0b00 is other insns, so we have 292# to hand-decode it. 293SYS 1101 0101 00 l:1 01 op1:3 crn:4 crm:4 op2:3 rt:5 op0=1 294SYS 1101 0101 00 l:1 10 op1:3 crn:4 crm:4 op2:3 rt:5 op0=2 295SYS 1101 0101 00 l:1 11 op1:3 crn:4 crm:4 op2:3 rt:5 op0=3 296 297# Exception generation 298 299@i16 .... .... ... imm:16 ... .. &i 300SVC 1101 0100 000 ................ 000 01 @i16 301HVC 1101 0100 000 ................ 000 10 @i16 302SMC 1101 0100 000 ................ 000 11 @i16 303BRK 1101 0100 001 ................ 000 00 @i16 304HLT 1101 0100 010 ................ 000 00 @i16 305# These insns always UNDEF unless in halting debug state, which 306# we don't implement. So we don't need to decode them. The patterns 307# are listed here as documentation. 308# DCPS1 1101 0100 101 ................ 000 01 @i16 309# DCPS2 1101 0100 101 ................ 000 10 @i16 310# DCPS3 1101 0100 101 ................ 000 11 @i16 311 312### Loads and stores 313 314&stxr rn rt rt2 rs sz lasr 315&stlr rn rt sz lasr 316@stxr sz:2 ...... ... rs:5 lasr:1 rt2:5 rn:5 rt:5 &stxr 317@stlr sz:2 ...... ... ..... lasr:1 ..... rn:5 rt:5 &stlr 318%imm1_30_p2 30:1 !function=plus_2 319@stxp .. ...... ... rs:5 lasr:1 rt2:5 rn:5 rt:5 &stxr sz=%imm1_30_p2 320STXR .. 001000 000 ..... . ..... ..... ..... @stxr # inc STLXR 321LDXR .. 001000 010 ..... . ..... ..... ..... @stxr # inc LDAXR 322STLR .. 001000 100 11111 . 11111 ..... ..... @stlr # inc STLLR 323LDAR .. 001000 110 11111 . 11111 ..... ..... @stlr # inc LDLAR 324 325STXP 1 . 001000 001 ..... . ..... ..... ..... @stxp # inc STLXP 326LDXP 1 . 001000 011 ..... . ..... ..... ..... @stxp # inc LDAXP 327 328# CASP, CASPA, CASPAL, CASPL (we don't decode the bits that determine 329# acquire/release semantics because QEMU's cmpxchg always has those) 330CASP 0 . 001000 0 - 1 rs:5 - 11111 rn:5 rt:5 sz=%imm1_30_p2 331# CAS, CASA, CASAL, CASL 332CAS sz:2 001000 1 - 1 rs:5 - 11111 rn:5 rt:5 333 334&ldlit rt imm sz sign 335@ldlit .. ... . .. ................... rt:5 &ldlit imm=%imm19 336 337LD_lit 00 011 0 00 ................... ..... @ldlit sz=2 sign=0 338LD_lit 01 011 0 00 ................... ..... @ldlit sz=3 sign=0 339LD_lit 10 011 0 00 ................... ..... @ldlit sz=2 sign=1 340LD_lit_v 00 011 1 00 ................... ..... @ldlit sz=2 sign=0 341LD_lit_v 01 011 1 00 ................... ..... @ldlit sz=3 sign=0 342LD_lit_v 10 011 1 00 ................... ..... @ldlit sz=4 sign=0 343 344# PRFM 345NOP 11 011 0 00 ------------------- ----- 346 347&ldstpair rt2 rt rn imm sz sign w p 348@ldstpair .. ... . ... . imm:s7 rt2:5 rn:5 rt:5 &ldstpair 349 350# STNP, LDNP: Signed offset, non-temporal hint. We don't emulate caches 351# so we ignore hints about data access patterns, and handle these like 352# plain signed offset. 353STP 00 101 0 000 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 354LDP 00 101 0 000 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 355STP 10 101 0 000 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 356LDP 10 101 0 000 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 357STP_v 00 101 1 000 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 358LDP_v 00 101 1 000 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 359STP_v 01 101 1 000 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 360LDP_v 01 101 1 000 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 361STP_v 10 101 1 000 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0 362LDP_v 10 101 1 000 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0 363 364# STP and LDP: post-indexed 365STP 00 101 0 001 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1 366LDP 00 101 0 001 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1 367LDP 01 101 0 001 1 ....... ..... ..... ..... @ldstpair sz=2 sign=1 p=1 w=1 368STP 10 101 0 001 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1 369LDP 10 101 0 001 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1 370STP_v 00 101 1 001 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1 371LDP_v 00 101 1 001 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1 372STP_v 01 101 1 001 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1 373LDP_v 01 101 1 001 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1 374STP_v 10 101 1 001 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=1 w=1 375LDP_v 10 101 1 001 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=1 w=1 376 377# STP and LDP: offset 378STP 00 101 0 010 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 379LDP 00 101 0 010 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 380LDP 01 101 0 010 1 ....... ..... ..... ..... @ldstpair sz=2 sign=1 p=0 w=0 381STP 10 101 0 010 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 382LDP 10 101 0 010 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 383STP_v 00 101 1 010 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 384LDP_v 00 101 1 010 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 385STP_v 01 101 1 010 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 386LDP_v 01 101 1 010 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 387STP_v 10 101 1 010 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0 388LDP_v 10 101 1 010 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0 389 390# STP and LDP: pre-indexed 391STP 00 101 0 011 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1 392LDP 00 101 0 011 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1 393LDP 01 101 0 011 1 ....... ..... ..... ..... @ldstpair sz=2 sign=1 p=0 w=1 394STP 10 101 0 011 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1 395LDP 10 101 0 011 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1 396STP_v 00 101 1 011 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1 397LDP_v 00 101 1 011 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1 398STP_v 01 101 1 011 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1 399LDP_v 01 101 1 011 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1 400STP_v 10 101 1 011 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=1 401LDP_v 10 101 1 011 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=1 402 403# STGP: store tag and pair 404STGP 01 101 0 001 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1 405STGP 01 101 0 010 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 406STGP 01 101 0 011 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1 407 408# Load/store register (unscaled immediate) 409&ldst_imm rt rn imm sz sign w p unpriv ext 410@ldst_imm .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=0 p=0 w=0 411@ldst_imm_pre .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=0 p=0 w=1 412@ldst_imm_post .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=0 p=1 w=1 413@ldst_imm_user .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=1 p=0 w=0 414 415STR_i sz:2 111 0 00 00 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 416LDR_i 00 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=1 sz=0 417LDR_i 01 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=1 sz=1 418LDR_i 10 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=1 sz=2 419LDR_i 11 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 sz=3 420LDR_i 00 111 0 00 10 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=0 sz=0 421LDR_i 01 111 0 00 10 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=0 sz=1 422LDR_i 10 111 0 00 10 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=0 sz=2 423LDR_i 00 111 0 00 11 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=1 sz=0 424LDR_i 01 111 0 00 11 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=1 sz=1 425 426STR_i sz:2 111 0 00 00 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 427LDR_i 00 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=1 sz=0 428LDR_i 01 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=1 sz=1 429LDR_i 10 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=1 sz=2 430LDR_i 11 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 sz=3 431LDR_i 00 111 0 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=0 sz=0 432LDR_i 01 111 0 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=0 sz=1 433LDR_i 10 111 0 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=0 sz=2 434LDR_i 00 111 0 00 11 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=1 sz=0 435LDR_i 01 111 0 00 11 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=1 sz=1 436 437STR_i sz:2 111 0 00 00 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=0 438LDR_i 00 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=1 sz=0 439LDR_i 01 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=1 sz=1 440LDR_i 10 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=1 sz=2 441LDR_i 11 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=0 sz=3 442LDR_i 00 111 0 00 10 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=0 sz=0 443LDR_i 01 111 0 00 10 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=0 sz=1 444LDR_i 10 111 0 00 10 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=0 sz=2 445LDR_i 00 111 0 00 11 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=1 sz=0 446LDR_i 01 111 0 00 11 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=1 sz=1 447 448STR_i sz:2 111 0 00 00 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 449LDR_i 00 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=1 sz=0 450LDR_i 01 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=1 sz=1 451LDR_i 10 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=1 sz=2 452LDR_i 11 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 sz=3 453LDR_i 00 111 0 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=0 sz=0 454LDR_i 01 111 0 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=0 sz=1 455LDR_i 10 111 0 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=0 sz=2 456LDR_i 00 111 0 00 11 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=1 sz=0 457LDR_i 01 111 0 00 11 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=1 sz=1 458 459# PRFM : prefetch memory: a no-op for QEMU 460NOP 11 111 0 00 10 0 --------- 00 ----- ----- 461 462STR_v_i sz:2 111 1 00 00 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 463STR_v_i 00 111 1 00 10 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 sz=4 464LDR_v_i sz:2 111 1 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 465LDR_v_i 00 111 1 00 11 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 sz=4 466 467STR_v_i sz:2 111 1 00 00 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 468STR_v_i 00 111 1 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 sz=4 469LDR_v_i sz:2 111 1 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 470LDR_v_i 00 111 1 00 11 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 sz=4 471 472STR_v_i sz:2 111 1 00 00 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 473STR_v_i 00 111 1 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 sz=4 474LDR_v_i sz:2 111 1 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 475LDR_v_i 00 111 1 00 11 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 sz=4 476 477# Load/store with an unsigned 12 bit immediate, which is scaled by the 478# element size. The function gets the sz:imm and returns the scaled immediate. 479%uimm_scaled 10:12 sz:3 !function=uimm_scaled 480 481@ldst_uimm .. ... . .. .. ............ rn:5 rt:5 &ldst_imm unpriv=0 p=0 w=0 imm=%uimm_scaled 482 483STR_i sz:2 111 0 01 00 ............ ..... ..... @ldst_uimm sign=0 ext=0 484LDR_i 00 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=1 sz=0 485LDR_i 01 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=1 sz=1 486LDR_i 10 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=1 sz=2 487LDR_i 11 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=0 sz=3 488LDR_i 00 111 0 01 10 ............ ..... ..... @ldst_uimm sign=1 ext=0 sz=0 489LDR_i 01 111 0 01 10 ............ ..... ..... @ldst_uimm sign=1 ext=0 sz=1 490LDR_i 10 111 0 01 10 ............ ..... ..... @ldst_uimm sign=1 ext=0 sz=2 491LDR_i 00 111 0 01 11 ............ ..... ..... @ldst_uimm sign=1 ext=1 sz=0 492LDR_i 01 111 0 01 11 ............ ..... ..... @ldst_uimm sign=1 ext=1 sz=1 493 494# PRFM 495NOP 11 111 0 01 10 ------------ ----- ----- 496 497STR_v_i sz:2 111 1 01 00 ............ ..... ..... @ldst_uimm sign=0 ext=0 498STR_v_i 00 111 1 01 10 ............ ..... ..... @ldst_uimm sign=0 ext=0 sz=4 499LDR_v_i sz:2 111 1 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=0 500LDR_v_i 00 111 1 01 11 ............ ..... ..... @ldst_uimm sign=0 ext=0 sz=4 501 502# Load/store with register offset 503&ldst rm rn rt sign ext sz opt s 504@ldst .. ... . .. .. . rm:5 opt:3 s:1 .. rn:5 rt:5 &ldst 505STR sz:2 111 0 00 00 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 506LDR 00 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=1 sz=0 507LDR 01 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=1 sz=1 508LDR 10 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=1 sz=2 509LDR 11 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 sz=3 510LDR 00 111 0 00 10 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=0 sz=0 511LDR 01 111 0 00 10 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=0 sz=1 512LDR 10 111 0 00 10 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=0 sz=2 513LDR 00 111 0 00 11 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=1 sz=0 514LDR 01 111 0 00 11 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=1 sz=1 515 516# PRFM 517NOP 11 111 0 00 10 1 ----- -1- - 10 ----- ----- 518 519STR_v sz:2 111 1 00 00 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 520STR_v 00 111 1 00 10 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 sz=4 521LDR_v sz:2 111 1 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 522LDR_v 00 111 1 00 11 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 sz=4 523 524# Atomic memory operations 525&atomic rs rn rt a r sz 526@atomic sz:2 ... . .. a:1 r:1 . rs:5 . ... .. rn:5 rt:5 &atomic 527LDADD .. 111 0 00 . . 1 ..... 0000 00 ..... ..... @atomic 528LDCLR .. 111 0 00 . . 1 ..... 0001 00 ..... ..... @atomic 529LDEOR .. 111 0 00 . . 1 ..... 0010 00 ..... ..... @atomic 530LDSET .. 111 0 00 . . 1 ..... 0011 00 ..... ..... @atomic 531LDSMAX .. 111 0 00 . . 1 ..... 0100 00 ..... ..... @atomic 532LDSMIN .. 111 0 00 . . 1 ..... 0101 00 ..... ..... @atomic 533LDUMAX .. 111 0 00 . . 1 ..... 0110 00 ..... ..... @atomic 534LDUMIN .. 111 0 00 . . 1 ..... 0111 00 ..... ..... @atomic 535SWP .. 111 0 00 . . 1 ..... 1000 00 ..... ..... @atomic 536 537LDAPR sz:2 111 0 00 1 0 1 11111 1100 00 rn:5 rt:5 538 539# Load/store register (pointer authentication) 540 541# LDRA immediate is 10 bits signed and scaled, but the bits aren't all contiguous 542%ldra_imm 22:s1 12:9 !function=times_8 543 544LDRA 11 111 0 00 m:1 . 1 ......... w:1 1 rn:5 rt:5 imm=%ldra_imm 545 546&ldapr_stlr_i rn rt imm sz sign ext 547@ldapr_stlr_i .. ...... .. . imm:s9 .. rn:5 rt:5 &ldapr_stlr_i 548STLR_i sz:2 011001 00 0 ......... 00 ..... ..... @ldapr_stlr_i sign=0 ext=0 549LDAPR_i sz:2 011001 01 0 ......... 00 ..... ..... @ldapr_stlr_i sign=0 ext=0 550LDAPR_i 00 011001 10 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=0 sz=0 551LDAPR_i 01 011001 10 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=0 sz=1 552LDAPR_i 10 011001 10 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=0 sz=2 553LDAPR_i 00 011001 11 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=1 sz=0 554LDAPR_i 01 011001 11 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=1 sz=1 555 556# Load/store multiple structures 557# The 4-bit opcode in [15:12] encodes repeat count and structure elements 558&ldst_mult rm rn rt sz q p rpt selem 559@ldst_mult . q:1 ...... p:1 . . rm:5 .... sz:2 rn:5 rt:5 &ldst_mult 560ST_mult 0 . 001100 . 0 0 ..... 0000 .. ..... ..... @ldst_mult rpt=1 selem=4 561ST_mult 0 . 001100 . 0 0 ..... 0010 .. ..... ..... @ldst_mult rpt=4 selem=1 562ST_mult 0 . 001100 . 0 0 ..... 0100 .. ..... ..... @ldst_mult rpt=1 selem=3 563ST_mult 0 . 001100 . 0 0 ..... 0110 .. ..... ..... @ldst_mult rpt=3 selem=1 564ST_mult 0 . 001100 . 0 0 ..... 0111 .. ..... ..... @ldst_mult rpt=1 selem=1 565ST_mult 0 . 001100 . 0 0 ..... 1000 .. ..... ..... @ldst_mult rpt=1 selem=2 566ST_mult 0 . 001100 . 0 0 ..... 1010 .. ..... ..... @ldst_mult rpt=2 selem=1 567 568LD_mult 0 . 001100 . 1 0 ..... 0000 .. ..... ..... @ldst_mult rpt=1 selem=4 569LD_mult 0 . 001100 . 1 0 ..... 0010 .. ..... ..... @ldst_mult rpt=4 selem=1 570LD_mult 0 . 001100 . 1 0 ..... 0100 .. ..... ..... @ldst_mult rpt=1 selem=3 571LD_mult 0 . 001100 . 1 0 ..... 0110 .. ..... ..... @ldst_mult rpt=3 selem=1 572LD_mult 0 . 001100 . 1 0 ..... 0111 .. ..... ..... @ldst_mult rpt=1 selem=1 573LD_mult 0 . 001100 . 1 0 ..... 1000 .. ..... ..... @ldst_mult rpt=1 selem=2 574LD_mult 0 . 001100 . 1 0 ..... 1010 .. ..... ..... @ldst_mult rpt=2 selem=1 575 576# Load/store single structure 577&ldst_single rm rn rt p selem index scale 578 579%ldst_single_selem 13:1 21:1 !function=plus_1 580 581%ldst_single_index_b 30:1 10:3 582%ldst_single_index_h 30:1 11:2 583%ldst_single_index_s 30:1 12:1 584 585@ldst_single_b .. ...... p:1 .. rm:5 ...... rn:5 rt:5 \ 586 &ldst_single scale=0 selem=%ldst_single_selem \ 587 index=%ldst_single_index_b 588@ldst_single_h .. ...... p:1 .. rm:5 ...... rn:5 rt:5 \ 589 &ldst_single scale=1 selem=%ldst_single_selem \ 590 index=%ldst_single_index_h 591@ldst_single_s .. ...... p:1 .. rm:5 ...... rn:5 rt:5 \ 592 &ldst_single scale=2 selem=%ldst_single_selem \ 593 index=%ldst_single_index_s 594@ldst_single_d . index:1 ...... p:1 .. rm:5 ...... rn:5 rt:5 \ 595 &ldst_single scale=3 selem=%ldst_single_selem 596 597ST_single 0 . 001101 . 0 . ..... 00 . ... ..... ..... @ldst_single_b 598ST_single 0 . 001101 . 0 . ..... 01 . ..0 ..... ..... @ldst_single_h 599ST_single 0 . 001101 . 0 . ..... 10 . .00 ..... ..... @ldst_single_s 600ST_single 0 . 001101 . 0 . ..... 10 . 001 ..... ..... @ldst_single_d 601 602LD_single 0 . 001101 . 1 . ..... 00 . ... ..... ..... @ldst_single_b 603LD_single 0 . 001101 . 1 . ..... 01 . ..0 ..... ..... @ldst_single_h 604LD_single 0 . 001101 . 1 . ..... 10 . .00 ..... ..... @ldst_single_s 605LD_single 0 . 001101 . 1 . ..... 10 . 001 ..... ..... @ldst_single_d 606 607# Replicating load case 608LD_single_repl 0 q:1 001101 p:1 1 . rm:5 11 . 0 scale:2 rn:5 rt:5 selem=%ldst_single_selem 609 610%tag_offset 12:s9 !function=scale_by_log2_tag_granule 611&ldst_tag rn rt imm p w 612@ldst_tag ........ .. . ......... .. rn:5 rt:5 &ldst_tag imm=%tag_offset 613@ldst_tag_mult ........ .. . 000000000 .. rn:5 rt:5 &ldst_tag imm=0 614 615STZGM 11011001 00 1 ......... 00 ..... ..... @ldst_tag_mult p=0 w=0 616STG 11011001 00 1 ......... 01 ..... ..... @ldst_tag p=1 w=1 617STG 11011001 00 1 ......... 10 ..... ..... @ldst_tag p=0 w=0 618STG 11011001 00 1 ......... 11 ..... ..... @ldst_tag p=0 w=1 619 620LDG 11011001 01 1 ......... 00 ..... ..... @ldst_tag p=0 w=0 621STZG 11011001 01 1 ......... 01 ..... ..... @ldst_tag p=1 w=1 622STZG 11011001 01 1 ......... 10 ..... ..... @ldst_tag p=0 w=0 623STZG 11011001 01 1 ......... 11 ..... ..... @ldst_tag p=0 w=1 624 625STGM 11011001 10 1 ......... 00 ..... ..... @ldst_tag_mult p=0 w=0 626ST2G 11011001 10 1 ......... 01 ..... ..... @ldst_tag p=1 w=1 627ST2G 11011001 10 1 ......... 10 ..... ..... @ldst_tag p=0 w=0 628ST2G 11011001 10 1 ......... 11 ..... ..... @ldst_tag p=0 w=1 629 630LDGM 11011001 11 1 ......... 00 ..... ..... @ldst_tag_mult p=0 w=0 631STZ2G 11011001 11 1 ......... 01 ..... ..... @ldst_tag p=1 w=1 632STZ2G 11011001 11 1 ......... 10 ..... ..... @ldst_tag p=0 w=0 633STZ2G 11011001 11 1 ......... 11 ..... ..... @ldst_tag p=0 w=1 634 635# Memory operations (memset, memcpy, memmove) 636# Each of these comes in a set of three, eg SETP (prologue), SETM (main), 637# SETE (epilogue), and each of those has different flavours to 638# indicate whether memory accesses should be unpriv or non-temporal. 639# We don't distinguish temporal and non-temporal accesses, but we 640# do need to report it in syndrome register values. 641 642# Memset 643&set rs rn rd unpriv nontemp 644# op2 bit 1 is nontemporal bit 645@set .. ......... rs:5 .. nontemp:1 unpriv:1 .. rn:5 rd:5 &set 646 647SETP 00 011001110 ..... 00 . . 01 ..... ..... @set 648SETM 00 011001110 ..... 01 . . 01 ..... ..... @set 649SETE 00 011001110 ..... 10 . . 01 ..... ..... @set 650 651# Like SET, but also setting MTE tags 652SETGP 00 011101110 ..... 00 . . 01 ..... ..... @set 653SETGM 00 011101110 ..... 01 . . 01 ..... ..... @set 654SETGE 00 011101110 ..... 10 . . 01 ..... ..... @set 655 656# Memmove/Memcopy: the CPY insns allow overlapping src/dest and 657# copy in the correct direction; the CPYF insns always copy forwards. 658# 659# options has the nontemporal and unpriv bits for src and dest 660&cpy rs rn rd options 661@cpy .. ... . ..... rs:5 options:4 .. rn:5 rd:5 &cpy 662 663CPYFP 00 011 0 01000 ..... .... 01 ..... ..... @cpy 664CPYFM 00 011 0 01010 ..... .... 01 ..... ..... @cpy 665CPYFE 00 011 0 01100 ..... .... 01 ..... ..... @cpy 666CPYP 00 011 1 01000 ..... .... 01 ..... ..... @cpy 667CPYM 00 011 1 01010 ..... .... 01 ..... ..... @cpy 668CPYE 00 011 1 01100 ..... .... 01 ..... ..... @cpy 669 670### Data Processing (register) 671 672# Data Processing (2-source) 673 674@rrr . .......... rm:5 ...... rn:5 rd:5 &rrr 675@rrr_sf sf:1 .......... rm:5 ...... rn:5 rd:5 &rrr_sf 676 677UDIV . 00 11010110 ..... 00001 0 ..... ..... @rrr_sf 678SDIV . 00 11010110 ..... 00001 1 ..... ..... @rrr_sf 679LSLV . 00 11010110 ..... 00100 0 ..... ..... @rrr_sf 680LSRV . 00 11010110 ..... 00100 1 ..... ..... @rrr_sf 681ASRV . 00 11010110 ..... 00101 0 ..... ..... @rrr_sf 682RORV . 00 11010110 ..... 00101 1 ..... ..... @rrr_sf 683 684CRC32 0 00 11010110 ..... 0100 00 ..... ..... @rrr_b 685CRC32 0 00 11010110 ..... 0100 01 ..... ..... @rrr_h 686CRC32 0 00 11010110 ..... 0100 10 ..... ..... @rrr_s 687CRC32 1 00 11010110 ..... 0100 11 ..... ..... @rrr_d 688 689CRC32C 0 00 11010110 ..... 0101 00 ..... ..... @rrr_b 690CRC32C 0 00 11010110 ..... 0101 01 ..... ..... @rrr_h 691CRC32C 0 00 11010110 ..... 0101 10 ..... ..... @rrr_s 692CRC32C 1 00 11010110 ..... 0101 11 ..... ..... @rrr_d 693 694SUBP 1 00 11010110 ..... 000000 ..... ..... @rrr 695SUBPS 1 01 11010110 ..... 000000 ..... ..... @rrr 696IRG 1 00 11010110 ..... 000100 ..... ..... @rrr 697GMI 1 00 11010110 ..... 000101 ..... ..... @rrr 698 699PACGA 1 00 11010110 ..... 001100 ..... ..... @rrr 700 701# Data Processing (1-source) 702 703@rr . .......... ..... ...... rn:5 rd:5 &rr 704@rr_sf sf:1 .......... ..... ...... rn:5 rd:5 &rr_sf 705 706RBIT . 10 11010110 00000 000000 ..... ..... @rr_sf 707REV16 . 10 11010110 00000 000001 ..... ..... @rr_sf 708REV32 . 10 11010110 00000 000010 ..... ..... @rr_sf 709REV64 1 10 11010110 00000 000011 ..... ..... @rr 710 711CLZ . 10 11010110 00000 000100 ..... ..... @rr_sf 712CLS . 10 11010110 00000 000101 ..... ..... @rr_sf 713 714&pacaut rd rn z 715@pacaut . .. ........ ..... .. z:1 ... rn:5 rd:5 &pacaut 716 717PACIA 1 10 11010110 00001 00.000 ..... ..... @pacaut 718PACIB 1 10 11010110 00001 00.001 ..... ..... @pacaut 719PACDA 1 10 11010110 00001 00.010 ..... ..... @pacaut 720PACDB 1 10 11010110 00001 00.011 ..... ..... @pacaut 721 722AUTIA 1 10 11010110 00001 00.100 ..... ..... @pacaut 723AUTIB 1 10 11010110 00001 00.101 ..... ..... @pacaut 724AUTDA 1 10 11010110 00001 00.110 ..... ..... @pacaut 725AUTDB 1 10 11010110 00001 00.111 ..... ..... @pacaut 726 727XPACI 1 10 11010110 00001 010000 11111 rd:5 728XPACD 1 10 11010110 00001 010001 11111 rd:5 729 730# Logical (shifted reg) 731 732&logic_shift rd rn rm sf sa st n 733@logic_shift sf:1 .. ..... st:2 n:1 rm:5 sa:6 rn:5 rd:5 &logic_shift 734 735AND_r . 00 01010 .. . ..... ...... ..... ..... @logic_shift 736ORR_r . 01 01010 .. . ..... ...... ..... ..... @logic_shift 737EOR_r . 10 01010 .. . ..... ...... ..... ..... @logic_shift 738ANDS_r . 11 01010 .. . ..... ...... ..... ..... @logic_shift 739 740# Add/subtract (shifted reg) 741 742&addsub_shift rd rn rm sf sa st 743@addsub_shift sf:1 .. ..... st:2 . rm:5 sa:6 rn:5 rd:5 &addsub_shift 744 745ADD_r . 00 01011 .. 0 ..... ...... ..... ..... @addsub_shift 746SUB_r . 10 01011 .. 0 ..... ...... ..... ..... @addsub_shift 747ADDS_r . 01 01011 .. 0 ..... ...... ..... ..... @addsub_shift 748SUBS_r . 11 01011 .. 0 ..... ...... ..... ..... @addsub_shift 749 750# Add/subtract (extended reg) 751 752&addsub_ext rd rn rm sf sa st 753@addsub_ext sf:1 .. ........ rm:5 st:3 sa:3 rn:5 rd:5 &addsub_ext 754 755ADD_ext . 00 01011001 ..... ... ... ..... ..... @addsub_ext 756SUB_ext . 10 01011001 ..... ... ... ..... ..... @addsub_ext 757ADDS_ext . 01 01011001 ..... ... ... ..... ..... @addsub_ext 758SUBS_ext . 11 01011001 ..... ... ... ..... ..... @addsub_ext 759 760# Add/subtract (carry) 761 762ADC . 00 11010000 ..... 000000 ..... ..... @rrr_sf 763ADCS . 01 11010000 ..... 000000 ..... ..... @rrr_sf 764SBC . 10 11010000 ..... 000000 ..... ..... @rrr_sf 765SBCS . 11 11010000 ..... 000000 ..... ..... @rrr_sf 766 767# Rotate right into flags 768 769RMIF 1 01 11010000 imm:6 00001 rn:5 0 mask:4 770 771# Evaluate into flags 772 773SETF8 0 01 11010000 00000 000010 rn:5 01101 774SETF16 0 01 11010000 00000 010010 rn:5 01101 775 776# Conditional compare 777 778CCMP sf:1 op:1 1 11010010 y:5 cond:4 imm:1 0 rn:5 0 nzcv:4 779 780# Conditional select 781 782CSEL sf:1 else_inv:1 011010100 rm:5 cond:4 0 else_inc:1 rn:5 rd:5 783 784# Data Processing (3-source) 785 786&rrrr rd rn rm ra 787@rrrr . .. ........ rm:5 . ra:5 rn:5 rd:5 &rrrr 788 789MADD_w 0 00 11011000 ..... 0 ..... ..... ..... @rrrr 790MSUB_w 0 00 11011000 ..... 1 ..... ..... ..... @rrrr 791MADD_x 1 00 11011000 ..... 0 ..... ..... ..... @rrrr 792MSUB_x 1 00 11011000 ..... 1 ..... ..... ..... @rrrr 793 794SMADDL 1 00 11011001 ..... 0 ..... ..... ..... @rrrr 795SMSUBL 1 00 11011001 ..... 1 ..... ..... ..... @rrrr 796UMADDL 1 00 11011101 ..... 0 ..... ..... ..... @rrrr 797UMSUBL 1 00 11011101 ..... 1 ..... ..... ..... @rrrr 798 799SMULH 1 00 11011010 ..... 0 11111 ..... ..... @rrr 800UMULH 1 00 11011110 ..... 0 11111 ..... ..... @rrr 801 802### Cryptographic AES 803 804AESE 01001110 00 10100 00100 10 ..... ..... @r2r_q1e0 805AESD 01001110 00 10100 00101 10 ..... ..... @r2r_q1e0 806AESMC 01001110 00 10100 00110 10 ..... ..... @rr_q1e0 807AESIMC 01001110 00 10100 00111 10 ..... ..... @rr_q1e0 808 809### Cryptographic three-register SHA 810 811SHA1C 0101 1110 000 ..... 000000 ..... ..... @rrr_q1e0 812SHA1P 0101 1110 000 ..... 000100 ..... ..... @rrr_q1e0 813SHA1M 0101 1110 000 ..... 001000 ..... ..... @rrr_q1e0 814SHA1SU0 0101 1110 000 ..... 001100 ..... ..... @rrr_q1e0 815SHA256H 0101 1110 000 ..... 010000 ..... ..... @rrr_q1e0 816SHA256H2 0101 1110 000 ..... 010100 ..... ..... @rrr_q1e0 817SHA256SU1 0101 1110 000 ..... 011000 ..... ..... @rrr_q1e0 818 819### Cryptographic two-register SHA 820 821SHA1H 0101 1110 0010 1000 0000 10 ..... ..... @rr_q1e0 822SHA1SU1 0101 1110 0010 1000 0001 10 ..... ..... @rr_q1e0 823SHA256SU0 0101 1110 0010 1000 0010 10 ..... ..... @rr_q1e0 824 825### Cryptographic three-register SHA512 826 827SHA512H 1100 1110 011 ..... 100000 ..... ..... @rrr_q1e0 828SHA512H2 1100 1110 011 ..... 100001 ..... ..... @rrr_q1e0 829SHA512SU1 1100 1110 011 ..... 100010 ..... ..... @rrr_q1e0 830RAX1 1100 1110 011 ..... 100011 ..... ..... @rrr_q1e3 831SM3PARTW1 1100 1110 011 ..... 110000 ..... ..... @rrr_q1e0 832SM3PARTW2 1100 1110 011 ..... 110001 ..... ..... @rrr_q1e0 833SM4EKEY 1100 1110 011 ..... 110010 ..... ..... @rrr_q1e0 834 835### Cryptographic two-register SHA512 836 837SHA512SU0 1100 1110 110 00000 100000 ..... ..... @rr_q1e0 838SM4E 1100 1110 110 00000 100001 ..... ..... @r2r_q1e0 839 840### Cryptographic four-register 841 842EOR3 1100 1110 000 ..... 0 ..... ..... ..... @rrrr_q1e3 843BCAX 1100 1110 001 ..... 0 ..... ..... ..... @rrrr_q1e3 844SM3SS1 1100 1110 010 ..... 0 ..... ..... ..... @rrrr_q1e3 845 846### Cryptographic three-register, imm2 847 848&crypto3i rd rn rm imm 849@crypto3i ........ ... rm:5 .. imm:2 .. rn:5 rd:5 &crypto3i 850 851SM3TT1A 11001110 010 ..... 10 .. 00 ..... ..... @crypto3i 852SM3TT1B 11001110 010 ..... 10 .. 01 ..... ..... @crypto3i 853SM3TT2A 11001110 010 ..... 10 .. 10 ..... ..... @crypto3i 854SM3TT2B 11001110 010 ..... 10 .. 11 ..... ..... @crypto3i 855 856### Cryptographic XAR 857 858XAR 1100 1110 100 rm:5 imm:6 rn:5 rd:5 859 860### Advanced SIMD scalar copy 861 862DUP_element_s 0101 1110 000 imm:5 0 0000 1 rn:5 rd:5 863 864### Advanced SIMD copy 865 866DUP_element_v 0 q:1 00 1110 000 imm:5 0 0000 1 rn:5 rd:5 867DUP_general 0 q:1 00 1110 000 imm:5 0 0001 1 rn:5 rd:5 868INS_general 0 1 00 1110 000 imm:5 0 0011 1 rn:5 rd:5 869SMOV 0 q:1 00 1110 000 imm:5 0 0101 1 rn:5 rd:5 870UMOV 0 q:1 00 1110 000 imm:5 0 0111 1 rn:5 rd:5 871INS_element 0 1 10 1110 000 di:5 0 si:4 1 rn:5 rd:5 872 873### Advanced SIMD scalar three same 874 875FADD_s 0001 1110 ..1 ..... 0010 10 ..... ..... @rrr_hsd 876FSUB_s 0001 1110 ..1 ..... 0011 10 ..... ..... @rrr_hsd 877FDIV_s 0001 1110 ..1 ..... 0001 10 ..... ..... @rrr_hsd 878FMUL_s 0001 1110 ..1 ..... 0000 10 ..... ..... @rrr_hsd 879FNMUL_s 0001 1110 ..1 ..... 1000 10 ..... ..... @rrr_hsd 880 881FMAX_s 0001 1110 ..1 ..... 0100 10 ..... ..... @rrr_hsd 882FMIN_s 0001 1110 ..1 ..... 0101 10 ..... ..... @rrr_hsd 883FMAXNM_s 0001 1110 ..1 ..... 0110 10 ..... ..... @rrr_hsd 884FMINNM_s 0001 1110 ..1 ..... 0111 10 ..... ..... @rrr_hsd 885 886FMULX_s 0101 1110 010 ..... 00011 1 ..... ..... @rrr_h 887FMULX_s 0101 1110 0.1 ..... 11011 1 ..... ..... @rrr_sd 888 889FCMEQ_s 0101 1110 010 ..... 00100 1 ..... ..... @rrr_h 890FCMEQ_s 0101 1110 0.1 ..... 11100 1 ..... ..... @rrr_sd 891 892FCMGE_s 0111 1110 010 ..... 00100 1 ..... ..... @rrr_h 893FCMGE_s 0111 1110 0.1 ..... 11100 1 ..... ..... @rrr_sd 894 895FCMGT_s 0111 1110 110 ..... 00100 1 ..... ..... @rrr_h 896FCMGT_s 0111 1110 1.1 ..... 11100 1 ..... ..... @rrr_sd 897 898FACGE_s 0111 1110 010 ..... 00101 1 ..... ..... @rrr_h 899FACGE_s 0111 1110 0.1 ..... 11101 1 ..... ..... @rrr_sd 900 901FACGT_s 0111 1110 110 ..... 00101 1 ..... ..... @rrr_h 902FACGT_s 0111 1110 1.1 ..... 11101 1 ..... ..... @rrr_sd 903 904FABD_s 0111 1110 110 ..... 00010 1 ..... ..... @rrr_h 905FABD_s 0111 1110 1.1 ..... 11010 1 ..... ..... @rrr_sd 906 907FRECPS_s 0101 1110 010 ..... 00111 1 ..... ..... @rrr_h 908FRECPS_s 0101 1110 0.1 ..... 11111 1 ..... ..... @rrr_sd 909 910FRSQRTS_s 0101 1110 110 ..... 00111 1 ..... ..... @rrr_h 911FRSQRTS_s 0101 1110 1.1 ..... 11111 1 ..... ..... @rrr_sd 912 913SQADD_s 0101 1110 ..1 ..... 00001 1 ..... ..... @rrr_e 914UQADD_s 0111 1110 ..1 ..... 00001 1 ..... ..... @rrr_e 915SQSUB_s 0101 1110 ..1 ..... 00101 1 ..... ..... @rrr_e 916UQSUB_s 0111 1110 ..1 ..... 00101 1 ..... ..... @rrr_e 917 918SUQADD_s 0101 1110 ..1 00000 00111 0 ..... ..... @r2r_e 919USQADD_s 0111 1110 ..1 00000 00111 0 ..... ..... @r2r_e 920 921SSHL_s 0101 1110 111 ..... 01000 1 ..... ..... @rrr_d 922USHL_s 0111 1110 111 ..... 01000 1 ..... ..... @rrr_d 923SRSHL_s 0101 1110 111 ..... 01010 1 ..... ..... @rrr_d 924URSHL_s 0111 1110 111 ..... 01010 1 ..... ..... @rrr_d 925SQSHL_s 0101 1110 ..1 ..... 01001 1 ..... ..... @rrr_e 926UQSHL_s 0111 1110 ..1 ..... 01001 1 ..... ..... @rrr_e 927SQRSHL_s 0101 1110 ..1 ..... 01011 1 ..... ..... @rrr_e 928UQRSHL_s 0111 1110 ..1 ..... 01011 1 ..... ..... @rrr_e 929 930ADD_s 0101 1110 111 ..... 10000 1 ..... ..... @rrr_d 931SUB_s 0111 1110 111 ..... 10000 1 ..... ..... @rrr_d 932CMGT_s 0101 1110 111 ..... 00110 1 ..... ..... @rrr_d 933CMHI_s 0111 1110 111 ..... 00110 1 ..... ..... @rrr_d 934CMGE_s 0101 1110 111 ..... 00111 1 ..... ..... @rrr_d 935CMHS_s 0111 1110 111 ..... 00111 1 ..... ..... @rrr_d 936CMTST_s 0101 1110 111 ..... 10001 1 ..... ..... @rrr_d 937CMEQ_s 0111 1110 111 ..... 10001 1 ..... ..... @rrr_d 938 939SQDMULH_s 0101 1110 ..1 ..... 10110 1 ..... ..... @rrr_e 940SQRDMULH_s 0111 1110 ..1 ..... 10110 1 ..... ..... @rrr_e 941SQRDMLAH_s 0111 1110 ..0 ..... 10000 1 ..... ..... @rrr_e 942SQRDMLSH_s 0111 1110 ..0 ..... 10001 1 ..... ..... @rrr_e 943 944# Decode scalar x scalar as scalar x indexed, with index 0. 945SQDMULL_si 0101 1110 011 rm:5 11010 0 rn:5 rd:5 &rrx_e idx=0 esz=1 946SQDMULL_si 0101 1110 101 rm:5 11010 0 rn:5 rd:5 &rrx_e idx=0 esz=2 947SQDMLAL_si 0101 1110 011 rm:5 10010 0 rn:5 rd:5 &rrx_e idx=0 esz=1 948SQDMLAL_si 0101 1110 101 rm:5 10010 0 rn:5 rd:5 &rrx_e idx=0 esz=2 949SQDMLSL_si 0101 1110 011 rm:5 10110 0 rn:5 rd:5 &rrx_e idx=0 esz=1 950SQDMLSL_si 0101 1110 101 rm:5 10110 0 rn:5 rd:5 &rrx_e idx=0 esz=2 951 952### Advanced SIMD scalar pairwise 953 954FADDP_s 0101 1110 0011 0000 1101 10 ..... ..... @rr_h 955FADDP_s 0111 1110 0.11 0000 1101 10 ..... ..... @rr_sd 956 957FMAXP_s 0101 1110 0011 0000 1111 10 ..... ..... @rr_h 958FMAXP_s 0111 1110 0.11 0000 1111 10 ..... ..... @rr_sd 959 960FMINP_s 0101 1110 1011 0000 1111 10 ..... ..... @rr_h 961FMINP_s 0111 1110 1.11 0000 1111 10 ..... ..... @rr_sd 962 963FMAXNMP_s 0101 1110 0011 0000 1100 10 ..... ..... @rr_h 964FMAXNMP_s 0111 1110 0.11 0000 1100 10 ..... ..... @rr_sd 965 966FMINNMP_s 0101 1110 1011 0000 1100 10 ..... ..... @rr_h 967FMINNMP_s 0111 1110 1.11 0000 1100 10 ..... ..... @rr_sd 968 969ADDP_s 0101 1110 1111 0001 1011 10 ..... ..... @rr_d 970 971### Advanced SIMD three same 972 973FADD_v 0.00 1110 010 ..... 00010 1 ..... ..... @qrrr_h 974FADD_v 0.00 1110 0.1 ..... 11010 1 ..... ..... @qrrr_sd 975 976FSUB_v 0.00 1110 110 ..... 00010 1 ..... ..... @qrrr_h 977FSUB_v 0.00 1110 1.1 ..... 11010 1 ..... ..... @qrrr_sd 978 979FDIV_v 0.10 1110 010 ..... 00111 1 ..... ..... @qrrr_h 980FDIV_v 0.10 1110 0.1 ..... 11111 1 ..... ..... @qrrr_sd 981 982FMUL_v 0.10 1110 010 ..... 00011 1 ..... ..... @qrrr_h 983FMUL_v 0.10 1110 0.1 ..... 11011 1 ..... ..... @qrrr_sd 984 985FMAX_v 0.00 1110 010 ..... 00110 1 ..... ..... @qrrr_h 986FMAX_v 0.00 1110 0.1 ..... 11110 1 ..... ..... @qrrr_sd 987 988FMIN_v 0.00 1110 110 ..... 00110 1 ..... ..... @qrrr_h 989FMIN_v 0.00 1110 1.1 ..... 11110 1 ..... ..... @qrrr_sd 990 991FMAXNM_v 0.00 1110 010 ..... 00000 1 ..... ..... @qrrr_h 992FMAXNM_v 0.00 1110 0.1 ..... 11000 1 ..... ..... @qrrr_sd 993 994FMINNM_v 0.00 1110 110 ..... 00000 1 ..... ..... @qrrr_h 995FMINNM_v 0.00 1110 1.1 ..... 11000 1 ..... ..... @qrrr_sd 996 997FMULX_v 0.00 1110 010 ..... 00011 1 ..... ..... @qrrr_h 998FMULX_v 0.00 1110 0.1 ..... 11011 1 ..... ..... @qrrr_sd 999 1000FMLA_v 0.00 1110 010 ..... 00001 1 ..... ..... @qrrr_h 1001FMLA_v 0.00 1110 0.1 ..... 11001 1 ..... ..... @qrrr_sd 1002 1003FMLS_v 0.00 1110 110 ..... 00001 1 ..... ..... @qrrr_h 1004FMLS_v 0.00 1110 1.1 ..... 11001 1 ..... ..... @qrrr_sd 1005 1006FMLAL_v 0.00 1110 001 ..... 11101 1 ..... ..... @qrrr_h 1007FMLSL_v 0.00 1110 101 ..... 11101 1 ..... ..... @qrrr_h 1008FMLAL2_v 0.10 1110 001 ..... 11001 1 ..... ..... @qrrr_h 1009FMLSL2_v 0.10 1110 101 ..... 11001 1 ..... ..... @qrrr_h 1010 1011FCMEQ_v 0.00 1110 010 ..... 00100 1 ..... ..... @qrrr_h 1012FCMEQ_v 0.00 1110 0.1 ..... 11100 1 ..... ..... @qrrr_sd 1013 1014FCMGE_v 0.10 1110 010 ..... 00100 1 ..... ..... @qrrr_h 1015FCMGE_v 0.10 1110 0.1 ..... 11100 1 ..... ..... @qrrr_sd 1016 1017FCMGT_v 0.10 1110 110 ..... 00100 1 ..... ..... @qrrr_h 1018FCMGT_v 0.10 1110 1.1 ..... 11100 1 ..... ..... @qrrr_sd 1019 1020FACGE_v 0.10 1110 010 ..... 00101 1 ..... ..... @qrrr_h 1021FACGE_v 0.10 1110 0.1 ..... 11101 1 ..... ..... @qrrr_sd 1022 1023FACGT_v 0.10 1110 110 ..... 00101 1 ..... ..... @qrrr_h 1024FACGT_v 0.10 1110 1.1 ..... 11101 1 ..... ..... @qrrr_sd 1025 1026FABD_v 0.10 1110 110 ..... 00010 1 ..... ..... @qrrr_h 1027FABD_v 0.10 1110 1.1 ..... 11010 1 ..... ..... @qrrr_sd 1028 1029FRECPS_v 0.00 1110 010 ..... 00111 1 ..... ..... @qrrr_h 1030FRECPS_v 0.00 1110 0.1 ..... 11111 1 ..... ..... @qrrr_sd 1031 1032FRSQRTS_v 0.00 1110 110 ..... 00111 1 ..... ..... @qrrr_h 1033FRSQRTS_v 0.00 1110 1.1 ..... 11111 1 ..... ..... @qrrr_sd 1034 1035FADDP_v 0.10 1110 010 ..... 00010 1 ..... ..... @qrrr_h 1036FADDP_v 0.10 1110 0.1 ..... 11010 1 ..... ..... @qrrr_sd 1037 1038FMAXP_v 0.10 1110 010 ..... 00110 1 ..... ..... @qrrr_h 1039FMAXP_v 0.10 1110 0.1 ..... 11110 1 ..... ..... @qrrr_sd 1040 1041FMINP_v 0.10 1110 110 ..... 00110 1 ..... ..... @qrrr_h 1042FMINP_v 0.10 1110 1.1 ..... 11110 1 ..... ..... @qrrr_sd 1043 1044FMAXNMP_v 0.10 1110 010 ..... 00000 1 ..... ..... @qrrr_h 1045FMAXNMP_v 0.10 1110 0.1 ..... 11000 1 ..... ..... @qrrr_sd 1046 1047FMINNMP_v 0.10 1110 110 ..... 00000 1 ..... ..... @qrrr_h 1048FMINNMP_v 0.10 1110 1.1 ..... 11000 1 ..... ..... @qrrr_sd 1049 1050ADDP_v 0.00 1110 ..1 ..... 10111 1 ..... ..... @qrrr_e 1051SMAXP_v 0.00 1110 ..1 ..... 10100 1 ..... ..... @qrrr_e 1052SMINP_v 0.00 1110 ..1 ..... 10101 1 ..... ..... @qrrr_e 1053UMAXP_v 0.10 1110 ..1 ..... 10100 1 ..... ..... @qrrr_e 1054UMINP_v 0.10 1110 ..1 ..... 10101 1 ..... ..... @qrrr_e 1055 1056AND_v 0.00 1110 001 ..... 00011 1 ..... ..... @qrrr_b 1057BIC_v 0.00 1110 011 ..... 00011 1 ..... ..... @qrrr_b 1058ORR_v 0.00 1110 101 ..... 00011 1 ..... ..... @qrrr_b 1059ORN_v 0.00 1110 111 ..... 00011 1 ..... ..... @qrrr_b 1060EOR_v 0.10 1110 001 ..... 00011 1 ..... ..... @qrrr_b 1061BSL_v 0.10 1110 011 ..... 00011 1 ..... ..... @qrrr_b 1062BIT_v 0.10 1110 101 ..... 00011 1 ..... ..... @qrrr_b 1063BIF_v 0.10 1110 111 ..... 00011 1 ..... ..... @qrrr_b 1064 1065SQADD_v 0.00 1110 ..1 ..... 00001 1 ..... ..... @qrrr_e 1066UQADD_v 0.10 1110 ..1 ..... 00001 1 ..... ..... @qrrr_e 1067SQSUB_v 0.00 1110 ..1 ..... 00101 1 ..... ..... @qrrr_e 1068UQSUB_v 0.10 1110 ..1 ..... 00101 1 ..... ..... @qrrr_e 1069 1070SUQADD_v 0.00 1110 ..1 00000 00111 0 ..... ..... @qr2r_e 1071USQADD_v 0.10 1110 ..1 00000 00111 0 ..... ..... @qr2r_e 1072 1073SSHL_v 0.00 1110 ..1 ..... 01000 1 ..... ..... @qrrr_e 1074USHL_v 0.10 1110 ..1 ..... 01000 1 ..... ..... @qrrr_e 1075SRSHL_v 0.00 1110 ..1 ..... 01010 1 ..... ..... @qrrr_e 1076URSHL_v 0.10 1110 ..1 ..... 01010 1 ..... ..... @qrrr_e 1077SQSHL_v 0.00 1110 ..1 ..... 01001 1 ..... ..... @qrrr_e 1078UQSHL_v 0.10 1110 ..1 ..... 01001 1 ..... ..... @qrrr_e 1079SQRSHL_v 0.00 1110 ..1 ..... 01011 1 ..... ..... @qrrr_e 1080UQRSHL_v 0.10 1110 ..1 ..... 01011 1 ..... ..... @qrrr_e 1081 1082ADD_v 0.00 1110 ..1 ..... 10000 1 ..... ..... @qrrr_e 1083SUB_v 0.10 1110 ..1 ..... 10000 1 ..... ..... @qrrr_e 1084CMGT_v 0.00 1110 ..1 ..... 00110 1 ..... ..... @qrrr_e 1085CMHI_v 0.10 1110 ..1 ..... 00110 1 ..... ..... @qrrr_e 1086CMGE_v 0.00 1110 ..1 ..... 00111 1 ..... ..... @qrrr_e 1087CMHS_v 0.10 1110 ..1 ..... 00111 1 ..... ..... @qrrr_e 1088CMTST_v 0.00 1110 ..1 ..... 10001 1 ..... ..... @qrrr_e 1089CMEQ_v 0.10 1110 ..1 ..... 10001 1 ..... ..... @qrrr_e 1090SHADD_v 0.00 1110 ..1 ..... 00000 1 ..... ..... @qrrr_e 1091UHADD_v 0.10 1110 ..1 ..... 00000 1 ..... ..... @qrrr_e 1092SHSUB_v 0.00 1110 ..1 ..... 00100 1 ..... ..... @qrrr_e 1093UHSUB_v 0.10 1110 ..1 ..... 00100 1 ..... ..... @qrrr_e 1094SRHADD_v 0.00 1110 ..1 ..... 00010 1 ..... ..... @qrrr_e 1095URHADD_v 0.10 1110 ..1 ..... 00010 1 ..... ..... @qrrr_e 1096SMAX_v 0.00 1110 ..1 ..... 01100 1 ..... ..... @qrrr_e 1097UMAX_v 0.10 1110 ..1 ..... 01100 1 ..... ..... @qrrr_e 1098SMIN_v 0.00 1110 ..1 ..... 01101 1 ..... ..... @qrrr_e 1099UMIN_v 0.10 1110 ..1 ..... 01101 1 ..... ..... @qrrr_e 1100SABD_v 0.00 1110 ..1 ..... 01110 1 ..... ..... @qrrr_e 1101UABD_v 0.10 1110 ..1 ..... 01110 1 ..... ..... @qrrr_e 1102SABA_v 0.00 1110 ..1 ..... 01111 1 ..... ..... @qrrr_e 1103UABA_v 0.10 1110 ..1 ..... 01111 1 ..... ..... @qrrr_e 1104MUL_v 0.00 1110 ..1 ..... 10011 1 ..... ..... @qrrr_e 1105PMUL_v 0.10 1110 001 ..... 10011 1 ..... ..... @qrrr_b 1106MLA_v 0.00 1110 ..1 ..... 10010 1 ..... ..... @qrrr_e 1107MLS_v 0.10 1110 ..1 ..... 10010 1 ..... ..... @qrrr_e 1108 1109SQDMULH_v 0.00 1110 ..1 ..... 10110 1 ..... ..... @qrrr_e 1110SQRDMULH_v 0.10 1110 ..1 ..... 10110 1 ..... ..... @qrrr_e 1111SQRDMLAH_v 0.10 1110 ..0 ..... 10000 1 ..... ..... @qrrr_e 1112SQRDMLSH_v 0.10 1110 ..0 ..... 10001 1 ..... ..... @qrrr_e 1113 1114SDOT_v 0.00 1110 100 ..... 10010 1 ..... ..... @qrrr_s 1115UDOT_v 0.10 1110 100 ..... 10010 1 ..... ..... @qrrr_s 1116USDOT_v 0.00 1110 100 ..... 10011 1 ..... ..... @qrrr_s 1117BFDOT_v 0.10 1110 010 ..... 11111 1 ..... ..... @qrrr_s 1118BFMLAL_v 0.10 1110 110 ..... 11111 1 ..... ..... @qrrr_h 1119BFMMLA 0110 1110 010 ..... 11101 1 ..... ..... @rrr_q1e0 1120SMMLA 0100 1110 100 ..... 10100 1 ..... ..... @rrr_q1e0 1121UMMLA 0110 1110 100 ..... 10100 1 ..... ..... @rrr_q1e0 1122USMMLA 0100 1110 100 ..... 10101 1 ..... ..... @rrr_q1e0 1123 1124FCADD_90 0.10 1110 ..0 ..... 11100 1 ..... ..... @qrrr_e 1125FCADD_270 0.10 1110 ..0 ..... 11110 1 ..... ..... @qrrr_e 1126 1127FCMLA_v 0 q:1 10 1110 esz:2 0 rm:5 110 rot:2 1 rn:5 rd:5 1128 1129SMULL_v 0.00 1110 ..1 ..... 11000 0 ..... ..... @qrrr_e 1130UMULL_v 0.10 1110 ..1 ..... 11000 0 ..... ..... @qrrr_e 1131SMLAL_v 0.00 1110 ..1 ..... 10000 0 ..... ..... @qrrr_e 1132UMLAL_v 0.10 1110 ..1 ..... 10000 0 ..... ..... @qrrr_e 1133SMLSL_v 0.00 1110 ..1 ..... 10100 0 ..... ..... @qrrr_e 1134UMLSL_v 0.10 1110 ..1 ..... 10100 0 ..... ..... @qrrr_e 1135 1136SADDL_v 0.00 1110 ..1 ..... 00000 0 ..... ..... @qrrr_e 1137UADDL_v 0.10 1110 ..1 ..... 00000 0 ..... ..... @qrrr_e 1138SSUBL_v 0.00 1110 ..1 ..... 00100 0 ..... ..... @qrrr_e 1139USUBL_v 0.10 1110 ..1 ..... 00100 0 ..... ..... @qrrr_e 1140SABAL_v 0.00 1110 ..1 ..... 01010 0 ..... ..... @qrrr_e 1141UABAL_v 0.10 1110 ..1 ..... 01010 0 ..... ..... @qrrr_e 1142SABDL_v 0.00 1110 ..1 ..... 01110 0 ..... ..... @qrrr_e 1143UABDL_v 0.10 1110 ..1 ..... 01110 0 ..... ..... @qrrr_e 1144 1145SQDMULL_v 0.00 1110 011 ..... 11010 0 ..... ..... @qrrr_h 1146SQDMULL_v 0.00 1110 101 ..... 11010 0 ..... ..... @qrrr_s 1147SQDMLAL_v 0.00 1110 011 ..... 10010 0 ..... ..... @qrrr_h 1148SQDMLAL_v 0.00 1110 101 ..... 10010 0 ..... ..... @qrrr_s 1149SQDMLSL_v 0.00 1110 011 ..... 10110 0 ..... ..... @qrrr_h 1150SQDMLSL_v 0.00 1110 101 ..... 10110 0 ..... ..... @qrrr_s 1151 1152SADDW 0.00 1110 ..1 ..... 00010 0 ..... ..... @qrrr_e 1153UADDW 0.10 1110 ..1 ..... 00010 0 ..... ..... @qrrr_e 1154SSUBW 0.00 1110 ..1 ..... 00110 0 ..... ..... @qrrr_e 1155USUBW 0.10 1110 ..1 ..... 00110 0 ..... ..... @qrrr_e 1156 1157ADDHN 0.00 1110 ..1 ..... 01000 0 ..... ..... @qrrr_e 1158RADDHN 0.10 1110 ..1 ..... 01000 0 ..... ..... @qrrr_e 1159SUBHN 0.00 1110 ..1 ..... 01100 0 ..... ..... @qrrr_e 1160RSUBHN 0.10 1110 ..1 ..... 01100 0 ..... ..... @qrrr_e 1161 1162PMULL_p8 0.00 1110 001 ..... 11100 0 ..... ..... @qrrr_b 1163PMULL_p64 0.00 1110 111 ..... 11100 0 ..... ..... @qrrr_b 1164 1165### Advanced SIMD scalar x indexed element 1166 1167FMUL_si 0101 1111 00 .. .... 1001 . 0 ..... ..... @rrx_h 1168FMUL_si 0101 1111 10 . ..... 1001 . 0 ..... ..... @rrx_s 1169FMUL_si 0101 1111 11 0 ..... 1001 . 0 ..... ..... @rrx_d 1170 1171FMLA_si 0101 1111 00 .. .... 0001 . 0 ..... ..... @rrx_h 1172FMLA_si 0101 1111 10 .. .... 0001 . 0 ..... ..... @rrx_s 1173FMLA_si 0101 1111 11 0. .... 0001 . 0 ..... ..... @rrx_d 1174 1175FMLS_si 0101 1111 00 .. .... 0101 . 0 ..... ..... @rrx_h 1176FMLS_si 0101 1111 10 .. .... 0101 . 0 ..... ..... @rrx_s 1177FMLS_si 0101 1111 11 0. .... 0101 . 0 ..... ..... @rrx_d 1178 1179FMULX_si 0111 1111 00 .. .... 1001 . 0 ..... ..... @rrx_h 1180FMULX_si 0111 1111 10 . ..... 1001 . 0 ..... ..... @rrx_s 1181FMULX_si 0111 1111 11 0 ..... 1001 . 0 ..... ..... @rrx_d 1182 1183SQDMULH_si 0101 1111 01 .. .... 1100 . 0 ..... ..... @rrx_h 1184SQDMULH_si 0101 1111 10 .. .... 1100 . 0 ..... ..... @rrx_s 1185 1186SQRDMULH_si 0101 1111 01 .. .... 1101 . 0 ..... ..... @rrx_h 1187SQRDMULH_si 0101 1111 10 . ..... 1101 . 0 ..... ..... @rrx_s 1188 1189SQRDMLAH_si 0111 1111 01 .. .... 1101 . 0 ..... ..... @rrx_h 1190SQRDMLAH_si 0111 1111 10 .. .... 1101 . 0 ..... ..... @rrx_s 1191 1192SQRDMLSH_si 0111 1111 01 .. .... 1111 . 0 ..... ..... @rrx_h 1193SQRDMLSH_si 0111 1111 10 .. .... 1111 . 0 ..... ..... @rrx_s 1194 1195SQDMULL_si 0101 1111 01 .. .... 1011 . 0 ..... ..... @rrx_h 1196SQDMULL_si 0101 1111 10 . ..... 1011 . 0 ..... ..... @rrx_s 1197 1198SQDMLAL_si 0101 1111 01 .. .... 0011 . 0 ..... ..... @rrx_h 1199SQDMLAL_si 0101 1111 10 . ..... 0011 . 0 ..... ..... @rrx_s 1200 1201SQDMLSL_si 0101 1111 01 .. .... 0111 . 0 ..... ..... @rrx_h 1202SQDMLSL_si 0101 1111 10 . ..... 0111 . 0 ..... ..... @rrx_s 1203 1204### Advanced SIMD vector x indexed element 1205 1206FMUL_vi 0.00 1111 00 .. .... 1001 . 0 ..... ..... @qrrx_h 1207FMUL_vi 0.00 1111 10 . ..... 1001 . 0 ..... ..... @qrrx_s 1208FMUL_vi 0.00 1111 11 0 ..... 1001 . 0 ..... ..... @qrrx_d 1209 1210FMLA_vi 0.00 1111 00 .. .... 0001 . 0 ..... ..... @qrrx_h 1211FMLA_vi 0.00 1111 10 . ..... 0001 . 0 ..... ..... @qrrx_s 1212FMLA_vi 0.00 1111 11 0 ..... 0001 . 0 ..... ..... @qrrx_d 1213 1214FMLS_vi 0.00 1111 00 .. .... 0101 . 0 ..... ..... @qrrx_h 1215FMLS_vi 0.00 1111 10 . ..... 0101 . 0 ..... ..... @qrrx_s 1216FMLS_vi 0.00 1111 11 0 ..... 0101 . 0 ..... ..... @qrrx_d 1217 1218FMULX_vi 0.10 1111 00 .. .... 1001 . 0 ..... ..... @qrrx_h 1219FMULX_vi 0.10 1111 10 . ..... 1001 . 0 ..... ..... @qrrx_s 1220FMULX_vi 0.10 1111 11 0 ..... 1001 . 0 ..... ..... @qrrx_d 1221 1222FMLAL_vi 0.00 1111 10 .. .... 0000 . 0 ..... ..... @qrrx_h 1223FMLSL_vi 0.00 1111 10 .. .... 0100 . 0 ..... ..... @qrrx_h 1224FMLAL2_vi 0.10 1111 10 .. .... 1000 . 0 ..... ..... @qrrx_h 1225FMLSL2_vi 0.10 1111 10 .. .... 1100 . 0 ..... ..... @qrrx_h 1226 1227MUL_vi 0.00 1111 01 .. .... 1000 . 0 ..... ..... @qrrx_h 1228MUL_vi 0.00 1111 10 . ..... 1000 . 0 ..... ..... @qrrx_s 1229 1230MLA_vi 0.10 1111 01 .. .... 0000 . 0 ..... ..... @qrrx_h 1231MLA_vi 0.10 1111 10 . ..... 0000 . 0 ..... ..... @qrrx_s 1232 1233MLS_vi 0.10 1111 01 .. .... 0100 . 0 ..... ..... @qrrx_h 1234MLS_vi 0.10 1111 10 . ..... 0100 . 0 ..... ..... @qrrx_s 1235 1236SQDMULH_vi 0.00 1111 01 .. .... 1100 . 0 ..... ..... @qrrx_h 1237SQDMULH_vi 0.00 1111 10 . ..... 1100 . 0 ..... ..... @qrrx_s 1238 1239SQRDMULH_vi 0.00 1111 01 .. .... 1101 . 0 ..... ..... @qrrx_h 1240SQRDMULH_vi 0.00 1111 10 . ..... 1101 . 0 ..... ..... @qrrx_s 1241 1242SQRDMLAH_vi 0.10 1111 01 .. .... 1101 . 0 ..... ..... @qrrx_h 1243SQRDMLAH_vi 0.10 1111 10 .. .... 1101 . 0 ..... ..... @qrrx_s 1244 1245SQRDMLSH_vi 0.10 1111 01 .. .... 1111 . 0 ..... ..... @qrrx_h 1246SQRDMLSH_vi 0.10 1111 10 .. .... 1111 . 0 ..... ..... @qrrx_s 1247 1248SDOT_vi 0.00 1111 10 .. .... 1110 . 0 ..... ..... @qrrx_s 1249UDOT_vi 0.10 1111 10 .. .... 1110 . 0 ..... ..... @qrrx_s 1250SUDOT_vi 0.00 1111 00 .. .... 1111 . 0 ..... ..... @qrrx_s 1251USDOT_vi 0.00 1111 10 .. .... 1111 . 0 ..... ..... @qrrx_s 1252BFDOT_vi 0.00 1111 01 .. .... 1111 . 0 ..... ..... @qrrx_s 1253BFMLAL_vi 0.00 1111 11 .. .... 1111 . 0 ..... ..... @qrrx_h 1254 1255FCMLA_vi 0 0 10 1111 01 idx:1 rm:5 0 rot:2 1 0 0 rn:5 rd:5 esz=1 q=0 1256FCMLA_vi 0 1 10 1111 01 . rm:5 0 rot:2 1 . 0 rn:5 rd:5 esz=1 idx=%hl q=1 1257FCMLA_vi 0 1 10 1111 10 0 rm:5 0 rot:2 1 idx:1 0 rn:5 rd:5 esz=2 q=1 1258 1259SMULL_vi 0.00 1111 01 .. .... 1010 . 0 ..... ..... @qrrx_h 1260SMULL_vi 0.00 1111 10 . ..... 1010 . 0 ..... ..... @qrrx_s 1261UMULL_vi 0.10 1111 01 .. .... 1010 . 0 ..... ..... @qrrx_h 1262UMULL_vi 0.10 1111 10 . ..... 1010 . 0 ..... ..... @qrrx_s 1263 1264SMLAL_vi 0.00 1111 01 .. .... 0010 . 0 ..... ..... @qrrx_h 1265SMLAL_vi 0.00 1111 10 . ..... 0010 . 0 ..... ..... @qrrx_s 1266UMLAL_vi 0.10 1111 01 .. .... 0010 . 0 ..... ..... @qrrx_h 1267UMLAL_vi 0.10 1111 10 . ..... 0010 . 0 ..... ..... @qrrx_s 1268 1269SMLSL_vi 0.00 1111 01 .. .... 0110 . 0 ..... ..... @qrrx_h 1270SMLSL_vi 0.00 1111 10 . ..... 0110 . 0 ..... ..... @qrrx_s 1271UMLSL_vi 0.10 1111 01 .. .... 0110 . 0 ..... ..... @qrrx_h 1272UMLSL_vi 0.10 1111 10 . ..... 0110 . 0 ..... ..... @qrrx_s 1273 1274SQDMULL_vi 0.00 1111 01 .. .... 1011 . 0 ..... ..... @qrrx_h 1275SQDMULL_vi 0.00 1111 10 . ..... 1011 . 0 ..... ..... @qrrx_s 1276 1277SQDMLAL_vi 0.00 1111 01 .. .... 0011 . 0 ..... ..... @qrrx_h 1278SQDMLAL_vi 0.00 1111 10 . ..... 0011 . 0 ..... ..... @qrrx_s 1279 1280SQDMLSL_vi 0.00 1111 01 .. .... 0111 . 0 ..... ..... @qrrx_h 1281SQDMLSL_vi 0.00 1111 10 . ..... 0111 . 0 ..... ..... @qrrx_s 1282 1283# Floating-point conditional select 1284 1285FCSEL 0001 1110 .. 1 rm:5 cond:4 11 rn:5 rd:5 esz=%esz_hsd 1286 1287# Floating-point data-processing (3 source) 1288 1289@rrrr_hsd .... .... .. . rm:5 . ra:5 rn:5 rd:5 &rrrr_e esz=%esz_hsd 1290 1291FMADD 0001 1111 .. 0 ..... 0 ..... ..... ..... @rrrr_hsd 1292FMSUB 0001 1111 .. 0 ..... 1 ..... ..... ..... @rrrr_hsd 1293FNMADD 0001 1111 .. 1 ..... 0 ..... ..... ..... @rrrr_hsd 1294FNMSUB 0001 1111 .. 1 ..... 1 ..... ..... ..... @rrrr_hsd 1295 1296# Advanced SIMD Extract 1297 1298EXT_d 0010 1110 00 0 rm:5 00 imm:3 0 rn:5 rd:5 1299EXT_q 0110 1110 00 0 rm:5 0 imm:4 0 rn:5 rd:5 1300 1301# Advanced SIMD Table Lookup 1302 1303TBL_TBX 0 q:1 00 1110 000 rm:5 0 len:2 tbx:1 00 rn:5 rd:5 1304 1305# Advanced SIMD Permute 1306 1307UZP1 0.00 1110 .. 0 ..... 0 001 10 ..... ..... @qrrr_e 1308UZP2 0.00 1110 .. 0 ..... 0 101 10 ..... ..... @qrrr_e 1309TRN1 0.00 1110 .. 0 ..... 0 010 10 ..... ..... @qrrr_e 1310TRN2 0.00 1110 .. 0 ..... 0 110 10 ..... ..... @qrrr_e 1311ZIP1 0.00 1110 .. 0 ..... 0 011 10 ..... ..... @qrrr_e 1312ZIP2 0.00 1110 .. 0 ..... 0 111 10 ..... ..... @qrrr_e 1313 1314# Advanced SIMD Across Lanes 1315 1316ADDV 0.00 1110 .. 11000 11011 10 ..... ..... @qrr_e 1317SADDLV 0.00 1110 .. 11000 00011 10 ..... ..... @qrr_e 1318UADDLV 0.10 1110 .. 11000 00011 10 ..... ..... @qrr_e 1319SMAXV 0.00 1110 .. 11000 01010 10 ..... ..... @qrr_e 1320UMAXV 0.10 1110 .. 11000 01010 10 ..... ..... @qrr_e 1321SMINV 0.00 1110 .. 11000 11010 10 ..... ..... @qrr_e 1322UMINV 0.10 1110 .. 11000 11010 10 ..... ..... @qrr_e 1323 1324FMAXNMV_h 0.00 1110 00 11000 01100 10 ..... ..... @qrr_h 1325FMAXNMV_s 0110 1110 00 11000 01100 10 ..... ..... @rr_q1e2 1326 1327FMINNMV_h 0.00 1110 10 11000 01100 10 ..... ..... @qrr_h 1328FMINNMV_s 0110 1110 10 11000 01100 10 ..... ..... @rr_q1e2 1329 1330FMAXV_h 0.00 1110 00 11000 01111 10 ..... ..... @qrr_h 1331FMAXV_s 0110 1110 00 11000 01111 10 ..... ..... @rr_q1e2 1332 1333FMINV_h 0.00 1110 10 11000 01111 10 ..... ..... @qrr_h 1334FMINV_s 0110 1110 10 11000 01111 10 ..... ..... @rr_q1e2 1335 1336# Conversion between floating-point and fixed-point (general register) 1337 1338&fcvt rd rn esz sf shift 1339%fcvt_shift32 10:5 !function=rsub_32 1340%fcvt_shift64 10:6 !function=rsub_64 1341 1342@fcvt32 0 ....... .. ...... 1..... rn:5 rd:5 \ 1343 &fcvt sf=0 esz=%esz_hsd shift=%fcvt_shift32 1344@fcvt64 1 ....... .. ...... ...... rn:5 rd:5 \ 1345 &fcvt sf=1 esz=%esz_hsd shift=%fcvt_shift64 1346 1347SCVTF_g . 0011110 .. 000010 ...... ..... ..... @fcvt32 1348SCVTF_g . 0011110 .. 000010 ...... ..... ..... @fcvt64 1349UCVTF_g . 0011110 .. 000011 ...... ..... ..... @fcvt32 1350UCVTF_g . 0011110 .. 000011 ...... ..... ..... @fcvt64 1351 1352FCVTZS_g . 0011110 .. 011000 ...... ..... ..... @fcvt32 1353FCVTZS_g . 0011110 .. 011000 ...... ..... ..... @fcvt64 1354FCVTZU_g . 0011110 .. 011001 ...... ..... ..... @fcvt32 1355FCVTZU_g . 0011110 .. 011001 ...... ..... ..... @fcvt64 1356 1357# Conversion between floating-point and integer (general register) 1358 1359@icvt sf:1 ....... .. ...... ...... rn:5 rd:5 \ 1360 &fcvt esz=%esz_hsd shift=0 1361 1362SCVTF_g . 0011110 .. 100010 000000 ..... ..... @icvt 1363UCVTF_g . 0011110 .. 100011 000000 ..... ..... @icvt 1364 1365FCVTNS_g . 0011110 .. 100000 000000 ..... ..... @icvt 1366FCVTNU_g . 0011110 .. 100001 000000 ..... ..... @icvt 1367FCVTPS_g . 0011110 .. 101000 000000 ..... ..... @icvt 1368FCVTPU_g . 0011110 .. 101001 000000 ..... ..... @icvt 1369FCVTMS_g . 0011110 .. 110000 000000 ..... ..... @icvt 1370FCVTMU_g . 0011110 .. 110001 000000 ..... ..... @icvt 1371FCVTZS_g . 0011110 .. 111000 000000 ..... ..... @icvt 1372FCVTZU_g . 0011110 .. 111001 000000 ..... ..... @icvt 1373FCVTAS_g . 0011110 .. 100100 000000 ..... ..... @icvt 1374FCVTAU_g . 0011110 .. 100101 000000 ..... ..... @icvt 1375 1376FJCVTZS 0 0011110 01 111110 000000 ..... ..... @rr 1377 1378FMOV_ws 0 0011110 00 100110 000000 ..... ..... @rr 1379FMOV_sw 0 0011110 00 100111 000000 ..... ..... @rr 1380 1381FMOV_xd 1 0011110 01 100110 000000 ..... ..... @rr 1382FMOV_dx 1 0011110 01 100111 000000 ..... ..... @rr 1383 1384# Move to/from upper half of 128-bit 1385FMOV_xu 1 0011110 10 101110 000000 ..... ..... @rr 1386FMOV_ux 1 0011110 10 101111 000000 ..... ..... @rr 1387 1388# Half-precision allows both sf=0 and sf=1 with identical results 1389FMOV_xh - 0011110 11 100110 000000 ..... ..... @rr 1390FMOV_hx - 0011110 11 100111 000000 ..... ..... @rr 1391 1392# Floating-point data processing (1 source) 1393 1394FMOV_s 00011110 .. 1 000000 10000 ..... ..... @rr_hsd 1395FABS_s 00011110 .. 1 000001 10000 ..... ..... @rr_hsd 1396FNEG_s 00011110 .. 1 000010 10000 ..... ..... @rr_hsd 1397FSQRT_s 00011110 .. 1 000011 10000 ..... ..... @rr_hsd 1398 1399FRINTN_s 00011110 .. 1 001000 10000 ..... ..... @rr_hsd 1400FRINTP_s 00011110 .. 1 001001 10000 ..... ..... @rr_hsd 1401FRINTM_s 00011110 .. 1 001010 10000 ..... ..... @rr_hsd 1402FRINTZ_s 00011110 .. 1 001011 10000 ..... ..... @rr_hsd 1403FRINTA_s 00011110 .. 1 001100 10000 ..... ..... @rr_hsd 1404FRINTX_s 00011110 .. 1 001110 10000 ..... ..... @rr_hsd 1405FRINTI_s 00011110 .. 1 001111 10000 ..... ..... @rr_hsd 1406 1407BFCVT_s 00011110 01 1 000110 10000 ..... ..... @rr_s 1408 1409FRINT32Z_s 00011110 0. 1 010000 10000 ..... ..... @rr_sd 1410FRINT32X_s 00011110 0. 1 010001 10000 ..... ..... @rr_sd 1411FRINT64Z_s 00011110 0. 1 010010 10000 ..... ..... @rr_sd 1412FRINT64X_s 00011110 0. 1 010011 10000 ..... ..... @rr_sd 1413 1414FCVT_s_ds 00011110 00 1 000101 10000 ..... ..... @rr 1415FCVT_s_hs 00011110 00 1 000111 10000 ..... ..... @rr 1416FCVT_s_sd 00011110 01 1 000100 10000 ..... ..... @rr 1417FCVT_s_hd 00011110 01 1 000111 10000 ..... ..... @rr 1418FCVT_s_sh 00011110 11 1 000100 10000 ..... ..... @rr 1419FCVT_s_dh 00011110 11 1 000101 10000 ..... ..... @rr 1420 1421# Floating-point Immediate 1422 1423FMOVI_s 0001 1110 .. 1 imm:8 100 00000 rd:5 esz=%esz_hsd 1424 1425# Floating-point Compare 1426 1427FCMP 00011110 .. 1 rm:5 001000 rn:5 e:1 z:1 000 esz=%esz_hsd 1428 1429# Floating-point Conditional Compare 1430 1431FCCMP 00011110 .. 1 rm:5 cond:4 01 rn:5 e:1 nzcv:4 esz=%esz_hsd 1432 1433# Advanced SIMD Modified Immediate / Shift by Immediate 1434 1435%abcdefgh 16:3 5:5 1436 1437# Right shifts are encoded as N - shift, where N is the element size in bits. 1438%neon_rshift_i6 16:6 !function=rsub_64 1439%neon_rshift_i5 16:5 !function=rsub_32 1440%neon_rshift_i4 16:4 !function=rsub_16 1441%neon_rshift_i3 16:3 !function=rsub_8 1442 1443@q_shri_b . q:1 .. ..... 0001 ... ..... . rn:5 rd:5 \ 1444 &qrri_e esz=0 imm=%neon_rshift_i3 1445@q_shri_h . q:1 .. ..... 001 .... ..... . rn:5 rd:5 \ 1446 &qrri_e esz=1 imm=%neon_rshift_i4 1447@q_shri_s . q:1 .. ..... 01 ..... ..... . rn:5 rd:5 \ 1448 &qrri_e esz=2 imm=%neon_rshift_i5 1449@q_shri_d . 1 .. ..... 1 ...... ..... . rn:5 rd:5 \ 1450 &qrri_e esz=3 imm=%neon_rshift_i6 q=1 1451 1452@q_shli_b . q:1 .. ..... 0001 imm:3 ..... . rn:5 rd:5 &qrri_e esz=0 1453@q_shli_h . q:1 .. ..... 001 imm:4 ..... . rn:5 rd:5 &qrri_e esz=1 1454@q_shli_s . q:1 .. ..... 01 imm:5 ..... . rn:5 rd:5 &qrri_e esz=2 1455@q_shli_d . 1 .. ..... 1 imm:6 ..... . rn:5 rd:5 &qrri_e esz=3 q=1 1456 1457FMOVI_v_h 0 q:1 00 1111 00000 ... 1111 11 ..... rd:5 %abcdefgh 1458 1459# MOVI, MVNI, ORR, BIC, FMOV are all intermixed via cmode. 1460Vimm 0 q:1 op:1 0 1111 00000 ... cmode:4 01 ..... rd:5 %abcdefgh 1461 1462SSHR_v 0.00 11110 .... ... 00000 1 ..... ..... @q_shri_b 1463SSHR_v 0.00 11110 .... ... 00000 1 ..... ..... @q_shri_h 1464SSHR_v 0.00 11110 .... ... 00000 1 ..... ..... @q_shri_s 1465SSHR_v 0.00 11110 .... ... 00000 1 ..... ..... @q_shri_d 1466 1467USHR_v 0.10 11110 .... ... 00000 1 ..... ..... @q_shri_b 1468USHR_v 0.10 11110 .... ... 00000 1 ..... ..... @q_shri_h 1469USHR_v 0.10 11110 .... ... 00000 1 ..... ..... @q_shri_s 1470USHR_v 0.10 11110 .... ... 00000 1 ..... ..... @q_shri_d 1471 1472SSRA_v 0.00 11110 .... ... 00010 1 ..... ..... @q_shri_b 1473SSRA_v 0.00 11110 .... ... 00010 1 ..... ..... @q_shri_h 1474SSRA_v 0.00 11110 .... ... 00010 1 ..... ..... @q_shri_s 1475SSRA_v 0.00 11110 .... ... 00010 1 ..... ..... @q_shri_d 1476 1477USRA_v 0.10 11110 .... ... 00010 1 ..... ..... @q_shri_b 1478USRA_v 0.10 11110 .... ... 00010 1 ..... ..... @q_shri_h 1479USRA_v 0.10 11110 .... ... 00010 1 ..... ..... @q_shri_s 1480USRA_v 0.10 11110 .... ... 00010 1 ..... ..... @q_shri_d 1481 1482SRSHR_v 0.00 11110 .... ... 00100 1 ..... ..... @q_shri_b 1483SRSHR_v 0.00 11110 .... ... 00100 1 ..... ..... @q_shri_h 1484SRSHR_v 0.00 11110 .... ... 00100 1 ..... ..... @q_shri_s 1485SRSHR_v 0.00 11110 .... ... 00100 1 ..... ..... @q_shri_d 1486 1487URSHR_v 0.10 11110 .... ... 00100 1 ..... ..... @q_shri_b 1488URSHR_v 0.10 11110 .... ... 00100 1 ..... ..... @q_shri_h 1489URSHR_v 0.10 11110 .... ... 00100 1 ..... ..... @q_shri_s 1490URSHR_v 0.10 11110 .... ... 00100 1 ..... ..... @q_shri_d 1491 1492SRSRA_v 0.00 11110 .... ... 00110 1 ..... ..... @q_shri_b 1493SRSRA_v 0.00 11110 .... ... 00110 1 ..... ..... @q_shri_h 1494SRSRA_v 0.00 11110 .... ... 00110 1 ..... ..... @q_shri_s 1495SRSRA_v 0.00 11110 .... ... 00110 1 ..... ..... @q_shri_d 1496 1497URSRA_v 0.10 11110 .... ... 00110 1 ..... ..... @q_shri_b 1498URSRA_v 0.10 11110 .... ... 00110 1 ..... ..... @q_shri_h 1499URSRA_v 0.10 11110 .... ... 00110 1 ..... ..... @q_shri_s 1500URSRA_v 0.10 11110 .... ... 00110 1 ..... ..... @q_shri_d 1501 1502SRI_v 0.10 11110 .... ... 01000 1 ..... ..... @q_shri_b 1503SRI_v 0.10 11110 .... ... 01000 1 ..... ..... @q_shri_h 1504SRI_v 0.10 11110 .... ... 01000 1 ..... ..... @q_shri_s 1505SRI_v 0.10 11110 .... ... 01000 1 ..... ..... @q_shri_d 1506 1507SHL_v 0.00 11110 .... ... 01010 1 ..... ..... @q_shli_b 1508SHL_v 0.00 11110 .... ... 01010 1 ..... ..... @q_shli_h 1509SHL_v 0.00 11110 .... ... 01010 1 ..... ..... @q_shli_s 1510SHL_v 0.00 11110 .... ... 01010 1 ..... ..... @q_shli_d 1511 1512SLI_v 0.10 11110 .... ... 01010 1 ..... ..... @q_shli_b 1513SLI_v 0.10 11110 .... ... 01010 1 ..... ..... @q_shli_h 1514SLI_v 0.10 11110 .... ... 01010 1 ..... ..... @q_shli_s 1515SLI_v 0.10 11110 .... ... 01010 1 ..... ..... @q_shli_d 1516 1517SSHLL_v 0.00 11110 .... ... 10100 1 ..... ..... @q_shli_b 1518SSHLL_v 0.00 11110 .... ... 10100 1 ..... ..... @q_shli_h 1519SSHLL_v 0.00 11110 .... ... 10100 1 ..... ..... @q_shli_s 1520 1521USHLL_v 0.10 11110 .... ... 10100 1 ..... ..... @q_shli_b 1522USHLL_v 0.10 11110 .... ... 10100 1 ..... ..... @q_shli_h 1523USHLL_v 0.10 11110 .... ... 10100 1 ..... ..... @q_shli_s 1524 1525SHRN_v 0.00 11110 .... ... 10000 1 ..... ..... @q_shri_b 1526SHRN_v 0.00 11110 .... ... 10000 1 ..... ..... @q_shri_h 1527SHRN_v 0.00 11110 .... ... 10000 1 ..... ..... @q_shri_s 1528 1529RSHRN_v 0.00 11110 .... ... 10001 1 ..... ..... @q_shri_b 1530RSHRN_v 0.00 11110 .... ... 10001 1 ..... ..... @q_shri_h 1531RSHRN_v 0.00 11110 .... ... 10001 1 ..... ..... @q_shri_s 1532 1533SQSHL_vi 0.00 11110 .... ... 01110 1 ..... ..... @q_shli_b 1534SQSHL_vi 0.00 11110 .... ... 01110 1 ..... ..... @q_shli_h 1535SQSHL_vi 0.00 11110 .... ... 01110 1 ..... ..... @q_shli_s 1536SQSHL_vi 0.00 11110 .... ... 01110 1 ..... ..... @q_shli_d 1537 1538UQSHL_vi 0.10 11110 .... ... 01110 1 ..... ..... @q_shli_b 1539UQSHL_vi 0.10 11110 .... ... 01110 1 ..... ..... @q_shli_h 1540UQSHL_vi 0.10 11110 .... ... 01110 1 ..... ..... @q_shli_s 1541UQSHL_vi 0.10 11110 .... ... 01110 1 ..... ..... @q_shli_d 1542 1543SQSHLU_vi 0.10 11110 .... ... 01100 1 ..... ..... @q_shli_b 1544SQSHLU_vi 0.10 11110 .... ... 01100 1 ..... ..... @q_shli_h 1545SQSHLU_vi 0.10 11110 .... ... 01100 1 ..... ..... @q_shli_s 1546SQSHLU_vi 0.10 11110 .... ... 01100 1 ..... ..... @q_shli_d 1547 1548SQSHRN_v 0.00 11110 .... ... 10010 1 ..... ..... @q_shri_b 1549SQSHRN_v 0.00 11110 .... ... 10010 1 ..... ..... @q_shri_h 1550SQSHRN_v 0.00 11110 .... ... 10010 1 ..... ..... @q_shri_s 1551 1552UQSHRN_v 0.10 11110 .... ... 10010 1 ..... ..... @q_shri_b 1553UQSHRN_v 0.10 11110 .... ... 10010 1 ..... ..... @q_shri_h 1554UQSHRN_v 0.10 11110 .... ... 10010 1 ..... ..... @q_shri_s 1555 1556SQSHRUN_v 0.10 11110 .... ... 10000 1 ..... ..... @q_shri_b 1557SQSHRUN_v 0.10 11110 .... ... 10000 1 ..... ..... @q_shri_h 1558SQSHRUN_v 0.10 11110 .... ... 10000 1 ..... ..... @q_shri_s 1559 1560SQRSHRN_v 0.00 11110 .... ... 10011 1 ..... ..... @q_shri_b 1561SQRSHRN_v 0.00 11110 .... ... 10011 1 ..... ..... @q_shri_h 1562SQRSHRN_v 0.00 11110 .... ... 10011 1 ..... ..... @q_shri_s 1563 1564UQRSHRN_v 0.10 11110 .... ... 10011 1 ..... ..... @q_shri_b 1565UQRSHRN_v 0.10 11110 .... ... 10011 1 ..... ..... @q_shri_h 1566UQRSHRN_v 0.10 11110 .... ... 10011 1 ..... ..... @q_shri_s 1567 1568SQRSHRUN_v 0.10 11110 .... ... 10001 1 ..... ..... @q_shri_b 1569SQRSHRUN_v 0.10 11110 .... ... 10001 1 ..... ..... @q_shri_h 1570SQRSHRUN_v 0.10 11110 .... ... 10001 1 ..... ..... @q_shri_s 1571 1572# Advanced SIMD scalar shift by immediate 1573 1574@shri_b .... ..... 0001 ... ..... . rn:5 rd:5 \ 1575 &rri_e esz=0 imm=%neon_rshift_i3 1576@shri_h .... ..... 001 .... ..... . rn:5 rd:5 \ 1577 &rri_e esz=1 imm=%neon_rshift_i4 1578@shri_s .... ..... 01 ..... ..... . rn:5 rd:5 \ 1579 &rri_e esz=2 imm=%neon_rshift_i5 1580@shri_d .... ..... 1 ...... ..... . rn:5 rd:5 \ 1581 &rri_e esz=3 imm=%neon_rshift_i6 1582 1583@shli_b .... ..... 0001 imm:3 ..... . rn:5 rd:5 &rri_e esz=0 1584@shli_h .... ..... 001 imm:4 ..... . rn:5 rd:5 &rri_e esz=1 1585@shli_s .... ..... 01 imm:5 ..... . rn:5 rd:5 &rri_e esz=2 1586@shli_d .... ..... 1 imm:6 ..... . rn:5 rd:5 &rri_e esz=3 1587 1588SSHR_s 0101 11110 .... ... 00000 1 ..... ..... @shri_d 1589USHR_s 0111 11110 .... ... 00000 1 ..... ..... @shri_d 1590SSRA_s 0101 11110 .... ... 00010 1 ..... ..... @shri_d 1591USRA_s 0111 11110 .... ... 00010 1 ..... ..... @shri_d 1592SRSHR_s 0101 11110 .... ... 00100 1 ..... ..... @shri_d 1593URSHR_s 0111 11110 .... ... 00100 1 ..... ..... @shri_d 1594SRSRA_s 0101 11110 .... ... 00110 1 ..... ..... @shri_d 1595URSRA_s 0111 11110 .... ... 00110 1 ..... ..... @shri_d 1596SRI_s 0111 11110 .... ... 01000 1 ..... ..... @shri_d 1597 1598SHL_s 0101 11110 .... ... 01010 1 ..... ..... @shli_d 1599SLI_s 0111 11110 .... ... 01010 1 ..... ..... @shli_d 1600 1601SQSHL_si 0101 11110 .... ... 01110 1 ..... ..... @shli_b 1602SQSHL_si 0101 11110 .... ... 01110 1 ..... ..... @shli_h 1603SQSHL_si 0101 11110 .... ... 01110 1 ..... ..... @shli_s 1604SQSHL_si 0101 11110 .... ... 01110 1 ..... ..... @shli_d 1605 1606UQSHL_si 0111 11110 .... ... 01110 1 ..... ..... @shli_b 1607UQSHL_si 0111 11110 .... ... 01110 1 ..... ..... @shli_h 1608UQSHL_si 0111 11110 .... ... 01110 1 ..... ..... @shli_s 1609UQSHL_si 0111 11110 .... ... 01110 1 ..... ..... @shli_d 1610 1611SQSHLU_si 0111 11110 .... ... 01100 1 ..... ..... @shli_b 1612SQSHLU_si 0111 11110 .... ... 01100 1 ..... ..... @shli_h 1613SQSHLU_si 0111 11110 .... ... 01100 1 ..... ..... @shli_s 1614SQSHLU_si 0111 11110 .... ... 01100 1 ..... ..... @shli_d 1615 1616SQSHRN_si 0101 11110 .... ... 10010 1 ..... ..... @shri_b 1617SQSHRN_si 0101 11110 .... ... 10010 1 ..... ..... @shri_h 1618SQSHRN_si 0101 11110 .... ... 10010 1 ..... ..... @shri_s 1619 1620UQSHRN_si 0111 11110 .... ... 10010 1 ..... ..... @shri_b 1621UQSHRN_si 0111 11110 .... ... 10010 1 ..... ..... @shri_h 1622UQSHRN_si 0111 11110 .... ... 10010 1 ..... ..... @shri_s 1623 1624SQSHRUN_si 0111 11110 .... ... 10000 1 ..... ..... @shri_b 1625SQSHRUN_si 0111 11110 .... ... 10000 1 ..... ..... @shri_h 1626SQSHRUN_si 0111 11110 .... ... 10000 1 ..... ..... @shri_s 1627 1628SQRSHRN_si 0101 11110 .... ... 10011 1 ..... ..... @shri_b 1629SQRSHRN_si 0101 11110 .... ... 10011 1 ..... ..... @shri_h 1630SQRSHRN_si 0101 11110 .... ... 10011 1 ..... ..... @shri_s 1631 1632UQRSHRN_si 0111 11110 .... ... 10011 1 ..... ..... @shri_b 1633UQRSHRN_si 0111 11110 .... ... 10011 1 ..... ..... @shri_h 1634UQRSHRN_si 0111 11110 .... ... 10011 1 ..... ..... @shri_s 1635 1636SQRSHRUN_si 0111 11110 .... ... 10001 1 ..... ..... @shri_b 1637SQRSHRUN_si 0111 11110 .... ... 10001 1 ..... ..... @shri_h 1638SQRSHRUN_si 0111 11110 .... ... 10001 1 ..... ..... @shri_s 1639 1640# Advanced SIMD scalar two-register miscellaneous 1641 1642SQABS_s 0101 1110 ..1 00000 01111 0 ..... ..... @rr_e 1643SQNEG_s 0111 1110 ..1 00000 01111 0 ..... ..... @rr_e 1644ABS_s 0101 1110 111 00000 10111 0 ..... ..... @rr 1645NEG_s 0111 1110 111 00000 10111 0 ..... ..... @rr 1646CMGT0_s 0101 1110 111 00000 10001 0 ..... ..... @rr 1647CMGE0_s 0111 1110 111 00000 10001 0 ..... ..... @rr 1648CMEQ0_s 0101 1110 111 00000 10011 0 ..... ..... @rr 1649CMLE0_s 0111 1110 111 00000 10011 0 ..... ..... @rr 1650CMLT0_s 0101 1110 111 00000 10101 0 ..... ..... @rr 1651 1652SQXTUN_s 0111 1110 ..1 00001 00101 0 ..... ..... @rr_e 1653SQXTN_s 0101 1110 ..1 00001 01001 0 ..... ..... @rr_e 1654UQXTN_s 0111 1110 ..1 00001 01001 0 ..... ..... @rr_e 1655 1656FCVTXN_s 0111 1110 011 00001 01101 0 ..... ..... @rr_s 1657 1658FCMGT0_s 0101 1110 111 11000 11001 0 ..... ..... @rr_h 1659FCMGT0_s 0101 1110 1.1 00000 11001 0 ..... ..... @rr_sd 1660 1661FCMGE0_s 0111 1110 111 11000 11001 0 ..... ..... @rr_h 1662FCMGE0_s 0111 1110 1.1 00000 11001 0 ..... ..... @rr_sd 1663 1664FCMEQ0_s 0101 1110 111 11000 11011 0 ..... ..... @rr_h 1665FCMEQ0_s 0101 1110 1.1 00000 11011 0 ..... ..... @rr_sd 1666 1667FCMLE0_s 0111 1110 111 11000 11011 0 ..... ..... @rr_h 1668FCMLE0_s 0111 1110 1.1 00000 11011 0 ..... ..... @rr_sd 1669 1670FCMLT0_s 0101 1110 111 11000 11101 0 ..... ..... @rr_h 1671FCMLT0_s 0101 1110 1.1 00000 11101 0 ..... ..... @rr_sd 1672 1673FRECPE_s 0101 1110 111 11001 11011 0 ..... ..... @rr_h 1674FRECPE_s 0101 1110 1.1 00001 11011 0 ..... ..... @rr_sd 1675 1676FRECPX_s 0101 1110 111 11001 11111 0 ..... ..... @rr_h 1677FRECPX_s 0101 1110 1.1 00001 11111 0 ..... ..... @rr_sd 1678 1679FRSQRTE_s 0111 1110 111 11001 11011 0 ..... ..... @rr_h 1680FRSQRTE_s 0111 1110 1.1 00001 11011 0 ..... ..... @rr_sd 1681 1682@icvt_h . ....... .. ...... ...... rn:5 rd:5 \ 1683 &fcvt sf=0 esz=1 shift=0 1684@icvt_sd . ....... .. ...... ...... rn:5 rd:5 \ 1685 &fcvt sf=0 esz=%esz_sd shift=0 1686 1687SCVTF_f 0101 1110 011 11001 11011 0 ..... ..... @icvt_h 1688SCVTF_f 0101 1110 0.1 00001 11011 0 ..... ..... @icvt_sd 1689 1690UCVTF_f 0111 1110 011 11001 11011 0 ..... ..... @icvt_h 1691UCVTF_f 0111 1110 0.1 00001 11011 0 ..... ..... @icvt_sd 1692 1693FCVTNS_f 0101 1110 011 11001 10101 0 ..... ..... @icvt_h 1694FCVTNS_f 0101 1110 0.1 00001 10101 0 ..... ..... @icvt_sd 1695FCVTNU_f 0111 1110 011 11001 10101 0 ..... ..... @icvt_h 1696FCVTNU_f 0111 1110 0.1 00001 10101 0 ..... ..... @icvt_sd 1697 1698FCVTPS_f 0101 1110 111 11001 10101 0 ..... ..... @icvt_h 1699FCVTPS_f 0101 1110 1.1 00001 10101 0 ..... ..... @icvt_sd 1700FCVTPU_f 0111 1110 111 11001 10101 0 ..... ..... @icvt_h 1701FCVTPU_f 0111 1110 1.1 00001 10101 0 ..... ..... @icvt_sd 1702 1703FCVTMS_f 0101 1110 011 11001 10111 0 ..... ..... @icvt_h 1704FCVTMS_f 0101 1110 0.1 00001 10111 0 ..... ..... @icvt_sd 1705FCVTMU_f 0111 1110 011 11001 10111 0 ..... ..... @icvt_h 1706FCVTMU_f 0111 1110 0.1 00001 10111 0 ..... ..... @icvt_sd 1707 1708FCVTZS_f 0101 1110 111 11001 10111 0 ..... ..... @icvt_h 1709FCVTZS_f 0101 1110 1.1 00001 10111 0 ..... ..... @icvt_sd 1710FCVTZU_f 0111 1110 111 11001 10111 0 ..... ..... @icvt_h 1711FCVTZU_f 0111 1110 1.1 00001 10111 0 ..... ..... @icvt_sd 1712 1713FCVTAS_f 0101 1110 011 11001 11001 0 ..... ..... @icvt_h 1714FCVTAS_f 0101 1110 0.1 00001 11001 0 ..... ..... @icvt_sd 1715FCVTAU_f 0111 1110 011 11001 11001 0 ..... ..... @icvt_h 1716FCVTAU_f 0111 1110 0.1 00001 11001 0 ..... ..... @icvt_sd 1717 1718%fcvt_f_sh_h 16:4 !function=rsub_16 1719%fcvt_f_sh_s 16:5 !function=rsub_32 1720%fcvt_f_sh_d 16:6 !function=rsub_64 1721 1722@fcvt_fixed_h .... .... . 001 .... ...... rn:5 rd:5 \ 1723 &fcvt sf=0 esz=1 shift=%fcvt_f_sh_h 1724@fcvt_fixed_s .... .... . 01 ..... ...... rn:5 rd:5 \ 1725 &fcvt sf=0 esz=2 shift=%fcvt_f_sh_s 1726@fcvt_fixed_d .... .... . 1 ...... ...... rn:5 rd:5 \ 1727 &fcvt sf=0 esz=3 shift=%fcvt_f_sh_d 1728 1729SCVTF_f 0101 1111 0 ....... 111001 ..... ..... @fcvt_fixed_h 1730SCVTF_f 0101 1111 0 ....... 111001 ..... ..... @fcvt_fixed_s 1731SCVTF_f 0101 1111 0 ....... 111001 ..... ..... @fcvt_fixed_d 1732 1733UCVTF_f 0111 1111 0 ....... 111001 ..... ..... @fcvt_fixed_h 1734UCVTF_f 0111 1111 0 ....... 111001 ..... ..... @fcvt_fixed_s 1735UCVTF_f 0111 1111 0 ....... 111001 ..... ..... @fcvt_fixed_d 1736 1737FCVTZS_f 0101 1111 0 ....... 111111 ..... ..... @fcvt_fixed_h 1738FCVTZS_f 0101 1111 0 ....... 111111 ..... ..... @fcvt_fixed_s 1739FCVTZS_f 0101 1111 0 ....... 111111 ..... ..... @fcvt_fixed_d 1740 1741FCVTZU_f 0111 1111 0 ....... 111111 ..... ..... @fcvt_fixed_h 1742FCVTZU_f 0111 1111 0 ....... 111111 ..... ..... @fcvt_fixed_s 1743FCVTZU_f 0111 1111 0 ....... 111111 ..... ..... @fcvt_fixed_d 1744 1745# Advanced SIMD two-register miscellaneous 1746 1747SQABS_v 0.00 1110 ..1 00000 01111 0 ..... ..... @qrr_e 1748SQNEG_v 0.10 1110 ..1 00000 01111 0 ..... ..... @qrr_e 1749ABS_v 0.00 1110 ..1 00000 10111 0 ..... ..... @qrr_e 1750NEG_v 0.10 1110 ..1 00000 10111 0 ..... ..... @qrr_e 1751CLS_v 0.00 1110 ..1 00000 01001 0 ..... ..... @qrr_e 1752CLZ_v 0.10 1110 ..1 00000 01001 0 ..... ..... @qrr_e 1753CNT_v 0.00 1110 001 00000 01011 0 ..... ..... @qrr_b 1754NOT_v 0.10 1110 001 00000 01011 0 ..... ..... @qrr_b 1755RBIT_v 0.10 1110 011 00000 01011 0 ..... ..... @qrr_b 1756CMGT0_v 0.00 1110 ..1 00000 10001 0 ..... ..... @qrr_e 1757CMGE0_v 0.10 1110 ..1 00000 10001 0 ..... ..... @qrr_e 1758CMEQ0_v 0.00 1110 ..1 00000 10011 0 ..... ..... @qrr_e 1759CMLE0_v 0.10 1110 ..1 00000 10011 0 ..... ..... @qrr_e 1760CMLT0_v 0.00 1110 ..1 00000 10101 0 ..... ..... @qrr_e 1761 1762REV16_v 0.00 1110 001 00000 00011 0 ..... ..... @qrr_b 1763REV32_v 0.10 1110 0.1 00000 00001 0 ..... ..... @qrr_bh 1764REV64_v 0.00 1110 ..1 00000 00001 0 ..... ..... @qrr_e 1765 1766SADDLP_v 0.00 1110 ..1 00000 00101 0 ..... ..... @qrr_e 1767UADDLP_v 0.10 1110 ..1 00000 00101 0 ..... ..... @qrr_e 1768SADALP_v 0.00 1110 ..1 00000 01101 0 ..... ..... @qrr_e 1769UADALP_v 0.10 1110 ..1 00000 01101 0 ..... ..... @qrr_e 1770 1771XTN 0.00 1110 ..1 00001 00101 0 ..... ..... @qrr_e 1772SQXTUN_v 0.10 1110 ..1 00001 00101 0 ..... ..... @qrr_e 1773SQXTN_v 0.00 1110 ..1 00001 01001 0 ..... ..... @qrr_e 1774UQXTN_v 0.10 1110 ..1 00001 01001 0 ..... ..... @qrr_e 1775 1776FCVTN_v 0.00 1110 0.1 00001 01101 0 ..... ..... @qrr_hs 1777FCVTXN_v 0.10 1110 011 00001 01101 0 ..... ..... @qrr_s 1778BFCVTN_v 0.00 1110 101 00001 01101 0 ..... ..... @qrr_h 1779 1780SHLL_v 0.10 1110 ..1 00001 00111 0 ..... ..... @qrr_e 1781 1782FABS_v 0.00 1110 111 11000 11111 0 ..... ..... @qrr_h 1783FABS_v 0.00 1110 1.1 00000 11111 0 ..... ..... @qrr_sd 1784 1785FNEG_v 0.10 1110 111 11000 11111 0 ..... ..... @qrr_h 1786FNEG_v 0.10 1110 1.1 00000 11111 0 ..... ..... @qrr_sd 1787 1788FSQRT_v 0.10 1110 111 11001 11111 0 ..... ..... @qrr_h 1789FSQRT_v 0.10 1110 1.1 00001 11111 0 ..... ..... @qrr_sd 1790 1791FRINTN_v 0.00 1110 011 11001 10001 0 ..... ..... @qrr_h 1792FRINTN_v 0.00 1110 0.1 00001 10001 0 ..... ..... @qrr_sd 1793 1794FRINTM_v 0.00 1110 011 11001 10011 0 ..... ..... @qrr_h 1795FRINTM_v 0.00 1110 0.1 00001 10011 0 ..... ..... @qrr_sd 1796 1797FRINTP_v 0.00 1110 111 11001 10001 0 ..... ..... @qrr_h 1798FRINTP_v 0.00 1110 1.1 00001 10001 0 ..... ..... @qrr_sd 1799 1800FRINTZ_v 0.00 1110 111 11001 10011 0 ..... ..... @qrr_h 1801FRINTZ_v 0.00 1110 1.1 00001 10011 0 ..... ..... @qrr_sd 1802 1803FRINTA_v 0.10 1110 011 11001 10001 0 ..... ..... @qrr_h 1804FRINTA_v 0.10 1110 0.1 00001 10001 0 ..... ..... @qrr_sd 1805 1806FRINTX_v 0.10 1110 011 11001 10011 0 ..... ..... @qrr_h 1807FRINTX_v 0.10 1110 0.1 00001 10011 0 ..... ..... @qrr_sd 1808 1809FRINTI_v 0.10 1110 111 11001 10011 0 ..... ..... @qrr_h 1810FRINTI_v 0.10 1110 1.1 00001 10011 0 ..... ..... @qrr_sd 1811 1812FRINT32Z_v 0.00 1110 0.1 00001 11101 0 ..... ..... @qrr_sd 1813FRINT32X_v 0.10 1110 0.1 00001 11101 0 ..... ..... @qrr_sd 1814FRINT64Z_v 0.00 1110 0.1 00001 11111 0 ..... ..... @qrr_sd 1815FRINT64X_v 0.10 1110 0.1 00001 11111 0 ..... ..... @qrr_sd 1816 1817SCVTF_vi 0.00 1110 011 11001 11011 0 ..... ..... @qrr_h 1818SCVTF_vi 0.00 1110 0.1 00001 11011 0 ..... ..... @qrr_sd 1819 1820UCVTF_vi 0.10 1110 011 11001 11011 0 ..... ..... @qrr_h 1821UCVTF_vi 0.10 1110 0.1 00001 11011 0 ..... ..... @qrr_sd 1822 1823FCVTNS_vi 0.00 1110 011 11001 10101 0 ..... ..... @qrr_h 1824FCVTNS_vi 0.00 1110 0.1 00001 10101 0 ..... ..... @qrr_sd 1825FCVTNU_vi 0.10 1110 011 11001 10101 0 ..... ..... @qrr_h 1826FCVTNU_vi 0.10 1110 0.1 00001 10101 0 ..... ..... @qrr_sd 1827 1828FCVTPS_vi 0.00 1110 111 11001 10101 0 ..... ..... @qrr_h 1829FCVTPS_vi 0.00 1110 1.1 00001 10101 0 ..... ..... @qrr_sd 1830FCVTPU_vi 0.10 1110 111 11001 10101 0 ..... ..... @qrr_h 1831FCVTPU_vi 0.10 1110 1.1 00001 10101 0 ..... ..... @qrr_sd 1832 1833FCVTMS_vi 0.00 1110 011 11001 10111 0 ..... ..... @qrr_h 1834FCVTMS_vi 0.00 1110 0.1 00001 10111 0 ..... ..... @qrr_sd 1835FCVTMU_vi 0.10 1110 011 11001 10111 0 ..... ..... @qrr_h 1836FCVTMU_vi 0.10 1110 0.1 00001 10111 0 ..... ..... @qrr_sd 1837 1838FCVTZS_vi 0.00 1110 111 11001 10111 0 ..... ..... @qrr_h 1839FCVTZS_vi 0.00 1110 1.1 00001 10111 0 ..... ..... @qrr_sd 1840FCVTZU_vi 0.10 1110 111 11001 10111 0 ..... ..... @qrr_h 1841FCVTZU_vi 0.10 1110 1.1 00001 10111 0 ..... ..... @qrr_sd 1842 1843FCVTAS_vi 0.00 1110 011 11001 11001 0 ..... ..... @qrr_h 1844FCVTAS_vi 0.00 1110 0.1 00001 11001 0 ..... ..... @qrr_sd 1845FCVTAU_vi 0.10 1110 011 11001 11001 0 ..... ..... @qrr_h 1846FCVTAU_vi 0.10 1110 0.1 00001 11001 0 ..... ..... @qrr_sd 1847 1848FCMGT0_v 0.00 1110 111 11000 11001 0 ..... ..... @qrr_h 1849FCMGT0_v 0.00 1110 1.1 00000 11001 0 ..... ..... @qrr_sd 1850 1851FCMGE0_v 0.10 1110 111 11000 11001 0 ..... ..... @qrr_h 1852FCMGE0_v 0.10 1110 1.1 00000 11001 0 ..... ..... @qrr_sd 1853 1854FCMEQ0_v 0.00 1110 111 11000 11011 0 ..... ..... @qrr_h 1855FCMEQ0_v 0.00 1110 1.1 00000 11011 0 ..... ..... @qrr_sd 1856 1857FCMLE0_v 0.10 1110 111 11000 11011 0 ..... ..... @qrr_h 1858FCMLE0_v 0.10 1110 1.1 00000 11011 0 ..... ..... @qrr_sd 1859 1860FCMLT0_v 0.00 1110 111 11000 11101 0 ..... ..... @qrr_h 1861FCMLT0_v 0.00 1110 1.1 00000 11101 0 ..... ..... @qrr_sd 1862 1863FRECPE_v 0.00 1110 111 11001 11011 0 ..... ..... @qrr_h 1864FRECPE_v 0.00 1110 1.1 00001 11011 0 ..... ..... @qrr_sd 1865 1866FRSQRTE_v 0.10 1110 111 11001 11011 0 ..... ..... @qrr_h 1867FRSQRTE_v 0.10 1110 1.1 00001 11011 0 ..... ..... @qrr_sd 1868 1869URECPE_v 0.00 1110 101 00001 11001 0 ..... ..... @qrr_s 1870URSQRTE_v 0.10 1110 101 00001 11001 0 ..... ..... @qrr_s 1871 1872FCVTL_v 0.00 1110 0.1 00001 01111 0 ..... ..... @qrr_sd 1873 1874&fcvt_q rd rn esz q shift 1875@fcvtq_h . q:1 . ...... 001 .... ...... rn:5 rd:5 \ 1876 &fcvt_q esz=1 shift=%fcvt_f_sh_h 1877@fcvtq_s . q:1 . ...... 01 ..... ...... rn:5 rd:5 \ 1878 &fcvt_q esz=2 shift=%fcvt_f_sh_s 1879@fcvtq_d . q:1 . ...... 1 ...... ...... rn:5 rd:5 \ 1880 &fcvt_q esz=3 shift=%fcvt_f_sh_d 1881 1882SCVTF_vf 0.00 11110 ....... 111001 ..... ..... @fcvtq_h 1883SCVTF_vf 0.00 11110 ....... 111001 ..... ..... @fcvtq_s 1884SCVTF_vf 0.00 11110 ....... 111001 ..... ..... @fcvtq_d 1885 1886UCVTF_vf 0.10 11110 ....... 111001 ..... ..... @fcvtq_h 1887UCVTF_vf 0.10 11110 ....... 111001 ..... ..... @fcvtq_s 1888UCVTF_vf 0.10 11110 ....... 111001 ..... ..... @fcvtq_d 1889 1890FCVTZS_vf 0.00 11110 ....... 111111 ..... ..... @fcvtq_h 1891FCVTZS_vf 0.00 11110 ....... 111111 ..... ..... @fcvtq_s 1892FCVTZS_vf 0.00 11110 ....... 111111 ..... ..... @fcvtq_d 1893 1894FCVTZU_vf 0.10 11110 ....... 111111 ..... ..... @fcvtq_h 1895FCVTZU_vf 0.10 11110 ....... 111111 ..... ..... @fcvtq_s 1896FCVTZU_vf 0.10 11110 ....... 111111 ..... ..... @fcvtq_d 1897