# AArch64 A64 allowed instruction decoding
#
#  Copyright (c) 2023 Linaro, Ltd
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, see <http://www.gnu.org/licenses/>.

#
# This file is processed by scripts/decodetree.py
#

&r               rn
&ri              rd imm
&rri_sf          rd rn imm sf
&i               imm


### Data Processing - Immediate

# PC-rel addressing

%imm_pcrel      5:s19 29:2
@pcrel          . .. ..... ................... rd:5     &ri imm=%imm_pcrel

ADR             0 .. 10000 ................... .....    @pcrel
ADRP            1 .. 10000 ................... .....    @pcrel

# Add/subtract (immediate)

%imm12_sh12     10:12 !function=shl_12
@addsub_imm     sf:1 .. ...... . imm:12 rn:5 rd:5
@addsub_imm12   sf:1 .. ...... . ............ rn:5 rd:5 imm=%imm12_sh12

ADD_i           . 00 100010 0 ............ ..... .....  @addsub_imm
ADD_i           . 00 100010 1 ............ ..... .....  @addsub_imm12
ADDS_i          . 01 100010 0 ............ ..... .....  @addsub_imm
ADDS_i          . 01 100010 1 ............ ..... .....  @addsub_imm12

SUB_i           . 10 100010 0 ............ ..... .....  @addsub_imm
SUB_i           . 10 100010 1 ............ ..... .....  @addsub_imm12
SUBS_i          . 11 100010 0 ............ ..... .....  @addsub_imm
SUBS_i          . 11 100010 1 ............ ..... .....  @addsub_imm12

# Add/subtract (immediate with tags)

&rri_tag        rd rn uimm6 uimm4
@addsub_imm_tag . .. ...... . uimm6:6 .. uimm4:4 rn:5 rd:5 &rri_tag

ADDG_i          1 00 100011 0 ...... 00 .... ..... ..... @addsub_imm_tag
SUBG_i          1 10 100011 0 ...... 00 .... ..... ..... @addsub_imm_tag

# Logical (immediate)

&rri_log        rd rn sf dbm
@logic_imm_64   1 .. ...... dbm:13 rn:5 rd:5            &rri_log sf=1
@logic_imm_32   0 .. ...... 0 dbm:12 rn:5 rd:5          &rri_log sf=0

AND_i           . 00 100100 . ...... ...... ..... ..... @logic_imm_64
AND_i           . 00 100100 . ...... ...... ..... ..... @logic_imm_32
ORR_i           . 01 100100 . ...... ...... ..... ..... @logic_imm_64
ORR_i           . 01 100100 . ...... ...... ..... ..... @logic_imm_32
EOR_i           . 10 100100 . ...... ...... ..... ..... @logic_imm_64
EOR_i           . 10 100100 . ...... ...... ..... ..... @logic_imm_32
ANDS_i          . 11 100100 . ...... ...... ..... ..... @logic_imm_64
ANDS_i          . 11 100100 . ...... ...... ..... ..... @logic_imm_32

# Move wide (immediate)

&movw           rd sf imm hw
@movw_64        1 .. ...... hw:2   imm:16 rd:5          &movw sf=1
@movw_32        0 .. ...... 0 hw:1 imm:16 rd:5          &movw sf=0

MOVN            . 00 100101 .. ................ .....   @movw_64
MOVN            . 00 100101 .. ................ .....   @movw_32
MOVZ            . 10 100101 .. ................ .....   @movw_64
MOVZ            . 10 100101 .. ................ .....   @movw_32
MOVK            . 11 100101 .. ................ .....   @movw_64
MOVK            . 11 100101 .. ................ .....   @movw_32

# Bitfield

&bitfield       rd rn sf immr imms
@bitfield_64    1 .. ...... 1 immr:6 imms:6 rn:5 rd:5      &bitfield sf=1
@bitfield_32    0 .. ...... 0 0 immr:5 0 imms:5 rn:5 rd:5  &bitfield sf=0

SBFM            . 00 100110 . ...... ...... ..... ..... @bitfield_64
SBFM            . 00 100110 . ...... ...... ..... ..... @bitfield_32
BFM             . 01 100110 . ...... ...... ..... ..... @bitfield_64
BFM             . 01 100110 . ...... ...... ..... ..... @bitfield_32
UBFM            . 10 100110 . ...... ...... ..... ..... @bitfield_64
UBFM            . 10 100110 . ...... ...... ..... ..... @bitfield_32

# Extract

&extract        rd rn rm imm sf

EXTR            1 00 100111 1 0 rm:5 imm:6 rn:5 rd:5     &extract sf=1
EXTR            0 00 100111 0 0 rm:5 0 imm:5 rn:5 rd:5   &extract sf=0

# Branches

%imm26   0:s26 !function=times_4
@branch         . ..... .......................... &i imm=%imm26

B               0 00101 .......................... @branch
BL              1 00101 .......................... @branch

%imm19   5:s19 !function=times_4
&cbz     rt imm sf nz

CBZ             sf:1 011010 nz:1 ................... rt:5 &cbz imm=%imm19

%imm14     5:s14 !function=times_4
%imm31_19  31:1 19:5
&tbz       rt imm nz bitpos

TBZ             . 011011 nz:1 ..... .............. rt:5 &tbz  imm=%imm14 bitpos=%imm31_19

B_cond          0101010 0 ................... 0 cond:4 imm=%imm19

BR              1101011 0000 11111 000000 rn:5 00000 &r
BLR             1101011 0001 11111 000000 rn:5 00000 &r
RET             1101011 0010 11111 000000 rn:5 00000 &r

&braz       rn m
BRAZ            1101011 0000 11111 00001 m:1 rn:5 11111 &braz   # BRAAZ, BRABZ
BLRAZ           1101011 0001 11111 00001 m:1 rn:5 11111 &braz   # BLRAAZ, BLRABZ

&reta       m
RETA            1101011 0010 11111 00001 m:1 11111 11111 &reta  # RETAA, RETAB

&bra        rn rm m
BRA             1101011 1000 11111 00001 m:1 rn:5 rm:5 &bra # BRAA, BRAB
BLRA            1101011 1001 11111 00001 m:1 rn:5 rm:5 &bra # BLRAA, BLRAB

ERET            1101011 0100 11111 000000 11111 00000
ERETA           1101011 0100 11111 00001 m:1 11111 11111 &reta  # ERETAA, ERETAB

# We don't need to decode DRPS because it always UNDEFs except when
# the processor is in halting debug state (which we don't implement).
# The pattern is listed here as documentation.
# DRPS            1101011 0101 11111 000000 11111 00000
