Pregunta

No pude encontrar ningún documento que definiera cómo los registros YMM son manejados por la persona que llama y por el Callee.

Para concentrar mi pregunta, esto es lo que me gustaría saber:

  1. ¿Qué registros YMM debe ser restaurado por el Callee antes de regresar a la persona que llama?
  2. Dado que hay diferencias para los registros XMM en Linux y Windows, supongo que también los registros YMM no siguen las mismas reglas. ¿Cuáles son las reglas para cada uno de los sistemas operativos?

EDITAR: Gracias a la respuesta a continuación pude buscar la respuesta en el documento mencionado para Win64. Estoy bastante seguro de que Linux sigue reglas similares:

"...
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.
..."
¿Fue útil?

Solución

La respuesta a sus dos preguntas (suponiendo que esté hablando de llamar a la convención en C ++) está en el Gran guía de optimización por Agner Fog:

Convenciones de llamadas para diferentes compiladores y sistemas operativos de C ++.

Consulte la Sección 6 (Uso de registro) en la página 10. También la Sección 7.2 (tipos SIMD de aprobación y devolución) en la página 22 podría ser relevante.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top