xref: /openbmc/qemu/target/arm/tcg/a64.decode (revision 6201b2a4)
18058c831SPeter Maydell# AArch64 A64 allowed instruction decoding
28058c831SPeter Maydell#
38058c831SPeter Maydell#  Copyright (c) 2023 Linaro, Ltd
48058c831SPeter Maydell#
58058c831SPeter Maydell# This library is free software; you can redistribute it and/or
68058c831SPeter Maydell# modify it under the terms of the GNU Lesser General Public
78058c831SPeter Maydell# License as published by the Free Software Foundation; either
88058c831SPeter Maydell# version 2.1 of the License, or (at your option) any later version.
98058c831SPeter Maydell#
108058c831SPeter Maydell# This library is distributed in the hope that it will be useful,
118058c831SPeter Maydell# but WITHOUT ANY WARRANTY; without even the implied warranty of
128058c831SPeter Maydell# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
138058c831SPeter Maydell# Lesser General Public License for more details.
148058c831SPeter Maydell#
158058c831SPeter Maydell# You should have received a copy of the GNU Lesser General Public
168058c831SPeter Maydell# License along with this library; if not, see <http://www.gnu.org/licenses/>.
178058c831SPeter Maydell
188058c831SPeter Maydell#
198058c831SPeter Maydell# This file is processed by scripts/decodetree.py
208058c831SPeter Maydell#
2145fda88eSRichard Henderson
2245fda88eSRichard Henderson&ri              rd imm
233ce7b5eaSRichard Henderson&rri_sf          rd rn imm sf
24*6201b2a4SPeter Maydell&i               imm
2545fda88eSRichard Henderson
2645fda88eSRichard Henderson
2745fda88eSRichard Henderson### Data Processing - Immediate
2845fda88eSRichard Henderson
2945fda88eSRichard Henderson# PC-rel addressing
3045fda88eSRichard Henderson
3145fda88eSRichard Henderson%imm_pcrel      5:s19 29:2
3245fda88eSRichard Henderson@pcrel          . .. ..... ................... rd:5     &ri imm=%imm_pcrel
3345fda88eSRichard Henderson
3445fda88eSRichard HendersonADR             0 .. 10000 ................... .....    @pcrel
3545fda88eSRichard HendersonADRP            1 .. 10000 ................... .....    @pcrel
363ce7b5eaSRichard Henderson
373ce7b5eaSRichard Henderson# Add/subtract (immediate)
383ce7b5eaSRichard Henderson
393ce7b5eaSRichard Henderson%imm12_sh12     10:12 !function=shl_12
403ce7b5eaSRichard Henderson@addsub_imm     sf:1 .. ...... . imm:12 rn:5 rd:5
413ce7b5eaSRichard Henderson@addsub_imm12   sf:1 .. ...... . ............ rn:5 rd:5 imm=%imm12_sh12
423ce7b5eaSRichard Henderson
433ce7b5eaSRichard HendersonADD_i           . 00 100010 0 ............ ..... .....  @addsub_imm
443ce7b5eaSRichard HendersonADD_i           . 00 100010 1 ............ ..... .....  @addsub_imm12
453ce7b5eaSRichard HendersonADDS_i          . 01 100010 0 ............ ..... .....  @addsub_imm
463ce7b5eaSRichard HendersonADDS_i          . 01 100010 1 ............ ..... .....  @addsub_imm12
473ce7b5eaSRichard Henderson
483ce7b5eaSRichard HendersonSUB_i           . 10 100010 0 ............ ..... .....  @addsub_imm
493ce7b5eaSRichard HendersonSUB_i           . 10 100010 1 ............ ..... .....  @addsub_imm12
503ce7b5eaSRichard HendersonSUBS_i          . 11 100010 0 ............ ..... .....  @addsub_imm
513ce7b5eaSRichard HendersonSUBS_i          . 11 100010 1 ............ ..... .....  @addsub_imm12
5286002eccSRichard Henderson
5386002eccSRichard Henderson# Add/subtract (immediate with tags)
5486002eccSRichard Henderson
5586002eccSRichard Henderson&rri_tag        rd rn uimm6 uimm4
5686002eccSRichard Henderson@addsub_imm_tag . .. ...... . uimm6:6 .. uimm4:4 rn:5 rd:5 &rri_tag
5786002eccSRichard Henderson
5886002eccSRichard HendersonADDG_i          1 00 100011 0 ...... 00 .... ..... ..... @addsub_imm_tag
5986002eccSRichard HendersonSUBG_i          1 10 100011 0 ...... 00 .... ..... ..... @addsub_imm_tag
608127f46aSRichard Henderson
618127f46aSRichard Henderson# Logical (immediate)
628127f46aSRichard Henderson
638127f46aSRichard Henderson&rri_log        rd rn sf dbm
648127f46aSRichard Henderson@logic_imm_64   1 .. ...... dbm:13 rn:5 rd:5            &rri_log sf=1
658127f46aSRichard Henderson@logic_imm_32   0 .. ...... 0 dbm:12 rn:5 rd:5          &rri_log sf=0
668127f46aSRichard Henderson
678127f46aSRichard HendersonAND_i           . 00 100100 . ...... ...... ..... ..... @logic_imm_64
688127f46aSRichard HendersonAND_i           . 00 100100 . ...... ...... ..... ..... @logic_imm_32
698127f46aSRichard HendersonORR_i           . 01 100100 . ...... ...... ..... ..... @logic_imm_64
708127f46aSRichard HendersonORR_i           . 01 100100 . ...... ...... ..... ..... @logic_imm_32
718127f46aSRichard HendersonEOR_i           . 10 100100 . ...... ...... ..... ..... @logic_imm_64
728127f46aSRichard HendersonEOR_i           . 10 100100 . ...... ...... ..... ..... @logic_imm_32
738127f46aSRichard HendersonANDS_i          . 11 100100 . ...... ...... ..... ..... @logic_imm_64
748127f46aSRichard HendersonANDS_i          . 11 100100 . ...... ...... ..... ..... @logic_imm_32
75ee0daeb9SRichard Henderson
76ee0daeb9SRichard Henderson# Move wide (immediate)
77ee0daeb9SRichard Henderson
78ee0daeb9SRichard Henderson&movw           rd sf imm hw
79ee0daeb9SRichard Henderson@movw_64        1 .. ...... hw:2   imm:16 rd:5          &movw sf=1
80ee0daeb9SRichard Henderson@movw_32        0 .. ...... 0 hw:1 imm:16 rd:5          &movw sf=0
81ee0daeb9SRichard Henderson
82ee0daeb9SRichard HendersonMOVN            . 00 100101 .. ................ .....   @movw_64
83ee0daeb9SRichard HendersonMOVN            . 00 100101 .. ................ .....   @movw_32
84ee0daeb9SRichard HendersonMOVZ            . 10 100101 .. ................ .....   @movw_64
85ee0daeb9SRichard HendersonMOVZ            . 10 100101 .. ................ .....   @movw_32
86ee0daeb9SRichard HendersonMOVK            . 11 100101 .. ................ .....   @movw_64
87ee0daeb9SRichard HendersonMOVK            . 11 100101 .. ................ .....   @movw_32
885e451ae6SRichard Henderson
895e451ae6SRichard Henderson# Bitfield
905e451ae6SRichard Henderson
915e451ae6SRichard Henderson&bitfield       rd rn sf immr imms
925e451ae6SRichard Henderson@bitfield_64    1 .. ...... 1 immr:6 imms:6 rn:5 rd:5      &bitfield sf=1
935e451ae6SRichard Henderson@bitfield_32    0 .. ...... 0 0 immr:5 0 imms:5 rn:5 rd:5  &bitfield sf=0
945e451ae6SRichard Henderson
955e451ae6SRichard HendersonSBFM            . 00 100110 . ...... ...... ..... ..... @bitfield_64
965e451ae6SRichard HendersonSBFM            . 00 100110 . ...... ...... ..... ..... @bitfield_32
975e451ae6SRichard HendersonBFM             . 01 100110 . ...... ...... ..... ..... @bitfield_64
985e451ae6SRichard HendersonBFM             . 01 100110 . ...... ...... ..... ..... @bitfield_32
995e451ae6SRichard HendersonUBFM            . 10 100110 . ...... ...... ..... ..... @bitfield_64
1005e451ae6SRichard HendersonUBFM            . 10 100110 . ...... ...... ..... ..... @bitfield_32
1014240fb61SPeter Maydell
1024240fb61SPeter Maydell# Extract
1034240fb61SPeter Maydell
1044240fb61SPeter Maydell&extract        rd rn rm imm sf
1054240fb61SPeter Maydell
1064240fb61SPeter MaydellEXTR            1 00 100111 1 0 rm:5 imm:6 rn:5 rd:5     &extract sf=1
1074240fb61SPeter MaydellEXTR            0 00 100111 0 0 rm:5 0 imm:5 rn:5 rd:5   &extract sf=0
108*6201b2a4SPeter Maydell
109*6201b2a4SPeter Maydell# Branches
110*6201b2a4SPeter Maydell
111*6201b2a4SPeter Maydell%imm26   0:s26 !function=times_4
112*6201b2a4SPeter Maydell@branch         . ..... .......................... &i imm=%imm26
113*6201b2a4SPeter Maydell
114*6201b2a4SPeter MaydellB               0 00101 .......................... @branch
115*6201b2a4SPeter MaydellBL              1 00101 .......................... @branch
116