diff options
author | ostannard <oliver.stannard@arm.com> | 2024-02-15 12:39:16 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-15 12:39:16 +0000 |
commit | 9cc98e336980f00cbafcbed8841344e6ac472bdc (patch) | |
tree | 1d20629b5a01096a0fa6618e800ba09c178baabe /clang/lib/CodeGen/CodeGenModule.cpp | |
parent | 32fcfcdc4cc1d68116438f761897953894d65fb1 (diff) | |
download | llvm-9cc98e336980f00cbafcbed8841344e6ac472bdc.zip llvm-9cc98e336980f00cbafcbed8841344e6ac472bdc.tar.gz llvm-9cc98e336980f00cbafcbed8841344e6ac472bdc.tar.bz2 |
[AArch64] Add soft-float ABI (#74460)
This adds support for the AArch64 soft-float ABI. The specification for
this ABI was added by https://github.com/ARM-software/abi-aa/pull/232.
Because all existing AArch64 hardware has floating-point hardware, we
expect this to be a niche option, only used for embedded systems on
R-profile systems. We are going to document that SysV-like systems
should only ever use the base (hard-float) PCS variant:
https://github.com/ARM-software/abi-aa/pull/233. For that reason, I've
not added an option to select the ABI independently of the FPU hardware,
instead the new ABI is enabled iff the target architecture does not have
an FPU.
For testing, I have run this through an ABI fuzzer, but since this is
the first implementation it can only test for internal consistency
(callers and callees agree on the PCS), not for conformance to the ABI
spec.
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
-rw-r--r-- | clang/lib/CodeGen/CodeGenModule.cpp | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index c984260..64836f8 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -145,6 +145,8 @@ createTargetCodeGenInfo(CodeGenModule &CGM) { Kind = AArch64ABIKind::DarwinPCS; else if (Triple.isOSWindows()) return createWindowsAArch64TargetCodeGenInfo(CGM, AArch64ABIKind::Win64); + else if (Target.getABI() == "aapcs-soft") + Kind = AArch64ABIKind::AAPCSSoft; return createAArch64TargetCodeGenInfo(CGM, Kind); } |