diff --git a/CMakeLists.txt b/CMakeLists.txt index 835f891e..fa6d4d91 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,6 +20,7 @@ include_directories( src/frontend/imgui src/backend src/backend/core + src/backend/core/JIT src/backend/core/mmio src/backend/core/registers src/backend/core/rsp diff --git a/src/backend/core/JIT/IR.cpp b/src/backend/core/JIT/IR.cpp new file mode 100644 index 00000000..195fc2d4 --- /dev/null +++ b/src/backend/core/JIT/IR.cpp @@ -0,0 +1,15 @@ +#include + +namespace n64 { +void IR::push(const Entry& e) { + code.push_back(e); +} + +auto IR::begin() { + return code.begin(); +} + +auto IR::end() { + return code.end(); +} +} \ No newline at end of file diff --git a/src/backend/core/JIT/IR.hpp b/src/backend/core/JIT/IR.hpp new file mode 100644 index 00000000..2f43e217 --- /dev/null +++ b/src/backend/core/JIT/IR.hpp @@ -0,0 +1,24 @@ +#pragma once +#include +#include + +namespace n64 { +struct Entry { + u16 type; + struct Operand { + enum { + REG_S64, REG_S32, REG_U64, REG_U32, REG_U5, IMM_S16, + IMM_S32, IMM_S64, IMM_U16, IMM_U32, IMM_U64, IMM_U5, + } type; + u8 index; + } dst, op1, op2; +}; + +struct IR { + void push(const Entry&); + auto begin(); + auto end(); +private: + std::vector code{}; +}; +} \ No newline at end of file