musl: add powerpc soft-float support
Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 46267
This commit is contained in:
		
							
								
								
									
										141
									
								
								toolchain/musl/patches/010-Add-PowerPC-soft-float-support.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										141
									
								
								toolchain/musl/patches/010-Add-PowerPC-soft-float-support.patch
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,141 @@
 | 
				
			|||||||
 | 
					From: Felix Fietkau <nbd@openwrt.org>
 | 
				
			||||||
 | 
					Date: Wed, 8 Jul 2015 13:56:37 +0200
 | 
				
			||||||
 | 
					Subject: [PATCH] Add PowerPC soft-float support
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Some PowerPC CPUs (e.g. Freescale MPC85xx) have a completely different
 | 
				
			||||||
 | 
					instruction set for floating point operations (SPE).
 | 
				
			||||||
 | 
					Executing regular PowerPC floating point instructions results in
 | 
				
			||||||
 | 
					"Illegal instruction" errors.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Until support for SPE FPU is added, make it possible to run these
 | 
				
			||||||
 | 
					devices in soft-float mode.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-off-by: Felix Fietkau <nbd@openwrt.org>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 create mode 100644 src/fenv/powerpc-sf/fenv.sub
 | 
				
			||||||
 | 
					 create mode 100644 src/setjmp/powerpc-sf/longjmp.s
 | 
				
			||||||
 | 
					 create mode 100644 src/setjmp/powerpc-sf/longjmp.sub
 | 
				
			||||||
 | 
					 create mode 100644 src/setjmp/powerpc-sf/setjmp.s
 | 
				
			||||||
 | 
					 create mode 100644 src/setjmp/powerpc-sf/setjmp.sub
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--- a/configure
 | 
				
			||||||
 | 
					+++ b/configure
 | 
				
			||||||
 | 
					@@ -498,6 +498,10 @@ trycppif "_MIPSEL || __MIPSEL || __MIPSE
 | 
				
			||||||
 | 
					 trycppif __mips_soft_float "$t" && SUBARCH=${SUBARCH}-sf
 | 
				
			||||||
 | 
					 fi
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+if test "$ARCH" = "powerpc" ; then
 | 
				
			||||||
 | 
					+trycppif _SOFT_FLOAT "$t" && SUBARCH=${SUBARCH}-sf
 | 
				
			||||||
 | 
					+fi
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 test "$ARCH" = "microblaze" && trycppif __MICROBLAZEEL__ "$t" \
 | 
				
			||||||
 | 
					 && SUBARCH=${SUBARCH}el
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					--- /dev/null
 | 
				
			||||||
 | 
					+++ b/src/fenv/powerpc-sf/fenv.sub
 | 
				
			||||||
 | 
					@@ -0,0 +1 @@
 | 
				
			||||||
 | 
					+../fenv.c
 | 
				
			||||||
 | 
					--- /dev/null
 | 
				
			||||||
 | 
					+++ b/src/setjmp/powerpc-sf/longjmp.s
 | 
				
			||||||
 | 
					@@ -0,0 +1,47 @@
 | 
				
			||||||
 | 
					+	.global _longjmp
 | 
				
			||||||
 | 
					+	.global longjmp
 | 
				
			||||||
 | 
					+	.type   _longjmp,@function
 | 
				
			||||||
 | 
					+	.type   longjmp,@function
 | 
				
			||||||
 | 
					+_longjmp:
 | 
				
			||||||
 | 
					+longjmp:
 | 
				
			||||||
 | 
					+# void longjmp(jmp_buf env, int val);
 | 
				
			||||||
 | 
					+# put val into return register and restore the env saved in setjmp
 | 
				
			||||||
 | 
					+# if val(r4) is 0, put 1 there.
 | 
				
			||||||
 | 
					+	# 0) move old return address into r0
 | 
				
			||||||
 | 
					+	lwz 0, 0(3)
 | 
				
			||||||
 | 
					+	# 1) put it into link reg
 | 
				
			||||||
 | 
					+	mtlr 0
 | 
				
			||||||
 | 
					+	#2 ) restore stack ptr
 | 
				
			||||||
 | 
					+	lwz 1, 4(3)
 | 
				
			||||||
 | 
					+	#3) restore control reg
 | 
				
			||||||
 | 
					+	lwz 0, 8(3)
 | 
				
			||||||
 | 
					+	mtcr 0
 | 
				
			||||||
 | 
					+	#4) restore r14-r31
 | 
				
			||||||
 | 
					+	lwz 14, 12(3)
 | 
				
			||||||
 | 
					+	lwz 15, 16(3)
 | 
				
			||||||
 | 
					+	lwz 16, 20(3)
 | 
				
			||||||
 | 
					+	lwz 17, 24(3)
 | 
				
			||||||
 | 
					+	lwz 18, 28(3)
 | 
				
			||||||
 | 
					+	lwz 19, 32(3)
 | 
				
			||||||
 | 
					+	lwz 20, 36(3)
 | 
				
			||||||
 | 
					+	lwz 21, 40(3)
 | 
				
			||||||
 | 
					+	lwz 22, 44(3)
 | 
				
			||||||
 | 
					+	lwz 23, 48(3)
 | 
				
			||||||
 | 
					+	lwz 24, 52(3)
 | 
				
			||||||
 | 
					+	lwz 25, 56(3)
 | 
				
			||||||
 | 
					+	lwz 26, 60(3)
 | 
				
			||||||
 | 
					+	lwz 27, 64(3)
 | 
				
			||||||
 | 
					+	lwz 28, 68(3)
 | 
				
			||||||
 | 
					+	lwz 29, 72(3)
 | 
				
			||||||
 | 
					+	lwz 30, 76(3)
 | 
				
			||||||
 | 
					+	lwz 31, 80(3)
 | 
				
			||||||
 | 
					+	#5) put val into return reg r3
 | 
				
			||||||
 | 
					+	mr 3, 4
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	#6) check if return value is 0, make it 1 in that case
 | 
				
			||||||
 | 
					+	cmpwi cr7, 4, 0
 | 
				
			||||||
 | 
					+	bne cr7, 1f
 | 
				
			||||||
 | 
					+	li 3, 1
 | 
				
			||||||
 | 
					+1:
 | 
				
			||||||
 | 
					+	blr
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					--- /dev/null
 | 
				
			||||||
 | 
					+++ b/src/setjmp/powerpc-sf/longjmp.sub
 | 
				
			||||||
 | 
					@@ -0,0 +1 @@
 | 
				
			||||||
 | 
					+longjmp.s
 | 
				
			||||||
 | 
					--- /dev/null
 | 
				
			||||||
 | 
					+++ b/src/setjmp/powerpc-sf/setjmp.s
 | 
				
			||||||
 | 
					@@ -0,0 +1,43 @@
 | 
				
			||||||
 | 
					+	.global ___setjmp
 | 
				
			||||||
 | 
					+	.hidden ___setjmp
 | 
				
			||||||
 | 
					+	.global __setjmp
 | 
				
			||||||
 | 
					+	.global _setjmp
 | 
				
			||||||
 | 
					+	.global setjmp
 | 
				
			||||||
 | 
					+	.type   __setjmp,@function
 | 
				
			||||||
 | 
					+	.type   _setjmp,@function
 | 
				
			||||||
 | 
					+	.type   setjmp,@function
 | 
				
			||||||
 | 
					+___setjmp:
 | 
				
			||||||
 | 
					+__setjmp:
 | 
				
			||||||
 | 
					+_setjmp:
 | 
				
			||||||
 | 
					+setjmp:
 | 
				
			||||||
 | 
					+	# 0) store IP int 0, then into the jmpbuf pointed to by r3 (first arg)
 | 
				
			||||||
 | 
					+	mflr 0
 | 
				
			||||||
 | 
					+	stw 0, 0(3)
 | 
				
			||||||
 | 
					+	# 1) store reg1 (SP)
 | 
				
			||||||
 | 
					+	stw 1, 4(3)
 | 
				
			||||||
 | 
					+	# 2) store cr
 | 
				
			||||||
 | 
					+	mfcr 0
 | 
				
			||||||
 | 
					+	stw 0, 8(3)
 | 
				
			||||||
 | 
					+	# 3) store r14-31
 | 
				
			||||||
 | 
					+	stw 14, 12(3)
 | 
				
			||||||
 | 
					+	stw 15, 16(3)
 | 
				
			||||||
 | 
					+	stw 16, 20(3)
 | 
				
			||||||
 | 
					+	stw 17, 24(3)
 | 
				
			||||||
 | 
					+	stw 18, 28(3)
 | 
				
			||||||
 | 
					+	stw 19, 32(3)
 | 
				
			||||||
 | 
					+	stw 20, 36(3)
 | 
				
			||||||
 | 
					+	stw 21, 40(3)
 | 
				
			||||||
 | 
					+	stw 22, 44(3)
 | 
				
			||||||
 | 
					+	stw 23, 48(3)
 | 
				
			||||||
 | 
					+	stw 24, 52(3)
 | 
				
			||||||
 | 
					+	stw 25, 56(3)
 | 
				
			||||||
 | 
					+	stw 26, 60(3)
 | 
				
			||||||
 | 
					+	stw 27, 64(3)
 | 
				
			||||||
 | 
					+	stw 28, 68(3)
 | 
				
			||||||
 | 
					+	stw 29, 72(3)
 | 
				
			||||||
 | 
					+	stw 30, 76(3)
 | 
				
			||||||
 | 
					+	stw 31, 80(3)
 | 
				
			||||||
 | 
					+	# 4) set return value to 0
 | 
				
			||||||
 | 
					+	li 3, 0
 | 
				
			||||||
 | 
					+	# 5) return
 | 
				
			||||||
 | 
					+	blr
 | 
				
			||||||
 | 
					--- /dev/null
 | 
				
			||||||
 | 
					+++ b/src/setjmp/powerpc-sf/setjmp.sub
 | 
				
			||||||
 | 
					@@ -0,0 +1 @@
 | 
				
			||||||
 | 
					+setjmp.s
 | 
				
			||||||
		Reference in New Issue
	
	Block a user