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

📄 tc-i386.h

📁 基于4个mips核的noc设计
💻 H
📖 第 1 页 / 共 2 页
字号:
/* tc-i386.h -- Header file for tc-i386.c   Copyright 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,   2001   Free Software Foundation, Inc.   This file is part of GAS, the GNU Assembler.   GAS is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 2, or (at your option)   any later version.   GAS is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.   You should have received a copy of the GNU General Public License   along with GAS; see the file COPYING.  If not, write to the Free   Software Foundation, 59 Temple Place - Suite 330, Boston, MA   02111-1307, USA.  */#ifndef TC_I386#define TC_I386 1#ifdef ANSI_PROTOTYPESstruct fix;#endif#define TARGET_BYTES_BIG_ENDIAN	0#ifdef TE_LYNX#define TARGET_FORMAT		"coff-i386-lynx"#endif#ifdef BFD_ASSEMBLER/* This is used to determine relocation types in tc-i386.c.  The first   parameter is the current relocation type, the second one is the desired   type.  The idea is that if the original type is already some kind of PIC   relocation, we leave it alone, otherwise we give it the desired type */#define tc_fix_adjustable(X)  tc_i386_fix_adjustable(X)extern int tc_i386_fix_adjustable PARAMS ((struct fix *));#if (defined (OBJ_MAYBE_ELF) || defined (OBJ_ELF) || defined (OBJ_MAYBE_COFF) || defined (OBJ_COFF)) && !defined (TE_PE)/* This arranges for gas/write.c to not apply a relocation if   tc_fix_adjustable() says it is not adjustable.   The "! symbol_used_in_reloc_p" test is there specifically to cover   the case of non-global symbols in linkonce sections.  It's the   generally correct thing to do though;  If a reloc is going to be   emitted against a symbol then we don't want to adjust the fixup by   applying the reloc during assembly.  The reloc will be applied by   the linker during final link.  */#define TC_FIX_ADJUSTABLE(fixP) \  (! symbol_used_in_reloc_p ((fixP)->fx_addsy) && tc_fix_adjustable (fixP))#endif/* This expression evaluates to false if the relocation is for a local object   for which we still want to do the relocation at runtime.  True if we   are willing to perform this relocation while building the .o file.   This is only used for pcrel relocations, so GOTOFF does not need to be   checked here.  I am not sure if some of the others are ever used with   pcrel, but it is easier to be safe than sorry.  */#define TC_RELOC_RTSYM_LOC_FIXUP(FIX)				\  ((FIX)->fx_r_type != BFD_RELOC_386_PLT32			\   && (FIX)->fx_r_type != BFD_RELOC_386_GOT32			\   && (FIX)->fx_r_type != BFD_RELOC_386_GOTPC			\   && ((FIX)->fx_addsy == NULL					\       || (! S_IS_EXTERNAL ((FIX)->fx_addsy)			\	   && ! S_IS_WEAK ((FIX)->fx_addsy)			\	   && S_IS_DEFINED ((FIX)->fx_addsy)			\	   && ! S_IS_COMMON ((FIX)->fx_addsy))))#define TARGET_ARCH		bfd_arch_i386#define TARGET_MACH		(i386_mach ())extern unsigned long i386_mach PARAMS ((void));#ifdef TE_FreeBSD#define AOUT_TARGET_FORMAT	"a.out-i386-freebsd"#endif#ifdef TE_NetBSD#define AOUT_TARGET_FORMAT	"a.out-i386-netbsd"#endif#ifdef TE_386BSD#define AOUT_TARGET_FORMAT	"a.out-i386-bsd"#endif#ifdef TE_LINUX#define AOUT_TARGET_FORMAT	"a.out-i386-linux"#endif#ifdef TE_Mach#define AOUT_TARGET_FORMAT	"a.out-mach3"#endif#ifdef TE_DYNIX#define AOUT_TARGET_FORMAT	"a.out-i386-dynix"#endif#ifndef AOUT_TARGET_FORMAT#define AOUT_TARGET_FORMAT	"a.out-i386"#endif#if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \     || defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF))extern const char *i386_target_format PARAMS ((void));#define TARGET_FORMAT i386_target_format ()#else#ifdef OBJ_ELF#define TARGET_FORMAT		"elf32-i386"#endif#ifdef OBJ_AOUT#define TARGET_FORMAT		AOUT_TARGET_FORMAT#endif#endif#else /* ! BFD_ASSEMBLER *//* COFF STUFF */#define COFF_MAGIC I386MAGIC#define BFD_ARCH bfd_arch_i386#define COFF_FLAGS F_AR32WR#define TC_COUNT_RELOC(x) ((x)->fx_addsy || (x)->fx_r_type==7)#define TC_COFF_FIX2RTYPE(fixP) tc_coff_fix2rtype(fixP)extern short tc_coff_fix2rtype PARAMS ((struct fix *));#define TC_COFF_SIZEMACHDEP(frag) tc_coff_sizemachdep(frag)extern int tc_coff_sizemachdep PARAMS ((fragS *frag));#ifdef TE_GO32/* DJGPP now expects some sections to be 2**4 aligned.  */#define SUB_SEGMENT_ALIGN(SEG)						\  ((strcmp (obj_segment_name (SEG), ".text") == 0			\    || strcmp (obj_segment_name (SEG), ".data") == 0			\    || strcmp (obj_segment_name (SEG), ".bss") == 0			\    || strncmp (obj_segment_name (SEG), ".gnu.linkonce.t", 15) == 0	\    || strncmp (obj_segment_name (SEG), ".gnu.linkonce.d", 15) == 0	\    || strncmp (obj_segment_name (SEG), ".gnu.linkonce.r", 15) == 0)	\   ? 4									\   : 2)#else#define SUB_SEGMENT_ALIGN(SEG) 2#endif#define TC_RVA_RELOC 7/* Need this for PIC relocations */#define NEED_FX_R_TYPE#ifdef TE_386BSD/* The BSDI linker apparently rejects objects with a machine type of   M_386 (100).  */#define AOUT_MACHTYPE 0#else#define AOUT_MACHTYPE 100#endif#undef REVERSE_SORT_RELOCS#endif /* ! BFD_ASSEMBLER */#ifndef LEX_AT#define TC_PARSE_CONS_EXPRESSION(EXP, NBYTES) x86_cons (EXP, NBYTES)extern void x86_cons PARAMS ((expressionS *, int));#define TC_CONS_FIX_NEW(FRAG,OFF,LEN,EXP) x86_cons_fix_new(FRAG, OFF, LEN, EXP)extern void x86_cons_fix_new  PARAMS ((fragS *, unsigned int, unsigned int, expressionS *));#endif#define TC_FORCE_RELOCATION(fixp) tc_i386_force_relocation(fixp)extern int tc_i386_force_relocation PARAMS ((struct fix *));#ifdef BFD_ASSEMBLER#define NO_RELOC BFD_RELOC_NONE#else#define NO_RELOC 0#endif#define tc_coff_symbol_emit_hook(a)	;	/* not used */#ifndef BFD_ASSEMBLER#ifndef OBJ_AOUT#ifndef TE_PE#ifndef TE_GO32/* Local labels starts with .L */#define LOCAL_LABEL(name) (name[0] == '.' \		 && (name[1] == 'L' || name[1] == 'X' || name[1] == '.'))#endif#endif#endif#endif#define LOCAL_LABELS_FB 1#define tc_aout_pre_write_hook(x)	{;}	/* not used */#define tc_crawl_symbol_chain(a)	{;}	/* not used */#define tc_headers_hook(a)		{;}	/* not used */extern const char extra_symbol_chars[];#define tc_symbol_chars extra_symbol_chars#define MAX_OPERANDS 3		/* max operands per insn */#define MAX_IMMEDIATE_OPERANDS 2/* max immediates per insn (lcall, ljmp) */#define MAX_MEMORY_OPERANDS 2	/* max memory refs per insn (string ops) *//* Prefixes will be emitted in the order defined below.   WAIT_PREFIX must be the first prefix since FWAIT is really is an   instruction, and so must come before any prefixes.  */#define WAIT_PREFIX	0#define LOCKREP_PREFIX	1#define ADDR_PREFIX	2#define DATA_PREFIX	3#define SEG_PREFIX	4#define REX_PREFIX	5       /* must come last.  */#define MAX_PREFIXES	6	/* max prefixes per opcode *//* we define the syntax here (modulo base,index,scale syntax) */#define REGISTER_PREFIX '%'#define IMMEDIATE_PREFIX '$'#define ABSOLUTE_PREFIX '*'#define TWO_BYTE_OPCODE_ESCAPE 0x0f#define NOP_OPCODE (char) 0x90/* register numbers */#define EBP_REG_NUM 5#define ESP_REG_NUM 4/* modrm_byte.regmem for twobyte escape */#define ESCAPE_TO_TWO_BYTE_ADDRESSING ESP_REG_NUM/* index_base_byte.index for no index register addressing */#define NO_INDEX_REGISTER ESP_REG_NUM/* index_base_byte.base for no base register addressing */#define NO_BASE_REGISTER EBP_REG_NUM#define NO_BASE_REGISTER_16 6/* these are the instruction mnemonic suffixes.  */#define WORD_MNEM_SUFFIX  'w'#define BYTE_MNEM_SUFFIX  'b'#define SHORT_MNEM_SUFFIX 's'#define LONG_MNEM_SUFFIX  'l'#define QWORD_MNEM_SUFFIX  'q'/* Intel Syntax */#define LONG_DOUBLE_MNEM_SUFFIX 'x'/* modrm.mode = REGMEM_FIELD_HAS_REG when a register is in there */#define REGMEM_FIELD_HAS_REG 0x3/* always = 0x3 */#define REGMEM_FIELD_HAS_MEM (~REGMEM_FIELD_HAS_REG)#define END_OF_INSN '\0'/* Intel Syntax *//* Values 0-4 map onto scale factor */#define BYTE_PTR     0#define WORD_PTR     1#define DWORD_PTR    2#define QWORD_PTR    3#define XWORD_PTR    4#define SHORT        5#define OFFSET_FLAT  6#define FLAT         7#define NONE_FOUND   8typedef struct{  /* instruction name sans width suffix ("mov" for movl insns) */  char *name;  /* how many operands */  unsigned int operands;  /* base_opcode is the fundamental opcode byte without optional     prefix(es).  */  unsigned int base_opcode;  /* extension_opcode is the 3 bit extension for group <n> insns.

⌨️ 快捷键说明

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