* config/tc-alpha.c (O_samegp): New.
[external/binutils.git] / gdb / config / fr30 / tm-fr30.h
index ea32792..22ddd04 100644 (file)
@@ -1,20 +1,24 @@
 /* Parameters for execution on a Fujitsu FR30 processor.
+   Copyright 1999, 2000 Free Software Foundation, Inc.
 
-This file is part of GDB.
+   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 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.
+   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.  */
+   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.  */
+
+#include "regcache.h"
 
 #define FR30_GENREGS           16
 #define FR30_DEDICATEDREGS     8
@@ -48,8 +52,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #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
@@ -83,7 +85,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #define REGISTER_RAW_SIZE(N) FR30_REGSIZE
 
 /* Largest value REGISTER_RAW_SIZE can have.  */
-#define MAX_REGISTER_RAW_SIZE FR30_REGSIZE 
+#define MAX_REGISTER_RAW_SIZE FR30_REGSIZE
 
 /* Number of bytes of storage in the program's representation
    for register N.  */
@@ -92,10 +94,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 /* Largest value REGISTER_VIRTUAL_SIZE can have.  */
 #define MAX_REGISTER_VIRTUAL_SIZE FR30_REGSIZE
 
-extern void fr30_pop_frame PARAMS ((void));
+extern void fr30_pop_frame (void);
 #define POP_FRAME fr30_pop_frame()
 
-#define USE_GENERIC_DUMMY_FRAMES
+#define USE_GENERIC_DUMMY_FRAMES 1
 #define CALL_DUMMY                   {0}
 #define CALL_DUMMY_START_OFFSET      (0)
 #define CALL_DUMMY_BREAKPOINT_OFFSET (0)
@@ -129,19 +131,18 @@ extern void fr30_pop_frame PARAMS ((void));
 #define STORE_STRUCT_RETURN(ADDR, SP) \
   { write_register (RETVAL_REG, (ADDR)); }
 
-#define FRAME_ARGS_ADDRESS(fi) (fi->frame)
+#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(numargs, fi) (numargs = -1)
+#define FRAME_NUM_ARGS(fi) (-1)
 
-#ifdef __STDC__                /* Forward decls for prototypes */
+/* Forward decls for prototypes */
 struct frame_info;
 struct frame_saved_regs;
 struct type;
 struct value;
-#endif
 
 #define EXTRA_FRAME_INFO \
   struct frame_saved_regs fsr;  \
@@ -149,22 +150,25 @@ struct value;
   int frameoffset;             \
   int framereg;
 
-extern CORE_ADDR fr30_frame_chain PARAMS ((struct frame_info *fi));
+extern CORE_ADDR fr30_frame_chain (struct frame_info *fi);
 #define FRAME_CHAIN(fi) fr30_frame_chain (fi)
 
-extern CORE_ADDR fr30_frame_saved_pc   PARAMS ((struct frame_info *));
+extern CORE_ADDR fr30_frame_saved_pc (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) pc = fr30_skip_prologue (pc)
+extern CORE_ADDR fr30_skip_prologue (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.  */
+/* 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 (struct type *type, char *valbuf);
 
 #define STORE_RETURN_VALUE(TYPE,VALBUF) \
-    write_register_bytes (0, VALBUF, TYPE_LENGTH (TYPE))
+  (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.
@@ -181,37 +185,25 @@ extern CORE_ADDR fr30_skip_prologue PARAMS ((CORE_ADDR pc));
 /* Define this for Wingdb */
 #define TARGET_FR30
 
-/* IEEE format floating point */
-#define IEEE_FLOAT
-
 /* Define other aspects of the stack frame.  */
 
-/* A macro that tells us whether the function invocation represented
-   by FI does not have a frame on the stack associated with it.  If it
-   does not, FRAMELESS is set to 1, else 0.  */
-#define FRAMELESS_FUNCTION_INVOCATION(FI, FRAMELESS) \
-{                                                      \
-  CORE_ADDR func_start, after_prologue;                        \
-  func_start = (get_pc_function_start ((FI)->pc) +     \
-               FUNCTION_START_OFFSET);                 \
-  after_prologue = func_start;                         \
-  SKIP_PROLOGUE (after_prologue);                      \
-  (FRAMELESS) = (after_prologue == func_start);                \
-}
-
-extern void fr30_init_extra_frame_info PARAMS ((struct frame_info *fi));
+/* 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 (struct frame_info *frame);
+#define FRAMELESS_FUNCTION_INVOCATION(FI) (fr30_frameless_function_invocation (FI));
+
+extern void fr30_init_extra_frame_info (struct frame_info *fi);
 #define INIT_EXTRA_FRAME_INFO(fromleaf, fi) fr30_init_extra_frame_info (fi)
 
-#define FRAME_CHAIN_VALID(FP, FI)      generic_frame_chain_valid (FP, 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));
+fr30_push_arguments (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) \
-  (SP) = fr30_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)
+#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
@@ -230,3 +222,12 @@ fr30_push_arguments PARAMS ((int nargs, struct value **args, CORE_ADDR sp,
 #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(formal, actual) (1)