/* Target-dependent code for the NDS32 architecture, for GDB.

   Copyright (C) 2013-2021 Free Software Foundation, Inc.
   Contributed by Andes Technology Corporation.

   This file is part of GDB.

   This program is 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 of the License, or
   (at your option) any later version.

   This program 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 General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */

#ifndef NDS32_TDEP_H
#define NDS32_TDEP_H

enum nds32_regnum
{
  /* General purpose registers.  */
  NDS32_R0_REGNUM = 0,
  NDS32_R5_REGNUM = 5,
  NDS32_TA_REGNUM = 15,		/* Temporary register.  */
  NDS32_FP_REGNUM = 28,		/* Frame pointer.  */
  NDS32_GP_REGNUM = 29,		/* Global pointer.  */
  NDS32_LP_REGNUM = 30,		/* Link pointer.  */
  NDS32_SP_REGNUM = 31,		/* Stack pointer.  */

  NDS32_PC_REGNUM = 32,		/* Program counter.  */

  NDS32_NUM_REGS,

  /* The first double precision floating-point register.  */
  NDS32_FD0_REGNUM = NDS32_NUM_REGS,
};

struct gdbarch_tdep
{
  /* The guessed FPU configuration.  */
  int fpu_freg;
  /* FSRs are defined as pseudo registers.  */
  int use_pseudo_fsrs;
  /* Cached regnum of the first FSR (FS0).  */
  int fs0_regnum;
  /* ELF ABI info.  */
  int elf_abi;
};
#endif /* NDS32_TDEP_H */
