MIPS: math-emu: Inline fpu_emulator_init_fpu()
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
@@ -17,6 +17,7 @@
|
|||||||
#include <asm/mipsregs.h>
|
#include <asm/mipsregs.h>
|
||||||
#include <asm/cpu.h>
|
#include <asm/cpu.h>
|
||||||
#include <asm/cpu-features.h>
|
#include <asm/cpu-features.h>
|
||||||
|
#include <asm/fpu_emulator.h>
|
||||||
#include <asm/hazards.h>
|
#include <asm/hazards.h>
|
||||||
#include <asm/processor.h>
|
#include <asm/processor.h>
|
||||||
#include <asm/current.h>
|
#include <asm/current.h>
|
||||||
@@ -28,7 +29,6 @@
|
|||||||
struct sigcontext;
|
struct sigcontext;
|
||||||
struct sigcontext32;
|
struct sigcontext32;
|
||||||
|
|
||||||
extern void fpu_emulator_init_fpu(void);
|
|
||||||
extern void _init_fpu(void);
|
extern void _init_fpu(void);
|
||||||
extern void _save_fp(struct task_struct *);
|
extern void _save_fp(struct task_struct *);
|
||||||
extern void _restore_fp(struct task_struct *);
|
extern void _restore_fp(struct task_struct *);
|
||||||
@@ -156,15 +156,16 @@ static inline int init_fpu(void)
|
|||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
preempt_disable();
|
preempt_disable();
|
||||||
|
|
||||||
if (cpu_has_fpu) {
|
if (cpu_has_fpu) {
|
||||||
ret = __own_fpu();
|
ret = __own_fpu();
|
||||||
if (!ret)
|
if (!ret)
|
||||||
_init_fpu();
|
_init_fpu();
|
||||||
} else {
|
} else
|
||||||
fpu_emulator_init_fpu();
|
fpu_emulator_init_fpu();
|
||||||
}
|
|
||||||
|
|
||||||
preempt_enable();
|
preempt_enable();
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -23,9 +23,12 @@
|
|||||||
#ifndef _ASM_FPU_EMULATOR_H
|
#ifndef _ASM_FPU_EMULATOR_H
|
||||||
#define _ASM_FPU_EMULATOR_H
|
#define _ASM_FPU_EMULATOR_H
|
||||||
|
|
||||||
|
#include <linux/sched.h>
|
||||||
#include <asm/break.h>
|
#include <asm/break.h>
|
||||||
|
#include <asm/thread_info.h>
|
||||||
#include <asm/inst.h>
|
#include <asm/inst.h>
|
||||||
#include <asm/local.h>
|
#include <asm/local.h>
|
||||||
|
#include <asm/processor.h>
|
||||||
|
|
||||||
#ifdef CONFIG_DEBUG_FS
|
#ifdef CONFIG_DEBUG_FS
|
||||||
|
|
||||||
@@ -71,4 +74,17 @@ int mm_isBranchInstr(struct pt_regs *regs, struct mm_decoded_insn dec_insn,
|
|||||||
*/
|
*/
|
||||||
#define BREAK_MATH (0x0000000d | (BRK_MEMU << 16))
|
#define BREAK_MATH (0x0000000d | (BRK_MEMU << 16))
|
||||||
|
|
||||||
|
#define SIGNALLING_NAN 0x7ff800007ff80000LL
|
||||||
|
|
||||||
|
static inline void fpu_emulator_init_fpu(void)
|
||||||
|
{
|
||||||
|
struct task_struct *t = current;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
t->thread.fpu.fcr31 = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < 32; i++)
|
||||||
|
set_fpr64(&t->thread.fpu.fpr[i], 0, SIGNALLING_NAN);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* _ASM_FPU_EMULATOR_H */
|
#endif /* _ASM_FPU_EMULATOR_H */
|
||||||
|
@@ -6,7 +6,7 @@ obj-y += cp1emu.o ieee754dp.o ieee754sp.o ieee754.o dp_div.o dp_mul.o \
|
|||||||
dp_sub.o dp_add.o dp_fsp.o dp_cmp.o dp_simple.o dp_tint.o \
|
dp_sub.o dp_add.o dp_fsp.o dp_cmp.o dp_simple.o dp_tint.o \
|
||||||
dp_fint.o dp_tlong.o dp_flong.o sp_div.o sp_mul.o sp_sub.o \
|
dp_fint.o dp_tlong.o dp_flong.o sp_div.o sp_mul.o sp_sub.o \
|
||||||
sp_add.o sp_fdp.o sp_cmp.o sp_simple.o sp_tint.o sp_fint.o \
|
sp_add.o sp_fdp.o sp_cmp.o sp_simple.o sp_tint.o sp_fint.o \
|
||||||
sp_tlong.o sp_flong.o kernel_linkage.o dsemul.o
|
sp_tlong.o sp_flong.o dsemul.o
|
||||||
|
|
||||||
lib-y += ieee754d.o dp_sqrt.o sp_sqrt.o
|
lib-y += ieee754d.o dp_sqrt.o sp_sqrt.o
|
||||||
|
|
||||||
|
@@ -1,42 +0,0 @@
|
|||||||
/*
|
|
||||||
* Kevin D. Kissell, kevink@mips and Carsten Langgaard, carstenl@mips.com
|
|
||||||
* Copyright (C) 2000 MIPS Technologies, Inc. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software; you can distribute it and/or modify it
|
|
||||||
* under the terms of the GNU General Public License (Version 2) as
|
|
||||||
* published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope 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 this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
||||||
*
|
|
||||||
* Routines corresponding to Linux kernel FP context
|
|
||||||
* manipulation primitives for the Algorithmics MIPS
|
|
||||||
* FPU Emulator
|
|
||||||
*/
|
|
||||||
#include <linux/printk.h>
|
|
||||||
#include <asm/current.h>
|
|
||||||
#include <asm/fpu.h>
|
|
||||||
#include <asm/fpu_emulator.h>
|
|
||||||
|
|
||||||
#define SIGNALLING_NAN 0x7ff800007ff80000LL
|
|
||||||
|
|
||||||
void fpu_emulator_init_fpu(void)
|
|
||||||
{
|
|
||||||
static int first = 1;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (first) {
|
|
||||||
first = 0;
|
|
||||||
printk("Algorithmics/MIPS FPU Emulator v1.5\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
current->thread.fpu.fcr31 = 0;
|
|
||||||
for (i = 0; i < 32; i++)
|
|
||||||
set_fpr64(¤t->thread.fpu.fpr[i], 0, SIGNALLING_NAN);
|
|
||||||
}
|
|
Reference in New Issue
Block a user