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];
/*