aboutsummaryrefslogtreecommitdiff
path: root/src/codegen
diff options
context:
space:
mode:
authorDavid Rubin <david@vortan.dev>2025-11-06 20:27:38 -0800
committerDavid Rubin <david@vortan.dev>2025-11-06 20:27:38 -0800
commit483f9bd3670a52242d799dd4eee4273bdc714e8a (patch)
tree0c2dcdc6b5b14aa1e9706b4e2a0c9be0cb9130c2 /src/codegen
parent09e4035e79caea3174bb3f60ba005fe5838d82e5 (diff)
downloadzig-483f9bd3670a52242d799dd4eee4273bdc714e8a.tar.gz
zig-483f9bd3670a52242d799dd4eee4273bdc714e8a.zip
llvm: add extra clobbers to valgrind requests
This seems to work around a very puzzling miscompilation first present in LLVM 21.x. We already unconditionally add these clobbers to inline assembly that came from the source, the valgrind requests should also contain them.
Diffstat (limited to 'src/codegen')
-rw-r--r--src/codegen/llvm.zig8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig
index 2711deba5c..a56311b325 100644
--- a/src/codegen/llvm.zig
+++ b/src/codegen/llvm.zig
@@ -11672,7 +11672,7 @@ pub const FuncGen = struct {
\\ srl $$0, $$0, 19
\\ or $$13, $$13, $$13
,
- .constraints = "={$11},{$12},{$11},~{memory}",
+ .constraints = "={$11},{$12},{$11},~{memory},~{$1}",
},
.mips64, .mips64el => .{
.template =
@@ -11680,7 +11680,7 @@ pub const FuncGen = struct {
\\ dsll $$0, $$0, 29 ; dsll $$0, $$0, 19
\\ or $$13, $$13, $$13
,
- .constraints = "={$11},{$12},{$11},~{memory}",
+ .constraints = "={$11},{$12},{$11},~{memory},~{$1}",
},
.powerpc, .powerpcle => .{
.template =
@@ -11727,7 +11727,7 @@ pub const FuncGen = struct {
\\ roll $$61, %edi ; roll $$51, %edi
\\ xchgl %ebx, %ebx
,
- .constraints = "={edx},{eax},{edx},~{cc},~{memory}",
+ .constraints = "={edx},{eax},{edx},~{cc},~{memory},~{dirflag},~{fpsr},~{flags}",
},
.x86_64 => .{
.template =
@@ -11735,7 +11735,7 @@ pub const FuncGen = struct {
\\ rolq $$61, %rdi ; rolq $$51, %rdi
\\ xchgq %rbx, %rbx
,
- .constraints = "={rdx},{rax},{rdx},~{cc},~{memory}",
+ .constraints = "={rdx},{rax},{rdx},~{cc},~{memory},~{dirflag},~{fpsr},~{flags}",
},
else => unreachable,
};