/xbmc/visualizations/Goom/goom2k4-0/src/goomsl_private.h
http://github.com/xbmc/xbmc · C++ Header · 251 lines · 201 code · 36 blank · 14 comment · 0 complexity · 5dfc02e62ff7535496e78ed84ed74b0c MD5 · raw file
- #ifndef _GSL_PRIVATE_H
- #define _GSL_PRIVATE_H
- /* -- internal use -- */
- #include "goomsl.h"
- #ifdef USE_JITC_X86
- #include "jitc_x86.h"
- #endif
- #include "goomsl_heap.h"
- /* {{{ type of nodes */
- #define EMPTY_NODE 0
- #define CONST_INT_NODE 1
- #define CONST_FLOAT_NODE 2
- #define CONST_PTR_NODE 3
- #define VAR_NODE 4
- #define PARAM_NODE 5
- #define READ_PARAM_NODE 6
- #define OPR_NODE 7
- /* }}} */
- /* {{{ type of operations */
- #define OPR_SET 1
- #define OPR_IF 2
- #define OPR_WHILE 3
- #define OPR_BLOCK 4
- #define OPR_ADD 5
- #define OPR_MUL 6
- #define OPR_EQU 7
- #define OPR_NOT 8
- #define OPR_LOW 9
- #define OPR_DIV 10
- #define OPR_SUB 11
- #define OPR_FUNC_INTRO 12
- #define OPR_FUNC_OUTRO 13
- #define OPR_CALL 14
- #define OPR_EXT_CALL 15
- #define OPR_PLUS_EQ 16
- #define OPR_SUB_EQ 17
- #define OPR_MUL_EQ 18
- #define OPR_DIV_EQ 19
- #define OPR_CALL_EXPR 20
- #define OPR_AFFECT_LIST 21
- #define OPR_FOREACH 22
- #define OPR_VAR_LIST 23
- /* }}} */
- typedef struct _ConstIntNodeType { /* {{{ */
- int val;
- } ConstIntNodeType; /* }}} */
- typedef struct _ConstFloatNodeType { /* {{{ */
- float val;
- } ConstFloatNodeType; /* }}} */
- typedef struct _ConstPtrNodeType { /* {{{ */
- int id;
- } ConstPtrNodeType; /* }}} */
- typedef struct _OprNodeType { /* {{{ */
- int type;
- int nbOp;
- struct _NODE_TYPE *op[3]; /* maximal number of operand needed */
- struct _NODE_TYPE *next;
- } OprNodeType; /* }}} */
- typedef struct _NODE_TYPE { /* {{{ */
- int type;
- char *str;
- GoomHash *vnamespace;
- int line_number;
- union {
- ConstIntNodeType constInt;
- ConstFloatNodeType constFloat;
- ConstPtrNodeType constPtr;
- OprNodeType opr;
- } unode;
- } NodeType; /* }}} */
- typedef struct _INSTRUCTION_DATA { /* {{{ */
-
- union {
- void *var;
- int *var_int;
- int *var_ptr;
- float *var_float;
- int jump_offset;
- struct _ExternalFunctionStruct *external_function;
- } udest;
- union {
- void *var;
- int *var_int;
- int *var_ptr;
- float *var_float;
- int value_int;
- int value_ptr;
- float value_float;
- } usrc;
- } InstructionData;
- /* }}} */
- typedef struct _INSTRUCTION { /* {{{ */
- int id;
- InstructionData data;
- GoomSL *parent;
- const char *name; /* name of the instruction */
- char **params; /* parametres de l'instruction */
- GoomHash **vnamespace;
- int *types; /* type des parametres de l'instruction */
- int cur_param;
- int nb_param;
- int address;
- char *jump_label;
- char *nop_label;
- int line_number;
- } Instruction;
- /* }}} */
- typedef struct _INSTRUCTION_FLOW { /* {{{ */
- Instruction **instr;
- int number;
- int tabsize;
- GoomHash *labels;
- } InstructionFlow;
- /* }}} */
- typedef struct _FAST_INSTRUCTION { /* {{{ */
- int id;
- InstructionData data;
- Instruction *proto;
- } FastInstruction;
- /* }}} */
- typedef struct _FastInstructionFlow { /* {{{ */
- int number;
- FastInstruction *instr;
- void *mallocedInstr;
- } FastInstructionFlow;
- /* }}} */
- typedef struct _ExternalFunctionStruct { /* {{{ */
- GoomSL_ExternalFunction function;
- GoomHash *vars;
- int is_extern;
- } ExternalFunctionStruct;
- /* }}} */
- typedef struct _Block {
- int data;
- int size;
- } Block;
- typedef struct _GSL_StructField { /* {{{ */
- int type;
- char name[256];
- int offsetInStruct; /* Where this field is stored... */
- } GSL_StructField;
- /* }}} */
- typedef struct _GSL_Struct { /* {{{ */
- int nbFields;
- GSL_StructField *fields[64];
- int size;
- Block iBlock[64];
- Block fBlock[64];
- } GSL_Struct;
- /* }}} */
- struct _GoomSL { /* {{{ */
- int num_lines;
- Instruction *instr; /* instruction en cours de construction */
- InstructionFlow *iflow; /* flow d'instruction 'normal' */
- FastInstructionFlow *fastiflow; /* flow d'instruction optimise */
-
- GoomHash *vars; /* table de variables */
- int currentNS;
- GoomHash *namespaces[16];
-
- GoomHash *functions; /* table des fonctions externes */
- GoomHeap *data_heap; /* GSL Heap-like memory space */
-
- int nbStructID;
- GoomHash *structIDS;
- GSL_Struct **gsl_struct;
- int gsl_struct_size;
-
- int nbPtr;
- int ptrArraySize;
- void **ptrArray;
-
- int compilationOK;
- #ifdef USE_JITC_X86
- JitcX86Env *jitc;
- JitcFunc jitc_func;
- #endif
- }; /* }}} */
- extern GoomSL *currentGoomSL;
- Instruction *gsl_instr_init(GoomSL *parent, const char *name, int id, int nb_param, int line_number);
- void gsl_instr_add_param(Instruction *_this, char *param, int type);
- void gsl_instr_set_namespace(Instruction *_this, GoomHash *ns);
- void gsl_declare_task(const char *name);
- void gsl_declare_external_task(const char *name);
- int gsl_type_of_var(GoomHash *namespace, const char *name);
- void gsl_enternamespace(const char *name);
- void gsl_reenternamespace(GoomHash *ns);
- GoomHash *gsl_leavenamespace(void);
- GoomHash *gsl_find_namespace(const char *name);
- void gsl_commit_compilation(void);
- /* #define TYPE_PARAM 1 */
- #define FIRST_RESERVED 0x80000
- #define TYPE_INTEGER 0x90001
- #define TYPE_FLOAT 0x90002
- #define TYPE_VAR 0x90003
- #define TYPE_PTR 0x90004
- #define TYPE_LABEL 0x90005
- #define TYPE_OP_EQUAL 6
- #define TYPE_IVAR 0xa0001
- #define TYPE_FVAR 0xa0002
- #define TYPE_PVAR 0xa0003
- #define TYPE_SVAR 0xa0004
- #define INSTR_JUMP 6
- #define INSTR_JZERO 29
- #define INSTR_CALL 36
- #define INSTR_RET 37
- #define INSTR_EXT_CALL 38
- #define INSTR_JNZERO 40
- #define INSTR_SET 0x80001
- #define INSTR_INT 0x80002
- #define INSTR_FLOAT 0x80003
- #define INSTR_PTR 0x80004
- #define INSTR_LABEL 0x80005
- #define INSTR_ISLOWER 0x80006
- #define INSTR_ADD 0x80007
- #define INSTR_MUL 0x80008
- #define INSTR_DIV 0x80009
- #define INSTR_SUB 0x80010
- #define INSTR_ISEQUAL 0x80011
- #define INSTR_NOT 0x80012
- #endif