1f0984d40SFabiano Rosas# Thumb2 instructions 2f0984d40SFabiano Rosas# 3f0984d40SFabiano Rosas# Copyright (c) 2019 Linaro, Ltd 4f0984d40SFabiano Rosas# 5f0984d40SFabiano Rosas# This library is free software; you can redistribute it and/or 6f0984d40SFabiano Rosas# modify it under the terms of the GNU Lesser General Public 7f0984d40SFabiano Rosas# License as published by the Free Software Foundation; either 8f0984d40SFabiano Rosas# version 2.1 of the License, or (at your option) any later version. 9f0984d40SFabiano Rosas# 10f0984d40SFabiano Rosas# This library is distributed in the hope that it will be useful, 11f0984d40SFabiano Rosas# but WITHOUT ANY WARRANTY; without even the implied warranty of 12f0984d40SFabiano Rosas# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13f0984d40SFabiano Rosas# Lesser General Public License for more details. 14f0984d40SFabiano Rosas# 15f0984d40SFabiano Rosas# You should have received a copy of the GNU Lesser General Public 16f0984d40SFabiano Rosas# License along with this library; if not, see <http://www.gnu.org/licenses/>. 17f0984d40SFabiano Rosas 18f0984d40SFabiano Rosas# 19f0984d40SFabiano Rosas# This file is processed by scripts/decodetree.py 20f0984d40SFabiano Rosas# 21f0984d40SFabiano Rosas 22f0984d40SFabiano Rosas&empty !extern 23f0984d40SFabiano Rosas&s_rrr_shi !extern s rd rn rm shim shty 24f0984d40SFabiano Rosas&s_rrr_shr !extern s rn rd rm rs shty 25f0984d40SFabiano Rosas&s_rri_rot !extern s rn rd imm rot 26f0984d40SFabiano Rosas&s_rrrr !extern s rd rn rm ra 27f0984d40SFabiano Rosas&rrrr !extern rd rn rm ra 28f0984d40SFabiano Rosas&rrr_rot !extern rd rn rm rot 29f0984d40SFabiano Rosas&rrr !extern rd rn rm 30f0984d40SFabiano Rosas&rr !extern rd rm 31f0984d40SFabiano Rosas&ri !extern rd imm 32f0984d40SFabiano Rosas&r !extern rm 33f0984d40SFabiano Rosas&i !extern imm 34f0984d40SFabiano Rosas&msr_reg !extern rn r mask 35f0984d40SFabiano Rosas&mrs_reg !extern rd r 36f0984d40SFabiano Rosas&msr_bank !extern rn r sysm 37f0984d40SFabiano Rosas&mrs_bank !extern rd r sysm 38f0984d40SFabiano Rosas&ldst_rr !extern p w u rn rt rm shimm shtype 39f0984d40SFabiano Rosas&ldst_ri !extern p w u rn rt imm 40f0984d40SFabiano Rosas&ldst_block !extern rn i b u w list 41f0984d40SFabiano Rosas&strex !extern rn rd rt rt2 imm 42f0984d40SFabiano Rosas&ldrex !extern rn rt rt2 imm 43f0984d40SFabiano Rosas&bfx !extern rd rn lsb widthm1 44f0984d40SFabiano Rosas&bfi !extern rd rn lsb msb 45f0984d40SFabiano Rosas&sat !extern rd rn satimm imm sh 46f0984d40SFabiano Rosas&pkh !extern rd rn rm imm tb 47f0984d40SFabiano Rosas&cps !extern mode imod M A I F 48f0984d40SFabiano Rosas&mcr !extern cp opc1 crn crm opc2 rt 49f0984d40SFabiano Rosas&mcrr !extern cp opc1 crm rt rt2 50f0984d40SFabiano Rosas 51f0984d40SFabiano Rosas&mve_shl_ri rdalo rdahi shim 52f0984d40SFabiano Rosas&mve_shl_rr rdalo rdahi rm 53f0984d40SFabiano Rosas&mve_sh_ri rda shim 54f0984d40SFabiano Rosas&mve_sh_rr rda rm 55f0984d40SFabiano Rosas 56f0984d40SFabiano Rosas# rdahi: bits [3:1] from insn, bit 0 is 1 57f0984d40SFabiano Rosas# rdalo: bits [3:1] from insn, bit 0 is 0 58f0984d40SFabiano Rosas%rdahi_9 9:3 !function=times_2_plus_1 59f0984d40SFabiano Rosas%rdalo_17 17:3 !function=times_2 60f0984d40SFabiano Rosas 61f0984d40SFabiano Rosas# Data-processing (register) 62f0984d40SFabiano Rosas 63f0984d40SFabiano Rosas%imm5_12_6 12:3 6:2 64f0984d40SFabiano Rosas 65f0984d40SFabiano Rosas@s_rrr_shi ....... .... s:1 rn:4 .... rd:4 .. shty:2 rm:4 \ 66f0984d40SFabiano Rosas &s_rrr_shi shim=%imm5_12_6 67f0984d40SFabiano Rosas@s_rxr_shi ....... .... s:1 .... .... rd:4 .. shty:2 rm:4 \ 68f0984d40SFabiano Rosas &s_rrr_shi shim=%imm5_12_6 rn=0 69f0984d40SFabiano Rosas@S_xrr_shi ....... .... . rn:4 .... .... .. shty:2 rm:4 \ 70f0984d40SFabiano Rosas &s_rrr_shi shim=%imm5_12_6 s=1 rd=0 71f0984d40SFabiano Rosas 72f0984d40SFabiano Rosas@mve_shl_ri ....... .... . ... . . ... ... . .. .. .... \ 73f0984d40SFabiano Rosas &mve_shl_ri shim=%imm5_12_6 rdalo=%rdalo_17 rdahi=%rdahi_9 74f0984d40SFabiano Rosas@mve_shl_rr ....... .... . ... . rm:4 ... . .. .. .... \ 75f0984d40SFabiano Rosas &mve_shl_rr rdalo=%rdalo_17 rdahi=%rdahi_9 76f0984d40SFabiano Rosas@mve_sh_ri ....... .... . rda:4 . ... ... . .. .. .... \ 77f0984d40SFabiano Rosas &mve_sh_ri shim=%imm5_12_6 78f0984d40SFabiano Rosas@mve_sh_rr ....... .... . rda:4 rm:4 .... .... .... &mve_sh_rr 79f0984d40SFabiano Rosas 80f0984d40SFabiano Rosas{ 81f0984d40SFabiano Rosas TST_xrri 1110101 0000 1 .... 0 ... 1111 .... .... @S_xrr_shi 82f0984d40SFabiano Rosas AND_rrri 1110101 0000 . .... 0 ... .... .... .... @s_rrr_shi 83f0984d40SFabiano Rosas} 84f0984d40SFabiano RosasBIC_rrri 1110101 0001 . .... 0 ... .... .... .... @s_rrr_shi 85f0984d40SFabiano Rosas{ 86f0984d40SFabiano Rosas # The v8.1M MVE shift insns overlap in encoding with MOVS/ORRS 87f0984d40SFabiano Rosas # and are distinguished by having Rm==13 or 15. Those are UNPREDICTABLE 88f0984d40SFabiano Rosas # cases for MOVS/ORRS. We decode the MVE cases first, ensuring that 89f0984d40SFabiano Rosas # they explicitly call unallocated_encoding() for cases that must UNDEF 90f0984d40SFabiano Rosas # (eg "using a new shift insn on a v8.1M CPU without MVE"), and letting 91f0984d40SFabiano Rosas # the rest fall through (where ORR_rrri and MOV_rxri will end up 92f0984d40SFabiano Rosas # handling them as r13 and r15 accesses with the same semantics as A32). 93f0984d40SFabiano Rosas [ 94f0984d40SFabiano Rosas { 95f0984d40SFabiano Rosas UQSHL_ri 1110101 0010 1 .... 0 ... 1111 .. 00 1111 @mve_sh_ri 96f0984d40SFabiano Rosas LSLL_ri 1110101 0010 1 ... 0 0 ... ... 1 .. 00 1111 @mve_shl_ri 97f0984d40SFabiano Rosas UQSHLL_ri 1110101 0010 1 ... 1 0 ... ... 1 .. 00 1111 @mve_shl_ri 98f0984d40SFabiano Rosas } 99f0984d40SFabiano Rosas 100f0984d40SFabiano Rosas { 101f0984d40SFabiano Rosas URSHR_ri 1110101 0010 1 .... 0 ... 1111 .. 01 1111 @mve_sh_ri 102f0984d40SFabiano Rosas LSRL_ri 1110101 0010 1 ... 0 0 ... ... 1 .. 01 1111 @mve_shl_ri 103f0984d40SFabiano Rosas URSHRL_ri 1110101 0010 1 ... 1 0 ... ... 1 .. 01 1111 @mve_shl_ri 104f0984d40SFabiano Rosas } 105f0984d40SFabiano Rosas 106f0984d40SFabiano Rosas { 107f0984d40SFabiano Rosas SRSHR_ri 1110101 0010 1 .... 0 ... 1111 .. 10 1111 @mve_sh_ri 108f0984d40SFabiano Rosas ASRL_ri 1110101 0010 1 ... 0 0 ... ... 1 .. 10 1111 @mve_shl_ri 109f0984d40SFabiano Rosas SRSHRL_ri 1110101 0010 1 ... 1 0 ... ... 1 .. 10 1111 @mve_shl_ri 110f0984d40SFabiano Rosas } 111f0984d40SFabiano Rosas 112f0984d40SFabiano Rosas { 113f0984d40SFabiano Rosas SQSHL_ri 1110101 0010 1 .... 0 ... 1111 .. 11 1111 @mve_sh_ri 114f0984d40SFabiano Rosas SQSHLL_ri 1110101 0010 1 ... 1 0 ... ... 1 .. 11 1111 @mve_shl_ri 115f0984d40SFabiano Rosas } 116f0984d40SFabiano Rosas 117f0984d40SFabiano Rosas { 118f0984d40SFabiano Rosas UQRSHL_rr 1110101 0010 1 .... .... 1111 0000 1101 @mve_sh_rr 119f0984d40SFabiano Rosas LSLL_rr 1110101 0010 1 ... 0 .... ... 1 0000 1101 @mve_shl_rr 120f0984d40SFabiano Rosas UQRSHLL64_rr 1110101 0010 1 ... 1 .... ... 1 0000 1101 @mve_shl_rr 121f0984d40SFabiano Rosas } 122f0984d40SFabiano Rosas 123f0984d40SFabiano Rosas { 124f0984d40SFabiano Rosas SQRSHR_rr 1110101 0010 1 .... .... 1111 0010 1101 @mve_sh_rr 125f0984d40SFabiano Rosas ASRL_rr 1110101 0010 1 ... 0 .... ... 1 0010 1101 @mve_shl_rr 126f0984d40SFabiano Rosas SQRSHRL64_rr 1110101 0010 1 ... 1 .... ... 1 0010 1101 @mve_shl_rr 127f0984d40SFabiano Rosas } 128f0984d40SFabiano Rosas 129f0984d40SFabiano Rosas UQRSHLL48_rr 1110101 0010 1 ... 1 .... ... 1 1000 1101 @mve_shl_rr 130f0984d40SFabiano Rosas SQRSHRL48_rr 1110101 0010 1 ... 1 .... ... 1 1010 1101 @mve_shl_rr 131f0984d40SFabiano Rosas ] 132f0984d40SFabiano Rosas 133f0984d40SFabiano Rosas MOV_rxri 1110101 0010 . 1111 0 ... .... .... .... @s_rxr_shi 134f0984d40SFabiano Rosas ORR_rrri 1110101 0010 . .... 0 ... .... .... .... @s_rrr_shi 135f0984d40SFabiano Rosas 136f0984d40SFabiano Rosas # v8.1M CSEL and friends 137f0984d40SFabiano Rosas CSEL 1110101 0010 1 rn:4 10 op:2 rd:4 fcond:4 rm:4 138f0984d40SFabiano Rosas} 139f0984d40SFabiano Rosas{ 140f0984d40SFabiano Rosas MVN_rxri 1110101 0011 . 1111 0 ... .... .... .... @s_rxr_shi 141f0984d40SFabiano Rosas ORN_rrri 1110101 0011 . .... 0 ... .... .... .... @s_rrr_shi 142f0984d40SFabiano Rosas} 143f0984d40SFabiano Rosas{ 144f0984d40SFabiano Rosas TEQ_xrri 1110101 0100 1 .... 0 ... 1111 .... .... @S_xrr_shi 145f0984d40SFabiano Rosas EOR_rrri 1110101 0100 . .... 0 ... .... .... .... @s_rrr_shi 146f0984d40SFabiano Rosas} 147f0984d40SFabiano RosasPKH 1110101 0110 0 rn:4 0 ... rd:4 .. tb:1 0 rm:4 \ 148f0984d40SFabiano Rosas &pkh imm=%imm5_12_6 149f0984d40SFabiano Rosas{ 150f0984d40SFabiano Rosas CMN_xrri 1110101 1000 1 .... 0 ... 1111 .... .... @S_xrr_shi 151f0984d40SFabiano Rosas ADD_rrri 1110101 1000 . .... 0 ... .... .... .... @s_rrr_shi 152f0984d40SFabiano Rosas} 153f0984d40SFabiano RosasADC_rrri 1110101 1010 . .... 0 ... .... .... .... @s_rrr_shi 154f0984d40SFabiano RosasSBC_rrri 1110101 1011 . .... 0 ... .... .... .... @s_rrr_shi 155f0984d40SFabiano Rosas{ 156f0984d40SFabiano Rosas CMP_xrri 1110101 1101 1 .... 0 ... 1111 .... .... @S_xrr_shi 157f0984d40SFabiano Rosas SUB_rrri 1110101 1101 . .... 0 ... .... .... .... @s_rrr_shi 158f0984d40SFabiano Rosas} 159f0984d40SFabiano RosasRSB_rrri 1110101 1110 . .... 0 ... .... .... .... @s_rrr_shi 160f0984d40SFabiano Rosas 161f0984d40SFabiano Rosas# Data-processing (register-shifted register) 162f0984d40SFabiano Rosas 163f0984d40SFabiano RosasMOV_rxrr 1111 1010 0 shty:2 s:1 rm:4 1111 rd:4 0000 rs:4 \ 164f0984d40SFabiano Rosas &s_rrr_shr rn=0 165f0984d40SFabiano Rosas 166f0984d40SFabiano Rosas# Data-processing (immediate) 167f0984d40SFabiano Rosas 168f0984d40SFabiano Rosas%t32extrot 26:1 12:3 0:8 !function=t32_expandimm_rot 169f0984d40SFabiano Rosas%t32extimm 26:1 12:3 0:8 !function=t32_expandimm_imm 170f0984d40SFabiano Rosas 171f0984d40SFabiano Rosas@s_rri_rot ....... .... s:1 rn:4 . ... rd:4 ........ \ 172f0984d40SFabiano Rosas &s_rri_rot imm=%t32extimm rot=%t32extrot 173f0984d40SFabiano Rosas@s_rxi_rot ....... .... s:1 .... . ... rd:4 ........ \ 174f0984d40SFabiano Rosas &s_rri_rot imm=%t32extimm rot=%t32extrot rn=0 175f0984d40SFabiano Rosas@S_xri_rot ....... .... . rn:4 . ... .... ........ \ 176f0984d40SFabiano Rosas &s_rri_rot imm=%t32extimm rot=%t32extrot s=1 rd=0 177f0984d40SFabiano Rosas 178f0984d40SFabiano Rosas{ 179f0984d40SFabiano Rosas TST_xri 1111 0.0 0000 1 .... 0 ... 1111 ........ @S_xri_rot 180f0984d40SFabiano Rosas AND_rri 1111 0.0 0000 . .... 0 ... .... ........ @s_rri_rot 181f0984d40SFabiano Rosas} 182f0984d40SFabiano RosasBIC_rri 1111 0.0 0001 . .... 0 ... .... ........ @s_rri_rot 183f0984d40SFabiano Rosas{ 184f0984d40SFabiano Rosas MOV_rxi 1111 0.0 0010 . 1111 0 ... .... ........ @s_rxi_rot 185f0984d40SFabiano Rosas ORR_rri 1111 0.0 0010 . .... 0 ... .... ........ @s_rri_rot 186f0984d40SFabiano Rosas} 187f0984d40SFabiano Rosas{ 188f0984d40SFabiano Rosas MVN_rxi 1111 0.0 0011 . 1111 0 ... .... ........ @s_rxi_rot 189f0984d40SFabiano Rosas ORN_rri 1111 0.0 0011 . .... 0 ... .... ........ @s_rri_rot 190f0984d40SFabiano Rosas} 191f0984d40SFabiano Rosas{ 192f0984d40SFabiano Rosas TEQ_xri 1111 0.0 0100 1 .... 0 ... 1111 ........ @S_xri_rot 193f0984d40SFabiano Rosas EOR_rri 1111 0.0 0100 . .... 0 ... .... ........ @s_rri_rot 194f0984d40SFabiano Rosas} 195f0984d40SFabiano Rosas{ 196f0984d40SFabiano Rosas CMN_xri 1111 0.0 1000 1 .... 0 ... 1111 ........ @S_xri_rot 197f0984d40SFabiano Rosas ADD_rri 1111 0.0 1000 . .... 0 ... .... ........ @s_rri_rot 198f0984d40SFabiano Rosas} 199f0984d40SFabiano RosasADC_rri 1111 0.0 1010 . .... 0 ... .... ........ @s_rri_rot 200f0984d40SFabiano RosasSBC_rri 1111 0.0 1011 . .... 0 ... .... ........ @s_rri_rot 201f0984d40SFabiano Rosas{ 202f0984d40SFabiano Rosas CMP_xri 1111 0.0 1101 1 .... 0 ... 1111 ........ @S_xri_rot 203f0984d40SFabiano Rosas SUB_rri 1111 0.0 1101 . .... 0 ... .... ........ @s_rri_rot 204f0984d40SFabiano Rosas} 205f0984d40SFabiano RosasRSB_rri 1111 0.0 1110 . .... 0 ... .... ........ @s_rri_rot 206f0984d40SFabiano Rosas 207f0984d40SFabiano Rosas# Data processing (plain binary immediate) 208f0984d40SFabiano Rosas 209f0984d40SFabiano Rosas%imm12_26_12_0 26:1 12:3 0:8 210f0984d40SFabiano Rosas%neg12_26_12_0 26:1 12:3 0:8 !function=negate 211f0984d40SFabiano Rosas@s0_rri_12 .... ... .... . rn:4 . ... rd:4 ........ \ 212f0984d40SFabiano Rosas &s_rri_rot imm=%imm12_26_12_0 rot=0 s=0 213f0984d40SFabiano Rosas 214f0984d40SFabiano Rosas{ 215f0984d40SFabiano Rosas ADR 1111 0.1 0000 0 1111 0 ... rd:4 ........ \ 216f0984d40SFabiano Rosas &ri imm=%imm12_26_12_0 217f0984d40SFabiano Rosas ADD_rri 1111 0.1 0000 0 .... 0 ... .... ........ @s0_rri_12 218f0984d40SFabiano Rosas} 219f0984d40SFabiano Rosas{ 220f0984d40SFabiano Rosas ADR 1111 0.1 0101 0 1111 0 ... rd:4 ........ \ 221f0984d40SFabiano Rosas &ri imm=%neg12_26_12_0 222f0984d40SFabiano Rosas SUB_rri 1111 0.1 0101 0 .... 0 ... .... ........ @s0_rri_12 223f0984d40SFabiano Rosas} 224f0984d40SFabiano Rosas 225f0984d40SFabiano Rosas# Move Wide 226f0984d40SFabiano Rosas 227f0984d40SFabiano Rosas%imm16_26_16_12_0 16:4 26:1 12:3 0:8 228f0984d40SFabiano Rosas@mov16 .... .... .... .... .... rd:4 .... .... \ 229f0984d40SFabiano Rosas &ri imm=%imm16_26_16_12_0 230f0984d40SFabiano Rosas 231f0984d40SFabiano RosasMOVW 1111 0.10 0100 .... 0 ... .... ........ @mov16 232f0984d40SFabiano RosasMOVT 1111 0.10 1100 .... 0 ... .... ........ @mov16 233f0984d40SFabiano Rosas 234f0984d40SFabiano Rosas# Saturate, bitfield 235f0984d40SFabiano Rosas 236f0984d40SFabiano Rosas@sat .... .... .. sh:1 . rn:4 . ... rd:4 .. . satimm:5 \ 237f0984d40SFabiano Rosas &sat imm=%imm5_12_6 238f0984d40SFabiano Rosas@sat16 .... .... .. . . rn:4 . ... rd:4 .. . satimm:5 \ 239f0984d40SFabiano Rosas &sat sh=0 imm=0 240f0984d40SFabiano Rosas 241f0984d40SFabiano Rosas{ 242f0984d40SFabiano Rosas SSAT16 1111 0011 001 0 .... 0 000 .... 00 0 ..... @sat16 243f0984d40SFabiano Rosas SSAT 1111 0011 00. 0 .... 0 ... .... .. 0 ..... @sat 244f0984d40SFabiano Rosas} 245f0984d40SFabiano Rosas{ 246f0984d40SFabiano Rosas USAT16 1111 0011 101 0 .... 0 000 .... 00 0 ..... @sat16 247f0984d40SFabiano Rosas USAT 1111 0011 10. 0 .... 0 ... .... .. 0 ..... @sat 248f0984d40SFabiano Rosas} 249f0984d40SFabiano Rosas 250f0984d40SFabiano Rosas@bfx .... .... ... . rn:4 . ... rd:4 .. . widthm1:5 \ 251f0984d40SFabiano Rosas &bfx lsb=%imm5_12_6 252f0984d40SFabiano Rosas@bfi .... .... ... . rn:4 . ... rd:4 .. . msb:5 \ 253f0984d40SFabiano Rosas &bfi lsb=%imm5_12_6 254f0984d40SFabiano Rosas 255f0984d40SFabiano RosasSBFX 1111 0011 010 0 .... 0 ... .... ..0..... @bfx 256f0984d40SFabiano RosasUBFX 1111 0011 110 0 .... 0 ... .... ..0..... @bfx 257f0984d40SFabiano Rosas 258f0984d40SFabiano Rosas# bfc is bfi w/ rn=15 259f0984d40SFabiano RosasBFCI 1111 0011 011 0 .... 0 ... .... ..0..... @bfi 260f0984d40SFabiano Rosas 261f0984d40SFabiano Rosas# Multiply and multiply accumulate 262f0984d40SFabiano Rosas 263f0984d40SFabiano Rosas@s0_rnadm .... .... .... rn:4 ra:4 rd:4 .... rm:4 &s_rrrr s=0 264f0984d40SFabiano Rosas@s0_rn0dm .... .... .... rn:4 .... rd:4 .... rm:4 &s_rrrr ra=0 s=0 265f0984d40SFabiano Rosas@rnadm .... .... .... rn:4 ra:4 rd:4 .... rm:4 &rrrr 266f0984d40SFabiano Rosas@rn0dm .... .... .... rn:4 .... rd:4 .... rm:4 &rrrr ra=0 267f0984d40SFabiano Rosas@rndm .... .... .... rn:4 .... rd:4 .... rm:4 &rrr 268f0984d40SFabiano Rosas@rdm .... .... .... .... .... rd:4 .... rm:4 &rr 269f0984d40SFabiano Rosas 270f0984d40SFabiano Rosas{ 271f0984d40SFabiano Rosas MUL 1111 1011 0000 .... 1111 .... 0000 .... @s0_rn0dm 272f0984d40SFabiano Rosas MLA 1111 1011 0000 .... .... .... 0000 .... @s0_rnadm 273f0984d40SFabiano Rosas} 274f0984d40SFabiano RosasMLS 1111 1011 0000 .... .... .... 0001 .... @rnadm 275f0984d40SFabiano RosasSMULL 1111 1011 1000 .... .... .... 0000 .... @s0_rnadm 276f0984d40SFabiano RosasUMULL 1111 1011 1010 .... .... .... 0000 .... @s0_rnadm 277f0984d40SFabiano RosasSMLAL 1111 1011 1100 .... .... .... 0000 .... @s0_rnadm 278f0984d40SFabiano RosasUMLAL 1111 1011 1110 .... .... .... 0000 .... @s0_rnadm 279f0984d40SFabiano RosasUMAAL 1111 1011 1110 .... .... .... 0110 .... @rnadm 280f0984d40SFabiano Rosas{ 281f0984d40SFabiano Rosas SMULWB 1111 1011 0011 .... 1111 .... 0000 .... @rn0dm 282f0984d40SFabiano Rosas SMLAWB 1111 1011 0011 .... .... .... 0000 .... @rnadm 283f0984d40SFabiano Rosas} 284f0984d40SFabiano Rosas{ 285f0984d40SFabiano Rosas SMULWT 1111 1011 0011 .... 1111 .... 0001 .... @rn0dm 286f0984d40SFabiano Rosas SMLAWT 1111 1011 0011 .... .... .... 0001 .... @rnadm 287f0984d40SFabiano Rosas} 288f0984d40SFabiano Rosas{ 289f0984d40SFabiano Rosas SMULBB 1111 1011 0001 .... 1111 .... 0000 .... @rn0dm 290f0984d40SFabiano Rosas SMLABB 1111 1011 0001 .... .... .... 0000 .... @rnadm 291f0984d40SFabiano Rosas} 292f0984d40SFabiano Rosas{ 293f0984d40SFabiano Rosas SMULBT 1111 1011 0001 .... 1111 .... 0001 .... @rn0dm 294f0984d40SFabiano Rosas SMLABT 1111 1011 0001 .... .... .... 0001 .... @rnadm 295f0984d40SFabiano Rosas} 296f0984d40SFabiano Rosas{ 297f0984d40SFabiano Rosas SMULTB 1111 1011 0001 .... 1111 .... 0010 .... @rn0dm 298f0984d40SFabiano Rosas SMLATB 1111 1011 0001 .... .... .... 0010 .... @rnadm 299f0984d40SFabiano Rosas} 300f0984d40SFabiano Rosas{ 301f0984d40SFabiano Rosas SMULTT 1111 1011 0001 .... 1111 .... 0011 .... @rn0dm 302f0984d40SFabiano Rosas SMLATT 1111 1011 0001 .... .... .... 0011 .... @rnadm 303f0984d40SFabiano Rosas} 304f0984d40SFabiano RosasSMLALBB 1111 1011 1100 .... .... .... 1000 .... @rnadm 305f0984d40SFabiano RosasSMLALBT 1111 1011 1100 .... .... .... 1001 .... @rnadm 306f0984d40SFabiano RosasSMLALTB 1111 1011 1100 .... .... .... 1010 .... @rnadm 307f0984d40SFabiano RosasSMLALTT 1111 1011 1100 .... .... .... 1011 .... @rnadm 308f0984d40SFabiano Rosas 309f0984d40SFabiano Rosas# usad8 is usada8 w/ ra=15 310f0984d40SFabiano RosasUSADA8 1111 1011 0111 .... .... .... 0000 .... @rnadm 311f0984d40SFabiano Rosas 312f0984d40SFabiano RosasSMLAD 1111 1011 0010 .... .... .... 0000 .... @rnadm 313f0984d40SFabiano RosasSMLADX 1111 1011 0010 .... .... .... 0001 .... @rnadm 314f0984d40SFabiano RosasSMLSD 1111 1011 0100 .... .... .... 0000 .... @rnadm 315f0984d40SFabiano RosasSMLSDX 1111 1011 0100 .... .... .... 0001 .... @rnadm 316f0984d40SFabiano Rosas 317f0984d40SFabiano RosasSMLALD 1111 1011 1100 .... .... .... 1100 .... @rnadm 318f0984d40SFabiano RosasSMLALDX 1111 1011 1100 .... .... .... 1101 .... @rnadm 319f0984d40SFabiano RosasSMLSLD 1111 1011 1101 .... .... .... 1100 .... @rnadm 320f0984d40SFabiano RosasSMLSLDX 1111 1011 1101 .... .... .... 1101 .... @rnadm 321f0984d40SFabiano Rosas 322f0984d40SFabiano RosasSMMLA 1111 1011 0101 .... .... .... 0000 .... @rnadm 323f0984d40SFabiano RosasSMMLAR 1111 1011 0101 .... .... .... 0001 .... @rnadm 324f0984d40SFabiano RosasSMMLS 1111 1011 0110 .... .... .... 0000 .... @rnadm 325f0984d40SFabiano RosasSMMLSR 1111 1011 0110 .... .... .... 0001 .... @rnadm 326f0984d40SFabiano Rosas 327f0984d40SFabiano RosasSDIV 1111 1011 1001 .... 1111 .... 1111 .... @rndm 328f0984d40SFabiano RosasUDIV 1111 1011 1011 .... 1111 .... 1111 .... @rndm 329f0984d40SFabiano Rosas 330f0984d40SFabiano Rosas# Data-processing (two source registers) 331f0984d40SFabiano Rosas 332f0984d40SFabiano RosasQADD 1111 1010 1000 .... 1111 .... 1000 .... @rndm 333f0984d40SFabiano RosasQSUB 1111 1010 1000 .... 1111 .... 1010 .... @rndm 334f0984d40SFabiano RosasQDADD 1111 1010 1000 .... 1111 .... 1001 .... @rndm 335f0984d40SFabiano RosasQDSUB 1111 1010 1000 .... 1111 .... 1011 .... @rndm 336f0984d40SFabiano Rosas 337f0984d40SFabiano RosasCRC32B 1111 1010 1100 .... 1111 .... 1000 .... @rndm 338f0984d40SFabiano RosasCRC32H 1111 1010 1100 .... 1111 .... 1001 .... @rndm 339f0984d40SFabiano RosasCRC32W 1111 1010 1100 .... 1111 .... 1010 .... @rndm 340f0984d40SFabiano RosasCRC32CB 1111 1010 1101 .... 1111 .... 1000 .... @rndm 341f0984d40SFabiano RosasCRC32CH 1111 1010 1101 .... 1111 .... 1001 .... @rndm 342f0984d40SFabiano RosasCRC32CW 1111 1010 1101 .... 1111 .... 1010 .... @rndm 343f0984d40SFabiano Rosas 344f0984d40SFabiano RosasSEL 1111 1010 1010 .... 1111 .... 1000 .... @rndm 345f0984d40SFabiano Rosas 346f0984d40SFabiano Rosas# Note rn != rm is CONSTRAINED UNPREDICTABLE; we choose to ignore rn. 347f0984d40SFabiano RosasREV 1111 1010 1001 ---- 1111 .... 1000 .... @rdm 348f0984d40SFabiano RosasREV16 1111 1010 1001 ---- 1111 .... 1001 .... @rdm 349f0984d40SFabiano RosasRBIT 1111 1010 1001 ---- 1111 .... 1010 .... @rdm 350f0984d40SFabiano RosasREVSH 1111 1010 1001 ---- 1111 .... 1011 .... @rdm 351f0984d40SFabiano RosasCLZ 1111 1010 1011 ---- 1111 .... 1000 .... @rdm 352f0984d40SFabiano Rosas 353f0984d40SFabiano Rosas# Branches and miscellaneous control 354f0984d40SFabiano Rosas 355f0984d40SFabiano Rosas%msr_sysm 4:1 8:4 356f0984d40SFabiano Rosas%mrs_sysm 4:1 16:4 357f0984d40SFabiano Rosas%imm16_16_0 16:4 0:12 358f0984d40SFabiano Rosas%imm21 26:s1 11:1 13:1 16:6 0:11 !function=times_2 359f0984d40SFabiano Rosas&ci cond imm 360f0984d40SFabiano Rosas 361f0984d40SFabiano Rosas{ 362f0984d40SFabiano Rosas # Group insn[25:23] = 111, which is cond=111x for the branch below, 363f0984d40SFabiano Rosas # or unconditional, which would be illegal for the branch. 364f0984d40SFabiano Rosas [ 365f0984d40SFabiano Rosas # Hints, and CPS 366f0984d40SFabiano Rosas { 367f0984d40SFabiano Rosas [ 368f0984d40SFabiano Rosas YIELD 1111 0011 1010 1111 1000 0000 0000 0001 369f0984d40SFabiano Rosas WFE 1111 0011 1010 1111 1000 0000 0000 0010 370f0984d40SFabiano Rosas WFI 1111 0011 1010 1111 1000 0000 0000 0011 371f0984d40SFabiano Rosas 372f0984d40SFabiano Rosas # TODO: Implement SEV, SEVL; may help SMP performance. 373f0984d40SFabiano Rosas # SEV 1111 0011 1010 1111 1000 0000 0000 0100 374f0984d40SFabiano Rosas # SEVL 1111 0011 1010 1111 1000 0000 0000 0101 375f0984d40SFabiano Rosas 376f0984d40SFabiano Rosas ESB 1111 0011 1010 1111 1000 0000 0001 0000 377f0984d40SFabiano Rosas ] 378f0984d40SFabiano Rosas 379f0984d40SFabiano Rosas # The canonical nop ends in 0000 0000, but the whole rest 380f0984d40SFabiano Rosas # of the space is "reserved hint, behaves as nop". 381f0984d40SFabiano Rosas NOP 1111 0011 1010 1111 1000 0000 ---- ---- 382f0984d40SFabiano Rosas 383f0984d40SFabiano Rosas # If imod == '00' && M == '0' then SEE "Hint instructions", above. 384f0984d40SFabiano Rosas CPS 1111 0011 1010 1111 1000 0 imod:2 M:1 A:1 I:1 F:1 mode:5 \ 385f0984d40SFabiano Rosas &cps 386f0984d40SFabiano Rosas } 387f0984d40SFabiano Rosas 388f0984d40SFabiano Rosas # Miscellaneous control 389f0984d40SFabiano Rosas CLREX 1111 0011 1011 1111 1000 1111 0010 1111 390f0984d40SFabiano Rosas DSB 1111 0011 1011 1111 1000 1111 0100 ---- 391f0984d40SFabiano Rosas DMB 1111 0011 1011 1111 1000 1111 0101 ---- 392f0984d40SFabiano Rosas ISB 1111 0011 1011 1111 1000 1111 0110 ---- 393f0984d40SFabiano Rosas SB 1111 0011 1011 1111 1000 1111 0111 0000 394f0984d40SFabiano Rosas 395f0984d40SFabiano Rosas # Note that the v7m insn overlaps both the normal and banked insn. 396f0984d40SFabiano Rosas { 397f0984d40SFabiano Rosas MRS_bank 1111 0011 111 r:1 .... 1000 rd:4 001. 0000 \ 398f0984d40SFabiano Rosas &mrs_bank sysm=%mrs_sysm 399f0984d40SFabiano Rosas MRS_reg 1111 0011 111 r:1 1111 1000 rd:4 0000 0000 &mrs_reg 400f0984d40SFabiano Rosas MRS_v7m 1111 0011 111 0 1111 1000 rd:4 sysm:8 401f0984d40SFabiano Rosas } 402f0984d40SFabiano Rosas { 403f0984d40SFabiano Rosas MSR_bank 1111 0011 100 r:1 rn:4 1000 .... 001. 0000 \ 404f0984d40SFabiano Rosas &msr_bank sysm=%msr_sysm 405f0984d40SFabiano Rosas MSR_reg 1111 0011 100 r:1 rn:4 1000 mask:4 0000 0000 &msr_reg 406f0984d40SFabiano Rosas MSR_v7m 1111 0011 100 0 rn:4 1000 mask:2 00 sysm:8 407f0984d40SFabiano Rosas } 408f0984d40SFabiano Rosas BXJ 1111 0011 1100 rm:4 1000 1111 0000 0000 &r 409f0984d40SFabiano Rosas { 410f0984d40SFabiano Rosas # At v6T2, this is the T5 encoding of SUBS PC, LR, #IMM, and works as for 411f0984d40SFabiano Rosas # every other encoding of SUBS. With v7VE, IMM=0 is redefined as ERET. 412f0984d40SFabiano Rosas # The distinction between the two only matters for Hyp mode. 413f0984d40SFabiano Rosas ERET 1111 0011 1101 1110 1000 1111 0000 0000 414f0984d40SFabiano Rosas SUB_rri 1111 0011 1101 1110 1000 1111 imm:8 \ 415f0984d40SFabiano Rosas &s_rri_rot rot=0 s=1 rd=15 rn=14 416f0984d40SFabiano Rosas } 417f0984d40SFabiano Rosas SMC 1111 0111 1111 imm:4 1000 0000 0000 0000 &i 418f0984d40SFabiano Rosas HVC 1111 0111 1110 .... 1000 .... .... .... \ 419f0984d40SFabiano Rosas &i imm=%imm16_16_0 420f0984d40SFabiano Rosas UDF 1111 0111 1111 ---- 1010 ---- ---- ---- 421f0984d40SFabiano Rosas ] 422f0984d40SFabiano Rosas B_cond_thumb 1111 0. cond:4 ...... 10.0 ............ &ci imm=%imm21 423f0984d40SFabiano Rosas} 424f0984d40SFabiano Rosas 425f0984d40SFabiano Rosas# Load/store (register, immediate, literal) 426f0984d40SFabiano Rosas 427f0984d40SFabiano Rosas@ldst_rr .... .... .... rn:4 rt:4 ...... shimm:2 rm:4 \ 428f0984d40SFabiano Rosas &ldst_rr p=1 w=0 u=1 shtype=0 429f0984d40SFabiano Rosas@ldst_ri_idx .... .... .... rn:4 rt:4 . p:1 u:1 . imm:8 \ 430f0984d40SFabiano Rosas &ldst_ri w=1 431f0984d40SFabiano Rosas@ldst_ri_neg .... .... .... rn:4 rt:4 .... imm:8 \ 432f0984d40SFabiano Rosas &ldst_ri p=1 w=0 u=0 433f0984d40SFabiano Rosas@ldst_ri_unp .... .... .... rn:4 rt:4 .... imm:8 \ 434f0984d40SFabiano Rosas &ldst_ri p=1 w=0 u=1 435f0984d40SFabiano Rosas@ldst_ri_pos .... .... .... rn:4 rt:4 imm:12 \ 436f0984d40SFabiano Rosas &ldst_ri p=1 w=0 u=1 437f0984d40SFabiano Rosas@ldst_ri_lit .... .... u:1 ... .... rt:4 imm:12 \ 438f0984d40SFabiano Rosas &ldst_ri p=1 w=0 rn=15 439f0984d40SFabiano Rosas 440f0984d40SFabiano RosasSTRB_rr 1111 1000 0000 .... .... 000000 .. .... @ldst_rr 441f0984d40SFabiano RosasSTRB_ri 1111 1000 0000 .... .... 1..1 ........ @ldst_ri_idx 442f0984d40SFabiano RosasSTRB_ri 1111 1000 0000 .... .... 1100 ........ @ldst_ri_neg 443f0984d40SFabiano RosasSTRBT_ri 1111 1000 0000 .... .... 1110 ........ @ldst_ri_unp 444f0984d40SFabiano RosasSTRB_ri 1111 1000 1000 .... .... ............ @ldst_ri_pos 445f0984d40SFabiano Rosas 446f0984d40SFabiano RosasSTRH_rr 1111 1000 0010 .... .... 000000 .. .... @ldst_rr 447f0984d40SFabiano RosasSTRH_ri 1111 1000 0010 .... .... 1..1 ........ @ldst_ri_idx 448f0984d40SFabiano RosasSTRH_ri 1111 1000 0010 .... .... 1100 ........ @ldst_ri_neg 449f0984d40SFabiano RosasSTRHT_ri 1111 1000 0010 .... .... 1110 ........ @ldst_ri_unp 450f0984d40SFabiano RosasSTRH_ri 1111 1000 1010 .... .... ............ @ldst_ri_pos 451f0984d40SFabiano Rosas 452f0984d40SFabiano RosasSTR_rr 1111 1000 0100 .... .... 000000 .. .... @ldst_rr 453f0984d40SFabiano RosasSTR_ri 1111 1000 0100 .... .... 1..1 ........ @ldst_ri_idx 454f0984d40SFabiano RosasSTR_ri 1111 1000 0100 .... .... 1100 ........ @ldst_ri_neg 455f0984d40SFabiano RosasSTRT_ri 1111 1000 0100 .... .... 1110 ........ @ldst_ri_unp 456f0984d40SFabiano RosasSTR_ri 1111 1000 1100 .... .... ............ @ldst_ri_pos 457f0984d40SFabiano Rosas 458f0984d40SFabiano Rosas# Note that Load, unsigned (literal) overlaps all other load encodings. 459f0984d40SFabiano Rosas{ 460f0984d40SFabiano Rosas { 461*db36e145SRichard Henderson PLD 1111 1000 -001 1111 1111 ------------ # (literal) 462f0984d40SFabiano Rosas LDRB_ri 1111 1000 .001 1111 .... ............ @ldst_ri_lit 463f0984d40SFabiano Rosas } 464f0984d40SFabiano Rosas { 465*db36e145SRichard Henderson PLD 1111 1000 1001 ---- 1111 ------------ # (immediate T1) 466f0984d40SFabiano Rosas LDRB_ri 1111 1000 1001 .... .... ............ @ldst_ri_pos 467f0984d40SFabiano Rosas } 468f0984d40SFabiano Rosas LDRB_ri 1111 1000 0001 .... .... 1..1 ........ @ldst_ri_idx 469f0984d40SFabiano Rosas { 470*db36e145SRichard Henderson PLD 1111 1000 0001 ---- 1111 1100 -------- # (immediate T2) 471f0984d40SFabiano Rosas LDRB_ri 1111 1000 0001 .... .... 1100 ........ @ldst_ri_neg 472f0984d40SFabiano Rosas } 473f0984d40SFabiano Rosas LDRBT_ri 1111 1000 0001 .... .... 1110 ........ @ldst_ri_unp 474f0984d40SFabiano Rosas { 475*db36e145SRichard Henderson PLD 1111 1000 0001 ---- 1111 000000 -- ---- # (register) 476f0984d40SFabiano Rosas LDRB_rr 1111 1000 0001 .... .... 000000 .. .... @ldst_rr 477f0984d40SFabiano Rosas } 478f0984d40SFabiano Rosas} 479f0984d40SFabiano Rosas{ 480f0984d40SFabiano Rosas { 481*db36e145SRichard Henderson PLD 1111 1000 -011 1111 1111 ------------ # (literal) 482f0984d40SFabiano Rosas LDRH_ri 1111 1000 .011 1111 .... ............ @ldst_ri_lit 483f0984d40SFabiano Rosas } 484f0984d40SFabiano Rosas { 485*db36e145SRichard Henderson PLDW 1111 1000 1011 ---- 1111 ------------ # (immediate T1) 486f0984d40SFabiano Rosas LDRH_ri 1111 1000 1011 .... .... ............ @ldst_ri_pos 487f0984d40SFabiano Rosas } 488f0984d40SFabiano Rosas LDRH_ri 1111 1000 0011 .... .... 1..1 ........ @ldst_ri_idx 489f0984d40SFabiano Rosas { 490*db36e145SRichard Henderson PLDW 1111 1000 0011 ---- 1111 1100 -------- # (immediate T2) 491f0984d40SFabiano Rosas LDRH_ri 1111 1000 0011 .... .... 1100 ........ @ldst_ri_neg 492f0984d40SFabiano Rosas } 493f0984d40SFabiano Rosas LDRHT_ri 1111 1000 0011 .... .... 1110 ........ @ldst_ri_unp 494f0984d40SFabiano Rosas { 495*db36e145SRichard Henderson PLDW 1111 1000 0011 ---- 1111 000000 -- ---- # (register) 496f0984d40SFabiano Rosas LDRH_rr 1111 1000 0011 .... .... 000000 .. .... @ldst_rr 497f0984d40SFabiano Rosas } 498f0984d40SFabiano Rosas} 499f0984d40SFabiano Rosas{ 500f0984d40SFabiano Rosas LDR_ri 1111 1000 .101 1111 .... ............ @ldst_ri_lit 501f0984d40SFabiano Rosas LDR_ri 1111 1000 1101 .... .... ............ @ldst_ri_pos 502f0984d40SFabiano Rosas LDR_ri 1111 1000 0101 .... .... 1..1 ........ @ldst_ri_idx 503f0984d40SFabiano Rosas LDR_ri 1111 1000 0101 .... .... 1100 ........ @ldst_ri_neg 504f0984d40SFabiano Rosas LDRT_ri 1111 1000 0101 .... .... 1110 ........ @ldst_ri_unp 505f0984d40SFabiano Rosas LDR_rr 1111 1000 0101 .... .... 000000 .. .... @ldst_rr 506f0984d40SFabiano Rosas} 507f0984d40SFabiano Rosas{ 508f0984d40SFabiano Rosas { 509*db36e145SRichard Henderson PLI 1111 1001 -001 1111 1111 ------------ # (literal T3) 510f0984d40SFabiano Rosas LDRSB_ri 1111 1001 .001 1111 .... ............ @ldst_ri_lit 511f0984d40SFabiano Rosas } 512f0984d40SFabiano Rosas { 513*db36e145SRichard Henderson PLI 1111 1001 1001 ---- 1111 ------------ # (immediate T1) 514f0984d40SFabiano Rosas LDRSB_ri 1111 1001 1001 .... .... ............ @ldst_ri_pos 515f0984d40SFabiano Rosas } 516f0984d40SFabiano Rosas LDRSB_ri 1111 1001 0001 .... .... 1..1 ........ @ldst_ri_idx 517f0984d40SFabiano Rosas { 518*db36e145SRichard Henderson PLI 1111 1001 0001 ---- 1111 1100 -------- # (immediate T2) 519f0984d40SFabiano Rosas LDRSB_ri 1111 1001 0001 .... .... 1100 ........ @ldst_ri_neg 520f0984d40SFabiano Rosas } 521f0984d40SFabiano Rosas LDRSBT_ri 1111 1001 0001 .... .... 1110 ........ @ldst_ri_unp 522f0984d40SFabiano Rosas { 523*db36e145SRichard Henderson PLI 1111 1001 0001 ---- 1111 000000 -- ---- # (register) 524f0984d40SFabiano Rosas LDRSB_rr 1111 1001 0001 .... .... 000000 .. .... @ldst_rr 525f0984d40SFabiano Rosas } 526f0984d40SFabiano Rosas} 527f0984d40SFabiano Rosas# NOPs here are unallocated memory hints, treated as NOP. 528f0984d40SFabiano Rosas{ 529f0984d40SFabiano Rosas { 530f0984d40SFabiano Rosas NOP 1111 1001 -011 1111 1111 ------------ 531f0984d40SFabiano Rosas LDRSH_ri 1111 1001 .011 1111 .... ............ @ldst_ri_lit 532f0984d40SFabiano Rosas } 533f0984d40SFabiano Rosas { 534f0984d40SFabiano Rosas NOP 1111 1001 1011 ---- 1111 ------------ 535f0984d40SFabiano Rosas LDRSH_ri 1111 1001 1011 .... .... ............ @ldst_ri_pos 536f0984d40SFabiano Rosas } 537f0984d40SFabiano Rosas LDRSH_ri 1111 1001 0011 .... .... 1..1 ........ @ldst_ri_idx 538f0984d40SFabiano Rosas { 539f0984d40SFabiano Rosas NOP 1111 1001 0011 ---- 1111 1100 -------- 540f0984d40SFabiano Rosas LDRSH_ri 1111 1001 0011 .... .... 1100 ........ @ldst_ri_neg 541f0984d40SFabiano Rosas } 542f0984d40SFabiano Rosas LDRSHT_ri 1111 1001 0011 .... .... 1110 ........ @ldst_ri_unp 543f0984d40SFabiano Rosas { 544f0984d40SFabiano Rosas NOP 1111 1001 0011 ---- 1111 000000 -- ---- 545f0984d40SFabiano Rosas LDRSH_rr 1111 1001 0011 .... .... 000000 .. .... @ldst_rr 546f0984d40SFabiano Rosas } 547f0984d40SFabiano Rosas} 548f0984d40SFabiano Rosas 549f0984d40SFabiano Rosas%imm8x4 0:8 !function=times_4 550f0984d40SFabiano Rosas&ldst_ri2 p w u rn rt rt2 imm 551f0984d40SFabiano Rosas@ldstd_ri8 .... .... u:1 ... rn:4 rt:4 rt2:4 ........ \ 552f0984d40SFabiano Rosas &ldst_ri2 imm=%imm8x4 553f0984d40SFabiano Rosas 554f0984d40SFabiano RosasSTRD_ri_t32 1110 1000 .110 .... .... .... ........ @ldstd_ri8 w=1 p=0 555f0984d40SFabiano RosasLDRD_ri_t32 1110 1000 .111 .... .... .... ........ @ldstd_ri8 w=1 p=0 556f0984d40SFabiano Rosas 557f0984d40SFabiano RosasSTRD_ri_t32 1110 1001 .100 .... .... .... ........ @ldstd_ri8 w=0 p=1 558f0984d40SFabiano RosasLDRD_ri_t32 1110 1001 .101 .... .... .... ........ @ldstd_ri8 w=0 p=1 559f0984d40SFabiano Rosas 560f0984d40SFabiano RosasSTRD_ri_t32 1110 1001 .110 .... .... .... ........ @ldstd_ri8 w=1 p=1 561f0984d40SFabiano Rosas{ 562f0984d40SFabiano Rosas SG 1110 1001 0111 1111 1110 1001 01111111 563f0984d40SFabiano Rosas LDRD_ri_t32 1110 1001 .111 .... .... .... ........ @ldstd_ri8 w=1 p=1 564f0984d40SFabiano Rosas} 565f0984d40SFabiano Rosas 566f0984d40SFabiano Rosas# Load/Store Exclusive, Load-Acquire/Store-Release, and Table Branch 567f0984d40SFabiano Rosas 568f0984d40SFabiano Rosas@strex_i .... .... .... rn:4 rt:4 rd:4 .... .... \ 569f0984d40SFabiano Rosas &strex rt2=15 imm=%imm8x4 570f0984d40SFabiano Rosas@strex_0 .... .... .... rn:4 rt:4 .... .... rd:4 \ 571f0984d40SFabiano Rosas &strex rt2=15 imm=0 572f0984d40SFabiano Rosas@strex_d .... .... .... rn:4 rt:4 rt2:4 .... rd:4 \ 573f0984d40SFabiano Rosas &strex imm=0 574f0984d40SFabiano Rosas 575f0984d40SFabiano Rosas@ldrex_i .... .... .... rn:4 rt:4 .... .... .... \ 576f0984d40SFabiano Rosas &ldrex rt2=15 imm=%imm8x4 577f0984d40SFabiano Rosas@ldrex_0 .... .... .... rn:4 rt:4 .... .... .... \ 578f0984d40SFabiano Rosas &ldrex rt2=15 imm=0 579f0984d40SFabiano Rosas@ldrex_d .... .... .... rn:4 rt:4 rt2:4 .... .... \ 580f0984d40SFabiano Rosas &ldrex imm=0 581f0984d40SFabiano Rosas 582f0984d40SFabiano Rosas{ 583f0984d40SFabiano Rosas TT 1110 1000 0100 rn:4 1111 rd:4 A:1 T:1 000000 584f0984d40SFabiano Rosas STREX 1110 1000 0100 .... .... .... .... .... @strex_i 585f0984d40SFabiano Rosas} 586f0984d40SFabiano RosasSTREXB 1110 1000 1100 .... .... 1111 0100 .... @strex_0 587f0984d40SFabiano RosasSTREXH 1110 1000 1100 .... .... 1111 0101 .... @strex_0 588f0984d40SFabiano RosasSTREXD_t32 1110 1000 1100 .... .... .... 0111 .... @strex_d 589f0984d40SFabiano Rosas 590f0984d40SFabiano RosasSTLEX 1110 1000 1100 .... .... 1111 1110 .... @strex_0 591f0984d40SFabiano RosasSTLEXB 1110 1000 1100 .... .... 1111 1100 .... @strex_0 592f0984d40SFabiano RosasSTLEXH 1110 1000 1100 .... .... 1111 1101 .... @strex_0 593f0984d40SFabiano RosasSTLEXD_t32 1110 1000 1100 .... .... .... 1111 .... @strex_d 594f0984d40SFabiano Rosas 595f0984d40SFabiano RosasSTL 1110 1000 1100 .... .... 1111 1010 1111 @ldrex_0 596f0984d40SFabiano RosasSTLB 1110 1000 1100 .... .... 1111 1000 1111 @ldrex_0 597f0984d40SFabiano RosasSTLH 1110 1000 1100 .... .... 1111 1001 1111 @ldrex_0 598f0984d40SFabiano Rosas 599f0984d40SFabiano RosasLDREX 1110 1000 0101 .... .... 1111 .... .... @ldrex_i 600f0984d40SFabiano RosasLDREXB 1110 1000 1101 .... .... 1111 0100 1111 @ldrex_0 601f0984d40SFabiano RosasLDREXH 1110 1000 1101 .... .... 1111 0101 1111 @ldrex_0 602f0984d40SFabiano RosasLDREXD_t32 1110 1000 1101 .... .... .... 0111 1111 @ldrex_d 603f0984d40SFabiano Rosas 604f0984d40SFabiano RosasLDAEX 1110 1000 1101 .... .... 1111 1110 1111 @ldrex_0 605f0984d40SFabiano RosasLDAEXB 1110 1000 1101 .... .... 1111 1100 1111 @ldrex_0 606f0984d40SFabiano RosasLDAEXH 1110 1000 1101 .... .... 1111 1101 1111 @ldrex_0 607f0984d40SFabiano RosasLDAEXD_t32 1110 1000 1101 .... .... .... 1111 1111 @ldrex_d 608f0984d40SFabiano Rosas 609f0984d40SFabiano RosasLDA 1110 1000 1101 .... .... 1111 1010 1111 @ldrex_0 610f0984d40SFabiano RosasLDAB 1110 1000 1101 .... .... 1111 1000 1111 @ldrex_0 611f0984d40SFabiano RosasLDAH 1110 1000 1101 .... .... 1111 1001 1111 @ldrex_0 612f0984d40SFabiano Rosas 613f0984d40SFabiano Rosas&tbranch rn rm 614f0984d40SFabiano Rosas@tbranch .... .... .... rn:4 .... .... .... rm:4 &tbranch 615f0984d40SFabiano Rosas 616f0984d40SFabiano RosasTBB 1110 1000 1101 .... 1111 0000 0000 .... @tbranch 617f0984d40SFabiano RosasTBH 1110 1000 1101 .... 1111 0000 0001 .... @tbranch 618f0984d40SFabiano Rosas 619f0984d40SFabiano Rosas# Parallel addition and subtraction 620f0984d40SFabiano Rosas 621f0984d40SFabiano RosasSADD8 1111 1010 1000 .... 1111 .... 0000 .... @rndm 622f0984d40SFabiano RosasQADD8 1111 1010 1000 .... 1111 .... 0001 .... @rndm 623f0984d40SFabiano RosasSHADD8 1111 1010 1000 .... 1111 .... 0010 .... @rndm 624f0984d40SFabiano RosasUADD8 1111 1010 1000 .... 1111 .... 0100 .... @rndm 625f0984d40SFabiano RosasUQADD8 1111 1010 1000 .... 1111 .... 0101 .... @rndm 626f0984d40SFabiano RosasUHADD8 1111 1010 1000 .... 1111 .... 0110 .... @rndm 627f0984d40SFabiano Rosas 628f0984d40SFabiano RosasSADD16 1111 1010 1001 .... 1111 .... 0000 .... @rndm 629f0984d40SFabiano RosasQADD16 1111 1010 1001 .... 1111 .... 0001 .... @rndm 630f0984d40SFabiano RosasSHADD16 1111 1010 1001 .... 1111 .... 0010 .... @rndm 631f0984d40SFabiano RosasUADD16 1111 1010 1001 .... 1111 .... 0100 .... @rndm 632f0984d40SFabiano RosasUQADD16 1111 1010 1001 .... 1111 .... 0101 .... @rndm 633f0984d40SFabiano RosasUHADD16 1111 1010 1001 .... 1111 .... 0110 .... @rndm 634f0984d40SFabiano Rosas 635f0984d40SFabiano RosasSASX 1111 1010 1010 .... 1111 .... 0000 .... @rndm 636f0984d40SFabiano RosasQASX 1111 1010 1010 .... 1111 .... 0001 .... @rndm 637f0984d40SFabiano RosasSHASX 1111 1010 1010 .... 1111 .... 0010 .... @rndm 638f0984d40SFabiano RosasUASX 1111 1010 1010 .... 1111 .... 0100 .... @rndm 639f0984d40SFabiano RosasUQASX 1111 1010 1010 .... 1111 .... 0101 .... @rndm 640f0984d40SFabiano RosasUHASX 1111 1010 1010 .... 1111 .... 0110 .... @rndm 641f0984d40SFabiano Rosas 642f0984d40SFabiano RosasSSUB8 1111 1010 1100 .... 1111 .... 0000 .... @rndm 643f0984d40SFabiano RosasQSUB8 1111 1010 1100 .... 1111 .... 0001 .... @rndm 644f0984d40SFabiano RosasSHSUB8 1111 1010 1100 .... 1111 .... 0010 .... @rndm 645f0984d40SFabiano RosasUSUB8 1111 1010 1100 .... 1111 .... 0100 .... @rndm 646f0984d40SFabiano RosasUQSUB8 1111 1010 1100 .... 1111 .... 0101 .... @rndm 647f0984d40SFabiano RosasUHSUB8 1111 1010 1100 .... 1111 .... 0110 .... @rndm 648f0984d40SFabiano Rosas 649f0984d40SFabiano RosasSSUB16 1111 1010 1101 .... 1111 .... 0000 .... @rndm 650f0984d40SFabiano RosasQSUB16 1111 1010 1101 .... 1111 .... 0001 .... @rndm 651f0984d40SFabiano RosasSHSUB16 1111 1010 1101 .... 1111 .... 0010 .... @rndm 652f0984d40SFabiano RosasUSUB16 1111 1010 1101 .... 1111 .... 0100 .... @rndm 653f0984d40SFabiano RosasUQSUB16 1111 1010 1101 .... 1111 .... 0101 .... @rndm 654f0984d40SFabiano RosasUHSUB16 1111 1010 1101 .... 1111 .... 0110 .... @rndm 655f0984d40SFabiano Rosas 656f0984d40SFabiano RosasSSAX 1111 1010 1110 .... 1111 .... 0000 .... @rndm 657f0984d40SFabiano RosasQSAX 1111 1010 1110 .... 1111 .... 0001 .... @rndm 658f0984d40SFabiano RosasSHSAX 1111 1010 1110 .... 1111 .... 0010 .... @rndm 659f0984d40SFabiano RosasUSAX 1111 1010 1110 .... 1111 .... 0100 .... @rndm 660f0984d40SFabiano RosasUQSAX 1111 1010 1110 .... 1111 .... 0101 .... @rndm 661f0984d40SFabiano RosasUHSAX 1111 1010 1110 .... 1111 .... 0110 .... @rndm 662f0984d40SFabiano Rosas 663f0984d40SFabiano Rosas# Register extends 664f0984d40SFabiano Rosas 665f0984d40SFabiano Rosas@rrr_rot .... .... .... rn:4 .... rd:4 .. rot:2 rm:4 &rrr_rot 666f0984d40SFabiano Rosas 667f0984d40SFabiano RosasSXTAH 1111 1010 0000 .... 1111 .... 10.. .... @rrr_rot 668f0984d40SFabiano RosasUXTAH 1111 1010 0001 .... 1111 .... 10.. .... @rrr_rot 669f0984d40SFabiano RosasSXTAB16 1111 1010 0010 .... 1111 .... 10.. .... @rrr_rot 670f0984d40SFabiano RosasUXTAB16 1111 1010 0011 .... 1111 .... 10.. .... @rrr_rot 671f0984d40SFabiano RosasSXTAB 1111 1010 0100 .... 1111 .... 10.. .... @rrr_rot 672f0984d40SFabiano RosasUXTAB 1111 1010 0101 .... 1111 .... 10.. .... @rrr_rot 673f0984d40SFabiano Rosas 674f0984d40SFabiano Rosas# Load/store multiple 675f0984d40SFabiano Rosas 676f0984d40SFabiano Rosas@ldstm .... .... .. w:1 . rn:4 list:16 &ldst_block u=0 677f0984d40SFabiano Rosas 678f0984d40SFabiano RosasSTM_t32 1110 1000 10.0 .... ................ @ldstm i=1 b=0 679f0984d40SFabiano RosasSTM_t32 1110 1001 00.0 .... ................ @ldstm i=0 b=1 680f0984d40SFabiano Rosas{ 681f0984d40SFabiano Rosas # Rn=15 UNDEFs for LDM; M-profile CLRM uses that encoding 682f0984d40SFabiano Rosas CLRM 1110 1000 1001 1111 list:16 683f0984d40SFabiano Rosas LDM_t32 1110 1000 10.1 .... ................ @ldstm i=1 b=0 684f0984d40SFabiano Rosas} 685f0984d40SFabiano RosasLDM_t32 1110 1001 00.1 .... ................ @ldstm i=0 b=1 686f0984d40SFabiano Rosas 687f0984d40SFabiano Rosas&rfe !extern rn w pu 688f0984d40SFabiano Rosas@rfe .... .... .. w:1 . rn:4 ................ &rfe 689f0984d40SFabiano Rosas 690f0984d40SFabiano RosasRFE 1110 1000 00.1 .... 1100000000000000 @rfe pu=2 691f0984d40SFabiano RosasRFE 1110 1001 10.1 .... 1100000000000000 @rfe pu=1 692f0984d40SFabiano Rosas 693f0984d40SFabiano Rosas&srs !extern mode w pu 694f0984d40SFabiano Rosas@srs .... .... .. w:1 . .... ........... mode:5 &srs 695f0984d40SFabiano Rosas 696f0984d40SFabiano RosasSRS 1110 1000 00.0 1101 1100 0000 000. .... @srs pu=2 697f0984d40SFabiano RosasSRS 1110 1001 10.0 1101 1100 0000 000. .... @srs pu=1 698f0984d40SFabiano Rosas 699f0984d40SFabiano Rosas# Coprocessor instructions 700f0984d40SFabiano Rosas 701f0984d40SFabiano Rosas# We decode MCR, MCR, MRRC and MCRR only, because for QEMU the 702f0984d40SFabiano Rosas# other coprocessor instructions always UNDEF. 703f0984d40SFabiano Rosas# The trans_ functions for these will ignore cp values 8..13 for v7 or 704f0984d40SFabiano Rosas# earlier, and 0..13 for v8 and later, because those areas of the 705f0984d40SFabiano Rosas# encoding space may be used for other things, such as VFP or Neon. 706f0984d40SFabiano Rosas 707f0984d40SFabiano Rosas@mcr .... .... opc1:3 . crn:4 rt:4 cp:4 opc2:3 . crm:4 708f0984d40SFabiano Rosas@mcrr .... .... .... rt2:4 rt:4 cp:4 opc1:4 crm:4 709f0984d40SFabiano Rosas 710f0984d40SFabiano RosasMCRR 1110 1100 0100 .... .... .... .... .... @mcrr 711f0984d40SFabiano RosasMRRC 1110 1100 0101 .... .... .... .... .... @mcrr 712f0984d40SFabiano Rosas 713f0984d40SFabiano RosasMCR 1110 1110 ... 0 .... .... .... ... 1 .... @mcr 714f0984d40SFabiano RosasMRC 1110 1110 ... 1 .... .... .... ... 1 .... @mcr 715f0984d40SFabiano Rosas 716f0984d40SFabiano Rosas# Branches 717f0984d40SFabiano Rosas 718f0984d40SFabiano Rosas%imm24 26:s1 13:1 11:1 16:10 0:11 !function=t32_branch24 719f0984d40SFabiano Rosas@branch24 ................................ &i imm=%imm24 720f0984d40SFabiano Rosas 721f0984d40SFabiano RosasB 1111 0. .......... 10.1 ............ @branch24 722f0984d40SFabiano RosasBL 1111 0. .......... 11.1 ............ @branch24 723f0984d40SFabiano Rosas{ 724f0984d40SFabiano Rosas # BLX_i is non-M-profile only 725f0984d40SFabiano Rosas BLX_i 1111 0. .......... 11.0 ............ @branch24 726f0984d40SFabiano Rosas # M-profile only: loop and branch insns 727f0984d40SFabiano Rosas [ 728f0984d40SFabiano Rosas # All these BF insns have boff != 0b0000; we NOP them all 729f0984d40SFabiano Rosas BF 1111 0 boff:4 ------- 1100 - ---------- 1 # BFL 730f0984d40SFabiano Rosas BF 1111 0 boff:4 0 ------ 1110 - ---------- 1 # BFCSEL 731f0984d40SFabiano Rosas BF 1111 0 boff:4 10 ----- 1110 - ---------- 1 # BF 732f0984d40SFabiano Rosas BF 1111 0 boff:4 11 ----- 1110 0 0000000000 1 # BFX, BFLX 733f0984d40SFabiano Rosas ] 734f0984d40SFabiano Rosas [ 735f0984d40SFabiano Rosas # LE and WLS immediate 736f0984d40SFabiano Rosas %lob_imm 1:10 11:1 !function=times_2 737f0984d40SFabiano Rosas 738f0984d40SFabiano Rosas DLS 1111 0 0000 100 rn:4 1110 0000 0000 0001 size=4 739f0984d40SFabiano Rosas WLS 1111 0 0000 100 rn:4 1100 . .......... 1 imm=%lob_imm size=4 740f0984d40SFabiano Rosas { 741f0984d40SFabiano Rosas LE 1111 0 0000 0 f:1 tp:1 1111 1100 . .......... 1 imm=%lob_imm 742f0984d40SFabiano Rosas # This is WLSTP 743f0984d40SFabiano Rosas WLS 1111 0 0000 0 size:2 rn:4 1100 . .......... 1 imm=%lob_imm 744f0984d40SFabiano Rosas } 745f0984d40SFabiano Rosas { 746f0984d40SFabiano Rosas LCTP 1111 0 0000 000 1111 1110 0000 0000 0001 747f0984d40SFabiano Rosas # This is DLSTP 748f0984d40SFabiano Rosas DLS 1111 0 0000 0 size:2 rn:4 1110 0000 0000 0001 749f0984d40SFabiano Rosas } 750f0984d40SFabiano Rosas VCTP 1111 0 0000 0 size:2 rn:4 1110 1000 0000 0001 751f0984d40SFabiano Rosas ] 752f0984d40SFabiano Rosas} 753