/* Target-specific definition for a Hitachi Super-H.
   Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
   Free Software Foundation, Inc.

   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 2 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, write to the Free Software
   Foundation, Inc., 59 Temple Place - Suite 330,
   Boston, MA 02111-1307, USA.  */

#ifndef SH_TDEP_H
#define SH_TDEP_H

/* Contributed by Steve Chamberlain sac@cygnus.com */

/* Information that is dependent on the processor variant. */

enum sh_abi
  {
    SH_ABI_UNKNOWN,
    SH_ABI_32,
    SH_ABI_64
  };

struct gdbarch_tdep
  {
    int PR_REGNUM;
    int FPUL_REGNUM;  /*                       sh3e, sh4 */
    int FPSCR_REGNUM; /*                       sh3e, sh4 */
    int SR_REGNUM;    /* sh-dsp, sh3, sh3-dsp, sh3e, sh4 */
    int DSR_REGNUM;   /* sh-dsp,      sh3-dsp            */
    int FP_LAST_REGNUM; /*                     sh3e, sh4 */
    int A0G_REGNUM;   /* sh-dsp,      sh3-dsp            */
    int A0_REGNUM;    /* sh-dsp,      sh3-dsp            */
    int A1G_REGNUM;   /* sh-dsp,      sh3-dsp            */
    int A1_REGNUM;    /* sh-dsp,      sh3-dsp            */
    int M0_REGNUM;    /* sh-dsp,      sh3-dsp            */
    int M1_REGNUM;    /* sh-dsp,      sh3-dsp            */
    int X0_REGNUM;    /* sh-dsp,      sh3-dsp            */
    int X1_REGNUM;    /* sh-dsp,      sh3-dsp            */
    int Y0_REGNUM;    /* sh-dsp,      sh3-dsp            */
    int Y1_REGNUM;    /* sh-dsp,      sh3-dsp            */
    int MOD_REGNUM;   /* sh-dsp,      sh3-dsp            */
    int SSR_REGNUM;   /*         sh3, sh3-dsp, sh3e, sh4 */
    int SPC_REGNUM;   /*         sh3, sh3-dsp, sh3e, sh4 */
    int RS_REGNUM;    /* sh-dsp,      sh3-dsp            */
    int RE_REGNUM;    /* sh-dsp,      sh3-dsp            */
    int DR0_REGNUM;   /*                             sh4 */
    int DR_LAST_REGNUM; /*                           sh4 */
    int FV0_REGNUM;   /*                             sh4 */
    int FV_LAST_REGNUM; /*                           sh4 */
    /* FPP stands for Floating Point Pair, to avoid confusion with
       GDB's FP0_REGNUM, which is the number of the first Floating
       point register. Unfortunately on the sh5, the floating point
       registers are called FR, and the floating point pairs are called FP. */
    int TR7_REGNUM;       /*                            sh5-media*/
    int FPP0_REGNUM;      /*                            sh5-media*/
    int FPP_LAST_REGNUM;  /*                            sh5-media*/
    int R0_C_REGNUM;      /*                            sh5-compact*/
    int R_LAST_C_REGNUM;  /*                            sh5-compact*/
    int PC_C_REGNUM;      /*                            sh5-compact*/
    int GBR_C_REGNUM;     /*                            sh5-compact*/
    int MACH_C_REGNUM;    /*                            sh5-compact*/
    int MACL_C_REGNUM;    /*                            sh5-compact*/
    int PR_C_REGNUM;      /*                            sh5-compact*/
    int T_C_REGNUM;       /*                            sh5-compact*/
    int FPSCR_C_REGNUM;   /*                            sh5-compact*/
    int FPUL_C_REGNUM;    /*                            sh5-compact*/
    int FP0_C_REGNUM;     /*                            sh5-compact*/
    int FP_LAST_C_REGNUM; /*                            sh5-compact*/
    int DR0_C_REGNUM;     /*                            sh5-compact*/
    int DR_LAST_C_REGNUM; /*                            sh5-compact*/
    int FV0_C_REGNUM;     /*                            sh5-compact*/
    int FV_LAST_C_REGNUM; /*                            sh5-compact*/
    int ARG0_REGNUM;
    int ARGLAST_REGNUM;
    int FLOAT_ARGLAST_REGNUM;
    int RETURN_REGNUM;
    enum sh_abi sh_abi;
  };

/* Registers common to all the SH variants. */
enum
  {
    R0_REGNUM = 0,
    STRUCT_RETURN_REGNUM = 2,
    ARG0_REGNUM = 4, /* Used in h8300-tdep.c */
    ARGLAST_REGNUM = 7, /* Used in h8300-tdep.c */
    PR_REGNUM = 17, /* used in sh3-rom.c */
    GBR_REGNUM = 18,
    VBR_REGNUM = 19,
    MACH_REGNUM = 20,
    MACL_REGNUM = 21,
    SR_REGNUM = 22
  };

#endif /* SH_TDEP_H */
