| author | |
| committer | |
| log | 15f45e89a751bd2d2dbbbf8d50138f91ce7bf754 |
| tree | cd1dcdab00ea5ac543452a93cf6992d0df43b321 |
| parent | de9c0e45800466e12d68c11f001cea447727fb5a |
LLVM always assumes these are on. Zig backends do not observe them.
If Zig backends want to start using them, they can be introduced, one
arch at a time, with proper documentation.4 files changed, 19 insertions(+), 18 deletions(-)
lib/std/builtin/assembly.zig+1| ... | @@ -4,6 +4,7 @@ pub const Clobbers = switch (@import("builtin").cpu.arch) { | ... | @@ -4,6 +4,7 @@ pub const Clobbers = switch (@import("builtin").cpu.arch) { |
| 4 | /// addresses other than those derived from input pointer provenance. | 4 | /// addresses other than those derived from input pointer provenance. |
| 5 | memory: bool = false, | 5 | memory: bool = false, |
| 6 | 6 | ||
| 7 | /// Condition codes. Subset of the bits in `eflags` and `rflags`. | ||
| 7 | cc: bool = false, | 8 | cc: bool = false, |
| 8 | dirflag: bool = false, | 9 | dirflag: bool = false, |
| 9 | eflags: bool = false, | 10 | eflags: bool = false, |
lib/std/os/linux/aarch64.zig+9-9| ... | @@ -18,7 +18,7 @@ pub fn syscall0(number: SYS) usize { | ... | @@ -18,7 +18,7 @@ pub fn syscall0(number: SYS) usize { |
| 18 | return asm volatile ("svc #0" | 18 | return asm volatile ("svc #0" |
| 19 | : [ret] "={x0}" (-> usize), | 19 | : [ret] "={x0}" (-> usize), |
| 20 | : [number] "{x8}" (@intFromEnum(number)), | 20 | : [number] "{x8}" (@intFromEnum(number)), |
| 21 | : .{ .memory = true, .cc = true }); | 21 | : .{ .memory = true }); |
| 22 | } | 22 | } |
| 23 | 23 | ||
| 24 | pub fn syscall1(number: SYS, arg1: usize) usize { | 24 | pub fn syscall1(number: SYS, arg1: usize) usize { |
| ... | @@ -26,7 +26,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize { | ... | @@ -26,7 +26,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize { |
| 26 | : [ret] "={x0}" (-> usize), | 26 | : [ret] "={x0}" (-> usize), |
| 27 | : [number] "{x8}" (@intFromEnum(number)), | 27 | : [number] "{x8}" (@intFromEnum(number)), |
| 28 | [arg1] "{x0}" (arg1), | 28 | [arg1] "{x0}" (arg1), |
| 29 | : .{ .memory = true, .cc = true }); | 29 | : .{ .memory = true }); |
| 30 | } | 30 | } |
| 31 | 31 | ||
| 32 | pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize { | 32 | pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize { |
| ... | @@ -35,7 +35,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize { | ... | @@ -35,7 +35,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize { |
| 35 | : [number] "{x8}" (@intFromEnum(number)), | 35 | : [number] "{x8}" (@intFromEnum(number)), |
| 36 | [arg1] "{x0}" (arg1), | 36 | [arg1] "{x0}" (arg1), |
| 37 | [arg2] "{x1}" (arg2), | 37 | [arg2] "{x1}" (arg2), |
| 38 | : .{ .memory = true, .cc = true }); | 38 | : .{ .memory = true }); |
| 39 | } | 39 | } |
| 40 | 40 | ||
| 41 | pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize { | 41 | pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize { |
| ... | @@ -45,7 +45,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize { | ... | @@ -45,7 +45,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize { |
| 45 | [arg1] "{x0}" (arg1), | 45 | [arg1] "{x0}" (arg1), |
| 46 | [arg2] "{x1}" (arg2), | 46 | [arg2] "{x1}" (arg2), |
| 47 | [arg3] "{x2}" (arg3), | 47 | [arg3] "{x2}" (arg3), |
| 48 | : .{ .memory = true, .cc = true }); | 48 | : .{ .memory = true }); |
| 49 | } | 49 | } |
| 50 | 50 | ||
| 51 | pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize { | 51 | pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize { |
| ... | @@ -56,7 +56,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) | ... | @@ -56,7 +56,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) |
| 56 | [arg2] "{x1}" (arg2), | 56 | [arg2] "{x1}" (arg2), |
| 57 | [arg3] "{x2}" (arg3), | 57 | [arg3] "{x2}" (arg3), |
| 58 | [arg4] "{x3}" (arg4), | 58 | [arg4] "{x3}" (arg4), |
| 59 | : .{ .memory = true, .cc = true }); | 59 | : .{ .memory = true }); |
| 60 | } | 60 | } |
| 61 | 61 | ||
| 62 | pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize { | 62 | pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize { |
| ... | @@ -68,7 +68,7 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, | ... | @@ -68,7 +68,7 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, |
| 68 | [arg3] "{x2}" (arg3), | 68 | [arg3] "{x2}" (arg3), |
| 69 | [arg4] "{x3}" (arg4), | 69 | [arg4] "{x3}" (arg4), |
| 70 | [arg5] "{x4}" (arg5), | 70 | [arg5] "{x4}" (arg5), |
| 71 | : .{ .memory = true, .cc = true }); | 71 | : .{ .memory = true }); |
| 72 | } | 72 | } |
| 73 | 73 | ||
| 74 | pub fn syscall6( | 74 | pub fn syscall6( |
| ... | @@ -89,7 +89,7 @@ pub fn syscall6( | ... | @@ -89,7 +89,7 @@ pub fn syscall6( |
| 89 | [arg4] "{x3}" (arg4), | 89 | [arg4] "{x3}" (arg4), |
| 90 | [arg5] "{x4}" (arg5), | 90 | [arg5] "{x4}" (arg5), |
| 91 | [arg6] "{x5}" (arg6), | 91 | [arg6] "{x5}" (arg6), |
| 92 | : .{ .memory = true, .cc = true }); | 92 | : .{ .memory = true }); |
| 93 | } | 93 | } |
| 94 | 94 | ||
| 95 | pub fn clone() callconv(.naked) usize { | 95 | pub fn clone() callconv(.naked) usize { |
| ... | @@ -141,12 +141,12 @@ pub fn restore_rt() callconv(.naked) noreturn { | ... | @@ -141,12 +141,12 @@ pub fn restore_rt() callconv(.naked) noreturn { |
| 141 | \\ svc #0 | 141 | \\ svc #0 |
| 142 | : | 142 | : |
| 143 | : [number] "i" (@intFromEnum(SYS.rt_sigreturn)), | 143 | : [number] "i" (@intFromEnum(SYS.rt_sigreturn)), |
| 144 | : .{ .memory = true, .cc = true }), | 144 | : .{ .memory = true }), |
| 145 | else => asm volatile ( | 145 | else => asm volatile ( |
| 146 | \\ svc #0 | 146 | \\ svc #0 |
| 147 | : | 147 | : |
| 148 | : [number] "{x8}" (@intFromEnum(SYS.rt_sigreturn)), | 148 | : [number] "{x8}" (@intFromEnum(SYS.rt_sigreturn)), |
| 149 | : .{ .memory = true, .cc = true }), | 149 | : .{ .memory = true }), |
| 150 | } | 150 | } |
| 151 | } | 151 | } |
| 152 | 152 |
lib/std/start.zig+1-1| ... | @@ -145,7 +145,7 @@ fn exit2(code: usize) noreturn { | ... | @@ -145,7 +145,7 @@ fn exit2(code: usize) noreturn { |
| 145 | : | 145 | : |
| 146 | : [number] "{x8}" (93), | 146 | : [number] "{x8}" (93), |
| 147 | [arg1] "{x0}" (code), | 147 | [arg1] "{x0}" (code), |
| 148 | : .{ .memory = true, .cc = true }); | 148 | : .{ .memory = true }); |
| 149 | }, | 149 | }, |
| 150 | .sparc64 => { | 150 | .sparc64 => { |
| 151 | asm volatile ("ta 0x6d" | 151 | asm volatile ("ta 0x6d" |
lib/std/valgrind.zig+8-8| ... | @@ -17,7 +17,7 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3: | ... | @@ -17,7 +17,7 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3: |
| 17 | : [_] "={r3}" (-> usize), | 17 | : [_] "={r3}" (-> usize), |
| 18 | : [_] "{r4}" (args), | 18 | : [_] "{r4}" (args), |
| 19 | [_] "{r3}" (default), | 19 | [_] "{r3}" (default), |
| 20 | : .{ .cc = true, .memory = true }), | 20 | : .{ .memory = true }), |
| 21 | .aarch64, .aarch64_be => asm volatile ( | 21 | .aarch64, .aarch64_be => asm volatile ( |
| 22 | \\ ror x12, x12, #3 ; ror x12, x12, #13 | 22 | \\ ror x12, x12, #3 ; ror x12, x12, #13 |
| 23 | \\ ror x12, x12, #51 ; ror x12, x12, #61 | 23 | \\ ror x12, x12, #51 ; ror x12, x12, #61 |
| ... | @@ -25,7 +25,7 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3: | ... | @@ -25,7 +25,7 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3: |
| 25 | : [_] "={x3}" (-> usize), | 25 | : [_] "={x3}" (-> usize), |
| 26 | : [_] "{x4}" (args), | 26 | : [_] "{x4}" (args), |
| 27 | [_] "{x3}" (default), | 27 | [_] "{x3}" (default), |
| 28 | : .{ .cc = true, .memory = true }), | 28 | : .{ .memory = true }), |
| 29 | .mips, .mipsel => asm volatile ( | 29 | .mips, .mipsel => asm volatile ( |
| 30 | \\ srl $0, $0, 13 | 30 | \\ srl $0, $0, 13 |
| 31 | \\ srl $0, $0, 29 | 31 | \\ srl $0, $0, 29 |
| ... | @@ -51,7 +51,7 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3: | ... | @@ -51,7 +51,7 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3: |
| 51 | : [_] "={r3}" (-> usize), | 51 | : [_] "={r3}" (-> usize), |
| 52 | : [_] "{r4}" (args), | 52 | : [_] "{r4}" (args), |
| 53 | [_] "{r3}" (default), | 53 | [_] "{r3}" (default), |
| 54 | : .{ .cc = true, .memory = true }), | 54 | : .{ .memory = true }), |
| 55 | .powerpc64, .powerpc64le => asm volatile ( | 55 | .powerpc64, .powerpc64le => asm volatile ( |
| 56 | \\ rotldi 0, 0, 3 ; rotldi 0, 0, 13 | 56 | \\ rotldi 0, 0, 3 ; rotldi 0, 0, 13 |
| 57 | \\ rotldi 0, 0, 61 ; rotldi 0, 0, 51 | 57 | \\ rotldi 0, 0, 61 ; rotldi 0, 0, 51 |
| ... | @@ -59,7 +59,7 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3: | ... | @@ -59,7 +59,7 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3: |
| 59 | : [_] "={r3}" (-> usize), | 59 | : [_] "={r3}" (-> usize), |
| 60 | : [_] "{r4}" (args), | 60 | : [_] "{r4}" (args), |
| 61 | [_] "{r3}" (default), | 61 | [_] "{r3}" (default), |
| 62 | : .{ .cc = true, .memory = true }), | 62 | : .{ .memory = true }), |
| 63 | .riscv64 => asm volatile ( | 63 | .riscv64 => asm volatile ( |
| 64 | \\ .option push | 64 | \\ .option push |
| 65 | \\ .option norvc | 65 | \\ .option norvc |
| ... | @@ -72,7 +72,7 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3: | ... | @@ -72,7 +72,7 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3: |
| 72 | : [_] "={a3}" (-> usize), | 72 | : [_] "={a3}" (-> usize), |
| 73 | : [_] "{a4}" (args), | 73 | : [_] "{a4}" (args), |
| 74 | [_] "{a3}" (default), | 74 | [_] "{a3}" (default), |
| 75 | : .{ .cc = true, .memory = true }), | 75 | : .{ .memory = true }), |
| 76 | .s390x => asm volatile ( | 76 | .s390x => asm volatile ( |
| 77 | \\ lr %%r15, %%r15 | 77 | \\ lr %%r15, %%r15 |
| 78 | \\ lr %%r1, %%r1 | 78 | \\ lr %%r1, %%r1 |
| ... | @@ -82,7 +82,7 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3: | ... | @@ -82,7 +82,7 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3: |
| 82 | : [_] "={r3}" (-> usize), | 82 | : [_] "={r3}" (-> usize), |
| 83 | : [_] "{r2}" (args), | 83 | : [_] "{r2}" (args), |
| 84 | [_] "{r3}" (default), | 84 | [_] "{r3}" (default), |
| 85 | : .{ .cc = true, .memory = true }), | 85 | : .{ .memory = true }), |
| 86 | .x86 => asm volatile ( | 86 | .x86 => asm volatile ( |
| 87 | \\ roll $3, %%edi ; roll $13, %%edi | 87 | \\ roll $3, %%edi ; roll $13, %%edi |
| 88 | \\ roll $29, %%edi ; roll $19, %%edi | 88 | \\ roll $29, %%edi ; roll $19, %%edi |
| ... | @@ -90,7 +90,7 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3: | ... | @@ -90,7 +90,7 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3: |
| 90 | : [_] "={edx}" (-> usize), | 90 | : [_] "={edx}" (-> usize), |
| 91 | : [_] "{eax}" (args), | 91 | : [_] "{eax}" (args), |
| 92 | [_] "{edx}" (default), | 92 | [_] "{edx}" (default), |
| 93 | : .{ .cc = true, .memory = true }), | 93 | : .{ .memory = true }), |
| 94 | .x86_64 => asm volatile ( | 94 | .x86_64 => asm volatile ( |
| 95 | \\ rolq $3, %%rdi ; rolq $13, %%rdi | 95 | \\ rolq $3, %%rdi ; rolq $13, %%rdi |
| 96 | \\ rolq $61, %%rdi ; rolq $51, %%rdi | 96 | \\ rolq $61, %%rdi ; rolq $51, %%rdi |
| ... | @@ -98,7 +98,7 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3: | ... | @@ -98,7 +98,7 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3: |
| 98 | : [_] "={rdx}" (-> usize), | 98 | : [_] "={rdx}" (-> usize), |
| 99 | : [_] "{rax}" (args), | 99 | : [_] "{rax}" (args), |
| 100 | [_] "{rdx}" (default), | 100 | [_] "{rdx}" (default), |
| 101 | : .{ .cc = true, .memory = true }), | 101 | : .{ .memory = true }), |
| 102 | else => default, | 102 | else => default, |
| 103 | }; | 103 | }; |
| 104 | } | 104 | } |