Paso de argumento

Los primeros doce parámetros de vector para una función se colocan en los registros de VR2 a VR13.

Los primeros doce parámetros de vector para una función se colocan en los registros de VR2 a VR13. Los registros de parámetros de vector innecesarios contienen valores no definidos al entrar en la lista de parámetros de argumento de longitud function.Non-variable no se duplican en las GPR. Los parámetros de vector adicionales (13th y posteriores) se pasan a través de la memoria en la pila de programa, alineados de 16 bytes, en su ubicación correlacionada adecuada dentro de la región de parámetro correspondiente a su posición en la lista de parámetros.

Para listas de argumentos de longitud variable, va_list continúa siendo un puntero a la ubicación de memoria del siguiente parámetro. Cuando va_arg () accede a un tipo de vector, va_list debe alinearse primero con un límite de 16 bytes. El receptor y consumidor de una lista de argumentos de longitud variable es responsable de realizar esta alineación antes de recuperar el parámetro de tipo de vector.

Una estructura no empaquetada o unión pasada por valor que tiene un miembro de vector en cualquier lugar dentro de ella se alineará con un límite de 16 bytes en la pila.

Una función que toma una lista de argumentos de longitud variable tiene todos los parámetros correlacionados en el área de argumentos ordenados y alineados según su tipo. Las primeras ocho palabras (32 bits) o palabras dobles (64 bits) de una lista de argumentos de longitud variable se sombrean en GPR r3 a r10. Esto incluye parámetros de vector. Las tablas siguientes ilustran los parámetros de lista de argumentos de longitud variable:

Tabla 1. Parámetros de lista de argumentos de longitud variable de 32 bits (post-prolog)
Elemento Descripción
OldSp -> Cadena posterior (bc)  
-nFPRs*8 ...  
-nGPRs*4 ...  
-220 (máx) VRSAVE  
  Variables locales  
SP+56 ...  
SP+52 PW7 Vector Parm 2b, sombra en GPR10
SP+48 PW6 Vector Parm 2a, sombra en GPR9
SP+44 PW5 Parámetro de vector 1d, sombra en GPR8
SP+40 PW4 Parámetro de vector 1c, sombra en GPR7
SP+36 PW3 Parámetro de vector 1b, sombra en GPR6
SP+32 PW2 Parámetro de vector 1a, sombra en GPR5
SP+28 PW1  
SP+24 PW0  
SP+20 Tabla de contenido guardada  
SP+16 Reservado (enlazador)  
SP+12 Reservado (compilador)  
SP+8 LR guardada  
SP+4 CR guardado  
SP-> OldSP  
Tabla 2. Parámetros de lista de argumentos de longitud variable de 64 bits (post-prolog)
Elemento Descripción
OldSp -> Cadena posterior (bc)  
-nFPRs*8 ...  
-nGPRs*8 ...  
-288 (máx) VRSAVE  
  Variables locales  
SP+112 ...  
SP+104 PW7 Parámetro de vector 4c, 4d, sombra en GPR10
SP+96 PW6 Parámetro de vector 4a, 4b, sombra en GPR9
SP+88 PW5 Parámetro de vector 3c, 3d, sombra en GPR8
SP+80 PW4 Parámetro de vector 3a, 3b, sombra en GPR7
SP+72 PW3 Parámetro de vector 2c, 2d, sombra en GPR6
SP+64 PW2 Parámetro de vector 2a, 2b, sombra en GPR5
SP+56 PW1 Parámetro de vector 1c, 1d, sombra en GPR4
SP+48 PW0 Parámetro de vector 1a, 1b, sombra en GPR3
SP+40 Tabla de contenido guardada  
SP+32 Reservado (enlazador)  
SP+24 Reservado (compilador)  
SP+16 LR guardada  
SP+8 CR guardado  
SP-> OldSP