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// TODO: A lot of this file is very likely wrong.
2
31const builtin = @import("builtin");
42const std = @import("../../std.zig");
53const SYS = std.os.linux.SYS;
......@@ -9,7 +7,7 @@ pub fn syscall0(number: SYS) u32 {
97 \\ syscall
108 \\ beq $a3, $zero, 1f
119 \\ blez $v0, 1f
12 \\ dsubu $v0, $zero, $v0
10 \\ subu $v0, $zero, $v0
1311 \\1:
1412 : [ret] "={$2}" (-> u32),
1513 : [number] "{$2}" (@intFromEnum(number)),
......@@ -21,7 +19,7 @@ pub fn syscall_pipe(fd: *[2]i32) u32 {
2119 \\ syscall
2220 \\ beq $a3, $zero, 1f
2321 \\ blez $v0, 2f
24 \\ dsubu $v0, $zero, $v0
22 \\ subu $v0, $zero, $v0
2523 \\ b 2f
2624 \\1:
2725 \\ sw $v0, 0($a0)
......@@ -38,7 +36,7 @@ pub fn syscall1(number: SYS, arg1: u32) u32 {
3836 \\ syscall
3937 \\ beq $a3, $zero, 1f
4038 \\ blez $v0, 1f
41 \\ dsubu $v0, $zero, $v0
39 \\ subu $v0, $zero, $v0
4240 \\1:
4341 : [ret] "={$2}" (-> u32),
4442 : [number] "{$2}" (@intFromEnum(number)),
......@@ -51,7 +49,7 @@ pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
5149 \\ syscall
5250 \\ beq $a3, $zero, 1f
5351 \\ blez $v0, 1f
54 \\ dsubu $v0, $zero, $v0
52 \\ subu $v0, $zero, $v0
5553 \\1:
5654 : [ret] "={$2}" (-> u32),
5755 : [number] "{$2}" (@intFromEnum(number)),
......@@ -65,7 +63,7 @@ pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
6563 \\ syscall
6664 \\ beq $a3, $zero, 1f
6765 \\ blez $v0, 1f
68 \\ dsubu $v0, $zero, $v0
66 \\ subu $v0, $zero, $v0
6967 \\1:
7068 : [ret] "={$2}" (-> u32),
7169 : [number] "{$2}" (@intFromEnum(number)),
......@@ -80,7 +78,7 @@ pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {
8078 \\ syscall
8179 \\ beq $a3, $zero, 1f
8280 \\ blez $v0, 1f
83 \\ dsubu $v0, $zero, $v0
81 \\ subu $v0, $zero, $v0
8482 \\1:
8583 : [ret] "={$2}" (-> u32),
8684 : [number] "{$2}" (@intFromEnum(number)),
......@@ -96,7 +94,7 @@ pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u
9694 \\ syscall
9795 \\ beq $a3, $zero, 1f
9896 \\ blez $v0, 1f
99 \\ dsubu $v0, $zero, $v0
97 \\ subu $v0, $zero, $v0
10098 \\1:
10199 : [ret] "={$2}" (-> u32),
102100 : [number] "{$2}" (@intFromEnum(number)),
......@@ -121,7 +119,7 @@ pub fn syscall6(
121119 \\ syscall
122120 \\ beq $a3, $zero, 1f
123121 \\ blez $v0, 1f
124 \\ dsubu $v0, $zero, $v0
122 \\ subu $v0, $zero, $v0
125123 \\1:
126124 : [ret] "={$2}" (-> u32),
127125 : [number] "{$2}" (@intFromEnum(number)),
......@@ -148,7 +146,7 @@ pub fn syscall7(
148146 \\ syscall
149147 \\ beq $a3, $zero, 1f
150148 \\ blez $v0, 1f
151 \\ dsubu $v0, $zero, $v0
149 \\ subu $v0, $zero, $v0
152150 \\1:
153151 : [ret] "={$2}" (-> u32),
154152 : [number] "{$2}" (@intFromEnum(number)),
......@@ -171,20 +169,20 @@ pub fn clone() callconv(.naked) u32 {
171169 asm volatile (
172170 \\ # Save function pointer and argument pointer on new thread stack
173171 \\ and $a1, $a1, -16
174 \\ dsubu $a1, $a1, 16
175 \\ sd $a0, 0($a1)
176 \\ sd $a3, 8($a1)
172 \\ subu $a1, $a1, 16
173 \\ sw $a0, 0($a1)
174 \\ sw $a3, 4($a1)
177175 \\
178176 \\ # Shuffle (fn,sp,fl,arg,ptid,tls,ctid) to (fl,sp,ptid,tls,ctid)
179177 \\ move $a0, $a2
180178 \\ move $a2, $a4
181179 \\ move $a3, $a5
182180 \\ move $a4, $a6
183 \\ li $v0, 5055 # SYS_clone
181 \\ li $v0, 6055 # SYS_clone
184182 \\ syscall
185183 \\ beq $a3, $zero, 1f
186184 \\ blez $v0, 2f
187 \\ dsubu $v0, $zero, $v0
185 \\ subu $v0, $zero, $v0
188186 \\ b 2f
189187 \\1:
190188 \\ beq $v0, $zero, 3f
......@@ -200,11 +198,11 @@ pub fn clone() callconv(.naked) u32 {
200198 \\ move $ra, $zero
201199 \\
202200 \\ ld $t9, 0($sp)
203 \\ ld $a0, 8($sp)
201 \\ ld $a0, 4($sp)
204202 \\ jalr $t9
205203 \\
206204 \\ move $a0, $v0
207 \\ li $v0, 5058 # SYS_exit
205 \\ li $v0, 6058 # SYS_exit
208206 \\ syscall
209207 );
210208}