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 <github43132@proton.me>
This commit is contained in:
Ronald Caesar 2025-11-01 16:02:51 -04:00
parent cf504e107e
commit 621665c659
No known key found for this signature in database
GPG key ID: 04307C401999C596
2 changed files with 58 additions and 0 deletions

View file

@ -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)

57
src/jit/ir/value.cpp Normal file
View file

@ -0,0 +1,57 @@
#include "type.h"
#include "common/passert.h"
#include <stdint.h>
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;
}
}