diff options
author | Alexandre Oliva <aoliva@redhat.com> | 2002-02-08 07:11:13 +0000 |
---|---|---|
committer | Alexandre Oliva <aoliva@redhat.com> | 2002-02-08 07:11:13 +0000 |
commit | 9f25eed9c96cb37ee58fcb65aafb44f9c6183dde (patch) | |
tree | 883185ab319291de419f4bba42754e7a71b23560 /newlib/libc/machine/sh/setjmp.S | |
parent | 561486e7f1220b06414524d9b72eca3794a45dd3 (diff) | |
download | cygnal-9f25eed9c96cb37ee58fcb65aafb44f9c6183dde.tar.gz cygnal-9f25eed9c96cb37ee58fcb65aafb44f9c6183dde.tar.bz2 cygnal-9f25eed9c96cb37ee58fcb65aafb44f9c6183dde.zip |
Contribute sh64-elf.
2001-03-13 Alexandre Oliva <aoliva@redhat.com>
* configure.host (newlib_cflags) [sh*-*-*]: Enable long long
support in printf.
2001-01-29 Alexandre Oliva <aoliva@redhat.com>
* libc/machine/sh/setjmp.S [SH5]: Switch to SHmedia mode before
any labels.
2001-01-24 Alexandre Oliva <aoliva@redhat.com>
* libc/sys/sh/trap.S (___trap34) [SH5]: Don't trash r2.
2000-12-16 Alexandre Oliva <aoliva@redhat.com>
* libc/machine/sh/configure.in: Rework conditionals.
* libc/machine/sh/Makefile.am: Likewise.
* libc/machine/sh/configure, libc/machine/sh/Makefile.in: Rebuilt.
2000-12-01 Alexandre Oliva <aoliva@redhat.com>
* configure.host: Match `sh*'.
* libc/include/machine/setjmp.h: Define for SH5.
* libc/machine/sh/configure.in: Detect SH5.
* libc/machine/sh/configure: Rebuilt.
* libc/machine/sh/Makefile.am: Use only setjmp.S for SH5.
* libc/machine/sh/Makefile.in: Rebuilt.
* libc/machine/sh/asm.h: Adjust for SH5.
* libc/machine/sh/setjmp.S: Implement in SHmedia.
* libc/sys/sh/crt0.S: Likewise.
* libc/sys/sh/trap.S: Likewise.
Diffstat (limited to 'newlib/libc/machine/sh/setjmp.S')
-rw-r--r-- | newlib/libc/machine/sh/setjmp.S | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/newlib/libc/machine/sh/setjmp.S b/newlib/libc/machine/sh/setjmp.S index 363e8f23b..9508496f1 100644 --- a/newlib/libc/machine/sh/setjmp.S +++ b/newlib/libc/machine/sh/setjmp.S @@ -1,6 +1,77 @@ +/* We want to pretend we're in SHmedia mode, even when assembling for + SHcompact. */ +#if __SH5__ == 32 && ! __SHMEDIA__ +# undef __SHMEDIA__ +# define __SHMEDIA__ 1 +#endif + +#if __SHMEDIA__ + .mode SHmedia +#endif + #include "asm.h" ENTRY(setjmp) +#if __SH5__ + ptabs r18, tr0 + gettr tr5, r5 + gettr tr6, r6 + gettr tr7, r7 + st.q r2, 0*8, r18 + st.q r2, 1*8, r10 + st.q r2, 2*8, r11 + st.q r2, 3*8, r12 + st.q r2, 4*8, r13 + st.q r2, 5*8, r14 + st.q r2, 6*8, r15 + st.q r2, 7*8, r28 + st.q r2, 8*8, r29 + st.q r2, 9*8, r30 + st.q r2, 10*8, r31 + st.q r2, 11*8, r32 + st.q r2, 12*8, r33 + st.q r2, 13*8, r34 + st.q r2, 14*8, r35 + st.q r2, 15*8, r44 + st.q r2, 16*8, r45 + st.q r2, 17*8, r46 + st.q r2, 18*8, r47 + st.q r2, 19*8, r48 + st.q r2, 20*8, r49 + st.q r2, 21*8, r50 + st.q r2, 22*8, r51 + st.q r2, 23*8, r52 + st.q r2, 24*8, r53 + st.q r2, 25*8, r54 + st.q r2, 26*8, r55 + st.q r2, 27*8, r56 + st.q r2, 28*8, r57 + st.q r2, 29*8, r58 + st.q r2, 30*8, r59 + st.q r2, 31*8, r5 + st.q r2, 32*8, r6 + st.q r2, 33*8, r7 +#if ! __SH4_NOFPU__ + fst.d r2, 34*8, dr12 + fst.d r2, 35*8, dr14 + fst.d r2, 36*8, dr36 + fst.d r2, 37*8, dr38 + fst.d r2, 38*8, dr40 + fst.d r2, 39*8, dr42 + fst.d r2, 40*8, dr44 + fst.d r2, 41*8, dr46 + fst.d r2, 42*8, dr48 + fst.d r2, 43*8, dr50 + fst.d r2, 44*8, dr52 + fst.d r2, 45*8, dr54 + fst.d r2, 46*8, dr56 + fst.d r2, 47*8, dr58 + fst.d r2, 48*8, dr60 + fst.d r2, 49*8, dr62 +#endif + movi 0, r2 + blink tr0, r63 +#else #if defined (__SH3E__) || defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY__) add #(13*4),r4 #else @@ -28,8 +99,70 @@ ENTRY(setjmp) rts mov #0,r0 +#endif /* __SH5__ */ ENTRY(longjmp) +#if __SH5__ + ld.q r2, 0*8, r18 + ptabs r18, tr0 + ld.q r2, 1*8, r10 + ld.q r2, 2*8, r11 + ld.q r2, 3*8, r12 + ld.q r2, 4*8, r13 + ld.q r2, 5*8, r14 + ld.q r2, 6*8, r15 + ld.q r2, 7*8, r28 + ld.q r2, 8*8, r29 + ld.q r2, 9*8, r30 + ld.q r2, 10*8, r31 + ld.q r2, 11*8, r32 + ld.q r2, 12*8, r33 + ld.q r2, 13*8, r34 + ld.q r2, 14*8, r35 + ld.q r2, 15*8, r44 + ld.q r2, 16*8, r45 + ld.q r2, 17*8, r46 + ld.q r2, 18*8, r47 + ld.q r2, 19*8, r48 + ld.q r2, 20*8, r49 + ld.q r2, 21*8, r50 + ld.q r2, 22*8, r51 + ld.q r2, 23*8, r52 + ld.q r2, 24*8, r53 + ld.q r2, 25*8, r54 + ld.q r2, 26*8, r55 + ld.q r2, 27*8, r56 + ld.q r2, 28*8, r57 + ld.q r2, 29*8, r58 + ld.q r2, 30*8, r59 + ld.q r2, 31*8, r5 + ld.q r2, 32*8, r6 + ld.q r2, 33*8, r7 + ptabs r5, tr5 + ptabs r6, tr6 + ptabs r7, tr7 +#if ! __SH4_NOFPU__ + fld.d r2, 34*8, dr12 + fld.d r2, 35*8, dr14 + fld.d r2, 36*8, dr36 + fld.d r2, 37*8, dr38 + fld.d r2, 38*8, dr40 + fld.d r2, 39*8, dr42 + fld.d r2, 40*8, dr44 + fld.d r2, 41*8, dr46 + fld.d r2, 42*8, dr48 + fld.d r2, 43*8, dr50 + fld.d r2, 44*8, dr52 + fld.d r2, 45*8, dr54 + fld.d r2, 46*8, dr56 + fld.d r2, 47*8, dr58 + fld.d r2, 48*8, dr60 + fld.d r2, 49*8, dr62 +#endif + movi 1, r2 + cmvne r3, r3, r2 + blink tr0, r63 +#else mov.l @r4+,r8 mov.l @r4+,r9 mov.l @r4+,r10 @@ -55,3 +188,4 @@ ENTRY(longjmp) movt r0 retr4: rts nop +#endif /* __SH5__ */ |