/* Target-dependent code for the S+core architecture, for GDB,
   the GNU Debugger.

   Copyright (C) 2006-2012 Free Software Foundation, Inc.

   Contributed by Qinwei (qinwei@sunnorth.com.cn)
   Contributed by Ching-Peng Lin (cplin@sunplus.com)

   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 SCORE_TDEP_H
#define SCORE_TDEP_H
#include "math.h"

enum gdb_regnum
{
  SCORE_SP_REGNUM = 0,
  SCORE_FP_REGNUM = 2,
  SCORE_RA_REGNUM = 3,
  SCORE_A0_REGNUM = 4,
  SCORE_AL_REGNUM = 7,
  SCORE_PC_REGNUM = 49,
};

#define SCORE_A0_REGNUM        4
#define SCORE_A1_REGNUM        5
#define SCORE_REGSIZE          4
#define SCORE7_NUM_REGS         56
#define SCORE3_NUM_REGS         50
#define SCORE_BEGIN_ARG_REGNUM 4
#define SCORE_LAST_ARG_REGNUM  7

#define SCORE_INSTLEN          4
#define SCORE16_INSTLEN        2

/* Forward declarations.  */
struct regset;

/* Target-dependent structure in gdbarch */
struct gdbarch_tdep
{
    /* Cached core file helpers.  */
    struct regset *gregset;
};

/* Linux Core file support (dirty hack)
  
   S+core Linux register set definition, copy from S+core Linux.  */
struct pt_regs {
    /* Pad bytes for argument save space on the stack.  */
    unsigned long pad0[6]; /* may be 4, MIPS accept 6var, SCore
			      accepts 4 Var--yuchen */

    /* Saved main processor registers.  */
    unsigned long orig_r4;
    unsigned long regs[32];

    /* Other saved registers.  */
    unsigned long cel;
    unsigned long ceh;

    unsigned long sr0;  /*cnt*/
    unsigned long sr1;  /*lcr*/
    unsigned long sr2;  /*scr*/

    /* saved cp0 registers */
    unsigned long cp0_epc;
    unsigned long cp0_ema;
    unsigned long cp0_psr;
    unsigned long cp0_ecr;
    unsigned long cp0_condition;
};

typedef struct pt_regs elf_gregset_t;

#endif /* SCORE_TDEP_H */
