Как AVX Регистры обрабатываются общими конвенциями по вызову?

StackOverflow https://stackoverflow.com/questions/8847617

Вопрос

Я не смог найти ни одного документа, определяющего, как ymm регистры обрабатываются вызывающим абонент и Callee.

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

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

РЕДАКТИРОВАТЬ: Благодаря ответу ниже я смог вывезти ответ в упомянутом DOC для 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.
..."
Это было полезно?

Решение

Ответ на обоих ваших вопросов (при условии, что вы говорите о вызове конвенции в C ++) в величине Руководство по оптимизации Агнером Фог:

Вызовы конвенций для различных компиляторов C ++ и операционных систем.

См. Раздел 6 (Регистрационное использование) на стр. 10. Также раздел 7.2 (передача и возвращение типов SIMD) на стр. 22 может быть актуально.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top