Aarch64 JIT: check function pointer support

This commit is contained in:
Nikita Lisitsa 2026-01-19 15:14:13 +03:00
parent 30b88d4add
commit c7e0232b15
5 changed files with 25 additions and 10 deletions

View file

@ -173,9 +173,10 @@ int main(int argc, char ** argv)
{
// TODO: remove, testing-only code; should execute entry point instead
auto offset = pcontext.symbols.at("foo");
auto fptr = (uint32_t(*)(uint32_t))(executable.data.get() + offset);
auto x = fptr(10u);
auto offset = pcontext.symbols.at("add_or_sub");
using type = std::uint32_t(*)(std::uint32_t);
auto fptr = (type(*)(bool))(executable.data.get() + offset);
auto x = fptr(false)(10u);
std::cout << "Result: " << std::boolalpha << x << std::endl;
}
}

View file

@ -1,7 +1,11 @@
func foo(x : u32) -> u32:
if x == 0u:
return 42u
return 1u + bar(x - 1u)
func add1(x : u32) -> u32:
return x + 1u
func bar(x : u32) -> u32:
return foo(x)
func sub1(x : u32) -> u32:
return x - 1u
func add_or_sub(add : bool) -> (u32 -> u32):
if add:
return add1
else:
return sub1

View file

@ -22,6 +22,7 @@ namespace pslang::types
bool is_floating_point_type(type const & type);
bool is_numeric_type(type const & type);
bool is_builtin_type(type const & type);
bool is_function_type(type const & type);
std::size_t builtin_type_size(type const & type);

View file

@ -123,6 +123,13 @@ namespace pslang::types
return false;
}
bool is_function_type(type const & type)
{
if (std::get_if<function_type>(&type))
return true;
return false;
}
std::size_t builtin_type_size(type const & type)
{
if (std::get_if<unit_type>(&type))

View file

@ -11,8 +11,10 @@ Future plans:
* Extension functions: operator overloading, destructors, iterators & for loop, move assignment (replaces built-in copy)
* Metaprogramming: assigning types to variables (of type `type`), functions can take `type` as regular arguments and return `type`, all type computations are compile-time only
Aarch64 compiler:
* Struct values
Backlog:
* Mutually recursive functions
* Mutually recursive structs (relevant only with pointers)
* Empty array expression
* Calling functions as methods