import gdb-19990504 snapshot
[deliverable/binutils-gdb.git] / gdb / config / m68k / tm-m68k.h
index 164ae959bac1a44dd0909323b573b0448620b81d..9cbb41f0801633a1a7d44950ddec90361abfd559 100644 (file)
@@ -15,7 +15,7 @@ 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., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 /* Generic 68000 stuff, to be included by other tm-*.h files.  */
 
@@ -33,9 +33,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
    to reach some "real" code.  */
 
 #if !defined(SKIP_PROLOGUE)
-#define SKIP_PROLOGUE(ip)   {(ip) = m68k_skip_prologue(ip);}
-extern CORE_ADDR m68k_skip_prologue PARAMS ((CORE_ADDR ip));
+#define SKIP_PROLOGUE(ip) (m68k_skip_prologue (ip))
 #endif
+extern CORE_ADDR m68k_skip_prologue PARAMS ((CORE_ADDR ip));
 
 /* Immediately after a function call, return the saved pc.
    Can't always go through the frames for this because on some machines
@@ -44,16 +44,22 @@ extern CORE_ADDR m68k_skip_prologue PARAMS ((CORE_ADDR ip));
 
 #ifdef __STDC__
 struct frame_info;
+struct frame_saved_regs;
 #endif
 
 extern CORE_ADDR m68k_saved_pc_after_call PARAMS ((struct frame_info *));
+extern void m68k_find_saved_regs PARAMS ((struct frame_info *, struct frame_saved_regs *));
 
 #define SAVED_PC_AFTER_CALL(frame) \
   m68k_saved_pc_after_call(frame)
 
 /* Stack grows downward.  */
 
-#define INNER_THAN <
+#define INNER_THAN(lhs,rhs) ((lhs) < (rhs))
+
+/* Stack must be kept short aligned when doing function calls.  */
+
+#define STACK_ALIGN(ADDR) (((ADDR) + 1) & ~1)
 
 /* Sequence of bytes for breakpoint instruction.
    This is a TRAP instruction.  The last 4 bits (0xf below) is the
@@ -85,12 +91,6 @@ extern CORE_ADDR m68k_saved_pc_after_call PARAMS ((struct frame_info *));
 #define DECR_PC_AFTER_BREAK 2
 #endif
 
-/* Nonzero if instruction at PC is a return instruction.  */
-/* Allow any of the return instructions, including a trapv and a return
-   from interupt.  */
-
-#define ABOUT_TO_RETURN(pc) ((read_memory_integer (pc, 2) & ~0x3) == 0x4e74)
-
 /* 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.  */
@@ -104,6 +104,8 @@ extern CORE_ADDR m68k_saved_pc_after_call PARAMS ((struct frame_info *));
 #define NUM_REGS 29
 #endif
 
+#define NUM_FREGS (NUM_REGS-24)
+
 #ifndef REGISTER_BYTES_OK
 #define REGISTER_BYTES_OK(b) \
    ((b) == REGISTER_BYTES_FP \
@@ -155,30 +157,36 @@ extern CORE_ADDR m68k_saved_pc_after_call PARAMS ((struct frame_info *));
    to virtual format with type TYPE in buffer TO.  */
 
 #define REGISTER_CONVERT_TO_VIRTUAL(REGNUM,TYPE,FROM,TO) \
-{ \
-  double val; \
-  floatformat_to_double (&floatformat_m68881_ext, (FROM), &val); \
-  store_floating ((TO), TYPE_LENGTH (TYPE), val); \
-}
+do                                                                     \
+  {                                                                    \
+    DOUBLEST dbl_tmp_val;                                                      \
+    floatformat_to_doublest (&floatformat_m68881_ext, (FROM), &dbl_tmp_val); \
+    store_floating ((TO), TYPE_LENGTH (TYPE), dbl_tmp_val);            \
+  } while (0)
 
 /* Convert data from virtual format with type TYPE in buffer FROM
    to raw format for register REGNUM in buffer TO.  */
 
 #define REGISTER_CONVERT_TO_RAW(TYPE,REGNUM,FROM,TO)   \
-{ \
-  double val = extract_floating ((FROM), TYPE_LENGTH (TYPE)); \
-  floatformat_from_double (&floatformat_m68881_ext, &val, (TO)); \
-}
-
-/* Return the GDB type object for the "standard" data type
-   of data in register N.  */
-/* Note, for registers which contain addresses return
-   pointer to void, not pointer to char, because we don't
-   want to attempt to print the string after printing the address.  */
+do                                                                     \
+  {                                                                    \
+    DOUBLEST dbl_tmp_val;                                              \
+    dbl_tmp_val = extract_floating ((FROM), TYPE_LENGTH (TYPE));       \
+    floatformat_from_doublest (&floatformat_m68881_ext, &dbl_tmp_val, (TO)); \
+  } while (0)
+
+/* Return the GDB type object for the "standard" data type of data 
+   in register N.  This should be int for D0-D7, double for FP0-FP7,
+   and void pointer for all others (A0-A7, PC, SR, FPCONTROL etc).
+   Note, for registers which contain addresses return pointer to void, 
+   not pointer to char, because we don't want to attempt to print 
+   the string after printing the address.  */
+
 #define REGISTER_VIRTUAL_TYPE(N) \
- (((unsigned)(N) - FP0_REGNUM) < 8 ? builtin_type_double :           \
-  (N) == PC_REGNUM || (N) == FP_REGNUM || (N) == SP_REGNUM ?         \
-  lookup_pointer_type (builtin_type_void) : builtin_type_int)
+  ((unsigned) (N) >= FPC_REGNUM ? lookup_pointer_type (builtin_type_void) : \
+   (unsigned) (N) >= FP0_REGNUM ? builtin_type_double :                     \
+   (unsigned) (N) >=  A0_REGNUM ? lookup_pointer_type (builtin_type_void) : \
+   builtin_type_int)
 
 /* Initializer for an array of names of registers.
    Entries beyond the first NUM_REGS are ignored.  */
@@ -197,6 +205,8 @@ extern CORE_ADDR m68k_saved_pc_after_call PARAMS ((struct frame_info *));
    to be actual register numbers as far as the user is concerned
    but do serve to get the desired values when passed to read_register.  */
 
+#define D0_REGNUM 0
+#define A0_REGNUM 8
 #define A1_REGNUM 9
 #define FP_REGNUM 14           /* Contains address of executing stack frame */
 #define SP_REGNUM 15           /* Contains address of top of stack */
@@ -379,3 +389,5 @@ extern void m68k_pop_frame PARAMS ((void));
 /* Offset from SP to first arg on stack at first instruction of a function */
 
 #define SP_ARG0 (1 * 4)
+
+#define TARGET_M68K
This page took 0.025297 seconds and 4 git commands to generate.