diff options
Diffstat (limited to 'erts/emulator/beam/jit/beam_jit_common.hpp')
-rw-r--r-- | erts/emulator/beam/jit/beam_jit_common.hpp | 36 |
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) |