master
 1fn assert(ok: bool) void {
 2    if (!ok) unreachable;
 3}
 4
 5fn setFs(value: c_ulong) void {
 6    asm volatile (
 7        \\syscall
 8        :
 9        : [number] "{rax}" (158),
10          [code] "{rdi}" (0x1002),
11          [val] "{rsi}" (value),
12        : .{ .rcx = true, .r11 = true, .memory = true }
13    );
14}
15
16fn getFs() c_ulong {
17    var result: c_ulong = undefined;
18    asm volatile (
19        \\syscall
20        :
21        : [number] "{rax}" (158),
22          [code] "{rdi}" (0x1003),
23          [ptr] "{rsi}" (@intFromPtr(&result)),
24        : .{ .rcx = true, .r11 = true, .memory = true }
25    );
26    return result;
27}
28
29var test_value: u64 = 12345;
30
31pub fn main() void {
32    const orig_fs = getFs();
33
34    setFs(@intFromPtr(&test_value));
35    assert(getFs() == @intFromPtr(&test_value));
36
37    var test_ptr: *allowzero addrspace(.fs) u64 = @ptrFromInt(0);
38    _ = &test_ptr;
39    assert(test_ptr.* == 12345);
40    test_ptr.* = 98765;
41    assert(test_value == 98765);
42
43    setFs(orig_fs);
44}
45
46// run
47// backend=llvm
48// target=x86_64-linux
49//