Какие регистры нужно сохранить в соглашении о вызовах ARM C?

Прошло много времени с тех пор, как я последний раз собирал кодовые манипуляторы, и я немного заржавел в деталях. Если я вызываю функцию C с руки, мне остается только беспокоиться о сохранении r0-r3 и lr, верно?

Если функция C использует какие-либо другие регистры, отвечает ли она за сохранение этих данных в стеке и их восстановление? Другими словами, компилятор сгенерирует код, чтобы сделать это для C-функций.

Например, если я использую r10 в функции ассемблера, мне не нужно помещать его значение в стек или в память и вставлять / восстанавливать его после вызова C, не так ли?

Это для arm-eabi-gcc 4.3.0.

Ответы на вопрос(5)

Ваш ответ на вопрос