From owner-svn-src-projects@freebsd.org Fri Mar 11 20:43:07 2016 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 19F71ACD62E for ; Fri, 11 Mar 2016 20:43:07 +0000 (UTC) (envelope-from jhibbits@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id D72BEED2; Fri, 11 Mar 2016 20:43:06 +0000 (UTC) (envelope-from jhibbits@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u2BKh55C055574; Fri, 11 Mar 2016 20:43:05 GMT (envelope-from jhibbits@FreeBSD.org) Received: (from jhibbits@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u2BKh2An055541; Fri, 11 Mar 2016 20:43:02 GMT (envelope-from jhibbits@FreeBSD.org) Message-Id: <201603112043.u2BKh2An055541@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jhibbits set sender to jhibbits@FreeBSD.org using -f From: Justin Hibbits Date: Fri, 11 Mar 2016 20:43:02 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: 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... X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 11 Mar 2016 20:43:07 -0000 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@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 #include +#include #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 +#include #include #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 +#include #include #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 +#include #include #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 +#include #include #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 +#include #include #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 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 ***