From 88b215e5cdfb0a3d7f69e75f2aafbc0c81eb2a3d Mon Sep 17 00:00:00 2001 From: lisyarus Date: Mon, 27 Jul 2026 17:36:02 +0300 Subject: [PATCH] Split jit::abi into isa & platform enums, rename arch/aarch64 -> arch/macos_aarch64 backend --- libs/jit/include/pslang/jit/abi.hpp | 20 +++++++++++--- .../{aarch64 => macos_aarch64}/compiler.hpp | 2 +- .../instruction_builder.hpp | 2 +- libs/jit/source/abi.cpp | 26 ++++++++++++++----- .../{aarch64 => macos_aarch64}/compiler.cpp | 6 ++--- .../instruction_builder.cpp | 4 +-- libs/jit/source/jit.cpp | 23 ++++++++++------ 7 files changed, 57 insertions(+), 26 deletions(-) rename libs/jit/include/pslang/jit/arch/{aarch64 => macos_aarch64}/compiler.hpp (81%) rename libs/jit/include/pslang/jit/arch/{aarch64 => macos_aarch64}/instruction_builder.hpp (99%) rename libs/jit/source/arch/{aarch64 => macos_aarch64}/compiler.cpp (99%) rename libs/jit/source/arch/{aarch64 => macos_aarch64}/instruction_builder.cpp (99%) diff --git a/libs/jit/include/pslang/jit/abi.hpp b/libs/jit/include/pslang/jit/abi.hpp index 1956c6e..3ad653c 100644 --- a/libs/jit/include/pslang/jit/abi.hpp +++ b/libs/jit/include/pslang/jit/abi.hpp @@ -3,11 +3,23 @@ namespace pslang::jit { - enum class abi + enum class isa { - itanium, - msvc, - armv8, + x86_64, + aarch64, + }; + + enum class platform + { + linux, + windows, + macos, + }; + + struct abi + { + jit::isa isa; + jit::platform platform; }; abi host_abi(); diff --git a/libs/jit/include/pslang/jit/arch/aarch64/compiler.hpp b/libs/jit/include/pslang/jit/arch/macos_aarch64/compiler.hpp similarity index 81% rename from libs/jit/include/pslang/jit/arch/aarch64/compiler.hpp rename to libs/jit/include/pslang/jit/arch/macos_aarch64/compiler.hpp index 374ebd9..e933590 100644 --- a/libs/jit/include/pslang/jit/arch/aarch64/compiler.hpp +++ b/libs/jit/include/pslang/jit/arch/macos_aarch64/compiler.hpp @@ -3,7 +3,7 @@ #include #include -namespace pslang::jit::aarch64 +namespace pslang::jit::macos_aarch64 { void compile(program_context & pcontext, ir::module_context const & mcontext); diff --git a/libs/jit/include/pslang/jit/arch/aarch64/instruction_builder.hpp b/libs/jit/include/pslang/jit/arch/macos_aarch64/instruction_builder.hpp similarity index 99% rename from libs/jit/include/pslang/jit/arch/aarch64/instruction_builder.hpp rename to libs/jit/include/pslang/jit/arch/macos_aarch64/instruction_builder.hpp index 63993e4..7880605 100644 --- a/libs/jit/include/pslang/jit/arch/aarch64/instruction_builder.hpp +++ b/libs/jit/include/pslang/jit/arch/macos_aarch64/instruction_builder.hpp @@ -3,7 +3,7 @@ #include #include -namespace pslang::jit::aarch64 +namespace pslang::jit::macos_aarch64 { struct instruction_builder diff --git a/libs/jit/source/abi.cpp b/libs/jit/source/abi.cpp index 6465d19..3006275 100644 --- a/libs/jit/source/abi.cpp +++ b/libs/jit/source/abi.cpp @@ -5,15 +5,27 @@ namespace pslang::jit abi host_abi() { -#if defined(__x86_64__) - return abi::itanium; -#elif defined(__ARM64_ARCH_8__) - return abi::armv8; -#elif defined(_M_AMD64) - return abi::msvs; + abi result; + +#if defined(__x86_64__) || defined(_M_X64) + result.isa = isa::x86_64; +#elif defined(__aarch64__) || defined(_M_ARM64) + result.isa = isa::aarch64; #else - #error Unknown host ABI + #error Unknown host ISA #endif + +#if defined(__linux__) + result.platform = platform::linux; +#elif defined(_WIN32) || defined(_WIN64) + result.platform = platform::windows; +#elif defined(__APPLE__) + result.platform = platform::macos; +#else + #error Unknown host platform +#endif + + return result; } } diff --git a/libs/jit/source/arch/aarch64/compiler.cpp b/libs/jit/source/arch/macos_aarch64/compiler.cpp similarity index 99% rename from libs/jit/source/arch/aarch64/compiler.cpp rename to libs/jit/source/arch/macos_aarch64/compiler.cpp index e59e200..fc717e8 100644 --- a/libs/jit/source/arch/aarch64/compiler.cpp +++ b/libs/jit/source/arch/macos_aarch64/compiler.cpp @@ -1,5 +1,5 @@ -#include -#include +#include +#include #include #include #include @@ -9,7 +9,7 @@ #include -namespace pslang::jit::aarch64 +namespace pslang::jit::macos_aarch64 { namespace diff --git a/libs/jit/source/arch/aarch64/instruction_builder.cpp b/libs/jit/source/arch/macos_aarch64/instruction_builder.cpp similarity index 99% rename from libs/jit/source/arch/aarch64/instruction_builder.cpp rename to libs/jit/source/arch/macos_aarch64/instruction_builder.cpp index 3bde25f..1cfac55 100644 --- a/libs/jit/source/arch/aarch64/instruction_builder.cpp +++ b/libs/jit/source/arch/macos_aarch64/instruction_builder.cpp @@ -1,8 +1,8 @@ -#include +#include #include -namespace pslang::jit::aarch64 +namespace pslang::jit::macos_aarch64 { template diff --git a/libs/jit/source/jit.cpp b/libs/jit/source/jit.cpp index 4b9b99c..7761588 100644 --- a/libs/jit/source/jit.cpp +++ b/libs/jit/source/jit.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include @@ -8,14 +8,21 @@ namespace pslang::jit void compile(program_context & pcontext, ir::module_context const & mcontext) { - switch (pcontext.abi) + switch (pcontext.abi.platform) { - case abi::itanium: - throw std::runtime_error("Itanium ABI JIT not implemented"); - case abi::msvc: - throw std::runtime_error("MSVC ABI JIT not implemented"); - case abi::armv8: - aarch64::compile(pcontext, mcontext); + case platform::linux: + throw std::runtime_error("Linux JIT compilation not supported"); + case platform::windows: + throw std::runtime_error("Windows JIT compilation not supported"); + case platform::macos: + switch (pcontext.abi.isa) + { + case isa::x86_64: + throw std::runtime_error("macOS x86_64 JIT compilation not supported"); + case isa::aarch64: + macos_aarch64::compile(pcontext, mcontext); + break; + } break; } }