Module Name:    src
Committed By:   joerg
Date:           Tue Aug 12 20:27:10 UTC 2014

Modified Files:
        src/sys/arch/powerpc/fpu: fpu_emu.c
        src/sys/arch/powerpc/include: mcontext.h reg.h
        src/sys/arch/powerpc/powerpc: trap.c

Log Message:
Avoid unncessary use of double in the kernel. With this change,
a LLVM build kernel fully works on TWRP1025.


To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.17 src/sys/arch/powerpc/fpu/fpu_emu.c
cvs rdiff -u -r1.16 -r1.17 src/sys/arch/powerpc/include/mcontext.h
cvs rdiff -u -r1.10 -r1.11 src/sys/arch/powerpc/include/reg.h
cvs rdiff -u -r1.149 -r1.150 src/sys/arch/powerpc/powerpc/trap.c

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

Modified files:

Index: src/sys/arch/powerpc/fpu/fpu_emu.c
diff -u src/sys/arch/powerpc/fpu/fpu_emu.c:1.16 src/sys/arch/powerpc/fpu/fpu_emu.c:1.17
--- src/sys/arch/powerpc/fpu/fpu_emu.c:1.16	Mon Jul 23 04:13:06 2012
+++ src/sys/arch/powerpc/fpu/fpu_emu.c	Tue Aug 12 20:27:10 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpu_emu.c,v 1.16 2012/07/23 04:13:06 matt Exp $ */
+/*	$NetBSD: fpu_emu.c,v 1.17 2014/08/12 20:27:10 joerg Exp $ */
 
 /*
  * Copyright 2001 Wasabi Systems, Inc.
@@ -76,7 +76,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.16 2012/07/23 04:13:06 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fpu_emu.c,v 1.17 2014/08/12 20:27:10 joerg Exp $");
 
 #include "opt_ddb.h"
 
@@ -324,7 +324,7 @@ fpu_execute(struct trapframe *tf, struct
 		 * Convert to/from single if needed, calculate addr,
 		 * and update index reg if needed.
 		 */
-		double buf;
+		uint64_t buf;
 		size_t size = sizeof(float);
 		int store, update;
 

Index: src/sys/arch/powerpc/include/mcontext.h
diff -u src/sys/arch/powerpc/include/mcontext.h:1.16 src/sys/arch/powerpc/include/mcontext.h:1.17
--- src/sys/arch/powerpc/include/mcontext.h:1.16	Thu Jul 24 18:19:13 2014
+++ src/sys/arch/powerpc/include/mcontext.h	Tue Aug 12 20:27:10 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: mcontext.h,v 1.16 2014/07/24 18:19:13 joerg Exp $	*/
+/*	$NetBSD: mcontext.h,v 1.17 2014/08/12 20:27:10 joerg Exp $	*/
 
 /*-
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -86,7 +86,11 @@ typedef	__greg_t	__gregset_t[_NGREG];
 #define	_REG_MQ		38		/* MQ Register (POWER only) */
 
 typedef struct {
+#ifdef _KERNEL
+	unsigned long long	__fpu_regs[32];	/* FP0-31 */
+#else
 	double		__fpu_regs[32];	/* FP0-31 */
+#endif
 	unsigned int	__fpu_fpscr;	/* FP Status and Control Register */
 	unsigned int	__fpu_valid;	/* Set together with _UC_FPU */
 } __fpregset_t;

Index: src/sys/arch/powerpc/include/reg.h
diff -u src/sys/arch/powerpc/include/reg.h:1.10 src/sys/arch/powerpc/include/reg.h:1.11
--- src/sys/arch/powerpc/include/reg.h:1.10	Tue Jan 18 01:02:54 2011
+++ src/sys/arch/powerpc/include/reg.h	Tue Aug 12 20:27:10 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: reg.h,v 1.10 2011/01/18 01:02:54 matt Exp $	*/
+/*	$NetBSD: reg.h,v 1.11 2014/08/12 20:27:10 joerg Exp $	*/
 
 #ifndef _POWERPC_REG_H_
 #define _POWERPC_REG_H_
@@ -58,8 +58,13 @@ struct reg {				/* base registers */
 };
 
 struct fpreg {				/* Floating Point registers */
+#ifdef _KERNEL
+	uint64_t fpreg[32];
+	uint64_t fpscr;			/* Status and Control Register */
+#else
 	double fpreg[32];
 	double fpscr;			/* Status and Control Register */
+#endif
 };
 
 struct vreg {				/* Vector registers */

Index: src/sys/arch/powerpc/powerpc/trap.c
diff -u src/sys/arch/powerpc/powerpc/trap.c:1.149 src/sys/arch/powerpc/powerpc/trap.c:1.150
--- src/sys/arch/powerpc/powerpc/trap.c:1.149	Mon Mar  3 15:36:36 2014
+++ src/sys/arch/powerpc/powerpc/trap.c	Tue Aug 12 20:27:10 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: trap.c,v 1.149 2014/03/03 15:36:36 macallan Exp $	*/
+/*	$NetBSD: trap.c,v 1.150 2014/08/12 20:27:10 joerg Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996 Wolfgang Solfrank.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.149 2014/03/03 15:36:36 macallan Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.150 2014/08/12 20:27:10 joerg Exp $");
 
 #include "opt_altivec.h"
 #include "opt_ddb.h"
@@ -736,7 +736,7 @@ fix_unaligned(struct lwp *l, struct trap
 			struct pcb * const pcb = lwp_getpcb(l);
 			const int reg = EXC_ALI_RST(tf->tf_dsisr);
 			const int a_reg = EXC_ALI_RA(tf->tf_dsisr);
-			double * const fpreg = &pcb->pcb_fpu.fpreg[reg];
+			uint64_t * const fpreg = &pcb->pcb_fpu.fpreg[reg];
 			register_t* a_reg_addr = &tf->tf_fixreg[a_reg];
 
 			/*
@@ -782,7 +782,7 @@ fix_unaligned(struct lwp *l, struct trap
 			struct pcb * const pcb = lwp_getpcb(l);
 			const int reg = EXC_ALI_RST(tf->tf_dsisr);
 			const int a_reg = EXC_ALI_RA(tf->tf_dsisr);
-			double * const fpreg = &pcb->pcb_fpu.fpreg[reg];
+			uint64_t * const fpreg = &pcb->pcb_fpu.fpreg[reg];
 			register_t* a_reg_addr = &tf->tf_fixreg[a_reg];
 
 			/*

Reply via email to