Мне действительно интересно, есть ли какой-либо способ (т.е. опция компиляции или предыдущий другой код реализации), чтобы заставить бэкэнд LLVM AArch64 использовать указатель кадра вместо указателя стека, когда он ссылается (или находит) на локальные переменные в стеке frame.
Когда я генерирую ассемблерный код с помощью бэкэнда LLVM AArch64, кажется, что он использует указатель стека для поиска локальных переменных в кадре стека.
Например,
....
str wzr, [sp, #12] // e.g., local variable a
str w8, [sp, #8] // e.g., local variable b
str w9, [sp, #4] // e.g., local variable c
str w10, [sp]
...
(он вычисляет смещения из указателя стека и обращается к локальной переменной с помощью указателя стека и смещений.)
Странно то, что все другие инструменты компилятора используют указатель кадра, а не указатель стека , Я опробовал "g cc", "clang", "LLVM x86 backend", и все они ссылаются на локальные переменные, используя указатель кадра и его смещения.
Есть ли причины, по которым единственный LLVM AArch64 использует указатель стека? И есть ли способ заставить его использовать рамный пинтер?
Буду очень признателен за любой комментарий или ответ! :)