summaryrefslogtreecommitdiff
path: root/erts/emulator/beam/jit/beam_jit_common.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'erts/emulator/beam/jit/beam_jit_common.hpp')
-rw-r--r--erts/emulator/beam/jit/beam_jit_common.hpp36
1 files changed, 26 insertions, 10 deletions
diff --git a/erts/emulator/beam/jit/beam_jit_common.hpp b/erts/emulator/beam/jit/beam_jit_common.hpp
index 5542919409..ed508ee416 100644
--- a/erts/emulator/beam/jit/beam_jit_common.hpp
+++ b/erts/emulator/beam/jit/beam_jit_common.hpp
@@ -235,7 +235,7 @@ public:
}
};
-static const Uint BSC_SEGMENT_OFFSET = 8;
+static const Uint BSC_SEGMENT_OFFSET = 9;
typedef enum : Uint {
BSC_OP_BINARY = 0,
@@ -246,20 +246,18 @@ typedef enum : Uint {
BSC_OP_UTF32 = 5,
BSC_OP_LAST = 5,
BSC_OP_MASK = 0x07,
- BSC_OP_OFFSET = 5
+ BSC_OP_OFFSET = 6
} JitBSCOp;
typedef enum : Uint {
BSC_INFO_FVALUE = 0,
BSC_INFO_TYPE = 1,
BSC_INFO_SIZE = 2,
- BSC_INFO_NEGATIVE = 3,
- BSC_INFO_UNIT = 4,
- BSC_INFO_DEPENDS_ARG1 = 5,
- BSC_INFO_DEPENDS_FVALUE = 6,
- BSC_INFO_LAST = 6,
+ BSC_INFO_UNIT = 3,
+ BSC_INFO_DEPENDS = 4,
+ BSC_INFO_LAST = 4,
BSC_INFO_MASK = 0x07,
- BSC_INFO_OFFSET = 2,
+ BSC_INFO_OFFSET = 3,
} JitBSCInfo;
typedef enum : Uint {
@@ -271,14 +269,27 @@ typedef enum : Uint {
BSC_REASON_MASK = 0x03
} JitBSCReason;
+typedef enum : Uint {
+#if defined(__aarch64__)
+ BSC_VALUE_ARG3 = 0,
+#else
+ BSC_VALUE_ARG1 = 0,
+#endif
+ BSC_VALUE_FVALUE = 1,
+ BSC_VALUE_LAST = 1,
+ BSC_VALUE_MASK = 0x01,
+ BSC_VALUE_OFFSET = 2
+} JitBSCValue;
+
static constexpr Uint beam_jit_set_bsc_segment_op(Uint segment, JitBSCOp op) {
return (segment << BSC_SEGMENT_OFFSET) | (op << BSC_OP_OFFSET);
}
static constexpr Uint beam_jit_update_bsc_reason_info(Uint packed_info,
JitBSCReason reason,
- JitBSCInfo info) {
- return packed_info | (info << BSC_INFO_OFFSET) | reason;
+ JitBSCInfo info,
+ JitBSCValue value) {
+ return packed_info | (value << BSC_VALUE_OFFSET) | (info << BSC_INFO_OFFSET) | reason;
}
static constexpr Uint beam_jit_get_bsc_segment(Uint packed_info) {
@@ -300,6 +311,11 @@ static constexpr JitBSCReason beam_jit_get_bsc_reason(Uint packed_info) {
return (JitBSCReason)(packed_info & BSC_REASON_MASK);
}
+static constexpr JitBSCValue beam_jit_get_bsc_value(Uint packed_info) {
+ ERTS_CT_ASSERT((BSC_VALUE_LAST & ~BSC_VALUE_MASK) == 0);
+ return (JitBSCValue)((packed_info >> BSC_VALUE_OFFSET) & BSC_VALUE_MASK);
+}
+
/* ** */
#if defined(DEBUG) && defined(JIT_HARD_DEBUG)