| @@ -576,10 +576,12 @@ static uint16_t Fp16Mul(uint16_t v_1, uint16_t v_2) { | |||||
| uint16_t s_a, s_b; | uint16_t s_a, s_b; | ||||
| int16_t e_a, e_b; | int16_t e_a, e_b; | ||||
| uint32_t m_a, m_b; | uint32_t m_a, m_b; | ||||
| uint16_t s_ret, m_ret; | |||||
| uint16_t s_ret; | |||||
| uint16_t m_ret; | |||||
| int16_t e_ret; | int16_t e_ret; | ||||
| uint32_t mul_m; | uint32_t mul_m; | ||||
| uint16_t m_a_tmp, m_b_tmp; | |||||
| uint16_t m_a_tmp; | |||||
| uint16_t m_b_tmp; | |||||
| // 1.Extract | // 1.Extract | ||||
| ExtractFp16(v_1, s_a, e_a, m_a_tmp); | ExtractFp16(v_1, s_a, e_a, m_a_tmp); | ||||
| ExtractFp16(v_2, s_b, e_b, m_b_tmp); | ExtractFp16(v_2, s_b, e_b, m_b_tmp); | ||||
| @@ -635,7 +637,8 @@ static uint16_t Fp16Div(uint16_t v_1, uint16_t v_2) { | |||||
| uint16_t ret; | uint16_t ret; | ||||
| if (FP16_IS_ZERO(v_2)) { // result is inf | if (FP16_IS_ZERO(v_2)) { // result is inf | ||||
| // throw "fp16_t division by zero."; | // throw "fp16_t division by zero."; | ||||
| uint16_t s_a, s_b; | |||||
| uint16_t s_a; | |||||
| uint16_t s_b; | |||||
| uint16_t s_ret; | uint16_t s_ret; | ||||
| s_a = FP16_EXTRAC_SIGN(v_1); | s_a = FP16_EXTRAC_SIGN(v_1); | ||||
| s_b = FP16_EXTRAC_SIGN(v_2); | s_b = FP16_EXTRAC_SIGN(v_2); | ||||
| @@ -644,11 +647,15 @@ static uint16_t Fp16Div(uint16_t v_1, uint16_t v_2) { | |||||
| } else if (FP16_IS_ZERO(v_1)) { | } else if (FP16_IS_ZERO(v_1)) { | ||||
| ret = 0u; | ret = 0u; | ||||
| } else { | } else { | ||||
| uint16_t s_a, s_b; | |||||
| int16_t e_a, e_b; | |||||
| uint64_t m_a, m_b; | |||||
| uint16_t s_a; | |||||
| uint16_t s_b; | |||||
| int16_t e_a; | |||||
| int16_t e_b; | |||||
| uint64_t m_a; | |||||
| uint64_t m_b; | |||||
| float m_div; | float m_div; | ||||
| uint16_t m_a_tmp, m_b_tmp; | |||||
| uint16_t m_a_tmp; | |||||
| uint16_t m_b_tmp; | |||||
| // 1.Extract | // 1.Extract | ||||
| ExtractFp16(v_1, s_a, e_a, m_a_tmp); | ExtractFp16(v_1, s_a, e_a, m_a_tmp); | ||||
| ExtractFp16(v_2, s_b, e_b, m_b_tmp); | ExtractFp16(v_2, s_b, e_b, m_b_tmp); | ||||
| @@ -742,9 +749,12 @@ bool fp16_t::operator!=(const fp16_t &fp) const { | |||||
| return result; | return result; | ||||
| } | } | ||||
| bool fp16_t::operator>(const fp16_t &fp) const { | bool fp16_t::operator>(const fp16_t &fp) const { | ||||
| uint16_t s_a, s_b; | |||||
| uint16_t e_a, e_b; | |||||
| uint16_t m_a, m_b; | |||||
| uint16_t s_a; | |||||
| uint16_t s_b; | |||||
| uint16_t e_a; | |||||
| uint16_t e_b; | |||||
| uint16_t m_a; | |||||
| uint16_t m_b; | |||||
| bool result = true; | bool result = true; | ||||
| // 1.Extract | // 1.Extract | ||||
| @@ -823,9 +833,11 @@ fp16_t &fp16_t::operator=(const fp16_t &fp) { | |||||
| return *this; | return *this; | ||||
| } | } | ||||
| fp16_t &fp16_t::operator=(const float &f_val) { | fp16_t &fp16_t::operator=(const float &f_val) { | ||||
| uint16_t s_ret, m_ret; | |||||
| uint16_t s_ret; | |||||
| uint16_t m_ret; | |||||
| int16_t e_ret; | int16_t e_ret; | ||||
| uint32_t e_f, m_f; | |||||
| uint32_t e_f; | |||||
| uint32_t m_f; | |||||
| const uint32_t ui32_v = *(reinterpret_cast<const uint32_t *>(&f_val)); // 1:8:23bit sign:exp:man | const uint32_t ui32_v = *(reinterpret_cast<const uint32_t *>(&f_val)); // 1:8:23bit sign:exp:man | ||||
| uint32_t m_len_delta; | uint32_t m_len_delta; | ||||
| @@ -874,7 +886,9 @@ fp16_t &fp16_t::operator=(const float &f_val) { | |||||
| return *this; | return *this; | ||||
| } | } | ||||
| fp16_t &fp16_t::operator=(const int8_t &i_val) { | fp16_t &fp16_t::operator=(const int8_t &i_val) { | ||||
| uint16_t s_ret, e_ret, m_ret; | |||||
| uint16_t s_ret; | |||||
| uint16_t e_ret; | |||||
| uint16_t m_ret; | |||||
| s_ret = static_cast<uint16_t>(((static_cast<uint8_t>(i_val)) & 0x80) >> kDim7); | s_ret = static_cast<uint16_t>(((static_cast<uint8_t>(i_val)) & 0x80) >> kDim7); | ||||
| m_ret = static_cast<uint16_t>(((static_cast<uint8_t>(i_val)) & kInt8Max)); | m_ret = static_cast<uint16_t>(((static_cast<uint8_t>(i_val)) & kInt8Max)); | ||||
| @@ -898,7 +912,9 @@ fp16_t &fp16_t::operator=(const int8_t &i_val) { | |||||
| return *this; | return *this; | ||||
| } | } | ||||
| fp16_t &fp16_t::operator=(const uint8_t &ui_val) { | fp16_t &fp16_t::operator=(const uint8_t &ui_val) { | ||||
| uint16_t s_ret, e_ret, m_ret; | |||||
| uint16_t s_ret; | |||||
| uint16_t e_ret; | |||||
| uint16_t m_ret; | |||||
| s_ret = 0; | s_ret = 0; | ||||
| e_ret = 0; | e_ret = 0; | ||||
| m_ret = ui_val; | m_ret = ui_val; | ||||