Question

Je ne pouvais pas trouver un document définissant la façon dont les registres YMM sont gérées par l'appelant et par le callee.

Pour concentrer ma question, voici ce que je voudrais savoir:

  1. Quels sont les registres YMM doivent être restaurés par l'avant de revenir à callee l'appelant?
  2. Comme il existe des différences de registres XMM sous Linux et Windows, je suppose que les registres aussi YMM ne suivent pas les mêmes règles. quelles sont les règles pour chacun des systèmes d'exploitation?

EDIT: Merci à la réponse ci-dessous j'ai pu récupérer la réponse dans le document mentionné pour Win64. Je suis tout à fait sûr que Linux suit des règles similaires:

"...
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.
..."
Était-ce utile?

La solution

La réponse à vos deux questions (en supposant que vous parlez convention d'appel en C ++) est dans le grand Guide d'optimisation par Agner Fog:

Conventions d'appel pour les différents compilateurs C ++ et les systèmes d'exploitation .

Voir la section 6 (utilisation Registre) à la page 10. Aussi la section 7.2 (passage et le retour types SIMD) à la page 22 pourrait être utile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top