151409b9eSRichard Henderson# Thumb2 instructions 251409b9eSRichard Henderson# 351409b9eSRichard Henderson# Copyright (c) 2019 Linaro, Ltd 451409b9eSRichard Henderson# 551409b9eSRichard Henderson# This library is free software; you can redistribute it and/or 651409b9eSRichard Henderson# modify it under the terms of the GNU Lesser General Public 751409b9eSRichard Henderson# License as published by the Free Software Foundation; either 851409b9eSRichard Henderson# version 2 of the License, or (at your option) any later version. 951409b9eSRichard Henderson# 1051409b9eSRichard Henderson# This library is distributed in the hope that it will be useful, 1151409b9eSRichard Henderson# but WITHOUT ANY WARRANTY; without even the implied warranty of 1251409b9eSRichard Henderson# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1351409b9eSRichard Henderson# Lesser General Public License for more details. 1451409b9eSRichard Henderson# 1551409b9eSRichard Henderson# You should have received a copy of the GNU Lesser General Public 1651409b9eSRichard Henderson# License along with this library; if not, see <http://www.gnu.org/licenses/>. 1751409b9eSRichard Henderson 1851409b9eSRichard Henderson# 1951409b9eSRichard Henderson# This file is processed by scripts/decodetree.py 2051409b9eSRichard Henderson# 2125ae32c5SRichard Henderson 2263130596SRichard Henderson&empty !extern 2325ae32c5SRichard Henderson&s_rrr_shi !extern s rd rn rm shim shty 245be2c123SRichard Henderson&s_rrr_shr !extern s rn rd rm rs shty 25581c6ebdSRichard Henderson&s_rri_rot !extern s rn rd imm rot 26bd92fe35SRichard Henderson&s_rrrr !extern s rd rn rm ra 27bd92fe35SRichard Henderson&rrrr !extern rd rn rm ra 28*46497f6aSRichard Henderson&rrr_rot !extern rd rn rm rot 296d0730a8SRichard Henderson&rrr !extern rd rn rm 304c97f5b2SRichard Henderson&rr !extern rd rm 31145952e8SRichard Henderson&ri !extern rd imm 324ed95abdSRichard Henderson&r !extern rm 332cde9ea5SRichard Henderson&i !extern imm 34d0b26644SRichard Henderson&msr_reg !extern rn r mask 35d0b26644SRichard Henderson&mrs_reg !extern rd r 36d0b26644SRichard Henderson&msr_bank !extern rn r sysm 37d0b26644SRichard Henderson&mrs_bank !extern rd r sysm 385e291fe1SRichard Henderson&ldst_rr !extern p w u rn rt rm shimm shtype 395e291fe1SRichard Henderson&ldst_ri !extern p w u rn rt imm 401efdd407SRichard Henderson&strex !extern rn rd rt rt2 imm 411efdd407SRichard Henderson&ldrex !extern rn rt rt2 imm 4286d21e4bSRichard Henderson&bfx !extern rd rn lsb widthm1 4386d21e4bSRichard Henderson&bfi !extern rd rn lsb msb 44*46497f6aSRichard Henderson&sat !extern rd rn satimm imm sh 45*46497f6aSRichard Henderson&pkh !extern rd rn rm imm tb 4625ae32c5SRichard Henderson 4725ae32c5SRichard Henderson# Data-processing (register) 4825ae32c5SRichard Henderson 4925ae32c5SRichard Henderson%imm5_12_6 12:3 6:2 5025ae32c5SRichard Henderson 5125ae32c5SRichard Henderson@s_rrr_shi ....... .... s:1 rn:4 .... rd:4 .. shty:2 rm:4 \ 5225ae32c5SRichard Henderson &s_rrr_shi shim=%imm5_12_6 5325ae32c5SRichard Henderson@s_rxr_shi ....... .... s:1 .... .... rd:4 .. shty:2 rm:4 \ 5425ae32c5SRichard Henderson &s_rrr_shi shim=%imm5_12_6 rn=0 5525ae32c5SRichard Henderson@S_xrr_shi ....... .... . rn:4 .... .... .. shty:2 rm:4 \ 5625ae32c5SRichard Henderson &s_rrr_shi shim=%imm5_12_6 s=1 rd=0 5725ae32c5SRichard Henderson 5825ae32c5SRichard Henderson{ 5925ae32c5SRichard Henderson TST_xrri 1110101 0000 1 .... 0 ... 1111 .... .... @S_xrr_shi 6025ae32c5SRichard Henderson AND_rrri 1110101 0000 . .... 0 ... .... .... .... @s_rrr_shi 6125ae32c5SRichard Henderson} 6225ae32c5SRichard HendersonBIC_rrri 1110101 0001 . .... 0 ... .... .... .... @s_rrr_shi 6325ae32c5SRichard Henderson{ 6425ae32c5SRichard Henderson MOV_rxri 1110101 0010 . 1111 0 ... .... .... .... @s_rxr_shi 6525ae32c5SRichard Henderson ORR_rrri 1110101 0010 . .... 0 ... .... .... .... @s_rrr_shi 6625ae32c5SRichard Henderson} 6725ae32c5SRichard Henderson{ 6825ae32c5SRichard Henderson MVN_rxri 1110101 0011 . 1111 0 ... .... .... .... @s_rxr_shi 6925ae32c5SRichard Henderson ORN_rrri 1110101 0011 . .... 0 ... .... .... .... @s_rrr_shi 7025ae32c5SRichard Henderson} 7125ae32c5SRichard Henderson{ 7225ae32c5SRichard Henderson TEQ_xrri 1110101 0100 1 .... 0 ... 1111 .... .... @S_xrr_shi 7325ae32c5SRichard Henderson EOR_rrri 1110101 0100 . .... 0 ... .... .... .... @s_rrr_shi 7425ae32c5SRichard Henderson} 75*46497f6aSRichard HendersonPKH 1110101 0110 0 rn:4 0 ... rd:4 .. tb:1 0 rm:4 \ 76*46497f6aSRichard Henderson &pkh imm=%imm5_12_6 7725ae32c5SRichard Henderson{ 7825ae32c5SRichard Henderson CMN_xrri 1110101 1000 1 .... 0 ... 1111 .... .... @S_xrr_shi 7925ae32c5SRichard Henderson ADD_rrri 1110101 1000 . .... 0 ... .... .... .... @s_rrr_shi 8025ae32c5SRichard Henderson} 8125ae32c5SRichard HendersonADC_rrri 1110101 1010 . .... 0 ... .... .... .... @s_rrr_shi 8225ae32c5SRichard HendersonSBC_rrri 1110101 1011 . .... 0 ... .... .... .... @s_rrr_shi 8325ae32c5SRichard Henderson{ 8425ae32c5SRichard Henderson CMP_xrri 1110101 1101 1 .... 0 ... 1111 .... .... @S_xrr_shi 8525ae32c5SRichard Henderson SUB_rrri 1110101 1101 . .... 0 ... .... .... .... @s_rrr_shi 8625ae32c5SRichard Henderson} 8725ae32c5SRichard HendersonRSB_rrri 1110101 1110 . .... 0 ... .... .... .... @s_rrr_shi 885be2c123SRichard Henderson 895be2c123SRichard Henderson# Data-processing (register-shifted register) 905be2c123SRichard Henderson 915be2c123SRichard HendersonMOV_rxrr 1111 1010 0 shty:2 s:1 rm:4 1111 rd:4 0000 rs:4 \ 925be2c123SRichard Henderson &s_rrr_shr rn=0 93581c6ebdSRichard Henderson 94581c6ebdSRichard Henderson# Data-processing (immediate) 95581c6ebdSRichard Henderson 96581c6ebdSRichard Henderson%t32extrot 26:1 12:3 0:8 !function=t32_expandimm_rot 97581c6ebdSRichard Henderson%t32extimm 26:1 12:3 0:8 !function=t32_expandimm_imm 98581c6ebdSRichard Henderson 99581c6ebdSRichard Henderson@s_rri_rot ....... .... s:1 rn:4 . ... rd:4 ........ \ 100581c6ebdSRichard Henderson &s_rri_rot imm=%t32extimm rot=%t32extrot 101581c6ebdSRichard Henderson@s_rxi_rot ....... .... s:1 .... . ... rd:4 ........ \ 102581c6ebdSRichard Henderson &s_rri_rot imm=%t32extimm rot=%t32extrot rn=0 103581c6ebdSRichard Henderson@S_xri_rot ....... .... . rn:4 . ... .... ........ \ 104581c6ebdSRichard Henderson &s_rri_rot imm=%t32extimm rot=%t32extrot s=1 rd=0 105581c6ebdSRichard Henderson 106581c6ebdSRichard Henderson{ 107581c6ebdSRichard Henderson TST_xri 1111 0.0 0000 1 .... 0 ... 1111 ........ @S_xri_rot 108581c6ebdSRichard Henderson AND_rri 1111 0.0 0000 . .... 0 ... .... ........ @s_rri_rot 109581c6ebdSRichard Henderson} 110581c6ebdSRichard HendersonBIC_rri 1111 0.0 0001 . .... 0 ... .... ........ @s_rri_rot 111581c6ebdSRichard Henderson{ 112581c6ebdSRichard Henderson MOV_rxi 1111 0.0 0010 . 1111 0 ... .... ........ @s_rxi_rot 113581c6ebdSRichard Henderson ORR_rri 1111 0.0 0010 . .... 0 ... .... ........ @s_rri_rot 114581c6ebdSRichard Henderson} 115581c6ebdSRichard Henderson{ 116581c6ebdSRichard Henderson MVN_rxi 1111 0.0 0011 . 1111 0 ... .... ........ @s_rxi_rot 117581c6ebdSRichard Henderson ORN_rri 1111 0.0 0011 . .... 0 ... .... ........ @s_rri_rot 118581c6ebdSRichard Henderson} 119581c6ebdSRichard Henderson{ 120581c6ebdSRichard Henderson TEQ_xri 1111 0.0 0100 1 .... 0 ... 1111 ........ @S_xri_rot 121581c6ebdSRichard Henderson EOR_rri 1111 0.0 0100 . .... 0 ... .... ........ @s_rri_rot 122581c6ebdSRichard Henderson} 123581c6ebdSRichard Henderson{ 124581c6ebdSRichard Henderson CMN_xri 1111 0.0 1000 1 .... 0 ... 1111 ........ @S_xri_rot 125581c6ebdSRichard Henderson ADD_rri 1111 0.0 1000 . .... 0 ... .... ........ @s_rri_rot 126581c6ebdSRichard Henderson} 127581c6ebdSRichard HendersonADC_rri 1111 0.0 1010 . .... 0 ... .... ........ @s_rri_rot 128581c6ebdSRichard HendersonSBC_rri 1111 0.0 1011 . .... 0 ... .... ........ @s_rri_rot 129581c6ebdSRichard Henderson{ 130581c6ebdSRichard Henderson CMP_xri 1111 0.0 1101 1 .... 0 ... 1111 ........ @S_xri_rot 131581c6ebdSRichard Henderson SUB_rri 1111 0.0 1101 . .... 0 ... .... ........ @s_rri_rot 132581c6ebdSRichard Henderson} 133581c6ebdSRichard HendersonRSB_rri 1111 0.0 1110 . .... 0 ... .... ........ @s_rri_rot 134bd92fe35SRichard Henderson 135145952e8SRichard Henderson# Data processing (plain binary immediate) 136145952e8SRichard Henderson 137145952e8SRichard Henderson%imm12_26_12_0 26:1 12:3 0:8 138145952e8SRichard Henderson%neg12_26_12_0 26:1 12:3 0:8 !function=negate 139145952e8SRichard Henderson@s0_rri_12 .... ... .... . rn:4 . ... rd:4 ........ \ 140145952e8SRichard Henderson &s_rri_rot imm=%imm12_26_12_0 rot=0 s=0 141145952e8SRichard Henderson 142145952e8SRichard Henderson{ 143145952e8SRichard Henderson ADR 1111 0.1 0000 0 1111 0 ... rd:4 ........ \ 144145952e8SRichard Henderson &ri imm=%imm12_26_12_0 145145952e8SRichard Henderson ADD_rri 1111 0.1 0000 0 .... 0 ... .... ........ @s0_rri_12 146145952e8SRichard Henderson} 147145952e8SRichard Henderson{ 148145952e8SRichard Henderson ADR 1111 0.1 0101 0 1111 0 ... rd:4 ........ \ 149145952e8SRichard Henderson &ri imm=%neg12_26_12_0 150145952e8SRichard Henderson SUB_rri 1111 0.1 0101 0 .... 0 ... .... ........ @s0_rri_12 151145952e8SRichard Henderson} 152145952e8SRichard Henderson 15386d21e4bSRichard Henderson# Saturate, bitfield 15486d21e4bSRichard Henderson 155*46497f6aSRichard Henderson@sat .... .... .. sh:1 . rn:4 . ... rd:4 .. . satimm:5 \ 156*46497f6aSRichard Henderson &sat imm=%imm5_12_6 157*46497f6aSRichard Henderson@sat16 .... .... .. . . rn:4 . ... rd:4 .. . satimm:5 \ 158*46497f6aSRichard Henderson &sat sh=0 imm=0 159*46497f6aSRichard Henderson 160*46497f6aSRichard Henderson{ 161*46497f6aSRichard Henderson SSAT16 1111 0011 001 0 .... 0 000 .... 00 0 ..... @sat16 162*46497f6aSRichard Henderson SSAT 1111 0011 00. 0 .... 0 ... .... .. 0 ..... @sat 163*46497f6aSRichard Henderson} 164*46497f6aSRichard Henderson{ 165*46497f6aSRichard Henderson USAT16 1111 0011 101 0 .... 0 000 .... 00 0 ..... @sat16 166*46497f6aSRichard Henderson USAT 1111 0011 10. 0 .... 0 ... .... .. 0 ..... @sat 167*46497f6aSRichard Henderson} 168*46497f6aSRichard Henderson 16986d21e4bSRichard Henderson@bfx .... .... ... . rn:4 . ... rd:4 .. . widthm1:5 \ 17086d21e4bSRichard Henderson &bfx lsb=%imm5_12_6 17186d21e4bSRichard Henderson@bfi .... .... ... . rn:4 . ... rd:4 .. . msb:5 \ 17286d21e4bSRichard Henderson &bfi lsb=%imm5_12_6 17386d21e4bSRichard Henderson 17486d21e4bSRichard HendersonSBFX 1111 0011 010 0 .... 0 ... .... ..0..... @bfx 17586d21e4bSRichard HendersonUBFX 1111 0011 110 0 .... 0 ... .... ..0..... @bfx 17686d21e4bSRichard Henderson 17786d21e4bSRichard Henderson# bfc is bfi w/ rn=15 17886d21e4bSRichard HendersonBFCI 1111 0011 011 0 .... 0 ... .... ..0..... @bfi 17986d21e4bSRichard Henderson 180bd92fe35SRichard Henderson# Multiply and multiply accumulate 181bd92fe35SRichard Henderson 182bd92fe35SRichard Henderson@s0_rnadm .... .... .... rn:4 ra:4 rd:4 .... rm:4 &s_rrrr s=0 183bd92fe35SRichard Henderson@s0_rn0dm .... .... .... rn:4 .... rd:4 .... rm:4 &s_rrrr ra=0 s=0 184bd92fe35SRichard Henderson@rnadm .... .... .... rn:4 ra:4 rd:4 .... rm:4 &rrrr 18526c6923dSRichard Henderson@rn0dm .... .... .... rn:4 .... rd:4 .... rm:4 &rrrr ra=0 1866d0730a8SRichard Henderson@rndm .... .... .... rn:4 .... rd:4 .... rm:4 &rrr 1874c97f5b2SRichard Henderson@rdm .... .... .... .... .... rd:4 .... rm:4 &rr 188bd92fe35SRichard Henderson 189bd92fe35SRichard Henderson{ 190bd92fe35SRichard Henderson MUL 1111 1011 0000 .... 1111 .... 0000 .... @s0_rn0dm 191bd92fe35SRichard Henderson MLA 1111 1011 0000 .... .... .... 0000 .... @s0_rnadm 192bd92fe35SRichard Henderson} 193bd92fe35SRichard HendersonMLS 1111 1011 0000 .... .... .... 0001 .... @rnadm 194bd92fe35SRichard HendersonSMULL 1111 1011 1000 .... .... .... 0000 .... @s0_rnadm 195bd92fe35SRichard HendersonUMULL 1111 1011 1010 .... .... .... 0000 .... @s0_rnadm 196bd92fe35SRichard HendersonSMLAL 1111 1011 1100 .... .... .... 0000 .... @s0_rnadm 197bd92fe35SRichard HendersonUMLAL 1111 1011 1110 .... .... .... 0000 .... @s0_rnadm 198bd92fe35SRichard HendersonUMAAL 1111 1011 1110 .... .... .... 0110 .... @rnadm 19926c6923dSRichard Henderson{ 20026c6923dSRichard Henderson SMULWB 1111 1011 0011 .... 1111 .... 0000 .... @rn0dm 20126c6923dSRichard Henderson SMLAWB 1111 1011 0011 .... .... .... 0000 .... @rnadm 20226c6923dSRichard Henderson} 20326c6923dSRichard Henderson{ 20426c6923dSRichard Henderson SMULWT 1111 1011 0011 .... 1111 .... 0001 .... @rn0dm 20526c6923dSRichard Henderson SMLAWT 1111 1011 0011 .... .... .... 0001 .... @rnadm 20626c6923dSRichard Henderson} 20726c6923dSRichard Henderson{ 20826c6923dSRichard Henderson SMULBB 1111 1011 0001 .... 1111 .... 0000 .... @rn0dm 20926c6923dSRichard Henderson SMLABB 1111 1011 0001 .... .... .... 0000 .... @rnadm 21026c6923dSRichard Henderson} 21126c6923dSRichard Henderson{ 21226c6923dSRichard Henderson SMULBT 1111 1011 0001 .... 1111 .... 0001 .... @rn0dm 21326c6923dSRichard Henderson SMLABT 1111 1011 0001 .... .... .... 0001 .... @rnadm 21426c6923dSRichard Henderson} 21526c6923dSRichard Henderson{ 21626c6923dSRichard Henderson SMULTB 1111 1011 0001 .... 1111 .... 0010 .... @rn0dm 21726c6923dSRichard Henderson SMLATB 1111 1011 0001 .... .... .... 0010 .... @rnadm 21826c6923dSRichard Henderson} 21926c6923dSRichard Henderson{ 22026c6923dSRichard Henderson SMULTT 1111 1011 0001 .... 1111 .... 0011 .... @rn0dm 22126c6923dSRichard Henderson SMLATT 1111 1011 0001 .... .... .... 0011 .... @rnadm 22226c6923dSRichard Henderson} 22326c6923dSRichard HendersonSMLALBB 1111 1011 1100 .... .... .... 1000 .... @rnadm 22426c6923dSRichard HendersonSMLALBT 1111 1011 1100 .... .... .... 1001 .... @rnadm 22526c6923dSRichard HendersonSMLALTB 1111 1011 1100 .... .... .... 1010 .... @rnadm 22626c6923dSRichard HendersonSMLALTT 1111 1011 1100 .... .... .... 1011 .... @rnadm 2276d0730a8SRichard Henderson 22886d21e4bSRichard Henderson# usad8 is usada8 w/ ra=15 22986d21e4bSRichard HendersonUSADA8 1111 1011 0111 .... .... .... 0000 .... @rnadm 23086d21e4bSRichard Henderson 2316d0730a8SRichard Henderson# Data-processing (two source registers) 2326d0730a8SRichard Henderson 2336d0730a8SRichard HendersonQADD 1111 1010 1000 .... 1111 .... 1000 .... @rndm 2346d0730a8SRichard HendersonQSUB 1111 1010 1000 .... 1111 .... 1010 .... @rndm 2356d0730a8SRichard HendersonQDADD 1111 1010 1000 .... 1111 .... 1001 .... @rndm 2366d0730a8SRichard HendersonQDSUB 1111 1010 1000 .... 1111 .... 1011 .... @rndm 23763130596SRichard Henderson 2386c35d53fSRichard HendersonCRC32B 1111 1010 1100 .... 1111 .... 1000 .... @rndm 2396c35d53fSRichard HendersonCRC32H 1111 1010 1100 .... 1111 .... 1001 .... @rndm 2406c35d53fSRichard HendersonCRC32W 1111 1010 1100 .... 1111 .... 1010 .... @rndm 2416c35d53fSRichard HendersonCRC32CB 1111 1010 1101 .... 1111 .... 1000 .... @rndm 2426c35d53fSRichard HendersonCRC32CH 1111 1010 1101 .... 1111 .... 1001 .... @rndm 2436c35d53fSRichard HendersonCRC32CW 1111 1010 1101 .... 1111 .... 1010 .... @rndm 2446c35d53fSRichard Henderson 245*46497f6aSRichard HendersonSEL 1111 1010 1010 .... 1111 .... 1000 .... @rndm 246*46497f6aSRichard Henderson 2474c97f5b2SRichard Henderson# Note rn != rm is CONSTRAINED UNPREDICTABLE; we choose to ignore rn. 248*46497f6aSRichard HendersonREV 1111 1010 1001 ---- 1111 .... 1000 .... @rdm 249*46497f6aSRichard HendersonREV16 1111 1010 1001 ---- 1111 .... 1001 .... @rdm 250*46497f6aSRichard HendersonRBIT 1111 1010 1001 ---- 1111 .... 1010 .... @rdm 251*46497f6aSRichard HendersonREVSH 1111 1010 1001 ---- 1111 .... 1011 .... @rdm 2524c97f5b2SRichard HendersonCLZ 1111 1010 1011 ---- 1111 .... 1000 .... @rdm 2534c97f5b2SRichard Henderson 25463130596SRichard Henderson# Branches and miscellaneous control 25563130596SRichard Henderson 256d0b26644SRichard Henderson%msr_sysm 4:1 8:4 257d0b26644SRichard Henderson%mrs_sysm 4:1 16:4 2582cde9ea5SRichard Henderson%imm16_16_0 16:4 0:12 259d0b26644SRichard Henderson 260d0b26644SRichard Henderson{ 26163130596SRichard Henderson { 26263130596SRichard Henderson YIELD 1111 0011 1010 1111 1000 0000 0000 0001 26363130596SRichard Henderson WFE 1111 0011 1010 1111 1000 0000 0000 0010 26463130596SRichard Henderson WFI 1111 0011 1010 1111 1000 0000 0000 0011 26563130596SRichard Henderson 26663130596SRichard Henderson # TODO: Implement SEV, SEVL; may help SMP performance. 26763130596SRichard Henderson # SEV 1111 0011 1010 1111 1000 0000 0000 0100 26863130596SRichard Henderson # SEVL 1111 0011 1010 1111 1000 0000 0000 0101 26963130596SRichard Henderson 27063130596SRichard Henderson # The canonical nop ends in 0000 0000, but the whole rest 27163130596SRichard Henderson # of the space is "reserved hint, behaves as nop". 27263130596SRichard Henderson NOP 1111 0011 1010 1111 1000 0000 ---- ---- 27363130596SRichard Henderson } 274d0b26644SRichard Henderson # Note that the v7m insn overlaps both the normal and banked insn. 275d0b26644SRichard Henderson { 276d0b26644SRichard Henderson MRS_bank 1111 0011 111 r:1 .... 1000 rd:4 001. 0000 \ 277d0b26644SRichard Henderson &mrs_bank sysm=%mrs_sysm 278d0b26644SRichard Henderson MRS_reg 1111 0011 111 r:1 1111 1000 rd:4 0000 0000 &mrs_reg 279d0b26644SRichard Henderson MRS_v7m 1111 0011 111 0 1111 1000 rd:4 sysm:8 280d0b26644SRichard Henderson } 281d0b26644SRichard Henderson { 282d0b26644SRichard Henderson MSR_bank 1111 0011 100 r:1 rn:4 1000 .... 001. 0000 \ 283d0b26644SRichard Henderson &msr_bank sysm=%msr_sysm 284d0b26644SRichard Henderson MSR_reg 1111 0011 100 r:1 rn:4 1000 mask:4 0000 0000 &msr_reg 285d0b26644SRichard Henderson MSR_v7m 1111 0011 100 0 rn:4 1000 mask:2 00 sysm:8 286d0b26644SRichard Henderson } 2874ed95abdSRichard Henderson BXJ 1111 0011 1100 rm:4 1000 1111 0000 0000 &r 288ef11bc3cSRichard Henderson { 289ef11bc3cSRichard Henderson # At v6T2, this is the T5 encoding of SUBS PC, LR, #IMM, and works as for 290ef11bc3cSRichard Henderson # every other encoding of SUBS. With v7VE, IMM=0 is redefined as ERET. 291ef11bc3cSRichard Henderson # The distinction between the two only matters for Hyp mode. 292ef11bc3cSRichard Henderson ERET 1111 0011 1101 1110 1000 1111 0000 0000 293ef11bc3cSRichard Henderson SUB_rri 1111 0011 1101 1110 1000 1111 imm:8 \ 294ef11bc3cSRichard Henderson &s_rri_rot rot=0 s=1 rd=15 rn=14 295ef11bc3cSRichard Henderson } 2962cde9ea5SRichard Henderson SMC 1111 0111 1111 imm:4 1000 0000 0000 0000 &i 2972cde9ea5SRichard Henderson HVC 1111 0111 1110 .... 1000 .... .... .... \ 2982cde9ea5SRichard Henderson &i imm=%imm16_16_0 29986d21e4bSRichard Henderson UDF 1111 0111 1111 ---- 1010 ---- ---- ---- 300d0b26644SRichard Henderson} 3015e291fe1SRichard Henderson 3025e291fe1SRichard Henderson# Load/store (register, immediate, literal) 3035e291fe1SRichard Henderson 3045e291fe1SRichard Henderson@ldst_rr .... .... .... rn:4 rt:4 ...... shimm:2 rm:4 \ 3055e291fe1SRichard Henderson &ldst_rr p=1 w=0 u=1 shtype=0 3065e291fe1SRichard Henderson@ldst_ri_idx .... .... .... rn:4 rt:4 . p:1 u:1 . imm:8 \ 3075e291fe1SRichard Henderson &ldst_ri w=1 3085e291fe1SRichard Henderson@ldst_ri_neg .... .... .... rn:4 rt:4 .... imm:8 \ 3095e291fe1SRichard Henderson &ldst_ri p=1 w=0 u=0 3105e291fe1SRichard Henderson@ldst_ri_unp .... .... .... rn:4 rt:4 .... imm:8 \ 3115e291fe1SRichard Henderson &ldst_ri p=1 w=0 u=1 3125e291fe1SRichard Henderson@ldst_ri_pos .... .... .... rn:4 rt:4 imm:12 \ 3135e291fe1SRichard Henderson &ldst_ri p=1 w=0 u=1 3145e291fe1SRichard Henderson@ldst_ri_lit .... .... u:1 ... .... rt:4 imm:12 \ 3155e291fe1SRichard Henderson &ldst_ri p=1 w=0 rn=15 3165e291fe1SRichard Henderson 3175e291fe1SRichard HendersonSTRB_rr 1111 1000 0000 .... .... 000000 .. .... @ldst_rr 3185e291fe1SRichard HendersonSTRB_ri 1111 1000 0000 .... .... 1..1 ........ @ldst_ri_idx 3195e291fe1SRichard HendersonSTRB_ri 1111 1000 0000 .... .... 1100 ........ @ldst_ri_neg 3205e291fe1SRichard HendersonSTRBT_ri 1111 1000 0000 .... .... 1110 ........ @ldst_ri_unp 3215e291fe1SRichard HendersonSTRB_ri 1111 1000 1000 .... .... ............ @ldst_ri_pos 3225e291fe1SRichard Henderson 3235e291fe1SRichard HendersonSTRH_rr 1111 1000 0010 .... .... 000000 .. .... @ldst_rr 3245e291fe1SRichard HendersonSTRH_ri 1111 1000 0010 .... .... 1..1 ........ @ldst_ri_idx 3255e291fe1SRichard HendersonSTRH_ri 1111 1000 0010 .... .... 1100 ........ @ldst_ri_neg 3265e291fe1SRichard HendersonSTRHT_ri 1111 1000 0010 .... .... 1110 ........ @ldst_ri_unp 3275e291fe1SRichard HendersonSTRH_ri 1111 1000 1010 .... .... ............ @ldst_ri_pos 3285e291fe1SRichard Henderson 3295e291fe1SRichard HendersonSTR_rr 1111 1000 0100 .... .... 000000 .. .... @ldst_rr 3305e291fe1SRichard HendersonSTR_ri 1111 1000 0100 .... .... 1..1 ........ @ldst_ri_idx 3315e291fe1SRichard HendersonSTR_ri 1111 1000 0100 .... .... 1100 ........ @ldst_ri_neg 3325e291fe1SRichard HendersonSTRT_ri 1111 1000 0100 .... .... 1110 ........ @ldst_ri_unp 3335e291fe1SRichard HendersonSTR_ri 1111 1000 1100 .... .... ............ @ldst_ri_pos 3345e291fe1SRichard Henderson 3355e291fe1SRichard Henderson# Note that Load, unsigned (literal) overlaps all other load encodings. 3365e291fe1SRichard Henderson{ 3375e291fe1SRichard Henderson { 3385e291fe1SRichard Henderson NOP 1111 1000 -001 1111 1111 ------------ # PLD 3395e291fe1SRichard Henderson LDRB_ri 1111 1000 .001 1111 .... ............ @ldst_ri_lit 3405e291fe1SRichard Henderson } 3415e291fe1SRichard Henderson { 3425e291fe1SRichard Henderson NOP 1111 1000 1001 ---- 1111 ------------ # PLD 3435e291fe1SRichard Henderson LDRB_ri 1111 1000 1001 .... .... ............ @ldst_ri_pos 3445e291fe1SRichard Henderson } 3455e291fe1SRichard Henderson LDRB_ri 1111 1000 0001 .... .... 1..1 ........ @ldst_ri_idx 3465e291fe1SRichard Henderson { 3475e291fe1SRichard Henderson NOP 1111 1000 0001 ---- 1111 1100 -------- # PLD 3485e291fe1SRichard Henderson LDRB_ri 1111 1000 0001 .... .... 1100 ........ @ldst_ri_neg 3495e291fe1SRichard Henderson } 3505e291fe1SRichard Henderson LDRBT_ri 1111 1000 0001 .... .... 1110 ........ @ldst_ri_unp 3515e291fe1SRichard Henderson { 3525e291fe1SRichard Henderson NOP 1111 1000 0001 ---- 1111 000000 -- ---- # PLD 3535e291fe1SRichard Henderson LDRB_rr 1111 1000 0001 .... .... 000000 .. .... @ldst_rr 3545e291fe1SRichard Henderson } 3555e291fe1SRichard Henderson} 3565e291fe1SRichard Henderson{ 3575e291fe1SRichard Henderson { 3585e291fe1SRichard Henderson NOP 1111 1000 -011 1111 1111 ------------ # PLD 3595e291fe1SRichard Henderson LDRH_ri 1111 1000 .011 1111 .... ............ @ldst_ri_lit 3605e291fe1SRichard Henderson } 3615e291fe1SRichard Henderson { 3625e291fe1SRichard Henderson NOP 1111 1000 1011 ---- 1111 ------------ # PLDW 3635e291fe1SRichard Henderson LDRH_ri 1111 1000 1011 .... .... ............ @ldst_ri_pos 3645e291fe1SRichard Henderson } 3655e291fe1SRichard Henderson LDRH_ri 1111 1000 0011 .... .... 1..1 ........ @ldst_ri_idx 3665e291fe1SRichard Henderson { 3675e291fe1SRichard Henderson NOP 1111 1000 0011 ---- 1111 1100 -------- # PLDW 3685e291fe1SRichard Henderson LDRH_ri 1111 1000 0011 .... .... 1100 ........ @ldst_ri_neg 3695e291fe1SRichard Henderson } 3705e291fe1SRichard Henderson LDRHT_ri 1111 1000 0011 .... .... 1110 ........ @ldst_ri_unp 3715e291fe1SRichard Henderson { 3725e291fe1SRichard Henderson NOP 1111 1000 0011 ---- 1111 000000 -- ---- # PLDW 3735e291fe1SRichard Henderson LDRH_rr 1111 1000 0011 .... .... 000000 .. .... @ldst_rr 3745e291fe1SRichard Henderson } 3755e291fe1SRichard Henderson} 3765e291fe1SRichard Henderson{ 3775e291fe1SRichard Henderson LDR_ri 1111 1000 .101 1111 .... ............ @ldst_ri_lit 3785e291fe1SRichard Henderson LDR_ri 1111 1000 1101 .... .... ............ @ldst_ri_pos 3795e291fe1SRichard Henderson LDR_ri 1111 1000 0101 .... .... 1..1 ........ @ldst_ri_idx 3805e291fe1SRichard Henderson LDR_ri 1111 1000 0101 .... .... 1100 ........ @ldst_ri_neg 3815e291fe1SRichard Henderson LDRT_ri 1111 1000 0101 .... .... 1110 ........ @ldst_ri_unp 3825e291fe1SRichard Henderson LDR_rr 1111 1000 0101 .... .... 000000 .. .... @ldst_rr 3835e291fe1SRichard Henderson} 3845e291fe1SRichard Henderson# NOPs here are PLI. 3855e291fe1SRichard Henderson{ 3865e291fe1SRichard Henderson { 3875e291fe1SRichard Henderson NOP 1111 1001 -001 1111 1111 ------------ 3885e291fe1SRichard Henderson LDRSB_ri 1111 1001 .001 1111 .... ............ @ldst_ri_lit 3895e291fe1SRichard Henderson } 3905e291fe1SRichard Henderson { 3915e291fe1SRichard Henderson NOP 1111 1001 1001 ---- 1111 ------------ 3925e291fe1SRichard Henderson LDRSB_ri 1111 1001 1001 .... .... ............ @ldst_ri_pos 3935e291fe1SRichard Henderson } 3945e291fe1SRichard Henderson LDRSB_ri 1111 1001 0001 .... .... 1..1 ........ @ldst_ri_idx 3955e291fe1SRichard Henderson { 3965e291fe1SRichard Henderson NOP 1111 1001 0001 ---- 1111 1100 -------- 3975e291fe1SRichard Henderson LDRSB_ri 1111 1001 0001 .... .... 1100 ........ @ldst_ri_neg 3985e291fe1SRichard Henderson } 3995e291fe1SRichard Henderson LDRSBT_ri 1111 1001 0001 .... .... 1110 ........ @ldst_ri_unp 4005e291fe1SRichard Henderson { 4015e291fe1SRichard Henderson NOP 1111 1001 0001 ---- 1111 000000 -- ---- 4025e291fe1SRichard Henderson LDRSB_rr 1111 1001 0001 .... .... 000000 .. .... @ldst_rr 4035e291fe1SRichard Henderson } 4045e291fe1SRichard Henderson} 4055e291fe1SRichard Henderson# NOPs here are unallocated memory hints, treated as NOP. 4065e291fe1SRichard Henderson{ 4075e291fe1SRichard Henderson { 4085e291fe1SRichard Henderson NOP 1111 1001 -011 1111 1111 ------------ 4095e291fe1SRichard Henderson LDRSH_ri 1111 1001 .011 1111 .... ............ @ldst_ri_lit 4105e291fe1SRichard Henderson } 4115e291fe1SRichard Henderson { 4125e291fe1SRichard Henderson NOP 1111 1001 1011 ---- 1111 ------------ 4135e291fe1SRichard Henderson LDRSH_ri 1111 1001 1011 .... .... ............ @ldst_ri_pos 4145e291fe1SRichard Henderson } 4155e291fe1SRichard Henderson LDRSH_ri 1111 1001 0011 .... .... 1..1 ........ @ldst_ri_idx 4165e291fe1SRichard Henderson { 4175e291fe1SRichard Henderson NOP 1111 1001 0011 ---- 1111 1100 -------- 4185e291fe1SRichard Henderson LDRSH_ri 1111 1001 0011 .... .... 1100 ........ @ldst_ri_neg 4195e291fe1SRichard Henderson } 4205e291fe1SRichard Henderson LDRSHT_ri 1111 1001 0011 .... .... 1110 ........ @ldst_ri_unp 4215e291fe1SRichard Henderson { 4225e291fe1SRichard Henderson NOP 1111 1001 0011 ---- 1111 000000 -- ---- 4235e291fe1SRichard Henderson LDRSH_rr 1111 1001 0011 .... .... 000000 .. .... @ldst_rr 4245e291fe1SRichard Henderson } 4255e291fe1SRichard Henderson} 4265e291fe1SRichard Henderson 4275e291fe1SRichard Henderson%imm8x4 0:8 !function=times_4 4285e291fe1SRichard Henderson&ldst_ri2 p w u rn rt rt2 imm 4295e291fe1SRichard Henderson@ldstd_ri8 .... .... u:1 ... rn:4 rt:4 rt2:4 ........ \ 4305e291fe1SRichard Henderson &ldst_ri2 imm=%imm8x4 4315e291fe1SRichard Henderson 4325e291fe1SRichard HendersonSTRD_ri_t32 1110 1000 .110 .... .... .... ........ @ldstd_ri8 w=1 p=0 4335e291fe1SRichard HendersonLDRD_ri_t32 1110 1000 .111 .... .... .... ........ @ldstd_ri8 w=1 p=0 4345e291fe1SRichard Henderson 4355e291fe1SRichard HendersonSTRD_ri_t32 1110 1001 .100 .... .... .... ........ @ldstd_ri8 w=0 p=1 4365e291fe1SRichard HendersonLDRD_ri_t32 1110 1001 .101 .... .... .... ........ @ldstd_ri8 w=0 p=1 4375e291fe1SRichard Henderson 4385e291fe1SRichard HendersonSTRD_ri_t32 1110 1001 .110 .... .... .... ........ @ldstd_ri8 w=1 p=1 4395e291fe1SRichard HendersonLDRD_ri_t32 1110 1001 .111 .... .... .... ........ @ldstd_ri8 w=1 p=1 4401efdd407SRichard Henderson 4411efdd407SRichard Henderson# Load/Store Exclusive and Load-Acquire/Store-Release 4421efdd407SRichard Henderson 4431efdd407SRichard Henderson@strex_i .... .... .... rn:4 rt:4 rd:4 .... .... \ 4441efdd407SRichard Henderson &strex rt2=15 imm=%imm8x4 4451efdd407SRichard Henderson@strex_0 .... .... .... rn:4 rt:4 .... .... rd:4 \ 4461efdd407SRichard Henderson &strex rt2=15 imm=0 4471efdd407SRichard Henderson@strex_d .... .... .... rn:4 rt:4 rt2:4 .... rd:4 \ 4481efdd407SRichard Henderson &strex imm=0 4491efdd407SRichard Henderson 4501efdd407SRichard Henderson@ldrex_i .... .... .... rn:4 rt:4 .... .... .... \ 4511efdd407SRichard Henderson &ldrex rt2=15 imm=%imm8x4 4521efdd407SRichard Henderson@ldrex_0 .... .... .... rn:4 rt:4 .... .... .... \ 4531efdd407SRichard Henderson &ldrex rt2=15 imm=0 4541efdd407SRichard Henderson@ldrex_d .... .... .... rn:4 rt:4 rt2:4 .... .... \ 4551efdd407SRichard Henderson &ldrex imm=0 4561efdd407SRichard Henderson 4571efdd407SRichard HendersonSTREX 1110 1000 0100 .... .... .... .... .... @strex_i 4581efdd407SRichard HendersonSTREXB 1110 1000 1100 .... .... 1111 0100 .... @strex_0 4591efdd407SRichard HendersonSTREXH 1110 1000 1100 .... .... 1111 0101 .... @strex_0 4601efdd407SRichard HendersonSTREXD_t32 1110 1000 1100 .... .... .... 0111 .... @strex_d 4611efdd407SRichard Henderson 4621efdd407SRichard HendersonSTLEX 1110 1000 1100 .... .... 1111 1110 .... @strex_0 4631efdd407SRichard HendersonSTLEXB 1110 1000 1100 .... .... 1111 1100 .... @strex_0 4641efdd407SRichard HendersonSTLEXH 1110 1000 1100 .... .... 1111 1101 .... @strex_0 4651efdd407SRichard HendersonSTLEXD_t32 1110 1000 1100 .... .... .... 1111 .... @strex_d 4661efdd407SRichard Henderson 4671efdd407SRichard HendersonSTL 1110 1000 1100 .... .... 1111 1010 1111 @ldrex_0 4681efdd407SRichard HendersonSTLB 1110 1000 1100 .... .... 1111 1000 1111 @ldrex_0 4691efdd407SRichard HendersonSTLH 1110 1000 1100 .... .... 1111 1001 1111 @ldrex_0 4701efdd407SRichard Henderson 4711efdd407SRichard HendersonLDREX 1110 1000 0101 .... .... 1111 .... .... @ldrex_i 4721efdd407SRichard HendersonLDREXB 1110 1000 1101 .... .... 1111 0100 1111 @ldrex_0 4731efdd407SRichard HendersonLDREXH 1110 1000 1101 .... .... 1111 0101 1111 @ldrex_0 4741efdd407SRichard HendersonLDREXD_t32 1110 1000 1101 .... .... .... 0111 1111 @ldrex_d 4751efdd407SRichard Henderson 4761efdd407SRichard HendersonLDAEX 1110 1000 1101 .... .... 1111 1110 1111 @ldrex_0 4771efdd407SRichard HendersonLDAEXB 1110 1000 1101 .... .... 1111 1100 1111 @ldrex_0 4781efdd407SRichard HendersonLDAEXH 1110 1000 1101 .... .... 1111 1101 1111 @ldrex_0 4791efdd407SRichard HendersonLDAEXD_t32 1110 1000 1101 .... .... .... 1111 1111 @ldrex_d 4801efdd407SRichard Henderson 4811efdd407SRichard HendersonLDA 1110 1000 1101 .... .... 1111 1010 1111 @ldrex_0 4821efdd407SRichard HendersonLDAB 1110 1000 1101 .... .... 1111 1000 1111 @ldrex_0 4831efdd407SRichard HendersonLDAH 1110 1000 1101 .... .... 1111 1001 1111 @ldrex_0 484adf1a566SRichard Henderson 485adf1a566SRichard Henderson# Parallel addition and subtraction 486adf1a566SRichard Henderson 487adf1a566SRichard HendersonSADD8 1111 1010 1000 .... 1111 .... 0000 .... @rndm 488adf1a566SRichard HendersonQADD8 1111 1010 1000 .... 1111 .... 0001 .... @rndm 489adf1a566SRichard HendersonSHADD8 1111 1010 1000 .... 1111 .... 0010 .... @rndm 490adf1a566SRichard HendersonUADD8 1111 1010 1000 .... 1111 .... 0100 .... @rndm 491adf1a566SRichard HendersonUQADD8 1111 1010 1000 .... 1111 .... 0101 .... @rndm 492adf1a566SRichard HendersonUHADD8 1111 1010 1000 .... 1111 .... 0110 .... @rndm 493adf1a566SRichard Henderson 494adf1a566SRichard HendersonSADD16 1111 1010 1001 .... 1111 .... 0000 .... @rndm 495adf1a566SRichard HendersonQADD16 1111 1010 1001 .... 1111 .... 0001 .... @rndm 496adf1a566SRichard HendersonSHADD16 1111 1010 1001 .... 1111 .... 0010 .... @rndm 497adf1a566SRichard HendersonUADD16 1111 1010 1001 .... 1111 .... 0100 .... @rndm 498adf1a566SRichard HendersonUQADD16 1111 1010 1001 .... 1111 .... 0101 .... @rndm 499adf1a566SRichard HendersonUHADD16 1111 1010 1001 .... 1111 .... 0110 .... @rndm 500adf1a566SRichard Henderson 501adf1a566SRichard HendersonSASX 1111 1010 1010 .... 1111 .... 0000 .... @rndm 502adf1a566SRichard HendersonQASX 1111 1010 1010 .... 1111 .... 0001 .... @rndm 503adf1a566SRichard HendersonSHASX 1111 1010 1010 .... 1111 .... 0010 .... @rndm 504adf1a566SRichard HendersonUASX 1111 1010 1010 .... 1111 .... 0100 .... @rndm 505adf1a566SRichard HendersonUQASX 1111 1010 1010 .... 1111 .... 0101 .... @rndm 506adf1a566SRichard HendersonUHASX 1111 1010 1010 .... 1111 .... 0110 .... @rndm 507adf1a566SRichard Henderson 508adf1a566SRichard HendersonSSUB8 1111 1010 1100 .... 1111 .... 0000 .... @rndm 509adf1a566SRichard HendersonQSUB8 1111 1010 1100 .... 1111 .... 0001 .... @rndm 510adf1a566SRichard HendersonSHSUB8 1111 1010 1100 .... 1111 .... 0010 .... @rndm 511adf1a566SRichard HendersonUSUB8 1111 1010 1100 .... 1111 .... 0100 .... @rndm 512adf1a566SRichard HendersonUQSUB8 1111 1010 1100 .... 1111 .... 0101 .... @rndm 513adf1a566SRichard HendersonUHSUB8 1111 1010 1100 .... 1111 .... 0110 .... @rndm 514adf1a566SRichard Henderson 515adf1a566SRichard HendersonSSUB16 1111 1010 1101 .... 1111 .... 0000 .... @rndm 516adf1a566SRichard HendersonQSUB16 1111 1010 1101 .... 1111 .... 0001 .... @rndm 517adf1a566SRichard HendersonSHSUB16 1111 1010 1101 .... 1111 .... 0010 .... @rndm 518adf1a566SRichard HendersonUSUB16 1111 1010 1101 .... 1111 .... 0100 .... @rndm 519adf1a566SRichard HendersonUQSUB16 1111 1010 1101 .... 1111 .... 0101 .... @rndm 520adf1a566SRichard HendersonUHSUB16 1111 1010 1101 .... 1111 .... 0110 .... @rndm 521adf1a566SRichard Henderson 522adf1a566SRichard HendersonSSAX 1111 1010 1110 .... 1111 .... 0000 .... @rndm 523adf1a566SRichard HendersonQSAX 1111 1010 1110 .... 1111 .... 0001 .... @rndm 524adf1a566SRichard HendersonSHSAX 1111 1010 1110 .... 1111 .... 0010 .... @rndm 525adf1a566SRichard HendersonUSAX 1111 1010 1110 .... 1111 .... 0100 .... @rndm 526adf1a566SRichard HendersonUQSAX 1111 1010 1110 .... 1111 .... 0101 .... @rndm 527adf1a566SRichard HendersonUHSAX 1111 1010 1110 .... 1111 .... 0110 .... @rndm 528*46497f6aSRichard Henderson 529*46497f6aSRichard Henderson# Register extends 530*46497f6aSRichard Henderson 531*46497f6aSRichard Henderson@rrr_rot .... .... .... rn:4 .... rd:4 .. rot:2 rm:4 &rrr_rot 532*46497f6aSRichard Henderson 533*46497f6aSRichard HendersonSXTAH 1111 1010 0000 .... 1111 .... 10.. .... @rrr_rot 534*46497f6aSRichard HendersonUXTAH 1111 1010 0001 .... 1111 .... 10.. .... @rrr_rot 535*46497f6aSRichard HendersonSXTAB16 1111 1010 0010 .... 1111 .... 10.. .... @rrr_rot 536*46497f6aSRichard HendersonUXTAB16 1111 1010 0011 .... 1111 .... 10.. .... @rrr_rot 537*46497f6aSRichard HendersonSXTAB 1111 1010 0100 .... 1111 .... 10.. .... @rrr_rot 538*46497f6aSRichard HendersonUXTAB 1111 1010 0101 .... 1111 .... 10.. .... @rrr_rot 539