/* C-SKY assembler/disassembler support.
   Copyright (C) 2004-2021 Free Software Foundation, Inc.
   Contributed by C-SKY Microsystems and Mentor Graphics.

   This file is part of GDB and GAS.

   GDB and GAS are free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
   published by the Free Software Foundation; either version 3, or (at
   your option) any later version.

   GDB and GAS are 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
   General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with GDB or GAS; see the file COPYING3.  If not, write to the
   Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
   MA 02110-1301, USA.  */

#include "dis-asm.h"

/* The following bitmasks control instruction set architecture.  */
#define CSKYV1_ISA_E1       ((bfd_uint64_t)1 << 0)
#define CSKYV2_ISA_E1       ((bfd_uint64_t)1 << 1)
#define CSKYV2_ISA_1E2      ((bfd_uint64_t)1 << 2)
#define CSKYV2_ISA_2E3      ((bfd_uint64_t)1 << 3)
#define CSKYV2_ISA_3E7      ((bfd_uint64_t)1 << 4)
#define CSKYV2_ISA_7E10     ((bfd_uint64_t)1 << 5)
#define CSKYV2_ISA_3E3R1    ((bfd_uint64_t)1 << 6)
#define CSKYV2_ISA_3E3R2    ((bfd_uint64_t)1 << 7)
#define CSKYV2_ISA_10E60    ((bfd_uint64_t)1 << 8)
#define CSKYV2_ISA_3E3R3    ((bfd_uint64_t)1 << 9)

#define CSKY_ISA_TRUST      ((bfd_uint64_t)1 << 11)
#define CSKY_ISA_CACHE      ((bfd_uint64_t)1 << 12)
#define CSKY_ISA_NVIC       ((bfd_uint64_t)1 << 13)
#define CSKY_ISA_CP         ((bfd_uint64_t)1 << 14)
#define CSKY_ISA_MP         ((bfd_uint64_t)1 << 15)
#define CSKY_ISA_MP_1E2     ((bfd_uint64_t)1 << 16)
#define CSKY_ISA_JAVA       ((bfd_uint64_t)1 << 17)
#define CSKY_ISA_MAC        ((bfd_uint64_t)1 << 18)
#define CSKY_ISA_MAC_DSP    ((bfd_uint64_t)1 << 19)

/* Base ISA for csky v1 and v2.  */
#define CSKY_ISA_DSP        ((bfd_uint64_t)1 << 20)
#define CSKY_ISA_DSP_1E2    ((bfd_uint64_t)1 << 21)
#define CSKY_ISA_DSP_ENHANCE ((bfd_uint64_t)1 << 22)
#define CSKY_ISA_DSPE60     ((bfd_uint64_t)1 << 23)

/* Base float instruction (803f & 810f).  */
#define CSKY_ISA_FLOAT_E1   ((bfd_uint64_t)1 << 25)
/* M_FLOAT support (810f).  */
#define CSKY_ISA_FLOAT_1E2  ((bfd_uint64_t)1 << 26)
/* 803 support (803f).  */
#define CSKY_ISA_FLOAT_1E3  ((bfd_uint64_t)1 << 27)
/* 807 support (803f & 807f).  */
#define CSKY_ISA_FLOAT_3E4  ((bfd_uint64_t)1 << 28)
/* 860 support.  */
#define CSKY_ISA_FLOAT_7E60 ((bfd_uint64_t)1 << 36)
/* Vector DSP support.  */
#define CSKY_ISA_VDSP       ((bfd_uint64_t)1 << 29)
#define CSKY_ISA_VDSP_2     ((bfd_uint64_t)1 << 30)

/* The following bitmasks control cpu architecture for CSKY.  */
#define CSKY_ABI_V1         (1 << 28)
#define CSKY_ABI_V2         (2 << 28)
#define CSKY_ARCH_MASK      0x0000001F
#define CSKY_ABI_MASK       0xF0000000

#define CSKY_ARCH_510       0x1
#define CSKY_ARCH_610       0x2
#define CSKY_ARCH_801       0xa
#define CSKY_ARCH_802       0x10
#define CSKY_ARCH_803       0x9
/* 804  use the same arch flag as 803 yet.  */
#define CSKY_ARCH_804       0x9
#define CSKY_ARCH_805       0x11
#define CSKY_ARCH_807       0x6
#define CSKY_ARCH_810       0x8
#define CSKY_ARCH_860       0xb
/* 800 is a special arch supporting all instructions for ABIV2.  */
#define CSKY_ARCH_800       0x1f

#define CSKY_ARCH_MAC       (1 << 15)
#define CSKY_ARCH_DSP       (1 << 14)
#define CSKY_ARCH_FLOAT     (1 << 13)
#define CSKY_ARCH_SIMD      (1 << 12)
#define CSKY_ARCH_CP        (1 << 11)
#define CSKY_ARCH_MP        (1 << 10)
#define CSKY_ARCH_CACHE     (1 << 9)
#define CSKY_ARCH_JAVA      (1 << 8)
#define CSKY_ARCH_APS       (1 << 7)

/* eflag's Versions.  */
#define CSKY_VERSION_V1     (1 << 24)
#define CSKY_VERSION_V2     (2 << 24)
#define CSKY_VERSION_V3     (3 << 24)

#define IS_CSKY_V1(a) \
  (((a) & CSKY_ABI_MASK) == CSKY_ABI_V1)
#define IS_CSKY_V2(a) \
  (((a) & CSKY_ABI_MASK) == CSKY_ABI_V2)
#define IS_CSKY_ARCH_V1(a) \
  (((a) & CSKY_ARCH_MASK) == CSKY_ARCH_510				\
   || ((a) & CSKY_ARCH_MASK) == CSKY_ARCH_610)
#define IS_CSKY_ARCH_V2(a)  \
  (!(IS_CSKY_ARCH_V1 (a)))

#define IS_CSKY_ARCH_510(a)	(((a) & CSKY_ARCH_MASK) == CSKY_ARCH_510)
#define IS_CSKY_ARCH_610(a)	(((a) & CSKY_ARCH_MASK) == CSKY_ARCH_610)
#define IS_CSKY_ARCH_801(a)	(((a) & CSKY_ARCH_MASK) == CSKY_ARCH_801)
#define IS_CSKY_ARCH_802(a)	(((a) & CSKY_ARCH_MASK) == CSKY_ARCH_802)
#define IS_CSKY_ARCH_803(a)	(((a) & CSKY_ARCH_MASK) == CSKY_ARCH_803)
#define IS_CSKY_ARCH_807(a)	(((a) & CSKY_ARCH_MASK) == CSKY_ARCH_807)
#define IS_CSKY_ARCH_810(a)	(((a) & CSKY_ARCH_MASK) == CSKY_ARCH_810)

#define CPU_ARCH_MASK \
  (CSKY_ARCH_JAVA | CSKY_ARCH_FLOAT | CSKY_ARCH_DSP | CSKY_ARCH_MASK)

#ifdef __cplusplus
extern "C" {
#endif
extern int print_insn_csky (bfd_vma memaddr, struct disassemble_info *info);
#ifdef __cplusplus
}
#endif
