]> gcc.gnu.org Git - gcc.git/blobdiff - gcc/config/m68k/m68k.h
(MACHINE_STATE_SAVE, MACHINE_STATE_RESTORE): Test
[gcc.git] / gcc / config / m68k / m68k.h
index 7481dc7660812031f68e5930a3e99647c2a46818..07ce8724209c01990bc6cadcaa6e5875210d4c67 100644 (file)
@@ -172,6 +172,8 @@ extern int target_flags;
     { "68302", - (MASK_5200|MASK_68060|MASK_68040|MASK_68020|MASK_BITFIELD)}, \
     { "68332", - (MASK_5200|MASK_68060|MASK_68040|MASK_BITFIELD)},     \
     { "68332", MASK_68020},                                            \
+    { "cpu32", - (MASK_5200|MASK_68060|MASK_68040|MASK_BITFIELD)},     \
+    { "cpu32", MASK_68020},                                            \
     { "align-int", MASK_ALIGN_INT },                                   \
     { "no-align-int", -MASK_ALIGN_INT },                               \
     SUBTARGET_SWITCHES                                                 \
@@ -834,8 +836,9 @@ extern enum reg_class regno_reg_class[];
 
 /* If we generate an insn to push BYTES bytes,
    this says how many the stack pointer really advances by.
-   On the 68000, sp@- in a byte insn really pushes a word.  */
-#define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1)
+   On the 68000, sp@- in a byte insn really pushes a word.
+   On the 5200 (coldfire), sp@- in a byte insn pushes just a byte.  */
+#define PUSH_ROUNDING(BYTES) (TARGET_5200 ? BYTES : ((BYTES) + 1) & ~1)
 
 /* Offset of first parameter from the argument pointer register value.  */
 #define FIRST_PARM_OFFSET(FNDECL) 8
@@ -1017,69 +1020,102 @@ while(0)
 #define FUNCTION_BLOCK_PROFILER_EXIT(FILE)             \
   asm_fprintf (FILE, "\tjsr %U__bb_trace_ret\n");
 
-/* Save all registers which may be clobbered by a function call. */
+/* Save all registers which may be clobbered by a function call.
+   MACHINE_STATE_SAVE and MACHINE_STATE_RESTORE are target-code macros,
+   used in libgcc2.c.  They may not refer to TARGET_* macros !!! */
+#if defined (__mc68010__) || defined(mc68010) \
+       || defined(__mc68020__) || defined(mc68020) \
+       || defined(__mc68030__) || defined(mc68030) \
+       || defined(__mc68040__) || defined(mc68040) \
+       || defined(__mc68332__) || defined(mc68332)
+#define MACHINE_STATE_m68010_up
+#endif
 
 #ifdef MOTOROLA
+#if defined(__mcf5200__)
 #define MACHINE_STATE_SAVE(id)         \
-  if (TARGET_5200)                     \
     {                                  \
       asm ("sub.l 20,%sp");            \
       asm ("movm.l &0x0303,4(%sp)");   \
       asm ("move.w %ccr,%d0");         \
       asm ("movm.l &0x0001,(%sp)");    \
-    }                                  \
-  else                                 \
+    }
+#else /* !__mcf5200__ */
+#if defined(MACHINE_STATE_m68010_up)
+#define MACHINE_STATE_SAVE(id)         \
     {                                  \
       asm ("move.w %ccr,-(%sp)");      \
       asm ("movm.l &0xc0c0,-(%sp)");   \
     }
-#else
+#else /* !MACHINE_STATE_m68010_up */
+#define MACHINE_STATE_SAVE(id)         \
+    {                                  \
+      asm ("move.w %sr,-(%sp)");       \
+      asm ("movm.l &0xc0c0,-(%sp)");   \
+    }
+#endif /* MACHINE_STATE_m68010_up */
+#endif /* __mcf5200__ */
+#else /* !MOTOROLA */
+#if defined(__mcf5200__)
 #define MACHINE_STATE_SAVE(id)         \
-  if (TARGET_5200)                     \
     {                                  \
       asm ("subl 20,sp");              \
       asm ("movml d0/d1/a0/a1,sp@(4)");        \
       asm ("movew cc,d0");             \
       asm ("movml d0,sp@");            \
-    }                                  \
-  else                                 \
+    }
+#else /* !__mcf5200__ */
+#if defined(MACHINE_STATE_m68010_up)
+#define MACHINE_STATE_SAVE(id)         \
     {                                  \
       asm ("movew cc,sp@-");           \
       asm ("moveml d0/d1/a0/a1,sp@-"); \
     }
-#endif
+#else /* !MACHINE_STATE_m68010_up */
+#define MACHINE_STATE_SAVE(id)         \
+    {                                  \
+      asm ("movew sr,sp@-");           \
+      asm ("moveml d0/d1/a0/a1,sp@-"); \
+    }
+#endif /* MACHINE_STATE_m68010_up */
+#endif /* __mcf5200__ */
+#endif /* MOTOROLA */
 
 /* Restore all registers saved by MACHINE_STATE_SAVE. */
 
 #ifdef MOTOROLA
+#if defined(__mcf5200__)
 #define MACHINE_STATE_RESTORE(id)      \
-  if (TARGET_5200)                     \
     {                                  \
       asm ("movm.l (%sp),&0x0001");    \
       asm ("move.w %d0,%ccr");         \
       asm ("movm.l 4(%sp),&0x0303");   \
       asm ("add.l 20,%sp");            \
-    }                                  \
-  else                                 \
+    }
+#else /* !__mcf5200__ */
+#define MACHINE_STATE_RESTORE(id)      \
     {                                  \
       asm ("movm.l (%sp)+,&0x0303");   \
       asm ("move.w (%sp)+,%ccr");      \
     }
-#else
+#endif /* __mcf5200__ */
+#else /* !MOTOROLA */
+#if defined(__mcf5200__)
 #define MACHINE_STATE_RESTORE(id)      \
-  if (TARGET_5200)                     \
     {                                  \
       asm ("movml sp@,d0");            \
       asm ("movew d0,cc");             \
       asm ("movml sp@(4),d0/d1/a0/a1");        \
       asm ("addl 20,sp");              \
-    }                                  \
-  else                                 \
+    }
+#else /* !__mcf5200__ */
+#define MACHINE_STATE_RESTORE(id)      \
     {                                  \
       asm ("moveml sp@+,d0/d1/a0/a1"); \
       asm ("movew sp@+,cc");           \
     }
-#endif
+#endif /* __mcf5200__ */
+#endif /* MOTOROLA */
 
 /* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
    the stack pointer does not matter.  The value is tested only in
This page took 0.03348 seconds and 5 git commands to generate.