authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-11-04 12:39:48+01:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-11-04 12:39:48+01:00
log2307cf73b044527464e63aa315e3af343d6584ad
tree83a729ceb1bba7320e0fd31bdd379d773490cbca
parent4050d9bbf918dee0195e88d57b653e89d5e25372
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

std.valgrind: Port doClientRequest() to all archs supported by Valgrind.


1 files changed, 90 insertions(+), 44 deletions(-)

lib/std/valgrind.zig+90-44
......@@ -7,50 +7,96 @@ pub fn doClientRequest(default: usize, request: usize, a1: usize, a2: usize, a3:
77 return default;
88 }
99
10 switch (builtin.target.cpu.arch) {
11 .x86 => {
12 return asm volatile (
13 \\ roll $3, %%edi ; roll $13, %%edi
14 \\ roll $29, %%edi ; roll $19, %%edi
15 \\ xchgl %%ebx,%%ebx
16 : [_] "={edx}" (-> usize),
17 : [_] "{eax}" (&[_]usize{ request, a1, a2, a3, a4, a5 }),
18 [_] "0" (default),
19 : "cc", "memory"
20 );
21 },
22 .x86_64 => {
23 return asm volatile (
24 \\ rolq $3, %%rdi ; rolq $13, %%rdi
25 \\ rolq $61, %%rdi ; rolq $51, %%rdi
26 \\ xchgq %%rbx,%%rbx
27 : [_] "={rdx}" (-> usize),
28 : [_] "{rax}" (&[_]usize{ request, a1, a2, a3, a4, a5 }),
29 [_] "0" (default),
30 : "cc", "memory"
31 );
32 },
33 .aarch64 => {
34 return asm volatile (
35 \\ ror x12, x12, #3 ; ror x12, x12, #13
36 \\ ror x12, x12, #51 ; ror x12, x12, #61
37 \\ orr x10, x10, x10
38 : [_] "={x3}" (-> usize),
39 : [_] "{x4}" (&[_]usize{ request, a1, a2, a3, a4, a5 }),
40 [_] "0" (default),
41 : "cc", "memory"
42 );
43 },
44 // ppc32
45 // ppc64
46 // arm
47 // s390x
48 // mips32
49 // mips64
50 else => {
51 return default;
52 },
53 }
10 const args = &[_]usize{ request, a1, a2, a3, a4, a5 };
11
12 return switch (builtin.cpu.arch) {
13 .arm, .armeb, .thumb, .thumbeb => asm volatile (
14 \\ mov r12, r12, ror #3 ; mov r12, r12, ror #13
15 \\ mov r12, r12, ror #29 ; mov r12, r12, ror #19
16 \\ orr r10, r10, r10
17 : [_] "={r3}" (-> usize),
18 : [_] "{r4}" (args),
19 [_] "{r3}" (default),
20 : "cc", "memory"
21 ),
22 .aarch64, .aarch64_be => asm volatile (
23 \\ ror x12, x12, #3 ; ror x12, x12, #13
24 \\ ror x12, x12, #51 ; ror x12, x12, #61
25 \\ orr x10, x10, x10
26 : [_] "={x3}" (-> usize),
27 : [_] "{x4}" (args),
28 [_] "{x3}" (default),
29 : "cc", "memory"
30 ),
31 .mips, .mipsel => asm volatile (
32 \\ srl $0, $0, 13
33 \\ srl $0, $0, 29
34 \\ srl $0, $0, 3
35 \\ srl $0, $0, 19
36 \\ or $13, $13, $13
37 : [_] "={$11}" (-> usize),
38 : [_] "{$12}" (args),
39 [_] "{$11}" (default),
40 : "memory"
41 ),
42 .mips64, .mips64el => asm volatile (
43 \\ dsll $0, $0, 3 ; dsll $0, $0, 13
44 \\ dsll $0, $0, 29 ; dsll $0, $0, 19
45 \\ or $13, $13, $13
46 : [_] "={$11}" (-> usize),
47 : [_] "{$12}" (args),
48 [_] "{$11}" (default),
49 : "memory"
50 ),
51 .powerpc, .powerpcle => asm volatile (
52 \\ rlwinm 0, 0, 3, 0, 31 ; rlwinm 0, 0, 13, 0, 31
53 \\ rlwinm 0, 0, 29, 0, 31 ; rlwinm 0, 0, 19, 0, 31
54 \\ or 1, 1, 1
55 : [_] "={r3}" (-> usize),
56 : [_] "{r4}" (args),
57 [_] "{r3}" (default),
58 : "cc", "memory"
59 ),
60 .powerpc64, .powerpc64le => asm volatile (
61 \\ rotldi 0, 0, 3 ; rotldi 0, 0, 13
62 \\ rotldi 0, 0, 61 ; rotldi 0, 0, 51
63 \\ or 1, 1, 1
64 : [_] "={r3}" (-> usize),
65 : [_] "{r4}" (args),
66 [_] "{r3}" (default),
67 : "cc", "memory"
68 ),
69 .s390x => asm volatile (
70 \\ lr %%r15, %%r15
71 \\ lr %%r1, %%r1
72 \\ lr %%r2, %%r2
73 \\ lr %%r3, %%r3
74 \\ lr %%r2, %%r2
75 : [_] "={r3}" (-> usize),
76 : [_] "{r2}" (args),
77 [_] "{r3}" (default),
78 : "cc", "memory"
79 ),
80 .x86 => asm volatile (
81 \\ roll $3, %%edi ; roll $13, %%edi
82 \\ roll $29, %%edi ; roll $19, %%edi
83 \\ xchgl %%ebx, %%ebx
84 : [_] "={edx}" (-> usize),
85 : [_] "{eax}" (args),
86 [_] "{edx}" (default),
87 : "cc", "memory"
88 ),
89 .x86_64 => asm volatile (
90 \\ rolq $3, %%rdi ; rolq $13, %%rdi
91 \\ rolq $61, %%rdi ; rolq $51, %%rdi
92 \\ xchgq %%rbx, %%rbx
93 : [_] "={rdx}" (-> usize),
94 : [_] "{rax}" (args),
95 [_] "{rdx}" (default),
96 : "cc", "memory"
97 ),
98 else => default,
99 };
54100}
55101
56102pub const ClientRequest = enum(u32) {