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:
| 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 |
| 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 |