Traceback-Tabellen

Die Traceback-Tabelle enthält die Informationen, die erforderlich sind, um das Vorhandensein des Vektorstatus im Stack-Frame für eine Funktion zu bestimmen.

Die Traceback-Tabelleninformationen werden erweitert, um die Informationen bereitzustellen, die erforderlich sind, um das Vorhandensein eines Vektorstatus im Stack-Frame für eine Funktion zu bestimmen. Eines der nicht verwendeten Bits aus dem Feld spare3 wird beansprucht, um anzuzeigen, dass die Traceback-Tabelle Vektorinformationen enthält. Daher werden die folgenden Änderungen an den obligatorischen Traceback-Tabelleninformationen vorgenommen:

Element Beschreibung

unsigned spare3:1;

/* Spare bit */

unsigned has_vec:1;

/* Set if optional vector info is present */

Wenn das Feld has_vec festgelegt ist, sind das optionale Feld parminfo sowie die folgenden optionalen erweiterten Informationen vorhanden. Die neuen optionalen Vektorinformationen, falls vorhanden, folgen den anderen definierten optionalen Feldern und folgen den optionalen Informationen für alloca_reg .

Element Beschreibung

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		*/
Wenn vectorparms ungleich null ist, wird das Feld parminfo wie folgt interpretiert: Wenn vectorparms ungleich null ist, wird das Feld parminfo wie folgt interpretiert:
 

/*		b '00' = fixed parameter		*/
 

/*		b '01' = vector parameter		*/
 

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

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