Skip to content

Commit d527426

Browse files
authored
add some DMC AArch64 versions to druntime (dlang/dmd!21374)
1 parent 02f2d4c commit d527426

File tree

3 files changed

+49
-6
lines changed

3 files changed

+49
-6
lines changed

runtime/druntime/src/core/internal/vararg/sysv_x64.d

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ version (X86_64)
1717
version (Windows) { /* different ABI */ }
1818
else version = SysV_x64;
1919
}
20+
version (AArch64)
21+
{
22+
version (Windows) { /* different ABI */ }
23+
else version = SysV_x64;
24+
}
2025

2126
version (SysV_x64):
2227

runtime/druntime/src/core/stdc/config.d

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,23 @@ else version (DigitalMars)
260260
else version (Darwin)
261261
alias real c_long_double;
262262
}
263+
else version (AArch64)
264+
{
265+
version (linux)
266+
alias real c_long_double;
267+
else version (FreeBSD)
268+
alias real c_long_double;
269+
else version (OpenBSD)
270+
alias real c_long_double;
271+
else version (NetBSD)
272+
alias real c_long_double;
273+
else version (DragonFlyBSD)
274+
alias real c_long_double;
275+
else version (Solaris)
276+
alias real c_long_double;
277+
else version (Darwin)
278+
alias real c_long_double;
279+
}
263280
}
264281

265282
static assert(is(c_long_double), "c_long_double needs to be declared for this platform/architecture.");

runtime/druntime/src/core/stdc/stdarg.d

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ version (X86_64)
2020
version (Windows) { /* different ABI */ }
2121
else version = SysV_x64;
2222
}
23+
version (AArch64)
24+
{
25+
version (Windows) { /* different ABI */ }
26+
else version = SysV_x64;
27+
}
2328

2429
version (GNU)
2530
{
@@ -31,12 +36,28 @@ else version (SysV_x64)
3136

3237
version (DigitalMars)
3338
{
34-
align(16) struct __va_argsave_t
35-
{
36-
size_t[6] regs; // RDI,RSI,RDX,RCX,R8,R9
37-
real[8] fpregs; // XMM0..XMM7
38-
__va_list va;
39-
}
39+
version (X86_64)
40+
align(16) struct __va_argsave_t
41+
{
42+
size_t[6] regs; // RDI,RSI,RDX,RCX,R8,R9
43+
real[8] fpregs; // XMM0..XMM7
44+
__va_list va;
45+
}
46+
else version (AArch64)
47+
align(16) struct __va_argsave_t
48+
{
49+
ulong[8] regs;
50+
real[8] fpregs;
51+
struct __va_list_tag
52+
{
53+
void* stack;
54+
void* gr_top;
55+
void* vr_top;
56+
int gr_offs;
57+
int vr_offs;
58+
}
59+
void* stack_args_save;
60+
}
4061
}
4162
}
4263

0 commit comments

Comments
 (0)