Files
c3c/test/test_suite/asm/naked_call_with_instructions.c3t
2025-07-30 01:01:56 +02:00

38 lines
735 B
Plaintext

// #target: macos-x64
module test;
import std;
fn void main()
{
char[8] foo = {255, 0, 0, 0, 0, 0, 0, 0};
ulong a = to_ulong2(&foo);
ulong b = to_ulong(&foo);
}
fn ulong to_ulong(char[8]*) @naked @noinline
{
asm
{
movq [$rsp - 8], $rdi;
movq $rax, [$rsp - 8];
movq $rax, [$rax];
ret;
}
unreachable();
}
fn ulong to_ulong2(char[8]* buf)
{
return *(ulong*)buf;
}
/* #expect: test.ll
define i64 @test.to_ulong(ptr %0) #1 {
entry:
call void asm sideeffect alignstack "movq %rdi, -8(%rsp)\0Amovq -8(%rsp), %rax\0Amovq (%rax), %rax\0Aret \0A", "~{rax},~{flags},~{dirflag},~{fspr}"()
unreachable
}
attributes #1 = { naked noinline nounwind uwtable "no-trapping-math"="true" "stack-protector-buffer-size"="8" }