diff options
Diffstat (limited to 'arch/mips/isa_traits.cc')
-rw-r--r-- | arch/mips/isa_traits.cc | 120 |
1 files changed, 20 insertions, 100 deletions
diff --git a/arch/mips/isa_traits.cc b/arch/mips/isa_traits.cc index 4eb14c66d..05499f4dc 100644 --- a/arch/mips/isa_traits.cc +++ b/arch/mips/isa_traits.cc @@ -61,101 +61,6 @@ MipsISA::MiscRegFile::copyMiscRegs(ExecContext *xc) } uint64_t -MipsISA::convert_and_round(uint32_t fp_val, ConvertType cvt_type, int rnd_mode) -{ - - uint64_t ret_val = 0; - - switch (cvt_type) - { - case SINGLE_TO_DOUBLE: - uint64_t single_sign = fp_val & 0x80000000; - - uint64_t single_exp = (fp_val & 0x7F800000) >> 22; - single_exp -= 127; - - uint64_t single_mantissa = fp_val & 0x007FFFFF; - - uint64_t double_exp = single_exp + 1023; - double_exp = double_exp << 51; - - uint64_t double_val = single_sign << 63 | double_exp | single_mantissa; - - return double_val; - - default: - panic("Invalid Floating Point Conversion Type (%d) being used.\n",cvt_type); - return ret_val; - } -} - -uint64_t -MipsISA::convert_and_round(uint64_t fp_val, ConvertType cvt_type, int rnd_mode) -{ - - uint64_t ret_val = 0; - - switch (cvt_type) - { - case SINGLE_TO_DOUBLE: - uint64_t single_sign = fp_val & 0x80000000; - - uint64_t single_exp = (fp_val & 0x7F800000) >> 22; - single_exp -= 127; - - uint64_t single_mantissa = fp_val & 0x007FFFFF; - - uint64_t double_exp = single_exp + 1023; - double_exp = double_exp << 51; - - uint64_t double_val = single_sign << 63 | double_exp | single_mantissa; - - return double_val; - - default: - panic("Invalid Floating Point Conversion Type (%d) being used.\n",cvt_type); - return ret_val; - } -} - - -uint64_t -MipsISA::convert_and_round(double fp_val, ConvertType cvt_type, int rnd_mode) -{ - - switch (cvt_type) - { - case SINGLE_TO_DOUBLE: - double sdouble_val = fp_val; - void *sdouble_ptr = &sdouble_val; - uint64_t sdp_bits = *(uint64_t *) sdouble_ptr ; - return sdp_bits; - - case SINGLE_TO_WORD: - int32_t sword_val = (int32_t) fp_val; - void *sword_ptr = &sword_val; - uint64_t sword_bits= *(uint32_t *) sword_ptr ; - return sword_bits; - - case WORD_TO_SINGLE: - float wfloat_val = fp_val; - void *wfloat_ptr = &wfloat_val; - uint64_t wfloat_bits = *(uint32_t *) wfloat_ptr ; - return wfloat_bits; - - case WORD_TO_DOUBLE: - double wdouble_val = fp_val; - void *wdouble_ptr = &wdouble_val; - uint64_t wdp_bits = *(uint64_t *) wdouble_ptr ; - return wdp_bits; - - default: - panic("Invalid Floating Point Conversion Type (%d). See types.hh for Conversion List\n",cvt_type); - return 0; - } -} - -uint64_t MipsISA::fpConvert(double fp_val, ConvertType cvt_type) { @@ -191,6 +96,12 @@ MipsISA::fpConvert(double fp_val, ConvertType cvt_type) } } +float +MipsISA::roundFP(float val) +{ + return 1.5; +} + double MipsISA::roundFP(double val) { @@ -203,7 +114,13 @@ MipsISA::roundFP(double val) return val + 1; } -inline double +float +MipsISA::truncFP(float val) +{ + return 1.0; +} + +double MipsISA::truncFP(double val) { int trunc_val = (int) val; @@ -211,22 +128,25 @@ MipsISA::truncFP(double val) } bool -MipsISA::unorderedFP(uint32_t val) +MipsISA::unorderedFP(float val) { + return false; } bool -MipsISA::unorderedFP(uint64_t val) +MipsISA::unorderedFP(double val) { + return false; } bool -MipsISA::getConditionCode(int cc) +MipsISA::getFPConditionCode(int cc) { + return false; } void -MipsISA::setConditionCode(int num, bool val) +MipsISA::setFPConditionCode(int num, bool val) { } |