📄 gen68k.h
字号:
#define SUP_DFLTODF (const CHAR *)".Ydfltodf"#define SUP_DFLLTODF (const CHAR *)".Ydflltodf"#define SUP_DFMUL (const CHAR *)".Ydfmul"#define SUP_DFNEG (const CHAR *)".Ydfneg"#define SUP_DFSUB (const CHAR *)".Ydfsub"#define SUP_DFTOL (const CHAR *)".Ydftol"#define SUP_DFTOLC (const CHAR *)".Ydftolc"#define SUP_DFTOLF (const CHAR *)".Ydftolf"#define SUP_DFTOLL (const CHAR *)".Ydftoll"#define SUP_DFTODC (const CHAR *)".Ydftodc"#define SUP_DFTOSC (const CHAR *)".Ydftosc"#define SUP_DFTOSF (const CHAR *)".Ydftosf"#define SUP_DFTOUL (const CHAR *)".Ydftoul"#define SUP_DFTOULL (const CHAR *)".Ydftoull"#define SUP_DFUTODF (const CHAR *)".Ydfutodf"#define SUP_DFULLTODF (const CHAR *)".Ydfulltodf"#define SUP_LCADD (const CHAR *)".Ylcadd"#define SUP_LCDIV (const CHAR *)".Ylcdiv"#define SUP_LCINC (const CHAR *)".Ylcinc"#define SUP_LCLTOLC (const CHAR *)".Ylcltolc"#define SUP_LCLLTOLC (const CHAR *)".Ylclltolc"#define SUP_LCMUL (const CHAR *)".Ylcmul"#define SUP_LCNEG (const CHAR *)".Ylcneg"#define SUP_LCSUB (const CHAR *)".Ylcsub"#define SUP_LCTODC (const CHAR *)".Ylctodc"#define SUP_LCTODF (const CHAR *)".Ylctodf"#define SUP_LCTOL (const CHAR *)".Ylctol"#define SUP_LCTOLF (const CHAR *)".Ylctolf"#define SUP_LCTOLL (const CHAR *)".Ylctoll"#define SUP_LCTOSC (const CHAR *)".Ylctosc"#define SUP_LCTOSF (const CHAR *)".Ylctosf"#define SUP_LCTOUL (const CHAR *)".Ylctoul"#define SUP_LCTOULL (const CHAR *)".Ylctoull"#define SUP_LCUTOLC (const CHAR *)".Ylcutolc"#define SUP_LCULLTOLC (const CHAR *)".Ylculltolc"#define SUP_LFADD (const CHAR *)".Ylfadd"#define SUP_LFCMP (const CHAR *)".Xlfcmp"#define SUP_LFDEC (const CHAR *)".Ylfdec"#define SUP_LFDIV (const CHAR *)".Ylfdiv"#define SUP_LFINC (const CHAR *)".Ylfinc"#define SUP_LFLLTOLF (const CHAR *)".Ylflltolf"#define SUP_LFMUL (const CHAR *)".Ylfmul"#define SUP_LFNEG (const CHAR *)".Ylfneg"#define SUP_LFSUB (const CHAR *)".Ylfsub"#define SUP_LFLTOLF (const CHAR *)".Ylfltolf"#define SUP_LFTODC (const CHAR *)".Ylftodc"#define SUP_LFTODF (const CHAR *)".Ylftodf"#define SUP_LFTOL (const CHAR *)".Ylftol"#define SUP_LFTOLL (const CHAR *)".Ylftoll"#define SUP_LFTOUL (const CHAR *)".Ylftoul"#define SUP_LFTOULL (const CHAR *)".Ylftoull"#define SUP_LFTOSC (const CHAR *)".Ylftosc"#define SUP_LFTOSF (const CHAR *)".Ylftosf"#define SUP_LFULLTOLF (const CHAR *)".Ylfulltolf"#define SUP_LFUTOLF (const CHAR *)".Ylfutolf"#define SUP_SCADD (const CHAR *)".Yscadd"#define SUP_SCDIV (const CHAR *)".Yscdiv"#define SUP_SCINC (const CHAR *)".Yscinc"#define SUP_SCLTOSC (const CHAR *)".Yscltosc"#define SUP_SCLLTOSC (const CHAR *)".Ysclltosc"#define SUP_SCMUL (const CHAR *)".Yscmul"#define SUP_SCNEG (const CHAR *)".Yscneg"#define SUP_SCSUB (const CHAR *)".Yscsub"#define SUP_SCTODC (const CHAR *)".Ysctodc"#define SUP_SCTODF (const CHAR *)".Ysctodf"#define SUP_SCTOL (const CHAR *)".Ysctol"#define SUP_SCTOLC (const CHAR *)".Ysctolc"#define SUP_SCTOLF (const CHAR *)".Ysctolf"#define SUP_SCTOLL (const CHAR *)".Ysctoll"#define SUP_SCTOSF (const CHAR *)".Ysctosf"#define SUP_SCTOUL (const CHAR *)".Ysctoul"#define SUP_SCTOULL (const CHAR *)".Ysctoull"#define SUP_SCUTOSC (const CHAR *)".Yscutosc"#define SUP_SCULLTOSC (const CHAR *)".Ysculltosc"#define SUP_SFADD (const CHAR *)".Ysfadd"#define SUP_SFCMP (const CHAR *)".Xsfcmp"#define SUP_SFDEC (const CHAR *)".Ysfdec"#define SUP_SFDIV (const CHAR *)".Ysfdiv"#define SUP_SFINC (const CHAR *)".Ysfinc"#define SUP_SFLLTOSF (const CHAR *)".Ysflltosf"#define SUP_SFLTOSF (const CHAR *)".Ysfltosf"#define SUP_SFMUL (const CHAR *)".Ysfmul"#define SUP_SFNEG (const CHAR *)".Ysfneg"#define SUP_SFSUB (const CHAR *)".Ysfsub"#define SUP_SFTODC (const CHAR *)".Ysftodc"#define SUP_SFTODF (const CHAR *)".Ysftodf"#define SUP_SFTOL (const CHAR *)".Ysftol"#define SUP_SFTOLL (const CHAR *)".Ysftoll"#define SUP_SFTOLC (const CHAR *)".Ysftolc"#define SUP_SFTOLF (const CHAR *)".Ysftodf"#define SUP_SFTOSC (const CHAR *)".Ysftosc"#define SUP_SFTOUL (const CHAR *)".Ysftoul"#define SUP_SFTOULL (const CHAR *)".Ysftoull"#define SUP_SFUTOSF (const CHAR *)".Ysfutosf"#define SUP_SFULLTOSF (const CHAR *)".Ysfulltosf"#endif /* FLOAT_IEEE */#ifdef FLOAT_MFFP#define SUP_ASFPADD (const CHAR *)".Xasfpadd"#define SUP_ASFPDEC (const CHAR *)".Xasfpdec"#define SUP_ASFPDIV (const CHAR *)".Xasfpdiv"#define SUP_ASFPINC (const CHAR *)".Xasfpinc"#define SUP_ASFPMULT (const CHAR *)".Xasfpmult"#define SUP_ASFPREM (const CHAR *)".Xasfprem"#define SUP_ASFPSUB (const CHAR *)".Xasfpsub"#define SUP_FPADD (const CHAR *)".Xfpadd"#define SUP_FPADD (const CHAR *)".Xfpadd"#define SUP_FPCMP (const CHAR *)".Xfpcmp"#define SUP_FPDEC (const CHAR *)".Xfpdec"#define SUP_FPDIV (const CHAR *)".Xfpdiv"#define SUP_FPFTOL (const CHAR *)".Xfpftol"#define SUP_FPFTOU (const CHAR *)".Xfpftou"#define SUP_FPINC (const CHAR *)".Xfpinc"#define SUP_FPLTOF (const CHAR *)".Xfpltof"#define SUP_FPMULT (const CHAR *)".Xfpmult"#define SUP_FPNEG (const CHAR *)".Xfpneg"#define SUP_FPREM (const CHAR *)".Xfprem"#define SUP_FPSUB (const CHAR *)".Xfpsub"#define SUP_FPSUB (const CHAR *)".Xfpsub"#define SUP_FPTST (const CHAR *)".Xfptst"#define SUP_FPUTOF (const CHAR *)".Xfputof"#endif /* FLOAT_IEEE */#ifdef STACK_CHECK#define SUP_STACKCHECK (const CHAR *)".stackcheck"#endif /* STACK_CHECK */#ifdef COLDFIRE#define SUP_ASCDIV (const CHAR *)".Xascdiv"#define SUP_ASUCDIV (const CHAR *)".Xasucdiv"#define SUP_ASSDIV (const CHAR *)".Xassdiv"#define SUP_ASUSDIV (const CHAR *)".Xasusdiv"#define SUP_SDIV (const CHAR *)".Xsdiv"#define SUP_USDIV (const CHAR *)".Xusdiv"#endif /* COLDFIRE */#ifndef _CODE_DEFINED#define _CODE_DEFINEDtypedef struct ocode CODE;#endif/* instruction lengths */enum ilength{ IL0 = 0, IL1 = 1, IL2 = 2, IL4 = 4, IL8 = 8, IL12 = 12};/* stack optimisations */#define OPT_SAFE 0#define OPT_MINIMUM 1#define OPT_AVERAGE 2#define OPT_MAXIMUM 3#define REGBIT(x) (REGMASK)(1U << (int)x)typedef enum e_am AMODE; /* Addressing mode */typedef struct amode ADDRESS;typedef enum e_op OPCODE;typedef enum ilength ILEN;typedef unsigned long REGMASK;typedef signed char DEEP;typedef struct reglist REGLIST;#ifdef PEEPFLOWtypedef unsigned long REGBITMAP;typedef struct regmap REGMAP;typedef struct regentry REGENTRY;struct regmap{ REGBITMAP write; /* destination of an operation */ REGBITMAP modified; /* source and destination */ REGBITMAP read; /* source of an operation */ REGBITMAP used; /* needed for address generation */ REGBITMAP updated; /* updated during address generation */};/* * Used to maintain a list of values & addresses which are held in * a register. */struct regentry{ ADDRESS *ap; REGENTRY *next;};#define NIL_REGENTRY ((REGENTRY *)0)#endif /* PEEPFLOW */#define NIL_ADDRESS ((ADDRESS *) 0)#define NIL_CODE ((CODE *) 0)/* addressing mode structure */struct amode{ AMODE mode; /* addressing mode */ REG preg, sreg; /* register(s) used in addressing mode */ DEEP deep; union { EXPR *offset; /* expression used in addressing mode */ REG xreg; /* 3rd register */ REGMASK mask; /* register mask */ } u;};/* output code structure */struct ocode{ OPCODE opcode; /* opcode for this instruction */ ILEN length; /* operand length of the instruction */ ADDRESS *oper1; /* first operand */ ADDRESS *oper2; /* second operand */ CODE *fwd; /* next instruction */ CODE *back; /* previous instruction */#ifdef PEEPFLOW REGMAP *regmap; /* information for peephole optimizer */#endif /* PEEPFLOW */};struct reglist{ int number; /* number of registers in the list */ REG *reg; /* register list */};/* * The usage of registers is controlled by the information held * within the following structure. */struct reg_use{ REGLIST *save; /* Registers saved by the function */ REGLIST *result; /* Registers used to return results */};#define BRANCH_COUNT 2 /* abandon branch optimisation if exceeded *//* peephole optimisations */#define PEEP_INSTRUCTION 0#define PEEP_JUMPS 1#define PEEP_FLOW 2#define is_peep_phase(l,x) (((unsigned) l) & MEMBER(x))#ifdef MULTIPLE_PROCESSORS/* * remap function names - it is necessary to change the names of functions * if there are multiple code generators build into the compiler in order * to prevent name clashes. * * The following defines do the necessary renaming */#define data_register data_register68k#define address_register address_register68k#define float_register float_register68k#define mdata_register mdata_register68k#define xdata_register xdata_register68k#define build_regmap build_regmap68k#define checkstack checkstack68k#define copy_addr copy_addr68k#define count_registers count_registers68k#define find_label find_label68k#define find_register find_register68k#define flow_dataflow flow_dataflow68k#define flush_peep flush_peep68k#define freeop freeop68k#define g_code g_code68k#define g_fcode g_fcode68k#define g_move g_move68k#define get_register get_register68k#define initstack initstack68k#define is_equal_address is_equal_address68k#define is_free_addr is_free_addr68k#define is_free_data is_free_data68k#define is_register_used is_register_used68k#define mk_label mk_label68k#define mk_reg mk_reg68k#define mk_mreg mk_mreg68k#define mk_xreg mk_xreg68k#define temp_reg temp_reg68k#define temp_inv temp_inv68k#define validate validate68k#define reg_usage reg_usage68k#define regtype regtype68k#define reglist_to_mask reglist_to_mask68k#endif /* MULTIPLE_PROCESSORS */extern REGUSAGE *reg_usage; /* register usage */extern REGTYPE regtype[]; /* type of register */extern int target_option; /* Motorola code generation target */
#ifdef PEEPFLOW/* flow68k */int flow_dataflow P_ ((CODE *));#endif /* PEEPFLOW */
/* gen68k */ADDRESS *mk_reg P_ ((REG));ADDRESS *mk_mreg P_ ((REG, REG));ADDRESS *mk_xreg P_ ((REG, REG, REG));ADDRESS *mk_label P_ ((LABEL));ADDRESS *copy_addr P_ ((const ADDRESS *, AMODE));BOOL is_short P_ ((const EXPR *));void g_move P_ ((ILEN, ADDRESS *, ADDRESS *));/* peep68k */void g_code P_ ((OPCODE, ILEN, ADDRESS *, ADDRESS *));void flush_peep P_ ((unsigned));BOOL is_equal_address P_ ((const ADDRESS *, const ADDRESS *));BOOL is_register_used P_ ((REG, const ADDRESS *));CODE *find_label P_ ((LABEL));#ifdef PEEPFLOWREGMAP *build_regmap P_ ((CODE *));#endif /* PEEPFLOW */#ifdef FLOAT_IEEEvoid g_fcode P_ ((OPCODE, ILEN, ADDRESS *, ADDRESS *));#endif /* FLOAT_IEEE *//* reg68k */ADDRESS *address_register P_ ((void));ADDRESS *data_register P_ ((void));#ifdef FLOAT_IEEEADDRESS *float_register P_ ((void));#endif /* FLOAT_IEEE */ADDRESS *mdata_register P_ ((void));ADDRESS *xdata_register P_ ((void));ADDRESS *temp_reg P_ ((FLAGS));BOOL is_free_addr P_ ((void));BOOL is_free_data P_ ((void));REG find_register P_ ((REGTYPE, REGMASK));REGMASK reglist_to_mask P_ ((const REGLIST *));int count_registers P_ ((REGMASK));void checkstack P_ ((void));void freeop P_ ((const ADDRESS *));void initstack P_ ((void));void temp_inv P_ ((REGUSAGE *));void validate P_ ((const ADDRESS *));#endif /* _GEN68K_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -