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

   Copyright (C) 2006, 2007, 2008, 2009, 2010 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 */
