mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 05:44:20 +00:00
Merge pull request #25231 from taylordotfish/bugfix/ppc-restore_rt
Fix `restore_rt` on PowerPC and remove unnecessary clobbers
This commit is contained in:
commit
91b0adc4c1
15 changed files with 43 additions and 27 deletions
|
|
@ -141,12 +141,12 @@ pub fn restore_rt() callconv(.naked) noreturn {
|
|||
\\ svc #0
|
||||
:
|
||||
: [number] "i" (@intFromEnum(SYS.rt_sigreturn)),
|
||||
: .{ .memory = true }),
|
||||
),
|
||||
else => asm volatile (
|
||||
\\ svc #0
|
||||
:
|
||||
: [number] "{x8}" (@intFromEnum(SYS.rt_sigreturn)),
|
||||
: .{ .memory = true }),
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -150,12 +150,12 @@ pub fn restore_rt() callconv(.naked) noreturn {
|
|||
\\ svc #0
|
||||
:
|
||||
: [number] "I" (@intFromEnum(SYS.rt_sigreturn)),
|
||||
: .{ .memory = true }),
|
||||
),
|
||||
else => asm volatile (
|
||||
\\ svc #0
|
||||
:
|
||||
: [number] "{r7}" (@intFromEnum(SYS.rt_sigreturn)),
|
||||
: .{ .memory = true }),
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -135,7 +135,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
|
|||
\\ trap0(#0)
|
||||
:
|
||||
: [number] "{r6}" (@intFromEnum(SYS.rt_sigreturn)),
|
||||
: .{ .memory = true });
|
||||
);
|
||||
}
|
||||
|
||||
pub const F = struct {
|
||||
|
|
|
|||
|
|
@ -143,7 +143,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
|
|||
\\ syscall 0
|
||||
:
|
||||
: [number] "r" (@intFromEnum(SYS.rt_sigreturn)),
|
||||
: .{ .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r16 = true, .r17 = true, .r18 = true, .r19 = true, .r20 = true, .memory = true });
|
||||
);
|
||||
}
|
||||
|
||||
pub const msghdr = extern struct {
|
||||
|
|
|
|||
|
|
@ -148,7 +148,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
|
|||
asm volatile ("trap #0"
|
||||
:
|
||||
: [number] "{d0}" (@intFromEnum(SYS.rt_sigreturn)),
|
||||
: .{ .memory = true });
|
||||
);
|
||||
}
|
||||
|
||||
pub const F = struct {
|
||||
|
|
|
|||
|
|
@ -254,7 +254,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
|
|||
\\ syscall
|
||||
:
|
||||
: [number] "{$2}" (@intFromEnum(SYS.rt_sigreturn)),
|
||||
: .{ .r1 = true, .r3 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
|
||||
);
|
||||
}
|
||||
|
||||
pub const F = struct {
|
||||
|
|
|
|||
|
|
@ -233,7 +233,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
|
|||
\\ syscall
|
||||
:
|
||||
: [number] "{$2}" (@intFromEnum(SYS.rt_sigreturn)),
|
||||
: .{ .r1 = true, .r3 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
|
||||
);
|
||||
}
|
||||
|
||||
pub const F = struct {
|
||||
|
|
|
|||
|
|
@ -247,11 +247,19 @@ pub fn clone() callconv(.naked) usize {
|
|||
pub const restore = restore_rt;
|
||||
|
||||
pub fn restore_rt() callconv(.naked) noreturn {
|
||||
asm volatile (
|
||||
\\ sc
|
||||
:
|
||||
: [number] "{r0}" (@intFromEnum(SYS.rt_sigreturn)),
|
||||
: .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
|
||||
switch (@import("builtin").zig_backend) {
|
||||
.stage2_c => asm volatile (
|
||||
\\ li 0, %[number]
|
||||
\\ sc
|
||||
:
|
||||
: [number] "i" (@intFromEnum(SYS.rt_sigreturn)),
|
||||
),
|
||||
else => _ = asm volatile (
|
||||
\\ sc
|
||||
:
|
||||
: [number] "{r0}" (@intFromEnum(SYS.rt_sigreturn)),
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
pub const F = struct {
|
||||
|
|
|
|||
|
|
@ -232,11 +232,19 @@ pub fn clone() callconv(.naked) usize {
|
|||
pub const restore = restore_rt;
|
||||
|
||||
pub fn restore_rt() callconv(.naked) noreturn {
|
||||
asm volatile (
|
||||
\\ sc
|
||||
:
|
||||
: [number] "{r0}" (@intFromEnum(SYS.rt_sigreturn)),
|
||||
: .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
|
||||
switch (@import("builtin").zig_backend) {
|
||||
.stage2_c => asm volatile (
|
||||
\\ li 0, %[number]
|
||||
\\ sc
|
||||
:
|
||||
: [number] "i" (@intFromEnum(SYS.rt_sigreturn)),
|
||||
),
|
||||
else => _ = asm volatile (
|
||||
\\ sc
|
||||
:
|
||||
: [number] "{r0}" (@intFromEnum(SYS.rt_sigreturn)),
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
pub const F = struct {
|
||||
|
|
|
|||
|
|
@ -142,7 +142,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
|
|||
\\ ecall
|
||||
:
|
||||
: [number] "{x17}" (@intFromEnum(SYS.rt_sigreturn)),
|
||||
: .{ .memory = true });
|
||||
);
|
||||
}
|
||||
|
||||
pub const F = struct {
|
||||
|
|
|
|||
|
|
@ -142,7 +142,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
|
|||
\\ ecall
|
||||
:
|
||||
: [number] "{x17}" (@intFromEnum(SYS.rt_sigreturn)),
|
||||
: .{ .memory = true });
|
||||
);
|
||||
}
|
||||
|
||||
pub const F = struct {
|
||||
|
|
|
|||
|
|
@ -154,7 +154,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
|
|||
\\svc 0
|
||||
:
|
||||
: [number] "{r1}" (@intFromEnum(SYS.rt_sigreturn)),
|
||||
: .{ .memory = true });
|
||||
);
|
||||
}
|
||||
|
||||
pub const F = struct {
|
||||
|
|
|
|||
|
|
@ -151,5 +151,5 @@ pub fn restore_rt() callconv(.naked) noreturn {
|
|||
\\ svc #0
|
||||
:
|
||||
: [number] "I" (@intFromEnum(SYS.rt_sigreturn)),
|
||||
: .{ .memory = true });
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -187,12 +187,12 @@ pub fn restore_rt() callconv(.naked) noreturn {
|
|||
\\ int $0x80
|
||||
:
|
||||
: [number] "i" (@intFromEnum(SYS.rt_sigreturn)),
|
||||
: .{ .memory = true }),
|
||||
),
|
||||
else => asm volatile (
|
||||
\\ int $0x80
|
||||
:
|
||||
: [number] "{eax}" (@intFromEnum(SYS.rt_sigreturn)),
|
||||
: .{ .memory = true }),
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -137,12 +137,12 @@ pub fn restore_rt() callconv(.naked) noreturn {
|
|||
\\ syscall
|
||||
:
|
||||
: [number] "i" (@intFromEnum(SYS.rt_sigreturn)),
|
||||
: .{ .rcx = true, .r11 = true, .memory = true }),
|
||||
),
|
||||
else => asm volatile (
|
||||
\\ syscall
|
||||
:
|
||||
: [number] "{rax}" (@intFromEnum(SYS.rt_sigreturn)),
|
||||
: .{ .rcx = true, .r11 = true, .memory = true }),
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue