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 Until support for SPE FPU is added, make it possible to run these
11 devices in soft-float mode.
13 Signed-off-by: Felix Fietkau <nbd@openwrt.org>
15 create mode 100644 src/fenv/powerpc-sf/fenv.sub
16 create mode 100644 src/setjmp/powerpc-sf/longjmp.s
17 create mode 100644 src/setjmp/powerpc-sf/longjmp.sub
18 create mode 100644 src/setjmp/powerpc-sf/setjmp.s
19 create mode 100644 src/setjmp/powerpc-sf/setjmp.sub
23 @@ -498,6 +498,10 @@ trycppif "_MIPSEL || __MIPSEL || __MIPSE
24 trycppif __mips_soft_float "$t" && SUBARCH=${SUBARCH}-sf
27 +if test "$ARCH" = "powerpc" ; then
28 +trycppif _SOFT_FLOAT "$t" && SUBARCH=${SUBARCH}-sf
31 test "$ARCH" = "microblaze" && trycppif __MICROBLAZEEL__ "$t" \
32 && SUBARCH=${SUBARCH}el
35 +++ b/src/fenv/powerpc-sf/fenv.sub
39 +++ b/src/setjmp/powerpc-sf/longjmp.s
43 + .type _longjmp,@function
44 + .type longjmp,@function
47 +# void longjmp(jmp_buf env, int val);
48 +# put val into return register and restore the env saved in setjmp
49 +# if val(r4) is 0, put 1 there.
50 + # 0) move old return address into r0
52 + # 1) put it into link reg
54 + #2 ) restore stack ptr
56 + #3) restore control reg
78 + #5) put val into return reg r3
81 + #6) check if return value is 0, make it 1 in that case
89 +++ b/src/setjmp/powerpc-sf/longjmp.sub
93 +++ b/src/setjmp/powerpc-sf/setjmp.s
100 + .type __setjmp,@function
101 + .type _setjmp,@function
102 + .type setjmp,@function
107 + # 0) store IP int 0, then into the jmpbuf pointed to by r3 (first arg)
110 + # 1) store reg1 (SP)
134 + # 4) set return value to 0
139 +++ b/src/setjmp/powerpc-sf/setjmp.sub