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

📄 gen68k.h

📁 一款拥有一定历史的C语言编译器
💻 H
📖 第 1 页 / 共 2 页
字号:
/* * C compiler * ========== * * Copyright 1989, 1990, 1991 Christoph van Wuellen. * Credits to Matthew Brandt. * All commercial rights reserved. * * This compiler may be redistributed as long there is no * commercial interest. The compiler must not be redistributed * without its full sources. This notice must stay intact. * * History: * * 1989   starting an 68000 C compiler, starting with material *        originally by M. Brandt * 1990   68000 C compiler further bug fixes *        started i386 port (December) * 1991   i386 port finished (January) *        further corrections in the front end and in the 68000 *        code generator. *        The next port will be a SPARC port */#ifndef _GEN68K_H#define _GEN68K_Henum{    target_68000,    target_68010,    target_coldfire,    target_68020,    target_68030,    target_68040};#ifdef COLDFIRE#define	is_coldfire()	(target_option == target_coldfire)#else
/*lint -emacro( (506), is_coldfire )*//*lint -emacro( (774), is_coldfire )*/
#define	is_coldfire()	0#endifenum{    model_absolute,    model_small,    model_large};typedef unsigned int FLAGS;#define	F_NONE	((FLAGS) 0U)#define	F_DREG	((FLAGS) 1U)	/* data register direct mode allowed    */#define	F_AREG	((FLAGS) 2U)	/* address register direct mode allowed */#define	F_FREG	((FLAGS) 4U)	/* floating point register mode allowed */#define	F_MEM	((FLAGS) 8U)	/* memory alterable modes allowed       */#define	F_IMMED	((FLAGS) 16U)	/* immediate mode allowed               */#define	F_VOL	((FLAGS) 32U)	/* need volatile operand                */#define	F_NOVALUE ((FLAGS) 64U)	/* dont need result value               */#define	F_USES	((FLAGS) 128U)	/* need result value more than once     */#define	F_COLD	((FLAGS) 256U)	/* coldfire requires long               */				/* this forbids autoincrement modes     */#define	F_ALL	  ((FLAGS)(F_DREG | F_AREG | F_FREG | F_MEM | F_IMMED))	/* all modes allowed *//* The instructions *//* * The order of the branch instructions must not be changed * since array revcond[] in the peephole optimizer relies on * them. */enum e_op{    op_move,    op_moveq,    op_movea,    op_add,    op_addi,    op_addq,    op_adda,    op_addx,    op_sub,    op_subi,    op_subq,    op_suba,    op_subx,    op_muls,    op_mulu,    op_divs,    op_divu,    op_and,    op_or,    op_eor,    op_asl,    op_lsr,    op_jmp,    op_jsr,    op_bsr,    op_movem,    op_rts,    op_rte,    op_bra,    op_beq,    op_bne,    op_blt,    op_ble,    op_bgt,    op_bge,    op_bhi,    op_bhs,    op_blo,    op_bls,    op_tst,    op_ext,    op_extb,    op_lea,    op_swap,    op_neg, op_negx,    op_not,    op_cmp,    op_cmpa,    op_clr,    op_link,    op_unlk,    op_pea,    op_cmpi,    op_dbra,    op_asr,    op_rol,    op_ror,    op_roxl,    op_roxr,    op_seq,    op_sne,    op_slt,    op_sle,    op_sgt,    op_sge,    op_shi,    op_shs,    op_slo,    op_sls,    op_nop,
    op_trap,#ifdef FLOAT_IEEE    op_fadd,    op_fsub,    op_fdiv,    op_fmul,    op_fcmp,    op_fmove,    op_fmovem,#endif				/* FLOAT_IEEE */#ifdef ASM    op_asm,#endif				/* ASM */    op_line,    op_label};#define OP_MIN	op_move#define OP_MAX	op_label/* addressing modes */enum e_am{    am_dreg,			/* Dn */    am_areg,			/* An */    am_ind,			/* (An) */    am_ainc,			/* (An)+ */    am_adec,			/* -(An) */    am_indx,			/* (d16,An) */    am_indx2,			/* (d8,An,Dn.l) */    am_indx3,			/* (d8,An,Am.l) */    am_indx4,			/* (d8,An,Dn.w) */    am_indxpc,			/* (d16,PC) */    am_indx2pc,			/* (d8,An,PC) */    am_direct,			/* (xxx) */    am_immed,			/* #(data) */    am_smask,			/* Register mask (D0 high, A7 low) */    am_rmask,			/* Register mask (A7 high, D0 low) */    am_freg,			/* Floating Pointer Register FPn */    am_none,    am_mreg,			/* Dn/Dm */    am_xreg,			/* Dn/Dm/Dl */    am_str,			/* string */    am_line			/* pseudo mode for line numbers */};/* register naming, special registers */#define	D0		((REG) 0)	/* D0 register */#define	D1		((REG) 1)	/* D1 register */#define	D2		((REG) 2)	/* D2 register */#define	D3		((REG) 3)	/* D3 register */#define	D4		((REG) 4)	/* D4 register */#define	D5		((REG) 5)	/* D5 register */#define	D6		((REG) 6)	/* D6 register */#define	D7		((REG) 7)	/* D7 register */#define	A0		((REG) 8)	/* A0 register */#define	A1		((REG) 9)	/* A1 register */#define	A2		((REG) 10)	/* A2 register */#define	A3		((REG) 11)	/* A3 register */#define	A4		((REG) 12)	/* A4 register */#define	A5		((REG) 13)	/* A5 register */#define	A6		((REG) 14)	/* A6 register */#define	A7		((REG) 15)	/* A7 register */#define FP0		((REG) 16)	/* FP0 register */#define FP1		((REG) 17)	/* FP1 register */#define FP2		((REG) 18)	/* FP2 register */#define FP3		((REG) 19)	/* FP3 register */#define FP4		((REG) 20)	/* FP4 register */#define FP5		((REG) 21)	/* FP5 register */#define FP6		((REG) 22)	/* FP6 register */#define FP7		((REG) 23)	/* FP7 register */#define REG_MEMORY	((REG) 24)	/* special flag for peephole optimizer  */#define	NUM_REGS	24	/* number of distinct registers */#define	DATAPTR		A5	/* global data pointer register */#define FRAMEPTR  	A6	/* frame pointer register */#define STACKPTR  	A7	/* system stack pointer register */#ifdef FLOAT_IEEE#define	MAX_REG		FP7#else#define	MAX_REG		A7#endif /* FLOAT_IEEE */#define	MAX_REG_STACK	((DEEP)30)#define	UNUSED		((DEEP)-1)#define	EMPTY		((DEEP)0)/* *   Defines what the register can be used for */#define	D_REG		((REGTYPE)1)	/* data register */#define	A_REG		((REGTYPE)2)	/* address register */#define	F_REG		((REGTYPE)4)	/* float register */#define	T_REG		((REGTYPE)8)	/* temporary register */#define	is_data_register(r)		((regtype[(int)r] & D_REG) != (REGTYPE)0)#define	is_address_register(r)		((regtype[(int)r] & A_REG) != (REGTYPE)0)#define	is_float_register(r)		((regtype[(int)r] & F_REG) != (REGTYPE)0)#define	is_temporary_register(r)	((regtype[(int)r] & T_REG) != (REGTYPE)0)#define	is_temporary_data_register(r)	((regtype[(int)r] & (D_REG|T_REG)) == (D_REG|T_REG))#define	is_temporary_address_register(r)	((regtype[(int)r] & (A_REG|T_REG)) == (A_REG|T_REG))#define	is_temporary_float_register(r)	((regtype[(int)r] & (F_REG|T_REG)) == (F_REG|T_REG))#define	set_temporary_register(r)	(regtype[(int)r] |= T_REG)typedef unsigned char REGTYPE;/* support routines */#define	SUP_DATA	(const CHAR *)".Xdata"#define	SUP_ASLDIV	(const CHAR *)".Xasldiv"#define	SUP_ASLLDIV	(const CHAR *)".Xaslldiv"#define	SUP_ASLLLSH	(const CHAR *)".Xaslllsh"#define	SUP_ASLMUL	(const CHAR *)".Xaslmul"#define	SUP_ASLLMUL	(const CHAR *)".Xasllmul"#define	SUP_ASLREM	(const CHAR *)".Xaslrem"#define	SUP_ASLLREM	(const CHAR *)".Xasllrem"#define	SUP_ASLLRSH	(const CHAR *)".Xasllrsh"#define	SUP_ASOPL	(const CHAR *)".Ybfasop"#define	SUP_ASULDIV	(const CHAR *)".Xasuldiv"#define	SUP_ASULLDIV	(const CHAR *)".Xasulldiv"#define	SUP_ASULLLSH	(const CHAR *)".Xasulllsh"#define	SUP_ASULMUL	(const CHAR *)".Xasulmul"#define	SUP_ASULLMUL	(const CHAR *)".Xasullmul"#define	SUP_ASULREM	(const CHAR *)".Xasulrem"#define	SUP_ASULLREM	(const CHAR *)".Xasullrem"#define	SUP_ASULLRSH	(const CHAR *)".Xasullrsh"#define	SUP_LDIV	(const CHAR *)".Xldiv"#define	SUP_LLDIV	(const CHAR *)".Xlldiv"#define	SUP_LLLSH	(const CHAR *)".Xlllsh"#define	SUP_LMUL	(const CHAR *)".Xlmul"#define	SUP_LLMUL	(const CHAR *)".Xllmul"#define	SUP_LREM	(const CHAR *)".Xlrem"#define	SUP_LLREM	(const CHAR *)".Xllrem"#define	SUP_LLRSH	(const CHAR *)".Xllrsh"#define	SUP_ULDIV	(const CHAR *)".Xuldiv"#define	SUP_ULLDIV	(const CHAR *)".Xulldiv"#define	SUP_ULLLSH	(const CHAR *)".Xulllsh"#define	SUP_ULMUL	(const CHAR *)".Xulmul"#define	SUP_ULLMUL	(const CHAR *)".Xullmul"#define	SUP_ULREM	(const CHAR *)".Xulrem"#define	SUP_ULLREM	(const CHAR *)".Xullrem"#define	SUP_ULLRSH	(const CHAR *)".Xullrsh"#ifdef FLOAT_IEEE#define	SUP_ASDFADD	(const CHAR *)".Yasdfadd"#define	SUP_ASDFDIV	(const CHAR *)".Yasdfdiv"#define	SUP_ASDIVDC	(const CHAR *)".Yasdivdc"#define	SUP_ASDIVDF	(const CHAR *)".Yasdivdf"#define	SUP_ASDIVLC	(const CHAR *)".Yasdivlc"#define	SUP_ASDIVSC	(const CHAR *)".Yasdivsc"#define	SUP_ASDFMUL	(const CHAR *)".Yasdfmul"#define	SUP_ASMULDC	(const CHAR *)".Yasmuldc"#define	SUP_ASMULDF	(const CHAR *)".Yasmuldf"#define	SUP_ASMULLC	(const CHAR *)".Yasmullc"#define	SUP_ASMULSC	(const CHAR *)".Yasmulsc"#define	SUP_ASMULSF	(const CHAR *)".Yasmulsf"#define	SUP_ASDFSUB	(const CHAR *)".Yasdfsub"#define	SUP_ASLFADD	(const CHAR *)".Yaslfadd"#define	SUP_ASLFDIV	(const CHAR *)".Yaslfdiv"#define	SUP_ASDIVLF	(const CHAR *)".Yasdivlf"#define	SUP_ASLFMUL	(const CHAR *)".Yaslfmul"#define	SUP_ASMULLF	(const CHAR *)".Yaslfmullf"#define	SUP_ASLFSUB	(const CHAR *)".Yaslfsub"#define	SUP_ASDCADD	(const CHAR *)".Yasdcadd"#define	SUP_ASDCDIV	(const CHAR *)".Yasdcdiv"#define	SUP_ASDCMUL	(const CHAR *)".Yasdcmul"#define	SUP_ASDCSUB	(const CHAR *)".Yasdcsub"#define	SUP_ASLCADD	(const CHAR *)".Yaslcadd"#define	SUP_ASLCDIV	(const CHAR *)".Yaslcdiv"#define	SUP_ASLCMUL	(const CHAR *)".Yaslcmul"#define	SUP_ASLCSUB	(const CHAR *)".Yaslcsub"#define	SUP_ASSCADD	(const CHAR *)".Yasscadd"#define	SUP_ASSCDIV	(const CHAR *)".Yasscdiv"#define	SUP_ASSCMUL	(const CHAR *)".Yasscmul"#define	SUP_ASSCSUB	(const CHAR *)".Yasscsub"#define	SUP_ASSFSUB	(const CHAR *)".Yassfsub"#define	SUP_ASSFADD	(const CHAR *)".Yassfadd"#define	SUP_ASSFDIV	(const CHAR *)".Yassfdiv"#define	SUP_ASDIVSF	(const CHAR *)".Yasdivsf"#define	SUP_ASSFMUL	(const CHAR *)".Yassfmul"#define	SUP_DCADD	(const CHAR *)".Ydcadd"#define	SUP_DCDIV	(const CHAR *)".Ydcdiv"#define	SUP_DCINC	(const CHAR *)".Ydcinc"#define	SUP_DCLTODC	(const CHAR *)".Ydcltodc"#define	SUP_DCLLTODC	(const CHAR *)".Ydclltodc"#define	SUP_DCMUL	(const CHAR *)".Ydcmul"#define	SUP_DCNEG	(const CHAR *)".Ydcneg"#define	SUP_DCSUB	(const CHAR *)".Ydcsub"#define	SUP_DCTODF	(const CHAR *)".Ydctodf"#define	SUP_DCTOL	(const CHAR *)".Ydctol"#define	SUP_DCTOLC	(const CHAR *)".Ydctolc"#define	SUP_DCTOLF	(const CHAR *)".Ydctolf"#define	SUP_DCTOLL	(const CHAR *)".Ydctoll"#define	SUP_DCTOSC	(const CHAR *)".Ydctosc"#define	SUP_DCTOSF	(const CHAR *)".Ydctosf"#define	SUP_DCTOUL	(const CHAR *)".Ydctoul"#define	SUP_DCTOULL	(const CHAR *)".Ydctoull"#define	SUP_DCUTODC	(const CHAR *)".Ydcutodc"#define	SUP_DCULLTODC	(const CHAR *)".Ydculltodc"#define	SUP_DFADD	(const CHAR *)".Ydfadd"#define	SUP_DFCMP	(const CHAR *)".Xdfcmp"#define	SUP_DFDEC	(const CHAR *)".Ydfdec"#define	SUP_DFDIV	(const CHAR *)".Ydfdiv"#define	SUP_DFINC	(const CHAR *)".Ydfinc"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -