1# AArch64 A64 allowed instruction decoding 2# 3# Copyright (c) 2023 Linaro, Ltd 4# 5# This library is free software; you can redistribute it and/or 6# modify it under the terms of the GNU Lesser General Public 7# License as published by the Free Software Foundation; either 8# version 2.1 of the License, or (at your option) any later version. 9# 10# This library is distributed in the hope that it will be useful, 11# but WITHOUT ANY WARRANTY; without even the implied warranty of 12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13# Lesser General Public License for more details. 14# 15# You should have received a copy of the GNU Lesser General Public 16# License along with this library; if not, see <http://www.gnu.org/licenses/>. 17 18# 19# This file is processed by scripts/decodetree.py 20# 21 22%rd 0:5 23%esz_sd 22:1 !function=plus_2 24%esz_hsd 22:2 !function=xor_2 25%hl 11:1 21:1 26%hlm 11:1 20:2 27 28&r rn 29&ri rd imm 30&rri_sf rd rn imm sf 31&i imm 32&rr_e rd rn esz 33&rrr_e rd rn rm esz 34&rrx_e rd rn rm idx esz 35&rrrr_e rd rn rm ra esz 36&qrr_e q rd rn esz 37&qrrr_e q rd rn rm esz 38&qrrx_e q rd rn rm idx esz 39&qrrrr_e q rd rn rm ra esz 40 41@rr_h ........ ... ..... ...... rn:5 rd:5 &rr_e esz=1 42@rr_d ........ ... ..... ...... rn:5 rd:5 &rr_e esz=3 43@rr_sd ........ ... ..... ...... rn:5 rd:5 &rr_e esz=%esz_sd 44 45@rrr_h ........ ... rm:5 ...... rn:5 rd:5 &rrr_e esz=1 46@rrr_d ........ ... rm:5 ...... rn:5 rd:5 &rrr_e esz=3 47@rrr_sd ........ ... rm:5 ...... rn:5 rd:5 &rrr_e esz=%esz_sd 48@rrr_hsd ........ ... rm:5 ...... rn:5 rd:5 &rrr_e esz=%esz_hsd 49@rrr_e ........ esz:2 . rm:5 ...... rn:5 rd:5 &rrr_e 50@r2r_e ........ esz:2 . ..... ...... rm:5 rd:5 &rrr_e rn=%rd 51 52@rrx_h ........ .. .. rm:4 .... . . rn:5 rd:5 &rrx_e esz=1 idx=%hlm 53@rrx_s ........ .. . rm:5 .... . . rn:5 rd:5 &rrx_e esz=2 idx=%hl 54@rrx_d ........ .. . rm:5 .... idx:1 . rn:5 rd:5 &rrx_e esz=3 55 56@rr_q1e0 ........ ........ ...... rn:5 rd:5 &qrr_e q=1 esz=0 57@r2r_q1e0 ........ ........ ...... rm:5 rd:5 &qrrr_e rn=%rd q=1 esz=0 58@rrr_q1e0 ........ ... rm:5 ...... rn:5 rd:5 &qrrr_e q=1 esz=0 59@rrr_q1e3 ........ ... rm:5 ...... rn:5 rd:5 &qrrr_e q=1 esz=3 60@rrrr_q1e3 ........ ... rm:5 . ra:5 rn:5 rd:5 &qrrrr_e q=1 esz=3 61 62@qrrr_b . q:1 ...... ... rm:5 ...... rn:5 rd:5 &qrrr_e esz=0 63@qrrr_h . q:1 ...... ... rm:5 ...... rn:5 rd:5 &qrrr_e esz=1 64@qrrr_sd . q:1 ...... ... rm:5 ...... rn:5 rd:5 &qrrr_e esz=%esz_sd 65@qrrr_e . q:1 ...... esz:2 . rm:5 ...... rn:5 rd:5 &qrrr_e 66@qr2r_e . q:1 ...... esz:2 . ..... ...... rm:5 rd:5 &qrrr_e rn=%rd 67 68@qrrx_h . q:1 .. .... .. .. rm:4 .... . . rn:5 rd:5 \ 69 &qrrx_e esz=1 idx=%hlm 70@qrrx_s . q:1 .. .... .. . rm:5 .... . . rn:5 rd:5 \ 71 &qrrx_e esz=2 idx=%hl 72@qrrx_d . q:1 .. .... .. . rm:5 .... idx:1 . rn:5 rd:5 \ 73 &qrrx_e esz=3 74 75### Data Processing - Immediate 76 77# PC-rel addressing 78 79%imm_pcrel 5:s19 29:2 80@pcrel . .. ..... ................... rd:5 &ri imm=%imm_pcrel 81 82ADR 0 .. 10000 ................... ..... @pcrel 83ADRP 1 .. 10000 ................... ..... @pcrel 84 85# Add/subtract (immediate) 86 87%imm12_sh12 10:12 !function=shl_12 88@addsub_imm sf:1 .. ...... . imm:12 rn:5 rd:5 89@addsub_imm12 sf:1 .. ...... . ............ rn:5 rd:5 imm=%imm12_sh12 90 91ADD_i . 00 100010 0 ............ ..... ..... @addsub_imm 92ADD_i . 00 100010 1 ............ ..... ..... @addsub_imm12 93ADDS_i . 01 100010 0 ............ ..... ..... @addsub_imm 94ADDS_i . 01 100010 1 ............ ..... ..... @addsub_imm12 95 96SUB_i . 10 100010 0 ............ ..... ..... @addsub_imm 97SUB_i . 10 100010 1 ............ ..... ..... @addsub_imm12 98SUBS_i . 11 100010 0 ............ ..... ..... @addsub_imm 99SUBS_i . 11 100010 1 ............ ..... ..... @addsub_imm12 100 101# Add/subtract (immediate with tags) 102 103&rri_tag rd rn uimm6 uimm4 104@addsub_imm_tag . .. ...... . uimm6:6 .. uimm4:4 rn:5 rd:5 &rri_tag 105 106ADDG_i 1 00 100011 0 ...... 00 .... ..... ..... @addsub_imm_tag 107SUBG_i 1 10 100011 0 ...... 00 .... ..... ..... @addsub_imm_tag 108 109# Logical (immediate) 110 111&rri_log rd rn sf dbm 112@logic_imm_64 1 .. ...... dbm:13 rn:5 rd:5 &rri_log sf=1 113@logic_imm_32 0 .. ...... 0 dbm:12 rn:5 rd:5 &rri_log sf=0 114 115AND_i . 00 100100 . ...... ...... ..... ..... @logic_imm_64 116AND_i . 00 100100 . ...... ...... ..... ..... @logic_imm_32 117ORR_i . 01 100100 . ...... ...... ..... ..... @logic_imm_64 118ORR_i . 01 100100 . ...... ...... ..... ..... @logic_imm_32 119EOR_i . 10 100100 . ...... ...... ..... ..... @logic_imm_64 120EOR_i . 10 100100 . ...... ...... ..... ..... @logic_imm_32 121ANDS_i . 11 100100 . ...... ...... ..... ..... @logic_imm_64 122ANDS_i . 11 100100 . ...... ...... ..... ..... @logic_imm_32 123 124# Move wide (immediate) 125 126&movw rd sf imm hw 127@movw_64 1 .. ...... hw:2 imm:16 rd:5 &movw sf=1 128@movw_32 0 .. ...... 0 hw:1 imm:16 rd:5 &movw sf=0 129 130MOVN . 00 100101 .. ................ ..... @movw_64 131MOVN . 00 100101 .. ................ ..... @movw_32 132MOVZ . 10 100101 .. ................ ..... @movw_64 133MOVZ . 10 100101 .. ................ ..... @movw_32 134MOVK . 11 100101 .. ................ ..... @movw_64 135MOVK . 11 100101 .. ................ ..... @movw_32 136 137# Bitfield 138 139&bitfield rd rn sf immr imms 140@bitfield_64 1 .. ...... 1 immr:6 imms:6 rn:5 rd:5 &bitfield sf=1 141@bitfield_32 0 .. ...... 0 0 immr:5 0 imms:5 rn:5 rd:5 &bitfield sf=0 142 143SBFM . 00 100110 . ...... ...... ..... ..... @bitfield_64 144SBFM . 00 100110 . ...... ...... ..... ..... @bitfield_32 145BFM . 01 100110 . ...... ...... ..... ..... @bitfield_64 146BFM . 01 100110 . ...... ...... ..... ..... @bitfield_32 147UBFM . 10 100110 . ...... ...... ..... ..... @bitfield_64 148UBFM . 10 100110 . ...... ...... ..... ..... @bitfield_32 149 150# Extract 151 152&extract rd rn rm imm sf 153 154EXTR 1 00 100111 1 0 rm:5 imm:6 rn:5 rd:5 &extract sf=1 155EXTR 0 00 100111 0 0 rm:5 0 imm:5 rn:5 rd:5 &extract sf=0 156 157# Branches 158 159%imm26 0:s26 !function=times_4 160@branch . ..... .......................... &i imm=%imm26 161 162B 0 00101 .......................... @branch 163BL 1 00101 .......................... @branch 164 165%imm19 5:s19 !function=times_4 166&cbz rt imm sf nz 167 168CBZ sf:1 011010 nz:1 ................... rt:5 &cbz imm=%imm19 169 170%imm14 5:s14 !function=times_4 171%imm31_19 31:1 19:5 172&tbz rt imm nz bitpos 173 174TBZ . 011011 nz:1 ..... .............. rt:5 &tbz imm=%imm14 bitpos=%imm31_19 175 176# B.cond and BC.cond 177B_cond 0101010 0 ................... c:1 cond:4 imm=%imm19 178 179BR 1101011 0000 11111 000000 rn:5 00000 &r 180BLR 1101011 0001 11111 000000 rn:5 00000 &r 181RET 1101011 0010 11111 000000 rn:5 00000 &r 182 183&braz rn m 184BRAZ 1101011 0000 11111 00001 m:1 rn:5 11111 &braz # BRAAZ, BRABZ 185BLRAZ 1101011 0001 11111 00001 m:1 rn:5 11111 &braz # BLRAAZ, BLRABZ 186 187&reta m 188RETA 1101011 0010 11111 00001 m:1 11111 11111 &reta # RETAA, RETAB 189 190&bra rn rm m 191BRA 1101011 1000 11111 00001 m:1 rn:5 rm:5 &bra # BRAA, BRAB 192BLRA 1101011 1001 11111 00001 m:1 rn:5 rm:5 &bra # BLRAA, BLRAB 193 194ERET 1101011 0100 11111 000000 11111 00000 195ERETA 1101011 0100 11111 00001 m:1 11111 11111 &reta # ERETAA, ERETAB 196 197# We don't need to decode DRPS because it always UNDEFs except when 198# the processor is in halting debug state (which we don't implement). 199# The pattern is listed here as documentation. 200# DRPS 1101011 0101 11111 000000 11111 00000 201 202# Hint instruction group 203{ 204 [ 205 YIELD 1101 0101 0000 0011 0010 0000 001 11111 206 WFE 1101 0101 0000 0011 0010 0000 010 11111 207 WFI 1101 0101 0000 0011 0010 0000 011 11111 208 # We implement WFE to never block, so our SEV/SEVL are NOPs 209 # SEV 1101 0101 0000 0011 0010 0000 100 11111 210 # SEVL 1101 0101 0000 0011 0010 0000 101 11111 211 # Our DGL is a NOP because we don't merge memory accesses anyway. 212 # DGL 1101 0101 0000 0011 0010 0000 110 11111 213 XPACLRI 1101 0101 0000 0011 0010 0000 111 11111 214 PACIA1716 1101 0101 0000 0011 0010 0001 000 11111 215 PACIB1716 1101 0101 0000 0011 0010 0001 010 11111 216 AUTIA1716 1101 0101 0000 0011 0010 0001 100 11111 217 AUTIB1716 1101 0101 0000 0011 0010 0001 110 11111 218 ESB 1101 0101 0000 0011 0010 0010 000 11111 219 PACIAZ 1101 0101 0000 0011 0010 0011 000 11111 220 PACIASP 1101 0101 0000 0011 0010 0011 001 11111 221 PACIBZ 1101 0101 0000 0011 0010 0011 010 11111 222 PACIBSP 1101 0101 0000 0011 0010 0011 011 11111 223 AUTIAZ 1101 0101 0000 0011 0010 0011 100 11111 224 AUTIASP 1101 0101 0000 0011 0010 0011 101 11111 225 AUTIBZ 1101 0101 0000 0011 0010 0011 110 11111 226 AUTIBSP 1101 0101 0000 0011 0010 0011 111 11111 227 ] 228 # The canonical NOP has CRm == op2 == 0, but all of the space 229 # that isn't specifically allocated to an instruction must NOP 230 NOP 1101 0101 0000 0011 0010 ---- --- 11111 231} 232 233# System instructions with register argument 234WFET 1101 0101 0000 0011 0001 0000 000 rd:5 235WFIT 1101 0101 0000 0011 0001 0000 001 rd:5 236 237# Barriers 238 239CLREX 1101 0101 0000 0011 0011 ---- 010 11111 240DSB_DMB 1101 0101 0000 0011 0011 domain:2 types:2 10- 11111 241ISB 1101 0101 0000 0011 0011 ---- 110 11111 242SB 1101 0101 0000 0011 0011 0000 111 11111 243 244# PSTATE 245 246CFINV 1101 0101 0000 0 000 0100 0000 000 11111 247XAFLAG 1101 0101 0000 0 000 0100 0000 001 11111 248AXFLAG 1101 0101 0000 0 000 0100 0000 010 11111 249 250# These are architecturally all "MSR (immediate)"; we decode the destination 251# register too because there is no commonality in our implementation. 252@msr_i .... .... .... . ... .... imm:4 ... ..... 253MSR_i_UAO 1101 0101 0000 0 000 0100 .... 011 11111 @msr_i 254MSR_i_PAN 1101 0101 0000 0 000 0100 .... 100 11111 @msr_i 255MSR_i_SPSEL 1101 0101 0000 0 000 0100 .... 101 11111 @msr_i 256MSR_i_SBSS 1101 0101 0000 0 011 0100 .... 001 11111 @msr_i 257MSR_i_DIT 1101 0101 0000 0 011 0100 .... 010 11111 @msr_i 258MSR_i_TCO 1101 0101 0000 0 011 0100 .... 100 11111 @msr_i 259MSR_i_DAIFSET 1101 0101 0000 0 011 0100 .... 110 11111 @msr_i 260MSR_i_DAIFCLEAR 1101 0101 0000 0 011 0100 .... 111 11111 @msr_i 261MSR_i_ALLINT 1101 0101 0000 0 001 0100 000 imm:1 000 11111 262MSR_i_SVCR 1101 0101 0000 0 011 0100 0 mask:2 imm:1 011 11111 263 264# MRS, MSR (register), SYS, SYSL. These are all essentially the 265# same instruction as far as QEMU is concerned. 266# NB: op0 is bits [20:19], but op0=0b00 is other insns, so we have 267# to hand-decode it. 268SYS 1101 0101 00 l:1 01 op1:3 crn:4 crm:4 op2:3 rt:5 op0=1 269SYS 1101 0101 00 l:1 10 op1:3 crn:4 crm:4 op2:3 rt:5 op0=2 270SYS 1101 0101 00 l:1 11 op1:3 crn:4 crm:4 op2:3 rt:5 op0=3 271 272# Exception generation 273 274@i16 .... .... ... imm:16 ... .. &i 275SVC 1101 0100 000 ................ 000 01 @i16 276HVC 1101 0100 000 ................ 000 10 @i16 277SMC 1101 0100 000 ................ 000 11 @i16 278BRK 1101 0100 001 ................ 000 00 @i16 279HLT 1101 0100 010 ................ 000 00 @i16 280# These insns always UNDEF unless in halting debug state, which 281# we don't implement. So we don't need to decode them. The patterns 282# are listed here as documentation. 283# DCPS1 1101 0100 101 ................ 000 01 @i16 284# DCPS2 1101 0100 101 ................ 000 10 @i16 285# DCPS3 1101 0100 101 ................ 000 11 @i16 286 287# Loads and stores 288 289&stxr rn rt rt2 rs sz lasr 290&stlr rn rt sz lasr 291@stxr sz:2 ...... ... rs:5 lasr:1 rt2:5 rn:5 rt:5 &stxr 292@stlr sz:2 ...... ... ..... lasr:1 ..... rn:5 rt:5 &stlr 293%imm1_30_p2 30:1 !function=plus_2 294@stxp .. ...... ... rs:5 lasr:1 rt2:5 rn:5 rt:5 &stxr sz=%imm1_30_p2 295STXR .. 001000 000 ..... . ..... ..... ..... @stxr # inc STLXR 296LDXR .. 001000 010 ..... . ..... ..... ..... @stxr # inc LDAXR 297STLR .. 001000 100 11111 . 11111 ..... ..... @stlr # inc STLLR 298LDAR .. 001000 110 11111 . 11111 ..... ..... @stlr # inc LDLAR 299 300STXP 1 . 001000 001 ..... . ..... ..... ..... @stxp # inc STLXP 301LDXP 1 . 001000 011 ..... . ..... ..... ..... @stxp # inc LDAXP 302 303# CASP, CASPA, CASPAL, CASPL (we don't decode the bits that determine 304# acquire/release semantics because QEMU's cmpxchg always has those) 305CASP 0 . 001000 0 - 1 rs:5 - 11111 rn:5 rt:5 sz=%imm1_30_p2 306# CAS, CASA, CASAL, CASL 307CAS sz:2 001000 1 - 1 rs:5 - 11111 rn:5 rt:5 308 309&ldlit rt imm sz sign 310@ldlit .. ... . .. ................... rt:5 &ldlit imm=%imm19 311 312LD_lit 00 011 0 00 ................... ..... @ldlit sz=2 sign=0 313LD_lit 01 011 0 00 ................... ..... @ldlit sz=3 sign=0 314LD_lit 10 011 0 00 ................... ..... @ldlit sz=2 sign=1 315LD_lit_v 00 011 1 00 ................... ..... @ldlit sz=2 sign=0 316LD_lit_v 01 011 1 00 ................... ..... @ldlit sz=3 sign=0 317LD_lit_v 10 011 1 00 ................... ..... @ldlit sz=4 sign=0 318 319# PRFM 320NOP 11 011 0 00 ------------------- ----- 321 322&ldstpair rt2 rt rn imm sz sign w p 323@ldstpair .. ... . ... . imm:s7 rt2:5 rn:5 rt:5 &ldstpair 324 325# STNP, LDNP: Signed offset, non-temporal hint. We don't emulate caches 326# so we ignore hints about data access patterns, and handle these like 327# plain signed offset. 328STP 00 101 0 000 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 329LDP 00 101 0 000 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 330STP 10 101 0 000 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 331LDP 10 101 0 000 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 332STP_v 00 101 1 000 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 333LDP_v 00 101 1 000 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 334STP_v 01 101 1 000 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 335LDP_v 01 101 1 000 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 336STP_v 10 101 1 000 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0 337LDP_v 10 101 1 000 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0 338 339# STP and LDP: post-indexed 340STP 00 101 0 001 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1 341LDP 00 101 0 001 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1 342LDP 01 101 0 001 1 ....... ..... ..... ..... @ldstpair sz=2 sign=1 p=1 w=1 343STP 10 101 0 001 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1 344LDP 10 101 0 001 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1 345STP_v 00 101 1 001 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1 346LDP_v 00 101 1 001 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1 347STP_v 01 101 1 001 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1 348LDP_v 01 101 1 001 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1 349STP_v 10 101 1 001 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=1 w=1 350LDP_v 10 101 1 001 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=1 w=1 351 352# STP and LDP: offset 353STP 00 101 0 010 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 354LDP 00 101 0 010 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 355LDP 01 101 0 010 1 ....... ..... ..... ..... @ldstpair sz=2 sign=1 p=0 w=0 356STP 10 101 0 010 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 357LDP 10 101 0 010 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 358STP_v 00 101 1 010 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 359LDP_v 00 101 1 010 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0 360STP_v 01 101 1 010 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 361LDP_v 01 101 1 010 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 362STP_v 10 101 1 010 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0 363LDP_v 10 101 1 010 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0 364 365# STP and LDP: pre-indexed 366STP 00 101 0 011 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1 367LDP 00 101 0 011 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1 368LDP 01 101 0 011 1 ....... ..... ..... ..... @ldstpair sz=2 sign=1 p=0 w=1 369STP 10 101 0 011 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1 370LDP 10 101 0 011 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1 371STP_v 00 101 1 011 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1 372LDP_v 00 101 1 011 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1 373STP_v 01 101 1 011 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1 374LDP_v 01 101 1 011 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1 375STP_v 10 101 1 011 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=1 376LDP_v 10 101 1 011 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=1 377 378# STGP: store tag and pair 379STGP 01 101 0 001 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1 380STGP 01 101 0 010 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0 381STGP 01 101 0 011 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1 382 383# Load/store register (unscaled immediate) 384&ldst_imm rt rn imm sz sign w p unpriv ext 385@ldst_imm .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=0 p=0 w=0 386@ldst_imm_pre .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=0 p=0 w=1 387@ldst_imm_post .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=0 p=1 w=1 388@ldst_imm_user .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=1 p=0 w=0 389 390STR_i sz:2 111 0 00 00 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 391LDR_i 00 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=1 sz=0 392LDR_i 01 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=1 sz=1 393LDR_i 10 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=1 sz=2 394LDR_i 11 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 sz=3 395LDR_i 00 111 0 00 10 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=0 sz=0 396LDR_i 01 111 0 00 10 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=0 sz=1 397LDR_i 10 111 0 00 10 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=0 sz=2 398LDR_i 00 111 0 00 11 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=1 sz=0 399LDR_i 01 111 0 00 11 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=1 sz=1 400 401STR_i sz:2 111 0 00 00 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 402LDR_i 00 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=1 sz=0 403LDR_i 01 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=1 sz=1 404LDR_i 10 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=1 sz=2 405LDR_i 11 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 sz=3 406LDR_i 00 111 0 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=0 sz=0 407LDR_i 01 111 0 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=0 sz=1 408LDR_i 10 111 0 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=0 sz=2 409LDR_i 00 111 0 00 11 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=1 sz=0 410LDR_i 01 111 0 00 11 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=1 sz=1 411 412STR_i sz:2 111 0 00 00 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=0 413LDR_i 00 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=1 sz=0 414LDR_i 01 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=1 sz=1 415LDR_i 10 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=1 sz=2 416LDR_i 11 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=0 sz=3 417LDR_i 00 111 0 00 10 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=0 sz=0 418LDR_i 01 111 0 00 10 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=0 sz=1 419LDR_i 10 111 0 00 10 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=0 sz=2 420LDR_i 00 111 0 00 11 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=1 sz=0 421LDR_i 01 111 0 00 11 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=1 sz=1 422 423STR_i sz:2 111 0 00 00 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 424LDR_i 00 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=1 sz=0 425LDR_i 01 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=1 sz=1 426LDR_i 10 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=1 sz=2 427LDR_i 11 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 sz=3 428LDR_i 00 111 0 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=0 sz=0 429LDR_i 01 111 0 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=0 sz=1 430LDR_i 10 111 0 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=0 sz=2 431LDR_i 00 111 0 00 11 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=1 sz=0 432LDR_i 01 111 0 00 11 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=1 sz=1 433 434# PRFM : prefetch memory: a no-op for QEMU 435NOP 11 111 0 00 10 0 --------- 00 ----- ----- 436 437STR_v_i sz:2 111 1 00 00 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 438STR_v_i 00 111 1 00 10 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 sz=4 439LDR_v_i sz:2 111 1 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 440LDR_v_i 00 111 1 00 11 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 sz=4 441 442STR_v_i sz:2 111 1 00 00 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 443STR_v_i 00 111 1 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 sz=4 444LDR_v_i sz:2 111 1 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 445LDR_v_i 00 111 1 00 11 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 sz=4 446 447STR_v_i sz:2 111 1 00 00 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 448STR_v_i 00 111 1 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 sz=4 449LDR_v_i sz:2 111 1 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 450LDR_v_i 00 111 1 00 11 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 sz=4 451 452# Load/store with an unsigned 12 bit immediate, which is scaled by the 453# element size. The function gets the sz:imm and returns the scaled immediate. 454%uimm_scaled 10:12 sz:3 !function=uimm_scaled 455 456@ldst_uimm .. ... . .. .. ............ rn:5 rt:5 &ldst_imm unpriv=0 p=0 w=0 imm=%uimm_scaled 457 458STR_i sz:2 111 0 01 00 ............ ..... ..... @ldst_uimm sign=0 ext=0 459LDR_i 00 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=1 sz=0 460LDR_i 01 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=1 sz=1 461LDR_i 10 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=1 sz=2 462LDR_i 11 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=0 sz=3 463LDR_i 00 111 0 01 10 ............ ..... ..... @ldst_uimm sign=1 ext=0 sz=0 464LDR_i 01 111 0 01 10 ............ ..... ..... @ldst_uimm sign=1 ext=0 sz=1 465LDR_i 10 111 0 01 10 ............ ..... ..... @ldst_uimm sign=1 ext=0 sz=2 466LDR_i 00 111 0 01 11 ............ ..... ..... @ldst_uimm sign=1 ext=1 sz=0 467LDR_i 01 111 0 01 11 ............ ..... ..... @ldst_uimm sign=1 ext=1 sz=1 468 469# PRFM 470NOP 11 111 0 01 10 ------------ ----- ----- 471 472STR_v_i sz:2 111 1 01 00 ............ ..... ..... @ldst_uimm sign=0 ext=0 473STR_v_i 00 111 1 01 10 ............ ..... ..... @ldst_uimm sign=0 ext=0 sz=4 474LDR_v_i sz:2 111 1 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=0 475LDR_v_i 00 111 1 01 11 ............ ..... ..... @ldst_uimm sign=0 ext=0 sz=4 476 477# Load/store with register offset 478&ldst rm rn rt sign ext sz opt s 479@ldst .. ... . .. .. . rm:5 opt:3 s:1 .. rn:5 rt:5 &ldst 480STR sz:2 111 0 00 00 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 481LDR 00 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=1 sz=0 482LDR 01 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=1 sz=1 483LDR 10 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=1 sz=2 484LDR 11 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 sz=3 485LDR 00 111 0 00 10 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=0 sz=0 486LDR 01 111 0 00 10 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=0 sz=1 487LDR 10 111 0 00 10 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=0 sz=2 488LDR 00 111 0 00 11 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=1 sz=0 489LDR 01 111 0 00 11 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=1 sz=1 490 491# PRFM 492NOP 11 111 0 00 10 1 ----- -1- - 10 ----- ----- 493 494STR_v sz:2 111 1 00 00 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 495STR_v 00 111 1 00 10 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 sz=4 496LDR_v sz:2 111 1 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 497LDR_v 00 111 1 00 11 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 sz=4 498 499# Atomic memory operations 500&atomic rs rn rt a r sz 501@atomic sz:2 ... . .. a:1 r:1 . rs:5 . ... .. rn:5 rt:5 &atomic 502LDADD .. 111 0 00 . . 1 ..... 0000 00 ..... ..... @atomic 503LDCLR .. 111 0 00 . . 1 ..... 0001 00 ..... ..... @atomic 504LDEOR .. 111 0 00 . . 1 ..... 0010 00 ..... ..... @atomic 505LDSET .. 111 0 00 . . 1 ..... 0011 00 ..... ..... @atomic 506LDSMAX .. 111 0 00 . . 1 ..... 0100 00 ..... ..... @atomic 507LDSMIN .. 111 0 00 . . 1 ..... 0101 00 ..... ..... @atomic 508LDUMAX .. 111 0 00 . . 1 ..... 0110 00 ..... ..... @atomic 509LDUMIN .. 111 0 00 . . 1 ..... 0111 00 ..... ..... @atomic 510SWP .. 111 0 00 . . 1 ..... 1000 00 ..... ..... @atomic 511 512LDAPR sz:2 111 0 00 1 0 1 11111 1100 00 rn:5 rt:5 513 514# Load/store register (pointer authentication) 515 516# LDRA immediate is 10 bits signed and scaled, but the bits aren't all contiguous 517%ldra_imm 22:s1 12:9 !function=times_8 518 519LDRA 11 111 0 00 m:1 . 1 ......... w:1 1 rn:5 rt:5 imm=%ldra_imm 520 521&ldapr_stlr_i rn rt imm sz sign ext 522@ldapr_stlr_i .. ...... .. . imm:9 .. rn:5 rt:5 &ldapr_stlr_i 523STLR_i sz:2 011001 00 0 ......... 00 ..... ..... @ldapr_stlr_i sign=0 ext=0 524LDAPR_i sz:2 011001 01 0 ......... 00 ..... ..... @ldapr_stlr_i sign=0 ext=0 525LDAPR_i 00 011001 10 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=0 sz=0 526LDAPR_i 01 011001 10 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=0 sz=1 527LDAPR_i 10 011001 10 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=0 sz=2 528LDAPR_i 00 011001 11 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=1 sz=0 529LDAPR_i 01 011001 11 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=1 sz=1 530 531# Load/store multiple structures 532# The 4-bit opcode in [15:12] encodes repeat count and structure elements 533&ldst_mult rm rn rt sz q p rpt selem 534@ldst_mult . q:1 ...... p:1 . . rm:5 .... sz:2 rn:5 rt:5 &ldst_mult 535ST_mult 0 . 001100 . 0 0 ..... 0000 .. ..... ..... @ldst_mult rpt=1 selem=4 536ST_mult 0 . 001100 . 0 0 ..... 0010 .. ..... ..... @ldst_mult rpt=4 selem=1 537ST_mult 0 . 001100 . 0 0 ..... 0100 .. ..... ..... @ldst_mult rpt=1 selem=3 538ST_mult 0 . 001100 . 0 0 ..... 0110 .. ..... ..... @ldst_mult rpt=3 selem=1 539ST_mult 0 . 001100 . 0 0 ..... 0111 .. ..... ..... @ldst_mult rpt=1 selem=1 540ST_mult 0 . 001100 . 0 0 ..... 1000 .. ..... ..... @ldst_mult rpt=1 selem=2 541ST_mult 0 . 001100 . 0 0 ..... 1010 .. ..... ..... @ldst_mult rpt=2 selem=1 542 543LD_mult 0 . 001100 . 1 0 ..... 0000 .. ..... ..... @ldst_mult rpt=1 selem=4 544LD_mult 0 . 001100 . 1 0 ..... 0010 .. ..... ..... @ldst_mult rpt=4 selem=1 545LD_mult 0 . 001100 . 1 0 ..... 0100 .. ..... ..... @ldst_mult rpt=1 selem=3 546LD_mult 0 . 001100 . 1 0 ..... 0110 .. ..... ..... @ldst_mult rpt=3 selem=1 547LD_mult 0 . 001100 . 1 0 ..... 0111 .. ..... ..... @ldst_mult rpt=1 selem=1 548LD_mult 0 . 001100 . 1 0 ..... 1000 .. ..... ..... @ldst_mult rpt=1 selem=2 549LD_mult 0 . 001100 . 1 0 ..... 1010 .. ..... ..... @ldst_mult rpt=2 selem=1 550 551# Load/store single structure 552&ldst_single rm rn rt p selem index scale 553 554%ldst_single_selem 13:1 21:1 !function=plus_1 555 556%ldst_single_index_b 30:1 10:3 557%ldst_single_index_h 30:1 11:2 558%ldst_single_index_s 30:1 12:1 559 560@ldst_single_b .. ...... p:1 .. rm:5 ...... rn:5 rt:5 \ 561 &ldst_single scale=0 selem=%ldst_single_selem \ 562 index=%ldst_single_index_b 563@ldst_single_h .. ...... p:1 .. rm:5 ...... rn:5 rt:5 \ 564 &ldst_single scale=1 selem=%ldst_single_selem \ 565 index=%ldst_single_index_h 566@ldst_single_s .. ...... p:1 .. rm:5 ...... rn:5 rt:5 \ 567 &ldst_single scale=2 selem=%ldst_single_selem \ 568 index=%ldst_single_index_s 569@ldst_single_d . index:1 ...... p:1 .. rm:5 ...... rn:5 rt:5 \ 570 &ldst_single scale=3 selem=%ldst_single_selem 571 572ST_single 0 . 001101 . 0 . ..... 00 . ... ..... ..... @ldst_single_b 573ST_single 0 . 001101 . 0 . ..... 01 . ..0 ..... ..... @ldst_single_h 574ST_single 0 . 001101 . 0 . ..... 10 . .00 ..... ..... @ldst_single_s 575ST_single 0 . 001101 . 0 . ..... 10 . 001 ..... ..... @ldst_single_d 576 577LD_single 0 . 001101 . 1 . ..... 00 . ... ..... ..... @ldst_single_b 578LD_single 0 . 001101 . 1 . ..... 01 . ..0 ..... ..... @ldst_single_h 579LD_single 0 . 001101 . 1 . ..... 10 . .00 ..... ..... @ldst_single_s 580LD_single 0 . 001101 . 1 . ..... 10 . 001 ..... ..... @ldst_single_d 581 582# Replicating load case 583LD_single_repl 0 q:1 001101 p:1 1 . rm:5 11 . 0 scale:2 rn:5 rt:5 selem=%ldst_single_selem 584 585%tag_offset 12:s9 !function=scale_by_log2_tag_granule 586&ldst_tag rn rt imm p w 587@ldst_tag ........ .. . ......... .. rn:5 rt:5 &ldst_tag imm=%tag_offset 588@ldst_tag_mult ........ .. . 000000000 .. rn:5 rt:5 &ldst_tag imm=0 589 590STZGM 11011001 00 1 ......... 00 ..... ..... @ldst_tag_mult p=0 w=0 591STG 11011001 00 1 ......... 01 ..... ..... @ldst_tag p=1 w=1 592STG 11011001 00 1 ......... 10 ..... ..... @ldst_tag p=0 w=0 593STG 11011001 00 1 ......... 11 ..... ..... @ldst_tag p=0 w=1 594 595LDG 11011001 01 1 ......... 00 ..... ..... @ldst_tag p=0 w=0 596STZG 11011001 01 1 ......... 01 ..... ..... @ldst_tag p=1 w=1 597STZG 11011001 01 1 ......... 10 ..... ..... @ldst_tag p=0 w=0 598STZG 11011001 01 1 ......... 11 ..... ..... @ldst_tag p=0 w=1 599 600STGM 11011001 10 1 ......... 00 ..... ..... @ldst_tag_mult p=0 w=0 601ST2G 11011001 10 1 ......... 01 ..... ..... @ldst_tag p=1 w=1 602ST2G 11011001 10 1 ......... 10 ..... ..... @ldst_tag p=0 w=0 603ST2G 11011001 10 1 ......... 11 ..... ..... @ldst_tag p=0 w=1 604 605LDGM 11011001 11 1 ......... 00 ..... ..... @ldst_tag_mult p=0 w=0 606STZ2G 11011001 11 1 ......... 01 ..... ..... @ldst_tag p=1 w=1 607STZ2G 11011001 11 1 ......... 10 ..... ..... @ldst_tag p=0 w=0 608STZ2G 11011001 11 1 ......... 11 ..... ..... @ldst_tag p=0 w=1 609 610# Memory operations (memset, memcpy, memmove) 611# Each of these comes in a set of three, eg SETP (prologue), SETM (main), 612# SETE (epilogue), and each of those has different flavours to 613# indicate whether memory accesses should be unpriv or non-temporal. 614# We don't distinguish temporal and non-temporal accesses, but we 615# do need to report it in syndrome register values. 616 617# Memset 618&set rs rn rd unpriv nontemp 619# op2 bit 1 is nontemporal bit 620@set .. ......... rs:5 .. nontemp:1 unpriv:1 .. rn:5 rd:5 &set 621 622SETP 00 011001110 ..... 00 . . 01 ..... ..... @set 623SETM 00 011001110 ..... 01 . . 01 ..... ..... @set 624SETE 00 011001110 ..... 10 . . 01 ..... ..... @set 625 626# Like SET, but also setting MTE tags 627SETGP 00 011101110 ..... 00 . . 01 ..... ..... @set 628SETGM 00 011101110 ..... 01 . . 01 ..... ..... @set 629SETGE 00 011101110 ..... 10 . . 01 ..... ..... @set 630 631# Memmove/Memcopy: the CPY insns allow overlapping src/dest and 632# copy in the correct direction; the CPYF insns always copy forwards. 633# 634# options has the nontemporal and unpriv bits for src and dest 635&cpy rs rn rd options 636@cpy .. ... . ..... rs:5 options:4 .. rn:5 rd:5 &cpy 637 638CPYFP 00 011 0 01000 ..... .... 01 ..... ..... @cpy 639CPYFM 00 011 0 01010 ..... .... 01 ..... ..... @cpy 640CPYFE 00 011 0 01100 ..... .... 01 ..... ..... @cpy 641CPYP 00 011 1 01000 ..... .... 01 ..... ..... @cpy 642CPYM 00 011 1 01010 ..... .... 01 ..... ..... @cpy 643CPYE 00 011 1 01100 ..... .... 01 ..... ..... @cpy 644 645### Cryptographic AES 646 647AESE 01001110 00 10100 00100 10 ..... ..... @r2r_q1e0 648AESD 01001110 00 10100 00101 10 ..... ..... @r2r_q1e0 649AESMC 01001110 00 10100 00110 10 ..... ..... @rr_q1e0 650AESIMC 01001110 00 10100 00111 10 ..... ..... @rr_q1e0 651 652### Cryptographic three-register SHA 653 654SHA1C 0101 1110 000 ..... 000000 ..... ..... @rrr_q1e0 655SHA1P 0101 1110 000 ..... 000100 ..... ..... @rrr_q1e0 656SHA1M 0101 1110 000 ..... 001000 ..... ..... @rrr_q1e0 657SHA1SU0 0101 1110 000 ..... 001100 ..... ..... @rrr_q1e0 658SHA256H 0101 1110 000 ..... 010000 ..... ..... @rrr_q1e0 659SHA256H2 0101 1110 000 ..... 010100 ..... ..... @rrr_q1e0 660SHA256SU1 0101 1110 000 ..... 011000 ..... ..... @rrr_q1e0 661 662### Cryptographic two-register SHA 663 664SHA1H 0101 1110 0010 1000 0000 10 ..... ..... @rr_q1e0 665SHA1SU1 0101 1110 0010 1000 0001 10 ..... ..... @rr_q1e0 666SHA256SU0 0101 1110 0010 1000 0010 10 ..... ..... @rr_q1e0 667 668### Cryptographic three-register SHA512 669 670SHA512H 1100 1110 011 ..... 100000 ..... ..... @rrr_q1e0 671SHA512H2 1100 1110 011 ..... 100001 ..... ..... @rrr_q1e0 672SHA512SU1 1100 1110 011 ..... 100010 ..... ..... @rrr_q1e0 673RAX1 1100 1110 011 ..... 100011 ..... ..... @rrr_q1e3 674SM3PARTW1 1100 1110 011 ..... 110000 ..... ..... @rrr_q1e0 675SM3PARTW2 1100 1110 011 ..... 110001 ..... ..... @rrr_q1e0 676SM4EKEY 1100 1110 011 ..... 110010 ..... ..... @rrr_q1e0 677 678### Cryptographic two-register SHA512 679 680SHA512SU0 1100 1110 110 00000 100000 ..... ..... @rr_q1e0 681SM4E 1100 1110 110 00000 100001 ..... ..... @r2r_q1e0 682 683### Cryptographic four-register 684 685EOR3 1100 1110 000 ..... 0 ..... ..... ..... @rrrr_q1e3 686BCAX 1100 1110 001 ..... 0 ..... ..... ..... @rrrr_q1e3 687SM3SS1 1100 1110 010 ..... 0 ..... ..... ..... @rrrr_q1e3 688 689### Cryptographic three-register, imm2 690 691&crypto3i rd rn rm imm 692@crypto3i ........ ... rm:5 .. imm:2 .. rn:5 rd:5 &crypto3i 693 694SM3TT1A 11001110 010 ..... 10 .. 00 ..... ..... @crypto3i 695SM3TT1B 11001110 010 ..... 10 .. 01 ..... ..... @crypto3i 696SM3TT2A 11001110 010 ..... 10 .. 10 ..... ..... @crypto3i 697SM3TT2B 11001110 010 ..... 10 .. 11 ..... ..... @crypto3i 698 699### Cryptographic XAR 700 701XAR 1100 1110 100 rm:5 imm:6 rn:5 rd:5 702 703### Advanced SIMD scalar copy 704 705DUP_element_s 0101 1110 000 imm:5 0 0000 1 rn:5 rd:5 706 707### Advanced SIMD copy 708 709DUP_element_v 0 q:1 00 1110 000 imm:5 0 0000 1 rn:5 rd:5 710DUP_general 0 q:1 00 1110 000 imm:5 0 0001 1 rn:5 rd:5 711INS_general 0 1 00 1110 000 imm:5 0 0011 1 rn:5 rd:5 712SMOV 0 q:1 00 1110 000 imm:5 0 0101 1 rn:5 rd:5 713UMOV 0 q:1 00 1110 000 imm:5 0 0111 1 rn:5 rd:5 714INS_element 0 1 10 1110 000 di:5 0 si:4 1 rn:5 rd:5 715 716### Advanced SIMD scalar three same 717 718FADD_s 0001 1110 ..1 ..... 0010 10 ..... ..... @rrr_hsd 719FSUB_s 0001 1110 ..1 ..... 0011 10 ..... ..... @rrr_hsd 720FDIV_s 0001 1110 ..1 ..... 0001 10 ..... ..... @rrr_hsd 721FMUL_s 0001 1110 ..1 ..... 0000 10 ..... ..... @rrr_hsd 722FNMUL_s 0001 1110 ..1 ..... 1000 10 ..... ..... @rrr_hsd 723 724FMAX_s 0001 1110 ..1 ..... 0100 10 ..... ..... @rrr_hsd 725FMIN_s 0001 1110 ..1 ..... 0101 10 ..... ..... @rrr_hsd 726FMAXNM_s 0001 1110 ..1 ..... 0110 10 ..... ..... @rrr_hsd 727FMINNM_s 0001 1110 ..1 ..... 0111 10 ..... ..... @rrr_hsd 728 729FMULX_s 0101 1110 010 ..... 00011 1 ..... ..... @rrr_h 730FMULX_s 0101 1110 0.1 ..... 11011 1 ..... ..... @rrr_sd 731 732FCMEQ_s 0101 1110 010 ..... 00100 1 ..... ..... @rrr_h 733FCMEQ_s 0101 1110 0.1 ..... 11100 1 ..... ..... @rrr_sd 734 735FCMGE_s 0111 1110 010 ..... 00100 1 ..... ..... @rrr_h 736FCMGE_s 0111 1110 0.1 ..... 11100 1 ..... ..... @rrr_sd 737 738FCMGT_s 0111 1110 110 ..... 00100 1 ..... ..... @rrr_h 739FCMGT_s 0111 1110 1.1 ..... 11100 1 ..... ..... @rrr_sd 740 741FACGE_s 0111 1110 010 ..... 00101 1 ..... ..... @rrr_h 742FACGE_s 0111 1110 0.1 ..... 11101 1 ..... ..... @rrr_sd 743 744FACGT_s 0111 1110 110 ..... 00101 1 ..... ..... @rrr_h 745FACGT_s 0111 1110 1.1 ..... 11101 1 ..... ..... @rrr_sd 746 747FABD_s 0111 1110 110 ..... 00010 1 ..... ..... @rrr_h 748FABD_s 0111 1110 1.1 ..... 11010 1 ..... ..... @rrr_sd 749 750FRECPS_s 0101 1110 010 ..... 00111 1 ..... ..... @rrr_h 751FRECPS_s 0101 1110 0.1 ..... 11111 1 ..... ..... @rrr_sd 752 753FRSQRTS_s 0101 1110 110 ..... 00111 1 ..... ..... @rrr_h 754FRSQRTS_s 0101 1110 1.1 ..... 11111 1 ..... ..... @rrr_sd 755 756SQADD_s 0101 1110 ..1 ..... 00001 1 ..... ..... @rrr_e 757UQADD_s 0111 1110 ..1 ..... 00001 1 ..... ..... @rrr_e 758SQSUB_s 0101 1110 ..1 ..... 00101 1 ..... ..... @rrr_e 759UQSUB_s 0111 1110 ..1 ..... 00101 1 ..... ..... @rrr_e 760 761SUQADD_s 0101 1110 ..1 00000 00111 0 ..... ..... @r2r_e 762USQADD_s 0111 1110 ..1 00000 00111 0 ..... ..... @r2r_e 763 764SSHL_s 0101 1110 111 ..... 01000 1 ..... ..... @rrr_d 765USHL_s 0111 1110 111 ..... 01000 1 ..... ..... @rrr_d 766SRSHL_s 0101 1110 111 ..... 01010 1 ..... ..... @rrr_d 767URSHL_s 0111 1110 111 ..... 01010 1 ..... ..... @rrr_d 768SQSHL_s 0101 1110 ..1 ..... 01001 1 ..... ..... @rrr_e 769UQSHL_s 0111 1110 ..1 ..... 01001 1 ..... ..... @rrr_e 770SQRSHL_s 0101 1110 ..1 ..... 01011 1 ..... ..... @rrr_e 771UQRSHL_s 0111 1110 ..1 ..... 01011 1 ..... ..... @rrr_e 772 773ADD_s 0101 1110 111 ..... 10000 1 ..... ..... @rrr_d 774SUB_s 0111 1110 111 ..... 10000 1 ..... ..... @rrr_d 775CMGT_s 0101 1110 111 ..... 00110 1 ..... ..... @rrr_d 776CMHI_s 0111 1110 111 ..... 00110 1 ..... ..... @rrr_d 777CMGE_s 0101 1110 111 ..... 00111 1 ..... ..... @rrr_d 778CMHS_s 0111 1110 111 ..... 00111 1 ..... ..... @rrr_d 779CMTST_s 0101 1110 111 ..... 10001 1 ..... ..... @rrr_d 780CMEQ_s 0111 1110 111 ..... 10001 1 ..... ..... @rrr_d 781 782SQDMULH_s 0101 1110 ..1 ..... 10110 1 ..... ..... @rrr_e 783SQRDMULH_s 0111 1110 ..1 ..... 10110 1 ..... ..... @rrr_e 784SQRDMLAH_s 0111 1110 ..0 ..... 10000 1 ..... ..... @rrr_e 785SQRDMLSH_s 0111 1110 ..0 ..... 10001 1 ..... ..... @rrr_e 786 787### Advanced SIMD scalar pairwise 788 789FADDP_s 0101 1110 0011 0000 1101 10 ..... ..... @rr_h 790FADDP_s 0111 1110 0.11 0000 1101 10 ..... ..... @rr_sd 791 792FMAXP_s 0101 1110 0011 0000 1111 10 ..... ..... @rr_h 793FMAXP_s 0111 1110 0.11 0000 1111 10 ..... ..... @rr_sd 794 795FMINP_s 0101 1110 1011 0000 1111 10 ..... ..... @rr_h 796FMINP_s 0111 1110 1.11 0000 1111 10 ..... ..... @rr_sd 797 798FMAXNMP_s 0101 1110 0011 0000 1100 10 ..... ..... @rr_h 799FMAXNMP_s 0111 1110 0.11 0000 1100 10 ..... ..... @rr_sd 800 801FMINNMP_s 0101 1110 1011 0000 1100 10 ..... ..... @rr_h 802FMINNMP_s 0111 1110 1.11 0000 1100 10 ..... ..... @rr_sd 803 804ADDP_s 0101 1110 1111 0001 1011 10 ..... ..... @rr_d 805 806### Advanced SIMD three same 807 808FADD_v 0.00 1110 010 ..... 00010 1 ..... ..... @qrrr_h 809FADD_v 0.00 1110 0.1 ..... 11010 1 ..... ..... @qrrr_sd 810 811FSUB_v 0.00 1110 110 ..... 00010 1 ..... ..... @qrrr_h 812FSUB_v 0.00 1110 1.1 ..... 11010 1 ..... ..... @qrrr_sd 813 814FDIV_v 0.10 1110 010 ..... 00111 1 ..... ..... @qrrr_h 815FDIV_v 0.10 1110 0.1 ..... 11111 1 ..... ..... @qrrr_sd 816 817FMUL_v 0.10 1110 010 ..... 00011 1 ..... ..... @qrrr_h 818FMUL_v 0.10 1110 0.1 ..... 11011 1 ..... ..... @qrrr_sd 819 820FMAX_v 0.00 1110 010 ..... 00110 1 ..... ..... @qrrr_h 821FMAX_v 0.00 1110 0.1 ..... 11110 1 ..... ..... @qrrr_sd 822 823FMIN_v 0.00 1110 110 ..... 00110 1 ..... ..... @qrrr_h 824FMIN_v 0.00 1110 1.1 ..... 11110 1 ..... ..... @qrrr_sd 825 826FMAXNM_v 0.00 1110 010 ..... 00000 1 ..... ..... @qrrr_h 827FMAXNM_v 0.00 1110 0.1 ..... 11000 1 ..... ..... @qrrr_sd 828 829FMINNM_v 0.00 1110 110 ..... 00000 1 ..... ..... @qrrr_h 830FMINNM_v 0.00 1110 1.1 ..... 11000 1 ..... ..... @qrrr_sd 831 832FMULX_v 0.00 1110 010 ..... 00011 1 ..... ..... @qrrr_h 833FMULX_v 0.00 1110 0.1 ..... 11011 1 ..... ..... @qrrr_sd 834 835FMLA_v 0.00 1110 010 ..... 00001 1 ..... ..... @qrrr_h 836FMLA_v 0.00 1110 0.1 ..... 11001 1 ..... ..... @qrrr_sd 837 838FMLS_v 0.00 1110 110 ..... 00001 1 ..... ..... @qrrr_h 839FMLS_v 0.00 1110 1.1 ..... 11001 1 ..... ..... @qrrr_sd 840 841FMLAL_v 0.00 1110 001 ..... 11101 1 ..... ..... @qrrr_h 842FMLSL_v 0.00 1110 101 ..... 11101 1 ..... ..... @qrrr_h 843FMLAL2_v 0.10 1110 001 ..... 11001 1 ..... ..... @qrrr_h 844FMLSL2_v 0.10 1110 101 ..... 11001 1 ..... ..... @qrrr_h 845 846FCMEQ_v 0.00 1110 010 ..... 00100 1 ..... ..... @qrrr_h 847FCMEQ_v 0.00 1110 0.1 ..... 11100 1 ..... ..... @qrrr_sd 848 849FCMGE_v 0.10 1110 010 ..... 00100 1 ..... ..... @qrrr_h 850FCMGE_v 0.10 1110 0.1 ..... 11100 1 ..... ..... @qrrr_sd 851 852FCMGT_v 0.10 1110 110 ..... 00100 1 ..... ..... @qrrr_h 853FCMGT_v 0.10 1110 1.1 ..... 11100 1 ..... ..... @qrrr_sd 854 855FACGE_v 0.10 1110 010 ..... 00101 1 ..... ..... @qrrr_h 856FACGE_v 0.10 1110 0.1 ..... 11101 1 ..... ..... @qrrr_sd 857 858FACGT_v 0.10 1110 110 ..... 00101 1 ..... ..... @qrrr_h 859FACGT_v 0.10 1110 1.1 ..... 11101 1 ..... ..... @qrrr_sd 860 861FABD_v 0.10 1110 110 ..... 00010 1 ..... ..... @qrrr_h 862FABD_v 0.10 1110 1.1 ..... 11010 1 ..... ..... @qrrr_sd 863 864FRECPS_v 0.00 1110 010 ..... 00111 1 ..... ..... @qrrr_h 865FRECPS_v 0.00 1110 0.1 ..... 11111 1 ..... ..... @qrrr_sd 866 867FRSQRTS_v 0.00 1110 110 ..... 00111 1 ..... ..... @qrrr_h 868FRSQRTS_v 0.00 1110 1.1 ..... 11111 1 ..... ..... @qrrr_sd 869 870FADDP_v 0.10 1110 010 ..... 00010 1 ..... ..... @qrrr_h 871FADDP_v 0.10 1110 0.1 ..... 11010 1 ..... ..... @qrrr_sd 872 873FMAXP_v 0.10 1110 010 ..... 00110 1 ..... ..... @qrrr_h 874FMAXP_v 0.10 1110 0.1 ..... 11110 1 ..... ..... @qrrr_sd 875 876FMINP_v 0.10 1110 110 ..... 00110 1 ..... ..... @qrrr_h 877FMINP_v 0.10 1110 1.1 ..... 11110 1 ..... ..... @qrrr_sd 878 879FMAXNMP_v 0.10 1110 010 ..... 00000 1 ..... ..... @qrrr_h 880FMAXNMP_v 0.10 1110 0.1 ..... 11000 1 ..... ..... @qrrr_sd 881 882FMINNMP_v 0.10 1110 110 ..... 00000 1 ..... ..... @qrrr_h 883FMINNMP_v 0.10 1110 1.1 ..... 11000 1 ..... ..... @qrrr_sd 884 885ADDP_v 0.00 1110 ..1 ..... 10111 1 ..... ..... @qrrr_e 886SMAXP_v 0.00 1110 ..1 ..... 10100 1 ..... ..... @qrrr_e 887SMINP_v 0.00 1110 ..1 ..... 10101 1 ..... ..... @qrrr_e 888UMAXP_v 0.10 1110 ..1 ..... 10100 1 ..... ..... @qrrr_e 889UMINP_v 0.10 1110 ..1 ..... 10101 1 ..... ..... @qrrr_e 890 891AND_v 0.00 1110 001 ..... 00011 1 ..... ..... @qrrr_b 892BIC_v 0.00 1110 011 ..... 00011 1 ..... ..... @qrrr_b 893ORR_v 0.00 1110 101 ..... 00011 1 ..... ..... @qrrr_b 894ORN_v 0.00 1110 111 ..... 00011 1 ..... ..... @qrrr_b 895EOR_v 0.10 1110 001 ..... 00011 1 ..... ..... @qrrr_b 896BSL_v 0.10 1110 011 ..... 00011 1 ..... ..... @qrrr_b 897BIT_v 0.10 1110 101 ..... 00011 1 ..... ..... @qrrr_b 898BIF_v 0.10 1110 111 ..... 00011 1 ..... ..... @qrrr_b 899 900SQADD_v 0.00 1110 ..1 ..... 00001 1 ..... ..... @qrrr_e 901UQADD_v 0.10 1110 ..1 ..... 00001 1 ..... ..... @qrrr_e 902SQSUB_v 0.00 1110 ..1 ..... 00101 1 ..... ..... @qrrr_e 903UQSUB_v 0.10 1110 ..1 ..... 00101 1 ..... ..... @qrrr_e 904 905SUQADD_v 0.00 1110 ..1 00000 00111 0 ..... ..... @qr2r_e 906USQADD_v 0.10 1110 ..1 00000 00111 0 ..... ..... @qr2r_e 907 908SSHL_v 0.00 1110 ..1 ..... 01000 1 ..... ..... @qrrr_e 909USHL_v 0.10 1110 ..1 ..... 01000 1 ..... ..... @qrrr_e 910SRSHL_v 0.00 1110 ..1 ..... 01010 1 ..... ..... @qrrr_e 911URSHL_v 0.10 1110 ..1 ..... 01010 1 ..... ..... @qrrr_e 912SQSHL_v 0.00 1110 ..1 ..... 01001 1 ..... ..... @qrrr_e 913UQSHL_v 0.10 1110 ..1 ..... 01001 1 ..... ..... @qrrr_e 914SQRSHL_v 0.00 1110 ..1 ..... 01011 1 ..... ..... @qrrr_e 915UQRSHL_v 0.10 1110 ..1 ..... 01011 1 ..... ..... @qrrr_e 916 917ADD_v 0.00 1110 ..1 ..... 10000 1 ..... ..... @qrrr_e 918SUB_v 0.10 1110 ..1 ..... 10000 1 ..... ..... @qrrr_e 919CMGT_v 0.00 1110 ..1 ..... 00110 1 ..... ..... @qrrr_e 920CMHI_v 0.10 1110 ..1 ..... 00110 1 ..... ..... @qrrr_e 921CMGE_v 0.00 1110 ..1 ..... 00111 1 ..... ..... @qrrr_e 922CMHS_v 0.10 1110 ..1 ..... 00111 1 ..... ..... @qrrr_e 923CMTST_v 0.00 1110 ..1 ..... 10001 1 ..... ..... @qrrr_e 924CMEQ_v 0.10 1110 ..1 ..... 10001 1 ..... ..... @qrrr_e 925SHADD_v 0.00 1110 ..1 ..... 00000 1 ..... ..... @qrrr_e 926UHADD_v 0.10 1110 ..1 ..... 00000 1 ..... ..... @qrrr_e 927SHSUB_v 0.00 1110 ..1 ..... 00100 1 ..... ..... @qrrr_e 928UHSUB_v 0.10 1110 ..1 ..... 00100 1 ..... ..... @qrrr_e 929SRHADD_v 0.00 1110 ..1 ..... 00010 1 ..... ..... @qrrr_e 930URHADD_v 0.10 1110 ..1 ..... 00010 1 ..... ..... @qrrr_e 931SMAX_v 0.00 1110 ..1 ..... 01100 1 ..... ..... @qrrr_e 932UMAX_v 0.10 1110 ..1 ..... 01100 1 ..... ..... @qrrr_e 933SMIN_v 0.00 1110 ..1 ..... 01101 1 ..... ..... @qrrr_e 934UMIN_v 0.10 1110 ..1 ..... 01101 1 ..... ..... @qrrr_e 935SABD_v 0.00 1110 ..1 ..... 01110 1 ..... ..... @qrrr_e 936UABD_v 0.10 1110 ..1 ..... 01110 1 ..... ..... @qrrr_e 937SABA_v 0.00 1110 ..1 ..... 01111 1 ..... ..... @qrrr_e 938UABA_v 0.10 1110 ..1 ..... 01111 1 ..... ..... @qrrr_e 939MUL_v 0.00 1110 ..1 ..... 10011 1 ..... ..... @qrrr_e 940PMUL_v 0.10 1110 001 ..... 10011 1 ..... ..... @qrrr_b 941MLA_v 0.00 1110 ..1 ..... 10010 1 ..... ..... @qrrr_e 942MLS_v 0.10 1110 ..1 ..... 10010 1 ..... ..... @qrrr_e 943 944SQDMULH_v 0.00 1110 ..1 ..... 10110 1 ..... ..... @qrrr_e 945SQRDMULH_v 0.10 1110 ..1 ..... 10110 1 ..... ..... @qrrr_e 946SQRDMLAH_v 0.10 1110 ..0 ..... 10000 1 ..... ..... @qrrr_e 947SQRDMLSH_v 0.10 1110 ..0 ..... 10001 1 ..... ..... @qrrr_e 948 949### Advanced SIMD scalar x indexed element 950 951FMUL_si 0101 1111 00 .. .... 1001 . 0 ..... ..... @rrx_h 952FMUL_si 0101 1111 10 . ..... 1001 . 0 ..... ..... @rrx_s 953FMUL_si 0101 1111 11 0 ..... 1001 . 0 ..... ..... @rrx_d 954 955FMLA_si 0101 1111 00 .. .... 0001 . 0 ..... ..... @rrx_h 956FMLA_si 0101 1111 10 .. .... 0001 . 0 ..... ..... @rrx_s 957FMLA_si 0101 1111 11 0. .... 0001 . 0 ..... ..... @rrx_d 958 959FMLS_si 0101 1111 00 .. .... 0101 . 0 ..... ..... @rrx_h 960FMLS_si 0101 1111 10 .. .... 0101 . 0 ..... ..... @rrx_s 961FMLS_si 0101 1111 11 0. .... 0101 . 0 ..... ..... @rrx_d 962 963FMULX_si 0111 1111 00 .. .... 1001 . 0 ..... ..... @rrx_h 964FMULX_si 0111 1111 10 . ..... 1001 . 0 ..... ..... @rrx_s 965FMULX_si 0111 1111 11 0 ..... 1001 . 0 ..... ..... @rrx_d 966 967SQDMULH_si 0101 1111 01 .. .... 1100 . 0 ..... ..... @rrx_h 968SQDMULH_si 0101 1111 10 .. .... 1100 . 0 ..... ..... @rrx_s 969 970SQRDMULH_si 0101 1111 01 .. .... 1101 . 0 ..... ..... @rrx_h 971SQRDMULH_si 0101 1111 10 . ..... 1101 . 0 ..... ..... @rrx_s 972 973SQRDMLAH_si 0111 1111 01 .. .... 1101 . 0 ..... ..... @rrx_h 974SQRDMLAH_si 0111 1111 10 .. .... 1101 . 0 ..... ..... @rrx_s 975 976SQRDMLSH_si 0111 1111 01 .. .... 1111 . 0 ..... ..... @rrx_h 977SQRDMLSH_si 0111 1111 10 .. .... 1111 . 0 ..... ..... @rrx_s 978 979### Advanced SIMD vector x indexed element 980 981FMUL_vi 0.00 1111 00 .. .... 1001 . 0 ..... ..... @qrrx_h 982FMUL_vi 0.00 1111 10 . ..... 1001 . 0 ..... ..... @qrrx_s 983FMUL_vi 0.00 1111 11 0 ..... 1001 . 0 ..... ..... @qrrx_d 984 985FMLA_vi 0.00 1111 00 .. .... 0001 . 0 ..... ..... @qrrx_h 986FMLA_vi 0.00 1111 10 . ..... 0001 . 0 ..... ..... @qrrx_s 987FMLA_vi 0.00 1111 11 0 ..... 0001 . 0 ..... ..... @qrrx_d 988 989FMLS_vi 0.00 1111 00 .. .... 0101 . 0 ..... ..... @qrrx_h 990FMLS_vi 0.00 1111 10 . ..... 0101 . 0 ..... ..... @qrrx_s 991FMLS_vi 0.00 1111 11 0 ..... 0101 . 0 ..... ..... @qrrx_d 992 993FMULX_vi 0.10 1111 00 .. .... 1001 . 0 ..... ..... @qrrx_h 994FMULX_vi 0.10 1111 10 . ..... 1001 . 0 ..... ..... @qrrx_s 995FMULX_vi 0.10 1111 11 0 ..... 1001 . 0 ..... ..... @qrrx_d 996 997FMLAL_vi 0.00 1111 10 .. .... 0000 . 0 ..... ..... @qrrx_h 998FMLSL_vi 0.00 1111 10 .. .... 0100 . 0 ..... ..... @qrrx_h 999FMLAL2_vi 0.10 1111 10 .. .... 1000 . 0 ..... ..... @qrrx_h 1000FMLSL2_vi 0.10 1111 10 .. .... 1100 . 0 ..... ..... @qrrx_h 1001 1002MUL_vi 0.00 1111 01 .. .... 1000 . 0 ..... ..... @qrrx_h 1003MUL_vi 0.00 1111 10 . ..... 1000 . 0 ..... ..... @qrrx_s 1004 1005MLA_vi 0.10 1111 01 .. .... 0000 . 0 ..... ..... @qrrx_h 1006MLA_vi 0.10 1111 10 . ..... 0000 . 0 ..... ..... @qrrx_s 1007 1008MLS_vi 0.10 1111 01 .. .... 0100 . 0 ..... ..... @qrrx_h 1009MLS_vi 0.10 1111 10 . ..... 0100 . 0 ..... ..... @qrrx_s 1010 1011SQDMULH_vi 0.00 1111 01 .. .... 1100 . 0 ..... ..... @qrrx_h 1012SQDMULH_vi 0.00 1111 10 . ..... 1100 . 0 ..... ..... @qrrx_s 1013 1014SQRDMULH_vi 0.00 1111 01 .. .... 1101 . 0 ..... ..... @qrrx_h 1015SQRDMULH_vi 0.00 1111 10 . ..... 1101 . 0 ..... ..... @qrrx_s 1016 1017SQRDMLAH_vi 0.10 1111 01 .. .... 1101 . 0 ..... ..... @qrrx_h 1018SQRDMLAH_vi 0.10 1111 10 .. .... 1101 . 0 ..... ..... @qrrx_s 1019 1020SQRDMLSH_vi 0.10 1111 01 .. .... 1111 . 0 ..... ..... @qrrx_h 1021SQRDMLSH_vi 0.10 1111 10 .. .... 1111 . 0 ..... ..... @qrrx_s 1022 1023# Floating-point conditional select 1024 1025FCSEL 0001 1110 .. 1 rm:5 cond:4 11 rn:5 rd:5 esz=%esz_hsd 1026 1027# Floating-point data-processing (3 source) 1028 1029@rrrr_hsd .... .... .. . rm:5 . ra:5 rn:5 rd:5 &rrrr_e esz=%esz_hsd 1030 1031FMADD 0001 1111 .. 0 ..... 0 ..... ..... ..... @rrrr_hsd 1032FMSUB 0001 1111 .. 0 ..... 1 ..... ..... ..... @rrrr_hsd 1033FNMADD 0001 1111 .. 1 ..... 0 ..... ..... ..... @rrrr_hsd 1034FNMSUB 0001 1111 .. 1 ..... 1 ..... ..... ..... @rrrr_hsd 1035