⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gen68k.h

📁 一款拥有一定历史的C语言编译器
💻 H
📖 第 1 页 / 共 2 页
字号:
#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 + -