1 From: Felix Fietkau <nbd@openwrt.org>
2 Date: Wed, 8 Jul 2015 13:56:37 +0200
3 Subject: [PATCH] Add PowerPC soft-float support
5 Some PowerPC CPUs (e.g. Freescale MPC85xx) have a completely different
6 instruction set for floating point operations (SPE).
7 Executing regular PowerPC floating point instructions results in
8 "Illegal instruction" errors.
10 Make it possible to run these devices in soft-float mode.
12 Signed-off-by: Felix Fietkau <nbd@openwrt.org>
14 create mode 100644 src/fenv/powerpc-sf/fenv.sub
15 create mode 100644 src/setjmp/powerpc-sf/longjmp.s
16 create mode 100644 src/setjmp/powerpc-sf/longjmp.sub
17 create mode 100644 src/setjmp/powerpc-sf/setjmp.s
18 create mode 100644 src/setjmp/powerpc-sf/setjmp.sub
20 --- a/arch/powerpc/reloc.h
21 +++ b/arch/powerpc/reloc.h
23 -#define LDSO_ARCH "powerpc"
25 +#define FP_SUFFIX "-sf"
30 +#define LDSO_ARCH "powerpc" FP_SUFFIX
32 #define TPOFF_K (-0x7000)
36 @@ -498,6 +498,10 @@ trycppif "_MIPSEL || __MIPSEL || __MIPSE
37 trycppif __mips_soft_float "$t" && SUBARCH=${SUBARCH}-sf
40 +if test "$ARCH" = "powerpc" ; then
41 +trycppif _SOFT_FLOAT "$t" && SUBARCH=${SUBARCH}-sf
44 test "$ARCH" = "microblaze" && trycppif __MICROBLAZEEL__ "$t" \
45 && SUBARCH=${SUBARCH}el
48 +++ b/src/fenv/powerpc-sf/fenv.sub
52 +++ b/src/setjmp/powerpc-sf/longjmp.s
56 + .type _longjmp,@function
57 + .type longjmp,@function
60 +# void longjmp(jmp_buf env, int val);
61 +# put val into return register and restore the env saved in setjmp
62 +# if val(r4) is 0, put 1 there.
63 + # 0) move old return address into r0
65 + # 1) put it into link reg
67 + #2 ) restore stack ptr
69 + #3) restore control reg
91 + #5) put val into return reg r3
94 + #6) check if return value is 0, make it 1 in that case
102 +++ b/src/setjmp/powerpc-sf/longjmp.sub
106 +++ b/src/setjmp/powerpc-sf/setjmp.s
113 + .type __setjmp,@function
114 + .type _setjmp,@function
115 + .type setjmp,@function
120 + # 0) store IP int 0, then into the jmpbuf pointed to by r3 (first arg)
123 + # 1) store reg1 (SP)
147 + # 4) set return value to 0
152 +++ b/src/setjmp/powerpc-sf/setjmp.sub