mirror of
https://github.com/pound-emu/pound.git
synced 2025-12-12 10:37:00 +00:00
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:
parent
cf504e107e
commit
621665c659
2 changed files with 58 additions and 0 deletions
|
|
@ -3,6 +3,7 @@ add_library(jit STATIC)
|
||||||
target_sources(jit PRIVATE
|
target_sources(jit PRIVATE
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/decoder/arm32.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/decoder/arm32.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/ir/type.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/ir/type.cpp
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/ir/value.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(jit PRIVATE common host)
|
target_link_libraries(jit PRIVATE common host)
|
||||||
|
|
|
||||||
57
src/jit/ir/value.cpp
Normal file
57
src/jit/ir/value.cpp
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue