view mc-code.h @ 254:5aaca4f9d96b

*** empty log message ***
author kono
date Wed, 12 May 2004 21:44:45 +0900
parents 1849e0079f08
children c922bade771d
line wrap: on
line source

/* function required by mc-codegen.c 
     mc-code-*.c have to provied these
 */


#define MAX_MAX 50
#define INPUT_REG 2    /* input register ( can be reused ) */
#define USING_REG 1    /* unreusable register usage */

extern char *l_include_path[];

extern int size_of_int;
extern int size_of_short;
extern int size_of_float;
extern int size_of_double;
extern int size_of_longlong;
extern int endian;

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 code_lassop_p;

extern void code_init();
extern void gexpr_code_init(void);
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 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);
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 char *code_gt(int cond);
extern char *code_ugt(int cond);
extern char *code_ge(int cond);
extern char *code_uge(int cond);
extern char *code_eq(int cond);
extern void code_cmp_crgvar(int e1,int reg,int sz);
extern void code_cmp_crlvar(int e1,int reg,int sz);
extern void code_cmp_rgvar(int e1,int reg);
extern void code_cmp_rlvar(int e1,int reg);
extern void code_cmp_register(int e2);
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 void code_fix_frame_pointer(int disp_offset);
extern void code_jmp(char *s);
extern void code_indirect_jmp(int e2);

extern int code_rindirect(int e1, int reg,int offset, int us);
extern int code_crindirect(int e1, int reg,int offset, int us);
extern int code_srindirect(int e1, int reg,int offset, int us);
#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 void code_opening(char *filename);
extern void code_closing();
extern void rexpr(int e1, int l1, char *s,int t);
extern void jcond(int l, char cond);
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 void code_set_return_register(int mode);
extern void text_mode(void);
extern void global_table(void);
extern void code_label(int labelno);

extern int code_const_op_p(int op,int v); 
extern void oprtc(int op,int reg,int v);


#if FLOAT_CODE
/* floating point part */

extern void 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);
extern void code_cmp_drgvar(int,int,int);
extern void code_cmp_drlvar(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 void 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);
extern void code_cmp_lrgvar(int,int);
extern void code_cmp_lrlvar(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_arg_register(NMTBL *fnptr);

extern int get_register(void);
extern int get_dregister(int);
extern int get_lregister(void);
extern void free_register(int i) ;
extern int pop_register(void);
extern void emit_pop_free(int xreg);

// extern int use_int(int);
// extern int use_float(int);
// extern int use_double(int);
// extern int use_longlong(int);

/* */