From 67575f2004340564d6e52af055ed6fb43d3f9711 Mon Sep 17 00:00:00 2001 From: normalcoder <normalcoder@gmail.com> Date: Sun, 19 Dec 2021 00:12:08 +0300 Subject: [PATCH] ncg/aarch64: Don't use x18 register on AArch64/Darwin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Apple's ABI documentation [1] says: "The platforms reserve register x18. Don’t use this register." While this wasn't problematic in previous Darwin releases, macOS 13 appears to start zeroing this register periodically. See #21964. [1] https://developer.apple.com/documentation/xcode/writing-arm64-code-for-apple-platforms --- compiler/CodeGen.Platform.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/compiler/CodeGen.Platform.h b/compiler/CodeGen.Platform.h index 346dd0af036..a216d266dd6 100644 --- a/compiler/CodeGen.Platform.h +++ b/compiler/CodeGen.Platform.h @@ -926,6 +926,14 @@ freeReg 29 = False -- ip0 -- used for spill offset computations freeReg 16 = False +#if defined(darwin_HOST_OS) || defined(ios_HOST_OS) +-- x18 is reserved by the platform on Darwin/iOS, and can not be used +-- More about ARM64 ABI that Apple platforms support: +-- https://developer.apple.com/documentation/xcode/writing-arm64-code-for-apple-platforms +-- https://github.com/Siguza/ios-resources/blob/master/bits/arm64.md +freeReg 18 = False +#endif + # if defined(REG_Base) freeReg REG_Base = False # endif -- GitLab