Tabelas de rastreamento

A tabela de rastreamento fornece as informações necessárias para determinar a presença de estado do vetor no quadro de pilha para uma função.

As informações da tabela de rastreamento são estendidas para fornecer as informações necessárias para determinar a presença de estado do vetor no quadro de pilha para uma função. Um dos bits não utilizados do campo spare3 é alegado para indicar que a tabela de rastreamento contém informações vetoriais. Por isso, as seguintes mudanças são feitas nas informações da tabela de rastreamento obrigatório:

Item Descrição

unsigned spare3:1;

/* Spare bit */

unsigned has_vec:1;

/* Set if optional vector info is present */

Se o campo has_vec estiver configurado, então o campo opcional parminfo está presente, assim como as seguintes informações estendidas opcionais. As novas informações do vetor opcional, se presentes, seguiriam os outros campos opcionais definidos e estariam após as informações opcionais de alloca_reg .

Item Descrição

unsigned vr_saved:6;

/* Number of non-volatile vector registers saved */
 

/* first register saved is assumed to be */
 

/* 32 - vr_saved */

unsigned saves_vrsave:1;

/* Set if vrsave is saved on the stack */

unsigned has_varargs:1;

/* Set if the function has a variable length argument list */

unsigned vectorparms:7;

/* number of vector parameters if not variable */
 

/* argument list.  Otherwise the mandatory field*/
 

/* parmsonstk field must be set */

unsigned vec_present:1;

/* Set if routine performs vector instructions */

unsigned char vecparminfo[4];

/* bitmask array for each vector parm in */
 

/* order as found in the original parminfo, */
 

/* describes the type of vector: */
 

/*		b '00 = vector char		*/
 

/*		b '01 = vector short		*/
 

/*		b '10 = vector int		*/
 

/*		b '11 = vector float		*/
Se vectorparms for diferente de zero, então o campo parminfo é interpretado como: Se vectorparms for diferente de zero, então o campo parminfo é interpretado como:
 

/*		b '00' = fixed parameter		*/
 

/*		b '01' = vector parameter		*/
 

/*		b '10' = single-precision float parameter		*/
 

/*		b '11' = double-precision float parameter		*/