aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Wilson <wilson@gcc.gnu.org>1997-04-24 14:10:56 -0700
committerJim Wilson <wilson@gcc.gnu.org>1997-04-24 14:10:56 -0700
commit0be1f0e1cf198dec0d715d85997244e4bc19bae3 (patch)
tree0090818327448e8b1cf675407893d471b33f1d6f
parent1974bfb11f1d4a6326523185f9370b3b3a590f4e (diff)
downloadgcc-0be1f0e1cf198dec0d715d85997244e4bc19bae3.zip
gcc-0be1f0e1cf198dec0d715d85997244e4bc19bae3.tar.gz
gcc-0be1f0e1cf198dec0d715d85997244e4bc19bae3.tar.bz2
(MACHINE_STATE_SAVE, MACHINE_STATE_RESTORE): Add
TARGET_5200 support. From-SVN: r13978
-rw-r--r--gcc/config/m68k/m68k.h56
1 files changed, 48 insertions, 8 deletions
diff --git a/gcc/config/m68k/m68k.h b/gcc/config/m68k/m68k.h
index ba728bc..c538db4 100644
--- a/gcc/config/m68k/m68k.h
+++ b/gcc/config/m68k/m68k.h
@@ -988,24 +988,64 @@ while(0)
#ifdef MOTOROLA
#define MACHINE_STATE_SAVE(id) \
- asm ("move.w %ccr,-(%sp)"); \
- asm ("movm.l &0xc0c0,-(%sp)");
+ 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 \
+ { \
+ asm ("move.w %ccr,-(%sp)"); \
+ asm ("movm.l &0xc0c0,-(%sp)"); \
+ }
#else
#define MACHINE_STATE_SAVE(id) \
- asm ("movew cc,sp@-"); \
- asm ("moveml d0/d1/a0/a1,sp@-");
+ if (TARGET_5200) \
+ { \
+ asm ("subl 20,sp"); \
+ asm ("movml d0/d1/a0/a1,sp@(4)"); \
+ asm ("movew cc,d0"); \
+ asm ("movml d0,sp@"); \
+ } \
+ else \
+ { \
+ asm ("movew cc,sp@-"); \
+ asm ("moveml d0/d1/a0/a1,sp@-"); \
+ }
#endif
/* Restore all registers saved by MACHINE_STATE_SAVE. */
#ifdef MOTOROLA
#define MACHINE_STATE_RESTORE(id) \
- asm ("movm.l (%sp)+,&0x0303"); \
- asm ("move.w (%sp)+,%ccr");
+ 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 \
+ { \
+ asm ("movm.l (%sp)+,&0x0303"); \
+ asm ("move.w (%sp)+,%ccr"); \
+ }
#else
#define MACHINE_STATE_RESTORE(id) \
- asm ("moveml sp@+,d0/d1/a0/a1"); \
- asm ("movew sp@+,cc");
+ if (TARGET_5200) \
+ { \
+ asm ("movml sp@,d0"); \
+ asm ("movew d0,cc"); \
+ asm ("movml sp@(4),d0/d1/a0/a1"); \
+ asm ("addl 20,sp"); \
+ } \
+ else \
+ { \
+ asm ("moveml sp@+,d0/d1/a0/a1"); \
+ asm ("movew sp@+,cc"); \
+ }
#endif
/* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,