/* Parameters for execution on a Fujitsu FR30 processor.
   Copyright 1999, 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.  */

#define FR30_GENREGS		16
#define FR30_DEDICATEDREGS	8
#define FR30_REGSIZE		4	/* bytes */

#define NUM_REGS (FR30_GENREGS + FR30_DEDICATEDREGS)
#define REGISTER_BYTES ((FR30_GENREGS + FR30_DEDICATEDREGS)*FR30_REGSIZE)

/* Index within `registers' of the first byte of the space for
   register N.  */
#define REGISTER_BYTE(N) ((N) * FR30_REGSIZE)

/* Initializer for an array of names of registers.
   There should be NUM_REGS strings in this initializer.  */
#define REGISTER_NAMES \
{ "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", \
  "r9", "r10", "r11", "r12", "r13", "r14", "r15", \
  "pc", "ps", "tbr", "rp", "ssp", "usp", "mdh", "mdl" }

/* Offset from address of function to start of its code.
   Zero on most machines.  */
#define FUNCTION_START_OFFSET 0

/* Amount PC must be decremented by after a breakpoint.
   This is often the number of bytes in BREAKPOINT
   but not always.  */

#define DECR_PC_AFTER_BREAK 0

/* Stack grows downward.  */

#define INNER_THAN(lhs,rhs) ((lhs) < (rhs))

#define TARGET_BYTE_ORDER BIG_ENDIAN

#define R0_REGNUM  0
#define R1_REGNUM  1
#define R2_REGNUM  2
#define R3_REGNUM  3
#define R4_REGNUM  4
#define R5_REGNUM  5
#define R6_REGNUM  6
#define R7_REGNUM  7
#define R8_REGNUM  8
#define R9_REGNUM  9
#define R10_REGNUM  10
#define R11_REGNUM  11
#define R12_REGNUM  12
#define R13_REGNUM  13
#define FP_REGNUM 14		/* Frame pointer */
#define SP_REGNUM 15		/* Stack pointer */
#define PC_REGNUM 16		/* Program counter */
#define RP_REGNUM 19		/* Return pointer */

#define FIRST_ARGREG	R4_REGNUM	/* first arg (or struct ret val addr) */
#define LAST_ARGREG	R7_REGNUM	/* fourth (or third arg) */
#define RETVAL_REG	R4_REGNUM	/* return vaue */

/* Say how long (ordinary) registers are.  This is a piece of bogosity
   used in push_word and a few other places; REGISTER_RAW_SIZE is the
   real way to know how big a register is.  */
#define REGISTER_SIZE FR30_REGSIZE

/* Number of bytes of storage in the actual machine representation
   for register N.  */
#define REGISTER_RAW_SIZE(N) FR30_REGSIZE

/* Largest value REGISTER_RAW_SIZE can have.  */
#define MAX_REGISTER_RAW_SIZE FR30_REGSIZE

/* Number of bytes of storage in the program's representation
   for register N.  */
#define REGISTER_VIRTUAL_SIZE(N) REGISTER_RAW_SIZE(N)

/* Largest value REGISTER_VIRTUAL_SIZE can have.  */
#define MAX_REGISTER_VIRTUAL_SIZE FR30_REGSIZE

extern void fr30_pop_frame PARAMS ((void));
#define POP_FRAME fr30_pop_frame()

#define USE_GENERIC_DUMMY_FRAMES 1
#define CALL_DUMMY                   {0}
#define CALL_DUMMY_START_OFFSET      (0)
#define CALL_DUMMY_BREAKPOINT_OFFSET (0)
#define CALL_DUMMY_LOCATION          AT_ENTRY_POINT
#define FIX_CALL_DUMMY(DUMMY, START, FUNADDR, NARGS, ARGS, TYPE, GCCP)
#define CALL_DUMMY_ADDRESS()         entry_point_address ()
#define PUSH_RETURN_ADDRESS(PC, SP)  (write_register(RP_REGNUM, CALL_DUMMY_ADDRESS()), SP)
#define PUSH_DUMMY_FRAME	generic_push_dummy_frame ()

/* Number of bytes at start of arglist that are not really args.  */
#define FRAME_ARGS_SKIP 0

/* Return the GDB type object for the "standard" data type
   of data in register N.  */
#define REGISTER_VIRTUAL_TYPE(REG) builtin_type_int

/* Extract from an array REGBUF containing the (raw) register state
   a function return value of type TYPE, and copy that, in virtual format,
   into VALBUF.  */
#define EXTRACT_RETURN_VALUE(TYPE,REGBUF,VALBUF) \
    memcpy (VALBUF, REGBUF + REGISTER_BYTE(RETVAL_REG) +  \
	(TYPE_LENGTH(TYPE) < 4 ? 4 - TYPE_LENGTH(TYPE) : 0), TYPE_LENGTH (TYPE))

/* Extract from an array REGBUF containing the (raw) register state
   the address in which a function should return its structure value,
   as a CORE_ADDR (or an expression that can be used as one).  */
#define EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF) \
  extract_address (REGBUF + REGISTER_BYTE (RETVAL_REG), \
		   REGISTER_RAW_SIZE (RETVAL_REG))

#define STORE_STRUCT_RETURN(ADDR, SP) \
  { write_register (RETVAL_REG, (ADDR)); }

#define FRAME_ARGS_ADDRESS(fi) ((fi)->frame)
#define FRAME_LOCALS_ADDRESS(fi) ((fi)->frame)

/* Return number of args passed to a frame.
   Can return -1, meaning no way to tell.  */
#define FRAME_NUM_ARGS(fi) (-1)

/* Forward decls for prototypes */
struct frame_info;
struct frame_saved_regs;
struct type;
struct value;

#define EXTRA_FRAME_INFO \
  struct frame_saved_regs fsr;  \
  int framesize;		\
  int frameoffset;		\
  int framereg;

extern CORE_ADDR fr30_frame_chain PARAMS ((struct frame_info * fi));
#define FRAME_CHAIN(fi) fr30_frame_chain (fi)

extern CORE_ADDR fr30_frame_saved_pc PARAMS ((struct frame_info *));
#define FRAME_SAVED_PC(fi) (fr30_frame_saved_pc (fi))

#define SAVED_PC_AFTER_CALL(fi) read_register (RP_REGNUM)

extern CORE_ADDR fr30_skip_prologue PARAMS ((CORE_ADDR pc));
#define SKIP_PROLOGUE(pc) (fr30_skip_prologue (pc))

/* Write into appropriate registers a function return value of type
   TYPE, given in virtual format.  VALBUF is in the target byte order;
   it's typically the VALUE_CONTENTS of some struct value, and those
   are in the target's byte order.  */
extern void fr30_store_return_value PARAMS ((struct type * type, char *valbuf));

#define STORE_RETURN_VALUE(TYPE,VALBUF) \
  (fr30_store_return_value ((TYPE), (VALBUF)))

/* Put here the code to store, into a struct frame_saved_regs,
   the addresses of the saved registers of frame described by FRAME_INFO.
   This includes special registers such as pc and fp saved in special
   ways in the stack frame.  sp is even more special:
   the address we return for it IS the sp for the next frame.  */
#define FRAME_FIND_SAVED_REGS(fi, regaddr) regaddr = fi->fsr

/* Use INT #BREAKPOINT_INTNUM instruction for breakpoint */
#define FR30_BREAKOP	0x1f	/* opcode, type D instruction */
#define BREAKPOINT_INTNUM 9	/* one of the reserved traps */
#define BREAKPOINT {FR30_BREAKOP, BREAKPOINT_INTNUM}

/* Define this for Wingdb */
#define TARGET_FR30

/* IEEE format floating point */
#define IEEE_FLOAT

/* Define other aspects of the stack frame.  */

/* An expression that tells us whether the function invocation represented
   by FI does not have a frame on the stack associated with it.  */
extern int fr30_frameless_function_invocation PARAMS ((struct frame_info * frame));
#define FRAMELESS_FUNCTION_INVOCATION(FI) (fr30_frameless_function_invocation (FI));

extern void fr30_init_extra_frame_info PARAMS ((struct frame_info * fi));
#define INIT_EXTRA_FRAME_INFO(fromleaf, fi) fr30_init_extra_frame_info (fi)

#define FRAME_CHAIN_VALID(FP, FI)	generic_file_frame_chain_valid (FP, FI)

extern CORE_ADDR
  fr30_push_arguments PARAMS ((int nargs, struct value ** args, CORE_ADDR sp,
			       int struct_return,
			       CORE_ADDR struct_addr));
#define PUSH_ARGUMENTS(NARGS, ARGS, SP, STRUCT_RETURN, STRUCT_ADDR) \
  (fr30_push_arguments (NARGS, ARGS, SP, STRUCT_RETURN, STRUCT_ADDR))

#define PC_IN_CALL_DUMMY(PC, SP, FP) generic_pc_in_call_dummy (PC, SP, FP)

/* Fujitsu's ABI requires all structs to be passed using a pointer.
   That is obviously not very efficient, so I am leaving the definitions
   to make gdb work with GCC style struct passing, in case we decide
   to go for better performance, rather than for compatibility with
   Fujitsu (just change STRUCT_ALWAYS_BY_ADDR to 0) */

#define STRUCT_ALWAYS_BY_ADDR	1

#if(STRUCT_ALWAYS_BY_ADDR)
#define REG_STRUCT_HAS_ADDR(gcc_p,type)		1
#else
/* more standard GCC (optimized) */
#define REG_STRUCT_HAS_ADDR(gcc_p,type)		\
		((TYPE_LENGTH(type) > 4) && (TYPE_LENGTH(type) & 0x3))
#endif
/* alway return struct by value by input pointer */
#define USE_STRUCT_CONVENTION(GCC_P, TYPE)	1

/* The stack should always be aligned on a four-word boundary.  */
#define STACK_ALIGN(len) (((len) + 3) & ~3)

/* I think the comment about this in value_arg_coerce is wrong; this
   should be true on any system where you can rely on the prototyping
   information.  When this is true, value_arg_coerce will promote
   floats to doubles iff the function is not prototyped.  */
#define COERCE_FLOAT_TO_DOUBLE 1
