Mercurial > hg > CbC > old > device
view mc-code.h @ 856:d9dd3e6e7c5f
macro compatibility
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 22 Nov 2011 05:44:49 +0900 |
parents | 032dc03be02e |
children | 5313ed059cee |
line wrap: on
line source
/* function required by mc-codegen.c mc-code-*.c have to provied these */ /************************************************************************ ** Copyright (C) 2006 Shinji Kono ** 連絡先: 琉球大学情報工学科 河野 真治 ** (E-Mail Address: kono@ie.u-ryukyu.ac.jp) ** ** このソースのいかなる複写,改変,修正も許諾します。ただし、 ** その際には、誰が貢献したを示すこの部分を残すこと。 ** 再配布や雑誌の付録などの問い合わせも必要ありません。 ** 営利利用も上記に反しない範囲で許可します。 ** バイナリの配布の際にはversion messageを保存することを条件とします。 ** このプログラムについては特に何の保証もしない、悪しからず。 ** ** Everyone is permitted to do anything on this program ** including copying, modifying, improving, ** as long as you don't try to pretend that you wrote it. ** i.e., the above copyright notice has to appear in all copies. ** Binary distribution requires original version messages. ** You don't have to ask before copying, redistribution or publishing. ** THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE. ***********************************************************************/ #define MAX_MAX 50 /* architecture independent max registers */ /* flag value for regs[] */ #define USING_REG 1 /* unreusable register usage */ #define INPUT_REG 2 /* input register ( can be reused ) */ #define REG_VAR 3 /* used as register variable */ #define PTRC_REG 4 /* used as global variable pointer cache */ extern char *l_include_path[]; /* library including path */ extern int disp_offset; /* displacement offset in code and function */ /* function arugment evaluation order define compatiblity in inline function generation */ #define NORMAL 0 #define REVERSE 1 extern int eval_order; extern int MAX_REGISTER; extern int MAX_REGISTGER_VAR; extern int MAX_FREGISTER; extern int MAX_INPUT_REGISTER_VAR; extern int MAX_CODE_INPUT_REGISTER_VAR; extern int MAX_INPUT_DREGISTER_VAR; extern int MAX_CODE_INPUT_FREGISTER_VAR; extern int MAX_CODE_INPUT_DREGISTER_VAR; #define REG_LVAR_OFFSET 2 extern int data_alignment; extern int code_lassop_p; /* architecture has code_lassop */ /* used by mc-codegen */ extern void data_mode(char *name); extern void text_mode(int align); extern void cstring_mode(); extern void gexpr_init(void); /* code generator initialize for each statement */ extern void emit_init(void); /* called before delcalartion */ extern void gen_gdecl(char *n, int gpc); /* global definition */ extern void code_init(); /* called only once */ extern void emit_reinit(); /* called for each file */ extern void gexpr_code_init(void); extern void code_enter(char *name); extern void code_enter1(int args); extern void code_leave(char *name); extern void code_label_call(int i); extern void code_ret(); extern void enter(char *name); extern void enter1(); extern void leave(int control, char *name); extern void jmp(int l); extern int not_simple_p(int l); extern void code_save_stacks(); extern int code_arg_alignment(int disp0,NMTBL *n,int type0,int sz, int is_code); extern int code_lvar_alignment(int disp0,NMTBL *n,int type0,int sz); extern int get_register_var(NMTBL *n); extern int get_dregister_var(NMTBL *n,int d); extern int get_lregister_var(NMTBL *n); extern int get_input_register_var(int,NMTBL *,int); extern int get_input_dregister_var(int,NMTBL *,int,int); extern int get_input_lregister_var(int,NMTBL *,int); extern void code_ptr_cache_def(int r,NMTBL *nptr); extern void use_ptr_cache(int r); extern int code_register_overlap(int s,int t); extern int emit_push(); extern int emit_pop(int type); extern void gexpr_code_init(); extern int code_csvalue(); extern void code_gexpr(int e); extern void code_cmpdimm(int e, int csreg,int label,int cond); extern void code_gvar(int e1,int reg); extern void code_rgvar(int e1,int reg); extern void code_crgvar(int e1,int reg,int sign,int sz); extern void code_lvar(int e2,int reg); extern void code_register(int e2,int reg); extern void code_rlvar(int e2,int reg); extern void code_crlvar(int e2,int reg,int sign,int sz); extern void code_fname(NMTBL *n,int reg); extern void code_const(int e2,int reg); extern void code_neg(int reg); extern void code_not(int reg); extern void code_lnot(int reg); extern void code_preinc(int e1,int e2,int dir,int sign,int sz,int reg); extern void code_postinc(int e1,int e2,int dir,int sign,int sz,int reg); extern void code_return(int reg); extern void code_environment(int reg); extern void code_bool(int e1,int reg); extern void code_cmp_crgvar(int e1,int reg,int sz,int label,int cond); extern void code_cmp_crlvar(int e1,int reg,int sz,int label,int cond); extern void code_cmp_rgvar(int e1,int reg,int label,int cond); extern void code_cmp_rlvar(int e1,int reg,int label,int cond); extern void code_cmp_register(int e2,int label,int cond); extern void code_string(int e1,int reg); extern void emit_copy(int from,int to,int length,int offset,int value,int det); extern int function(int e1); extern void code_frame_pointer(int e3); extern int code_frame_pointer_register(); extern void code_fix_frame_pointer(int disp_offset); extern void code_jmp(char *s); extern void code_indirect_jmp(int e2); extern void code_rindirect(int e1, int reg,int offset, int us,int sz); #if FLOAT_CODE extern int code_drindirect(int e1, int reg,int offset, int d); #endif #if LONGLONG_CODE extern int code_lrindirect(int e1, int reg,int offset, int us); #endif extern void code_assign_gvar(int e2,int reg,int byte); extern void code_assign_lvar(int e2,int reg,int byte); extern void code_assign_register(int e2,int byte,int reg); extern void code_assign(int e2,int byte,int reg); extern void code_register_assop(int e2,int reg,int op,int byte); extern void code_assop(int op,int reg,int byte,int sign); extern void tosop(int op,int reg,int oreg); extern int tosop_operand_safe_p(int); extern void code_opening(char *filename); extern void code_closing(); extern int rexpr(int e1, int l1, int cond,int t); extern void jmp(int l); extern int code_get_fixed_creg(int reg,int type); extern void code_set_fixed_creg(int reg,int mode,int type); extern int code_set_return_register(int mode); extern void global_table(void); extern void code_label(int labelno); extern void code_label_value(int labelno,int reg); extern int code_const_op_p(int op,int v); extern void oprtc(int op,int reg,int v); extern void code_align(int t); extern void emit_global(NMTBL *n,int t,int e); extern void emit_space(int sp); extern void emit_char(int d); extern void emit_short(int d); extern void emit_int(int d); extern void emit_longlong(int e); extern void emit_double(int e); extern void emit_float(int e); extern void emit_address(char *s,int offset); extern void emit_label(int labelno); extern int emit_string_label(); extern void emit_string(char *,int type); void emit_strings(NMTBL *n); void code_strings(int e2,int reg); extern void code_i2c(int reg); extern void code_i2s(int reg); extern void code_u2uc(int reg); extern void code_u2us(int reg); #if FLOAT_CODE /* floating point part */ extern int drexpr(int e1, int e2,int l1, int op,int cond); extern int dpop_register(); extern int emit_dpop(int); extern void code_dregister(int e2,int reg,int d); extern void code_cmp_dregister(int,int,int,int); extern void code_cmp_drgvar(int,int,int,int,int); extern void code_cmp_drlvar(int,int,int,int,int); extern void code_dassign(int,int,int); extern void code_dassign_gvar(int,int,int); extern void code_dassign_lvar(int,int,int); extern void code_dassign_dregister(int e2,int d,int reg); extern void code_dconst(int,int,int); extern void code_dneg(int,int); extern void code_drgvar(int,int,int); extern void code_drlvar(int,int,int); extern void dtosop(int,int,int); extern void emit_dpop_free(int,int); extern void emit_dpush(int); extern void code_i2d(); extern void code_d2i(); extern void code_u2d(); extern void code_d2u(); extern void code_d2f(); extern void code_f2d(); extern void code_f2i(); extern void code_f2u(); extern void code_i2f(); extern void code_u2f(); extern void code_dpreinc(int e1,int e2,int d,int reg); extern void code_dpostinc(int e1,int e2,int d,int reg); extern void code_dassop(int op,int reg,int d); extern void code_register_dassop(int reg,int op,int d); #endif #if LONGLONG_CODE /* 64bit int part */ extern int lrexpr(int e1, int e2,int l1, int op,int cond); extern int lpop_register(); extern int emit_lpop(); extern void code_lregister(int e2,int reg); extern void code_cmp_lregister(int,int,int); extern void code_cmp_lrgvar(int,int,int,int); extern void code_cmp_lrlvar(int,int,int,int); extern void code_lassign(int,int); extern void code_lassign_gvar(int,int); extern void code_lassign_lvar(int,int); extern void code_lassign_lregister(int e2,int reg); extern void code_lconst(int,int); extern void code_lneg(int); extern void code_lrgvar(int,int); extern void code_lrlvar(int,int); extern void ltosop(int,int,int); extern void emit_lpop_free(int); extern void emit_lpush(); extern int code_lconst_op_p(int op,int e); extern void loprtc(int op,int reg, int e); extern void code_i2ll(int reg); extern void code_i2ull(int reg); extern void code_u2ll(int reg); extern void code_u2ull(int reg); extern void code_ll2i(int reg); extern void code_ll2u(int reg); extern void code_ull2i(int reg); extern void code_ull2u(int reg); #if FLOAT_CODE extern void code_d2ll(int reg); extern void code_d2ull(int reg); extern void code_f2ll(int reg); extern void code_f2ull(int reg); extern void code_ll2d(int reg); extern void code_ll2f(int reg); extern void code_ull2d(int reg); extern void code_ull2f(int reg); #endif extern void code_lpreinc(int e1,int e2,int reg); extern void code_lpostinc(int e1,int e2,int reg); extern void code_lassop(int op,int reg); extern void code_register_lassop(int reg,int op); #endif extern void code_alloca(int e,int reg); extern void code_builtin_fabsf(int e); extern void code_builtin_fabs(int e); extern void code_builtin_inff(); extern void code_builtin_inf(); extern void code_arg_register(NMTBL *fnptr, int in); extern int get_register(); extern int get_dregister(); extern int get_lregister(); extern void free_register(int i) ; extern int pop_register(void); extern void emit_pop_free(int xreg); extern void emit_data_closing(NMTBL *n); // extern int use_int(int); // extern int use_float(int); // extern int use_double(int); // extern int use_longlong(int); #if CASE_CODE extern int code_table_jump_p(int delta); extern void code_table_jump(int table,int csvalue,int delta,int max,int min,int dlabel); extern void code_table_open(int table); extern void code_table_value(int label,int table); extern void code_table_close(); #endif #if ASM_CODE extern void code_asm(char *asm_str,int repl); extern int code_asm_operand(char *p,int e1,int mode,int repl,int n,int repl0); extern void code_free_asm_operand(int repl); #endif extern void code_comment(char *s); #if BIT_FIELD_CODE /* bit field alignment calcuration */ extern int code_bit_field_disp(int type,int *offset,int *bfd,int *sz); /* bit field value */ /* reg contains address of bit_field, result should goto reg */ extern void code_bit_field(int type,int adr,int reg); /* bit field replacement */ extern void code_bit_replace(int value,int lvalue,int type); /* register, register */ extern void code_bit_replace_const(int value,int lvalue,int type); /* exp, register */ #endif /* end */