diff --git a/std/special/compiler_rt/index.zig b/std/special/compiler_rt/index.zig index 7f80fd1e7c..73272706ab 100644 --- a/std/special/compiler_rt/index.zig +++ b/std/special/compiler_rt/index.zig @@ -101,30 +101,32 @@ export nakedcc fn __aeabi_uidivmod() { export nakedcc fn __chkstk() { @setDebugSafety(this, false); - if (comptime builtin.arch == builtin.Arch.x86_64) { - asm volatile ( - \\ push %%rcx - \\ cmp $0x1000,%%rax - \\ lea 16(%%rsp),%%rcx // rsp before calling this routine -> rcx - \\ jb 1f - \\ 2: - \\ sub $0x1000,%%rcx - \\ test %%rcx,(%%rcx) - \\ sub $0x1000,%%rax - \\ cmp $0x1000,%%rax - \\ ja 2b - \\ 1: - \\ sub %%rax,%%rcx - \\ test %%rcx,(%%rcx) - \\ - \\ lea 8(%%rsp),%%rax // load pointer to the return address into rax - \\ mov %%rcx,%%rsp // install the new top of stack pointer into rsp - \\ mov -8(%%rax),%%rcx // restore rcx - \\ push (%%rax) // push return address onto the stack - \\ sub %%rsp,%%rax // restore the original value in rax - \\ ret - ); - unreachable; + if (comptime builtin.os == builtin.Os.windows) { + if (comptime builtin.arch == builtin.Arch.x86_64) { + asm volatile ( + \\ push %%rcx + \\ cmp $0x1000,%%rax + \\ lea 16(%%rsp),%%rcx // rsp before calling this routine -> rcx + \\ jb 1f + \\ 2: + \\ sub $0x1000,%%rcx + \\ test %%rcx,(%%rcx) + \\ sub $0x1000,%%rax + \\ cmp $0x1000,%%rax + \\ ja 2b + \\ 1: + \\ sub %%rax,%%rcx + \\ test %%rcx,(%%rcx) + \\ + \\ lea 8(%%rsp),%%rax // load pointer to the return address into rax + \\ mov %%rcx,%%rsp // install the new top of stack pointer into rsp + \\ mov -8(%%rax),%%rcx // restore rcx + \\ push (%%rax) // push return address onto the stack + \\ sub %%rsp,%%rax // restore the original value in rax + \\ ret + ); + unreachable; + } } @setGlobalLinkage(__chkstk, builtin.GlobalLinkage.Internal);