diff options
author | normalcoder <normalcoder@gmail.com> | 2021-12-19 00:12:08 +0300 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2022-08-09 13:48:59 -0400 |
commit | 7c3b4193b07bea8e2f7820d731c74e4057c1f9ff (patch) | |
tree | 5e3d3efa8815560ba0a7167689f8ebe1ce988628 | |
parent | 5765e13370634979eb6a0d9f67aa9afa797bee46 (diff) | |
download | haskell-wip/T21964.tar.gz |
ncg/aarch64: Don't use x18 register on AArch64/Darwinwip/T21964
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
-rw-r--r-- | compiler/CodeGen.Platform.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/compiler/CodeGen.Platform.h b/compiler/CodeGen.Platform.h index 346dd0af03..a216d266dd 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 |