mirror of
https://github.com/ziglang/zig.git
synced 2026-01-20 14:25:16 +00:00
std.os.linux: fix some issues in mipsn32 inline asm
ref https://github.com/ziglang/zig/issues/22189
This commit is contained in:
parent
b8d776928a
commit
f3eacec226
@ -1,5 +1,3 @@
|
||||
// TODO: A lot of this file is very likely wrong.
|
||||
|
||||
const builtin = @import("builtin");
|
||||
const std = @import("../../std.zig");
|
||||
const SYS = std.os.linux.SYS;
|
||||
@ -9,7 +7,7 @@ pub fn syscall0(number: SYS) u32 {
|
||||
\\ syscall
|
||||
\\ beq $a3, $zero, 1f
|
||||
\\ blez $v0, 1f
|
||||
\\ dsubu $v0, $zero, $v0
|
||||
\\ subu $v0, $zero, $v0
|
||||
\\1:
|
||||
: [ret] "={$2}" (-> u32),
|
||||
: [number] "{$2}" (@intFromEnum(number)),
|
||||
@ -21,7 +19,7 @@ pub fn syscall_pipe(fd: *[2]i32) u32 {
|
||||
\\ syscall
|
||||
\\ beq $a3, $zero, 1f
|
||||
\\ blez $v0, 2f
|
||||
\\ dsubu $v0, $zero, $v0
|
||||
\\ subu $v0, $zero, $v0
|
||||
\\ b 2f
|
||||
\\1:
|
||||
\\ sw $v0, 0($a0)
|
||||
@ -38,7 +36,7 @@ pub fn syscall1(number: SYS, arg1: u32) u32 {
|
||||
\\ syscall
|
||||
\\ beq $a3, $zero, 1f
|
||||
\\ blez $v0, 1f
|
||||
\\ dsubu $v0, $zero, $v0
|
||||
\\ subu $v0, $zero, $v0
|
||||
\\1:
|
||||
: [ret] "={$2}" (-> u32),
|
||||
: [number] "{$2}" (@intFromEnum(number)),
|
||||
@ -51,7 +49,7 @@ pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
|
||||
\\ syscall
|
||||
\\ beq $a3, $zero, 1f
|
||||
\\ blez $v0, 1f
|
||||
\\ dsubu $v0, $zero, $v0
|
||||
\\ subu $v0, $zero, $v0
|
||||
\\1:
|
||||
: [ret] "={$2}" (-> u32),
|
||||
: [number] "{$2}" (@intFromEnum(number)),
|
||||
@ -65,7 +63,7 @@ pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
|
||||
\\ syscall
|
||||
\\ beq $a3, $zero, 1f
|
||||
\\ blez $v0, 1f
|
||||
\\ dsubu $v0, $zero, $v0
|
||||
\\ subu $v0, $zero, $v0
|
||||
\\1:
|
||||
: [ret] "={$2}" (-> u32),
|
||||
: [number] "{$2}" (@intFromEnum(number)),
|
||||
@ -80,7 +78,7 @@ pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {
|
||||
\\ syscall
|
||||
\\ beq $a3, $zero, 1f
|
||||
\\ blez $v0, 1f
|
||||
\\ dsubu $v0, $zero, $v0
|
||||
\\ subu $v0, $zero, $v0
|
||||
\\1:
|
||||
: [ret] "={$2}" (-> u32),
|
||||
: [number] "{$2}" (@intFromEnum(number)),
|
||||
@ -96,7 +94,7 @@ pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u
|
||||
\\ syscall
|
||||
\\ beq $a3, $zero, 1f
|
||||
\\ blez $v0, 1f
|
||||
\\ dsubu $v0, $zero, $v0
|
||||
\\ subu $v0, $zero, $v0
|
||||
\\1:
|
||||
: [ret] "={$2}" (-> u32),
|
||||
: [number] "{$2}" (@intFromEnum(number)),
|
||||
@ -121,7 +119,7 @@ pub fn syscall6(
|
||||
\\ syscall
|
||||
\\ beq $a3, $zero, 1f
|
||||
\\ blez $v0, 1f
|
||||
\\ dsubu $v0, $zero, $v0
|
||||
\\ subu $v0, $zero, $v0
|
||||
\\1:
|
||||
: [ret] "={$2}" (-> u32),
|
||||
: [number] "{$2}" (@intFromEnum(number)),
|
||||
@ -148,7 +146,7 @@ pub fn syscall7(
|
||||
\\ syscall
|
||||
\\ beq $a3, $zero, 1f
|
||||
\\ blez $v0, 1f
|
||||
\\ dsubu $v0, $zero, $v0
|
||||
\\ subu $v0, $zero, $v0
|
||||
\\1:
|
||||
: [ret] "={$2}" (-> u32),
|
||||
: [number] "{$2}" (@intFromEnum(number)),
|
||||
@ -171,20 +169,20 @@ pub fn clone() callconv(.naked) u32 {
|
||||
asm volatile (
|
||||
\\ # Save function pointer and argument pointer on new thread stack
|
||||
\\ and $a1, $a1, -16
|
||||
\\ dsubu $a1, $a1, 16
|
||||
\\ sd $a0, 0($a1)
|
||||
\\ sd $a3, 8($a1)
|
||||
\\ subu $a1, $a1, 16
|
||||
\\ sw $a0, 0($a1)
|
||||
\\ sw $a3, 4($a1)
|
||||
\\
|
||||
\\ # Shuffle (fn,sp,fl,arg,ptid,tls,ctid) to (fl,sp,ptid,tls,ctid)
|
||||
\\ move $a0, $a2
|
||||
\\ move $a2, $a4
|
||||
\\ move $a3, $a5
|
||||
\\ move $a4, $a6
|
||||
\\ li $v0, 5055 # SYS_clone
|
||||
\\ li $v0, 6055 # SYS_clone
|
||||
\\ syscall
|
||||
\\ beq $a3, $zero, 1f
|
||||
\\ blez $v0, 2f
|
||||
\\ dsubu $v0, $zero, $v0
|
||||
\\ subu $v0, $zero, $v0
|
||||
\\ b 2f
|
||||
\\1:
|
||||
\\ beq $v0, $zero, 3f
|
||||
@ -200,11 +198,11 @@ pub fn clone() callconv(.naked) u32 {
|
||||
\\ move $ra, $zero
|
||||
\\
|
||||
\\ ld $t9, 0($sp)
|
||||
\\ ld $a0, 8($sp)
|
||||
\\ ld $a0, 4($sp)
|
||||
\\ jalr $t9
|
||||
\\
|
||||
\\ move $a0, $v0
|
||||
\\ li $v0, 5058 # SYS_exit
|
||||
\\ li $v0, 6058 # SYS_exit
|
||||
\\ syscall
|
||||
);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user