aboutsummaryrefslogtreecommitdiff
path: root/src/codegen
diff options
context:
space:
mode:
authorAlex Rønne Petersen <alex@alexrp.com>2024-11-04 12:40:27 +0100
committerAlex Rønne Petersen <alex@alexrp.com>2024-11-04 13:53:20 +0100
commit8a73a965d3185cadee2bd819daa12b5b3f1daafc (patch)
tree1335bad7c1815691a90fa35cf7a72afe20bf8887 /src/codegen
parent2307cf73b044527464e63aa315e3af343d6584ad (diff)
downloadzig-8a73a965d3185cadee2bd819daa12b5b3f1daafc.tar.gz
zig-8a73a965d3185cadee2bd819daa12b5b3f1daafc.zip
llvm: Add client request support for all archs supported by Valgrind.
Diffstat (limited to 'src/codegen')
-rw-r--r--src/codegen/llvm.zig82
1 files changed, 67 insertions, 15 deletions
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig
index b709403256..514a360a66 100644
--- a/src/codegen/llvm.zig
+++ b/src/codegen/llvm.zig
@@ -11595,29 +11595,81 @@ pub const FuncGen = struct {
template: [:0]const u8,
constraints: [:0]const u8,
} = switch (target.cpu.arch) {
- .x86 => .{
+ .arm, .armeb, .thumb, .thumbeb => .{
.template =
- \\roll $$3, %edi ; roll $$13, %edi
- \\roll $$61, %edi ; roll $$51, %edi
- \\xchgl %ebx,%ebx
+ \\ mov r12, r12, ror #3 ; mov r12, r12, ror #13
+ \\ mov r12, r12, ror #29 ; mov r12, r12, ror #19
+ \\ orr r10, r10, r10
,
- .constraints = "={edx},{eax},0,~{cc},~{memory}",
+ .constraints = "={r3},{r4},{r3},~{cc},~{memory}",
},
- .x86_64 => .{
+ .aarch64, .aarch64_be => .{
.template =
- \\rolq $$3, %rdi ; rolq $$13, %rdi
- \\rolq $$61, %rdi ; rolq $$51, %rdi
- \\xchgq %rbx,%rbx
+ \\ ror x12, x12, #3 ; ror x12, x12, #13
+ \\ ror x12, x12, #51 ; ror x12, x12, #61
+ \\ orr x10, x10, x10
,
- .constraints = "={rdx},{rax},0,~{cc},~{memory}",
+ .constraints = "={x3},{x4},{x3},~{cc},~{memory}",
},
- .aarch64, .aarch64_be => .{
+ .mips, .mipsel => .{
+ .template =
+ \\ srl $$0, $$0, 13
+ \\ srl $$0, $$0, 29
+ \\ srl $$0, $$0, 3
+ \\ srl $$0, $$0, 19
+ \\ or $$13, $$13, $$13
+ ,
+ .constraints = "={$11},{$12},{$11},~{memory}",
+ },
+ .mips64, .mips64el => .{
+ .template =
+ \\ dsll $$0, $$0, 3 ; dsll $$0, $$0, 13
+ \\ dsll $$0, $$0, 29 ; dsll $$0, $$0, 19
+ \\ or $$13, $$13, $$13
+ ,
+ .constraints = "={$11},{$12},{$11},~{memory}",
+ },
+ .powerpc, .powerpcle => .{
+ .template =
+ \\ rlwinm 0, 0, 3, 0, 31 ; rlwinm 0, 0, 13, 0, 31
+ \\ rlwinm 0, 0, 29, 0, 31 ; rlwinm 0, 0, 19, 0, 31
+ \\ or 1, 1, 1
+ ,
+ .constraints = "={r3},{r4},{r3},~{cc},~{memory}",
+ },
+ .powerpc64, .powerpc64le => .{
+ .template =
+ \\ rotldi 0, 0, 3 ; rotldi 0, 0, 13
+ \\ rotldi 0, 0, 61 ; rotldi 0, 0, 51
+ \\ or 1, 1, 1
+ ,
+ .constraints = "={r3},{r4},{r3},~{cc},~{memory}",
+ },
+ .s390x => .{
+ .template =
+ \\ lr %r15, %r15
+ \\ lr %r1, %r1
+ \\ lr %r2, %r2
+ \\ lr %r3, %r3
+ \\ lr %r2, %r2
+ ,
+ .constraints = "={r3},{r2},{r3},~{cc},~{memory}",
+ },
+ .x86 => .{
+ .template =
+ \\ roll $$3, %edi ; roll $$13, %edi
+ \\ roll $$61, %edi ; roll $$51, %edi
+ \\ xchgl %ebx, %ebx
+ ,
+ .constraints = "={edx},{eax},{edx},~{cc},~{memory}",
+ },
+ .x86_64 => .{
.template =
- \\ror x12, x12, #3 ; ror x12, x12, #13
- \\ror x12, x12, #51 ; ror x12, x12, #61
- \\orr x10, x10, x10
+ \\ rolq $$3, %rdi ; rolq $$13, %rdi
+ \\ rolq $$61, %rdi ; rolq $$51, %rdi
+ \\ xchgq %rbx, %rbx
,
- .constraints = "={x3},{x4},0,~{cc},~{memory}",
+ .constraints = "={rdx},{rax},{edx},~{cc},~{memory}",
},
else => unreachable,
};