From 7f44ab2262eefa2e2b03d99d08d3532e4eec2390 Mon Sep 17 00:00:00 2001 From: dingusdev <52434309+dingusdev@users.noreply.github.com> Date: Sat, 6 Apr 2024 17:31:03 -0700 Subject: [PATCH] Minor fixes to floating point --- cpu/ppc/ppcfpopcodes.cpp | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/cpu/ppc/ppcfpopcodes.cpp b/cpu/ppc/ppcfpopcodes.cpp index d3ed947..a42bb18 100644 --- a/cpu/ppc/ppcfpopcodes.cpp +++ b/cpu/ppc/ppcfpopcodes.cpp @@ -40,13 +40,13 @@ uint64_t fp_return_uint64(uint32_t reg) { return ppc_state.fpr[reg].int64_r; } -inline void ppc_update_cr1() { +inline static void ppc_update_cr1() { // copy FPSCR[FX|FEX|VX|OX] to CR1 ppc_state.cr = (ppc_state.cr & ~CR_select::CR1_field) | ((ppc_state.fpscr >> 4) & CR_select::CR1_field); } -int32_t round_to_nearest(double f) { +static int32_t round_to_nearest(double f) { return static_cast(static_cast (std::floor(f + 0.5))); } @@ -74,37 +74,32 @@ void update_fpscr(uint32_t new_fpscr) { ppc_state.fpscr = new_fpscr; } -int32_t round_to_zero(double f) { +static int32_t round_to_zero(double f) { return static_cast(std::trunc(f)); } -int32_t round_to_pos_inf(double f) { +static int32_t round_to_pos_inf(double f) { return static_cast(std::ceil(f)); } -int32_t round_to_neg_inf(double f) { +static int32_t round_to_neg_inf(double f) { return static_cast(std::floor(f)); } -inline bool check_snan(int check_reg) { +inline static bool check_snan(int check_reg) { uint64_t check_int = ppc_state.fpr[check_reg].int64_r; return (((check_int & (0x7FFULL << 52)) == (0x7FFULL << 52)) && ((check_int & ~(0xFFFULL << 52)) != 0ULL) && ((check_int & (0x1ULL << 51)) == 0ULL)); } -inline bool check_qnan(int check_reg) { +inline static bool check_qnan(int check_reg) { uint64_t check_int = ppc_state.fpr[check_reg].int64_r; return (((check_int & (0x7FFULL << 52)) == (0x7FFULL << 52)) && ((check_int & ~(0xFFFULL << 52)) == 0ULL) && ((check_int & (0x1ULL << 51)) == (0x1ULL << 51))); } -void update_fex() { - int fex_result = !!((ppc_state.fpscr & (ppc_state.fpscr << 22)) & 0x3E000000); - ppc_state.fpscr = (ppc_state.fpscr & ~FEX) | (fex_result << 30); -} - static void fpresult_update(double set_result) { if (std::isnan(set_result)) { ppc_state.fpscr |= FPCC_FUNAN | FPRCD;