authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-10-18 02:09:04+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-10-18 11:16:31+02:00
logf3eacec226661c11357102dbca5d888817aafbd7
treea9615c6d7d5f87771f4963f66922372ece08e506
parentb8d776928a0b0092830ee632b1c57c8bcf9391ea
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

std.os.linux: fix some issues in mipsn32 inline asm

ref https://github.com/ziglang/zig/issues/22189

1 files changed, 16 insertions(+), 18 deletions(-)

lib/std/os/linux/mipsn32.zig+16-18
...@@ -1,5 +1,3 @@...@@ -1,5 +1,3 @@
1// TODO: A lot of this file is very likely wrong.
2
3const builtin = @import("builtin");1const builtin = @import("builtin");
4const std = @import("../../std.zig");2const std = @import("../../std.zig");
5const SYS = std.os.linux.SYS;3const SYS = std.os.linux.SYS;
...@@ -9,7 +7,7 @@ pub fn syscall0(number: SYS) u32 {...@@ -9,7 +7,7 @@ pub fn syscall0(number: SYS) u32 {
9 \\ syscall7 \\ syscall
10 \\ beq $a3, $zero, 1f8 \\ beq $a3, $zero, 1f
11 \\ blez $v0, 1f9 \\ blez $v0, 1f
12 \\ dsubu $v0, $zero, $v010 \\ subu $v0, $zero, $v0
13 \\1:11 \\1:
14 : [ret] "={$2}" (-> u32),12 : [ret] "={$2}" (-> u32),
15 : [number] "{$2}" (@intFromEnum(number)),13 : [number] "{$2}" (@intFromEnum(number)),
...@@ -21,7 +19,7 @@ pub fn syscall_pipe(fd: *[2]i32) u32 {...@@ -21,7 +19,7 @@ pub fn syscall_pipe(fd: *[2]i32) u32 {
21 \\ syscall19 \\ syscall
22 \\ beq $a3, $zero, 1f20 \\ beq $a3, $zero, 1f
23 \\ blez $v0, 2f21 \\ blez $v0, 2f
24 \\ dsubu $v0, $zero, $v022 \\ subu $v0, $zero, $v0
25 \\ b 2f23 \\ b 2f
26 \\1:24 \\1:
27 \\ sw $v0, 0($a0)25 \\ sw $v0, 0($a0)
...@@ -38,7 +36,7 @@ pub fn syscall1(number: SYS, arg1: u32) u32 {...@@ -38,7 +36,7 @@ pub fn syscall1(number: SYS, arg1: u32) u32 {
38 \\ syscall36 \\ syscall
39 \\ beq $a3, $zero, 1f37 \\ beq $a3, $zero, 1f
40 \\ blez $v0, 1f38 \\ blez $v0, 1f
41 \\ dsubu $v0, $zero, $v039 \\ subu $v0, $zero, $v0
42 \\1:40 \\1:
43 : [ret] "={$2}" (-> u32),41 : [ret] "={$2}" (-> u32),
44 : [number] "{$2}" (@intFromEnum(number)),42 : [number] "{$2}" (@intFromEnum(number)),
...@@ -51,7 +49,7 @@ pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {...@@ -51,7 +49,7 @@ pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
51 \\ syscall49 \\ syscall
52 \\ beq $a3, $zero, 1f50 \\ beq $a3, $zero, 1f
53 \\ blez $v0, 1f51 \\ blez $v0, 1f
54 \\ dsubu $v0, $zero, $v052 \\ subu $v0, $zero, $v0
55 \\1:53 \\1:
56 : [ret] "={$2}" (-> u32),54 : [ret] "={$2}" (-> u32),
57 : [number] "{$2}" (@intFromEnum(number)),55 : [number] "{$2}" (@intFromEnum(number)),
...@@ -65,7 +63,7 @@ pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {...@@ -65,7 +63,7 @@ pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
65 \\ syscall63 \\ syscall
66 \\ beq $a3, $zero, 1f64 \\ beq $a3, $zero, 1f
67 \\ blez $v0, 1f65 \\ blez $v0, 1f
68 \\ dsubu $v0, $zero, $v066 \\ subu $v0, $zero, $v0
69 \\1:67 \\1:
70 : [ret] "={$2}" (-> u32),68 : [ret] "={$2}" (-> u32),
71 : [number] "{$2}" (@intFromEnum(number)),69 : [number] "{$2}" (@intFromEnum(number)),
...@@ -80,7 +78,7 @@ pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {...@@ -80,7 +78,7 @@ pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {
80 \\ syscall78 \\ syscall
81 \\ beq $a3, $zero, 1f79 \\ beq $a3, $zero, 1f
82 \\ blez $v0, 1f80 \\ blez $v0, 1f
83 \\ dsubu $v0, $zero, $v081 \\ subu $v0, $zero, $v0
84 \\1:82 \\1:
85 : [ret] "={$2}" (-> u32),83 : [ret] "={$2}" (-> u32),
86 : [number] "{$2}" (@intFromEnum(number)),84 : [number] "{$2}" (@intFromEnum(number)),
...@@ -96,7 +94,7 @@ pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u...@@ -96,7 +94,7 @@ pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u
96 \\ syscall94 \\ syscall
97 \\ beq $a3, $zero, 1f95 \\ beq $a3, $zero, 1f
98 \\ blez $v0, 1f96 \\ blez $v0, 1f
99 \\ dsubu $v0, $zero, $v097 \\ subu $v0, $zero, $v0
100 \\1:98 \\1:
101 : [ret] "={$2}" (-> u32),99 : [ret] "={$2}" (-> u32),
102 : [number] "{$2}" (@intFromEnum(number)),100 : [number] "{$2}" (@intFromEnum(number)),
...@@ -121,7 +119,7 @@ pub fn syscall6(...@@ -121,7 +119,7 @@ pub fn syscall6(
121 \\ syscall119 \\ syscall
122 \\ beq $a3, $zero, 1f120 \\ beq $a3, $zero, 1f
123 \\ blez $v0, 1f121 \\ blez $v0, 1f
124 \\ dsubu $v0, $zero, $v0122 \\ subu $v0, $zero, $v0
125 \\1:123 \\1:
126 : [ret] "={$2}" (-> u32),124 : [ret] "={$2}" (-> u32),
127 : [number] "{$2}" (@intFromEnum(number)),125 : [number] "{$2}" (@intFromEnum(number)),
...@@ -148,7 +146,7 @@ pub fn syscall7(...@@ -148,7 +146,7 @@ pub fn syscall7(
148 \\ syscall146 \\ syscall
149 \\ beq $a3, $zero, 1f147 \\ beq $a3, $zero, 1f
150 \\ blez $v0, 1f148 \\ blez $v0, 1f
151 \\ dsubu $v0, $zero, $v0149 \\ subu $v0, $zero, $v0
152 \\1:150 \\1:
153 : [ret] "={$2}" (-> u32),151 : [ret] "={$2}" (-> u32),
154 : [number] "{$2}" (@intFromEnum(number)),152 : [number] "{$2}" (@intFromEnum(number)),
...@@ -171,20 +169,20 @@ pub fn clone() callconv(.naked) u32 {...@@ -171,20 +169,20 @@ pub fn clone() callconv(.naked) u32 {
171 asm volatile (169 asm volatile (
172 \\ # Save function pointer and argument pointer on new thread stack170 \\ # Save function pointer and argument pointer on new thread stack
173 \\ and $a1, $a1, -16171 \\ and $a1, $a1, -16
174 \\ dsubu $a1, $a1, 16172 \\ subu $a1, $a1, 16
175 \\ sd $a0, 0($a1)173 \\ sw $a0, 0($a1)
176 \\ sd $a3, 8($a1)174 \\ sw $a3, 4($a1)
177 \\175 \\
178 \\ # Shuffle (fn,sp,fl,arg,ptid,tls,ctid) to (fl,sp,ptid,tls,ctid)176 \\ # Shuffle (fn,sp,fl,arg,ptid,tls,ctid) to (fl,sp,ptid,tls,ctid)
179 \\ move $a0, $a2177 \\ move $a0, $a2
180 \\ move $a2, $a4178 \\ move $a2, $a4
181 \\ move $a3, $a5179 \\ move $a3, $a5
182 \\ move $a4, $a6180 \\ move $a4, $a6
183 \\ li $v0, 5055 # SYS_clone181 \\ li $v0, 6055 # SYS_clone
184 \\ syscall182 \\ syscall
185 \\ beq $a3, $zero, 1f183 \\ beq $a3, $zero, 1f
186 \\ blez $v0, 2f184 \\ blez $v0, 2f
187 \\ dsubu $v0, $zero, $v0185 \\ subu $v0, $zero, $v0
188 \\ b 2f186 \\ b 2f
189 \\1:187 \\1:
190 \\ beq $v0, $zero, 3f188 \\ beq $v0, $zero, 3f
...@@ -200,11 +198,11 @@ pub fn clone() callconv(.naked) u32 {...@@ -200,11 +198,11 @@ pub fn clone() callconv(.naked) u32 {
200 \\ move $ra, $zero198 \\ move $ra, $zero
201 \\199 \\
202 \\ ld $t9, 0($sp)200 \\ ld $t9, 0($sp)
203 \\ ld $a0, 8($sp)201 \\ ld $a0, 4($sp)
204 \\ jalr $t9202 \\ jalr $t9
205 \\203 \\
206 \\ move $a0, $v0204 \\ move $a0, $v0
207 \\ li $v0, 5058 # SYS_exit205 \\ li $v0, 6058 # SYS_exit
208 \\ syscall206 \\ syscall
209 );207 );
210}208}