summaryrefslogtreecommitdiff
path: root/erts/emulator/beam/jit/beam_jit_common.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'erts/emulator/beam/jit/beam_jit_common.cpp')
-rw-r--r--erts/emulator/beam/jit/beam_jit_common.cpp53
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) {