diff options
Diffstat (limited to 'newlib/libc/machine/h8300/setjmp.S')
-rw-r--r-- | newlib/libc/machine/h8300/setjmp.S | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/newlib/libc/machine/h8300/setjmp.S b/newlib/libc/machine/h8300/setjmp.S new file mode 100644 index 0000000..9e71640 --- /dev/null +++ b/newlib/libc/machine/h8300/setjmp.S @@ -0,0 +1,72 @@ + .file "setjmp.S" + +#ifdef __H8300H__ + .h8300h +#endif + +#ifdef __H8300S__ + .h8300s +#endif + + .section .text + .align 2 + .global _setjmp +_setjmp: +#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) +#else + mov.w r7,@r0 + mov.w r6,@(2,r0) + mov.w r5,@(4,r0) + mov.w r4,@(6,r0) + mov.w @sp,r1 + mov.w r1,@(8,r0) +#endif +#endif + sub.w r0,r0 + rts + + .global _longjmp +_longjmp: +#ifdef __H8300H__ + 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 +#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 + mov.w @r0+,r5 + mov.w @r0+,r4 + mov.w @r0,r2 + mov.w r2,@sp +#endif +#endif + mov.w r1,r0 + bne .L1 + mov.w #1,r0 +.L1: + rts |