Где соглашение о регистрации ARM?
Согласно документации ARMv7, R0-R12 являются регистрами общего назначения, а R13, R14 и R15 являются SP, LR и PC. Я видел в некоторых вопросах на форуме ARM, Stackru или других сайтах, что R11 часто используется в качестве указателя фрейма ( форум ARM, pp, Stackru, Microsoft), однако я не могу найти никакой официальной документации от ARM или GCC, объявляя об использовании этого регистра. Некоторые люди также сказали, что это было в AAPCS, однако единственная информация, доступная в этом документе о R11, - то, что это переменный регистр.
Если бы кто-нибудь мог помочь найти официальный документ с указанием использования этих регистров, включая R11 в качестве указателя кадра, я был бы очень благодарен.
1 ответ
Я думаю, что вы ищете ABI, Application Binary Interface.
Это сборник документов. На базовом уровне R11 действительно объявлен как "Variable-register 8".
Это само по себе не очень ограничительное определение. Реализации могут присваивать практически любую переменную, будь то видимая программисту переменная или некоторая внутренняя вспомогательная переменная для любой специфической для языка функции, в которой они нуждаются. Переменная Frame Pointer является полезной переменной в некоторых языках, но не во всех, и было бы стыдно жертвовать 8-м регистром переменных в реализациях, которые не требуют Frame Pointer.
Таким образом, ARM не имеет смысла делать официальное заявление о том, как R11 будет использоваться в качестве указателя кадра, а GCC не может делать официальные заявления от имени ARM.