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