svn commit: r296680 - in projects/powerpcspe: . contrib/binutils/bfd contrib/gcc/config/rs6000 gnu/lib/libgcc gnu/lib/libgomp gnu/usr.bin/binutils gnu/usr.bin/cc gnu/usr.bin/cc/cc_tools gnu/usr.bin...
Justin Hibbits
jhibbits at FreeBSD.org
Fri Mar 11 20:43:07 UTC 2016
Author: jhibbits
Date: Fri Mar 11 20:43:02 2016
New Revision: 296680
URL: https://svnweb.freebsd.org/changeset/base/296680
Log:
Introduce SPE ABI for PowerPC Book-E
Changes include:
* New MACHINE_ARCH (powerpcspe)
* Makefile changes to support the new MACHINE_ARCH
* libc changes for fp* and setjmp
* lim changes for fenv.h.
* Hard-coded the SPEFSCR SPR definition (512), to avoid #include-ing
machine/spr.h
* Toolchain changes to enable the ABI.
There is currently one gotcha -- when using -mspe, -mcpu=8540 is required, else
an internal compiler error is generated in gcc.
This ABI is incompatible with the standard 32-bit PowerPC ABI.
Added:
projects/powerpcspe/contrib/gcc/config/rs6000/freebsdspe.h (contents, props changed)
projects/powerpcspe/lib/libc/powerpcspe/
- copied from r289406, projects/powerpcspe/lib/libc/powerpc/
projects/powerpcspe/sys/conf/ldscript.powerpcspe
projects/powerpcspe/sys/powerpc/booke/spe.c (contents, props changed)
Modified:
projects/powerpcspe/Makefile.inc1
projects/powerpcspe/contrib/binutils/bfd/config.bfd
projects/powerpcspe/gnu/lib/libgcc/Makefile
projects/powerpcspe/gnu/lib/libgomp/Makefile
projects/powerpcspe/gnu/usr.bin/binutils/Makefile.inc0
projects/powerpcspe/gnu/usr.bin/cc/Makefile.tgt
projects/powerpcspe/gnu/usr.bin/cc/cc_tools/Makefile
projects/powerpcspe/gnu/usr.bin/cc/include/Makefile
projects/powerpcspe/gnu/usr.bin/gdb/Makefile.inc
projects/powerpcspe/gnu/usr.bin/gdb/libgdb/Makefile
projects/powerpcspe/lib/libc/powerpcspe/gen/_setjmp.S
projects/powerpcspe/lib/libc/powerpcspe/gen/fabs.S
projects/powerpcspe/lib/libc/powerpcspe/gen/flt_rounds.c
projects/powerpcspe/lib/libc/powerpcspe/gen/fpgetmask.c
projects/powerpcspe/lib/libc/powerpcspe/gen/fpgetround.c
projects/powerpcspe/lib/libc/powerpcspe/gen/fpgetsticky.c
projects/powerpcspe/lib/libc/powerpcspe/gen/fpsetmask.c
projects/powerpcspe/lib/libc/powerpcspe/gen/fpsetround.c
projects/powerpcspe/lib/libc/powerpcspe/gen/setjmp.S
projects/powerpcspe/lib/libc/powerpcspe/gen/sigsetjmp.S
projects/powerpcspe/lib/libkvm/Makefile
projects/powerpcspe/lib/msun/powerpc/fenv.h
projects/powerpcspe/share/mk/bsd.cpu.mk
projects/powerpcspe/share/mk/bsd.endian.mk
projects/powerpcspe/share/mk/sys.mk
projects/powerpcspe/sys/boot/powerpc/Makefile
projects/powerpcspe/sys/conf/files.powerpc
projects/powerpcspe/sys/conf/kern.mk
projects/powerpcspe/sys/conf/options.powerpc
Modified: projects/powerpcspe/Makefile.inc1
==============================================================================
--- projects/powerpcspe/Makefile.inc1 Fri Mar 11 20:30:06 2016 (r296679)
+++ projects/powerpcspe/Makefile.inc1 Fri Mar 11 20:43:02 2016 (r296680)
@@ -146,7 +146,7 @@ SRCRELDATE!= awk '/^\#define[[:space:]]*
VERSION= FreeBSD ${REVISION}-${BRANCH:C/-p[0-9]+$//} ${TARGET_ARCH} ${SRCRELDATE}
.endif
-KNOWN_ARCHES?= aarch64/arm64 amd64 arm armeb/arm armv6/arm armv6hf/arm i386 i386/pc98 mips mipsel/mips mips64el/mips mips64/mips mipsn32el/mips mipsn32/mips powerpc powerpc64/powerpc sparc64
+KNOWN_ARCHES?= aarch64/arm64 amd64 arm armeb/arm armv6/arm armv6hf/arm i386 i386/pc98 mips mipsel/mips mips64el/mips mips64/mips mipsn32el/mips mipsn32/mips powerpc powerpc64/powerpc powerpcspe/powerpc sparc64
.if ${TARGET} == ${TARGET_ARCH}
_t= ${TARGET}
.else
Modified: projects/powerpcspe/contrib/binutils/bfd/config.bfd
==============================================================================
--- projects/powerpcspe/contrib/binutils/bfd/config.bfd Fri Mar 11 20:30:06 2016 (r296679)
+++ projects/powerpcspe/contrib/binutils/bfd/config.bfd Fri Mar 11 20:43:02 2016 (r296680)
@@ -1103,7 +1103,7 @@ case "${targ}" in
want64=true
;;
#endif
- powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \
+ powerpc-*-*bsd* | powerpcspe-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \
powerpc-*-solaris2* | powerpc-*-linux-* | powerpc-*-rtems* | \
powerpc-*-chorus*)
targ_defvec=bfd_elf32_powerpc_vec
Added: projects/powerpcspe/contrib/gcc/config/rs6000/freebsdspe.h
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ projects/powerpcspe/contrib/gcc/config/rs6000/freebsdspe.h Fri Mar 11 20:43:02 2016 (r296680)
@@ -0,0 +1,76 @@
+/* Definitions of target machine for GNU compiler,
+ for PowerPC e500 machines running GNU/Linux.
+ Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+ Contributed by Aldy Hernandez (aldy at quesejoda.com).
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 2, or (at your
+ option) any later version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING. If not, write to the
+ Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#undef TARGET_VERSION
+#define TARGET_VERSION fprintf (stderr, " (PowerPC E500 FreeBSD)");
+
+/* Override rs6000.h and sysv4.h definition. */
+#undef TARGET_DEFAULT
+#define TARGET_DEFAULT (MASK_POWERPC | MASK_NEW_MNEMONICS | MASK_STRICT_ALIGN)
+
+#undef TARGET_SPE_ABI
+#undef TARGET_SPE
+#undef TARGET_E500
+#undef TARGET_ISEL
+#undef TARGET_FPRS
+#undef TARGET_E500_SINGLE
+#undef TARGET_E500_DOUBLE
+
+#define TARGET_SPE_ABI rs6000_spe_abi
+#define TARGET_SPE rs6000_spe
+#define TARGET_E500 (rs6000_cpu == PROCESSOR_PPC8540)
+#define TARGET_ISEL rs6000_isel
+#define TARGET_FPRS (rs6000_float_gprs == 0)
+#define TARGET_E500_SINGLE (TARGET_HARD_FLOAT && rs6000_float_gprs == 1)
+#define TARGET_E500_DOUBLE (TARGET_HARD_FLOAT && rs6000_float_gprs == 2)
+
+#undef SUBSUBTARGET_OVERRIDE_OPTIONS
+#define SUBSUBTARGET_OVERRIDE_OPTIONS \
+ if (rs6000_select[1].string == NULL) \
+ rs6000_cpu = PROCESSOR_PPC8540; \
+ if (!rs6000_explicit_options.abi) \
+ rs6000_spe_abi = 1; \
+ if (!rs6000_explicit_options.float_gprs) \
+ rs6000_float_gprs = 1; \
+ /* See note below. */ \
+ /*if (!rs6000_explicit_options.long_double)*/ \
+ /* rs6000_long_double_type_size = 128;*/ \
+ if (!rs6000_explicit_options.spe) \
+ rs6000_spe = 1; \
+ if (!rs6000_explicit_options.isel) \
+ rs6000_isel = 1; \
+ if (target_flags & MASK_64BIT) \
+ error ("-m64 not supported in this configuration")
+
+/* The e500 ABI says that either long doubles are 128 bits, or if
+ implemented in any other size, the compiler/linker should error out.
+ We have no emulation libraries for 128 bit long doubles, and I hate
+ the dozens of failures on the regression suite. So I'm breaking ABI
+ specifications, until I properly fix the emulation.
+
+ Enable these later.
+#undef CPP_LONGDOUBLE_DEFAULT_SPEC
+#define CPP_LONGDOUBLE_DEFAULT_SPEC "-D__LONG_DOUBLE_128__=1"
+*/
+
+#undef ASM_DEFAULT_SPEC
+#define ASM_DEFAULT_SPEC "-mppc -mspe -me500"
Modified: projects/powerpcspe/gnu/lib/libgcc/Makefile
==============================================================================
--- projects/powerpcspe/gnu/lib/libgcc/Makefile Fri Mar 11 20:30:06 2016 (r296679)
+++ projects/powerpcspe/gnu/lib/libgcc/Makefile Fri Mar 11 20:43:02 2016 (r296680)
@@ -132,7 +132,7 @@ LIB2FUNCS_EXTRA+= fixdfdi.c fixunssfsi.c
.endif
.endif
-.if ${TARGET_ARCH} == "powerpc"
+.if ${TARGET_ARCH} == "powerpc" || ${TARGET_ARCH} == "powerpcspe"
# from config/rs6000/t-ppccomm
LIB2FUNCS_EXTRA = tramp.asm
LIB2FUNCS_STATIC_EXTRA = eabi.asm
Modified: projects/powerpcspe/gnu/lib/libgomp/Makefile
==============================================================================
--- projects/powerpcspe/gnu/lib/libgomp/Makefile Fri Mar 11 20:30:06 2016 (r296679)
+++ projects/powerpcspe/gnu/lib/libgomp/Makefile Fri Mar 11 20:43:02 2016 (r296680)
@@ -24,7 +24,7 @@ VERSION_MAP= ${SRCDIR}/libgomp.map
# Target-specific OpenMP configuration
.if ${MACHINE_CPUARCH} == arm || ${MACHINE_CPUARCH} == i386 || \
- ${MACHINE_ARCH} == powerpc || \
+ ${MACHINE_ARCH} == powerpc || ${MACHINE_ARCH} == powerpcspe || \
(${MACHINE_CPUARCH} == mips && ${MACHINE_ARCH:Mmips64*} == "")
OMP_LOCK_ALIGN = 4
OMP_LOCK_KIND= 4
Modified: projects/powerpcspe/gnu/usr.bin/binutils/Makefile.inc0
==============================================================================
--- projects/powerpcspe/gnu/usr.bin/binutils/Makefile.inc0 Fri Mar 11 20:30:06 2016 (r296679)
+++ projects/powerpcspe/gnu/usr.bin/binutils/Makefile.inc0 Fri Mar 11 20:43:02 2016 (r296680)
@@ -7,7 +7,7 @@
VERSION= "2.17.50 [FreeBSD] 2007-07-03"
.if defined(TARGET_ARCH)
-TARGET_CPUARCH=${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb|hf)?/arm/:C/powerpc64/powerpc/}
+TARGET_CPUARCH=${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb|hf)?/arm/:C/powerpc64/powerpc/:C/powerpcspe/powerpc/}
.else
TARGET_CPUARCH=${MACHINE_CPUARCH}
.endif
@@ -30,7 +30,7 @@ RELSRC= ${RELTOP}/../../../contrib/binut
SRCDIR= ${.CURDIR}/${RELSRC}
.if ${TARGET_CPUARCH} == "arm" || ${TARGET_CPUARCH} == "i386" || \
- ${TARGET_ARCH} == "powerpc" || \
+ ${TARGET_ARCH} == "powerpc" || ${TARGET_ARCH} == "powerpcspe" || \
(${TARGET_CPUARCH} == "mips" && ${TARGET_ARCH:Mmips64*} == "")
CFLAGS+= -DBFD_DEFAULT_TARGET_SIZE=32
.else
Modified: projects/powerpcspe/gnu/usr.bin/cc/Makefile.tgt
==============================================================================
--- projects/powerpcspe/gnu/usr.bin/cc/Makefile.tgt Fri Mar 11 20:30:06 2016 (r296679)
+++ projects/powerpcspe/gnu/usr.bin/cc/Makefile.tgt Fri Mar 11 20:43:02 2016 (r296680)
@@ -4,7 +4,7 @@
# MACHINE_CPUARCH, but there's no easy way to export make functions...
.if defined(TARGET_ARCH)
-TARGET_CPUARCH=${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb|hf)?/arm/:C/powerpc64/powerpc/}
+TARGET_CPUARCH=${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb|hf)?/arm/:C/powerpc64/powerpc/:C/powerpcspe/powerpc/}
.else
TARGET_CPUARCH=${MACHINE_CPUARCH}
.endif
Modified: projects/powerpcspe/gnu/usr.bin/cc/cc_tools/Makefile
==============================================================================
--- projects/powerpcspe/gnu/usr.bin/cc/cc_tools/Makefile Fri Mar 11 20:30:06 2016 (r296679)
+++ projects/powerpcspe/gnu/usr.bin/cc/cc_tools/Makefile Fri Mar 11 20:43:02 2016 (r296680)
@@ -57,6 +57,10 @@ TARGET_INC+= ${GCC_CPU}/bpabi.h
TARGET_INC+= ${GCC_CPU}/biarch64.h
TARGET_INC+= ${GCC_CPU}/default64.h
.endif
+.if ${TARGET_ARCH} == "powerpcspe"
+TARGET_INC+= ${GCC_CPU}/freebsdspe.h
+TARGET_INC+= ${GCC_CPU}/e500-double.h
+.endif
TARGET_INC+= ${GCC_CPU}/freebsd.h
.if ${TARGET_CPUARCH} == "amd64"
TARGET_INC+= ${GCC_CPU}/freebsd64.h
Modified: projects/powerpcspe/gnu/usr.bin/cc/include/Makefile
==============================================================================
--- projects/powerpcspe/gnu/usr.bin/cc/include/Makefile Fri Mar 11 20:30:06 2016 (r296679)
+++ projects/powerpcspe/gnu/usr.bin/cc/include/Makefile Fri Mar 11 20:43:02 2016 (r296680)
@@ -14,7 +14,8 @@ INCS= ammintrin.h emmintrin.h mmintrin.h
INCS+= wmmintrin.h __wmmintrin_aes.h __wmmintrin_pclmul.h
.elif ${TARGET_ARCH} == "arm"
INCS= mmintrin.h
-.elif ${TARGET_ARCH} == "powerpc" || ${TARGET_ARCH} == "powerpc64"
+.elif ${TARGET_ARCH} == "powerpc" || ${TARGET_ARCH} == "powerpc64" || \
+ ${TARGET_ARCH} == "powerpcspe"
INCS= ppc-asm.h altivec.h spe.h
.endif
Modified: projects/powerpcspe/gnu/usr.bin/gdb/Makefile.inc
==============================================================================
--- projects/powerpcspe/gnu/usr.bin/gdb/Makefile.inc Fri Mar 11 20:30:06 2016 (r296679)
+++ projects/powerpcspe/gnu/usr.bin/gdb/Makefile.inc Fri Mar 11 20:43:02 2016 (r296680)
@@ -21,7 +21,7 @@ OBJ_RL= ${OBJ_ROOT}/../lib/libreadline/r
# MACHINE_CPUARCH, but there's no easy way to export make functions...
.if defined(TARGET_ARCH)
-TARGET_CPUARCH=${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb|hf)?/arm/:C/powerpc64/powerpc/}
+TARGET_CPUARCH=${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb|hf)?/arm/:C/powerpc64/powerpc/:C/powerpcspe/powerpc/}
.else
TARGET_CPUARCH=${MACHINE_CPUARCH}
.endif
Modified: projects/powerpcspe/gnu/usr.bin/gdb/libgdb/Makefile
==============================================================================
--- projects/powerpcspe/gnu/usr.bin/gdb/libgdb/Makefile Fri Mar 11 20:30:06 2016 (r296679)
+++ projects/powerpcspe/gnu/usr.bin/gdb/libgdb/Makefile Fri Mar 11 20:43:02 2016 (r296680)
@@ -4,7 +4,7 @@
# MACHINE_CPUARCH, but there's no easy way to export make functions...
.if defined(TARGET_ARCH)
-TARGET_CPUARCH=${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb|hf)?/arm/:C/powerpc64/powerpc/}
+TARGET_CPUARCH=${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb|hf)?/arm/:C/powerpc64/powerpc/:C/powerpcspe/powerpc/}
.else
TARGET_CPUARCH=${MACHINE_CPUARCH}
.endif
Modified: projects/powerpcspe/lib/libc/powerpcspe/gen/_setjmp.S
==============================================================================
--- projects/powerpcspe/lib/libc/powerpc/gen/_setjmp.S Fri Oct 16 03:21:24 2015 (r289406)
+++ projects/powerpcspe/lib/libc/powerpcspe/gen/_setjmp.S Fri Mar 11 20:43:02 2016 (r296680)
@@ -53,60 +53,61 @@ __FBSDID("$FreeBSD$");
ENTRY(_setjmp)
mflr %r11
mfcr %r12
- mr %r10,%r1
- mr %r9,%r2
- stmw %r9,20(%r3)
-
- /* FPRs */
- stfd %f14,112+0*8(%r3)
- stfd %f15,112+1*8(%r3)
- stfd %f16,112+2*8(%r3)
- stfd %f17,112+3*8(%r3)
- stfd %f18,112+4*8(%r3)
- stfd %f19,112+5*8(%r3)
- stfd %f20,112+6*8(%r3)
- stfd %f21,112+7*8(%r3)
- stfd %f22,112+8*8(%r3)
- stfd %f23,112+9*8(%r3)
- stfd %f24,112+10*8(%r3)
- stfd %f25,112+11*8(%r3)
- stfd %f26,112+12*8(%r3)
- stfd %f27,112+13*8(%r3)
- stfd %f28,112+14*8(%r3)
- stfd %f29,112+15*8(%r3)
- stfd %f30,112+16*8(%r3)
- stfd %f31,112+17*8(%r3)
+ evstdd %r1,24+0*8(%r6)
+ evstdd %r2,24+1*8(%r6)
+ evstdd %r11,24+2*8(%r6)
+ evstdd %r12,24+3*8(%r6)
+ evstdd %r13,24+4*8(%r6)
+ evstdd %r14,24+5*8(%r6)
+ evstdd %r15,24+6*8(%r6)
+ evstdd %r16,24+7*8(%r6)
+ evstdd %r17,24+8*8(%r6)
+ evstdd %r18,24+9*8(%r6)
+ evstdd %r19,24+10*8(%r6)
+ evstdd %r20,24+11*8(%r6)
+ evstdd %r21,24+12*8(%r6)
+ evstdd %r22,24+13*8(%r6)
+ evstdd %r23,24+14*8(%r6)
+ evstdd %r24,24+15*8(%r6)
+ evstdd %r25,24+16*8(%r6)
+ evstdd %r26,24+17*8(%r6)
+ evstdd %r27,24+18*8(%r6)
+ evstdd %r28,24+19*8(%r6)
+ evstdd %r29,24+20*8(%r6)
+ evstdd %r30,24+21*8(%r6)
+ evstdd %r31,24+22*8(%r6)
li %r3,0
blr
END(_setjmp)
ENTRY(_longjmp)
- lmw %r9,20(%r3)
-
- /* FPRs */
- lfd %f14,112+0*8(%r3)
- lfd %f15,112+1*8(%r3)
- lfd %f16,112+2*8(%r3)
- lfd %f17,112+3*8(%r3)
- lfd %f18,112+4*8(%r3)
- lfd %f19,112+5*8(%r3)
- lfd %f20,112+6*8(%r3)
- lfd %f21,112+7*8(%r3)
- lfd %f22,112+8*8(%r3)
- lfd %f23,112+9*8(%r3)
- lfd %f24,112+10*8(%r3)
- lfd %f25,112+11*8(%r3)
- lfd %f26,112+12*8(%r3)
- lfd %f27,112+13*8(%r3)
- lfd %f28,112+14*8(%r3)
- lfd %f29,112+15*8(%r3)
- lfd %f30,112+16*8(%r3)
- lfd %f31,112+17*8(%r3)
+ evldd %r1,24+0*8(%r6)
+ evldd %r2,24+1*8(%r6)
+ evldd %r11,24+2*8(%r6)
+ evldd %r12,24+3*8(%r6)
+ evldd %r13,24+4*8(%r6)
+ evldd %r14,24+5*8(%r6)
+ evldd %r15,24+6*8(%r6)
+ evldd %r16,24+7*8(%r6)
+ evldd %r17,24+8*8(%r6)
+ evldd %r18,24+9*8(%r6)
+ evldd %r19,24+10*8(%r6)
+ evldd %r20,24+11*8(%r6)
+ evldd %r21,24+12*8(%r6)
+ evldd %r22,24+13*8(%r6)
+ evldd %r23,24+14*8(%r6)
+ evldd %r24,24+15*8(%r6)
+ evldd %r25,24+16*8(%r6)
+ evldd %r26,24+17*8(%r6)
+ evldd %r27,24+18*8(%r6)
+ evldd %r28,24+19*8(%r6)
+ evldd %r29,24+20*8(%r6)
+ evldd %r30,24+21*8(%r6)
+ evldd %r31,24+22*8(%r6)
mtlr %r11
mtcr %r12
- mr %r1,%r10
or. %r3,%r4,%r4
bnelr
li %r3,1
Modified: projects/powerpcspe/lib/libc/powerpcspe/gen/fabs.S
==============================================================================
--- projects/powerpcspe/lib/libc/powerpc/gen/fabs.S Fri Oct 16 03:21:24 2015 (r289406)
+++ projects/powerpcspe/lib/libc/powerpcspe/gen/fabs.S Fri Mar 11 20:43:02 2016 (r296680)
@@ -31,7 +31,7 @@ __FBSDID("$FreeBSD$");
* double fabs(double)
*/
ENTRY(fabs)
- fabs %f1,%f1
+ efdabs %f1,%f1
blr
END(fabs)
Modified: projects/powerpcspe/lib/libc/powerpcspe/gen/flt_rounds.c
==============================================================================
--- projects/powerpcspe/lib/libc/powerpc/gen/flt_rounds.c Fri Oct 16 03:21:24 2015 (r289406)
+++ projects/powerpcspe/lib/libc/powerpcspe/gen/flt_rounds.c Fri Mar 11 20:43:02 2016 (r296680)
@@ -36,6 +36,7 @@ __FBSDID("$FreeBSD$");
#include <sys/types.h>
#include <machine/float.h>
+#include <machine/spr.h>
#ifndef _SOFT_FLOAT
static const int map[] = {
@@ -48,9 +49,9 @@ static const int map[] = {
int
__flt_rounds()
{
- uint64_t fpscr;
+ uint32_t fpscr;
- __asm__ __volatile("mffs %0" : "=f"(fpscr));
+ __asm__ __volatile("mfspr %0, %1" : "=r"(fpscr) : "K"(SPR_SPEFSCR));
return map[(fpscr & 0x03)];
}
#endif
Modified: projects/powerpcspe/lib/libc/powerpcspe/gen/fpgetmask.c
==============================================================================
--- projects/powerpcspe/lib/libc/powerpc/gen/fpgetmask.c Fri Oct 16 03:21:24 2015 (r289406)
+++ projects/powerpcspe/lib/libc/powerpcspe/gen/fpgetmask.c Fri Mar 11 20:43:02 2016 (r296680)
@@ -34,15 +34,16 @@
__FBSDID("$FreeBSD$");
#include <sys/types.h>
+#include <machine/spr.h>
#include <ieeefp.h>
#ifndef _SOFT_FLOAT
fp_except_t
fpgetmask()
{
- u_int64_t fpscr;
+ uint32_t fpscr;
- __asm__("mffs %0" : "=f"(fpscr));
+ __asm__ __volatile("mfspr %0, %1" : "=r"(fpscr) : "K"(SPR_SPEFSCR));
return ((fp_except_t)((fpscr >> 3) & 0x1f));
}
#endif
Modified: projects/powerpcspe/lib/libc/powerpcspe/gen/fpgetround.c
==============================================================================
--- projects/powerpcspe/lib/libc/powerpc/gen/fpgetround.c Fri Oct 16 03:21:24 2015 (r289406)
+++ projects/powerpcspe/lib/libc/powerpcspe/gen/fpgetround.c Fri Mar 11 20:43:02 2016 (r296680)
@@ -34,15 +34,16 @@
__FBSDID("$FreeBSD$");
#include <sys/types.h>
+#include <machine/spr.h>
#include <ieeefp.h>
#ifndef _SOFT_FLOAT
fp_rnd_t
fpgetround()
{
- u_int64_t fpscr;
+ uint32_t fpscr;
- __asm__("mffs %0" : "=f"(fpscr));
+ __asm__ __volatile("mfspr %0, %1" : "=r"(fpscr) : "K"(SPR_SPEFSCR));
return ((fp_rnd_t)(fpscr & 0x3));
}
#endif
Modified: projects/powerpcspe/lib/libc/powerpcspe/gen/fpgetsticky.c
==============================================================================
--- projects/powerpcspe/lib/libc/powerpc/gen/fpgetsticky.c Fri Oct 16 03:21:24 2015 (r289406)
+++ projects/powerpcspe/lib/libc/powerpcspe/gen/fpgetsticky.c Fri Mar 11 20:43:02 2016 (r296680)
@@ -36,6 +36,7 @@
#include "namespace.h"
#include <sys/types.h>
+#include <machine/spr.h>
#include <ieeefp.h>
#ifndef _SOFT_FLOAT
@@ -46,9 +47,9 @@ __weak_alias(fpgetsticky,_fpgetsticky)
fp_except_t
fpgetsticky()
{
- u_int64_t fpscr;
+ uint32_t fpscr;
- __asm__ __volatile("mffs %0" : "=f"(fpscr));
+ __asm__ __volatile("mfspr %0, %1" : "=r"(fpscr) : "K"(SPR_SPEFSCR));
return ((fp_except_t)((fpscr >> 25) & 0x1f));
}
#endif
Modified: projects/powerpcspe/lib/libc/powerpcspe/gen/fpsetmask.c
==============================================================================
--- projects/powerpcspe/lib/libc/powerpc/gen/fpsetmask.c Fri Oct 16 03:21:24 2015 (r289406)
+++ projects/powerpcspe/lib/libc/powerpcspe/gen/fpsetmask.c Fri Mar 11 20:43:02 2016 (r296680)
@@ -34,19 +34,20 @@
__FBSDID("$FreeBSD$");
#include <sys/types.h>
+#include <machine/spr.h>
#include <ieeefp.h>
#ifndef _SOFT_FLOAT
fp_except_t
fpsetmask(fp_except_t mask)
{
- u_int64_t fpscr;
+ uint32_t fpscr;
fp_rnd_t old;
- __asm__("mffs %0" : "=f"(fpscr));
+ __asm__ __volatile("mfspr %0, %1" : "=r"(fpscr) : "K"(SPR_SPEFSCR));
old = (fp_rnd_t)((fpscr >> 3) & 0x1f);
fpscr = (fpscr & 0xffffff07) | (mask << 3);
- __asm__ __volatile("mtfsf 0xff,%0" :: "f"(fpscr));
+ __asm__ __volatile("mtspr %1,%0" :: "r"(fpscr), "K"(SPR_SPEFSCR));
return (old);
}
#endif
Modified: projects/powerpcspe/lib/libc/powerpcspe/gen/fpsetround.c
==============================================================================
--- projects/powerpcspe/lib/libc/powerpc/gen/fpsetround.c Fri Oct 16 03:21:24 2015 (r289406)
+++ projects/powerpcspe/lib/libc/powerpcspe/gen/fpsetround.c Fri Mar 11 20:43:02 2016 (r296680)
@@ -34,19 +34,20 @@
__FBSDID("$FreeBSD$");
#include <sys/types.h>
+#include <machine/spr.h>
#include <ieeefp.h>
#ifndef _SOFT_FLOAT
fp_rnd_t
fpsetround(fp_rnd_t rnd_dir)
{
- u_int64_t fpscr;
+ uint32_t fpscr;
fp_rnd_t old;
- __asm__ __volatile("mffs %0" : "=f"(fpscr));
+ __asm__ __volatile("mfspr %0, %1" : "=r"(fpscr) : "K"(SPR_SPEFSCR) );
old = (fp_rnd_t)(fpscr & 0x3);
fpscr = (fpscr & 0xfffffffc) | rnd_dir;
- __asm__ __volatile("mtfsf 0xff,%0" :: "f"(fpscr));
+ __asm__ __volatile("mtspr %1, %0" :: "r"(fpscr), "K"(SPR_SPEFSCR));
return (old);
}
#endif
Modified: projects/powerpcspe/lib/libc/powerpcspe/gen/setjmp.S
==============================================================================
--- projects/powerpcspe/lib/libc/powerpc/gen/setjmp.S Fri Oct 16 03:21:24 2015 (r289406)
+++ projects/powerpcspe/lib/libc/powerpcspe/gen/setjmp.S Fri Mar 11 20:43:02 2016 (r296680)
@@ -65,27 +65,29 @@ ENTRY(setjmp)
mfcr %r12 /* r12 <- condition reg */
mr %r10,%r1 /* r10 <- stackptr */
mr %r9,%r2 /* r9 <- global ptr */
- stmw %r9,20(%r6)
-
- /* FPRs */
- stfd %f14,112+0*8(%r6)
- stfd %f15,112+1*8(%r6)
- stfd %f16,112+2*8(%r6)
- stfd %f17,112+3*8(%r6)
- stfd %f18,112+4*8(%r6)
- stfd %f19,112+5*8(%r6)
- stfd %f20,112+6*8(%r6)
- stfd %f21,112+7*8(%r6)
- stfd %f22,112+8*8(%r6)
- stfd %f23,112+9*8(%r6)
- stfd %f24,112+10*8(%r6)
- stfd %f25,112+11*8(%r6)
- stfd %f26,112+12*8(%r6)
- stfd %f27,112+13*8(%r6)
- stfd %f28,112+14*8(%r6)
- stfd %f29,112+15*8(%r6)
- stfd %f30,112+16*8(%r6)
- stfd %f31,112+17*8(%r6)
+ evstdd %r9,24+0*8(%r6)
+ evstdd %r10,24+1*8(%r6)
+ evstdd %r11,24+2*8(%r6)
+ evstdd %r12,24+3*8(%r6)
+ evstdd %r13,24+4*8(%r6)
+ evstdd %r14,24+5*8(%r6)
+ evstdd %r15,24+6*8(%r6)
+ evstdd %r16,24+7*8(%r6)
+ evstdd %r17,24+8*8(%r6)
+ evstdd %r18,24+9*8(%r6)
+ evstdd %r19,24+10*8(%r6)
+ evstdd %r20,24+11*8(%r6)
+ evstdd %r21,24+12*8(%r6)
+ evstdd %r22,24+13*8(%r6)
+ evstdd %r23,24+14*8(%r6)
+ evstdd %r24,24+15*8(%r6)
+ evstdd %r25,24+16*8(%r6)
+ evstdd %r26,24+17*8(%r6)
+ evstdd %r27,24+18*8(%r6)
+ evstdd %r28,24+19*8(%r6)
+ evstdd %r29,24+20*8(%r6)
+ evstdd %r30,24+21*8(%r6)
+ evstdd %r31,24+22*8(%r6)
li %r3,0 /* return (0) */
blr
@@ -93,27 +95,29 @@ END(setjmp)
WEAK_REFERENCE(CNAME(__longjmp), longjmp)
ENTRY(__longjmp)
- lmw %r9,20(%r3) /* restore regs */
-
- /* FPRs */
- lfd %f14,112+0*8(%r3)
- lfd %f15,112+1*8(%r3)
- lfd %f16,112+2*8(%r3)
- lfd %f17,112+3*8(%r3)
- lfd %f18,112+4*8(%r3)
- lfd %f19,112+5*8(%r3)
- lfd %f20,112+6*8(%r3)
- lfd %f21,112+7*8(%r3)
- lfd %f22,112+8*8(%r3)
- lfd %f23,112+9*8(%r3)
- lfd %f24,112+10*8(%r3)
- lfd %f25,112+11*8(%r3)
- lfd %f26,112+12*8(%r3)
- lfd %f27,112+13*8(%r3)
- lfd %f28,112+14*8(%r3)
- lfd %f29,112+15*8(%r3)
- lfd %f30,112+16*8(%r3)
- lfd %f31,112+17*8(%r3)
+ evldd %r9,24+0*8(%r6)
+ evldd %r10,24+1*8(%r6)
+ evldd %r11,24+2*8(%r6)
+ evldd %r12,24+3*8(%r6)
+ evldd %r13,24+4*8(%r6)
+ evldd %r14,24+5*8(%r6)
+ evldd %r15,24+6*8(%r6)
+ evldd %r16,24+7*8(%r6)
+ evldd %r17,24+8*8(%r6)
+ evldd %r18,24+9*8(%r6)
+ evldd %r19,24+10*8(%r6)
+ evldd %r20,24+11*8(%r6)
+ evldd %r21,24+12*8(%r6)
+ evldd %r22,24+13*8(%r6)
+ evldd %r23,24+14*8(%r6)
+ evldd %r24,24+15*8(%r6)
+ evldd %r25,24+16*8(%r6)
+ evldd %r26,24+17*8(%r6)
+ evldd %r27,24+18*8(%r6)
+ evldd %r28,24+19*8(%r6)
+ evldd %r29,24+20*8(%r6)
+ evldd %r30,24+21*8(%r6)
+ evldd %r31,24+22*8(%r6)
mr %r6,%r4 /* save val param */
mtlr %r11 /* r11 -> link reg */
Modified: projects/powerpcspe/lib/libc/powerpcspe/gen/sigsetjmp.S
==============================================================================
--- projects/powerpcspe/lib/libc/powerpc/gen/sigsetjmp.S Fri Oct 16 03:21:24 2015 (r289406)
+++ projects/powerpcspe/lib/libc/powerpcspe/gen/sigsetjmp.S Fri Mar 11 20:43:02 2016 (r296680)
@@ -70,54 +70,62 @@ ENTRY(sigsetjmp)
mfcr %r12
mr %r10,%r1
mr %r9,%r2
- stmw %r9,20(%r6)
/* FPRs */
- stfd %f14,112+0*8(%r6)
- stfd %f15,112+1*8(%r6)
- stfd %f16,112+2*8(%r6)
- stfd %f17,112+3*8(%r6)
- stfd %f18,112+4*8(%r6)
- stfd %f19,112+5*8(%r6)
- stfd %f20,112+6*8(%r6)
- stfd %f21,112+7*8(%r6)
- stfd %f22,112+8*8(%r6)
- stfd %f23,112+9*8(%r6)
- stfd %f24,112+10*8(%r6)
- stfd %f25,112+11*8(%r6)
- stfd %f26,112+12*8(%r6)
- stfd %f27,112+13*8(%r6)
- stfd %f28,112+14*8(%r6)
- stfd %f29,112+15*8(%r6)
- stfd %f30,112+16*8(%r6)
- stfd %f31,112+17*8(%r6)
+ evstdd %r9,24+0*8(%r6)
+ evstdd %r10,24+1*8(%r6)
+ evstdd %r11,24+2*8(%r6)
+ evstdd %r12,24+3*8(%r6)
+ evstdd %r13,24+4*8(%r6)
+ evstdd %r14,24+5*8(%r6)
+ evstdd %r15,24+6*8(%r6)
+ evstdd %r16,24+7*8(%r6)
+ evstdd %r17,24+8*8(%r6)
+ evstdd %r18,24+9*8(%r6)
+ evstdd %r19,24+10*8(%r6)
+ evstdd %r20,24+11*8(%r6)
+ evstdd %r21,24+12*8(%r6)
+ evstdd %r22,24+13*8(%r6)
+ evstdd %r23,24+14*8(%r6)
+ evstdd %r24,24+15*8(%r6)
+ evstdd %r25,24+16*8(%r6)
+ evstdd %r26,24+17*8(%r6)
+ evstdd %r27,24+18*8(%r6)
+ evstdd %r28,24+19*8(%r6)
+ evstdd %r29,24+20*8(%r6)
+ evstdd %r30,24+21*8(%r6)
+ evstdd %r31,24+22*8(%r6)
li %r3,0
blr
END(sigsetjmp)
ENTRY(siglongjmp)
- lmw %r9,20(%r3)
/* FPRs */
- lfd %f14,112+0*8(%r3)
- lfd %f15,112+1*8(%r3)
- lfd %f16,112+2*8(%r3)
- lfd %f17,112+3*8(%r3)
- lfd %f18,112+4*8(%r3)
- lfd %f19,112+5*8(%r3)
- lfd %f20,112+6*8(%r3)
- lfd %f21,112+7*8(%r3)
- lfd %f22,112+8*8(%r3)
- lfd %f23,112+9*8(%r3)
- lfd %f24,112+10*8(%r3)
- lfd %f25,112+11*8(%r3)
- lfd %f26,112+12*8(%r3)
- lfd %f27,112+13*8(%r3)
- lfd %f28,112+14*8(%r3)
- lfd %f29,112+15*8(%r3)
- lfd %f30,112+16*8(%r3)
- lfd %f31,112+17*8(%r3)
+ evldd %r9,24+0*8(%r6)
+ evldd %r10,24+1*8(%r6)
+ evldd %r11,24+2*8(%r6)
+ evldd %r12,24+3*8(%r6)
+ evldd %r13,24+4*8(%r6)
+ evldd %r14,24+5*8(%r6)
+ evldd %r15,24+6*8(%r6)
+ evldd %r16,24+7*8(%r6)
+ evldd %r17,24+8*8(%r6)
+ evldd %r18,24+9*8(%r6)
+ evldd %r19,24+10*8(%r6)
+ evldd %r20,24+11*8(%r6)
+ evldd %r21,24+12*8(%r6)
+ evldd %r22,24+13*8(%r6)
+ evldd %r23,24+14*8(%r6)
+ evldd %r24,24+15*8(%r6)
+ evldd %r25,24+16*8(%r6)
+ evldd %r26,24+17*8(%r6)
+ evldd %r27,24+18*8(%r6)
+ evldd %r28,24+19*8(%r6)
+ evldd %r29,24+20*8(%r6)
+ evldd %r30,24+21*8(%r6)
+ evldd %r31,24+22*8(%r6)
lwz %r7,0(%r3)
mr %r6,%r4
Modified: projects/powerpcspe/lib/libkvm/Makefile
==============================================================================
--- projects/powerpcspe/lib/libkvm/Makefile Fri Mar 11 20:30:06 2016 (r296679)
+++ projects/powerpcspe/lib/libkvm/Makefile Fri Mar 11 20:43:02 2016 (r296680)
@@ -3,7 +3,7 @@
.if defined(TARGET_ARCH) && !defined(COMPAT_32BIT)
KVM_XARCH=${TARGET_ARCH}
-KVM_XCPUARCH=${KVM_XARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb|hf)?/arm/:C/powerpc64/powerpc/}
+KVM_XCPUARCH=${KVM_XARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb|hf)?/arm/:C/powerpc(64|spe)/powerpc/}
.else
KVM_XARCH=${MACHINE_ARCH}
KVM_XCPUARCH=${MACHINE_CPUARCH}
Modified: projects/powerpcspe/lib/msun/powerpc/fenv.h
==============================================================================
--- projects/powerpcspe/lib/msun/powerpc/fenv.h Fri Mar 11 20:30:06 2016 (r296679)
+++ projects/powerpcspe/lib/msun/powerpc/fenv.h Fri Mar 11 20:43:02 2016 (r296680)
@@ -87,8 +87,13 @@ extern const fenv_t __fe_dfl_env;
FE_OVERFLOW | FE_UNDERFLOW) >> _FPUSW_SHIFT)
#ifndef _SOFT_FLOAT
+#ifdef __SPE__
+#define __mffs(__env) __asm __volatile("mfspr %0, 512" : "=r" (*(__env)))
+#define __mtfsf(__env) __asm __volatile("mtspr 512,%0" : : "r" (__env))
+#else
#define __mffs(__env) __asm __volatile("mffs %0" : "=f" (*(__env)))
#define __mtfsf(__env) __asm __volatile("mtfsf 255,%0" : : "f" (__env))
+#endif
#else
#define __mffs(__env)
#define __mtfsf(__env)
Modified: projects/powerpcspe/share/mk/bsd.cpu.mk
==============================================================================
--- projects/powerpcspe/share/mk/bsd.cpu.mk Fri Mar 11 20:30:06 2016 (r296679)
+++ projects/powerpcspe/share/mk/bsd.cpu.mk Fri Mar 11 20:43:02 2016 (r296680)
@@ -120,6 +120,8 @@ _CPUCFLAGS = -Wa,-me500 -msoft-float
. else
_CPUCFLAGS = -mcpu=${CPUTYPE} -mno-powerpc64
. endif
+. elif ${MACHINE_ARCH} == "powerpcspe"
+_CPUCFLAGS = -Wa,-me500 -mspe=yes -mabi=spe -mfloat-gprs=double
. elif ${MACHINE_ARCH} == "powerpc64"
_CPUCFLAGS = -mcpu=${CPUTYPE}
. elif ${MACHINE_CPUARCH} == "mips"
@@ -296,6 +298,10 @@ CFLAGS += -mfloat-abi=softfp
.endif
.endif
+.if ${MACHINE_ARCH} == "powerpcspe"
+CFLAGS += -mcpu=8540 -Wa,-me500 -mspe=yes -mabi=spe -mfloat-gprs=double
+.endif
+
# NB: COPTFLAGS is handled in /usr/src/sys/conf/kern.pre.mk
.if !defined(NO_CPU_CFLAGS)
Modified: projects/powerpcspe/share/mk/bsd.endian.mk
==============================================================================
--- projects/powerpcspe/share/mk/bsd.endian.mk Fri Mar 11 20:30:06 2016 (r296679)
+++ projects/powerpcspe/share/mk/bsd.endian.mk Fri Mar 11 20:43:02 2016 (r296680)
@@ -8,6 +8,7 @@
TARGET_ENDIANNESS= 1234
.elif ${MACHINE_ARCH} == "powerpc" || \
${MACHINE_ARCH} == "powerpc64" || \
+ ${MACHINE_ARCH} == "powerpcspe" || \
${MACHINE_ARCH} == "sparc64" || \
(${MACHINE} == "arm" && ${MACHINE_ARCH:Marm*eb*} != "") || \
${MACHINE_ARCH:Mmips*} != ""
Modified: projects/powerpcspe/share/mk/sys.mk
==============================================================================
--- projects/powerpcspe/share/mk/sys.mk Fri Mar 11 20:30:06 2016 (r296679)
+++ projects/powerpcspe/share/mk/sys.mk Fri Mar 11 20:43:02 2016 (r296680)
@@ -13,7 +13,7 @@ unix ?= We run FreeBSD, not UNIX.
# and/or endian. This is called MACHINE_CPU in NetBSD, but that's used
# for something different in FreeBSD.
#
-MACHINE_CPUARCH=${MACHINE_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb|hf)?/arm/:C/powerpc64/powerpc/}
+MACHINE_CPUARCH=${MACHINE_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb|hf)?/arm/:C/powerpc(64|spe)/powerpc/}
.endif
Modified: projects/powerpcspe/sys/boot/powerpc/Makefile
==============================================================================
--- projects/powerpcspe/sys/boot/powerpc/Makefile Fri Mar 11 20:30:06 2016 (r296679)
+++ projects/powerpcspe/sys/boot/powerpc/Makefile Fri Mar 11 20:43:02 2016 (r296680)
@@ -1,5 +1,8 @@
# $FreeBSD$
-SUBDIR= boot1.chrp kboot ofw ps3 uboot
+SUBDIR= boot1.chrp kboot ofw uboot
+.if ${MACHINE_ARCH} != "powerpcspe"
+SUBDIR+= ps3
+.endif
.include <bsd.subdir.mk>
Modified: projects/powerpcspe/sys/conf/files.powerpc
==============================================================================
--- projects/powerpcspe/sys/conf/files.powerpc Fri Mar 11 20:30:06 2016 (r296679)
+++ projects/powerpcspe/sys/conf/files.powerpc Fri Mar 11 20:43:02 2016 (r296680)
@@ -80,24 +80,24 @@ kern/kern_clocksource.c standard
kern/subr_dummy_vdso_tc.c standard
kern/syscalls.c optional ktr
kern/subr_sfbuf.c standard
-libkern/ashldi3.c optional powerpc
-libkern/ashrdi3.c optional powerpc
+libkern/ashldi3.c optional powerpc | powerpcspe
+libkern/ashrdi3.c optional powerpc | powerpcspe
libkern/bcmp.c standard
-libkern/cmpdi2.c optional powerpc
-libkern/divdi3.c optional powerpc
+libkern/cmpdi2.c optional powerpc | powerpcspe
+libkern/divdi3.c optional powerpc | powerpcspe
libkern/ffs.c standard
libkern/ffsl.c standard
libkern/fls.c standard
libkern/flsl.c standard
libkern/flsll.c standard
-libkern/lshrdi3.c optional powerpc
+libkern/lshrdi3.c optional powerpc | powerpcspe
libkern/memmove.c standard
libkern/memset.c standard
-libkern/moddi3.c optional powerpc
-libkern/qdivrem.c optional powerpc
-libkern/ucmpdi2.c optional powerpc
-libkern/udivdi3.c optional powerpc
-libkern/umoddi3.c optional powerpc
+libkern/moddi3.c optional powerpc | powerpcspe
+libkern/qdivrem.c optional powerpc | powerpcspe
+libkern/ucmpdi2.c optional powerpc | powerpcspe
+libkern/udivdi3.c optional powerpc | powerpcspe
+libkern/umoddi3.c optional powerpc | powerpcspe
powerpc/aim/locore.S optional aim no-obj
powerpc/aim/aim_machdep.c optional aim
powerpc/aim/mmu_oea.c optional aim powerpc
@@ -112,6 +112,7 @@ powerpc/booke/machdep_e500.c optional bo
powerpc/booke/mp_cpudep.c optional booke smp
powerpc/booke/platform_bare.c optional booke
powerpc/booke/pmap.c optional booke
+powerpc/booke/spe.c optional powerpcspe
powerpc/cpufreq/dfs.c optional cpufreq
powerpc/cpufreq/pcr.c optional cpufreq aim
powerpc/cpufreq/pmufreq.c optional cpufreq aim pmu
@@ -175,7 +176,7 @@ powerpc/powermac/smusat.c optional power
powerpc/powermac/uninorth.c optional powermac
powerpc/powermac/uninorthpci.c optional powermac pci
powerpc/powermac/vcoregpio.c optional powermac
-powerpc/powerpc/altivec.c standard
+powerpc/powerpc/altivec.c optional powerpc | powerpc64
powerpc/powerpc/autoconf.c standard
powerpc/powerpc/bcopy.c standard
powerpc/powerpc/bus_machdep.c standard
@@ -189,7 +190,7 @@ powerpc/powerpc/db_hwwatch.c optional dd
powerpc/powerpc/db_interface.c optional ddb
powerpc/powerpc/db_trace.c optional ddb
powerpc/powerpc/dump_machdep.c standard
-powerpc/powerpc/elf32_machdep.c optional powerpc | compat_freebsd32
+powerpc/powerpc/elf32_machdep.c optional powerpc | powerpcspe | compat_freebsd32
powerpc/powerpc/elf64_machdep.c optional powerpc64
powerpc/powerpc/exec_machdep.c standard
powerpc/powerpc/fpu.c standard
@@ -212,9 +213,9 @@ powerpc/powerpc/platform_if.m standard
powerpc/powerpc/ptrace_machdep.c standard
powerpc/powerpc/sc_machdep.c optional sc
powerpc/powerpc/setjmp.S standard
-powerpc/powerpc/sigcode32.S optional powerpc | compat_freebsd32
+powerpc/powerpc/sigcode32.S optional powerpc | powerpcspe | compat_freebsd32
powerpc/powerpc/sigcode64.S optional powerpc64
-powerpc/powerpc/swtch32.S optional powerpc
+powerpc/powerpc/swtch32.S optional powerpc | powerpcspe
powerpc/powerpc/swtch64.S optional powerpc64
powerpc/powerpc/stack_machdep.c optional ddb | stack
powerpc/powerpc/suswintr.c standard
Modified: projects/powerpcspe/sys/conf/kern.mk
==============================================================================
--- projects/powerpcspe/sys/conf/kern.mk Fri Mar 11 20:30:06 2016 (r296679)
+++ projects/powerpcspe/sys/conf/kern.mk Fri Mar 11 20:43:02 2016 (r296680)
@@ -149,6 +149,10 @@ CFLAGS.gcc+= -msoft-float
INLINE_LIMIT?= 15000
.endif
+.if ${MACHINE_ARCH} == "powerpcspe"
+CFLAGS+= -mno-spe
+.endif
+
#
# Use dot symbols on powerpc64 to make ddb happy
#
Added: projects/powerpcspe/sys/conf/ldscript.powerpcspe
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ projects/powerpcspe/sys/conf/ldscript.powerpcspe Fri Mar 11 20:43:02 2016 (r296680)
@@ -0,0 +1,144 @@
+/* $FreeBSD: projects/powerpspe/sys/conf/ldscript.powerpc 277334 2015-01-18 18:32:43Z nwhitehorn $ */
+
+OUTPUT_FORMAT("elf32-powerpc-freebsd", "elf32-powerpc-freebsd",
+ "elf32-powerpc-freebsd")
+OUTPUT_ARCH(powerpc)
+ENTRY(__start)
+SEARCH_DIR(/usr/lib);
+PROVIDE (__stack = 0);
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+
+ . = kernbase + SIZEOF_HEADERS;
+ PROVIDE (begin = . - SIZEOF_HEADERS);
+
+ .text :
+ {
+ *(.text)
+ *(.stub)
+ /* .gnu.warning sections are handled specially by elf32.em. */
+ *(.gnu.warning)
+ *(.gnu.linkonce.t*)
+ } =0
+ _etext = .;
+ PROVIDE (etext = .);
+
+ .interp : { *(.interp) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+ .gnu.version : { *(.gnu.version) }
+ .gnu.version_d : { *(.gnu.version_d) }
+ .gnu.version_r : { *(.gnu.version_r) }
+ .rela.text :
+ { *(.rela.text) *(.rela.gnu.linkonce.t*) }
+ .rela.data :
+ { *(.rela.data) *(.rela.gnu.linkonce.d*) }
+ .rela.rodata :
+ { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
+ .rela.got : { *(.rela.got) }
+ .rela.got1 : { *(.rela.got1) }
+ .rela.got2 : { *(.rela.got2) }
+ .rela.ctors : { *(.rela.ctors) }
+ .rela.dtors : { *(.rela.dtors) }
+ .rela.init : { *(.rela.init) }
+ .rela.fini : { *(.rela.fini) }
+ .rela.bss : { *(.rela.bss) }
+ .rela.plt : { *(.rela.plt) }
+ .rela.sdata : { *(.rela.sdata) }
+ .rela.sbss : { *(.rela.sbss) }
+ .rela.sdata2 : { *(.rela.sdata2) }
+ .rela.sbss2 : { *(.rela.sbss2) }
+
+ .init : { *(.init) } =0
+ .fini : { *(.fini) } =0
+ .rodata : { *(.rodata) *(.gnu.linkonce.r*) }
+ .rodata1 : { *(.rodata1) }
+ .sdata2 : { *(.sdata2) }
+ .sbss2 : { *(.sbss2) }
+ /* Adjust the address for the data segment to the next page up. */
+ . = ((. + 0x1000) & ~(0x1000 - 1));
+ .data :
+ {
+ *(.data)
+ *(.gnu.linkonce.d*)
+ CONSTRUCTORS
+ }
+ .data1 : { *(.data1) }
+ .got1 : { *(.got1) }
+ .dynamic : { *(.dynamic) }
+ /* Put .ctors and .dtors next to the .got2 section, so that the pointers
+ get relocated with -mrelocatable. Also put in the .fixup pointers.
+ The current compiler no longer needs this, but keep it around for 2.7.2 */
+ PROVIDE (_GOT2_START_ = .);
+ .got2 : { *(.got2) }
+ PROVIDE (__CTOR_LIST__ = .);
+ .ctors : { *(.ctors) }
+ PROVIDE (__CTOR_END__ = .);
+ PROVIDE (__DTOR_LIST__ = .);
+ .dtors : { *(.dtors) }
+ PROVIDE (__DTOR_END__ = .);
+ PROVIDE (_FIXUP_START_ = .);
+ .fixup : { *(.fixup) }
+ PROVIDE (_FIXUP_END_ = .);
+ PROVIDE (_GOT2_END_ = .);
+ PROVIDE (_GOT_START_ = .);
+ .got : { *(.got) }
+ .got.plt : { *(.got.plt) }
+ PROVIDE (_GOT_END_ = .);
+ /* We want the small data sections together, so single-instruction offsets
+ can access them all, and initialized data all before uninitialized, so
+ we can shorten the on-disk segment size. */
+ .sdata : { *(.sdata) }
+ _edata = .;
+ PROVIDE (edata = .);
+ .sbss :
+ {
+ PROVIDE (__sbss_start = .);
+ *(.sbss)
+ *(.scommon)
+ *(.dynsbss)
+ PROVIDE (__sbss_end = .);
+ }
+ .plt : { *(.plt) }
+ .bss :
+ {
+ PROVIDE (__bss_start = .);
+ *(.dynbss)
+ *(.bss)
+ *(COMMON)
+ }
+ _end = . ;
+ PROVIDE (end = .);
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames) }
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames) }
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info) }
+ .debug_abbrev 0 : { *(.debug_abbrev) }
+ .debug_line 0 : { *(.debug_line) }
+ .debug_frame 0 : { *(.debug_frame) }
+ .debug_str 0 : { *(.debug_str) }
+ .debug_loc 0 : { *(.debug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo) }
+ /* SGI/MIPS DWARF 2 extensions */
+ .debug_weaknames 0 : { *(.debug_weaknames) }
+ .debug_funcnames 0 : { *(.debug_funcnames) }
+ .debug_typenames 0 : { *(.debug_typenames) }
+ .debug_varnames 0 : { *(.debug_varnames) }
+ /* These must appear regardless of . */
+}
+
Modified: projects/powerpcspe/sys/conf/options.powerpc
==============================================================================
--- projects/powerpcspe/sys/conf/options.powerpc Fri Mar 11 20:30:06 2016 (r296679)
+++ projects/powerpcspe/sys/conf/options.powerpc Fri Mar 11 20:43:02 2016 (r296680)
@@ -9,6 +9,7 @@ CELL
POWERPC
POWERPC64
+POWERPCSPE
FPU_EMU
Added: projects/powerpcspe/sys/powerpc/booke/spe.c
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ projects/powerpcspe/sys/powerpc/booke/spe.c Fri Mar 11 20:43:02 2016 (r296680)
@@ -0,0 +1,183 @@
+/*-
+ * Copyright (C) 1996 Wolfgang Solfrank.
+ * Copyright (C) 1996 TooLs GmbH.
+ * All rights reserved.
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-projects
mailing list