From 0cf0242c3bb3fbd9aba37ca21325ea4d11b83f1b Mon Sep 17 00:00:00 2001 From: Andrew Waterman Date: Mon, 10 Jan 2011 16:35:20 -0800 Subject: [pk] added --disable-fp-emulation option for code size --- pk/fp.c | 14 +++++++++----- pk/handlers.c | 6 ++++++ pk/pk.ac | 5 +++++ 3 files changed, 20 insertions(+), 5 deletions(-) (limited to 'pk') diff --git a/pk/fp.c b/pk/fp.c index ffe6173..d9eb427 100644 --- a/pk/fp.c +++ b/pk/fp.c @@ -1,8 +1,13 @@ +#include "pk.h" #include "pcr.h" +#include "fp.h" + +static fp_state_t fp_state; + +#ifdef PK_ENABLE_FP_EMULATION + #include "softfloat.h" #include "riscv-opc.h" -#include "pk.h" -#include "fp.h" #include #define noisy 0 @@ -10,8 +15,6 @@ static void set_fp_reg(unsigned int which, unsigned int dp, uint64_t val); static uint64_t get_fp_reg(unsigned int which, unsigned int dp); -static fp_state_t fp_state; - static inline void validate_address(trapframe_t* tf, long addr, int size, int store) { @@ -252,6 +255,8 @@ get_fp_reg(unsigned int which, unsigned int dp) return val; } +#endif + void init_fp_regs() { long sr = mfpcr(PCR_SR); @@ -259,4 +264,3 @@ void init_fp_regs() put_fp_state(fp_state.fpr,fp_state.fsr); mtpcr(sr, PCR_SR); } - diff --git a/pk/handlers.c b/pk/handlers.c index 25005c8..2947903 100644 --- a/pk/handlers.c +++ b/pk/handlers.c @@ -19,11 +19,15 @@ void handle_fp_disabled(trapframe_t* tf) } else { +#ifdef PK_ENABLE_FP_EMULATION if(emulate_fp(tf) != 0) { dump_tf(tf); panic("FPU emulation failed!"); } +#else + panic("FPU emulation disabled! pc %lx, insn %x",tf->epc,(uint32_t)tf->insn); +#endif } } @@ -41,8 +45,10 @@ void handle_privileged_instruction(trapframe_t* tf) void handle_illegal_instruction(trapframe_t* tf) { +#ifdef PK_ENABLE_FP_EMULATION if(emulate_fp(tf) == 0) return; +#endif dump_tf(tf); panic("An illegal instruction was executed!"); diff --git a/pk/pk.ac b/pk/pk.ac index 94fb63a..c53c2c2 100644 --- a/pk/pk.ac +++ b/pk/pk.ac @@ -15,3 +15,8 @@ AC_ARG_ENABLE([user-64bit], AS_HELP_STRING([--disable-user-64bit], [Disable 64-b AS_IF([test "x$enable_user_64bit" != "xno"], [ AC_DEFINE([PK_ENABLE_USER_64BIT],,[Define if the user runs in 64-bit mode]) ]) + +AC_ARG_ENABLE([fp-emulation], AS_HELP_STRING([--disable-fp-emulation], [Disable floating-point emulation])) +AS_IF([test "x$enable_fp_emulation" != "xno"], [ + AC_DEFINE([PK_ENABLE_FP_EMULATION],,[Define if floating-point emulation is enabled]) +]) -- cgit v1.1