summary refs log tree commit diff
path: root/arm64
diff options
context:
space:
mode:
authorQuentin Carbonneaux <quentin@c9x.me>2022-10-12 20:59:20 +0200
committerQuentin Carbonneaux <quentin@c9x.me>2022-10-12 21:12:08 +0200
commit8ecae922997c55f70cd9e19cbf947a520f7ecca3 (patch)
treef75685ee79cc015883b2a60d7a5cbf6c52c751d5 /arm64
parent577e93fe6d729b63447faad471fd0f5f2296f667 (diff)
downloadroux-8ecae922997c55f70cd9e19cbf947a520f7ecca3.tar.gz
thread-local storage for amd64_apple
It is quite similar to arm64_apple.
Probably, the call that needs to be
generated also provides extra
invariants on top of the regular
abi, but I have not checked that.

Clang generates code that is a bit
neater than qbe's because, on x86,
a load can be fused in a call
instruction! We do not bother with
supporting these since we expect
only sporadic use of the feature.

For reference, here is what clang
might output for a store to the
second entry of a thread-local
array of ints:

        movq    _x@TLVP(%rip), %rdi
        callq   *(%rdi)
        movl    %ecx, 4(%rax)
Diffstat (limited to 'arm64')
-rw-r--r--arm64/isel.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/arm64/isel.c b/arm64/isel.c
index a8d36fa..31ef242 100644
--- a/arm64/isel.c
+++ b/arm64/isel.c
@@ -70,9 +70,9 @@ static void
 fixarg(Ref *pr, int k, int phi, Fn *fn)
 {
 	char buf[32];
+	Con *c, cc;
 	Ref r0, r1, r2, r3;
 	int s, n;
-	Con *c, cc;
 
 	r0 = *pr;
 	switch (rtype(r0)) {