Как регистры AVX обрабатываются общими соглашениями о вызовах? - PullRequest
6 голосов
/ 13 января 2012

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

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

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

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

1 Ответ

4 голосов
/ 13 января 2012

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

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

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

...