gcc assembly x86 sse simd

¿Cómo hacer que GCC use más de dos registros SIMD cuando usa intrínsecos?



assembly x86 (2)

Estoy escribiendo un código y tratando de acelerarlo usando SIMD intrinsics SSE2 / 3. Mi código es de tal naturaleza que necesito cargar algunos datos en un registro XMM y actuar sobre él muchas veces. Cuando miro el código de ensamblador generado, parece que GCC sigue volviendo a tirar los datos a la memoria, para volver a cargar algo más en XMM0 y XMM1. Estoy compilando para x86-64, así que tengo 15 registros. ¿Por qué GCC usa solo dos y qué puedo hacer para pedirle que use más? ¿Hay alguna forma de que pueda "fijar" algún valor en un registro? Agregué la palabra clave "registrar" a mi definición de variable, pero el código ensamblador generado es idéntico.


Sí tu puedes. Reg Vars explícitos habla de la sintaxis que necesita para fijar una variable en un registro específico.


Si está llegando al punto en que está especificando registros individuales para cada intrínseco, también podría escribir el directorio de ensamblaje, especialmente dado el desagradable hábito de gcc de pesimizar intrínsecos innecesariamente en muchos casos.