From bdee82950bc2b4b5abb5ca7ec065a17227785e16 Mon Sep 17 00:00:00 2001 From: Jakob Botsch Nielsen Date: Wed, 15 Oct 2025 13:36:55 +0200 Subject: [PATCH] JIT: Use r9,r10 for GS cookie check in Swift reverse pinvokes Swift returns values in r8, so it cannot be used for the cookie check. Switch it to r9,r10 instead. --- src/coreclr/jit/codegenxarch.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/coreclr/jit/codegenxarch.cpp b/src/coreclr/jit/codegenxarch.cpp index 0857ee820fb2ae..1212680e83e5c1 100644 --- a/src/coreclr/jit/codegenxarch.cpp +++ b/src/coreclr/jit/codegenxarch.cpp @@ -115,6 +115,13 @@ void CodeGen::genEmitGSCookieCheck(bool pushReg) // these cannot be a part of any kind of return regGSCheck = REG_R8; regNumber regGSCheckAlternative = REG_R9; + + // except for swift, where R8 can be used for returns + if (compiler->info.compCallConv == CorInfoCallConvExtension::Swift) + { + regGSCheck = REG_R9; + regGSCheckAlternative = REG_R10; + } #endif if (compiler->lvaKeepAliveAndReportThis() && compiler->lvaGetDesc(compiler->info.compThisArg)->lvIsInReg() &&