view mc.h @ 435:d3e6359f8501

loprtc LLSHIFT....
author kono
date Thu, 11 Nov 2004 00:39:37 +0900
parents 68fb244e0e3c
children 5ec2a88b9f4d
line wrap: on
line source

/* Micro-C header file */

#define FLOAT_CODE 1
#define LONGLONG_CODE 1
#define CASE_CODE 1
#define ASM_CODE 1
#define BIT_FIELD_CODE 1

/* reserved word start */

#define INT     (-1)
#define UNSIGNED        (-2)
#define CHAR    (-3)
#define UCHAR   (-4)
#define POINTER (-5)
#define ARRAY   (-6)
#define STRUCT  (-7)
#define UNION   (-8)
#define FUNCTION        (-9)

#define STATIC  (-10)
#define GOTO    (-11)
#define RETURN  (-12)
#define BREAK   (-13)
#define CONTINUE        (-14)
#define IF      (-15)
#define ELSE    (-16)
#define FOR     (-17)
#define DO      (-18)
#define WHILE   (-19)
#define SWITCH  (-20)
#define CASE    (-21)
#define DEFAULT (-22)
#define RESERVE (-23)
#define TAG     (-24)
#define FIELD   (-25)
#define IDENT   (-26)
#define MACRO   (-27)
#define BLABEL  (-28)
#define FLABEL  (-29)
#define TYPEDEF (-30)
#define SIZEOF  (-31)
#define TYPE    (-32)
#define LONG    (-33)
#define SHORT   (-34)
#define USHORT  (-35)
#define EXTRN   (-36)
#define EXTRN1  (-37)
#define VOID    (-38)
#define INLINE  (-39)
#define REGISTER        (-40)
#define FREGISTER       (-41)
#define DREGISTER       (-42)
#define LREGISTER       (-43)
#define CODE    (-44)
#define ENVIRONMENT     (-45)
#define DEFINED (-46)
#define ENUM    (-47)
#define KONST   (-48)
#define FMACRO  (-49)
#define LMACRO  (-50)
#define SIGNED  (-51)
#define DOTS    (-52)

#define FLOAT   (-53)
#define DOUBLE  (-54)
#define LONGLONG        (-55)
#define ULONGLONG       (-56)
#define VOLATILE        (-57)
#define TYPEOF  (-58)
#define ASM     (-59)

/* reserved word end */

#define EMPTY   (-99)

/* mode start */
#define TOP     0
#define GDECL   1
#define GSDECL  2
#define GUDECL  3
#define ADECL   4
#define LDECL   5
#define LSDECL  6
#define LUDECL  7
#define STADECL 8
#define STAT    9
#define GTDECL  10
#define LTDECL  11
#define IFDEF   12
#define MDECL   13
#define GEDECL  14
#define LEDECL  15
#define LLDECL  16
#define SFDINIT 17
/* mode end */

#define US      1
#define AS      10000
#define SOP     200
#define COP     400
#define DOP     600
#define FOP     800
#define LOP     1000

/* tree node tags start */

#define LIST_ARGS(i) (i==FUNCTION||i==CODE||i==ASM)

/* nullary  argments */

#define GVAR   	1
#define RGVAR  	2
#define URGVAR 	3
#define LVAR   	4
#define RLVAR  	5
#define URLVAR 	6
#define CRGVAR  (COP+RGVAR)
#define CURGVAR (COP+URGVAR)
#define CRLVAR  (COP+RLVAR)
#define CURLVAR (COP+URLVAR)
#define FRGVAR  (FOP+RGVAR)
#define FRLVAR  (FOP+RLVAR)
#define DRGVAR  (DOP+RGVAR)
#define DRLVAR  (DOP+RLVAR)
#define SRGVAR  (SOP+RGVAR)
#define SURGVAR (SOP+URGVAR)
#define SRLVAR  (SOP+RLVAR)
#define SURLVAR (SOP+URLVAR)
#define LRGVAR  (LOP+RGVAR)
#define LURGVAR (LOP+URGVAR)
#define LRLVAR  (LOP+RLVAR)
#define LURLVAR (LOP+URLVAR)

#define CONST  	7
#define DCONST  (DOP+CONST)
#define FCONST  (FOP+CONST)
#define LCONST  (LOP+CONST)
#define STRING 	8
#define FNAME  	9
#define LABEL  	10

#define NULLARY_ARGS(i) (i==REGISTER||i==DREGISTER||i==FREGISTER||i==LREGISTER||(GVAR<=(i%SOP)&&(i%SOP)<=LABEL))

/* unary  argments */

#define ADDRESS	11
#define MINUS  	12
#define LNOT   	13
#define BNOT   	14
#define INC    	15
#define POSTINC	16
#define UPOSTINC       	17
#define PREINC 	18
#define UPREINC	19
#define POSTDEC	20
#define UPOSTDEC       	21
#define PREDEC 	22
#define UPREDEC	23
#define DEC    	24
#define CPOSTINC (COP+POSTINC)
#define CUPOSTINC (COP+UPOSTINC)
#define CPREINC (COP+PREINC)
#define CUPREINC (COP+UPREINC)
#define CPOSTDEC (COP+POSTDEC)
#define CUPOSTDEC (COP+UPOSTDEC)
#define CPREDEC (COP+CPREDEC)
#define CUPREDEC (COP+UPREDEC)
#define SPOSTINC (SOP+POSTINC)
#define SUPOSTINC (SOP+UPOSTINC)
#define SPREINC (SOP+PREINC)
#define SUPREINC (SOP+UPREINC)
#define SPOSTDEC (SOP+POSTDEC)
#define SUPOSTDEC (SOP+UPOSTDEC)
#define SPREDEC (SOP+PREDEC)
#define SUPREDEC (SOP+UPREDEC)
#define FPOSTINC        (FOP+POSTINC)
#define FPREINC (FOP+PREINC)
#define DPOSTINC        (DOP+POSTINC)
#define DPREINC (DOP+PREINC)
#define LPOSTINC        (LOP+POSTINC)
#define LPREINC (LOP+PREINC)
#define LUPOSTINC       (LOP+UPOSTINC)
#define LUPREINC        (LOP+UPREINC)
#define INDIRECT       	25
#define RINDIRECT      	26
#define URINDIRECT     	27
#define CRINDIRECT      (COP+RINDIRECT)
#define CURINDIRECT     (COP+URINDIRECT)
#define SRINDIRECT      (SOP+RINDIRECT)
#define SURINDIRECT     (SOP+URINDIRECT)
#define FRINDIRECT      (FOP+RINDIRECT)
#define DRINDIRECT      (DOP+RINDIRECT)
#define LRINDIRECT      (LOP+RINDIRECT)
#define LURINDIRECT     (LOP+URINDIRECT)
#define RSTRUCT	28
#define ALLOCA 	29
#define BIT_FIELD 	30
#define RBIT_FIELD 	31
#define BPREINC 	32
#define BPOSTINC 	33
#define CONV   	34

#define UNARY_ARGS(i) (ADDRESS<=(i%SOP)&&(i%SOP)<=CONV)

/* binary  argments */

#define MUL    	35
#define UMUL   	36
#define DIV    	37
#define UDIV   	38
#define MOD    	39
#define UMOD   	40
#define ADD    	41
#define SUB    	42
#define CMP    	43      
#define RSHIFT 	44
#define URSHIFT	45
#define LSHIFT 	46
#define ULSHIFT	47
#define GT     	48
#define UGT    	49
#define GE     	50
#define UGE    	51
#define LT     	52
#define ULT    	53
#define LE     	54
#define ULE    	55
#define EQ     	56
#define NEQ    	57
#define BAND   	58
#define EOR    	59
#define BOR    	60
#define LAND   	61
#define LOR    	62
#define ASS    	63
#define UCMP   	64
#define UCMPGE 	65
#define CMPGE  	66
#define CMPEQ  	67
#define CMPNEQ 	68
#define ASSOP  	69
#define COMMA  	70

#define CASS   	71
#define CASSOP 	72
#define CUASSOP	73

#define SASS    (SOP+CASS)
#define SASSOP (SOP+CASSOP)
#define SUASSOP (SOP+CUASSOP)

#define DASS    (DOP+ASS)
#define DCMPGE  (DOP+CMPGE)
#define DCMPEQ  (DOP+CMPEQ)
#define DCMPNEQ (DOP+CMPNEQ)
#define DASSOP  (DOP+ASSOP)
#define DCMP    (DOP+CMP)
#define DMINUS  (DOP+MINUS)
#define DMUL    (DOP+MUL)
#define DDIV    (DOP+DIV)
#define DADD    (DOP+ADD)
#define DSUB    (DOP+SUB)

#define FASS    (FOP+ASS)
#define FCMPGE  (FOP+CMPGE)
#define FCMPEQ  (FOP+CMPEQ)
#define FCMPNEQ (FOP+CMPNEQ)
#define FASSOP  (FOP+ASSOP)
#define FCMP    (FOP+CMP)
#define FMINUS  (FOP+MINUS)
#define FMUL    (FOP+MUL)
#define FDIV    (FOP+DIV)
#define FADD    (FOP+ADD)
#define FSUB    (FOP+SUB)

#define LASS    (LOP+CASS)
#define LCMPGE  (LOP+CMPGE)
#define LCMPEQ  (LOP+CMPEQ)
#define LCMPNEQ (LOP+CMPNEQ)
#define LASSOP  (LOP+CASSOP)
#define LUASSOP (LOP+CUASSOP)
#define LCMP    (LOP+CMP)
#define LMINUS  (LOP+MINUS)
#define LMUL    (LOP+MUL)
#define LDIV    (LOP+DIV)
#define LUMUL   (LOP+UMUL)
#define LUDIV   (LOP+UDIV)
#define LADD    (LOP+ADD)
#define LSUB    (LOP+SUB)


#define LMOD    (LOP+MOD)
#define LUMOD   (LOP+UMOD)
#define LLSHIFT (LOP+LSHIFT)
#define LULSHIFT        (LOP+ULSHIFT)
#define LRSHIFT (LOP+RSHIFT)
#define LURSHIFT        (LOP+URSHIFT)
#define LBAND   (LOP+BAND)
#define LEOR    (LOP+EOR)
#define LBOR    (LOP+BOR)

#define BASS   	74
#define BASSOP 	75
#define BFD_REPL 	76

#define STASS  	77


#define BINARY_ARGS(i) (MUL<=(i%SOP)&&(i%SOP)<=STASS)

/* tarnary  argments */

#define COND   	78
#define SCOND   (SOP+COND)
#define DCOND   (DOP+COND)
#define FCOND   (FOP+COND)
#define LCOND   (LOP+COND)

#define TARNARY_ARGS(i) (COND==(i%SOP))

/* not appeared as tags */

#define LPAR   	79
#define RPAR   	80
#define LBRA   	81
#define RBRA   	82
#define LC     	83
#define RC     	84
#define COLON  	85
#define SM     	86
#define PERIOD 	87
#define ARROW  	88
#define CNAME  	89

#define I2C  	90
#define I2S  	91
#define I2I    	92
#define I2U    	93
#define I2D    	94
#define I2F    	95
#define I2LL   	96
#define I2ULL  	97

#define U2UC  	98
#define U2US  	99
#define U2I    	100
#define U2U    	101
#define U2D    	102
#define U2F    	103
#define U2LL   	104
#define U2ULL  	105


#define D2I     (DOP+I2I)
#define D2U     (DOP+I2U)
#define D2D     (DOP+I2D)
#define D2F     (DOP+I2F)
#define D2LL    (DOP+I2LL)
#define D2ULL   (DOP+I2ULL)

#define F2I     (FOP+I2I)
#define F2U     (FOP+I2U)
#define F2D     (FOP+I2D)
#define F2F     (FOP+I2F)
#define F2LL    (FOP+I2LL)
#define F2ULL   (FOP+I2ULL)

#define LL2I    (LOP+I2I)
#define LL2U    (LOP+I2U)
#define LL2D    (LOP+I2D)
#define LL2F    (LOP+I2F)
#define LL2LL   (LOP+I2LL)
#define LL2ULL  (LOP+I2ULL)

#define ULL2I   (LOP+U2I)
#define ULL2U   (LOP+U2U)
#define ULL2D   (LOP+U2D)
#define ULL2F   (LOP+U2F)
#define ULL2LL  (LOP+U2LL)
#define ULL2ULL (LOP+U2ULL)

/* tree node tags end */

/* error number start */

#define FILERR  1
#define DCERR   2
#define RDERR   3
#define STERR   4
#define EXERR   5
#define CNERR   6
#define CHERR   7
#define GSERR   8
#define LSERR   9
#define STRERR  10
#define LNERR   11
#define EOFERR  12
#define MCERR   13
#define INCERR  14
#define HPERR   15
#define TYERR   16
#define LVERR   17
#define UDERR   18
#define OPTION  19
#define REG_ERR 20
#define RGERR 21
#define CODE_ERR        22
#define MSERR   23
#define BTERR   24
#define HSERR   25
#define NMERR   26
#define MMERR   27
#define INERR   28

/* error number end */

#define FILES 10
#define MAX_INCLUDE_PATH_COUNT 10

#define GSYMS		8192
#define HEAPSIZE        30000
#define CHEAPSIZE       (sizeof(NMTBL)*GSYMS)
#define LBUFSIZE        4096
#define STRSIZE		4096

typedef struct nametable {
        char *nm;
	struct nametable *next;
        int sc,ty,dsp; } NMTBL;

extern int *heap;
extern NMTBL *global_list,*local_static_list;

#if FLOAT_CODE
extern int dlist2(int e1, double e2);
#endif
#if LONGLONG_CODE
extern int llist2(int e1, long long e2);
#endif
extern int list2(int e1, int e2);
extern int list3(int e1, int e2, int e3);
extern int list4(int e1, int e2, int e3,int e4);
extern int length(int e1);
extern int nth(int n,int e1);
extern int reverse0(int t1);
extern int append4(int p,int a1,int a2,int a3);
extern int insert_ascend(int p,int e,int eq());

extern void free_nptr(NMTBL *n);
extern NMTBL *get_nptr();

#define car(e) (heap[(int)(e)])

#define cadr(e) (heap[((int)(e))+1])

#define caddr(e) (heap[((int)(e))+2])

#define cadddr(e) (heap[((int)(e))+3])

#if FLOAT_CODE
#define dcadr(e) (*(double*)&heap[((int)(e))+1])
#define dcaddr(e) (*(double*)&heap[((int)(e))+2])
#endif

#if LONGLONG_CODE
#define lcadr(e) (*(long long*)&heap[((int)(e))+1])
#define lcaddr(e) (*(long long*)&heap[((int)(e))+2])
#endif

/* end */