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