diff options
Diffstat (limited to 'newlib/libc/machine/h8300/setjmp.S')
-rw-r--r-- | newlib/libc/machine/h8300/setjmp.S | 54 |
1 files changed, 29 insertions, 25 deletions
diff --git a/newlib/libc/machine/h8300/setjmp.S b/newlib/libc/machine/h8300/setjmp.S index cb79e49b3..9e7164095 100644 --- a/newlib/libc/machine/h8300/setjmp.S +++ b/newlib/libc/machine/h8300/setjmp.S @@ -1,26 +1,32 @@ -#include "setarch.h" - .file "setjmp.S" +#ifdef __H8300H__ + .h8300h +#endif + +#ifdef __H8300S__ + .h8300s +#endif + .section .text .align 2 .global _setjmp _setjmp: -#if defined(__H8300SX__) - mov.l er7,@er0+ - mov.l er6,@er0+ - mov.l er5,@er0+ - mov.l er4,@er0+ - mov.l @sp,@er0 - sub.l er0,er0 -#elif defined(__H8300H__) || defined(__H8300S__) +#ifdef __H8300H__ + mov.l er7,@er0 + mov.l er6,@(4,er0) + mov.l er5,@(8,er0) + mov.l er4,@(12,er0) + mov.l @sp,er1 + mov.l er1,@(16,er0) +#else +#ifdef __H8300S__ mov.l er7,@er0 mov.l er6,@(4,er0) mov.l er5,@(8,er0) mov.l er4,@(12,er0) mov.l @sp,er1 mov.l er1,@(16,er0) - sub.l er0,er0 #else mov.w r7,@r0 mov.w r6,@(2,r0) @@ -28,31 +34,28 @@ _setjmp: mov.w r4,@(6,r0) mov.w @sp,r1 mov.w r1,@(8,r0) - sub.w r0,r0 #endif +#endif + sub.w r0,r0 rts .global _longjmp _longjmp: -#if defined(__H8300H__) || defined (__H8300S__) || defined (__H8300SX__) +#ifdef __H8300H__ mov.l @er0+,er7 mov.l @er0+,er6 mov.l @er0+,er5 mov.l @er0+,er4 -#if defined(__H8300SX__) - mov.l @er0,@sp -#else mov.l @er0,er2 mov.l er2,@sp -#endif -#if (__INT_MAX__ <= 32767) - mov.w r1,r0 #else - mov.l er1,er0 -#endif - bne .L1 - sub er0,er0 - adds #1,er0 +#ifdef __H8300S__ + mov.l @er0+,er7 + mov.l @er0+,er6 + mov.l @er0+,er5 + mov.l @er0+,er4 + mov.l @er0,er2 + mov.l er2,@sp #else mov.w @r0+,r7 mov.w @r0+,r6 @@ -60,9 +63,10 @@ _longjmp: mov.w @r0+,r4 mov.w @r0,r2 mov.w r2,@sp +#endif +#endif mov.w r1,r0 bne .L1 mov.w #1,r0 -#endif .L1: rts |