Files
revng-revng/share/revng/abi/AAPCS64.yml
Ivan Krysak 724f8bfb59 ABI: streamline terminology
"packed" is used instead of "unnaturally aligned".
2024-10-08 13:53:53 +02:00

101 lines
1.9 KiB
YAML

#
# This file is distributed under the MIT License. See LICENSE.md for details.
#
ABI: AAPCS64
ArgumentsArePositionBased: false
OnlyStartDoubleArgumentsFromAnEvenRegister: true
ArgumentsCanBeSplitBetweenRegistersAndStack: true
BigArgumentsUsePointersToCopy: true
NoRegisterArgumentsCanComeAfterStackOnes: false
AllowPackedTypesInRegisters: true
CalleeIsResponsibleForStackCleanup: false
FloatsUseGPRs: false
PackStackArguments: false
TreatAllAggregatesAsPacked: false
StackAlignment: 16
MinimumStackArgumentSize: 8
MaximumGPRsPerAggregateArgument: 2
MaximumGPRsPerAggregateReturnValue: 2
MaximumGPRsPerScalarArgument: 2
MaximumGPRsPerScalarReturnValue: 2
GeneralPurposeArgumentRegisters:
- x0_aarch64
- x1_aarch64
- x2_aarch64
- x3_aarch64
- x4_aarch64
- x5_aarch64
- x6_aarch64
- x7_aarch64
# This lists all the registers allowed for use by the spec, BUT note that I have
# never run into a case where more than the first two registers are involved.
GeneralPurposeReturnValueRegisters:
- x0_aarch64
- x1_aarch64
- x2_aarch64
- x3_aarch64
- x4_aarch64
- x5_aarch64
- x6_aarch64
- x7_aarch64
VectorArgumentRegisters:
- v0_aarch64
- v1_aarch64
- v2_aarch64
- v3_aarch64
- v4_aarch64
- v5_aarch64
- v6_aarch64
- v7_aarch64
VectorReturnValueRegisters:
- v0_aarch64
- v1_aarch64
- v2_aarch64
- v3_aarch64
- v4_aarch64
- v5_aarch64
- v6_aarch64
- v7_aarch64
CalleeSavedRegisters:
- x19_aarch64
- x20_aarch64
- x21_aarch64
- x22_aarch64
- x23_aarch64
- x24_aarch64
- x25_aarch64
- x26_aarch64
- x27_aarch64
- x28_aarch64
- x29_aarch64
- v8_aarch64
- v9_aarch64
- v10_aarch64
- v11_aarch64
- v12_aarch64
- v13_aarch64
- v14_aarch64
- v15_aarch64
ReturnValueLocationRegister: x8_aarch64
ReturnValueLocationIsReturned: false
ScalarTypes:
- Size: 1
- Size: 2
- Size: 4
- Size: 8
- Size: 16
FloatingPointScalarTypes:
- Size: 2
- Size: 4
- Size: 8
- Size: 16