Соглашение о вызовах из ARM в C, NEON регистрируется для сохранения
Существует аналогичный пост, посвященный регулярным регистрам. Как насчет НЕОН регистров. Насколько я помню, либо верхняя, либо нижняя половина регистров должны сохраняться при вызовах функций. Я нигде не могу найти эту информацию, кто-нибудь может это уточнить?
Спасибо
Из AAPCS, §5.1.1 Основные регистры:
- r0-r3 - регистры аргумента и нуля; r0-r1 также являются регистрами результатов
- r4-r8 - регистры сохранения вызовов
- r9 может быть регистром сохранения вызываемого абонента или нет (в некоторых вариантах AAPCS это специальный регистр)
- r10-r11 - регистры сохранения вызовов
- R12-R15 являются специальные регистры
Из AAPCS, §5.1.2.1 Соглашения об использовании регистра VFP (VFP v2, v3 и Advanced SIMD Extension):
- s16 – s31 (d8 – d15, q4 – q7) должны быть сохранены
- s0–s15 (d0–d7, q0–q3) и d16–d31 (q8–q15) не нуждаются в сохранении
1 ответ
Решение
Из AAPCS, §5.1.2.1:
- s16 – s31 (d8 – d15, q4 – q7) должны быть сохранены
- s0–s15 (d0–d7, q0–q3) и d16–d31 (q8–q15) не нуждаются в сохранении