summaryrefslogtreecommitdiffstats
path: root/gst/goom/goomsl_private.h
diff options
context:
space:
mode:
Diffstat (limited to 'gst/goom/goomsl_private.h')
-rw-r--r--gst/goom/goomsl_private.h251
1 files changed, 251 insertions, 0 deletions
diff --git a/gst/goom/goomsl_private.h b/gst/goom/goomsl_private.h
new file mode 100644
index 00000000..8be15157
--- /dev/null
+++ b/gst/goom/goomsl_private.h
@@ -0,0 +1,251 @@
+#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