# A32 unconditional instructions
#
#  Copyright (c) 2019 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 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
#
# All insns that have 0xf in insn[31:28] are decoded here.
# All of those that have a COND field in insn[31:28] are in a32.decode
#

&empty           !extern
&i               !extern imm
&setend          E

# Branch with Link and Exchange

%imm24h          0:s24 24:1 !function=times_2

BLX_i            1111 101 . ........................          &i imm=%imm24h

# System Instructions

&rfe             rn w pu
&srs             mode w pu
&cps             mode imod M A I F

RFE              1111 100 pu:2 0 w:1 1 rn:4 0000 1010 0000 0000   &rfe
SRS              1111 100 pu:2 1 w:1 0 1101 0000 0101 000 mode:5  &srs
CPS              1111 0001 0000 imod:2 M:1 0 0000 000 A:1 I:1 F:1 0 mode:5 \
                 &cps

# Clear-Exclusive, Barriers

# QEMU does not require the option field for the barriers.
CLREX            1111 0101 0111 1111 1111 0000 0001 1111
DSB              1111 0101 0111 1111 1111 0000 0100 ----
DMB              1111 0101 0111 1111 1111 0000 0101 ----
ISB              1111 0101 0111 1111 1111 0000 0110 ----
SB               1111 0101 0111 1111 1111 0000 0111 0000

# Set Endianness
SETEND           1111 0001 0000 0001 0000 00 E:1 0 0000 0000  &setend

# Preload instructions

PLD              1111 0101 -101 ---- 1111 ---- ---- ----    # (imm, lit) 5te
PLDW             1111 0101 -001 ---- 1111 ---- ---- ----    # (imm, lit) 7mp
PLI              1111 0100 -101 ---- 1111 ---- ---- ----    # (imm, lit) 7

PLD              1111 0111 -101 ---- 1111 ----- -- 0 ----   # (register) 5te
PLDW             1111 0111 -001 ---- 1111 ----- -- 0 ----   # (register) 7mp
PLI              1111 0110 -101 ---- 1111 ----- -- 0 ----   # (register) 7

# Unallocated memory hints
#
# Since these are v7MP nops, and PLDW is v7MP and implemented as nop,
# (ab)use the PLDW helper.

PLDW             1111 0100 -001 ---- ---- ---- ---- ----
PLDW             1111 0110 -001 ---- ---- ---- ---0 ----
