diff --git a/lib/std/os/linux/tls.zig b/lib/std/os/linux/tls.zig index 212de9ccb2..7319f4863e 100644 --- a/lib/std/os/linux/tls.zig +++ b/lib/std/os/linux/tls.zig @@ -84,6 +84,7 @@ const current_variant: Variant = switch (native_arch) { .riscv32, .riscv64, => .I_modified, + .s390x, .sparc64, .x86, .x86_64, @@ -277,6 +278,17 @@ pub fn setThreadPointer(addr: usize) void { : [addr] "r" (addr), ); }, + .s390x => { + asm volatile ( + \\ lgr %%r0, %[addr] + \\ sar %%a1, %%r0 + \\ srlg %%r0, %%r0, 32 + \\ sar %%a0, %%r0 + : + : [addr] "r" (addr), + : "r0" + ); + }, .sparc64 => { asm volatile ( \\ mov %[addr], %%g7