Разница между соглашениями о вызовах функций в x86 и ARM заключается в способах передачи параметров и обработки результатов вызовов. dims.petrsu.ru metanit.com
В x86 для 32-битной платформы наибольшее распространение получили три соглашения о вызовах: cdecl, pascal и stdcall. dims.petrsu.ru Некоторые особенности:
В ARM при вызове функций C/C++ по умолчанию применяются условности ARM ABI, которые определяются стандартом AAPCS (Procedure Call Standard for the Arm Architecture). metanit.com Некоторые особенности:
- Значения для первых 8 целочисленных параметров передаются последовательно через регистры X0-X7. metanit.com
- Значения для первых 8 параметров, которые представляют числа с плавающей точкой, передаются последовательно через регистры V0-V7. metanit.com
- 9-й и последующие параметры передаются через стек. metanit.com
- Данные, размер которых превышает размер регистра, разбиваются на несколько регистров (при их доступности). metanit.com
- Целочисленный результат помещается в Х0, результат-число с плавающей точкой — в V0. metanit.com
- Для возвращения из функции результата, который представляет адрес, применяется регистр X8. metanit.com