authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-08-09 03:52:30+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-08-09 17:53:04+02:00
log5cbafcfd56862d9042b2446b0cac9d07d4d141a0
tree32905e0b91cae9c6350f5b2a6cf4f3c764256eab
parent5102fe31bdc030dc6549f8dc2612c9ba981bc2ea
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

std.Thread: remove pointless clobbers in LinuxThreadImpl.freeAndExit()

The function is noreturn and destroys the thread; clobbers serve no purpose. Also remove a pointless blr in the powerpc prong.

1 files changed, 18 insertions(+), 19 deletions(-)

lib/std/Thread.zig+18-19
...@@ -1316,30 +1316,29 @@ const LinuxThreadImpl = struct {...@@ -1316,30 +1316,29 @@ const LinuxThreadImpl = struct {
1316 [len] "{r4}" (self.mapped.len),1316 [len] "{r4}" (self.mapped.len),
1317 ),1317 ),
1318 .powerpc, .powerpcle, .powerpc64, .powerpc64le => asm volatile (1318 .powerpc, .powerpcle, .powerpc64, .powerpc64le => asm volatile (
1319 \\ li 0, 91 # SYS_munmap1319 \\ li 0, 91 # SYS_munmap
1320 \\ sc1320 \\ sc
1321 \\ li 0, 1 # SYS_exit1321 \\ li 0, 1 # SYS_exit
1322 \\ li 3, 01322 \\ li 3, 0
1323 \\ sc1323 \\ sc
1324 \\ blr
1325 :1324 :
1326 : [ptr] "{r3}" (@intFromPtr(self.mapped.ptr)),1325 : [ptr] "{r3}" (@intFromPtr(self.mapped.ptr)),
1327 [len] "{r4}" (self.mapped.len),1326 [len] "{r4}" (self.mapped.len),
1328 ),1327 ),
1329 .riscv32, .riscv64 => asm volatile (1328 .riscv32, .riscv64 => asm volatile (
1330 \\ li a7, 215 # SYS_munmap1329 \\ li a7, 215 # SYS_munmap
1331 \\ ecall1330 \\ ecall
1332 \\ li a7, 93 # SYS_exit1331 \\ li a7, 93 # SYS_exit
1333 \\ mv a0, zero1332 \\ mv a0, zero
1334 \\ ecall1333 \\ ecall
1335 :1334 :
1336 : [ptr] "{a0}" (@intFromPtr(self.mapped.ptr)),1335 : [ptr] "{a0}" (@intFromPtr(self.mapped.ptr)),
1337 [len] "{a1}" (self.mapped.len),1336 [len] "{a1}" (self.mapped.len),
1338 ),1337 ),
1339 .s390x => asm volatile (1338 .s390x => asm volatile (
1340 \\ svc 91 # SYS_munmap1339 \\ svc 91 # SYS_munmap
1341 \\ lghi %%r2, 01340 \\ lghi %%r2, 0
1342 \\ svc 1 # SYS_exit1341 \\ svc 1 # SYS_exit
1343 :1342 :
1344 : [ptr] "{r2}" (@intFromPtr(self.mapped.ptr)),1343 : [ptr] "{r2}" (@intFromPtr(self.mapped.ptr)),
1345 [len] "{r3}" (self.mapped.len),1344 [len] "{r3}" (self.mapped.len),
...@@ -1379,7 +1378,7 @@ const LinuxThreadImpl = struct {...@@ -1379,7 +1378,7 @@ const LinuxThreadImpl = struct {
1379 : [ptr] "{g1}" (@intFromPtr(self.mapped.ptr)),1378 : [ptr] "{g1}" (@intFromPtr(self.mapped.ptr)),
1380 [len] "{g2}" (self.mapped.len),1379 [len] "{g2}" (self.mapped.len),
1381 [stack] "{g3}" (&sparc_exit_stack),1380 [stack] "{g3}" (&sparc_exit_stack),
1382 : .{ .memory = true }),1381 ),
1383 .sparc64 => asm volatile (1382 .sparc64 => asm volatile (
1384 \\ // Ensure that the kernel only has to flush the current register window.1383 \\ // Ensure that the kernel only has to flush the current register window.
1385 \\ flushw1384 \\ flushw
...@@ -1398,7 +1397,7 @@ const LinuxThreadImpl = struct {...@@ -1398,7 +1397,7 @@ const LinuxThreadImpl = struct {
1398 : [ptr] "{g1}" (@intFromPtr(self.mapped.ptr)),1397 : [ptr] "{g1}" (@intFromPtr(self.mapped.ptr)),
1399 [len] "{g2}" (self.mapped.len),1398 [len] "{g2}" (self.mapped.len),
1400 [stack] "{g3}" (&sparc_exit_stack),1399 [stack] "{g3}" (&sparc_exit_stack),
1401 : .{ .memory = true }),1400 ),
1402 .loongarch32, .loongarch64 => asm volatile (1401 .loongarch32, .loongarch64 => asm volatile (
1403 \\ ori $a7, $zero, 215 # SYS_munmap1402 \\ ori $a7, $zero, 215 # SYS_munmap
1404 \\ syscall 0 # call munmap1403 \\ syscall 0 # call munmap
...@@ -1408,7 +1407,7 @@ const LinuxThreadImpl = struct {...@@ -1408,7 +1407,7 @@ const LinuxThreadImpl = struct {
1408 :1407 :
1409 : [ptr] "{r4}" (@intFromPtr(self.mapped.ptr)),1408 : [ptr] "{r4}" (@intFromPtr(self.mapped.ptr)),
1410 [len] "{r5}" (self.mapped.len),1409 [len] "{r5}" (self.mapped.len),
1411 : .{ .memory = true }),1410 ),
1412 .csky => asm volatile (1411 .csky => asm volatile (
1413 \\ movi r7, 215 # SYS_munmap1412 \\ movi r7, 215 # SYS_munmap
1414 \\ trap 01413 \\ trap 0
...@@ -1418,7 +1417,7 @@ const LinuxThreadImpl = struct {...@@ -1418,7 +1417,7 @@ const LinuxThreadImpl = struct {
1418 :1417 :
1419 : [ptr] "{r0}" (@intFromPtr(self.mapped.ptr)),1418 : [ptr] "{r0}" (@intFromPtr(self.mapped.ptr)),
1420 [len] "{r1}" (self.mapped.len),1419 [len] "{r1}" (self.mapped.len),
1421 : .{ .memory = true }),1420 ),
1422 .xtensa, .xtensaeb => asm volatile (1421 .xtensa, .xtensaeb => asm volatile (
1423 \\ movi a2, 81 // SYS_munmap1422 \\ movi a2, 81 // SYS_munmap
1424 \\ syscall1423 \\ syscall
...@@ -1428,7 +1427,7 @@ const LinuxThreadImpl = struct {...@@ -1428,7 +1427,7 @@ const LinuxThreadImpl = struct {
1428 :1427 :
1429 : [ptr] "{a6}" (@intFromPtr(self.mapped.ptr)),1428 : [ptr] "{a6}" (@intFromPtr(self.mapped.ptr)),
1430 [len] "{a3}" (self.mapped.len),1429 [len] "{a3}" (self.mapped.len),
1431 : .{ .memory = true }),1430 ),
1432 else => |cpu_arch| @compileError("Unsupported linux arch: " ++ @tagName(cpu_arch)),1431 else => |cpu_arch| @compileError("Unsupported linux arch: " ++ @tagName(cpu_arch)),
1433 }1432 }
1434 unreachable;1433 unreachable;