diff options
Diffstat (limited to 'erts/emulator/beam/jit/beam_jit_common.cpp')
-rw-r--r-- | erts/emulator/beam/jit/beam_jit_common.cpp | 53 |
1 files changed, 25 insertions, 28 deletions
diff --git a/erts/emulator/beam/jit/beam_jit_common.cpp b/erts/emulator/beam/jit/beam_jit_common.cpp index 0f3afc6536..b9a5024611 100644 --- a/erts/emulator/beam/jit/beam_jit_common.cpp +++ b/erts/emulator/beam/jit/beam_jit_common.cpp @@ -740,16 +740,17 @@ Eterm beam_jit_bs_get_integer(Process *c_p, void beam_jit_bs_construct_fail_info(Process *c_p, Uint packed_error_info, - Eterm bad_value) { + Eterm arg3, Eterm arg1) { Eterm *hp; Eterm cause_tuple; Eterm error_info; Uint segment = beam_jit_get_bsc_segment(packed_error_info); - Uint op = beam_jit_get_bsc_op(packed_error_info); - Uint info = beam_jit_get_bsc_info(packed_error_info); - Uint reason = beam_jit_get_bsc_reason(packed_error_info); - Uint value_location = beam_jit_get_bsc_value(packed_error_info); + JitBSCOp op = beam_jit_get_bsc_op(packed_error_info); + JitBSCInfo info = beam_jit_get_bsc_info(packed_error_info); + JitBSCReason reason = beam_jit_get_bsc_reason(packed_error_info); + JitBSCValue value_location = beam_jit_get_bsc_value(packed_error_info); Eterm Op = am_none; + Uint Reason; Eterm Info = am_none; Eterm value = am_undefined; @@ -774,39 +775,35 @@ void beam_jit_bs_construct_fail_info(Process *c_p, break; } - switch (reason) { - case BSC_REASON_FREASON: - reason = c_p->freason; + switch (value_location) { + case BSC_VALUE_ARG1: + value = arg1; break; + case BSC_VALUE_ARG3: + value = arg3; + break; + case BSC_VALUE_FVALUE: + value = c_p->fvalue; + break; + } + + switch (reason) { case BSC_REASON_BADARG: - reason = BADARG; + Reason = BADARG; break; case BSC_REASON_SYSTEM_LIMIT: - reason = SYSTEM_LIMIT; + Reason = SYSTEM_LIMIT; break; case BSC_REASON_DEPENDS: - if ((is_small(bad_value) && signed_val(bad_value) >= 0) || - (is_big(bad_value) && !big_sign(bad_value))) { - reason = SYSTEM_LIMIT; + if ((is_small(value) && signed_val(value) >= 0) || + (is_big(value) && !big_sign(value))) { + Reason = SYSTEM_LIMIT; } else { - reason = BADARG; + Reason = BADARG; } break; } - switch (value_location) { -#if defined(__aarch64__) - case BSC_VALUE_ARG3: -#else - case BSC_VALUE_ARG1: -#endif - value = bad_value; - break; - case BSC_VALUE_FVALUE: - value = c_p->fvalue; - break; - } - switch (info) { case BSC_INFO_FVALUE: Info = c_p->fvalue; @@ -837,7 +834,7 @@ void beam_jit_bs_construct_fail_info(Process *c_p, am_module, am_erl_erts_errors); c_p->fvalue = error_info; - c_p->freason = reason | EXF_HAS_EXT_INFO; + c_p->freason = Reason | EXF_HAS_EXT_INFO; } Sint beam_jit_bs_bit_size(Eterm term) { |