aboutsummaryrefslogtreecommitdiff
path: root/lib/std/Thread.zig
diff options
context:
space:
mode:
authorAlex Rønne Petersen <alex@alexrp.com>2025-10-18 11:29:40 +0200
committerAlex Rønne Petersen <alex@alexrp.com>2025-10-18 11:36:02 +0200
commite59f2995a50f5a01181fbd903c8d077339aec61b (patch)
tree7adba30926296c158f92a0bd2b7a6ca5acb34b15 /lib/std/Thread.zig
parent842de66db831e24476c381aeac625e340030c76b (diff)
downloadzig-e59f2995a50f5a01181fbd903c8d077339aec61b.tar.gz
zig-e59f2995a50f5a01181fbd903c8d077339aec61b.zip
std.Thread: fix inline asm for mipsn32
This was using the mips64 syscalls. ref https://github.com/ziglang/zig/issues/22189
Diffstat (limited to 'lib/std/Thread.zig')
-rw-r--r--lib/std/Thread.zig44
1 files changed, 28 insertions, 16 deletions
diff --git a/lib/std/Thread.zig b/lib/std/Thread.zig
index 6cc377b5bd..3cbe8c8e84 100644
--- a/lib/std/Thread.zig
+++ b/lib/std/Thread.zig
@@ -1242,26 +1242,38 @@ const LinuxThreadImpl = struct {
// The bug was introduced in 46e12c07b3b9603c60fc1d421ff18618241cb081 and fixed in
// 7928eb0370d1133d0d8cd2f5ddfca19c309079d5.
.mips, .mipsel => asm volatile (
- \\ move $sp, $25
- \\ li $2, 4091 # SYS_munmap
- \\ move $4, %[ptr]
- \\ move $5, %[len]
- \\ syscall
- \\ li $2, 4001 # SYS_exit
- \\ li $4, 0
- \\ syscall
+ \\ move $sp, $t9
+ \\ li $v0, 4091 # SYS_munmap
+ \\ move $a0, %[ptr]
+ \\ move $a1, %[len]
+ \\ syscall
+ \\ li $v0, 4001 # SYS_exit
+ \\ li $a0, 0
+ \\ syscall
:
: [ptr] "r" (@intFromPtr(self.mapped.ptr)),
[len] "r" (self.mapped.len),
: .{ .memory = true }),
- .mips64, .mips64el => asm volatile (
- \\ li $2, 5011 # SYS_munmap
- \\ move $4, %[ptr]
- \\ move $5, %[len]
- \\ syscall
- \\ li $2, 5058 # SYS_exit
- \\ li $4, 0
- \\ syscall
+ .mips64, .mips64el => asm volatile (switch (target.abi) {
+ .gnuabin32, .muslabin32 =>
+ \\ li $v0, 6011 # SYS_munmap
+ \\ move $a0, %[ptr]
+ \\ move $a1, %[len]
+ \\ syscall
+ \\ li $v0, 6058 # SYS_exit
+ \\ li $a0, 0
+ \\ syscall
+ ,
+ else =>
+ \\ li $v0, 5011 # SYS_munmap
+ \\ move $a0, %[ptr]
+ \\ move $a1, %[len]
+ \\ syscall
+ \\ li $v0, 5058 # SYS_exit
+ \\ li $a0, 0
+ \\ syscall
+ ,
+ }
:
: [ptr] "r" (@intFromPtr(self.mapped.ptr)),
[len] "r" (self.mapped.len),