# M-profile UserFault.NOCP exception handling
#
#  Copyright (c) 2020 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
#
# For M-profile, the architecture specifies that NOCP UsageFaults
# should take precedence over UNDEF faults over the whole wide
# range of coprocessor-space encodings, with the exception of
# VLLDM and VLSTM. (Compare v8.1M IsCPInstruction() pseudocode and
# v8M Arm ARM rule R_QLGM.) This isn't mandatory for v8.0M but we choose
# to behave the same as v8.1M.
# This decode is handled before any others (and in particular before
# decoding FP instructions which are in the coprocessor space).
# If the coprocessor is not present or disabled then we will generate
# the NOCP exception; otherwise we let the insn through to the main decode.

%vd_dp  22:1 12:4
%vd_sp  12:4 22:1

&nocp cp

# M-profile VLDR/VSTR to sysreg
%vldr_sysreg 22:1 13:3
%imm7_0x4 0:7 !function=times_4

&vldr_sysreg rn reg imm a w p
@vldr_sysreg .... ... . a:1 . . . rn:4 ... . ... .. ....... \
             reg=%vldr_sysreg imm=%imm7_0x4 &vldr_sysreg

{
  # Special cases which do not take an early NOCP: VLLDM and VLSTM
  VLLDM_VLSTM  1110 1100 001 l:1 rn:4 0000 1010 op:1 000 0000
  # VSCCLRM (new in v8.1M) is similar:
  VSCCLRM      1110 1100 1.01 1111 .... 1011 imm:7 0   vd=%vd_dp size=3
  VSCCLRM      1110 1100 1.01 1111 .... 1010 imm:8     vd=%vd_sp size=2

  # FP system register accesses: these are a special case because accesses
  # to FPCXT_NS succeed even if the FPU is disabled. We therefore need
  # to handle them before the big NOCP blocks. Note that within these
  # insns NOCP still has higher priority than UNDEFs; this is implemented
  # by their returning 'false' for UNDEF so as to fall through into the
  # NOCP check (in contrast to VLLDM etc, which call unallocated_encoding()
  # for the UNDEFs there that must take precedence over NOCP.)

  VMSR_VMRS    ---- 1110 111 l:1 reg:4 rt:4 1010 0001 0000

  # P=0 W=0 is SEE "Related encodings", so split into two patterns
  VLDR_sysreg  ---- 110 1 . . w:1 1 .... ... 0 111 11 ....... @vldr_sysreg p=1
  VLDR_sysreg  ---- 110 0 . . 1   1 .... ... 0 111 11 ....... @vldr_sysreg p=0 w=1
  VSTR_sysreg  ---- 110 1 . . w:1 0 .... ... 0 111 11 ....... @vldr_sysreg p=1
  VSTR_sysreg  ---- 110 0 . . 1   0 .... ... 0 111 11 ....... @vldr_sysreg p=0 w=1

  NOCP         111- 1110 ---- ---- ---- cp:4 ---- ---- &nocp
  NOCP         111- 110- ---- ---- ---- cp:4 ---- ---- &nocp
  # From v8.1M onwards this range will also NOCP:
  NOCP_8_1     111- 1111 ---- ---- ---- ---- ---- ---- &nocp cp=10
}
