Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-02-21 10:05:28

0001 /*
0002  *  fcode.h  --
0003  *  The function codes.
0004  *
0005  *  Original:  1-Nov-1994 19:05
0006  *
0007  *  Author:   Maarten Ballintijn <Maarten.Ballintijn@cern.ch>
0008  *
0009  *  $Id$
0010  *
0011  *  $Log$
0012  *  Revision 1.12  1996/04/23 18:37:56  maartenb
0013  *  - Add RCS keywords
0014  *
0015  *
0016  */
0017 
0018 #ifndef CERN_FCODE
0019 #define CERN_FCODE
0020 
0021 
0022 #define CAT_BITS    6
0023 #define MASK_FC     0xfff
0024 
0025 /* bit indicating last instruction in segment */
0026 #define FC_HALT_BIT 0x80000000L
0027 
0028 /* bit indicating non scalar operation */
0029 #define FC_VECTOR_BIT   0x40000000L
0030 
0031 /* bit indicating need for test of dynamic size of operands */
0032 #define FC_DYNAMIC_TEST_BIT 0x20000000L
0033 
0034 /* bit indicating need to leave dynamic size of operand(s) on the stack*/
0035 #define FC_DYNAMIC_INFO_BIT 0x10000000L
0036 
0037 /* Define categories of operations */
0038 
0039 /*
0040  * categories are used to split-up the total set of operations 
0041  * in manageble parts
0042  */
0043 
0044 typedef enum _category_ {
0045     CAT_NONE = 1,
0046     CAT_OP,     /* mathematical operators and comparisons */
0047     CAT_CONV,   /* conversions */
0048     CAT_CONST,  /* named constants */
0049     CAT_MATH_SINGLE,/* mathematical function single precision */
0050     CAT_MATH_DOUBLE,/* mathematical function double precision */
0051     CAT_BITOP,  /* BITPAK bit operations (MIL-STD-1753)*/
0052     CAT_VAR,    /* ntuple variables */
0053     CAT_LITERAL,    /* literals */
0054     CAT_COMIS,  /* comis calls */
0055     CAT_DYN,    /* slices of ntup vars */
0056     CAT_MASK,   /* mask reading and writing */
0057     CAT_FLOW    /* flow control & debug */
0058 } Category;
0059 
0060 
0061 typedef enum _fcode_ {
0062 
0063 
0064 /* numeric operators */
0065     FC_OR = 0 * 64, /* reserve 16 slots (max 16 types) */
0066     FC_AND,
0067     FC_NOT,
0068 
0069     FC_LT,
0070     FC_LE,
0071 
0072     FC_LTLT,
0073     FC_LTLE,
0074     FC_LELT,
0075     FC_LELE,
0076 
0077     FC_GT,
0078     FC_GE,
0079 
0080     FC_GTGT,
0081     FC_GTGE,
0082     FC_GEGT,
0083     FC_GEGE,
0084 
0085     FC_EQ,
0086     FC_NE,
0087     FC_CT,
0088 
0089     FC_PLUS,
0090     FC_MINUS,
0091     FC_TIMES,
0092     FC_DIV,
0093 
0094     FC_UMINUS,
0095 
0096     FC_POW,
0097 
0098     FC_VADD,
0099     FC_VMUL,
0100     FC_VAND,
0101     FC_VOR,
0102     FC_VMIN,
0103     FC_VMAX,
0104 
0105     FC_MIN,
0106     FC_MAX,
0107 
0108 /* type converters */
0109     FC_B_2_B = 16 * 64, /* reserve 4 slots (max 16 types) */
0110     FC_B_2_U,
0111     FC_B_2_LU,
0112     FC_B_2_I,
0113     FC_B_2_LI,
0114     FC_B_2_F,
0115     FC_B_2_LF,
0116     FC_U_2_B,
0117     FC_U_2_U,
0118     FC_U_2_LU,
0119     FC_U_2_I,
0120     FC_U_2_LI,
0121     FC_U_2_F,
0122     FC_U_2_LF,
0123     FC_LU_2_B,
0124     FC_LU_2_U,
0125     FC_LU_2_LU,
0126     FC_LU_2_I,
0127     FC_LU_2_LI,
0128     FC_LU_2_F,
0129     FC_LU_2_LF,
0130     FC_I_2_B,
0131     FC_I_2_U,
0132     FC_I_2_LU,
0133     FC_I_2_I,
0134     FC_I_2_LI,
0135     FC_I_2_F,
0136     FC_I_2_LF,
0137     FC_LI_2_B,
0138     FC_LI_2_U,
0139     FC_LI_2_LU,
0140     FC_LI_2_I,
0141     FC_LI_2_LI,
0142     FC_LI_2_F,
0143     FC_LI_2_LF,
0144     FC_F_2_B,
0145     FC_F_2_U,
0146     FC_F_2_LU,
0147     FC_F_2_I,
0148     FC_F_2_LI,
0149     FC_F_2_F,
0150     FC_F_2_LF,
0151     FC_LF_2_B,
0152     FC_LF_2_U,
0153     FC_LF_2_LU,
0154     FC_LF_2_I,
0155     FC_LF_2_LI,
0156     FC_LF_2_F,
0157     FC_LF_2_LF,
0158 
0159 /* constants */
0160     FC_TRUE = 20 * 64,
0161     FC_FALSE,
0162     FC_PI,
0163     FC_DPI,
0164 
0165     FC_UINT32_MIN,
0166     FC_UINT32_MAX,
0167     FC_UINT64_MIN,
0168     FC_UINT64_MAX,
0169 
0170     FC_INT32_MIN,
0171     FC_INT32_MAX,
0172     FC_INT64_MIN,
0173     FC_INT64_MAX,
0174 
0175     FC_FLOAT32_MIN,
0176     FC_FLOAT32_MAX,
0177     FC_FLOAT64_MIN,
0178     FC_FLOAT64_MAX,
0179 
0180     FC_SUBSTR,
0181     FC_MATCH,
0182 
0183 /* builtin math functions single precision */
0184 
0185     FC_FSIN = 21 * 64,
0186     FC_FCOS,
0187     FC_FSQRT,
0188     FC_FEXP,
0189     FC_FLOG,
0190     FC_FATAN,
0191     FC_FABS,
0192     FC_FLOG10,
0193     FC_FTANH,
0194     FC_FACOS,
0195     FC_FASIN,
0196     FC_FTAN,
0197     FC_FSINH,
0198     FC_FCOSH,
0199 
0200     FC_FMOD,
0201     FC_FATAN2,
0202     FC_FSIGN,
0203 
0204     FC_FINT,
0205     FC_FFRAC,
0206 
0207     /* ... */
0208 /* builtin math functions double precision */
0209 
0210     FC_DSIN = 22 * 64,
0211     FC_DCOS,
0212     FC_DSQRT,
0213     FC_DEXP,
0214     FC_DLOG,
0215     FC_DATAN,
0216     FC_DABS,
0217     FC_DLOG10,
0218     FC_DTANH,
0219     FC_DACOS,
0220     FC_DASIN,
0221     FC_DTAN,
0222     FC_DSINH,
0223     FC_DCOSH,
0224 
0225     FC_DMOD,
0226     FC_DATAN2,
0227     FC_DSIGN,
0228 
0229     FC_DINT,
0230     FC_DFRAC,
0231 
0232     /* ... */
0233 
0234 /* NTuple var loading */
0235 
0236     FC_CWN_SCA_BOOL = 23 * 64,
0237     FC_CWN_SCA_UINT,
0238     FC_CWN_SCA_ULONG,
0239     FC_CWN_SCA_INT,
0240     FC_CWN_SCA_LONG,
0241     FC_CWN_SCA_FLOAT,
0242     FC_CWN_SCA_DOUBLE,
0243     FC_CWN_SCA_STR,
0244 
0245     FC_CWN_MAT_BOOL,
0246     FC_CWN_MAT_UINT,
0247     FC_CWN_MAT_ULONG,
0248     FC_CWN_MAT_INT,
0249     FC_CWN_MAT_LONG,
0250     FC_CWN_MAT_FLOAT,
0251     FC_CWN_MAT_DOUBLE,
0252     FC_CWN_MAT_STR,
0253 
0254     FC_RWN_SCA_LOAD,
0255 
0256 /* Literals */
0257 
0258     FC_LIT_SCA_BOOL = 24 * 64,
0259     FC_LIT_SCA_UINT,
0260     FC_LIT_SCA_ULONG,
0261     FC_LIT_SCA_INT,
0262     FC_LIT_SCA_LONG,
0263     FC_LIT_SCA_FLOAT,
0264     FC_LIT_SCA_DOUBLE,
0265     FC_LIT_SCA_STR,
0266 
0267 /* Bit operations */
0268 
0269     /* fc + i * 16 ; i=0,1,2,3 for uint, ulong, int, long */
0270 
0271     FC_IOR = 25 * 64,
0272     FC_IAND,
0273     FC_INOT,
0274     FC_IEOR,
0275     FC_ISHFT,
0276     FC_ISHFTC,
0277     FC_IBITS,
0278     FC_MVBITS,
0279     FC_BTEST,
0280     FC_IBSET,
0281     FC_IBCLR,
0282     FC_IABS,
0283     FC_IMOD,
0284     FC_ISIGN,
0285 
0286 /* Comis calls */
0287 
0288     FC_CS_LFUN = 26 * 64,   /* call comis function returning bool */
0289     FC_CS_IFUN, /* call comis function returning integer */
0290     FC_CS_RFUN, /* call comis function returning real */
0291     FC_CS_DFUN, /* call comis function returning double */
0292     FC_CS_SFUN, /* call comis function returning string */
0293 
0294 /* slices of ntuple variables */
0295 
0296     /* fc + (ndim -1) * 16 ; ndim 4 and higher are mapped on the same */
0297     /* code and have and extra word containing the real ndim */
0298 
0299     FC_CWN_DYN_BOOL = 27 * 64,
0300     FC_CWN_DYN_UINT,
0301     FC_CWN_DYN_ULONG,
0302     FC_CWN_DYN_INT,
0303     FC_CWN_DYN_LONG,
0304     FC_CWN_DYN_FLOAT,
0305     FC_CWN_DYN_DOUBLE,
0306     FC_CWN_DYN_STR,
0307 
0308 /* Mask reading and writing */
0309 
0310     FC_MASK_SET_BIT = 28 * 64,  /* set bit */
0311     FC_MASK_GET_BIT,    /* get bit */
0312     FC_MASK_GET_WORD,   /* get the whole word */
0313 
0314 /* flow control */
0315 
0316     FC_HALT = 31 * 64,
0317     FC_JUMP,
0318     FC_POP_JUMP,    /* pop on true, jump on false */
0319     FC_JUMP_POP,    /* pop on false, jump on true */
0320     FC_NOP,
0321     FC_DUMP,
0322     FC_CHECK_SHAPE, /* push a static shape on the shape stack */
0323 
0324     FC_CUT,     /* Call an expression CUT */
0325     FC_GCUT_1D, /* Call an 1d graphical CUT */
0326     FC_GCUT_2D  /* Call a 2d graphical CUT */
0327 
0328 } FCode;
0329 
0330 
0331 extern Category     qp_fc_to_cat[];
0332 
0333 
0334 #endif  /*  CERN_FCODE  */