Соглашение о вызовах с 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) сохранять не нужно.

person Pavel P    schedule 13.03.2011    source источник
comment
А как насчет FPSCR и FPEXC?   -  person Sven    schedule 13.10.2018
comment
Я даже не уверен в этом. Например, 5.1.2.1 VFP register usage conventions (VFP v2, v3 and the Advanced SIMD Extension) охватывает FPSCR, но неясно, следует ли вам что-то делать, чтобы сохранить это или нет.   -  person Pavel P    schedule 18.10.2018


Ответы (1)


Из AAPCS, §5.1.2.1:

  • s16 – s31 (d8 – d15, q4 – q7) необходимо сохранить.
  • s0 – s15 (d0 – d7, q0 – q3) и d16 – d31 (q8 – q15) сохранять не нужно.
person kennytm    schedule 13.03.2011