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; +} +}