


    /* EPC Imp to C Translation Release 4 Version Apr 95 */


#include "imptoc.h"

 
/**                                                            sprvars3.inc  */
/** 30-08-91 - New module for merge of M88110 FORTRAN changes with           */
/**            generic code generator. (rt)                                  */
/**                                                            sprvars2.inc  */
/** 13-06-91 - Merge of SPARC and M88K code generators. (rt)                 */
/***/
/** 19-11-90 - This module created from subset of definitions  spregvars1.inc*/
/**            in include file sparc13.3.3.inc. The                          */
/**            intention of this module is to hold all                       */
/**            architecture dependent definitions relating to                */
/**            integer and floating register variables. (rt)                 */
/***/
/***/
/******************************************************************************/
/**                    REGISTER VARIABLE DEFINITIONS                         **/
/******************************************************************************/
/***/
/*----------------------------------------------------------------------------*/
/*                FOR USE BY FORTRAN REGISTER ALLOCATION                     */
/*----------------------------------------------------------------------------*/
#define Smallregset 9
#define Largeregset 16
/***/
#define smallfregset 10
#define smallfregpairset 9
#define largefregset 26
#define largefregpairset 25
/***/
#define Cfregsmaskconst (0x7FFF0)
 	/*bit set if (register identify -32) is potentially*/
 	/*    allocatable by the Optimiser for FregVars    */
/***/
#define Cnumregsregs 1	/*the number of registers available to*/
 	/*the optimiser for its own allocation*/
static const unsigned char CregMap [31+1] = {0,1,
2,3,4,5,6,7,
8,9,10,11,12,13,14,15,
16,17,18,19,20,21,22,23,
24,25,26,27,28,29,30,31
}	/* Dummy for now*/;		 
/***/
#define Cnumfregsregs 16	/*the maximum number of floating point */
 	/*    registers which the optimiser may*/
 	/*    allocate                         */
static const unsigned char CfregMap [31+1] = {32,
33,34,35,36,37,38,39,
40,41,42,43,44,45,46,47,
48,49,50,51,52,53,54,55,
56,57,58,59,60,61,62,63
}	/* dummy for now*/;		 
/**/
/**/
/**/
/*----------------------------------------------------------------------------*/
/*                FOR USE BY C AND C++ REGISTER ALLOCATION                   */
/*----------------------------------------------------------------------------*/
/**/
#define CRetIntReg 2	/* $2 - The integer return register */
#define CRetFloatReg 36	/* $f0 - The float return register   */
#define CQCResultReg 50	/* ?: expression result register     */
 
#define NUMPARAMREGS 6	/* Number of parameters passed in registers */
 
#define CTotalRegVars 29
static const unsigned char CRegVarMap [63+1] = {0,
1,2,3,4,5,6,7,
8,9,10,11,12,13,14,15,
16,17,18,19,20,21,22,23,
24,25,26,27,28,29,30,31,
32,33,34,35,36,37,38,39,
40,41,42,43,44,45,46,47,
48,49,50,51,52,53,54,55,
56,57,58,59,60,61,62,63
}	/* dummy for now*/;		 
/* The following is a properties array for each register which is available  */
/* for optimiser allocation. The property byte associated with each register */
/* is a bit vector detailing the data types that the register may hold. If a */
/* register can hold a greater than 32 bit quantity then it is assummed      */
/* that this requires grouping with adjacent registers in the array          */
#define CRVP32BitInt (0x1)	/* integer                         */
#define CRVP64BitInt (0x2)	/* long integer - NOT IMPLEMENTED  */
#define CRVP32BitFloat (0x4)	/* float                           */
#define CRVP64BitFloat (0x8)	/* double                          */
#define CRVP128BitFloat (0x10)	/* long double - NOT IMPLEMENTED   */
 
#define CRVPDescending (0x20)	/* adjacent logical is predecessor */
#define CRVPWideReg (0x40)	/* logical has wide property       */
 
#define CRVPInteger (0x3)	/* generic integer type            */
#define CRVPFloat (0x1C)	/* generic float type              */
 
static const unsigned char CRegVarProp [CTotalRegVars+7] = {0x3	/*%l0*/,
0x1	/*%l1*/,0x3	/*%l2*/,0x1	/*%l3*/,0x3	/*%l4*/,0x1	/*%l5*/,0x1	/*%l6*/,0x21	/*%i5*/,
0x21	/*%i4*/,0x21	/*%i3*/,0x21	/*%i2*/,0x21	/*%i1*/,0x21	/*%i0*/,0x1C	/*%f12*/,0x4	/*%f13*/,0xC	/*%f14*/,
0x4	/*%f15*/,0x1C	/*%f16*/,0x4	/*%f17*/,0xC	/*%f18*/,0x4	/*%f19*/,0x1C	/*%f20*/,0x4	/*%f21*/,0xC	/*%f22*/,
0x4	/*%f23*/,0x1C	/*%f24*/,0x4	/*%f25*/,0xC	/*%f26*/,0x4	/*%f27*/,0x20	/*%o5*/,0x20	/*%o4*/,0x20	/*%o3*/,
0x20	/*%o2*/,0x20	/*%o1*/,0x20	/*%o0*/,0x0};	/*%f0*/
 
/* The logical numbers (in CRegVarMap) of incoming function parameters       */
static const unsigned char CParRegMap [5+1] = {13,
12,11,10,9,8};
 
/* The logical numbers (in CRegVarMap) of outgoing function parameters       */
static const unsigned char CParOutMap [5+1] = {35,
34,33,32,31,30};
/**/
/***/
/************************* end of sprvars.inc *****************************/
/***/
 

/* end of automatic translation */

