From 621665c659fa48b63a4728c3240176222b3a0700 Mon Sep 17 00:00:00 2001 From: Ronald Caesar Date: Sat, 1 Nov 2025 16:02:51 -0400 Subject: [PATCH] jit/ir: Add value_t struct This type is designed to hold various kinds of data that IR instructions operate on, starting with immediate integer constants. Signed-off-by: Ronald Caesar --- src/jit/CMakeLists.txt | 1 + src/jit/ir/value.cpp | 57 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 src/jit/ir/value.cpp diff --git a/src/jit/CMakeLists.txt b/src/jit/CMakeLists.txt index daf58f3..dd3a865 100644 --- a/src/jit/CMakeLists.txt +++ b/src/jit/CMakeLists.txt @@ -3,6 +3,7 @@ add_library(jit STATIC) target_sources(jit PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/decoder/arm32.cpp ${CMAKE_CURRENT_SOURCE_DIR}/ir/type.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/ir/value.cpp ) target_link_libraries(jit PRIVATE common host) diff --git a/src/jit/ir/value.cpp b/src/jit/ir/value.cpp new file mode 100644 index 0000000..6ee5e9f --- /dev/null +++ b/src/jit/ir/value.cpp @@ -0,0 +1,57 @@ +#include "type.h" +#include "common/passert.h" +#include + +namespace pound::jit::ir +{ +typedef struct +{ + type_t type; + union + { + uint64_t immediate_u64; + uint32_t immediate_u32; + uint8_t immediate_u8; + bool immediate_u1; + } inner; +} value_t; + +void +value_init (value_t *value) +{ + PVM_ASSERT(nullptr != value); + value->type = IR_TYPE_VOID; +} + +void +value_init_from_u64 (value_t *value, uint64_t u64) +{ + PVM_ASSERT(nullptr != value); + value->type = IR_TYPE_U64; + value->inner.immediate_u64 = u64; +} + +void +value_init_from_u32 (value_t *value, uint32_t u32) +{ + PVM_ASSERT(nullptr != value); + value->type = IR_TYPE_U32; + value->inner.immediate_u32 = u32; +} + +void +value_init_from_u8 (value_t *value, uint8_t u8) +{ + PVM_ASSERT(nullptr != value); + value->type = IR_TYPE_U8; + value->inner.immediate_u8 = u8; +} + +void +value_init_from_u1 (value_t *value, bool u1) +{ + PVM_ASSERT(nullptr != value); + value->type = IR_TYPE_U1; + value->inner.immediate_u1 = u1; +} +}