gstreamer/gst/goom/goomsl_private.h
Bastien Nocera a7bc7485b1 configure.ac: Add checks for Flex/Yacc/Bison and other furry animals, for the new goom 2k4 based plugin
Original commit message from CVS:
2008-02-23  Bastien Nocera  <hadess@hadess.net>

* configure.ac: Add checks for Flex/Yacc/Bison and other
furry animals, for the new goom 2k4 based plugin

* gst/goom/*: Update to use goom 2k4, uses liboil to detect
CPU optimisations (not working yet), move the old plugin to...

* gst/goom2k1/*: ... here, in case somebody is sick enough

Fixes #515073
2008-02-23 01:51:37 +00:00

251 lines
5.7 KiB
C

#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