authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-08-18 02:02:47+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-08-19 08:38:05+02:00
logd79e2822b062b98dff6bfd2c4549ec065d9e43d2
treef7735d7175a78ecfee12852078f34e2f0f81000c
parent54e48f7b7dec96c8cdd1a0a0491554b118767817

std.Thread: Implement freeAndExit() for sparc32.


1 files changed, 22 insertions(+), 0 deletions(-)

lib/std/Thread.zig+22
......@@ -1188,6 +1188,28 @@ const LinuxThreadImpl = struct {
11881188 [len] "r" (self.mapped.len),
11891189 : "memory"
11901190 ),
1191 .sparc => asm volatile (
1192 \\ # See sparc64 comments below.
1193 \\ 1:
1194 \\ cmp %%fp, 0
1195 \\ beq 2f
1196 \\ nop
1197 \\ ba 1b
1198 \\ restore
1199 \\ 2:
1200 \\ mov 73, %%g1 # SYS_munmap
1201 \\ mov %[ptr], %%o0
1202 \\ mov %[len], %%o1
1203 \\ t 0x3 # ST_FLUSH_WINDOWS
1204 \\ t 0x10
1205 \\ mov 1, %%g1 # SYS_exit
1206 \\ mov 0, %%o0
1207 \\ t 0x10
1208 :
1209 : [ptr] "r" (@intFromPtr(self.mapped.ptr)),
1210 [len] "r" (self.mapped.len),
1211 : "memory"
1212 ),
11911213 .sparc64 => asm volatile (
11921214 \\ # SPARCs really don't like it when active stack frames
11931215 \\ # is unmapped (it will result in a segfault), so we