Module Name:    src
Committed By:   matt
Date:           Fri Jan 11 13:55:26 UTC 2013

Modified Files:
        src/lib/libc/arch/arm: Makefile.inc
        src/lib/libc/arch/arm/gen: _setjmp.S setjmp.S
        src/lib/libc/arch/arm/hardfloat: fpgetmask.S fpgetround.c fpgetsticky.S
            fpsetmask.S fpsetround.c fpsetsticky.S
        src/lib/libc/compat/arch/arm/gen: compat_setjmp.S

Log Message:
Remove all FPA code.
Support VFP for hard float
Allow MKSOFTFLOAT=no


To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.17 src/lib/libc/arch/arm/Makefile.inc
cvs rdiff -u -r1.7 -r1.8 src/lib/libc/arch/arm/gen/_setjmp.S
cvs rdiff -u -r1.9 -r1.10 src/lib/libc/arch/arm/gen/setjmp.S
cvs rdiff -u -r1.5 -r1.6 src/lib/libc/arch/arm/hardfloat/fpgetmask.S \
    src/lib/libc/arch/arm/hardfloat/fpgetround.c \
    src/lib/libc/arch/arm/hardfloat/fpgetsticky.S \
    src/lib/libc/arch/arm/hardfloat/fpsetmask.S \
    src/lib/libc/arch/arm/hardfloat/fpsetsticky.S
cvs rdiff -u -r1.6 -r1.7 src/lib/libc/arch/arm/hardfloat/fpsetround.c
cvs rdiff -u -r1.1 -r1.2 src/lib/libc/compat/arch/arm/gen/compat_setjmp.S

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libc/arch/arm/Makefile.inc
diff -u src/lib/libc/arch/arm/Makefile.inc:1.16 src/lib/libc/arch/arm/Makefile.inc:1.17
--- src/lib/libc/arch/arm/Makefile.inc:1.16	Thu Sep 27 11:20:20 2012
+++ src/lib/libc/arch/arm/Makefile.inc	Fri Jan 11 13:55:25 2013
@@ -1,22 +1,26 @@
-# $NetBSD: Makefile.inc,v 1.16 2012/09/27 11:20:20 skrll Exp $
+# $NetBSD: Makefile.inc,v 1.17 2013/01/11 13:55:25 matt Exp $
 
 .include <bsd.own.mk>
 
 SRCS+=	__aeabi_read_tp.S __sigaction14_sigtramp.c __sigtramp2.S
 
 CPPFLAGS += -I.
-CPPFLAGS += -DSOFTFLOAT
 
 .if ${MACHINE_ARCH} == "earm" || ${MACHINE_ARCH} == "earmeb"
 SRCS+=	__aeabi_ldivmod.S __aeabi_uldivmod.S
 SRCS+=	__aeabi_lcmp.c __aeabi_ulcmp.c
+#SRCS+=	__aeabi_idiv0.c __aeabi_ldiv0.c
 SRCS+=	fixunsgen_ieee754.c fixunssfsi_ieee754.c
 SRCS+=	fixunsgen64_ieee754.c fixunsdfsi_ieee754.c
 .endif
 
+.if ${MKSOFTFLOAT} != "no"
+CPPFLAGS += -DSOFTFLOAT
+
 # for earm, use the 64-bit softfloat
 .if ${MACHINE_ARCH} == "arm" || ${MACHINE_ARCH} == "armeb"
 SOFTFLOAT_BITS=32
 .endif
 
 .include <softfloat/Makefile.inc>
+.endif

Index: src/lib/libc/arch/arm/gen/_setjmp.S
diff -u src/lib/libc/arch/arm/gen/_setjmp.S:1.7 src/lib/libc/arch/arm/gen/_setjmp.S:1.8
--- src/lib/libc/arch/arm/gen/_setjmp.S:1.7	Wed Aug  1 06:02:13 2012
+++ src/lib/libc/arch/arm/gen/_setjmp.S	Fri Jan 11 13:55:25 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: _setjmp.S,v 1.7 2012/08/01 06:02:13 matt Exp $	*/
+/*	$NetBSD: _setjmp.S,v 1.8 2013/01/11 13:55:25 matt Exp $	*/
 
 /*
  * Copyright (c) 1997 Mark Brinicombe
@@ -32,6 +32,10 @@
  * SUCH DAMAGE.
  */
 
+#if !defined(__SOFTFP__) && !defined(__VFP_FP__)
+#error FPA is not supported anymore
+#endif
+
 #include <machine/asm.h>
 #include <machine/setjmp.h>
 
@@ -50,18 +54,16 @@
 
 ENTRY(_setjmp)
 	ldr	r1, .L_setjmp_magic
-	str	r1, [r0], #4
-#ifdef SOFTFLOAT
-	add	r0, r0, #52
-#elif defined(__VFP_FP__)
-#error _setjmp VFP support missing
-#else
-	/* Store fp registers */
-	sfm	f4, 4, [r0], #48
-	/* Store fpsr */
-	rfs	r1
-	str	r1, [r0], #0x0004
-#endif	/* SOFTFLOAT */
+	str	r1, [r0]
+
+#ifndef __SOFTFP__
+	add	r1, r0, #(_JB_REG_D8 * 4)
+	vstmia	r1, {d8-d15}
+	vmrs	r1, fpscr
+	str	r1, [r0, #(_JB_REG_FPSCR * 4)]
+#endif
+
+	add	r0, r0, #(_JB_REG_R4 * 4)
 	/* Store integer registers */
         stmia	r0, {r4-r14}
 
@@ -69,25 +71,26 @@ ENTRY(_setjmp)
         RET
 
 .L_setjmp_magic:
+#ifdef __SOFTFP__
 	.word	_JB_MAGIC__SETJMP
+#else
+	.word	_JB_MAGIC__SETJMP_VFP
+#endif
 
 ENTRY(_longjmp)
 	ldr	r2, .L_setjmp_magic
-	ldr	r3, [r0], #4
+	ldr	r3, [r0]
 	teq	r2, r3
 	bne	botch
 
-#ifdef SOFTFLOAT
-	add	r0, r0, #52
-#elif defined(__VFP_FP__)
-#error _longjmp VFP support missing
-#else
-	/* Restore fp registers */
-	lfm	f4, 4, [r0], #48
-	/* Restore fpsr */
-	ldr	r4, [r0], #0x0004
-	wfs	r4
-#endif	/* SOFTFLOAT */
+#ifndef __SOFTFP__
+	add	r1, r0, #(_JB_REG_D8 * 4)
+	vldmia	r1, {d8-d15}
+	ldr	r1, [r0, #(_JB_REG_FPSCR * 4)]
+	vmsr	fpscr, r1
+#endif
+
+	add	r0, r0, #(_JB_REG_R4 * 4)
        	/* Restore integer registers */
         ldmia	r0, {r4-r14}
 

Index: src/lib/libc/arch/arm/gen/setjmp.S
diff -u src/lib/libc/arch/arm/gen/setjmp.S:1.9 src/lib/libc/arch/arm/gen/setjmp.S:1.10
--- src/lib/libc/arch/arm/gen/setjmp.S:1.9	Wed Aug  1 06:02:13 2012
+++ src/lib/libc/arch/arm/gen/setjmp.S	Fri Jan 11 13:55:25 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: setjmp.S,v 1.9 2012/08/01 06:02:13 matt Exp $	*/
+/*	$NetBSD: setjmp.S,v 1.10 2013/01/11 13:55:25 matt Exp $	*/
 
 /*
  * Copyright (c) 1997 Mark Brinicombe
@@ -32,6 +32,10 @@
  * SUCH DAMAGE.
  */
 
+#if !defined(__SOFTFP__) && !defined(__VFP_FP__)
+#error FPA is not supported anymore
+#endif
+
 #include <machine/asm.h>
 #include <machine/setjmp.h>
 
@@ -55,26 +59,27 @@ ENTRY(__setjmp14)
 	ldmfd	sp!, {r0-r2, r14}
 
 	ldr	r1, .Lsetjmp_magic
-	str	r1, [r0], #4
+	str	r1, [r0]
+
+#ifndef __SOFTFP__
+	add	r1, r0, #(_JB_REG_D8 * 4)
+	vstmia	r1, {d8-d15}
+	vmrs	r1, fpscr
+	str	r1, [r0, #(_JB_REG_FPSCR * 4)]
+#endif /* !__SOFTFP__ */
 
-#ifdef SOFTFLOAT
-	add	r0, r0, #52
-#elif defined(__VFP_FP__)
-#error __setjmp14 VFP support missing
-#else
-	/* Store fp registers */
-	sfm	f4, 4, [r0], #48
-	/* Store fpsr */
-	rfs	r1
-	str	r1, [r0], #0x0004
-#endif	/*SOFTFLOAT*/
 	/* Store integer registers */
+	add	r0, r0, #(_JB_REG_R4 * 4)
         stmia	r0, {r4-r14}
         mov	r0, #0x00000000
         RET
 
 .Lsetjmp_magic:
+#ifdef __SOFTFP__
 	.word	_JB_MAGIC_SETJMP
+#else
+	.word	_JB_MAGIC_SETJMP_VFP
+#endif
 
 
 ENTRY(__longjmp14)
@@ -91,18 +96,14 @@ ENTRY(__longjmp14)
 	bl	PIC_SYM(_C_LABEL(__sigprocmask14), PLT)
 	ldmfd	sp!, {r0-r2, r14}
 
-	add	r0, r0, #4
-#ifdef SOFTFLOAT
-	add	r0, r0, #52
-#elif defined(__VFP_FP__)
-#error __longjmp14 VFP support missing
-#else
-	/* Restore fp registers */
-	lfm	f4, 4, [r0], #48
-	/* Restore FPSR */
-	ldr	r4, [r0], #0x0004
-	wfs	r4
-#endif	/* SOFTFLOAT */
+#ifndef __SOFTFP__
+	add	r1, r0, #(_JB_REG_D8 * 4)
+	vldmia	r1, {d8-d15}
+	ldr	r1, [r0, #(_JB_REG_FPSCR * 4)]
+	vmsr	fpscr, r1
+#endif /* !__SOFTFP__ */
+
+	add	r0, r0, #(_JB_REG_R4 * 4)
 	/* Restore integer registers */
         ldmia	r0, {r4-r14}
 

Index: src/lib/libc/arch/arm/hardfloat/fpgetmask.S
diff -u src/lib/libc/arch/arm/hardfloat/fpgetmask.S:1.5 src/lib/libc/arch/arm/hardfloat/fpgetmask.S:1.6
--- src/lib/libc/arch/arm/hardfloat/fpgetmask.S:1.5	Wed Aug  1 06:10:21 2012
+++ src/lib/libc/arch/arm/hardfloat/fpgetmask.S	Fri Jan 11 13:55:26 2013
@@ -1,9 +1,12 @@
-/*	$NetBSD: fpgetmask.S,v 1.5 2012/08/01 06:10:21 matt Exp $	*/
+/*	$NetBSD: fpgetmask.S,v 1.6 2013/01/11 13:55:26 matt Exp $	*/
 
-/*
- * Copyright (c) 1996 Mark Brinicombe
+/*-
+ * Copyright (c) 2013 The NetBSD Foundation, Inc.
  * All rights reserved.
  *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Matt Thomas of 3am Software Foundry.
+ *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
@@ -12,28 +15,25 @@
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *	This product includes software developed by Mark Brinicombe
- *	for the NetBSD project.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
  *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <machine/asm.h>
+#ifndef __VFP_FP__
+#error FPA is not supported anymore
+#endif
+#include <arm/asm.h>
+#include <arm/vfpreg.h>
 
 /*
  * Return the current FP exception enable mask
@@ -41,15 +41,12 @@
 
 #ifdef WEAK_ALIAS
 WEAK_ALIAS(fpgetmask, _fpgetmask)
-ENTRY(_fpgetmask)
-#else
-ENTRY(fpgetmask)
+#define fpgetmask	_fpgetmask
 #endif
-#ifdef __VFP_FP__
-#error _fpgetmask VFP support missing
-#else
-	rfs	r0
-	mov	r0, r0, lsr #16
-	and	r0, r0, #0x1f
+
+ENTRY(fpgetmask)
+	mrc	p10, 7, r0, c1, c0, 0
+	and	r0, r0, #VFP_FPSCR_ESUM
+	mov	r0, r0, lsr #8
 	RET
-#endif
+END(fpgetmask)
Index: src/lib/libc/arch/arm/hardfloat/fpgetround.c
diff -u src/lib/libc/arch/arm/hardfloat/fpgetround.c:1.5 src/lib/libc/arch/arm/hardfloat/fpgetround.c:1.6
--- src/lib/libc/arch/arm/hardfloat/fpgetround.c:1.5	Sun Jun 24 15:26:02 2012
+++ src/lib/libc/arch/arm/hardfloat/fpgetround.c	Fri Jan 11 13:55:26 2013
@@ -1,9 +1,12 @@
-/*	$NetBSD: fpgetround.c,v 1.5 2012/06/24 15:26:02 christos Exp $	*/
+/*	$NetBSD: fpgetround.c,v 1.6 2013/01/11 13:55:26 matt Exp $	*/
 
-/*
- * Copyright (c) 1996 Mark Brinicombe
+/*-
+ * Copyright (c) 2013 The NetBSD Foundation, Inc.
  * All rights reserved.
  *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Matt Thomas of 3am Software Foundry.
+ *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
@@ -12,28 +15,27 @@
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *      This product includes software developed by Mark Brinicombe
- *	for the NetBSD Project.
- * 4. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission
  *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
  */
 
+#ifndef __VFP_FP__
+#error FPA is not supported anymore
+#endif
+
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: fpgetround.c,v 1.5 2012/06/24 15:26:02 christos Exp $");
+__RCSID("$NetBSD: fpgetround.c,v 1.6 2013/01/11 13:55:26 matt Exp $");
 #endif /* LIBC_SCCS and not lint */
 
 #include "namespace.h"
@@ -41,32 +43,24 @@ __RCSID("$NetBSD: fpgetround.c,v 1.5 201
 #include <sys/types.h>
 #include <ieeefp.h>
 
+#include <arm/vfpreg.h>
+
 #ifdef __weak_alias
 __weak_alias(fpgetround,_fpgetround)
 #endif
 
 /*
  * Return the current FP rounding mode
- *
- * ok all we need to do is return the current FP rounding mode
- *
- * HOWEVER:
- * The ARM FPA codes the rounding mode into the actual FP instructions
- * so there is no such thing as a global rounding mode.
- * The default is round to nearest if rounding is not explicitly specified.
- * FP instructions generated by GCC will not explicitly specify a rounding
- * mode.
- *
- * So the best we can do it to return the rounding mode FP instructions
- * use if rounding is not specified which is round to nearest.
- *
- * This could change in the future with new floating point emulators or
- * soft float FP libraries.
  */
 
 fp_rnd
 fpgetround(void)
 {
-
-	return(FP_RN);
+	__CTASSERT(__SHIFTOUT(VFP_FPSCR_RN, VFP_FPSCR_RMODE) == FP_RN);
+	__CTASSERT(__SHIFTOUT(VFP_FPSCR_RP, VFP_FPSCR_RMODE) == FP_RP);
+	__CTASSERT(__SHIFTOUT(VFP_FPSCR_RM, VFP_FPSCR_RMODE) == FP_RM);
+	__CTASSERT(__SHIFTOUT(VFP_FPSCR_RZ, VFP_FPSCR_RMODE) == FP_RZ);
+	uint32_t fpscr; 
+	__asm __volatile("vmrs %0, fpscr" : "=r" (fpscr));
+	return __SHIFTOUT(fpscr, VFP_FPSCR_RMODE);
 }
Index: src/lib/libc/arch/arm/hardfloat/fpgetsticky.S
diff -u src/lib/libc/arch/arm/hardfloat/fpgetsticky.S:1.5 src/lib/libc/arch/arm/hardfloat/fpgetsticky.S:1.6
--- src/lib/libc/arch/arm/hardfloat/fpgetsticky.S:1.5	Wed Aug  1 06:10:21 2012
+++ src/lib/libc/arch/arm/hardfloat/fpgetsticky.S	Fri Jan 11 13:55:26 2013
@@ -1,9 +1,12 @@
-/*	$NetBSD: fpgetsticky.S,v 1.5 2012/08/01 06:10:21 matt Exp $	*/
+/*	$NetBSD: fpgetsticky.S,v 1.6 2013/01/11 13:55:26 matt Exp $	*/
 
-/*
- * Copyright (c) 1996 Mark Brinicombe
+/*-
+ * Copyright (c) 2013 The NetBSD Foundation, Inc.
  * All rights reserved.
  *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Matt Thomas of 3am Software Foundry.
+ *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
@@ -12,28 +15,25 @@
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *	This product includes software developed by Mark Brinicombe
- *	for the NetBSD project.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
  *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
  */
+#ifndef __VFP_FP__
+#error FPA is not supported anymore
+#endif
 
-#include <machine/asm.h>
+#include <arm/asm.h>
+#include <arm/vfpreg.h>
 
 /*
  * Return the current FP cumulative flags
@@ -41,14 +41,11 @@
 
 #ifdef WEAK_ALIAS
 WEAK_ALIAS(fpgetsticky, _fpgetsticky)
-ENTRY(_fpgetsticky)
-#else
-ENTRY(fpgetsticky)
+#define	fpgetsticky	_fpgetsticky
 #endif
-#ifdef __VFP_FP__
-#error _fpgetsticky VFP support missing
-#else
-	rfs	r0
-	and	r0, r0, #0x1f
+
+ENTRY(fpgetsticky)
+	vmrs	r0, fpscr
+	and	r0, r0, #VFP_FPSCR_CSUM
 	RET
-#endif
+END(fpgetsticky)
Index: src/lib/libc/arch/arm/hardfloat/fpsetmask.S
diff -u src/lib/libc/arch/arm/hardfloat/fpsetmask.S:1.5 src/lib/libc/arch/arm/hardfloat/fpsetmask.S:1.6
--- src/lib/libc/arch/arm/hardfloat/fpsetmask.S:1.5	Wed Aug  1 06:10:21 2012
+++ src/lib/libc/arch/arm/hardfloat/fpsetmask.S	Fri Jan 11 13:55:26 2013
@@ -1,9 +1,12 @@
-/*	$NetBSD: fpsetmask.S,v 1.5 2012/08/01 06:10:21 matt Exp $	*/
+/*	$NetBSD: fpsetmask.S,v 1.6 2013/01/11 13:55:26 matt Exp $	*/
 
-/*
- * Copyright (c) 1996 Mark Brinicombe
+/*-
+ * Copyright (c) 2013 The NetBSD Foundation, Inc.
  * All rights reserved.
  *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Matt Thomas of 3am Software Foundry.
+ *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
@@ -12,28 +15,26 @@
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *	This product includes software developed by Mark Brinicombe
- *	for the NetBSD project.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
  *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <machine/asm.h>
+#ifndef __VFP_FP__
+#error FPA is not supported anymore
+#endif
+
+#include <arm/asm.h>
+#include <arm/vfpreg.h>
 
 /*
  * Set the current FP exception enable mask
@@ -41,18 +42,17 @@
 
 #ifdef WEAK_ALIAS
 WEAK_ALIAS(fpsetmask, _fpsetmask)
-ENTRY(_fpsetmask)
-#else
-ENTRY(fpsetmask)
+#define	fpsetmask	_fpsetmask
 #endif
-#ifdef __VFP_FP__
-#error _fpsetmask VFP support missing
-#else
-	rfs	r1
-	bic	r1, r1, #0x001f0000
-	and	r0, r0, #0x0000001f
-	orr	r0, r1, r0, lsl #16
-	wfs	r0
-	mov	r0, r1, lsr #16		/* Return old mask */
+
+ENTRY(fpsetmask)
+	and	r2, r0, #VFP_FPSCR_CSUM
+	vmrs	r1, fpscr
+	mov	r0, r1, lsr #8		/* Return old mask */
+	bic	r1, r1, #VFP_FPSCR_ESUM
+	orr	r1, r1, r2, lsl #8
+	vmsr	fpscr, r1
+	mcr	p10, 7, r1, c1, c0, 0
+	and	r0, r0, #VFP_FPSCR_CSUM
 	RET
-#endif
+END(fpsetmask)
Index: src/lib/libc/arch/arm/hardfloat/fpsetsticky.S
diff -u src/lib/libc/arch/arm/hardfloat/fpsetsticky.S:1.5 src/lib/libc/arch/arm/hardfloat/fpsetsticky.S:1.6
--- src/lib/libc/arch/arm/hardfloat/fpsetsticky.S:1.5	Wed Aug  1 06:10:21 2012
+++ src/lib/libc/arch/arm/hardfloat/fpsetsticky.S	Fri Jan 11 13:55:26 2013
@@ -1,9 +1,12 @@
-/*	$NetBSD: fpsetsticky.S,v 1.5 2012/08/01 06:10:21 matt Exp $	*/
+/*	$NetBSD: fpsetsticky.S,v 1.6 2013/01/11 13:55:26 matt Exp $	*/
 
-/*
- * Copyright (c) 1996 Mark Brinicombe
+/*-
+ * Copyright (c) 2013 The NetBSD Foundation, Inc.
  * All rights reserved.
  *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Matt Thomas of 3am Software Foundry.
+ *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
@@ -12,28 +15,26 @@
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *	This product includes software developed by Mark Brinicombe
- *	for the NetBSD project.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
  *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <machine/asm.h>
+#ifndef __VFP_FP__
+#error FPA is not supported anymore
+#endif
+
+#include <arm/asm.h>
+#include <arm/vfpreg.h>
 
 /*
  * Set the current FP cumulative flags
@@ -41,18 +42,15 @@
 
 #ifdef WEAK_ALIAS
 WEAK_ALIAS(fpsetsticky, _fpsetsticky)
-ENTRY(_fpsetsticky)
-#else
-ENTRY(fpsetsticky)
+#define	fpsetsticky	_fpsetsticky
 #endif
-#ifdef __VFP_FP__
-#error _fpsetsticky VFP support missing
-#else
-	rfs	r1
-	bic	r1, r1, #0x1f
-	and	r0, r0, #0x1f
-	orr	r0, r1, r0
-	wfs	r0
-	mov	r0, r1			/* Return old mask */
+
+ENTRY(fpsetsticky)
+	and	r1, r0, #VFP_FPSCR_CSUM
+	vmrs	r0, fpscr
+	bic	r2, r0, #VFP_FPSCR_CSUM
+	orr	r1, r1, r2
+	vmsr	fpscr, r1
+	and	r0, r0, #VFP_FPSCR_CSUM
 	RET
-#endif
+END(fpsetsticky)

Index: src/lib/libc/arch/arm/hardfloat/fpsetround.c
diff -u src/lib/libc/arch/arm/hardfloat/fpsetround.c:1.6 src/lib/libc/arch/arm/hardfloat/fpsetround.c:1.7
--- src/lib/libc/arch/arm/hardfloat/fpsetround.c:1.6	Sat Feb 25 02:28:55 2006
+++ src/lib/libc/arch/arm/hardfloat/fpsetround.c	Fri Jan 11 13:55:26 2013
@@ -1,9 +1,12 @@
-/*	$NetBSD: fpsetround.c,v 1.6 2006/02/25 02:28:55 wiz Exp $	*/
+/*	$NetBSD: fpsetround.c,v 1.7 2013/01/11 13:55:26 matt Exp $	*/
 
-/*
- * Copyright (c) 1996 Mark Brinicombe
+/*-
+ * Copyright (c) 2013 The NetBSD Foundation, Inc.
  * All rights reserved.
  *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Matt Thomas of 3am Software Foundry.
+ *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
@@ -12,28 +15,27 @@
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *      This product includes software developed by Mark Brinicombe
- *	for the NetBSD Project.
- * 4. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission
  *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
  */
 
+#ifndef __VFP_FP__
+#error FPA is not supported anymore
+#endif
+
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: fpsetround.c,v 1.6 2006/02/25 02:28:55 wiz Exp $");
+__RCSID("$NetBSD: fpsetround.c,v 1.7 2013/01/11 13:55:26 matt Exp $");
 #endif /* LIBC_SCCS and not lint */
 
 #include "namespace.h"
@@ -47,24 +49,19 @@ __weak_alias(fpsetround,_fpsetround)
 
 /*
  * Return the current FP rounding mode
- *
- * ok all we need to do is return the current FP rounding mode
- *
- * HOWEVER:
- * The ARM FPA codes the rounding mode into the actual FP instructions
- * so there is no such thing as a global rounding mode.
- * The default is round to nearest if rounding is not explicitly specified.
- * FP instructions generated by GCC will not explicitly specify a rounding
- * mode.
- *
- * All we can do is abort if they ask for anything else.
  */
 
 fp_rnd
-fpsetround(fp_rnd rnd_dir)
+fpsetround(fp_rnd new_rnd)
 {
-
-	if (rnd_dir != FP_RN)
-		abort();
-	return (FP_RN);
+	__CTASSERT(__SHIFTOUT(VFP_FPSCR_RN, VFP_FPSCR_RMODE) == FP_RN);
+	__CTASSERT(__SHIFTOUT(VFP_FPSCR_RP, VFP_FPSCR_RMODE) == FP_RP);
+	__CTASSERT(__SHIFTOUT(VFP_FPSCR_RM, VFP_FPSCR_RMODE) == FP_RM);
+	__CTASSERT(__SHIFTOUT(VFP_FPSCR_RZ, VFP_FPSCR_RMODE) == FP_RZ);
+	uint32_t fpscr; 
+	__asm __volatile("vmrs %0, fpscr" : "=r" (fpscr));
+	fp_rnd old_rnd = __SHIFTOUT(fpscr, VFP_FPSCR_RMODE);
+	fpscr ^= __SHIFTIN(new_rnd ^ old_rnd, VFP_FPSCR_RMODE);
+	__asm __volatile("vmsr fpscr, %0" :: "r" (fpscr));
+	return old_rnd;
 }

Index: src/lib/libc/compat/arch/arm/gen/compat_setjmp.S
diff -u src/lib/libc/compat/arch/arm/gen/compat_setjmp.S:1.1 src/lib/libc/compat/arch/arm/gen/compat_setjmp.S:1.2
--- src/lib/libc/compat/arch/arm/gen/compat_setjmp.S:1.1	Sun Oct 16 17:27:50 2005
+++ src/lib/libc/compat/arch/arm/gen/compat_setjmp.S	Fri Jan 11 13:55:26 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: compat_setjmp.S,v 1.1 2005/10/16 17:27:50 christos Exp $	*/
+/*	$NetBSD: compat_setjmp.S,v 1.2 2013/01/11 13:55:26 matt Exp $	*/
 
 /*
  * Copyright (c) 1997 Mark Brinicombe
@@ -56,21 +56,13 @@ ENTRY(setjmp)
 	ldmfd	sp!, {r0, r14}
 
 	/* Store signal mask */
-	str	r1, [r0, #(25 * 4)]
+	str	r1, [r0, #(_JB_SIGMASK * 4)]
 
 	ldr	r1, .Lsetjmp_magic
-	str	r1, [r0], #4
+	str	r1, [r0]
 
-#ifdef SOFTFLOAT
-	add	r0, r0, #52
-#else
-	/* Store fp registers */
-	sfm	f4, 4, [r0], #48
-	/* Store fpsr */
-	rfs	r1
-	str	r1, [r0], #0x0004
-#endif	/*SOFTFLOAT*/
 	/* Store integer registers */
+	add	r0, r0, #(_JB_REG_R4 * 4)
         stmia	r0, {r4-r14}
         mov	r0, #0x00000000
         RET
@@ -86,7 +78,7 @@ ENTRY(longjmp)
 	bne	botch
 
 	/* Fetch signal mask */
-	ldr	r2, [r0, #(25 * 4)]
+	ldr	r2, [r0, #(_JB_SIGMASK * 4)]
 
 	/* Set signal mask */
 	stmfd	sp!, {r0, r1, r14}
@@ -98,17 +90,8 @@ ENTRY(longjmp)
 	add	sp, sp, #4	/* unalign the stack */
 	ldmfd	sp!, {r0, r1, r14} 
 
-	add	r0, r0, #4
-#ifdef SOFTFLOAT
-	add	r0, r0, #52
-#else
-	/* Restore fp registers */
-	lfm	f4, 4, [r0], #48
-	/* Restore FPSR */
-	ldr	r4, [r0], #0x0004
-	wfs	r4
-#endif	/* SOFTFLOAT */
 	/* Restore integer registers */
+	add	r0, r0, #(_JB_REG_R4 * 4)
         ldmia	r0, {r4-r14}
 
 	/* Validate sp and r14 */

Reply via email to