2013-11-26 Matheus Almeida <Matheus.Almeida@imgtec.com>
* libc/include/machine/setjmp.h: Add support for __mips_fpr being 64 and treat it the same as if __mips64 is set. * libc/machine/mips/setjmp.S: Ditto, plus add checks for _MIPS_SIM being _ABIN32 and _ABI64.
This commit is contained in:
parent
a50f8f5973
commit
a00d2722b6
@ -1,3 +1,10 @@
|
|||||||
|
2013-11-26 Matheus Almeida <Matheus.Almeida@imgtec.com>
|
||||||
|
|
||||||
|
* libc/include/machine/setjmp.h: Add support for __mips_fpr being
|
||||||
|
64 and treat it the same as if __mips64 is set.
|
||||||
|
* libc/machine/mips/setjmp.S: Ditto, plus add checks for _MIPS_SIM
|
||||||
|
being _ABIN32 and _ABI64.
|
||||||
|
|
||||||
2013-11-26 Joel Sherrill <joel.sherrill@oarcorp.com>
|
2013-11-26 Joel Sherrill <joel.sherrill@oarcorp.com>
|
||||||
|
|
||||||
* libc/machine/powerpc/vfscanf.c, libc/stdio/fgetpos.c,
|
* libc/machine/powerpc/vfscanf.c, libc/stdio/fgetpos.c,
|
||||||
|
@ -106,7 +106,7 @@ _BEGIN_STD_C
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __mips__
|
#ifdef __mips__
|
||||||
#ifdef __mips64
|
# if defined(__mips64) || (__mips_fpr == 64)
|
||||||
# define _JBTYPE long long
|
# define _JBTYPE long long
|
||||||
# endif
|
# endif
|
||||||
# ifdef __mips_soft_float
|
# ifdef __mips_soft_float
|
||||||
|
@ -23,6 +23,24 @@
|
|||||||
#define NUM_GPRS_SAVED 11
|
#define NUM_GPRS_SAVED 11
|
||||||
|
|
||||||
#ifdef __mips_hard_float
|
#ifdef __mips_hard_float
|
||||||
|
#if _MIPS_SIM == _ABIN32
|
||||||
|
FPR_OFFSET ($f20, 0); \
|
||||||
|
FPR_OFFSET ($f22, 1); \
|
||||||
|
FPR_OFFSET ($f24, 2); \
|
||||||
|
FPR_OFFSET ($f26, 3); \
|
||||||
|
FPR_OFFSET ($f28, 4); \
|
||||||
|
FPR_OFFSET ($f30, 5);
|
||||||
|
#elif _MIPS_SIM == _ABI64
|
||||||
|
#define FPR_LAYOUT \
|
||||||
|
FPR_OFFSET ($f24, 0); \
|
||||||
|
FPR_OFFSET ($f25, 1); \
|
||||||
|
FPR_OFFSET ($f26, 2); \
|
||||||
|
FPR_OFFSET ($f27, 3); \
|
||||||
|
FPR_OFFSET ($f28, 4); \
|
||||||
|
FPR_OFFSET ($f29, 5); \
|
||||||
|
FPR_OFFSET ($f30, 6); \
|
||||||
|
FPR_OFFSET ($f31, 7);
|
||||||
|
#else /* Assuming _MIPS_SIM == _ABIO32 */
|
||||||
#define FPR_LAYOUT \
|
#define FPR_LAYOUT \
|
||||||
FPR_OFFSET ($f20, 0); \
|
FPR_OFFSET ($f20, 0); \
|
||||||
FPR_OFFSET ($f21, 1); \
|
FPR_OFFSET ($f21, 1); \
|
||||||
@ -35,7 +53,8 @@
|
|||||||
FPR_OFFSET ($f28, 8); \
|
FPR_OFFSET ($f28, 8); \
|
||||||
FPR_OFFSET ($f29, 9); \
|
FPR_OFFSET ($f29, 9); \
|
||||||
FPR_OFFSET ($f30, 10); \
|
FPR_OFFSET ($f30, 10); \
|
||||||
FPR_OFFSET ($f31, 11)
|
FPR_OFFSET ($f31, 11);
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
#define FPR_LAYOUT
|
#define FPR_LAYOUT
|
||||||
#endif
|
#endif
|
||||||
@ -47,12 +66,18 @@
|
|||||||
#define STORE_GPR sd
|
#define STORE_GPR sd
|
||||||
#define STORE_FPR sdc1
|
#define STORE_FPR sdc1
|
||||||
#else
|
#else
|
||||||
#define BYTES_PER_WORD 4
|
|
||||||
#define LOAD_GPR lw
|
#define LOAD_GPR lw
|
||||||
#define LOAD_FPR lwc1
|
|
||||||
#define STORE_GPR sw
|
#define STORE_GPR sw
|
||||||
|
#if __mips_fpr == 64
|
||||||
|
#define BYTES_PER_WORD 8
|
||||||
|
#define LOAD_FPR l.d
|
||||||
|
#define STORE_FPR s.d
|
||||||
|
#else
|
||||||
|
#define BYTES_PER_WORD 4
|
||||||
|
#define LOAD_FPR lwc1
|
||||||
#define STORE_FPR swc1
|
#define STORE_FPR swc1
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#define GPOFF(INDEX) (INDEX * BYTES_PER_WORD)
|
#define GPOFF(INDEX) (INDEX * BYTES_PER_WORD)
|
||||||
#define FPOFF(INDEX) ((INDEX + NUM_GPRS_SAVED) * BYTES_PER_WORD)
|
#define FPOFF(INDEX) ((INDEX + NUM_GPRS_SAVED) * BYTES_PER_WORD)
|
||||||
|
Loading…
Reference in New Issue
Block a user