@zigc/lib 0.16.0 → 0.17.0-dev.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/c/fcntl.zig +1 -1
  2. package/c/math.zig +20 -7
  3. package/compiler/build_runner.zig +0 -2
  4. package/compiler/test_runner.zig +1 -1
  5. package/compiler_rt/divmodei4.zig +40 -17
  6. package/compiler_rt/exp.zig +1 -4
  7. package/compiler_rt/exp2.zig +1 -4
  8. package/compiler_rt/exp_f128.zig +377 -0
  9. package/compiler_rt/limb64.zig +875 -15
  10. package/compiler_rt/mulXi3.zig +1 -1
  11. package/compiler_rt/ssp.zig +1 -1
  12. package/compiler_rt/udivmodei4.zig +28 -0
  13. package/libc/musl/arch/mipsn32/syscall_arch.h +35 -32
  14. package/package.json +1 -1
  15. package/std/Build/Step/Compile.zig +0 -1
  16. package/std/Build.zig +0 -3
  17. package/std/Io/Threaded.zig +8 -8
  18. package/std/Io/Writer.zig +46 -42
  19. package/std/os/emscripten.zig +1 -1
  20. package/std/os/linux/aarch64.zig +41 -12
  21. package/std/os/linux/arc.zig +173 -0
  22. package/std/os/linux/arm.zig +41 -12
  23. package/std/os/linux/hexagon.zig +33 -11
  24. package/std/os/linux/loongarch32.zig +41 -13
  25. package/std/os/linux/loongarch64.zig +41 -12
  26. package/std/os/linux/m68k.zig +41 -13
  27. package/std/os/linux/mips.zig +67 -36
  28. package/std/os/linux/mips64.zig +60 -29
  29. package/std/os/linux/mipsn32.zig +60 -29
  30. package/std/os/linux/or1k.zig +41 -12
  31. package/std/os/linux/powerpc.zig +41 -12
  32. package/std/os/linux/powerpc64.zig +41 -12
  33. package/std/os/linux/riscv32.zig +41 -12
  34. package/std/os/linux/riscv64.zig +41 -12
  35. package/std/os/linux/s390x.zig +44 -7
  36. package/std/os/linux/sparc64.zig +83 -52
  37. package/std/os/linux/thumb.zig +52 -36
  38. package/std/os/linux/x32.zig +41 -12
  39. package/std/os/linux/x86.zig +42 -13
  40. package/std/os/linux/x86_64.zig +41 -12
  41. package/std/os/linux.zig +400 -434
  42. package/std/zig/AstGen.zig +1 -74
  43. package/std/zig/AstRlAnnotate.zig +0 -11
  44. package/std/zig/BuiltinFn.zig +0 -32
  45. package/std/zig/Zir.zig +50 -63
  46. package/std/zig.zig +0 -10
  47. package/libc/mingw/math/fdiml.c +0 -24
  48. package/libc/musl/src/math/fdimf.c +0 -10
  49. package/libc/musl/src/math/fdiml.c +0 -18
@@ -5,9 +5,14 @@
5
5
  //! to break the frame chain.
6
6
  const std = @import("../../std.zig");
7
7
  const SYS = std.os.linux.SYS;
8
+ const arm = @import("arm.zig");
8
9
 
9
- pub fn syscall0(number: SYS) u32 {
10
- var buf: [2]u32 = .{ @intFromEnum(number), undefined };
10
+ pub const syscall_arg_t = arm.syscall_arg_t;
11
+
12
+ pub fn syscall0(
13
+ number: SYS,
14
+ ) u32 {
15
+ var buf: [2]syscall_arg_t = .{ @intFromEnum(number), undefined };
11
16
  return asm volatile (
12
17
  \\ str r7, [%[tmp], #4]
13
18
  \\ ldr r7, [%[tmp]]
@@ -18,8 +23,11 @@ pub fn syscall0(number: SYS) u32 {
18
23
  : .{ .memory = true });
19
24
  }
20
25
 
21
- pub fn syscall1(number: SYS, arg1: u32) u32 {
22
- var buf: [2]u32 = .{ @intFromEnum(number), undefined };
26
+ pub fn syscall1(
27
+ number: SYS,
28
+ arg1: syscall_arg_t,
29
+ ) u32 {
30
+ var buf: [2]syscall_arg_t = .{ @intFromEnum(number), undefined };
23
31
  return asm volatile (
24
32
  \\ str r7, [%[tmp], #4]
25
33
  \\ ldr r7, [%[tmp]]
@@ -31,8 +39,12 @@ pub fn syscall1(number: SYS, arg1: u32) u32 {
31
39
  : .{ .memory = true });
32
40
  }
33
41
 
34
- pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
35
- var buf: [2]u32 = .{ @intFromEnum(number), undefined };
42
+ pub fn syscall2(
43
+ number: SYS,
44
+ arg1: syscall_arg_t,
45
+ arg2: syscall_arg_t,
46
+ ) u32 {
47
+ var buf: [2]syscall_arg_t = .{ @intFromEnum(number), undefined };
36
48
  return asm volatile (
37
49
  \\ str r7, [%[tmp], #4]
38
50
  \\ ldr r7, [%[tmp]]
@@ -45,8 +57,13 @@ pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
45
57
  : .{ .memory = true });
46
58
  }
47
59
 
48
- pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
49
- var buf: [2]u32 = .{ @intFromEnum(number), undefined };
60
+ pub fn syscall3(
61
+ number: SYS,
62
+ arg1: syscall_arg_t,
63
+ arg2: syscall_arg_t,
64
+ arg3: syscall_arg_t,
65
+ ) u32 {
66
+ var buf: [2]syscall_arg_t = .{ @intFromEnum(number), undefined };
50
67
  return asm volatile (
51
68
  \\ str r7, [%[tmp], #4]
52
69
  \\ ldr r7, [%[tmp]]
@@ -60,8 +77,14 @@ pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
60
77
  : .{ .memory = true });
61
78
  }
62
79
 
63
- pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {
64
- var buf: [2]u32 = .{ @intFromEnum(number), undefined };
80
+ pub fn syscall4(
81
+ number: SYS,
82
+ arg1: syscall_arg_t,
83
+ arg2: syscall_arg_t,
84
+ arg3: syscall_arg_t,
85
+ arg4: syscall_arg_t,
86
+ ) u32 {
87
+ var buf: [2]syscall_arg_t = .{ @intFromEnum(number), undefined };
65
88
  return asm volatile (
66
89
  \\ str r7, [%[tmp], #4]
67
90
  \\ ldr r7, [%[tmp]]
@@ -76,8 +99,15 @@ pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {
76
99
  : .{ .memory = true });
77
100
  }
78
101
 
79
- pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u32) u32 {
80
- var buf: [2]u32 = .{ @intFromEnum(number), undefined };
102
+ pub fn syscall5(
103
+ number: SYS,
104
+ arg1: syscall_arg_t,
105
+ arg2: syscall_arg_t,
106
+ arg3: syscall_arg_t,
107
+ arg4: syscall_arg_t,
108
+ arg5: syscall_arg_t,
109
+ ) u32 {
110
+ var buf: [2]syscall_arg_t = .{ @intFromEnum(number), undefined };
81
111
  return asm volatile (
82
112
  \\ str r7, [%[tmp], #4]
83
113
  \\ ldr r7, [%[tmp]]
@@ -95,14 +125,14 @@ pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u
95
125
 
96
126
  pub fn syscall6(
97
127
  number: SYS,
98
- arg1: u32,
99
- arg2: u32,
100
- arg3: u32,
101
- arg4: u32,
102
- arg5: u32,
103
- arg6: u32,
128
+ arg1: syscall_arg_t,
129
+ arg2: syscall_arg_t,
130
+ arg3: syscall_arg_t,
131
+ arg4: syscall_arg_t,
132
+ arg5: syscall_arg_t,
133
+ arg6: syscall_arg_t,
104
134
  ) u32 {
105
- var buf: [2]u32 = .{ @intFromEnum(number), undefined };
135
+ var buf: [2]syscall_arg_t = .{ @intFromEnum(number), undefined };
106
136
  return asm volatile (
107
137
  \\ str r7, [%[tmp], #4]
108
138
  \\ ldr r7, [%[tmp]]
@@ -119,22 +149,8 @@ pub fn syscall6(
119
149
  : .{ .memory = true });
120
150
  }
121
151
 
122
- pub const clone = @import("arm.zig").clone;
152
+ pub const clone = arm.clone;
123
153
 
124
- pub fn restore() callconv(.naked) noreturn {
125
- asm volatile (
126
- \\ mov r7, %[number]
127
- \\ svc #0
128
- :
129
- : [number] "I" (@intFromEnum(SYS.sigreturn)),
130
- );
131
- }
154
+ pub const restore = arm.restore;
132
155
 
133
- pub fn restore_rt() callconv(.naked) noreturn {
134
- asm volatile (
135
- \\ mov r7, %[number]
136
- \\ svc #0
137
- :
138
- : [number] "I" (@intFromEnum(SYS.rt_sigreturn)),
139
- );
140
- }
156
+ pub const restore_rt = arm.restore_rt;
@@ -2,14 +2,21 @@ const builtin = @import("builtin");
2
2
  const std = @import("../../std.zig");
3
3
  const SYS = std.os.linux.SYS;
4
4
 
5
- pub fn syscall0(number: SYS) u32 {
5
+ pub const syscall_arg_t = u64;
6
+
7
+ pub fn syscall0(
8
+ number: SYS,
9
+ ) u32 {
6
10
  return asm volatile ("syscall"
7
11
  : [ret] "={rax}" (-> u32),
8
12
  : [number] "{rax}" (@intFromEnum(number)),
9
13
  : .{ .rcx = true, .r11 = true, .memory = true });
10
14
  }
11
15
 
12
- pub fn syscall1(number: SYS, arg1: u32) u32 {
16
+ pub fn syscall1(
17
+ number: SYS,
18
+ arg1: syscall_arg_t,
19
+ ) u32 {
13
20
  return asm volatile ("syscall"
14
21
  : [ret] "={rax}" (-> u32),
15
22
  : [number] "{rax}" (@intFromEnum(number)),
@@ -17,7 +24,11 @@ pub fn syscall1(number: SYS, arg1: u32) u32 {
17
24
  : .{ .rcx = true, .r11 = true, .memory = true });
18
25
  }
19
26
 
20
- pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
27
+ pub fn syscall2(
28
+ number: SYS,
29
+ arg1: syscall_arg_t,
30
+ arg2: syscall_arg_t,
31
+ ) u32 {
21
32
  return asm volatile ("syscall"
22
33
  : [ret] "={rax}" (-> u32),
23
34
  : [number] "{rax}" (@intFromEnum(number)),
@@ -26,7 +37,12 @@ pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
26
37
  : .{ .rcx = true, .r11 = true, .memory = true });
27
38
  }
28
39
 
29
- pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
40
+ pub fn syscall3(
41
+ number: SYS,
42
+ arg1: syscall_arg_t,
43
+ arg2: syscall_arg_t,
44
+ arg3: syscall_arg_t,
45
+ ) u32 {
30
46
  return asm volatile ("syscall"
31
47
  : [ret] "={rax}" (-> u32),
32
48
  : [number] "{rax}" (@intFromEnum(number)),
@@ -36,7 +52,13 @@ pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
36
52
  : .{ .rcx = true, .r11 = true, .memory = true });
37
53
  }
38
54
 
39
- pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {
55
+ pub fn syscall4(
56
+ number: SYS,
57
+ arg1: syscall_arg_t,
58
+ arg2: syscall_arg_t,
59
+ arg3: syscall_arg_t,
60
+ arg4: syscall_arg_t,
61
+ ) u32 {
40
62
  return asm volatile ("syscall"
41
63
  : [ret] "={rax}" (-> u32),
42
64
  : [number] "{rax}" (@intFromEnum(number)),
@@ -47,7 +69,14 @@ pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {
47
69
  : .{ .rcx = true, .r11 = true, .memory = true });
48
70
  }
49
71
 
50
- pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u32) u32 {
72
+ pub fn syscall5(
73
+ number: SYS,
74
+ arg1: syscall_arg_t,
75
+ arg2: syscall_arg_t,
76
+ arg3: syscall_arg_t,
77
+ arg4: syscall_arg_t,
78
+ arg5: syscall_arg_t,
79
+ ) u32 {
51
80
  return asm volatile ("syscall"
52
81
  : [ret] "={rax}" (-> u32),
53
82
  : [number] "{rax}" (@intFromEnum(number)),
@@ -61,12 +90,12 @@ pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u
61
90
 
62
91
  pub fn syscall6(
63
92
  number: SYS,
64
- arg1: u32,
65
- arg2: u32,
66
- arg3: u32,
67
- arg4: u32,
68
- arg5: u32,
69
- arg6: u32,
93
+ arg1: syscall_arg_t,
94
+ arg2: syscall_arg_t,
95
+ arg3: syscall_arg_t,
96
+ arg4: syscall_arg_t,
97
+ arg5: syscall_arg_t,
98
+ arg6: syscall_arg_t,
70
99
  ) u32 {
71
100
  return asm volatile ("syscall"
72
101
  : [ret] "={rax}" (-> u32),
@@ -2,14 +2,21 @@ const builtin = @import("builtin");
2
2
  const std = @import("../../std.zig");
3
3
  const SYS = std.os.linux.SYS;
4
4
 
5
- pub fn syscall0(number: SYS) u32 {
5
+ pub const syscall_arg_t = u32;
6
+
7
+ pub fn syscall0(
8
+ number: SYS,
9
+ ) u32 {
6
10
  return asm volatile ("int $0x80"
7
11
  : [ret] "={eax}" (-> u32),
8
12
  : [number] "{eax}" (@intFromEnum(number)),
9
13
  : .{ .memory = true });
10
14
  }
11
15
 
12
- pub fn syscall1(number: SYS, arg1: u32) u32 {
16
+ pub fn syscall1(
17
+ number: SYS,
18
+ arg1: syscall_arg_t,
19
+ ) u32 {
13
20
  return asm volatile ("int $0x80"
14
21
  : [ret] "={eax}" (-> u32),
15
22
  : [number] "{eax}" (@intFromEnum(number)),
@@ -17,7 +24,11 @@ pub fn syscall1(number: SYS, arg1: u32) u32 {
17
24
  : .{ .memory = true });
18
25
  }
19
26
 
20
- pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
27
+ pub fn syscall2(
28
+ number: SYS,
29
+ arg1: syscall_arg_t,
30
+ arg2: syscall_arg_t,
31
+ ) u32 {
21
32
  return asm volatile ("int $0x80"
22
33
  : [ret] "={eax}" (-> u32),
23
34
  : [number] "{eax}" (@intFromEnum(number)),
@@ -26,7 +37,12 @@ pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
26
37
  : .{ .memory = true });
27
38
  }
28
39
 
29
- pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
40
+ pub fn syscall3(
41
+ number: SYS,
42
+ arg1: syscall_arg_t,
43
+ arg2: syscall_arg_t,
44
+ arg3: syscall_arg_t,
45
+ ) u32 {
30
46
  return asm volatile ("int $0x80"
31
47
  : [ret] "={eax}" (-> u32),
32
48
  : [number] "{eax}" (@intFromEnum(number)),
@@ -36,7 +52,13 @@ pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
36
52
  : .{ .memory = true });
37
53
  }
38
54
 
39
- pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {
55
+ pub fn syscall4(
56
+ number: SYS,
57
+ arg1: syscall_arg_t,
58
+ arg2: syscall_arg_t,
59
+ arg3: syscall_arg_t,
60
+ arg4: syscall_arg_t,
61
+ ) u32 {
40
62
  return asm volatile ("int $0x80"
41
63
  : [ret] "={eax}" (-> u32),
42
64
  : [number] "{eax}" (@intFromEnum(number)),
@@ -47,7 +69,14 @@ pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {
47
69
  : .{ .memory = true });
48
70
  }
49
71
 
50
- pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u32) u32 {
72
+ pub fn syscall5(
73
+ number: SYS,
74
+ arg1: syscall_arg_t,
75
+ arg2: syscall_arg_t,
76
+ arg3: syscall_arg_t,
77
+ arg4: syscall_arg_t,
78
+ arg5: syscall_arg_t,
79
+ ) u32 {
51
80
  return asm volatile ("int $0x80"
52
81
  : [ret] "={eax}" (-> u32),
53
82
  : [number] "{eax}" (@intFromEnum(number)),
@@ -61,12 +90,12 @@ pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u
61
90
 
62
91
  pub fn syscall6(
63
92
  number: SYS,
64
- arg1: u32,
65
- arg2: u32,
66
- arg3: u32,
67
- arg4: u32,
68
- arg5: u32,
69
- arg6: u32,
93
+ arg1: syscall_arg_t,
94
+ arg2: syscall_arg_t,
95
+ arg3: syscall_arg_t,
96
+ arg4: syscall_arg_t,
97
+ arg5: syscall_arg_t,
98
+ arg6: syscall_arg_t,
70
99
  ) u32 {
71
100
  // arg6 can't be passed to asm in a register because ebp might be reserved as the frame pointer
72
101
  // and there are no more GPRs available; so we'll need a memory operand for it. Adding that
@@ -74,7 +103,7 @@ pub fn syscall6(
74
103
  // *its* own GPR, so we need to pass another arg in memory too! This is surprisingly hard to get
75
104
  // right, because we can't touch esp or ebp until we're done with the memory input (as that
76
105
  // input could be relative to esp or ebp).
77
- const args56: [2]u32 = .{ arg5, arg6 };
106
+ const args56: [2]syscall_arg_t = .{ arg5, arg6 };
78
107
  return asm volatile (
79
108
  \\ push %[args56]
80
109
  \\ push %%ebp
@@ -2,14 +2,21 @@ const builtin = @import("builtin");
2
2
  const std = @import("../../std.zig");
3
3
  const SYS = std.os.linux.SYS;
4
4
 
5
- pub fn syscall0(number: SYS) u64 {
5
+ pub const syscall_arg_t = u64;
6
+
7
+ pub fn syscall0(
8
+ number: SYS,
9
+ ) u64 {
6
10
  return asm volatile ("syscall"
7
11
  : [ret] "={rax}" (-> u64),
8
12
  : [number] "{rax}" (@intFromEnum(number)),
9
13
  : .{ .rcx = true, .r11 = true, .memory = true });
10
14
  }
11
15
 
12
- pub fn syscall1(number: SYS, arg1: u64) u64 {
16
+ pub fn syscall1(
17
+ number: SYS,
18
+ arg1: syscall_arg_t,
19
+ ) u64 {
13
20
  return asm volatile ("syscall"
14
21
  : [ret] "={rax}" (-> u64),
15
22
  : [number] "{rax}" (@intFromEnum(number)),
@@ -17,7 +24,11 @@ pub fn syscall1(number: SYS, arg1: u64) u64 {
17
24
  : .{ .rcx = true, .r11 = true, .memory = true });
18
25
  }
19
26
 
20
- pub fn syscall2(number: SYS, arg1: u64, arg2: u64) u64 {
27
+ pub fn syscall2(
28
+ number: SYS,
29
+ arg1: syscall_arg_t,
30
+ arg2: syscall_arg_t,
31
+ ) u64 {
21
32
  return asm volatile ("syscall"
22
33
  : [ret] "={rax}" (-> u64),
23
34
  : [number] "{rax}" (@intFromEnum(number)),
@@ -26,7 +37,12 @@ pub fn syscall2(number: SYS, arg1: u64, arg2: u64) u64 {
26
37
  : .{ .rcx = true, .r11 = true, .memory = true });
27
38
  }
28
39
 
29
- pub fn syscall3(number: SYS, arg1: u64, arg2: u64, arg3: u64) u64 {
40
+ pub fn syscall3(
41
+ number: SYS,
42
+ arg1: syscall_arg_t,
43
+ arg2: syscall_arg_t,
44
+ arg3: syscall_arg_t,
45
+ ) u64 {
30
46
  return asm volatile ("syscall"
31
47
  : [ret] "={rax}" (-> u64),
32
48
  : [number] "{rax}" (@intFromEnum(number)),
@@ -36,7 +52,13 @@ pub fn syscall3(number: SYS, arg1: u64, arg2: u64, arg3: u64) u64 {
36
52
  : .{ .rcx = true, .r11 = true, .memory = true });
37
53
  }
38
54
 
39
- pub fn syscall4(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64) u64 {
55
+ pub fn syscall4(
56
+ number: SYS,
57
+ arg1: syscall_arg_t,
58
+ arg2: syscall_arg_t,
59
+ arg3: syscall_arg_t,
60
+ arg4: syscall_arg_t,
61
+ ) u64 {
40
62
  return asm volatile ("syscall"
41
63
  : [ret] "={rax}" (-> u64),
42
64
  : [number] "{rax}" (@intFromEnum(number)),
@@ -47,7 +69,14 @@ pub fn syscall4(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64) u64 {
47
69
  : .{ .rcx = true, .r11 = true, .memory = true });
48
70
  }
49
71
 
50
- pub fn syscall5(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u64) u64 {
72
+ pub fn syscall5(
73
+ number: SYS,
74
+ arg1: syscall_arg_t,
75
+ arg2: syscall_arg_t,
76
+ arg3: syscall_arg_t,
77
+ arg4: syscall_arg_t,
78
+ arg5: syscall_arg_t,
79
+ ) u64 {
51
80
  return asm volatile ("syscall"
52
81
  : [ret] "={rax}" (-> u64),
53
82
  : [number] "{rax}" (@intFromEnum(number)),
@@ -61,12 +90,12 @@ pub fn syscall5(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u
61
90
 
62
91
  pub fn syscall6(
63
92
  number: SYS,
64
- arg1: u64,
65
- arg2: u64,
66
- arg3: u64,
67
- arg4: u64,
68
- arg5: u64,
69
- arg6: u64,
93
+ arg1: syscall_arg_t,
94
+ arg2: syscall_arg_t,
95
+ arg3: syscall_arg_t,
96
+ arg4: syscall_arg_t,
97
+ arg5: syscall_arg_t,
98
+ arg6: syscall_arg_t,
70
99
  ) u64 {
71
100
  return asm volatile ("syscall"
72
101
  : [ret] "={rax}" (-> u64),