goomsl_private.h
来自「linux下的MPEG1」· C头文件 代码 · 共 252 行
H
252 行
#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
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?