diff options
author | Jim Wilson <wilson@gcc.gnu.org> | 1997-04-24 14:10:56 -0700 |
---|---|---|
committer | Jim Wilson <wilson@gcc.gnu.org> | 1997-04-24 14:10:56 -0700 |
commit | 0be1f0e1cf198dec0d715d85997244e4bc19bae3 (patch) | |
tree | 0090818327448e8b1cf675407893d471b33f1d6f | |
parent | 1974bfb11f1d4a6326523185f9370b3b3a590f4e (diff) | |
download | gcc-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.h | 56 |
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, |