2012-01-13 1 views
6

Я не мог найти документа, определяющего, как регистры YMM обрабатываются вызывающим абонентом и вызываемым пользователем.Как регистры AVX обрабатываются общими соглашениями?

Чтобы сосредоточиться на мой вопрос, вот что я хотел бы знать:

  1. Какие регистры YMM должны быть восстановлены вызываемым прежде чем вернуться к абоненту?
  2. Поскольку существуют различия для регистров XMM в Linux и Windows, я полагаю, что также регистры YMM не соответствуют тем же правилам. каковы правила для каждой из ОС?

EDIT: Благодаря ответу ниже я смог убрать ответ в упомянутом документе для Win64. Я совершенно уверен, что Linux следует аналогичные правила:

"... 
The YMM registers do not have callee-save status, except for the lower half 
of YMM6-YMM15 in 64-bit Windows, where XMM6-XMM15 have callee-save status. 
Possible future extensions of the vector registers to 512 bits or more will not have calleesave 
status. 
..." 

ответ

4

Ответ на оба ваши вопросы (в предположении, что вы говорите о вызовах в C++) в большой optimization guide по Agner Туман:

Calling conventions for different C++ compilers and operating systems.

См. Раздел 6 (Использование реестра) на стр. 10. Также может иметь значение раздел 7.2 (Передача и возврат типов SIMD) на стр. 22.

+0

Спасибо, это было полезно. –

Смежные вопросы