1 /* tc-i386.c -- Assemble code for the Intel 80386
2 Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
3 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
4 Free Software Foundation, Inc.
6 This file is part of GAS, the GNU Assembler.
8 GAS is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3, or (at your option)
13 GAS is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GAS; see the file COPYING. If not, write to the Free
20 Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
23 /* Intel 80386 machine specific gas.
24 Written by Eliot Dresselhaus (eliot@mgm.mit.edu).
25 x86_64 support by Jan Hubicka (jh@suse.cz)
26 VIA PadLock support by Michal Ludvig (mludvig@suse.cz)
27 Bugs & suggestions are completely welcome. This is free software.
28 Please help us make it better. */
31 #include "safe-ctype.h"
33 #include "dwarf2dbg.h"
34 #include "dw2gencfi.h"
35 #include "elf/x86-64.h"
36 #include "opcodes/i386-init.h"
38 #ifndef REGISTER_WARNINGS
39 #define REGISTER_WARNINGS 1
42 #ifndef INFER_ADDR_PREFIX
43 #define INFER_ADDR_PREFIX 1
47 #define DEFAULT_ARCH "i386"
52 #define INLINE __inline__
58 /* Prefixes will be emitted in the order defined below.
59 WAIT_PREFIX must be the first prefix since FWAIT is really is an
60 instruction, and so must come before any prefixes.
61 The preferred prefix order is SEG_PREFIX, ADDR_PREFIX, DATA_PREFIX,
62 REP_PREFIX, LOCK_PREFIX. */
69 #define REX_PREFIX 6 /* must come last. */
70 #define MAX_PREFIXES 7 /* max prefixes per opcode */
72 /* we define the syntax here (modulo base,index,scale syntax) */
73 #define REGISTER_PREFIX '%'
74 #define IMMEDIATE_PREFIX '$'
75 #define ABSOLUTE_PREFIX '*'
77 /* these are the instruction mnemonic suffixes in AT&T syntax or
78 memory operand size in Intel syntax. */
79 #define WORD_MNEM_SUFFIX 'w'
80 #define BYTE_MNEM_SUFFIX 'b'
81 #define SHORT_MNEM_SUFFIX 's'
82 #define LONG_MNEM_SUFFIX 'l'
83 #define QWORD_MNEM_SUFFIX 'q'
84 #define XMMWORD_MNEM_SUFFIX 'x'
85 #define YMMWORD_MNEM_SUFFIX 'y'
86 /* Intel Syntax. Use a non-ascii letter since since it never appears
88 #define LONG_DOUBLE_MNEM_SUFFIX '\1'
90 #define END_OF_INSN '\0'
93 'templates' is for grouping together 'template' structures for opcodes
94 of the same name. This is only used for storing the insns in the grand
95 ole hash table of insns.
96 The templates themselves start at START and range up to (but not including)
101 const insn_template
*start
;
102 const insn_template
*end
;
106 /* 386 operand encoding bytes: see 386 book for details of this. */
109 unsigned int regmem
; /* codes register or memory operand */
110 unsigned int reg
; /* codes register operand (or extended opcode) */
111 unsigned int mode
; /* how to interpret regmem & reg */
115 /* x86-64 extension prefix. */
116 typedef int rex_byte
;
118 /* 386 opcode byte to code indirect addressing. */
127 /* x86 arch names, types and features */
130 const char *name
; /* arch name */
131 unsigned int len
; /* arch string length */
132 enum processor_type type
; /* arch type */
133 i386_cpu_flags flags
; /* cpu feature flags */
134 unsigned int skip
; /* show_arch should skip this. */
138 static void set_code_flag (int);
139 static void set_16bit_gcc_code_flag (int);
140 static void set_intel_syntax (int);
141 static void set_intel_mnemonic (int);
142 static void set_allow_index_reg (int);
143 static void set_sse_check (int);
144 static void set_cpu_arch (int);
146 static void pe_directive_secrel (int);
148 static void signed_cons (int);
149 static char *output_invalid (int c
);
150 static int i386_finalize_immediate (segT
, expressionS
*, i386_operand_type
,
152 static int i386_finalize_displacement (segT
, expressionS
*, i386_operand_type
,
154 static int i386_att_operand (char *);
155 static int i386_intel_operand (char *, int);
156 static int i386_intel_simplify (expressionS
*);
157 static int i386_intel_parse_name (const char *, expressionS
*);
158 static const reg_entry
*parse_register (char *, char **);
159 static char *parse_insn (char *, char *);
160 static char *parse_operands (char *, const char *);
161 static void swap_operands (void);
162 static void swap_2_operands (int, int);
163 static void optimize_imm (void);
164 static void optimize_disp (void);
165 static const insn_template
*match_template (void);
166 static int check_string (void);
167 static int process_suffix (void);
168 static int check_byte_reg (void);
169 static int check_long_reg (void);
170 static int check_qword_reg (void);
171 static int check_word_reg (void);
172 static int finalize_imm (void);
173 static int process_operands (void);
174 static const seg_entry
*build_modrm_byte (void);
175 static void output_insn (void);
176 static void output_imm (fragS
*, offsetT
);
177 static void output_disp (fragS
*, offsetT
);
179 static void s_bss (int);
181 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
182 static void handle_large_common (int small ATTRIBUTE_UNUSED
);
185 static const char *default_arch
= DEFAULT_ARCH
;
190 /* VEX prefix is either 2 byte or 3 byte. */
191 unsigned char bytes
[3];
193 /* Destination or source register specifier. */
194 const reg_entry
*register_specifier
;
197 /* 'md_assemble ()' gathers together information and puts it into a
204 const reg_entry
*regs
;
209 /* TM holds the template for the insn were currently assembling. */
212 /* SUFFIX holds the instruction size suffix for byte, word, dword
213 or qword, if given. */
216 /* OPERANDS gives the number of given operands. */
217 unsigned int operands
;
219 /* REG_OPERANDS, DISP_OPERANDS, MEM_OPERANDS, IMM_OPERANDS give the number
220 of given register, displacement, memory operands and immediate
222 unsigned int reg_operands
, disp_operands
, mem_operands
, imm_operands
;
224 /* TYPES [i] is the type (see above #defines) which tells us how to
225 use OP[i] for the corresponding operand. */
226 i386_operand_type types
[MAX_OPERANDS
];
228 /* Displacement expression, immediate expression, or register for each
230 union i386_op op
[MAX_OPERANDS
];
232 /* Flags for operands. */
233 unsigned int flags
[MAX_OPERANDS
];
234 #define Operand_PCrel 1
236 /* Relocation type for operand */
237 enum bfd_reloc_code_real reloc
[MAX_OPERANDS
];
239 /* BASE_REG, INDEX_REG, and LOG2_SCALE_FACTOR are used to encode
240 the base index byte below. */
241 const reg_entry
*base_reg
;
242 const reg_entry
*index_reg
;
243 unsigned int log2_scale_factor
;
245 /* SEG gives the seg_entries of this insn. They are zero unless
246 explicit segment overrides are given. */
247 const seg_entry
*seg
[2];
249 /* PREFIX holds all the given prefix opcodes (usually null).
250 PREFIXES is the number of prefix opcodes. */
251 unsigned int prefixes
;
252 unsigned char prefix
[MAX_PREFIXES
];
254 /* RM and SIB are the modrm byte and the sib byte where the
255 addressing modes of this insn are encoded. */
261 /* Swap operand in encoding. */
262 unsigned int swap_operand
;
265 typedef struct _i386_insn i386_insn
;
267 /* List of chars besides those in app.c:symbol_chars that can start an
268 operand. Used to prevent the scrubber eating vital white-space. */
269 const char extra_symbol_chars
[] = "*%-(["
278 #if (defined (TE_I386AIX) \
279 || ((defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)) \
280 && !defined (TE_GNU) \
281 && !defined (TE_LINUX) \
282 && !defined (TE_NETWARE) \
283 && !defined (TE_FreeBSD) \
284 && !defined (TE_NetBSD)))
285 /* This array holds the chars that always start a comment. If the
286 pre-processor is disabled, these aren't very useful. The option
287 --divide will remove '/' from this list. */
288 const char *i386_comment_chars
= "#/";
289 #define SVR4_COMMENT_CHARS 1
290 #define PREFIX_SEPARATOR '\\'
293 const char *i386_comment_chars
= "#";
294 #define PREFIX_SEPARATOR '/'
297 /* This array holds the chars that only start a comment at the beginning of
298 a line. If the line seems to have the form '# 123 filename'
299 .line and .file directives will appear in the pre-processed output.
300 Note that input_file.c hand checks for '#' at the beginning of the
301 first line of the input file. This is because the compiler outputs
302 #NO_APP at the beginning of its output.
303 Also note that comments started like this one will always work if
304 '/' isn't otherwise defined. */
305 const char line_comment_chars
[] = "#/";
307 const char line_separator_chars
[] = ";";
309 /* Chars that can be used to separate mant from exp in floating point
311 const char EXP_CHARS
[] = "eE";
313 /* Chars that mean this number is a floating point constant
316 const char FLT_CHARS
[] = "fFdDxX";
318 /* Tables for lexical analysis. */
319 static char mnemonic_chars
[256];
320 static char register_chars
[256];
321 static char operand_chars
[256];
322 static char identifier_chars
[256];
323 static char digit_chars
[256];
325 /* Lexical macros. */
326 #define is_mnemonic_char(x) (mnemonic_chars[(unsigned char) x])
327 #define is_operand_char(x) (operand_chars[(unsigned char) x])
328 #define is_register_char(x) (register_chars[(unsigned char) x])
329 #define is_space_char(x) ((x) == ' ')
330 #define is_identifier_char(x) (identifier_chars[(unsigned char) x])
331 #define is_digit_char(x) (digit_chars[(unsigned char) x])
333 /* All non-digit non-letter characters that may occur in an operand. */
334 static char operand_special_chars
[] = "%$-+(,)*._~/<>|&^!:[@]";
336 /* md_assemble() always leaves the strings it's passed unaltered. To
337 effect this we maintain a stack of saved characters that we've smashed
338 with '\0's (indicating end of strings for various sub-fields of the
339 assembler instruction). */
340 static char save_stack
[32];
341 static char *save_stack_p
;
342 #define END_STRING_AND_SAVE(s) \
343 do { *save_stack_p++ = *(s); *(s) = '\0'; } while (0)
344 #define RESTORE_END_STRING(s) \
345 do { *(s) = *--save_stack_p; } while (0)
347 /* The instruction we're assembling. */
350 /* Possible templates for current insn. */
351 static const templates
*current_templates
;
353 /* Per instruction expressionS buffers: max displacements & immediates. */
354 static expressionS disp_expressions
[MAX_MEMORY_OPERANDS
];
355 static expressionS im_expressions
[MAX_IMMEDIATE_OPERANDS
];
357 /* Current operand we are working on. */
358 static int this_operand
= -1;
360 /* We support four different modes. FLAG_CODE variable is used to distinguish
368 static enum flag_code flag_code
;
369 static unsigned int object_64bit
;
370 static int use_rela_relocations
= 0;
372 /* The names used to print error messages. */
373 static const char *flag_code_names
[] =
380 /* 1 for intel syntax,
382 static int intel_syntax
= 0;
384 /* 1 for intel mnemonic,
385 0 if att mnemonic. */
386 static int intel_mnemonic
= !SYSV386_COMPAT
;
388 /* 1 if support old (<= 2.8.1) versions of gcc. */
389 static int old_gcc
= OLDGCC_COMPAT
;
391 /* 1 if pseudo registers are permitted. */
392 static int allow_pseudo_reg
= 0;
394 /* 1 if register prefix % not required. */
395 static int allow_naked_reg
= 0;
397 /* 1 if pseudo index register, eiz/riz, is allowed . */
398 static int allow_index_reg
= 0;
408 /* Register prefix used for error message. */
409 static const char *register_prefix
= "%";
411 /* Used in 16 bit gcc mode to add an l suffix to call, ret, enter,
412 leave, push, and pop instructions so that gcc has the same stack
413 frame as in 32 bit mode. */
414 static char stackop_size
= '\0';
416 /* Non-zero to optimize code alignment. */
417 int optimize_align_code
= 1;
419 /* Non-zero to quieten some warnings. */
420 static int quiet_warnings
= 0;
423 static const char *cpu_arch_name
= NULL
;
424 static char *cpu_sub_arch_name
= NULL
;
426 /* CPU feature flags. */
427 static i386_cpu_flags cpu_arch_flags
= CPU_UNKNOWN_FLAGS
;
429 /* If we have selected a cpu we are generating instructions for. */
430 static int cpu_arch_tune_set
= 0;
432 /* Cpu we are generating instructions for. */
433 enum processor_type cpu_arch_tune
= PROCESSOR_UNKNOWN
;
435 /* CPU feature flags of cpu we are generating instructions for. */
436 static i386_cpu_flags cpu_arch_tune_flags
;
438 /* CPU instruction set architecture used. */
439 enum processor_type cpu_arch_isa
= PROCESSOR_UNKNOWN
;
441 /* CPU feature flags of instruction set architecture used. */
442 i386_cpu_flags cpu_arch_isa_flags
;
444 /* If set, conditional jumps are not automatically promoted to handle
445 larger than a byte offset. */
446 static unsigned int no_cond_jump_promotion
= 0;
448 /* Encode SSE instructions with VEX prefix. */
449 static unsigned int sse2avx
;
451 /* Encode scalar AVX instructions with specific vector length. */
458 /* Pre-defined "_GLOBAL_OFFSET_TABLE_". */
459 static symbolS
*GOT_symbol
;
461 /* The dwarf2 return column, adjusted for 32 or 64 bit. */
462 unsigned int x86_dwarf2_return_column
;
464 /* The dwarf2 data alignment, adjusted for 32 or 64 bit. */
465 int x86_cie_data_alignment
;
467 /* Interface to relax_segment.
468 There are 3 major relax states for 386 jump insns because the
469 different types of jumps add different sizes to frags when we're
470 figuring out what sort of jump to choose to reach a given label. */
473 #define UNCOND_JUMP 0
475 #define COND_JUMP86 2
480 #define SMALL16 (SMALL | CODE16)
482 #define BIG16 (BIG | CODE16)
486 #define INLINE __inline__
492 #define ENCODE_RELAX_STATE(type, size) \
493 ((relax_substateT) (((type) << 2) | (size)))
494 #define TYPE_FROM_RELAX_STATE(s) \
496 #define DISP_SIZE_FROM_RELAX_STATE(s) \
497 ((((s) & 3) == BIG ? 4 : (((s) & 3) == BIG16 ? 2 : 1)))
499 /* This table is used by relax_frag to promote short jumps to long
500 ones where necessary. SMALL (short) jumps may be promoted to BIG
501 (32 bit long) ones, and SMALL16 jumps to BIG16 (16 bit long). We
502 don't allow a short jump in a 32 bit code segment to be promoted to
503 a 16 bit offset jump because it's slower (requires data size
504 prefix), and doesn't work, unless the destination is in the bottom
505 64k of the code segment (The top 16 bits of eip are zeroed). */
507 const relax_typeS md_relax_table
[] =
510 1) most positive reach of this state,
511 2) most negative reach of this state,
512 3) how many bytes this mode will have in the variable part of the frag
513 4) which index into the table to try if we can't fit into this one. */
515 /* UNCOND_JUMP states. */
516 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (UNCOND_JUMP
, BIG
)},
517 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (UNCOND_JUMP
, BIG16
)},
518 /* dword jmp adds 4 bytes to frag:
519 0 extra opcode bytes, 4 displacement bytes. */
521 /* word jmp adds 2 byte2 to frag:
522 0 extra opcode bytes, 2 displacement bytes. */
525 /* COND_JUMP states. */
526 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP
, BIG
)},
527 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP
, BIG16
)},
528 /* dword conditionals adds 5 bytes to frag:
529 1 extra opcode byte, 4 displacement bytes. */
531 /* word conditionals add 3 bytes to frag:
532 1 extra opcode byte, 2 displacement bytes. */
535 /* COND_JUMP86 states. */
536 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP86
, BIG
)},
537 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP86
, BIG16
)},
538 /* dword conditionals adds 5 bytes to frag:
539 1 extra opcode byte, 4 displacement bytes. */
541 /* word conditionals add 4 bytes to frag:
542 1 displacement byte and a 3 byte long branch insn. */
546 static const arch_entry cpu_arch
[] =
548 { STRING_COMMA_LEN ("generic32"), PROCESSOR_GENERIC32
,
549 CPU_GENERIC32_FLAGS
, 0 },
550 { STRING_COMMA_LEN ("generic64"), PROCESSOR_GENERIC64
,
551 CPU_GENERIC64_FLAGS
, 0 },
552 { STRING_COMMA_LEN ("i8086"), PROCESSOR_UNKNOWN
,
554 { STRING_COMMA_LEN ("i186"), PROCESSOR_UNKNOWN
,
556 { STRING_COMMA_LEN ("i286"), PROCESSOR_UNKNOWN
,
558 { STRING_COMMA_LEN ("i386"), PROCESSOR_I386
,
560 { STRING_COMMA_LEN ("i486"), PROCESSOR_I486
,
562 { STRING_COMMA_LEN ("i586"), PROCESSOR_PENTIUM
,
564 { STRING_COMMA_LEN ("i686"), PROCESSOR_PENTIUMPRO
,
566 { STRING_COMMA_LEN ("pentium"), PROCESSOR_PENTIUM
,
568 { STRING_COMMA_LEN ("pentiumpro"), PROCESSOR_PENTIUMPRO
,
570 { STRING_COMMA_LEN ("pentiumii"), PROCESSOR_PENTIUMPRO
,
572 { STRING_COMMA_LEN ("pentiumiii"),PROCESSOR_PENTIUMPRO
,
574 { STRING_COMMA_LEN ("pentium4"), PROCESSOR_PENTIUM4
,
576 { STRING_COMMA_LEN ("prescott"), PROCESSOR_NOCONA
,
578 { STRING_COMMA_LEN ("nocona"), PROCESSOR_NOCONA
,
579 CPU_NOCONA_FLAGS
, 0 },
580 { STRING_COMMA_LEN ("yonah"), PROCESSOR_CORE
,
582 { STRING_COMMA_LEN ("core"), PROCESSOR_CORE
,
584 { STRING_COMMA_LEN ("merom"), PROCESSOR_CORE2
,
585 CPU_CORE2_FLAGS
, 1 },
586 { STRING_COMMA_LEN ("core2"), PROCESSOR_CORE2
,
587 CPU_CORE2_FLAGS
, 0 },
588 { STRING_COMMA_LEN ("corei7"), PROCESSOR_COREI7
,
589 CPU_COREI7_FLAGS
, 0 },
590 { STRING_COMMA_LEN ("l1om"), PROCESSOR_L1OM
,
592 { STRING_COMMA_LEN ("k6"), PROCESSOR_K6
,
594 { STRING_COMMA_LEN ("k6_2"), PROCESSOR_K6
,
596 { STRING_COMMA_LEN ("athlon"), PROCESSOR_ATHLON
,
597 CPU_ATHLON_FLAGS
, 0 },
598 { STRING_COMMA_LEN ("sledgehammer"), PROCESSOR_K8
,
600 { STRING_COMMA_LEN ("opteron"), PROCESSOR_K8
,
602 { STRING_COMMA_LEN ("k8"), PROCESSOR_K8
,
604 { STRING_COMMA_LEN ("amdfam10"), PROCESSOR_AMDFAM10
,
605 CPU_AMDFAM10_FLAGS
, 0 },
606 { STRING_COMMA_LEN ("amdfam15"), PROCESSOR_AMDFAM15
,
607 CPU_AMDFAM15_FLAGS
, 0 },
608 { STRING_COMMA_LEN (".8087"), PROCESSOR_UNKNOWN
,
610 { STRING_COMMA_LEN (".287"), PROCESSOR_UNKNOWN
,
612 { STRING_COMMA_LEN (".387"), PROCESSOR_UNKNOWN
,
614 { STRING_COMMA_LEN (".no87"), PROCESSOR_UNKNOWN
,
615 CPU_ANY87_FLAGS
, 0 },
616 { STRING_COMMA_LEN (".mmx"), PROCESSOR_UNKNOWN
,
618 { STRING_COMMA_LEN (".nommx"), PROCESSOR_UNKNOWN
,
619 CPU_3DNOWA_FLAGS
, 0 },
620 { STRING_COMMA_LEN (".sse"), PROCESSOR_UNKNOWN
,
622 { STRING_COMMA_LEN (".sse2"), PROCESSOR_UNKNOWN
,
624 { STRING_COMMA_LEN (".sse3"), PROCESSOR_UNKNOWN
,
626 { STRING_COMMA_LEN (".ssse3"), PROCESSOR_UNKNOWN
,
627 CPU_SSSE3_FLAGS
, 0 },
628 { STRING_COMMA_LEN (".sse4.1"), PROCESSOR_UNKNOWN
,
629 CPU_SSE4_1_FLAGS
, 0 },
630 { STRING_COMMA_LEN (".sse4.2"), PROCESSOR_UNKNOWN
,
631 CPU_SSE4_2_FLAGS
, 0 },
632 { STRING_COMMA_LEN (".sse4"), PROCESSOR_UNKNOWN
,
633 CPU_SSE4_2_FLAGS
, 0 },
634 { STRING_COMMA_LEN (".nosse"), PROCESSOR_UNKNOWN
,
635 CPU_ANY_SSE_FLAGS
, 0 },
636 { STRING_COMMA_LEN (".avx"), PROCESSOR_UNKNOWN
,
638 { STRING_COMMA_LEN (".noavx"), PROCESSOR_UNKNOWN
,
639 CPU_ANY_AVX_FLAGS
, 0 },
640 { STRING_COMMA_LEN (".vmx"), PROCESSOR_UNKNOWN
,
642 { STRING_COMMA_LEN (".smx"), PROCESSOR_UNKNOWN
,
644 { STRING_COMMA_LEN (".xsave"), PROCESSOR_UNKNOWN
,
645 CPU_XSAVE_FLAGS
, 0 },
646 { STRING_COMMA_LEN (".aes"), PROCESSOR_UNKNOWN
,
648 { STRING_COMMA_LEN (".pclmul"), PROCESSOR_UNKNOWN
,
649 CPU_PCLMUL_FLAGS
, 0 },
650 { STRING_COMMA_LEN (".clmul"), PROCESSOR_UNKNOWN
,
651 CPU_PCLMUL_FLAGS
, 1 },
652 { STRING_COMMA_LEN (".fma"), PROCESSOR_UNKNOWN
,
654 { STRING_COMMA_LEN (".fma4"), PROCESSOR_UNKNOWN
,
656 { STRING_COMMA_LEN (".xop"), PROCESSOR_UNKNOWN
,
658 { STRING_COMMA_LEN (".lwp"), PROCESSOR_UNKNOWN
,
660 { STRING_COMMA_LEN (".movbe"), PROCESSOR_UNKNOWN
,
661 CPU_MOVBE_FLAGS
, 0 },
662 { STRING_COMMA_LEN (".ept"), PROCESSOR_UNKNOWN
,
664 { STRING_COMMA_LEN (".clflush"), PROCESSOR_UNKNOWN
,
665 CPU_CLFLUSH_FLAGS
, 0 },
666 { STRING_COMMA_LEN (".syscall"), PROCESSOR_UNKNOWN
,
667 CPU_SYSCALL_FLAGS
, 0 },
668 { STRING_COMMA_LEN (".rdtscp"), PROCESSOR_UNKNOWN
,
669 CPU_RDTSCP_FLAGS
, 0 },
670 { STRING_COMMA_LEN (".3dnow"), PROCESSOR_UNKNOWN
,
671 CPU_3DNOW_FLAGS
, 0 },
672 { STRING_COMMA_LEN (".3dnowa"), PROCESSOR_UNKNOWN
,
673 CPU_3DNOWA_FLAGS
, 0 },
674 { STRING_COMMA_LEN (".padlock"), PROCESSOR_UNKNOWN
,
675 CPU_PADLOCK_FLAGS
, 0 },
676 { STRING_COMMA_LEN (".pacifica"), PROCESSOR_UNKNOWN
,
678 { STRING_COMMA_LEN (".svme"), PROCESSOR_UNKNOWN
,
680 { STRING_COMMA_LEN (".sse4a"), PROCESSOR_UNKNOWN
,
681 CPU_SSE4A_FLAGS
, 0 },
682 { STRING_COMMA_LEN (".abm"), PROCESSOR_UNKNOWN
,
687 /* Like s_lcomm_internal in gas/read.c but the alignment string
688 is allowed to be optional. */
691 pe_lcomm_internal (int needs_align
, symbolS
*symbolP
, addressT size
)
698 && *input_line_pointer
== ',')
700 align
= parse_align (needs_align
- 1);
702 if (align
== (addressT
) -1)
717 bss_alloc (symbolP
, size
, align
);
722 pe_lcomm (int needs_align
)
724 s_comm_internal (needs_align
* 2, pe_lcomm_internal
);
728 const pseudo_typeS md_pseudo_table
[] =
730 #if !defined(OBJ_AOUT) && !defined(USE_ALIGN_PTWO)
731 {"align", s_align_bytes
, 0},
733 {"align", s_align_ptwo
, 0},
735 {"arch", set_cpu_arch
, 0},
739 {"lcomm", pe_lcomm
, 1},
741 {"ffloat", float_cons
, 'f'},
742 {"dfloat", float_cons
, 'd'},
743 {"tfloat", float_cons
, 'x'},
745 {"slong", signed_cons
, 4},
746 {"noopt", s_ignore
, 0},
747 {"optim", s_ignore
, 0},
748 {"code16gcc", set_16bit_gcc_code_flag
, CODE_16BIT
},
749 {"code16", set_code_flag
, CODE_16BIT
},
750 {"code32", set_code_flag
, CODE_32BIT
},
751 {"code64", set_code_flag
, CODE_64BIT
},
752 {"intel_syntax", set_intel_syntax
, 1},
753 {"att_syntax", set_intel_syntax
, 0},
754 {"intel_mnemonic", set_intel_mnemonic
, 1},
755 {"att_mnemonic", set_intel_mnemonic
, 0},
756 {"allow_index_reg", set_allow_index_reg
, 1},
757 {"disallow_index_reg", set_allow_index_reg
, 0},
758 {"sse_check", set_sse_check
, 0},
759 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
760 {"largecomm", handle_large_common
, 0},
762 {"file", (void (*) (int)) dwarf2_directive_file
, 0},
763 {"loc", dwarf2_directive_loc
, 0},
764 {"loc_mark_labels", dwarf2_directive_loc_mark_labels
, 0},
767 {"secrel32", pe_directive_secrel
, 0},
772 /* For interface with expression (). */
773 extern char *input_line_pointer
;
775 /* Hash table for instruction mnemonic lookup. */
776 static struct hash_control
*op_hash
;
778 /* Hash table for register lookup. */
779 static struct hash_control
*reg_hash
;
782 i386_align_code (fragS
*fragP
, int count
)
784 /* Various efficient no-op patterns for aligning code labels.
785 Note: Don't try to assemble the instructions in the comments.
786 0L and 0w are not legal. */
787 static const char f32_1
[] =
789 static const char f32_2
[] =
790 {0x66,0x90}; /* xchg %ax,%ax */
791 static const char f32_3
[] =
792 {0x8d,0x76,0x00}; /* leal 0(%esi),%esi */
793 static const char f32_4
[] =
794 {0x8d,0x74,0x26,0x00}; /* leal 0(%esi,1),%esi */
795 static const char f32_5
[] =
797 0x8d,0x74,0x26,0x00}; /* leal 0(%esi,1),%esi */
798 static const char f32_6
[] =
799 {0x8d,0xb6,0x00,0x00,0x00,0x00}; /* leal 0L(%esi),%esi */
800 static const char f32_7
[] =
801 {0x8d,0xb4,0x26,0x00,0x00,0x00,0x00}; /* leal 0L(%esi,1),%esi */
802 static const char f32_8
[] =
804 0x8d,0xb4,0x26,0x00,0x00,0x00,0x00}; /* leal 0L(%esi,1),%esi */
805 static const char f32_9
[] =
806 {0x89,0xf6, /* movl %esi,%esi */
807 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
808 static const char f32_10
[] =
809 {0x8d,0x76,0x00, /* leal 0(%esi),%esi */
810 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
811 static const char f32_11
[] =
812 {0x8d,0x74,0x26,0x00, /* leal 0(%esi,1),%esi */
813 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
814 static const char f32_12
[] =
815 {0x8d,0xb6,0x00,0x00,0x00,0x00, /* leal 0L(%esi),%esi */
816 0x8d,0xbf,0x00,0x00,0x00,0x00}; /* leal 0L(%edi),%edi */
817 static const char f32_13
[] =
818 {0x8d,0xb6,0x00,0x00,0x00,0x00, /* leal 0L(%esi),%esi */
819 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
820 static const char f32_14
[] =
821 {0x8d,0xb4,0x26,0x00,0x00,0x00,0x00, /* leal 0L(%esi,1),%esi */
822 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
823 static const char f16_3
[] =
824 {0x8d,0x74,0x00}; /* lea 0(%esi),%esi */
825 static const char f16_4
[] =
826 {0x8d,0xb4,0x00,0x00}; /* lea 0w(%si),%si */
827 static const char f16_5
[] =
829 0x8d,0xb4,0x00,0x00}; /* lea 0w(%si),%si */
830 static const char f16_6
[] =
831 {0x89,0xf6, /* mov %si,%si */
832 0x8d,0xbd,0x00,0x00}; /* lea 0w(%di),%di */
833 static const char f16_7
[] =
834 {0x8d,0x74,0x00, /* lea 0(%si),%si */
835 0x8d,0xbd,0x00,0x00}; /* lea 0w(%di),%di */
836 static const char f16_8
[] =
837 {0x8d,0xb4,0x00,0x00, /* lea 0w(%si),%si */
838 0x8d,0xbd,0x00,0x00}; /* lea 0w(%di),%di */
839 static const char jump_31
[] =
840 {0xeb,0x1d,0x90,0x90,0x90,0x90,0x90, /* jmp .+31; lotsa nops */
841 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
842 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
843 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90};
844 static const char *const f32_patt
[] = {
845 f32_1
, f32_2
, f32_3
, f32_4
, f32_5
, f32_6
, f32_7
, f32_8
,
846 f32_9
, f32_10
, f32_11
, f32_12
, f32_13
, f32_14
848 static const char *const f16_patt
[] = {
849 f32_1
, f32_2
, f16_3
, f16_4
, f16_5
, f16_6
, f16_7
, f16_8
852 static const char alt_3
[] =
854 /* nopl 0(%[re]ax) */
855 static const char alt_4
[] =
856 {0x0f,0x1f,0x40,0x00};
857 /* nopl 0(%[re]ax,%[re]ax,1) */
858 static const char alt_5
[] =
859 {0x0f,0x1f,0x44,0x00,0x00};
860 /* nopw 0(%[re]ax,%[re]ax,1) */
861 static const char alt_6
[] =
862 {0x66,0x0f,0x1f,0x44,0x00,0x00};
863 /* nopl 0L(%[re]ax) */
864 static const char alt_7
[] =
865 {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
866 /* nopl 0L(%[re]ax,%[re]ax,1) */
867 static const char alt_8
[] =
868 {0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
869 /* nopw 0L(%[re]ax,%[re]ax,1) */
870 static const char alt_9
[] =
871 {0x66,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
872 /* nopw %cs:0L(%[re]ax,%[re]ax,1) */
873 static const char alt_10
[] =
874 {0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
876 nopw %cs:0L(%[re]ax,%[re]ax,1) */
877 static const char alt_long_11
[] =
879 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
882 nopw %cs:0L(%[re]ax,%[re]ax,1) */
883 static const char alt_long_12
[] =
886 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
890 nopw %cs:0L(%[re]ax,%[re]ax,1) */
891 static const char alt_long_13
[] =
895 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
900 nopw %cs:0L(%[re]ax,%[re]ax,1) */
901 static const char alt_long_14
[] =
906 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
912 nopw %cs:0L(%[re]ax,%[re]ax,1) */
913 static const char alt_long_15
[] =
919 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
920 /* nopl 0(%[re]ax,%[re]ax,1)
921 nopw 0(%[re]ax,%[re]ax,1) */
922 static const char alt_short_11
[] =
923 {0x0f,0x1f,0x44,0x00,0x00,
924 0x66,0x0f,0x1f,0x44,0x00,0x00};
925 /* nopw 0(%[re]ax,%[re]ax,1)
926 nopw 0(%[re]ax,%[re]ax,1) */
927 static const char alt_short_12
[] =
928 {0x66,0x0f,0x1f,0x44,0x00,0x00,
929 0x66,0x0f,0x1f,0x44,0x00,0x00};
930 /* nopw 0(%[re]ax,%[re]ax,1)
932 static const char alt_short_13
[] =
933 {0x66,0x0f,0x1f,0x44,0x00,0x00,
934 0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
937 static const char alt_short_14
[] =
938 {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00,
939 0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
941 nopl 0L(%[re]ax,%[re]ax,1) */
942 static const char alt_short_15
[] =
943 {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00,
944 0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
945 static const char *const alt_short_patt
[] = {
946 f32_1
, f32_2
, alt_3
, alt_4
, alt_5
, alt_6
, alt_7
, alt_8
,
947 alt_9
, alt_10
, alt_short_11
, alt_short_12
, alt_short_13
,
948 alt_short_14
, alt_short_15
950 static const char *const alt_long_patt
[] = {
951 f32_1
, f32_2
, alt_3
, alt_4
, alt_5
, alt_6
, alt_7
, alt_8
,
952 alt_9
, alt_10
, alt_long_11
, alt_long_12
, alt_long_13
,
953 alt_long_14
, alt_long_15
956 /* Only align for at least a positive non-zero boundary. */
957 if (count
<= 0 || count
> MAX_MEM_FOR_RS_ALIGN_CODE
)
960 /* We need to decide which NOP sequence to use for 32bit and
961 64bit. When -mtune= is used:
963 1. For PROCESSOR_I386, PROCESSOR_I486, PROCESSOR_PENTIUM and
964 PROCESSOR_GENERIC32, f32_patt will be used.
965 2. For PROCESSOR_PENTIUMPRO, PROCESSOR_PENTIUM4, PROCESSOR_NOCONA,
966 PROCESSOR_CORE, PROCESSOR_CORE2, PROCESSOR_COREI7, and
967 PROCESSOR_GENERIC64, alt_long_patt will be used.
968 3. For PROCESSOR_ATHLON, PROCESSOR_K6, PROCESSOR_K8 and
969 PROCESSOR_AMDFAM10, and PROCESSOR_AMDFAM15, alt_short_patt
972 When -mtune= isn't used, alt_long_patt will be used if
973 cpu_arch_isa_flags has Cpu686. Otherwise, f32_patt will
976 When -march= or .arch is used, we can't use anything beyond
977 cpu_arch_isa_flags. */
979 if (flag_code
== CODE_16BIT
)
983 memcpy (fragP
->fr_literal
+ fragP
->fr_fix
,
985 /* Adjust jump offset. */
986 fragP
->fr_literal
[fragP
->fr_fix
+ 1] = count
- 2;
989 memcpy (fragP
->fr_literal
+ fragP
->fr_fix
,
990 f16_patt
[count
- 1], count
);
994 const char *const *patt
= NULL
;
996 if (fragP
->tc_frag_data
.isa
== PROCESSOR_UNKNOWN
)
998 /* PROCESSOR_UNKNOWN means that all ISAs may be used. */
999 switch (cpu_arch_tune
)
1001 case PROCESSOR_UNKNOWN
:
1002 /* We use cpu_arch_isa_flags to check if we SHOULD
1003 optimize for Cpu686. */
1004 if (fragP
->tc_frag_data
.isa_flags
.bitfield
.cpui686
)
1005 patt
= alt_long_patt
;
1009 case PROCESSOR_PENTIUMPRO
:
1010 case PROCESSOR_PENTIUM4
:
1011 case PROCESSOR_NOCONA
:
1012 case PROCESSOR_CORE
:
1013 case PROCESSOR_CORE2
:
1014 case PROCESSOR_COREI7
:
1015 case PROCESSOR_L1OM
:
1016 case PROCESSOR_GENERIC64
:
1017 patt
= alt_long_patt
;
1020 case PROCESSOR_ATHLON
:
1022 case PROCESSOR_AMDFAM10
:
1023 case PROCESSOR_AMDFAM15
:
1024 patt
= alt_short_patt
;
1026 case PROCESSOR_I386
:
1027 case PROCESSOR_I486
:
1028 case PROCESSOR_PENTIUM
:
1029 case PROCESSOR_GENERIC32
:
1036 switch (fragP
->tc_frag_data
.tune
)
1038 case PROCESSOR_UNKNOWN
:
1039 /* When cpu_arch_isa is set, cpu_arch_tune shouldn't be
1040 PROCESSOR_UNKNOWN. */
1044 case PROCESSOR_I386
:
1045 case PROCESSOR_I486
:
1046 case PROCESSOR_PENTIUM
:
1048 case PROCESSOR_ATHLON
:
1050 case PROCESSOR_AMDFAM10
:
1051 case PROCESSOR_AMDFAM15
:
1052 case PROCESSOR_GENERIC32
:
1053 /* We use cpu_arch_isa_flags to check if we CAN optimize
1055 if (fragP
->tc_frag_data
.isa_flags
.bitfield
.cpui686
)
1056 patt
= alt_short_patt
;
1060 case PROCESSOR_PENTIUMPRO
:
1061 case PROCESSOR_PENTIUM4
:
1062 case PROCESSOR_NOCONA
:
1063 case PROCESSOR_CORE
:
1064 case PROCESSOR_CORE2
:
1065 case PROCESSOR_COREI7
:
1066 case PROCESSOR_L1OM
:
1067 if (fragP
->tc_frag_data
.isa_flags
.bitfield
.cpui686
)
1068 patt
= alt_long_patt
;
1072 case PROCESSOR_GENERIC64
:
1073 patt
= alt_long_patt
;
1078 if (patt
== f32_patt
)
1080 /* If the padding is less than 15 bytes, we use the normal
1081 ones. Otherwise, we use a jump instruction and adjust
1085 /* For 64bit, the limit is 3 bytes. */
1086 if (flag_code
== CODE_64BIT
1087 && fragP
->tc_frag_data
.isa_flags
.bitfield
.cpulm
)
1092 memcpy (fragP
->fr_literal
+ fragP
->fr_fix
,
1093 patt
[count
- 1], count
);
1096 memcpy (fragP
->fr_literal
+ fragP
->fr_fix
,
1098 /* Adjust jump offset. */
1099 fragP
->fr_literal
[fragP
->fr_fix
+ 1] = count
- 2;
1104 /* Maximum length of an instruction is 15 byte. If the
1105 padding is greater than 15 bytes and we don't use jump,
1106 we have to break it into smaller pieces. */
1107 int padding
= count
;
1108 while (padding
> 15)
1111 memcpy (fragP
->fr_literal
+ fragP
->fr_fix
+ padding
,
1116 memcpy (fragP
->fr_literal
+ fragP
->fr_fix
,
1117 patt
[padding
- 1], padding
);
1120 fragP
->fr_var
= count
;
1124 operand_type_all_zero (const union i386_operand_type
*x
)
1126 switch (ARRAY_SIZE(x
->array
))
1135 return !x
->array
[0];
1142 operand_type_set (union i386_operand_type
*x
, unsigned int v
)
1144 switch (ARRAY_SIZE(x
->array
))
1159 operand_type_equal (const union i386_operand_type
*x
,
1160 const union i386_operand_type
*y
)
1162 switch (ARRAY_SIZE(x
->array
))
1165 if (x
->array
[2] != y
->array
[2])
1168 if (x
->array
[1] != y
->array
[1])
1171 return x
->array
[0] == y
->array
[0];
1179 cpu_flags_all_zero (const union i386_cpu_flags
*x
)
1181 switch (ARRAY_SIZE(x
->array
))
1190 return !x
->array
[0];
1197 cpu_flags_set (union i386_cpu_flags
*x
, unsigned int v
)
1199 switch (ARRAY_SIZE(x
->array
))
1214 cpu_flags_equal (const union i386_cpu_flags
*x
,
1215 const union i386_cpu_flags
*y
)
1217 switch (ARRAY_SIZE(x
->array
))
1220 if (x
->array
[2] != y
->array
[2])
1223 if (x
->array
[1] != y
->array
[1])
1226 return x
->array
[0] == y
->array
[0];
1234 cpu_flags_check_cpu64 (i386_cpu_flags f
)
1236 return !((flag_code
== CODE_64BIT
&& f
.bitfield
.cpuno64
)
1237 || (flag_code
!= CODE_64BIT
&& f
.bitfield
.cpu64
));
1240 static INLINE i386_cpu_flags
1241 cpu_flags_and (i386_cpu_flags x
, i386_cpu_flags y
)
1243 switch (ARRAY_SIZE (x
.array
))
1246 x
.array
[2] &= y
.array
[2];
1248 x
.array
[1] &= y
.array
[1];
1250 x
.array
[0] &= y
.array
[0];
1258 static INLINE i386_cpu_flags
1259 cpu_flags_or (i386_cpu_flags x
, i386_cpu_flags y
)
1261 switch (ARRAY_SIZE (x
.array
))
1264 x
.array
[2] |= y
.array
[2];
1266 x
.array
[1] |= y
.array
[1];
1268 x
.array
[0] |= y
.array
[0];
1276 static INLINE i386_cpu_flags
1277 cpu_flags_and_not (i386_cpu_flags x
, i386_cpu_flags y
)
1279 switch (ARRAY_SIZE (x
.array
))
1282 x
.array
[2] &= ~y
.array
[2];
1284 x
.array
[1] &= ~y
.array
[1];
1286 x
.array
[0] &= ~y
.array
[0];
1294 #define CPU_FLAGS_ARCH_MATCH 0x1
1295 #define CPU_FLAGS_64BIT_MATCH 0x2
1296 #define CPU_FLAGS_AES_MATCH 0x4
1297 #define CPU_FLAGS_PCLMUL_MATCH 0x8
1298 #define CPU_FLAGS_AVX_MATCH 0x10
1300 #define CPU_FLAGS_32BIT_MATCH \
1301 (CPU_FLAGS_ARCH_MATCH | CPU_FLAGS_AES_MATCH \
1302 | CPU_FLAGS_PCLMUL_MATCH | CPU_FLAGS_AVX_MATCH)
1303 #define CPU_FLAGS_PERFECT_MATCH \
1304 (CPU_FLAGS_32BIT_MATCH | CPU_FLAGS_64BIT_MATCH)
1306 /* Return CPU flags match bits. */
1309 cpu_flags_match (const insn_template
*t
)
1311 i386_cpu_flags x
= t
->cpu_flags
;
1312 int match
= cpu_flags_check_cpu64 (x
) ? CPU_FLAGS_64BIT_MATCH
: 0;
1314 x
.bitfield
.cpu64
= 0;
1315 x
.bitfield
.cpuno64
= 0;
1317 if (cpu_flags_all_zero (&x
))
1319 /* This instruction is available on all archs. */
1320 match
|= CPU_FLAGS_32BIT_MATCH
;
1324 /* This instruction is available only on some archs. */
1325 i386_cpu_flags cpu
= cpu_arch_flags
;
1327 cpu
.bitfield
.cpu64
= 0;
1328 cpu
.bitfield
.cpuno64
= 0;
1329 cpu
= cpu_flags_and (x
, cpu
);
1330 if (!cpu_flags_all_zero (&cpu
))
1332 if (x
.bitfield
.cpuavx
)
1334 /* We only need to check AES/PCLMUL/SSE2AVX with AVX. */
1335 if (cpu
.bitfield
.cpuavx
)
1337 /* Check SSE2AVX. */
1338 if (!t
->opcode_modifier
.sse2avx
|| sse2avx
)
1340 match
|= (CPU_FLAGS_ARCH_MATCH
1341 | CPU_FLAGS_AVX_MATCH
);
1343 if (!x
.bitfield
.cpuaes
|| cpu
.bitfield
.cpuaes
)
1344 match
|= CPU_FLAGS_AES_MATCH
;
1346 if (!x
.bitfield
.cpupclmul
1347 || cpu
.bitfield
.cpupclmul
)
1348 match
|= CPU_FLAGS_PCLMUL_MATCH
;
1352 match
|= CPU_FLAGS_ARCH_MATCH
;
1355 match
|= CPU_FLAGS_32BIT_MATCH
;
1361 static INLINE i386_operand_type
1362 operand_type_and (i386_operand_type x
, i386_operand_type y
)
1364 switch (ARRAY_SIZE (x
.array
))
1367 x
.array
[2] &= y
.array
[2];
1369 x
.array
[1] &= y
.array
[1];
1371 x
.array
[0] &= y
.array
[0];
1379 static INLINE i386_operand_type
1380 operand_type_or (i386_operand_type x
, i386_operand_type y
)
1382 switch (ARRAY_SIZE (x
.array
))
1385 x
.array
[2] |= y
.array
[2];
1387 x
.array
[1] |= y
.array
[1];
1389 x
.array
[0] |= y
.array
[0];
1397 static INLINE i386_operand_type
1398 operand_type_xor (i386_operand_type x
, i386_operand_type y
)
1400 switch (ARRAY_SIZE (x
.array
))
1403 x
.array
[2] ^= y
.array
[2];
1405 x
.array
[1] ^= y
.array
[1];
1407 x
.array
[0] ^= y
.array
[0];
1415 static const i386_operand_type acc32
= OPERAND_TYPE_ACC32
;
1416 static const i386_operand_type acc64
= OPERAND_TYPE_ACC64
;
1417 static const i386_operand_type control
= OPERAND_TYPE_CONTROL
;
1418 static const i386_operand_type inoutportreg
1419 = OPERAND_TYPE_INOUTPORTREG
;
1420 static const i386_operand_type reg16_inoutportreg
1421 = OPERAND_TYPE_REG16_INOUTPORTREG
;
1422 static const i386_operand_type disp16
= OPERAND_TYPE_DISP16
;
1423 static const i386_operand_type disp32
= OPERAND_TYPE_DISP32
;
1424 static const i386_operand_type disp32s
= OPERAND_TYPE_DISP32S
;
1425 static const i386_operand_type disp16_32
= OPERAND_TYPE_DISP16_32
;
1426 static const i386_operand_type anydisp
1427 = OPERAND_TYPE_ANYDISP
;
1428 static const i386_operand_type regxmm
= OPERAND_TYPE_REGXMM
;
1429 static const i386_operand_type regymm
= OPERAND_TYPE_REGYMM
;
1430 static const i386_operand_type imm8
= OPERAND_TYPE_IMM8
;
1431 static const i386_operand_type imm8s
= OPERAND_TYPE_IMM8S
;
1432 static const i386_operand_type imm16
= OPERAND_TYPE_IMM16
;
1433 static const i386_operand_type imm32
= OPERAND_TYPE_IMM32
;
1434 static const i386_operand_type imm32s
= OPERAND_TYPE_IMM32S
;
1435 static const i386_operand_type imm64
= OPERAND_TYPE_IMM64
;
1436 static const i386_operand_type imm16_32
= OPERAND_TYPE_IMM16_32
;
1437 static const i386_operand_type imm16_32s
= OPERAND_TYPE_IMM16_32S
;
1438 static const i386_operand_type imm16_32_32s
= OPERAND_TYPE_IMM16_32_32S
;
1449 operand_type_check (i386_operand_type t
, enum operand_type c
)
1454 return (t
.bitfield
.reg8
1457 || t
.bitfield
.reg64
);
1460 return (t
.bitfield
.imm8
1464 || t
.bitfield
.imm32s
1465 || t
.bitfield
.imm64
);
1468 return (t
.bitfield
.disp8
1469 || t
.bitfield
.disp16
1470 || t
.bitfield
.disp32
1471 || t
.bitfield
.disp32s
1472 || t
.bitfield
.disp64
);
1475 return (t
.bitfield
.disp8
1476 || t
.bitfield
.disp16
1477 || t
.bitfield
.disp32
1478 || t
.bitfield
.disp32s
1479 || t
.bitfield
.disp64
1480 || t
.bitfield
.baseindex
);
1489 /* Return 1 if there is no conflict in 8bit/16bit/32bit/64bit on
1490 operand J for instruction template T. */
1493 match_reg_size (const insn_template
*t
, unsigned int j
)
1495 return !((i
.types
[j
].bitfield
.byte
1496 && !t
->operand_types
[j
].bitfield
.byte
)
1497 || (i
.types
[j
].bitfield
.word
1498 && !t
->operand_types
[j
].bitfield
.word
)
1499 || (i
.types
[j
].bitfield
.dword
1500 && !t
->operand_types
[j
].bitfield
.dword
)
1501 || (i
.types
[j
].bitfield
.qword
1502 && !t
->operand_types
[j
].bitfield
.qword
));
1505 /* Return 1 if there is no conflict in any size on operand J for
1506 instruction template T. */
1509 match_mem_size (const insn_template
*t
, unsigned int j
)
1511 return (match_reg_size (t
, j
)
1512 && !((i
.types
[j
].bitfield
.unspecified
1513 && !t
->operand_types
[j
].bitfield
.unspecified
)
1514 || (i
.types
[j
].bitfield
.fword
1515 && !t
->operand_types
[j
].bitfield
.fword
)
1516 || (i
.types
[j
].bitfield
.tbyte
1517 && !t
->operand_types
[j
].bitfield
.tbyte
)
1518 || (i
.types
[j
].bitfield
.xmmword
1519 && !t
->operand_types
[j
].bitfield
.xmmword
)
1520 || (i
.types
[j
].bitfield
.ymmword
1521 && !t
->operand_types
[j
].bitfield
.ymmword
)));
1524 /* Return 1 if there is no size conflict on any operands for
1525 instruction template T. */
1528 operand_size_match (const insn_template
*t
)
1533 /* Don't check jump instructions. */
1534 if (t
->opcode_modifier
.jump
1535 || t
->opcode_modifier
.jumpbyte
1536 || t
->opcode_modifier
.jumpdword
1537 || t
->opcode_modifier
.jumpintersegment
)
1540 /* Check memory and accumulator operand size. */
1541 for (j
= 0; j
< i
.operands
; j
++)
1543 if (t
->operand_types
[j
].bitfield
.anysize
)
1546 if (t
->operand_types
[j
].bitfield
.acc
&& !match_reg_size (t
, j
))
1552 if (i
.types
[j
].bitfield
.mem
&& !match_mem_size (t
, j
))
1560 || (!t
->opcode_modifier
.d
&& !t
->opcode_modifier
.floatd
))
1563 /* Check reverse. */
1564 gas_assert (i
.operands
== 2);
1567 for (j
= 0; j
< 2; j
++)
1569 if (t
->operand_types
[j
].bitfield
.acc
1570 && !match_reg_size (t
, j
? 0 : 1))
1576 if (i
.types
[j
].bitfield
.mem
1577 && !match_mem_size (t
, j
? 0 : 1))
1588 operand_type_match (i386_operand_type overlap
,
1589 i386_operand_type given
)
1591 i386_operand_type temp
= overlap
;
1593 temp
.bitfield
.jumpabsolute
= 0;
1594 temp
.bitfield
.unspecified
= 0;
1595 temp
.bitfield
.byte
= 0;
1596 temp
.bitfield
.word
= 0;
1597 temp
.bitfield
.dword
= 0;
1598 temp
.bitfield
.fword
= 0;
1599 temp
.bitfield
.qword
= 0;
1600 temp
.bitfield
.tbyte
= 0;
1601 temp
.bitfield
.xmmword
= 0;
1602 temp
.bitfield
.ymmword
= 0;
1603 if (operand_type_all_zero (&temp
))
1606 return (given
.bitfield
.baseindex
== overlap
.bitfield
.baseindex
1607 && given
.bitfield
.jumpabsolute
== overlap
.bitfield
.jumpabsolute
);
1610 /* If given types g0 and g1 are registers they must be of the same type
1611 unless the expected operand type register overlap is null.
1612 Note that Acc in a template matches every size of reg. */
1615 operand_type_register_match (i386_operand_type m0
,
1616 i386_operand_type g0
,
1617 i386_operand_type t0
,
1618 i386_operand_type m1
,
1619 i386_operand_type g1
,
1620 i386_operand_type t1
)
1622 if (!operand_type_check (g0
, reg
))
1625 if (!operand_type_check (g1
, reg
))
1628 if (g0
.bitfield
.reg8
== g1
.bitfield
.reg8
1629 && g0
.bitfield
.reg16
== g1
.bitfield
.reg16
1630 && g0
.bitfield
.reg32
== g1
.bitfield
.reg32
1631 && g0
.bitfield
.reg64
== g1
.bitfield
.reg64
)
1634 if (m0
.bitfield
.acc
)
1636 t0
.bitfield
.reg8
= 1;
1637 t0
.bitfield
.reg16
= 1;
1638 t0
.bitfield
.reg32
= 1;
1639 t0
.bitfield
.reg64
= 1;
1642 if (m1
.bitfield
.acc
)
1644 t1
.bitfield
.reg8
= 1;
1645 t1
.bitfield
.reg16
= 1;
1646 t1
.bitfield
.reg32
= 1;
1647 t1
.bitfield
.reg64
= 1;
1650 return (!(t0
.bitfield
.reg8
& t1
.bitfield
.reg8
)
1651 && !(t0
.bitfield
.reg16
& t1
.bitfield
.reg16
)
1652 && !(t0
.bitfield
.reg32
& t1
.bitfield
.reg32
)
1653 && !(t0
.bitfield
.reg64
& t1
.bitfield
.reg64
));
1656 static INLINE
unsigned int
1657 mode_from_disp_size (i386_operand_type t
)
1659 if (t
.bitfield
.disp8
)
1661 else if (t
.bitfield
.disp16
1662 || t
.bitfield
.disp32
1663 || t
.bitfield
.disp32s
)
1670 fits_in_signed_byte (offsetT num
)
1672 return (num
>= -128) && (num
<= 127);
1676 fits_in_unsigned_byte (offsetT num
)
1678 return (num
& 0xff) == num
;
1682 fits_in_unsigned_word (offsetT num
)
1684 return (num
& 0xffff) == num
;
1688 fits_in_signed_word (offsetT num
)
1690 return (-32768 <= num
) && (num
<= 32767);
1694 fits_in_signed_long (offsetT num ATTRIBUTE_UNUSED
)
1699 return (!(((offsetT
) -1 << 31) & num
)
1700 || (((offsetT
) -1 << 31) & num
) == ((offsetT
) -1 << 31));
1702 } /* fits_in_signed_long() */
1705 fits_in_unsigned_long (offsetT num ATTRIBUTE_UNUSED
)
1710 return (num
& (((offsetT
) 2 << 31) - 1)) == num
;
1712 } /* fits_in_unsigned_long() */
1714 static i386_operand_type
1715 smallest_imm_type (offsetT num
)
1717 i386_operand_type t
;
1719 operand_type_set (&t
, 0);
1720 t
.bitfield
.imm64
= 1;
1722 if (cpu_arch_tune
!= PROCESSOR_I486
&& num
== 1)
1724 /* This code is disabled on the 486 because all the Imm1 forms
1725 in the opcode table are slower on the i486. They're the
1726 versions with the implicitly specified single-position
1727 displacement, which has another syntax if you really want to
1729 t
.bitfield
.imm1
= 1;
1730 t
.bitfield
.imm8
= 1;
1731 t
.bitfield
.imm8s
= 1;
1732 t
.bitfield
.imm16
= 1;
1733 t
.bitfield
.imm32
= 1;
1734 t
.bitfield
.imm32s
= 1;
1736 else if (fits_in_signed_byte (num
))
1738 t
.bitfield
.imm8
= 1;
1739 t
.bitfield
.imm8s
= 1;
1740 t
.bitfield
.imm16
= 1;
1741 t
.bitfield
.imm32
= 1;
1742 t
.bitfield
.imm32s
= 1;
1744 else if (fits_in_unsigned_byte (num
))
1746 t
.bitfield
.imm8
= 1;
1747 t
.bitfield
.imm16
= 1;
1748 t
.bitfield
.imm32
= 1;
1749 t
.bitfield
.imm32s
= 1;
1751 else if (fits_in_signed_word (num
) || fits_in_unsigned_word (num
))
1753 t
.bitfield
.imm16
= 1;
1754 t
.bitfield
.imm32
= 1;
1755 t
.bitfield
.imm32s
= 1;
1757 else if (fits_in_signed_long (num
))
1759 t
.bitfield
.imm32
= 1;
1760 t
.bitfield
.imm32s
= 1;
1762 else if (fits_in_unsigned_long (num
))
1763 t
.bitfield
.imm32
= 1;
1769 offset_in_range (offsetT val
, int size
)
1775 case 1: mask
= ((addressT
) 1 << 8) - 1; break;
1776 case 2: mask
= ((addressT
) 1 << 16) - 1; break;
1777 case 4: mask
= ((addressT
) 2 << 31) - 1; break;
1779 case 8: mask
= ((addressT
) 2 << 63) - 1; break;
1785 /* If BFD64, sign extend val for 32bit address mode. */
1786 if (flag_code
!= CODE_64BIT
1787 || i
.prefix
[ADDR_PREFIX
])
1788 if ((val
& ~(((addressT
) 2 << 31) - 1)) == 0)
1789 val
= (val
^ ((addressT
) 1 << 31)) - ((addressT
) 1 << 31);
1792 if ((val
& ~mask
) != 0 && (val
& ~mask
) != ~mask
)
1794 char buf1
[40], buf2
[40];
1796 sprint_value (buf1
, val
);
1797 sprint_value (buf2
, val
& mask
);
1798 as_warn (_("%s shortened to %s"), buf1
, buf2
);
1812 a. PREFIX_EXIST if attempting to add a prefix where one from the
1813 same class already exists.
1814 b. PREFIX_LOCK if lock prefix is added.
1815 c. PREFIX_REP if rep/repne prefix is added.
1816 d. PREFIX_OTHER if other prefix is added.
1819 static enum PREFIX_GROUP
1820 add_prefix (unsigned int prefix
)
1822 enum PREFIX_GROUP ret
= PREFIX_OTHER
;
1825 if (prefix
>= REX_OPCODE
&& prefix
< REX_OPCODE
+ 16
1826 && flag_code
== CODE_64BIT
)
1828 if ((i
.prefix
[REX_PREFIX
] & prefix
& REX_W
)
1829 || ((i
.prefix
[REX_PREFIX
] & (REX_R
| REX_X
| REX_B
))
1830 && (prefix
& (REX_R
| REX_X
| REX_B
))))
1841 case CS_PREFIX_OPCODE
:
1842 case DS_PREFIX_OPCODE
:
1843 case ES_PREFIX_OPCODE
:
1844 case FS_PREFIX_OPCODE
:
1845 case GS_PREFIX_OPCODE
:
1846 case SS_PREFIX_OPCODE
:
1850 case REPNE_PREFIX_OPCODE
:
1851 case REPE_PREFIX_OPCODE
:
1856 case LOCK_PREFIX_OPCODE
:
1865 case ADDR_PREFIX_OPCODE
:
1869 case DATA_PREFIX_OPCODE
:
1873 if (i
.prefix
[q
] != 0)
1881 i
.prefix
[q
] |= prefix
;
1884 as_bad (_("same type of prefix used twice"));
1890 set_code_flag (int value
)
1892 flag_code
= (enum flag_code
) value
;
1893 if (flag_code
== CODE_64BIT
)
1895 cpu_arch_flags
.bitfield
.cpu64
= 1;
1896 cpu_arch_flags
.bitfield
.cpuno64
= 0;
1900 cpu_arch_flags
.bitfield
.cpu64
= 0;
1901 cpu_arch_flags
.bitfield
.cpuno64
= 1;
1903 if (value
== CODE_64BIT
&& !cpu_arch_flags
.bitfield
.cpulm
)
1905 as_bad (_("64bit mode not supported on this CPU."));
1907 if (value
== CODE_32BIT
&& !cpu_arch_flags
.bitfield
.cpui386
)
1909 as_bad (_("32bit mode not supported on this CPU."));
1911 stackop_size
= '\0';
1915 set_16bit_gcc_code_flag (int new_code_flag
)
1917 flag_code
= (enum flag_code
) new_code_flag
;
1918 if (flag_code
!= CODE_16BIT
)
1920 cpu_arch_flags
.bitfield
.cpu64
= 0;
1921 cpu_arch_flags
.bitfield
.cpuno64
= 1;
1922 stackop_size
= LONG_MNEM_SUFFIX
;
1926 set_intel_syntax (int syntax_flag
)
1928 /* Find out if register prefixing is specified. */
1929 int ask_naked_reg
= 0;
1932 if (!is_end_of_line
[(unsigned char) *input_line_pointer
])
1934 char *string
= input_line_pointer
;
1935 int e
= get_symbol_end ();
1937 if (strcmp (string
, "prefix") == 0)
1939 else if (strcmp (string
, "noprefix") == 0)
1942 as_bad (_("bad argument to syntax directive."));
1943 *input_line_pointer
= e
;
1945 demand_empty_rest_of_line ();
1947 intel_syntax
= syntax_flag
;
1949 if (ask_naked_reg
== 0)
1950 allow_naked_reg
= (intel_syntax
1951 && (bfd_get_symbol_leading_char (stdoutput
) != '\0'));
1953 allow_naked_reg
= (ask_naked_reg
< 0);
1955 expr_set_rank (O_full_ptr
, syntax_flag
? 10 : 0);
1957 identifier_chars
['%'] = intel_syntax
&& allow_naked_reg
? '%' : 0;
1958 identifier_chars
['$'] = intel_syntax
? '$' : 0;
1959 register_prefix
= allow_naked_reg
? "" : "%";
1963 set_intel_mnemonic (int mnemonic_flag
)
1965 intel_mnemonic
= mnemonic_flag
;
1969 set_allow_index_reg (int flag
)
1971 allow_index_reg
= flag
;
1975 set_sse_check (int dummy ATTRIBUTE_UNUSED
)
1979 if (!is_end_of_line
[(unsigned char) *input_line_pointer
])
1981 char *string
= input_line_pointer
;
1982 int e
= get_symbol_end ();
1984 if (strcmp (string
, "none") == 0)
1985 sse_check
= sse_check_none
;
1986 else if (strcmp (string
, "warning") == 0)
1987 sse_check
= sse_check_warning
;
1988 else if (strcmp (string
, "error") == 0)
1989 sse_check
= sse_check_error
;
1991 as_bad (_("bad argument to sse_check directive."));
1992 *input_line_pointer
= e
;
1995 as_bad (_("missing argument for sse_check directive"));
1997 demand_empty_rest_of_line ();
2001 check_cpu_arch_compatible (const char *name ATTRIBUTE_UNUSED
,
2002 i386_cpu_flags new_flag ATTRIBUTE_UNUSED
)
2004 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
2005 static const char *arch
;
2007 /* Intel LIOM is only supported on ELF. */
2013 /* Use cpu_arch_name if it is set in md_parse_option. Otherwise
2014 use default_arch. */
2015 arch
= cpu_arch_name
;
2017 arch
= default_arch
;
2020 /* If we are targeting Intel L1OM, we must enable it. */
2021 if (get_elf_backend_data (stdoutput
)->elf_machine_code
!= EM_L1OM
2022 || new_flag
.bitfield
.cpul1om
)
2025 as_bad (_("`%s' is not supported on `%s'"), name
, arch
);
2030 set_cpu_arch (int dummy ATTRIBUTE_UNUSED
)
2034 if (!is_end_of_line
[(unsigned char) *input_line_pointer
])
2036 char *string
= input_line_pointer
;
2037 int e
= get_symbol_end ();
2039 i386_cpu_flags flags
;
2041 for (j
= 0; j
< ARRAY_SIZE (cpu_arch
); j
++)
2043 if (strcmp (string
, cpu_arch
[j
].name
) == 0)
2045 check_cpu_arch_compatible (string
, cpu_arch
[j
].flags
);
2049 cpu_arch_name
= cpu_arch
[j
].name
;
2050 cpu_sub_arch_name
= NULL
;
2051 cpu_arch_flags
= cpu_arch
[j
].flags
;
2052 if (flag_code
== CODE_64BIT
)
2054 cpu_arch_flags
.bitfield
.cpu64
= 1;
2055 cpu_arch_flags
.bitfield
.cpuno64
= 0;
2059 cpu_arch_flags
.bitfield
.cpu64
= 0;
2060 cpu_arch_flags
.bitfield
.cpuno64
= 1;
2062 cpu_arch_isa
= cpu_arch
[j
].type
;
2063 cpu_arch_isa_flags
= cpu_arch
[j
].flags
;
2064 if (!cpu_arch_tune_set
)
2066 cpu_arch_tune
= cpu_arch_isa
;
2067 cpu_arch_tune_flags
= cpu_arch_isa_flags
;
2072 if (strncmp (string
+ 1, "no", 2))
2073 flags
= cpu_flags_or (cpu_arch_flags
,
2076 flags
= cpu_flags_and_not (cpu_arch_flags
,
2078 if (!cpu_flags_equal (&flags
, &cpu_arch_flags
))
2080 if (cpu_sub_arch_name
)
2082 char *name
= cpu_sub_arch_name
;
2083 cpu_sub_arch_name
= concat (name
,
2085 (const char *) NULL
);
2089 cpu_sub_arch_name
= xstrdup (cpu_arch
[j
].name
);
2090 cpu_arch_flags
= flags
;
2092 *input_line_pointer
= e
;
2093 demand_empty_rest_of_line ();
2097 if (j
>= ARRAY_SIZE (cpu_arch
))
2098 as_bad (_("no such architecture: `%s'"), string
);
2100 *input_line_pointer
= e
;
2103 as_bad (_("missing cpu architecture"));
2105 no_cond_jump_promotion
= 0;
2106 if (*input_line_pointer
== ','
2107 && !is_end_of_line
[(unsigned char) input_line_pointer
[1]])
2109 char *string
= ++input_line_pointer
;
2110 int e
= get_symbol_end ();
2112 if (strcmp (string
, "nojumps") == 0)
2113 no_cond_jump_promotion
= 1;
2114 else if (strcmp (string
, "jumps") == 0)
2117 as_bad (_("no such architecture modifier: `%s'"), string
);
2119 *input_line_pointer
= e
;
2122 demand_empty_rest_of_line ();
2125 enum bfd_architecture
2128 if (cpu_arch_isa
== PROCESSOR_L1OM
)
2130 if (OUTPUT_FLAVOR
!= bfd_target_elf_flavour
2131 || flag_code
!= CODE_64BIT
)
2132 as_fatal (_("Intel L1OM is 64bit ELF only"));
2133 return bfd_arch_l1om
;
2136 return bfd_arch_i386
;
2142 if (!strcmp (default_arch
, "x86_64"))
2144 if (cpu_arch_isa
== PROCESSOR_L1OM
)
2146 if (OUTPUT_FLAVOR
!= bfd_target_elf_flavour
)
2147 as_fatal (_("Intel L1OM is 64bit ELF only"));
2148 return bfd_mach_l1om
;
2151 return bfd_mach_x86_64
;
2153 else if (!strcmp (default_arch
, "i386"))
2154 return bfd_mach_i386_i386
;
2156 as_fatal (_("Unknown architecture"));
2162 const char *hash_err
;
2164 /* Initialize op_hash hash table. */
2165 op_hash
= hash_new ();
2168 const insn_template
*optab
;
2169 templates
*core_optab
;
2171 /* Setup for loop. */
2173 core_optab
= (templates
*) xmalloc (sizeof (templates
));
2174 core_optab
->start
= optab
;
2179 if (optab
->name
== NULL
2180 || strcmp (optab
->name
, (optab
- 1)->name
) != 0)
2182 /* different name --> ship out current template list;
2183 add to hash table; & begin anew. */
2184 core_optab
->end
= optab
;
2185 hash_err
= hash_insert (op_hash
,
2187 (void *) core_optab
);
2190 as_fatal (_("Internal Error: Can't hash %s: %s"),
2194 if (optab
->name
== NULL
)
2196 core_optab
= (templates
*) xmalloc (sizeof (templates
));
2197 core_optab
->start
= optab
;
2202 /* Initialize reg_hash hash table. */
2203 reg_hash
= hash_new ();
2205 const reg_entry
*regtab
;
2206 unsigned int regtab_size
= i386_regtab_size
;
2208 for (regtab
= i386_regtab
; regtab_size
--; regtab
++)
2210 hash_err
= hash_insert (reg_hash
, regtab
->reg_name
, (void *) regtab
);
2212 as_fatal (_("Internal Error: Can't hash %s: %s"),
2218 /* Fill in lexical tables: mnemonic_chars, operand_chars. */
2223 for (c
= 0; c
< 256; c
++)
2228 mnemonic_chars
[c
] = c
;
2229 register_chars
[c
] = c
;
2230 operand_chars
[c
] = c
;
2232 else if (ISLOWER (c
))
2234 mnemonic_chars
[c
] = c
;
2235 register_chars
[c
] = c
;
2236 operand_chars
[c
] = c
;
2238 else if (ISUPPER (c
))
2240 mnemonic_chars
[c
] = TOLOWER (c
);
2241 register_chars
[c
] = mnemonic_chars
[c
];
2242 operand_chars
[c
] = c
;
2245 if (ISALPHA (c
) || ISDIGIT (c
))
2246 identifier_chars
[c
] = c
;
2249 identifier_chars
[c
] = c
;
2250 operand_chars
[c
] = c
;
2255 identifier_chars
['@'] = '@';
2258 identifier_chars
['?'] = '?';
2259 operand_chars
['?'] = '?';
2261 digit_chars
['-'] = '-';
2262 mnemonic_chars
['_'] = '_';
2263 mnemonic_chars
['-'] = '-';
2264 mnemonic_chars
['.'] = '.';
2265 identifier_chars
['_'] = '_';
2266 identifier_chars
['.'] = '.';
2268 for (p
= operand_special_chars
; *p
!= '\0'; p
++)
2269 operand_chars
[(unsigned char) *p
] = *p
;
2272 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
2275 record_alignment (text_section
, 2);
2276 record_alignment (data_section
, 2);
2277 record_alignment (bss_section
, 2);
2281 if (flag_code
== CODE_64BIT
)
2283 x86_dwarf2_return_column
= 16;
2284 x86_cie_data_alignment
= -8;
2288 x86_dwarf2_return_column
= 8;
2289 x86_cie_data_alignment
= -4;
2294 i386_print_statistics (FILE *file
)
2296 hash_print_statistics (file
, "i386 opcode", op_hash
);
2297 hash_print_statistics (file
, "i386 register", reg_hash
);
2302 /* Debugging routines for md_assemble. */
2303 static void pte (insn_template
*);
2304 static void pt (i386_operand_type
);
2305 static void pe (expressionS
*);
2306 static void ps (symbolS
*);
2309 pi (char *line
, i386_insn
*x
)
2313 fprintf (stdout
, "%s: template ", line
);
2315 fprintf (stdout
, " address: base %s index %s scale %x\n",
2316 x
->base_reg
? x
->base_reg
->reg_name
: "none",
2317 x
->index_reg
? x
->index_reg
->reg_name
: "none",
2318 x
->log2_scale_factor
);
2319 fprintf (stdout
, " modrm: mode %x reg %x reg/mem %x\n",
2320 x
->rm
.mode
, x
->rm
.reg
, x
->rm
.regmem
);
2321 fprintf (stdout
, " sib: base %x index %x scale %x\n",
2322 x
->sib
.base
, x
->sib
.index
, x
->sib
.scale
);
2323 fprintf (stdout
, " rex: 64bit %x extX %x extY %x extZ %x\n",
2324 (x
->rex
& REX_W
) != 0,
2325 (x
->rex
& REX_R
) != 0,
2326 (x
->rex
& REX_X
) != 0,
2327 (x
->rex
& REX_B
) != 0);
2328 for (i
= 0; i
< x
->operands
; i
++)
2330 fprintf (stdout
, " #%d: ", i
+ 1);
2332 fprintf (stdout
, "\n");
2333 if (x
->types
[i
].bitfield
.reg8
2334 || x
->types
[i
].bitfield
.reg16
2335 || x
->types
[i
].bitfield
.reg32
2336 || x
->types
[i
].bitfield
.reg64
2337 || x
->types
[i
].bitfield
.regmmx
2338 || x
->types
[i
].bitfield
.regxmm
2339 || x
->types
[i
].bitfield
.regymm
2340 || x
->types
[i
].bitfield
.sreg2
2341 || x
->types
[i
].bitfield
.sreg3
2342 || x
->types
[i
].bitfield
.control
2343 || x
->types
[i
].bitfield
.debug
2344 || x
->types
[i
].bitfield
.test
)
2345 fprintf (stdout
, "%s\n", x
->op
[i
].regs
->reg_name
);
2346 if (operand_type_check (x
->types
[i
], imm
))
2348 if (operand_type_check (x
->types
[i
], disp
))
2349 pe (x
->op
[i
].disps
);
2354 pte (insn_template
*t
)
2357 fprintf (stdout
, " %d operands ", t
->operands
);
2358 fprintf (stdout
, "opcode %x ", t
->base_opcode
);
2359 if (t
->extension_opcode
!= None
)
2360 fprintf (stdout
, "ext %x ", t
->extension_opcode
);
2361 if (t
->opcode_modifier
.d
)
2362 fprintf (stdout
, "D");
2363 if (t
->opcode_modifier
.w
)
2364 fprintf (stdout
, "W");
2365 fprintf (stdout
, "\n");
2366 for (i
= 0; i
< t
->operands
; i
++)
2368 fprintf (stdout
, " #%d type ", i
+ 1);
2369 pt (t
->operand_types
[i
]);
2370 fprintf (stdout
, "\n");
2377 fprintf (stdout
, " operation %d\n", e
->X_op
);
2378 fprintf (stdout
, " add_number %ld (%lx)\n",
2379 (long) e
->X_add_number
, (long) e
->X_add_number
);
2380 if (e
->X_add_symbol
)
2382 fprintf (stdout
, " add_symbol ");
2383 ps (e
->X_add_symbol
);
2384 fprintf (stdout
, "\n");
2388 fprintf (stdout
, " op_symbol ");
2389 ps (e
->X_op_symbol
);
2390 fprintf (stdout
, "\n");
2397 fprintf (stdout
, "%s type %s%s",
2399 S_IS_EXTERNAL (s
) ? "EXTERNAL " : "",
2400 segment_name (S_GET_SEGMENT (s
)));
2403 static struct type_name
2405 i386_operand_type mask
;
2408 const type_names
[] =
2410 { OPERAND_TYPE_REG8
, "r8" },
2411 { OPERAND_TYPE_REG16
, "r16" },
2412 { OPERAND_TYPE_REG32
, "r32" },
2413 { OPERAND_TYPE_REG64
, "r64" },
2414 { OPERAND_TYPE_IMM8
, "i8" },
2415 { OPERAND_TYPE_IMM8
, "i8s" },
2416 { OPERAND_TYPE_IMM16
, "i16" },
2417 { OPERAND_TYPE_IMM32
, "i32" },
2418 { OPERAND_TYPE_IMM32S
, "i32s" },
2419 { OPERAND_TYPE_IMM64
, "i64" },
2420 { OPERAND_TYPE_IMM1
, "i1" },
2421 { OPERAND_TYPE_BASEINDEX
, "BaseIndex" },
2422 { OPERAND_TYPE_DISP8
, "d8" },
2423 { OPERAND_TYPE_DISP16
, "d16" },
2424 { OPERAND_TYPE_DISP32
, "d32" },
2425 { OPERAND_TYPE_DISP32S
, "d32s" },
2426 { OPERAND_TYPE_DISP64
, "d64" },
2427 { OPERAND_TYPE_INOUTPORTREG
, "InOutPortReg" },
2428 { OPERAND_TYPE_SHIFTCOUNT
, "ShiftCount" },
2429 { OPERAND_TYPE_CONTROL
, "control reg" },
2430 { OPERAND_TYPE_TEST
, "test reg" },
2431 { OPERAND_TYPE_DEBUG
, "debug reg" },
2432 { OPERAND_TYPE_FLOATREG
, "FReg" },
2433 { OPERAND_TYPE_FLOATACC
, "FAcc" },
2434 { OPERAND_TYPE_SREG2
, "SReg2" },
2435 { OPERAND_TYPE_SREG3
, "SReg3" },
2436 { OPERAND_TYPE_ACC
, "Acc" },
2437 { OPERAND_TYPE_JUMPABSOLUTE
, "Jump Absolute" },
2438 { OPERAND_TYPE_REGMMX
, "rMMX" },
2439 { OPERAND_TYPE_REGXMM
, "rXMM" },
2440 { OPERAND_TYPE_REGYMM
, "rYMM" },
2441 { OPERAND_TYPE_ESSEG
, "es" },
2445 pt (i386_operand_type t
)
2448 i386_operand_type a
;
2450 for (j
= 0; j
< ARRAY_SIZE (type_names
); j
++)
2452 a
= operand_type_and (t
, type_names
[j
].mask
);
2453 if (!operand_type_all_zero (&a
))
2454 fprintf (stdout
, "%s, ", type_names
[j
].name
);
2459 #endif /* DEBUG386 */
2461 static bfd_reloc_code_real_type
2462 reloc (unsigned int size
,
2465 bfd_reloc_code_real_type other
)
2467 if (other
!= NO_RELOC
)
2469 reloc_howto_type
*rel
;
2474 case BFD_RELOC_X86_64_GOT32
:
2475 return BFD_RELOC_X86_64_GOT64
;
2477 case BFD_RELOC_X86_64_PLTOFF64
:
2478 return BFD_RELOC_X86_64_PLTOFF64
;
2480 case BFD_RELOC_X86_64_GOTPC32
:
2481 other
= BFD_RELOC_X86_64_GOTPC64
;
2483 case BFD_RELOC_X86_64_GOTPCREL
:
2484 other
= BFD_RELOC_X86_64_GOTPCREL64
;
2486 case BFD_RELOC_X86_64_TPOFF32
:
2487 other
= BFD_RELOC_X86_64_TPOFF64
;
2489 case BFD_RELOC_X86_64_DTPOFF32
:
2490 other
= BFD_RELOC_X86_64_DTPOFF64
;
2496 /* Sign-checking 4-byte relocations in 16-/32-bit code is pointless. */
2497 if (size
== 4 && flag_code
!= CODE_64BIT
)
2500 rel
= bfd_reloc_type_lookup (stdoutput
, other
);
2502 as_bad (_("unknown relocation (%u)"), other
);
2503 else if (size
!= bfd_get_reloc_size (rel
))
2504 as_bad (_("%u-byte relocation cannot be applied to %u-byte field"),
2505 bfd_get_reloc_size (rel
),
2507 else if (pcrel
&& !rel
->pc_relative
)
2508 as_bad (_("non-pc-relative relocation for pc-relative field"));
2509 else if ((rel
->complain_on_overflow
== complain_overflow_signed
2511 || (rel
->complain_on_overflow
== complain_overflow_unsigned
2513 as_bad (_("relocated field and relocation type differ in signedness"));
2522 as_bad (_("there are no unsigned pc-relative relocations"));
2525 case 1: return BFD_RELOC_8_PCREL
;
2526 case 2: return BFD_RELOC_16_PCREL
;
2527 case 4: return BFD_RELOC_32_PCREL
;
2528 case 8: return BFD_RELOC_64_PCREL
;
2530 as_bad (_("cannot do %u byte pc-relative relocation"), size
);
2537 case 4: return BFD_RELOC_X86_64_32S
;
2542 case 1: return BFD_RELOC_8
;
2543 case 2: return BFD_RELOC_16
;
2544 case 4: return BFD_RELOC_32
;
2545 case 8: return BFD_RELOC_64
;
2547 as_bad (_("cannot do %s %u byte relocation"),
2548 sign
> 0 ? "signed" : "unsigned", size
);
2554 /* Here we decide which fixups can be adjusted to make them relative to
2555 the beginning of the section instead of the symbol. Basically we need
2556 to make sure that the dynamic relocations are done correctly, so in
2557 some cases we force the original symbol to be used. */
2560 tc_i386_fix_adjustable (fixS
*fixP ATTRIBUTE_UNUSED
)
2562 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
2566 /* Don't adjust pc-relative references to merge sections in 64-bit
2568 if (use_rela_relocations
2569 && (S_GET_SEGMENT (fixP
->fx_addsy
)->flags
& SEC_MERGE
) != 0
2573 /* The x86_64 GOTPCREL are represented as 32bit PCrel relocations
2574 and changed later by validate_fix. */
2575 if (GOT_symbol
&& fixP
->fx_subsy
== GOT_symbol
2576 && fixP
->fx_r_type
== BFD_RELOC_32_PCREL
)
2579 /* adjust_reloc_syms doesn't know about the GOT. */
2580 if (fixP
->fx_r_type
== BFD_RELOC_386_GOTOFF
2581 || fixP
->fx_r_type
== BFD_RELOC_386_PLT32
2582 || fixP
->fx_r_type
== BFD_RELOC_386_GOT32
2583 || fixP
->fx_r_type
== BFD_RELOC_386_TLS_GD
2584 || fixP
->fx_r_type
== BFD_RELOC_386_TLS_LDM
2585 || fixP
->fx_r_type
== BFD_RELOC_386_TLS_LDO_32
2586 || fixP
->fx_r_type
== BFD_RELOC_386_TLS_IE_32
2587 || fixP
->fx_r_type
== BFD_RELOC_386_TLS_IE
2588 || fixP
->fx_r_type
== BFD_RELOC_386_TLS_GOTIE
2589 || fixP
->fx_r_type
== BFD_RELOC_386_TLS_LE_32
2590 || fixP
->fx_r_type
== BFD_RELOC_386_TLS_LE
2591 || fixP
->fx_r_type
== BFD_RELOC_386_TLS_GOTDESC
2592 || fixP
->fx_r_type
== BFD_RELOC_386_TLS_DESC_CALL
2593 || fixP
->fx_r_type
== BFD_RELOC_X86_64_PLT32
2594 || fixP
->fx_r_type
== BFD_RELOC_X86_64_GOT32
2595 || fixP
->fx_r_type
== BFD_RELOC_X86_64_GOTPCREL
2596 || fixP
->fx_r_type
== BFD_RELOC_X86_64_TLSGD
2597 || fixP
->fx_r_type
== BFD_RELOC_X86_64_TLSLD
2598 || fixP
->fx_r_type
== BFD_RELOC_X86_64_DTPOFF32
2599 || fixP
->fx_r_type
== BFD_RELOC_X86_64_DTPOFF64
2600 || fixP
->fx_r_type
== BFD_RELOC_X86_64_GOTTPOFF
2601 || fixP
->fx_r_type
== BFD_RELOC_X86_64_TPOFF32
2602 || fixP
->fx_r_type
== BFD_RELOC_X86_64_TPOFF64
2603 || fixP
->fx_r_type
== BFD_RELOC_X86_64_GOTOFF64
2604 || fixP
->fx_r_type
== BFD_RELOC_X86_64_GOTPC32_TLSDESC
2605 || fixP
->fx_r_type
== BFD_RELOC_X86_64_TLSDESC_CALL
2606 || fixP
->fx_r_type
== BFD_RELOC_VTABLE_INHERIT
2607 || fixP
->fx_r_type
== BFD_RELOC_VTABLE_ENTRY
)
2614 intel_float_operand (const char *mnemonic
)
2616 /* Note that the value returned is meaningful only for opcodes with (memory)
2617 operands, hence the code here is free to improperly handle opcodes that
2618 have no operands (for better performance and smaller code). */
2620 if (mnemonic
[0] != 'f')
2621 return 0; /* non-math */
2623 switch (mnemonic
[1])
2625 /* fclex, fdecstp, fdisi, femms, feni, fincstp, finit, fsetpm, and
2626 the fs segment override prefix not currently handled because no
2627 call path can make opcodes without operands get here */
2629 return 2 /* integer op */;
2631 if (mnemonic
[2] == 'd' && (mnemonic
[3] == 'c' || mnemonic
[3] == 'e'))
2632 return 3; /* fldcw/fldenv */
2635 if (mnemonic
[2] != 'o' /* fnop */)
2636 return 3; /* non-waiting control op */
2639 if (mnemonic
[2] == 's')
2640 return 3; /* frstor/frstpm */
2643 if (mnemonic
[2] == 'a')
2644 return 3; /* fsave */
2645 if (mnemonic
[2] == 't')
2647 switch (mnemonic
[3])
2649 case 'c': /* fstcw */
2650 case 'd': /* fstdw */
2651 case 'e': /* fstenv */
2652 case 's': /* fsts[gw] */
2658 if (mnemonic
[2] == 'r' || mnemonic
[2] == 's')
2659 return 0; /* fxsave/fxrstor are not really math ops */
2666 /* Build the VEX prefix. */
2669 build_vex_prefix (const insn_template
*t
)
2671 unsigned int register_specifier
;
2672 unsigned int implied_prefix
;
2673 unsigned int vector_length
;
2675 /* Check register specifier. */
2676 if (i
.vex
.register_specifier
)
2678 register_specifier
= i
.vex
.register_specifier
->reg_num
;
2679 if ((i
.vex
.register_specifier
->reg_flags
& RegRex
))
2680 register_specifier
+= 8;
2681 register_specifier
= ~register_specifier
& 0xf;
2684 register_specifier
= 0xf;
2686 /* Use 2-byte VEX prefix by swappping destination and source
2689 && i
.operands
== i
.reg_operands
2690 && i
.tm
.opcode_modifier
.vexopcode
== VEX0F
2691 && i
.tm
.opcode_modifier
.s
2694 unsigned int xchg
= i
.operands
- 1;
2695 union i386_op temp_op
;
2696 i386_operand_type temp_type
;
2698 temp_type
= i
.types
[xchg
];
2699 i
.types
[xchg
] = i
.types
[0];
2700 i
.types
[0] = temp_type
;
2701 temp_op
= i
.op
[xchg
];
2702 i
.op
[xchg
] = i
.op
[0];
2705 gas_assert (i
.rm
.mode
== 3);
2709 i
.rm
.regmem
= i
.rm
.reg
;
2712 /* Use the next insn. */
2716 if (i
.tm
.opcode_modifier
.vex
== VEXScalar
)
2717 vector_length
= avxscalar
;
2719 vector_length
= i
.tm
.opcode_modifier
.vex
== VEX256
? 1 : 0;
2721 switch ((i
.tm
.base_opcode
>> 8) & 0xff)
2726 case DATA_PREFIX_OPCODE
:
2729 case REPE_PREFIX_OPCODE
:
2732 case REPNE_PREFIX_OPCODE
:
2739 /* Use 2-byte VEX prefix if possible. */
2740 if (i
.tm
.opcode_modifier
.vexopcode
== VEX0F
2741 && (i
.rex
& (REX_W
| REX_X
| REX_B
)) == 0)
2743 /* 2-byte VEX prefix. */
2747 i
.vex
.bytes
[0] = 0xc5;
2749 /* Check the REX.R bit. */
2750 r
= (i
.rex
& REX_R
) ? 0 : 1;
2751 i
.vex
.bytes
[1] = (r
<< 7
2752 | register_specifier
<< 3
2753 | vector_length
<< 2
2758 /* 3-byte VEX prefix. */
2763 switch (i
.tm
.opcode_modifier
.vexopcode
)
2767 i
.vex
.bytes
[0] = 0xc4;
2771 i
.vex
.bytes
[0] = 0xc4;
2775 i
.vex
.bytes
[0] = 0xc4;
2779 i
.vex
.bytes
[0] = 0x8f;
2783 i
.vex
.bytes
[0] = 0x8f;
2787 i
.vex
.bytes
[0] = 0x8f;
2793 /* The high 3 bits of the second VEX byte are 1's compliment
2794 of RXB bits from REX. */
2795 i
.vex
.bytes
[1] = (~i
.rex
& 0x7) << 5 | m
;
2797 /* Check the REX.W bit. */
2798 w
= (i
.rex
& REX_W
) ? 1 : 0;
2799 if (i
.tm
.opcode_modifier
.vexw
)
2804 if (i
.tm
.opcode_modifier
.vexw
== VEXW1
)
2808 i
.vex
.bytes
[2] = (w
<< 7
2809 | register_specifier
<< 3
2810 | vector_length
<< 2
2816 process_immext (void)
2820 if (i
.tm
.cpu_flags
.bitfield
.cpusse3
&& i
.operands
> 0)
2822 /* SSE3 Instructions have the fixed operands with an opcode
2823 suffix which is coded in the same place as an 8-bit immediate
2824 field would be. Here we check those operands and remove them
2828 for (x
= 0; x
< i
.operands
; x
++)
2829 if (i
.op
[x
].regs
->reg_num
!= x
)
2830 as_bad (_("can't use register '%s%s' as operand %d in '%s'."),
2831 register_prefix
, i
.op
[x
].regs
->reg_name
, x
+ 1,
2837 /* These AMD 3DNow! and SSE2 instructions have an opcode suffix
2838 which is coded in the same place as an 8-bit immediate field
2839 would be. Here we fake an 8-bit immediate operand from the
2840 opcode suffix stored in tm.extension_opcode.
2842 AVX instructions also use this encoding, for some of
2843 3 argument instructions. */
2845 gas_assert (i
.imm_operands
== 0
2847 || (i
.tm
.opcode_modifier
.vex
2848 && i
.operands
<= 4)));
2850 exp
= &im_expressions
[i
.imm_operands
++];
2851 i
.op
[i
.operands
].imms
= exp
;
2852 i
.types
[i
.operands
] = imm8
;
2854 exp
->X_op
= O_constant
;
2855 exp
->X_add_number
= i
.tm
.extension_opcode
;
2856 i
.tm
.extension_opcode
= None
;
2859 /* This is the guts of the machine-dependent assembler. LINE points to a
2860 machine dependent instruction. This function is supposed to emit
2861 the frags/bytes it assembles to. */
2864 md_assemble (char *line
)
2867 char mnemonic
[MAX_MNEM_SIZE
];
2868 const insn_template
*t
;
2870 /* Initialize globals. */
2871 memset (&i
, '\0', sizeof (i
));
2872 for (j
= 0; j
< MAX_OPERANDS
; j
++)
2873 i
.reloc
[j
] = NO_RELOC
;
2874 memset (disp_expressions
, '\0', sizeof (disp_expressions
));
2875 memset (im_expressions
, '\0', sizeof (im_expressions
));
2876 save_stack_p
= save_stack
;
2878 /* First parse an instruction mnemonic & call i386_operand for the operands.
2879 We assume that the scrubber has arranged it so that line[0] is the valid
2880 start of a (possibly prefixed) mnemonic. */
2882 line
= parse_insn (line
, mnemonic
);
2886 line
= parse_operands (line
, mnemonic
);
2891 /* Now we've parsed the mnemonic into a set of templates, and have the
2892 operands at hand. */
2894 /* All intel opcodes have reversed operands except for "bound" and
2895 "enter". We also don't reverse intersegment "jmp" and "call"
2896 instructions with 2 immediate operands so that the immediate segment
2897 precedes the offset, as it does when in AT&T mode. */
2900 && (strcmp (mnemonic
, "bound") != 0)
2901 && (strcmp (mnemonic
, "invlpga") != 0)
2902 && !(operand_type_check (i
.types
[0], imm
)
2903 && operand_type_check (i
.types
[1], imm
)))
2906 /* The order of the immediates should be reversed
2907 for 2 immediates extrq and insertq instructions */
2908 if (i
.imm_operands
== 2
2909 && (strcmp (mnemonic
, "extrq") == 0
2910 || strcmp (mnemonic
, "insertq") == 0))
2911 swap_2_operands (0, 1);
2916 /* Don't optimize displacement for movabs since it only takes 64bit
2919 && (flag_code
!= CODE_64BIT
2920 || strcmp (mnemonic
, "movabs") != 0))
2923 /* Next, we find a template that matches the given insn,
2924 making sure the overlap of the given operands types is consistent
2925 with the template operand types. */
2927 if (!(t
= match_template ()))
2930 if (sse_check
!= sse_check_none
2931 && !i
.tm
.opcode_modifier
.noavx
2932 && (i
.tm
.cpu_flags
.bitfield
.cpusse
2933 || i
.tm
.cpu_flags
.bitfield
.cpusse2
2934 || i
.tm
.cpu_flags
.bitfield
.cpusse3
2935 || i
.tm
.cpu_flags
.bitfield
.cpussse3
2936 || i
.tm
.cpu_flags
.bitfield
.cpusse4_1
2937 || i
.tm
.cpu_flags
.bitfield
.cpusse4_2
))
2939 (sse_check
== sse_check_warning
2941 : as_bad
) (_("SSE instruction `%s' is used"), i
.tm
.name
);
2944 /* Zap movzx and movsx suffix. The suffix has been set from
2945 "word ptr" or "byte ptr" on the source operand in Intel syntax
2946 or extracted from mnemonic in AT&T syntax. But we'll use
2947 the destination register to choose the suffix for encoding. */
2948 if ((i
.tm
.base_opcode
& ~9) == 0x0fb6)
2950 /* In Intel syntax, there must be a suffix. In AT&T syntax, if
2951 there is no suffix, the default will be byte extension. */
2952 if (i
.reg_operands
!= 2
2955 as_bad (_("ambiguous operand size for `%s'"), i
.tm
.name
);
2960 if (i
.tm
.opcode_modifier
.fwait
)
2961 if (!add_prefix (FWAIT_OPCODE
))
2964 /* Check for lock without a lockable instruction. Destination operand
2965 must be memory unless it is xchg (0x86). */
2966 if (i
.prefix
[LOCK_PREFIX
]
2967 && (!i
.tm
.opcode_modifier
.islockable
2968 || i
.mem_operands
== 0
2969 || (i
.tm
.base_opcode
!= 0x86
2970 && !operand_type_check (i
.types
[i
.operands
- 1], anymem
))))
2972 as_bad (_("expecting lockable instruction after `lock'"));
2976 /* Check string instruction segment overrides. */
2977 if (i
.tm
.opcode_modifier
.isstring
&& i
.mem_operands
!= 0)
2979 if (!check_string ())
2981 i
.disp_operands
= 0;
2984 if (!process_suffix ())
2987 /* Update operand types. */
2988 for (j
= 0; j
< i
.operands
; j
++)
2989 i
.types
[j
] = operand_type_and (i
.types
[j
], i
.tm
.operand_types
[j
]);
2991 /* Make still unresolved immediate matches conform to size of immediate
2992 given in i.suffix. */
2993 if (!finalize_imm ())
2996 if (i
.types
[0].bitfield
.imm1
)
2997 i
.imm_operands
= 0; /* kludge for shift insns. */
2999 /* We only need to check those implicit registers for instructions
3000 with 3 operands or less. */
3001 if (i
.operands
<= 3)
3002 for (j
= 0; j
< i
.operands
; j
++)
3003 if (i
.types
[j
].bitfield
.inoutportreg
3004 || i
.types
[j
].bitfield
.shiftcount
3005 || i
.types
[j
].bitfield
.acc
3006 || i
.types
[j
].bitfield
.floatacc
)
3009 /* ImmExt should be processed after SSE2AVX. */
3010 if (!i
.tm
.opcode_modifier
.sse2avx
3011 && i
.tm
.opcode_modifier
.immext
)
3014 /* For insns with operands there are more diddles to do to the opcode. */
3017 if (!process_operands ())
3020 else if (!quiet_warnings
&& i
.tm
.opcode_modifier
.ugh
)
3022 /* UnixWare fsub no args is alias for fsubp, fadd -> faddp, etc. */
3023 as_warn (_("translating to `%sp'"), i
.tm
.name
);
3026 if (i
.tm
.opcode_modifier
.vex
)
3027 build_vex_prefix (t
);
3029 /* Handle conversion of 'int $3' --> special int3 insn. XOP or FMA4
3030 instructions may define INT_OPCODE as well, so avoid this corner
3031 case for those instructions that use MODRM. */
3032 if (i
.tm
.base_opcode
== INT_OPCODE
3033 && !i
.tm
.opcode_modifier
.modrm
3034 && i
.op
[0].imms
->X_add_number
== 3)
3036 i
.tm
.base_opcode
= INT3_OPCODE
;
3040 if ((i
.tm
.opcode_modifier
.jump
3041 || i
.tm
.opcode_modifier
.jumpbyte
3042 || i
.tm
.opcode_modifier
.jumpdword
)
3043 && i
.op
[0].disps
->X_op
== O_constant
)
3045 /* Convert "jmp constant" (and "call constant") to a jump (call) to
3046 the absolute address given by the constant. Since ix86 jumps and
3047 calls are pc relative, we need to generate a reloc. */
3048 i
.op
[0].disps
->X_add_symbol
= &abs_symbol
;
3049 i
.op
[0].disps
->X_op
= O_symbol
;
3052 if (i
.tm
.opcode_modifier
.rex64
)
3055 /* For 8 bit registers we need an empty rex prefix. Also if the
3056 instruction already has a prefix, we need to convert old
3057 registers to new ones. */
3059 if ((i
.types
[0].bitfield
.reg8
3060 && (i
.op
[0].regs
->reg_flags
& RegRex64
) != 0)
3061 || (i
.types
[1].bitfield
.reg8
3062 && (i
.op
[1].regs
->reg_flags
& RegRex64
) != 0)
3063 || ((i
.types
[0].bitfield
.reg8
3064 || i
.types
[1].bitfield
.reg8
)
3069 i
.rex
|= REX_OPCODE
;
3070 for (x
= 0; x
< 2; x
++)
3072 /* Look for 8 bit operand that uses old registers. */
3073 if (i
.types
[x
].bitfield
.reg8
3074 && (i
.op
[x
].regs
->reg_flags
& RegRex64
) == 0)
3076 /* In case it is "hi" register, give up. */
3077 if (i
.op
[x
].regs
->reg_num
> 3)
3078 as_bad (_("can't encode register '%s%s' in an "
3079 "instruction requiring REX prefix."),
3080 register_prefix
, i
.op
[x
].regs
->reg_name
);
3082 /* Otherwise it is equivalent to the extended register.
3083 Since the encoding doesn't change this is merely
3084 cosmetic cleanup for debug output. */
3086 i
.op
[x
].regs
= i
.op
[x
].regs
+ 8;
3092 add_prefix (REX_OPCODE
| i
.rex
);
3094 /* We are ready to output the insn. */
3099 parse_insn (char *line
, char *mnemonic
)
3102 char *token_start
= l
;
3105 const insn_template
*t
;
3108 /* Non-zero if we found a prefix only acceptable with string insns. */
3109 const char *expecting_string_instruction
= NULL
;
3114 while ((*mnem_p
= mnemonic_chars
[(unsigned char) *l
]) != 0)
3119 if (mnem_p
>= mnemonic
+ MAX_MNEM_SIZE
)
3121 as_bad (_("no such instruction: `%s'"), token_start
);
3126 if (!is_space_char (*l
)
3127 && *l
!= END_OF_INSN
3129 || (*l
!= PREFIX_SEPARATOR
3132 as_bad (_("invalid character %s in mnemonic"),
3133 output_invalid (*l
));
3136 if (token_start
== l
)
3138 if (!intel_syntax
&& *l
== PREFIX_SEPARATOR
)
3139 as_bad (_("expecting prefix; got nothing"));
3141 as_bad (_("expecting mnemonic; got nothing"));
3145 /* Look up instruction (or prefix) via hash table. */
3146 current_templates
= (const templates
*) hash_find (op_hash
, mnemonic
);
3148 if (*l
!= END_OF_INSN
3149 && (!is_space_char (*l
) || l
[1] != END_OF_INSN
)
3150 && current_templates
3151 && current_templates
->start
->opcode_modifier
.isprefix
)
3153 if (!cpu_flags_check_cpu64 (current_templates
->start
->cpu_flags
))
3155 as_bad ((flag_code
!= CODE_64BIT
3156 ? _("`%s' is only supported in 64-bit mode")
3157 : _("`%s' is not supported in 64-bit mode")),
3158 current_templates
->start
->name
);
3161 /* If we are in 16-bit mode, do not allow addr16 or data16.
3162 Similarly, in 32-bit mode, do not allow addr32 or data32. */
3163 if ((current_templates
->start
->opcode_modifier
.size16
3164 || current_templates
->start
->opcode_modifier
.size32
)
3165 && flag_code
!= CODE_64BIT
3166 && (current_templates
->start
->opcode_modifier
.size32
3167 ^ (flag_code
== CODE_16BIT
)))
3169 as_bad (_("redundant %s prefix"),
3170 current_templates
->start
->name
);
3173 /* Add prefix, checking for repeated prefixes. */
3174 switch (add_prefix (current_templates
->start
->base_opcode
))
3179 expecting_string_instruction
= current_templates
->start
->name
;
3184 /* Skip past PREFIX_SEPARATOR and reset token_start. */
3191 if (!current_templates
)
3193 /* Check if we should swap operand in encoding. */
3194 if (mnem_p
- 2 == dot_p
&& dot_p
[1] == 's')
3200 current_templates
= (const templates
*) hash_find (op_hash
, mnemonic
);
3203 if (!current_templates
)
3206 /* See if we can get a match by trimming off a suffix. */
3209 case WORD_MNEM_SUFFIX
:
3210 if (intel_syntax
&& (intel_float_operand (mnemonic
) & 2))
3211 i
.suffix
= SHORT_MNEM_SUFFIX
;
3213 case BYTE_MNEM_SUFFIX
:
3214 case QWORD_MNEM_SUFFIX
:
3215 i
.suffix
= mnem_p
[-1];
3217 current_templates
= (const templates
*) hash_find (op_hash
,
3220 case SHORT_MNEM_SUFFIX
:
3221 case LONG_MNEM_SUFFIX
:
3224 i
.suffix
= mnem_p
[-1];
3226 current_templates
= (const templates
*) hash_find (op_hash
,
3235 if (intel_float_operand (mnemonic
) == 1)
3236 i
.suffix
= SHORT_MNEM_SUFFIX
;
3238 i
.suffix
= LONG_MNEM_SUFFIX
;
3240 current_templates
= (const templates
*) hash_find (op_hash
,
3245 if (!current_templates
)
3247 as_bad (_("no such instruction: `%s'"), token_start
);
3252 if (current_templates
->start
->opcode_modifier
.jump
3253 || current_templates
->start
->opcode_modifier
.jumpbyte
)
3255 /* Check for a branch hint. We allow ",pt" and ",pn" for
3256 predict taken and predict not taken respectively.
3257 I'm not sure that branch hints actually do anything on loop
3258 and jcxz insns (JumpByte) for current Pentium4 chips. They
3259 may work in the future and it doesn't hurt to accept them
3261 if (l
[0] == ',' && l
[1] == 'p')
3265 if (!add_prefix (DS_PREFIX_OPCODE
))
3269 else if (l
[2] == 'n')
3271 if (!add_prefix (CS_PREFIX_OPCODE
))
3277 /* Any other comma loses. */
3280 as_bad (_("invalid character %s in mnemonic"),
3281 output_invalid (*l
));
3285 /* Check if instruction is supported on specified architecture. */
3287 for (t
= current_templates
->start
; t
< current_templates
->end
; ++t
)
3289 supported
|= cpu_flags_match (t
);
3290 if (supported
== CPU_FLAGS_PERFECT_MATCH
)
3294 if (!(supported
& CPU_FLAGS_64BIT_MATCH
))
3296 as_bad (flag_code
== CODE_64BIT
3297 ? _("`%s' is not supported in 64-bit mode")
3298 : _("`%s' is only supported in 64-bit mode"),
3299 current_templates
->start
->name
);
3302 if (supported
!= CPU_FLAGS_PERFECT_MATCH
)
3304 as_bad (_("`%s' is not supported on `%s%s'"),
3305 current_templates
->start
->name
,
3306 cpu_arch_name
? cpu_arch_name
: default_arch
,
3307 cpu_sub_arch_name
? cpu_sub_arch_name
: "");
3312 if (!cpu_arch_flags
.bitfield
.cpui386
3313 && (flag_code
!= CODE_16BIT
))
3315 as_warn (_("use .code16 to ensure correct addressing mode"));
3318 /* Check for rep/repne without a string instruction. */
3319 if (expecting_string_instruction
)
3321 static templates override
;
3323 for (t
= current_templates
->start
; t
< current_templates
->end
; ++t
)
3324 if (t
->opcode_modifier
.isstring
)
3326 if (t
>= current_templates
->end
)
3328 as_bad (_("expecting string instruction after `%s'"),
3329 expecting_string_instruction
);
3332 for (override
.start
= t
; t
< current_templates
->end
; ++t
)
3333 if (!t
->opcode_modifier
.isstring
)
3336 current_templates
= &override
;
3343 parse_operands (char *l
, const char *mnemonic
)
3347 /* 1 if operand is pending after ','. */
3348 unsigned int expecting_operand
= 0;
3350 /* Non-zero if operand parens not balanced. */
3351 unsigned int paren_not_balanced
;
3353 while (*l
!= END_OF_INSN
)
3355 /* Skip optional white space before operand. */
3356 if (is_space_char (*l
))
3358 if (!is_operand_char (*l
) && *l
!= END_OF_INSN
)
3360 as_bad (_("invalid character %s before operand %d"),
3361 output_invalid (*l
),
3365 token_start
= l
; /* after white space */
3366 paren_not_balanced
= 0;
3367 while (paren_not_balanced
|| *l
!= ',')
3369 if (*l
== END_OF_INSN
)
3371 if (paren_not_balanced
)
3374 as_bad (_("unbalanced parenthesis in operand %d."),
3377 as_bad (_("unbalanced brackets in operand %d."),
3382 break; /* we are done */
3384 else if (!is_operand_char (*l
) && !is_space_char (*l
))
3386 as_bad (_("invalid character %s in operand %d"),
3387 output_invalid (*l
),
3394 ++paren_not_balanced
;
3396 --paren_not_balanced
;
3401 ++paren_not_balanced
;
3403 --paren_not_balanced
;
3407 if (l
!= token_start
)
3408 { /* Yes, we've read in another operand. */
3409 unsigned int operand_ok
;
3410 this_operand
= i
.operands
++;
3411 i
.types
[this_operand
].bitfield
.unspecified
= 1;
3412 if (i
.operands
> MAX_OPERANDS
)
3414 as_bad (_("spurious operands; (%d operands/instruction max)"),
3418 /* Now parse operand adding info to 'i' as we go along. */
3419 END_STRING_AND_SAVE (l
);
3423 i386_intel_operand (token_start
,
3424 intel_float_operand (mnemonic
));
3426 operand_ok
= i386_att_operand (token_start
);
3428 RESTORE_END_STRING (l
);
3434 if (expecting_operand
)
3436 expecting_operand_after_comma
:
3437 as_bad (_("expecting operand after ','; got nothing"));
3442 as_bad (_("expecting operand before ','; got nothing"));
3447 /* Now *l must be either ',' or END_OF_INSN. */
3450 if (*++l
== END_OF_INSN
)
3452 /* Just skip it, if it's \n complain. */
3453 goto expecting_operand_after_comma
;
3455 expecting_operand
= 1;
3462 swap_2_operands (int xchg1
, int xchg2
)
3464 union i386_op temp_op
;
3465 i386_operand_type temp_type
;
3466 enum bfd_reloc_code_real temp_reloc
;
3468 temp_type
= i
.types
[xchg2
];
3469 i
.types
[xchg2
] = i
.types
[xchg1
];
3470 i
.types
[xchg1
] = temp_type
;
3471 temp_op
= i
.op
[xchg2
];
3472 i
.op
[xchg2
] = i
.op
[xchg1
];
3473 i
.op
[xchg1
] = temp_op
;
3474 temp_reloc
= i
.reloc
[xchg2
];
3475 i
.reloc
[xchg2
] = i
.reloc
[xchg1
];
3476 i
.reloc
[xchg1
] = temp_reloc
;
3480 swap_operands (void)
3486 swap_2_operands (1, i
.operands
- 2);
3489 swap_2_operands (0, i
.operands
- 1);
3495 if (i
.mem_operands
== 2)
3497 const seg_entry
*temp_seg
;
3498 temp_seg
= i
.seg
[0];
3499 i
.seg
[0] = i
.seg
[1];
3500 i
.seg
[1] = temp_seg
;
3504 /* Try to ensure constant immediates are represented in the smallest
3509 char guess_suffix
= 0;
3513 guess_suffix
= i
.suffix
;
3514 else if (i
.reg_operands
)
3516 /* Figure out a suffix from the last register operand specified.
3517 We can't do this properly yet, ie. excluding InOutPortReg,
3518 but the following works for instructions with immediates.
3519 In any case, we can't set i.suffix yet. */
3520 for (op
= i
.operands
; --op
>= 0;)
3521 if (i
.types
[op
].bitfield
.reg8
)
3523 guess_suffix
= BYTE_MNEM_SUFFIX
;
3526 else if (i
.types
[op
].bitfield
.reg16
)
3528 guess_suffix
= WORD_MNEM_SUFFIX
;
3531 else if (i
.types
[op
].bitfield
.reg32
)
3533 guess_suffix
= LONG_MNEM_SUFFIX
;
3536 else if (i
.types
[op
].bitfield
.reg64
)
3538 guess_suffix
= QWORD_MNEM_SUFFIX
;
3542 else if ((flag_code
== CODE_16BIT
) ^ (i
.prefix
[DATA_PREFIX
] != 0))
3543 guess_suffix
= WORD_MNEM_SUFFIX
;
3545 for (op
= i
.operands
; --op
>= 0;)
3546 if (operand_type_check (i
.types
[op
], imm
))
3548 switch (i
.op
[op
].imms
->X_op
)
3551 /* If a suffix is given, this operand may be shortened. */
3552 switch (guess_suffix
)
3554 case LONG_MNEM_SUFFIX
:
3555 i
.types
[op
].bitfield
.imm32
= 1;
3556 i
.types
[op
].bitfield
.imm64
= 1;
3558 case WORD_MNEM_SUFFIX
:
3559 i
.types
[op
].bitfield
.imm16
= 1;
3560 i
.types
[op
].bitfield
.imm32
= 1;
3561 i
.types
[op
].bitfield
.imm32s
= 1;
3562 i
.types
[op
].bitfield
.imm64
= 1;
3564 case BYTE_MNEM_SUFFIX
:
3565 i
.types
[op
].bitfield
.imm8
= 1;
3566 i
.types
[op
].bitfield
.imm8s
= 1;
3567 i
.types
[op
].bitfield
.imm16
= 1;
3568 i
.types
[op
].bitfield
.imm32
= 1;
3569 i
.types
[op
].bitfield
.imm32s
= 1;
3570 i
.types
[op
].bitfield
.imm64
= 1;
3574 /* If this operand is at most 16 bits, convert it
3575 to a signed 16 bit number before trying to see
3576 whether it will fit in an even smaller size.
3577 This allows a 16-bit operand such as $0xffe0 to
3578 be recognised as within Imm8S range. */
3579 if ((i
.types
[op
].bitfield
.imm16
)
3580 && (i
.op
[op
].imms
->X_add_number
& ~(offsetT
) 0xffff) == 0)
3582 i
.op
[op
].imms
->X_add_number
=
3583 (((i
.op
[op
].imms
->X_add_number
& 0xffff) ^ 0x8000) - 0x8000);
3585 if ((i
.types
[op
].bitfield
.imm32
)
3586 && ((i
.op
[op
].imms
->X_add_number
& ~(((offsetT
) 2 << 31) - 1))
3589 i
.op
[op
].imms
->X_add_number
= ((i
.op
[op
].imms
->X_add_number
3590 ^ ((offsetT
) 1 << 31))
3591 - ((offsetT
) 1 << 31));
3594 = operand_type_or (i
.types
[op
],
3595 smallest_imm_type (i
.op
[op
].imms
->X_add_number
));
3597 /* We must avoid matching of Imm32 templates when 64bit
3598 only immediate is available. */
3599 if (guess_suffix
== QWORD_MNEM_SUFFIX
)
3600 i
.types
[op
].bitfield
.imm32
= 0;
3607 /* Symbols and expressions. */
3609 /* Convert symbolic operand to proper sizes for matching, but don't
3610 prevent matching a set of insns that only supports sizes other
3611 than those matching the insn suffix. */
3613 i386_operand_type mask
, allowed
;
3614 const insn_template
*t
;
3616 operand_type_set (&mask
, 0);
3617 operand_type_set (&allowed
, 0);
3619 for (t
= current_templates
->start
;
3620 t
< current_templates
->end
;
3622 allowed
= operand_type_or (allowed
,
3623 t
->operand_types
[op
]);
3624 switch (guess_suffix
)
3626 case QWORD_MNEM_SUFFIX
:
3627 mask
.bitfield
.imm64
= 1;
3628 mask
.bitfield
.imm32s
= 1;
3630 case LONG_MNEM_SUFFIX
:
3631 mask
.bitfield
.imm32
= 1;
3633 case WORD_MNEM_SUFFIX
:
3634 mask
.bitfield
.imm16
= 1;
3636 case BYTE_MNEM_SUFFIX
:
3637 mask
.bitfield
.imm8
= 1;
3642 allowed
= operand_type_and (mask
, allowed
);
3643 if (!operand_type_all_zero (&allowed
))
3644 i
.types
[op
] = operand_type_and (i
.types
[op
], mask
);
3651 /* Try to use the smallest displacement type too. */
3653 optimize_disp (void)
3657 for (op
= i
.operands
; --op
>= 0;)
3658 if (operand_type_check (i
.types
[op
], disp
))
3660 if (i
.op
[op
].disps
->X_op
== O_constant
)
3662 offsetT op_disp
= i
.op
[op
].disps
->X_add_number
;
3664 if (i
.types
[op
].bitfield
.disp16
3665 && (op_disp
& ~(offsetT
) 0xffff) == 0)
3667 /* If this operand is at most 16 bits, convert
3668 to a signed 16 bit number and don't use 64bit
3670 op_disp
= (((op_disp
& 0xffff) ^ 0x8000) - 0x8000);
3671 i
.types
[op
].bitfield
.disp64
= 0;
3673 if (i
.types
[op
].bitfield
.disp32
3674 && (op_disp
& ~(((offsetT
) 2 << 31) - 1)) == 0)
3676 /* If this operand is at most 32 bits, convert
3677 to a signed 32 bit number and don't use 64bit
3679 op_disp
&= (((offsetT
) 2 << 31) - 1);
3680 op_disp
= (op_disp
^ ((offsetT
) 1 << 31)) - ((addressT
) 1 << 31);
3681 i
.types
[op
].bitfield
.disp64
= 0;
3683 if (!op_disp
&& i
.types
[op
].bitfield
.baseindex
)
3685 i
.types
[op
].bitfield
.disp8
= 0;
3686 i
.types
[op
].bitfield
.disp16
= 0;
3687 i
.types
[op
].bitfield
.disp32
= 0;
3688 i
.types
[op
].bitfield
.disp32s
= 0;
3689 i
.types
[op
].bitfield
.disp64
= 0;
3693 else if (flag_code
== CODE_64BIT
)
3695 if (fits_in_signed_long (op_disp
))
3697 i
.types
[op
].bitfield
.disp64
= 0;
3698 i
.types
[op
].bitfield
.disp32s
= 1;
3700 if (i
.prefix
[ADDR_PREFIX
]
3701 && fits_in_unsigned_long (op_disp
))
3702 i
.types
[op
].bitfield
.disp32
= 1;
3704 if ((i
.types
[op
].bitfield
.disp32
3705 || i
.types
[op
].bitfield
.disp32s
3706 || i
.types
[op
].bitfield
.disp16
)
3707 && fits_in_signed_byte (op_disp
))
3708 i
.types
[op
].bitfield
.disp8
= 1;
3710 else if (i
.reloc
[op
] == BFD_RELOC_386_TLS_DESC_CALL
3711 || i
.reloc
[op
] == BFD_RELOC_X86_64_TLSDESC_CALL
)
3713 fix_new_exp (frag_now
, frag_more (0) - frag_now
->fr_literal
, 0,
3714 i
.op
[op
].disps
, 0, i
.reloc
[op
]);
3715 i
.types
[op
].bitfield
.disp8
= 0;
3716 i
.types
[op
].bitfield
.disp16
= 0;
3717 i
.types
[op
].bitfield
.disp32
= 0;
3718 i
.types
[op
].bitfield
.disp32s
= 0;
3719 i
.types
[op
].bitfield
.disp64
= 0;
3722 /* We only support 64bit displacement on constants. */
3723 i
.types
[op
].bitfield
.disp64
= 0;
3727 static const insn_template
*
3728 match_template (void)
3730 /* Points to template once we've found it. */
3731 const insn_template
*t
;
3732 i386_operand_type overlap0
, overlap1
, overlap2
, overlap3
;
3733 i386_operand_type overlap4
;
3734 unsigned int found_reverse_match
;
3735 i386_opcode_modifier suffix_check
;
3736 i386_operand_type operand_types
[MAX_OPERANDS
];
3737 int addr_prefix_disp
;
3739 unsigned int found_cpu_match
;
3740 unsigned int check_register
;
3742 #if MAX_OPERANDS != 5
3743 # error "MAX_OPERANDS must be 5."
3746 found_reverse_match
= 0;
3747 addr_prefix_disp
= -1;
3749 memset (&suffix_check
, 0, sizeof (suffix_check
));
3750 if (i
.suffix
== BYTE_MNEM_SUFFIX
)
3751 suffix_check
.no_bsuf
= 1;
3752 else if (i
.suffix
== WORD_MNEM_SUFFIX
)
3753 suffix_check
.no_wsuf
= 1;
3754 else if (i
.suffix
== SHORT_MNEM_SUFFIX
)
3755 suffix_check
.no_ssuf
= 1;
3756 else if (i
.suffix
== LONG_MNEM_SUFFIX
)
3757 suffix_check
.no_lsuf
= 1;
3758 else if (i
.suffix
== QWORD_MNEM_SUFFIX
)
3759 suffix_check
.no_qsuf
= 1;
3760 else if (i
.suffix
== LONG_DOUBLE_MNEM_SUFFIX
)
3761 suffix_check
.no_ldsuf
= 1;
3763 for (t
= current_templates
->start
; t
< current_templates
->end
; t
++)
3765 addr_prefix_disp
= -1;
3767 /* Must have right number of operands. */
3768 if (i
.operands
!= t
->operands
)
3771 /* Check processor support. */
3772 found_cpu_match
= (cpu_flags_match (t
)
3773 == CPU_FLAGS_PERFECT_MATCH
);
3774 if (!found_cpu_match
)
3777 /* Check old gcc support. */
3778 if (!old_gcc
&& t
->opcode_modifier
.oldgcc
)
3781 /* Check AT&T mnemonic. */
3782 if (intel_mnemonic
&& t
->opcode_modifier
.attmnemonic
)
3785 /* Check AT&T syntax Intel syntax. */
3786 if ((intel_syntax
&& t
->opcode_modifier
.attsyntax
)
3787 || (!intel_syntax
&& t
->opcode_modifier
.intelsyntax
))
3790 /* Check the suffix, except for some instructions in intel mode. */
3791 if ((!intel_syntax
|| !t
->opcode_modifier
.ignoresize
)
3792 && ((t
->opcode_modifier
.no_bsuf
&& suffix_check
.no_bsuf
)
3793 || (t
->opcode_modifier
.no_wsuf
&& suffix_check
.no_wsuf
)
3794 || (t
->opcode_modifier
.no_lsuf
&& suffix_check
.no_lsuf
)
3795 || (t
->opcode_modifier
.no_ssuf
&& suffix_check
.no_ssuf
)
3796 || (t
->opcode_modifier
.no_qsuf
&& suffix_check
.no_qsuf
)
3797 || (t
->opcode_modifier
.no_ldsuf
&& suffix_check
.no_ldsuf
)))
3800 if (!operand_size_match (t
))
3803 for (j
= 0; j
< MAX_OPERANDS
; j
++)
3804 operand_types
[j
] = t
->operand_types
[j
];
3806 /* In general, don't allow 64-bit operands in 32-bit mode. */
3807 if (i
.suffix
== QWORD_MNEM_SUFFIX
3808 && flag_code
!= CODE_64BIT
3810 ? (!t
->opcode_modifier
.ignoresize
3811 && !intel_float_operand (t
->name
))
3812 : intel_float_operand (t
->name
) != 2)
3813 && ((!operand_types
[0].bitfield
.regmmx
3814 && !operand_types
[0].bitfield
.regxmm
3815 && !operand_types
[0].bitfield
.regymm
)
3816 || (!operand_types
[t
->operands
> 1].bitfield
.regmmx
3817 && !!operand_types
[t
->operands
> 1].bitfield
.regxmm
3818 && !!operand_types
[t
->operands
> 1].bitfield
.regymm
))
3819 && (t
->base_opcode
!= 0x0fc7
3820 || t
->extension_opcode
!= 1 /* cmpxchg8b */))
3823 /* In general, don't allow 32-bit operands on pre-386. */
3824 else if (i
.suffix
== LONG_MNEM_SUFFIX
3825 && !cpu_arch_flags
.bitfield
.cpui386
3827 ? (!t
->opcode_modifier
.ignoresize
3828 && !intel_float_operand (t
->name
))
3829 : intel_float_operand (t
->name
) != 2)
3830 && ((!operand_types
[0].bitfield
.regmmx
3831 && !operand_types
[0].bitfield
.regxmm
)
3832 || (!operand_types
[t
->operands
> 1].bitfield
.regmmx
3833 && !!operand_types
[t
->operands
> 1].bitfield
.regxmm
)))
3836 /* Do not verify operands when there are none. */
3840 /* We've found a match; break out of loop. */
3844 /* Address size prefix will turn Disp64/Disp32/Disp16 operand
3845 into Disp32/Disp16/Disp32 operand. */
3846 if (i
.prefix
[ADDR_PREFIX
] != 0)
3848 /* There should be only one Disp operand. */
3852 for (j
= 0; j
< MAX_OPERANDS
; j
++)
3854 if (operand_types
[j
].bitfield
.disp16
)
3856 addr_prefix_disp
= j
;
3857 operand_types
[j
].bitfield
.disp32
= 1;
3858 operand_types
[j
].bitfield
.disp16
= 0;
3864 for (j
= 0; j
< MAX_OPERANDS
; j
++)
3866 if (operand_types
[j
].bitfield
.disp32
)
3868 addr_prefix_disp
= j
;
3869 operand_types
[j
].bitfield
.disp32
= 0;
3870 operand_types
[j
].bitfield
.disp16
= 1;
3876 for (j
= 0; j
< MAX_OPERANDS
; j
++)
3878 if (operand_types
[j
].bitfield
.disp64
)
3880 addr_prefix_disp
= j
;
3881 operand_types
[j
].bitfield
.disp64
= 0;
3882 operand_types
[j
].bitfield
.disp32
= 1;
3890 /* We check register size only if size of operands can be
3891 encoded the canonical way. */
3892 check_register
= t
->opcode_modifier
.w
;
3893 overlap0
= operand_type_and (i
.types
[0], operand_types
[0]);
3894 switch (t
->operands
)
3897 if (!operand_type_match (overlap0
, i
.types
[0]))
3901 /* xchg %eax, %eax is a special case. It is an aliase for nop
3902 only in 32bit mode and we can use opcode 0x90. In 64bit
3903 mode, we can't use 0x90 for xchg %eax, %eax since it should
3904 zero-extend %eax to %rax. */
3905 if (flag_code
== CODE_64BIT
3906 && t
->base_opcode
== 0x90
3907 && operand_type_equal (&i
.types
[0], &acc32
)
3908 && operand_type_equal (&i
.types
[1], &acc32
))
3912 /* If we swap operand in encoding, we either match
3913 the next one or reverse direction of operands. */
3914 if (t
->opcode_modifier
.s
)
3916 else if (t
->opcode_modifier
.d
)
3921 /* If we swap operand in encoding, we match the next one. */
3922 if (i
.swap_operand
&& t
->opcode_modifier
.s
)
3926 overlap1
= operand_type_and (i
.types
[1], operand_types
[1]);
3927 if (!operand_type_match (overlap0
, i
.types
[0])
3928 || !operand_type_match (overlap1
, i
.types
[1])
3930 && !operand_type_register_match (overlap0
, i
.types
[0],
3932 overlap1
, i
.types
[1],
3935 /* Check if other direction is valid ... */
3936 if (!t
->opcode_modifier
.d
&& !t
->opcode_modifier
.floatd
)
3940 /* Try reversing direction of operands. */
3941 overlap0
= operand_type_and (i
.types
[0], operand_types
[1]);
3942 overlap1
= operand_type_and (i
.types
[1], operand_types
[0]);
3943 if (!operand_type_match (overlap0
, i
.types
[0])
3944 || !operand_type_match (overlap1
, i
.types
[1])
3946 && !operand_type_register_match (overlap0
,
3953 /* Does not match either direction. */
3956 /* found_reverse_match holds which of D or FloatDR
3958 if (t
->opcode_modifier
.d
)
3959 found_reverse_match
= Opcode_D
;
3960 else if (t
->opcode_modifier
.floatd
)
3961 found_reverse_match
= Opcode_FloatD
;
3963 found_reverse_match
= 0;
3964 if (t
->opcode_modifier
.floatr
)
3965 found_reverse_match
|= Opcode_FloatR
;
3969 /* Found a forward 2 operand match here. */
3970 switch (t
->operands
)
3973 overlap4
= operand_type_and (i
.types
[4],
3976 overlap3
= operand_type_and (i
.types
[3],
3979 overlap2
= operand_type_and (i
.types
[2],
3984 switch (t
->operands
)
3987 if (!operand_type_match (overlap4
, i
.types
[4])
3988 || !operand_type_register_match (overlap3
,
3996 if (!operand_type_match (overlap3
, i
.types
[3])
3998 && !operand_type_register_match (overlap2
,
4006 /* Here we make use of the fact that there are no
4007 reverse match 3 operand instructions, and all 3
4008 operand instructions only need to be checked for
4009 register consistency between operands 2 and 3. */
4010 if (!operand_type_match (overlap2
, i
.types
[2])
4012 && !operand_type_register_match (overlap1
,
4022 /* Found either forward/reverse 2, 3 or 4 operand match here:
4023 slip through to break. */
4025 if (!found_cpu_match
)
4027 found_reverse_match
= 0;
4031 /* We've found a match; break out of loop. */
4035 if (t
== current_templates
->end
)
4037 /* We found no match. */
4039 as_bad (_("ambiguous operand size or operands invalid for `%s'"),
4040 current_templates
->start
->name
);
4042 as_bad (_("suffix or operands invalid for `%s'"),
4043 current_templates
->start
->name
);
4047 if (!quiet_warnings
)
4050 && (i
.types
[0].bitfield
.jumpabsolute
4051 != operand_types
[0].bitfield
.jumpabsolute
))
4053 as_warn (_("indirect %s without `*'"), t
->name
);
4056 if (t
->opcode_modifier
.isprefix
4057 && t
->opcode_modifier
.ignoresize
)
4059 /* Warn them that a data or address size prefix doesn't
4060 affect assembly of the next line of code. */
4061 as_warn (_("stand-alone `%s' prefix"), t
->name
);
4065 /* Copy the template we found. */
4068 if (addr_prefix_disp
!= -1)
4069 i
.tm
.operand_types
[addr_prefix_disp
]
4070 = operand_types
[addr_prefix_disp
];
4072 if (found_reverse_match
)
4074 /* If we found a reverse match we must alter the opcode
4075 direction bit. found_reverse_match holds bits to change
4076 (different for int & float insns). */
4078 i
.tm
.base_opcode
^= found_reverse_match
;
4080 i
.tm
.operand_types
[0] = operand_types
[1];
4081 i
.tm
.operand_types
[1] = operand_types
[0];
4090 int mem_op
= operand_type_check (i
.types
[0], anymem
) ? 0 : 1;
4091 if (i
.tm
.operand_types
[mem_op
].bitfield
.esseg
)
4093 if (i
.seg
[0] != NULL
&& i
.seg
[0] != &es
)
4095 as_bad (_("`%s' operand %d must use `%ses' segment"),
4101 /* There's only ever one segment override allowed per instruction.
4102 This instruction possibly has a legal segment override on the
4103 second operand, so copy the segment to where non-string
4104 instructions store it, allowing common code. */
4105 i
.seg
[0] = i
.seg
[1];
4107 else if (i
.tm
.operand_types
[mem_op
+ 1].bitfield
.esseg
)
4109 if (i
.seg
[1] != NULL
&& i
.seg
[1] != &es
)
4111 as_bad (_("`%s' operand %d must use `%ses' segment"),
4122 process_suffix (void)
4124 /* If matched instruction specifies an explicit instruction mnemonic
4126 if (i
.tm
.opcode_modifier
.size16
)
4127 i
.suffix
= WORD_MNEM_SUFFIX
;
4128 else if (i
.tm
.opcode_modifier
.size32
)
4129 i
.suffix
= LONG_MNEM_SUFFIX
;
4130 else if (i
.tm
.opcode_modifier
.size64
)
4131 i
.suffix
= QWORD_MNEM_SUFFIX
;
4132 else if (i
.reg_operands
)
4134 /* If there's no instruction mnemonic suffix we try to invent one
4135 based on register operands. */
4138 /* We take i.suffix from the last register operand specified,
4139 Destination register type is more significant than source
4140 register type. crc32 in SSE4.2 prefers source register
4142 if (i
.tm
.base_opcode
== 0xf20f38f1)
4144 if (i
.types
[0].bitfield
.reg16
)
4145 i
.suffix
= WORD_MNEM_SUFFIX
;
4146 else if (i
.types
[0].bitfield
.reg32
)
4147 i
.suffix
= LONG_MNEM_SUFFIX
;
4148 else if (i
.types
[0].bitfield
.reg64
)
4149 i
.suffix
= QWORD_MNEM_SUFFIX
;
4151 else if (i
.tm
.base_opcode
== 0xf20f38f0)
4153 if (i
.types
[0].bitfield
.reg8
)
4154 i
.suffix
= BYTE_MNEM_SUFFIX
;
4161 if (i
.tm
.base_opcode
== 0xf20f38f1
4162 || i
.tm
.base_opcode
== 0xf20f38f0)
4164 /* We have to know the operand size for crc32. */
4165 as_bad (_("ambiguous memory operand size for `%s`"),
4170 for (op
= i
.operands
; --op
>= 0;)
4171 if (!i
.tm
.operand_types
[op
].bitfield
.inoutportreg
)
4173 if (i
.types
[op
].bitfield
.reg8
)
4175 i
.suffix
= BYTE_MNEM_SUFFIX
;
4178 else if (i
.types
[op
].bitfield
.reg16
)
4180 i
.suffix
= WORD_MNEM_SUFFIX
;
4183 else if (i
.types
[op
].bitfield
.reg32
)
4185 i
.suffix
= LONG_MNEM_SUFFIX
;
4188 else if (i
.types
[op
].bitfield
.reg64
)
4190 i
.suffix
= QWORD_MNEM_SUFFIX
;
4196 else if (i
.suffix
== BYTE_MNEM_SUFFIX
)
4199 && i
.tm
.opcode_modifier
.ignoresize
4200 && i
.tm
.opcode_modifier
.no_bsuf
)
4202 else if (!check_byte_reg ())
4205 else if (i
.suffix
== LONG_MNEM_SUFFIX
)
4208 && i
.tm
.opcode_modifier
.ignoresize
4209 && i
.tm
.opcode_modifier
.no_lsuf
)
4211 else if (!check_long_reg ())
4214 else if (i
.suffix
== QWORD_MNEM_SUFFIX
)
4217 && i
.tm
.opcode_modifier
.ignoresize
4218 && i
.tm
.opcode_modifier
.no_qsuf
)
4220 else if (!check_qword_reg ())
4223 else if (i
.suffix
== WORD_MNEM_SUFFIX
)
4226 && i
.tm
.opcode_modifier
.ignoresize
4227 && i
.tm
.opcode_modifier
.no_wsuf
)
4229 else if (!check_word_reg ())
4232 else if (i
.suffix
== XMMWORD_MNEM_SUFFIX
4233 || i
.suffix
== YMMWORD_MNEM_SUFFIX
)
4235 /* Skip if the instruction has x/y suffix. match_template
4236 should check if it is a valid suffix. */
4238 else if (intel_syntax
&& i
.tm
.opcode_modifier
.ignoresize
)
4239 /* Do nothing if the instruction is going to ignore the prefix. */
4244 else if (i
.tm
.opcode_modifier
.defaultsize
4246 /* exclude fldenv/frstor/fsave/fstenv */
4247 && i
.tm
.opcode_modifier
.no_ssuf
)
4249 i
.suffix
= stackop_size
;
4251 else if (intel_syntax
4253 && (i
.tm
.operand_types
[0].bitfield
.jumpabsolute
4254 || i
.tm
.opcode_modifier
.jumpbyte
4255 || i
.tm
.opcode_modifier
.jumpintersegment
4256 || (i
.tm
.base_opcode
== 0x0f01 /* [ls][gi]dt */
4257 && i
.tm
.extension_opcode
<= 3)))
4262 if (!i
.tm
.opcode_modifier
.no_qsuf
)
4264 i
.suffix
= QWORD_MNEM_SUFFIX
;
4268 if (!i
.tm
.opcode_modifier
.no_lsuf
)
4269 i
.suffix
= LONG_MNEM_SUFFIX
;
4272 if (!i
.tm
.opcode_modifier
.no_wsuf
)
4273 i
.suffix
= WORD_MNEM_SUFFIX
;
4282 if (i
.tm
.opcode_modifier
.w
)
4284 as_bad (_("no instruction mnemonic suffix given and "
4285 "no register operands; can't size instruction"));
4291 unsigned int suffixes
;
4293 suffixes
= !i
.tm
.opcode_modifier
.no_bsuf
;
4294 if (!i
.tm
.opcode_modifier
.no_wsuf
)
4296 if (!i
.tm
.opcode_modifier
.no_lsuf
)
4298 if (!i
.tm
.opcode_modifier
.no_ldsuf
)
4300 if (!i
.tm
.opcode_modifier
.no_ssuf
)
4302 if (!i
.tm
.opcode_modifier
.no_qsuf
)
4305 /* There are more than suffix matches. */
4306 if (i
.tm
.opcode_modifier
.w
4307 || ((suffixes
& (suffixes
- 1))
4308 && !i
.tm
.opcode_modifier
.defaultsize
4309 && !i
.tm
.opcode_modifier
.ignoresize
))
4311 as_bad (_("ambiguous operand size for `%s'"), i
.tm
.name
);
4317 /* Change the opcode based on the operand size given by i.suffix;
4318 We don't need to change things for byte insns. */
4321 && i
.suffix
!= BYTE_MNEM_SUFFIX
4322 && i
.suffix
!= XMMWORD_MNEM_SUFFIX
4323 && i
.suffix
!= YMMWORD_MNEM_SUFFIX
)
4325 /* It's not a byte, select word/dword operation. */
4326 if (i
.tm
.opcode_modifier
.w
)
4328 if (i
.tm
.opcode_modifier
.shortform
)
4329 i
.tm
.base_opcode
|= 8;
4331 i
.tm
.base_opcode
|= 1;
4334 /* Now select between word & dword operations via the operand
4335 size prefix, except for instructions that will ignore this
4337 if (i
.tm
.opcode_modifier
.addrprefixop0
)
4339 /* The address size override prefix changes the size of the
4341 if ((flag_code
== CODE_32BIT
4342 && i
.op
->regs
[0].reg_type
.bitfield
.reg16
)
4343 || (flag_code
!= CODE_32BIT
4344 && i
.op
->regs
[0].reg_type
.bitfield
.reg32
))
4345 if (!add_prefix (ADDR_PREFIX_OPCODE
))
4348 else if (i
.suffix
!= QWORD_MNEM_SUFFIX
4349 && i
.suffix
!= LONG_DOUBLE_MNEM_SUFFIX
4350 && !i
.tm
.opcode_modifier
.ignoresize
4351 && !i
.tm
.opcode_modifier
.floatmf
4352 && ((i
.suffix
== LONG_MNEM_SUFFIX
) == (flag_code
== CODE_16BIT
)
4353 || (flag_code
== CODE_64BIT
4354 && i
.tm
.opcode_modifier
.jumpbyte
)))
4356 unsigned int prefix
= DATA_PREFIX_OPCODE
;
4358 if (i
.tm
.opcode_modifier
.jumpbyte
) /* jcxz, loop */
4359 prefix
= ADDR_PREFIX_OPCODE
;
4361 if (!add_prefix (prefix
))
4365 /* Set mode64 for an operand. */
4366 if (i
.suffix
== QWORD_MNEM_SUFFIX
4367 && flag_code
== CODE_64BIT
4368 && !i
.tm
.opcode_modifier
.norex64
)
4370 /* Special case for xchg %rax,%rax. It is NOP and doesn't
4371 need rex64. cmpxchg8b is also a special case. */
4372 if (! (i
.operands
== 2
4373 && i
.tm
.base_opcode
== 0x90
4374 && i
.tm
.extension_opcode
== None
4375 && operand_type_equal (&i
.types
[0], &acc64
)
4376 && operand_type_equal (&i
.types
[1], &acc64
))
4377 && ! (i
.operands
== 1
4378 && i
.tm
.base_opcode
== 0xfc7
4379 && i
.tm
.extension_opcode
== 1
4380 && !operand_type_check (i
.types
[0], reg
)
4381 && operand_type_check (i
.types
[0], anymem
)))
4385 /* Size floating point instruction. */
4386 if (i
.suffix
== LONG_MNEM_SUFFIX
)
4387 if (i
.tm
.opcode_modifier
.floatmf
)
4388 i
.tm
.base_opcode
^= 4;
4395 check_byte_reg (void)
4399 for (op
= i
.operands
; --op
>= 0;)
4401 /* If this is an eight bit register, it's OK. If it's the 16 or
4402 32 bit version of an eight bit register, we will just use the
4403 low portion, and that's OK too. */
4404 if (i
.types
[op
].bitfield
.reg8
)
4407 /* crc32 doesn't generate this warning. */
4408 if (i
.tm
.base_opcode
== 0xf20f38f0)
4411 if ((i
.types
[op
].bitfield
.reg16
4412 || i
.types
[op
].bitfield
.reg32
4413 || i
.types
[op
].bitfield
.reg64
)
4414 && i
.op
[op
].regs
->reg_num
< 4)
4416 /* Prohibit these changes in the 64bit mode, since the
4417 lowering is more complicated. */
4418 if (flag_code
== CODE_64BIT
4419 && !i
.tm
.operand_types
[op
].bitfield
.inoutportreg
)
4421 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4422 register_prefix
, i
.op
[op
].regs
->reg_name
,
4426 #if REGISTER_WARNINGS
4428 && !i
.tm
.operand_types
[op
].bitfield
.inoutportreg
)
4429 as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
4431 (i
.op
[op
].regs
+ (i
.types
[op
].bitfield
.reg16
4432 ? REGNAM_AL
- REGNAM_AX
4433 : REGNAM_AL
- REGNAM_EAX
))->reg_name
,
4435 i
.op
[op
].regs
->reg_name
,
4440 /* Any other register is bad. */
4441 if (i
.types
[op
].bitfield
.reg16
4442 || i
.types
[op
].bitfield
.reg32
4443 || i
.types
[op
].bitfield
.reg64
4444 || i
.types
[op
].bitfield
.regmmx
4445 || i
.types
[op
].bitfield
.regxmm
4446 || i
.types
[op
].bitfield
.regymm
4447 || i
.types
[op
].bitfield
.sreg2
4448 || i
.types
[op
].bitfield
.sreg3
4449 || i
.types
[op
].bitfield
.control
4450 || i
.types
[op
].bitfield
.debug
4451 || i
.types
[op
].bitfield
.test
4452 || i
.types
[op
].bitfield
.floatreg
4453 || i
.types
[op
].bitfield
.floatacc
)
4455 as_bad (_("`%s%s' not allowed with `%s%c'"),
4457 i
.op
[op
].regs
->reg_name
,
4467 check_long_reg (void)
4471 for (op
= i
.operands
; --op
>= 0;)
4472 /* Reject eight bit registers, except where the template requires
4473 them. (eg. movzb) */
4474 if (i
.types
[op
].bitfield
.reg8
4475 && (i
.tm
.operand_types
[op
].bitfield
.reg16
4476 || i
.tm
.operand_types
[op
].bitfield
.reg32
4477 || i
.tm
.operand_types
[op
].bitfield
.acc
))
4479 as_bad (_("`%s%s' not allowed with `%s%c'"),
4481 i
.op
[op
].regs
->reg_name
,
4486 /* Warn if the e prefix on a general reg is missing. */
4487 else if ((!quiet_warnings
|| flag_code
== CODE_64BIT
)
4488 && i
.types
[op
].bitfield
.reg16
4489 && (i
.tm
.operand_types
[op
].bitfield
.reg32
4490 || i
.tm
.operand_types
[op
].bitfield
.acc
))
4492 /* Prohibit these changes in the 64bit mode, since the
4493 lowering is more complicated. */
4494 if (flag_code
== CODE_64BIT
)
4496 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4497 register_prefix
, i
.op
[op
].regs
->reg_name
,
4501 #if REGISTER_WARNINGS
4503 as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
4505 (i
.op
[op
].regs
+ REGNAM_EAX
- REGNAM_AX
)->reg_name
,
4507 i
.op
[op
].regs
->reg_name
,
4511 /* Warn if the r prefix on a general reg is missing. */
4512 else if (i
.types
[op
].bitfield
.reg64
4513 && (i
.tm
.operand_types
[op
].bitfield
.reg32
4514 || i
.tm
.operand_types
[op
].bitfield
.acc
))
4517 && i
.tm
.opcode_modifier
.toqword
4518 && !i
.types
[0].bitfield
.regxmm
)
4520 /* Convert to QWORD. We want REX byte. */
4521 i
.suffix
= QWORD_MNEM_SUFFIX
;
4525 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4526 register_prefix
, i
.op
[op
].regs
->reg_name
,
4535 check_qword_reg (void)
4539 for (op
= i
.operands
; --op
>= 0; )
4540 /* Reject eight bit registers, except where the template requires
4541 them. (eg. movzb) */
4542 if (i
.types
[op
].bitfield
.reg8
4543 && (i
.tm
.operand_types
[op
].bitfield
.reg16
4544 || i
.tm
.operand_types
[op
].bitfield
.reg32
4545 || i
.tm
.operand_types
[op
].bitfield
.acc
))
4547 as_bad (_("`%s%s' not allowed with `%s%c'"),
4549 i
.op
[op
].regs
->reg_name
,
4554 /* Warn if the e prefix on a general reg is missing. */
4555 else if ((i
.types
[op
].bitfield
.reg16
4556 || i
.types
[op
].bitfield
.reg32
)
4557 && (i
.tm
.operand_types
[op
].bitfield
.reg32
4558 || i
.tm
.operand_types
[op
].bitfield
.acc
))
4560 /* Prohibit these changes in the 64bit mode, since the
4561 lowering is more complicated. */
4563 && i
.tm
.opcode_modifier
.todword
4564 && !i
.types
[0].bitfield
.regxmm
)
4566 /* Convert to DWORD. We don't want REX byte. */
4567 i
.suffix
= LONG_MNEM_SUFFIX
;
4571 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4572 register_prefix
, i
.op
[op
].regs
->reg_name
,
4581 check_word_reg (void)
4584 for (op
= i
.operands
; --op
>= 0;)
4585 /* Reject eight bit registers, except where the template requires
4586 them. (eg. movzb) */
4587 if (i
.types
[op
].bitfield
.reg8
4588 && (i
.tm
.operand_types
[op
].bitfield
.reg16
4589 || i
.tm
.operand_types
[op
].bitfield
.reg32
4590 || i
.tm
.operand_types
[op
].bitfield
.acc
))
4592 as_bad (_("`%s%s' not allowed with `%s%c'"),
4594 i
.op
[op
].regs
->reg_name
,
4599 /* Warn if the e prefix on a general reg is present. */
4600 else if ((!quiet_warnings
|| flag_code
== CODE_64BIT
)
4601 && i
.types
[op
].bitfield
.reg32
4602 && (i
.tm
.operand_types
[op
].bitfield
.reg16
4603 || i
.tm
.operand_types
[op
].bitfield
.acc
))
4605 /* Prohibit these changes in the 64bit mode, since the
4606 lowering is more complicated. */
4607 if (flag_code
== CODE_64BIT
)
4609 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4610 register_prefix
, i
.op
[op
].regs
->reg_name
,
4615 #if REGISTER_WARNINGS
4616 as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
4618 (i
.op
[op
].regs
+ REGNAM_AX
- REGNAM_EAX
)->reg_name
,
4620 i
.op
[op
].regs
->reg_name
,
4628 update_imm (unsigned int j
)
4630 i386_operand_type overlap
= i
.types
[j
];
4631 if ((overlap
.bitfield
.imm8
4632 || overlap
.bitfield
.imm8s
4633 || overlap
.bitfield
.imm16
4634 || overlap
.bitfield
.imm32
4635 || overlap
.bitfield
.imm32s
4636 || overlap
.bitfield
.imm64
)
4637 && !operand_type_equal (&overlap
, &imm8
)
4638 && !operand_type_equal (&overlap
, &imm8s
)
4639 && !operand_type_equal (&overlap
, &imm16
)
4640 && !operand_type_equal (&overlap
, &imm32
)
4641 && !operand_type_equal (&overlap
, &imm32s
)
4642 && !operand_type_equal (&overlap
, &imm64
))
4646 i386_operand_type temp
;
4648 operand_type_set (&temp
, 0);
4649 if (i
.suffix
== BYTE_MNEM_SUFFIX
)
4651 temp
.bitfield
.imm8
= overlap
.bitfield
.imm8
;
4652 temp
.bitfield
.imm8s
= overlap
.bitfield
.imm8s
;
4654 else if (i
.suffix
== WORD_MNEM_SUFFIX
)
4655 temp
.bitfield
.imm16
= overlap
.bitfield
.imm16
;
4656 else if (i
.suffix
== QWORD_MNEM_SUFFIX
)
4658 temp
.bitfield
.imm64
= overlap
.bitfield
.imm64
;
4659 temp
.bitfield
.imm32s
= overlap
.bitfield
.imm32s
;
4662 temp
.bitfield
.imm32
= overlap
.bitfield
.imm32
;
4665 else if (operand_type_equal (&overlap
, &imm16_32_32s
)
4666 || operand_type_equal (&overlap
, &imm16_32
)
4667 || operand_type_equal (&overlap
, &imm16_32s
))
4669 if ((flag_code
== CODE_16BIT
) ^ (i
.prefix
[DATA_PREFIX
] != 0))
4674 if (!operand_type_equal (&overlap
, &imm8
)
4675 && !operand_type_equal (&overlap
, &imm8s
)
4676 && !operand_type_equal (&overlap
, &imm16
)
4677 && !operand_type_equal (&overlap
, &imm32
)
4678 && !operand_type_equal (&overlap
, &imm32s
)
4679 && !operand_type_equal (&overlap
, &imm64
))
4681 as_bad (_("no instruction mnemonic suffix given; "
4682 "can't determine immediate size"));
4686 i
.types
[j
] = overlap
;
4696 /* Update the first 2 immediate operands. */
4697 n
= i
.operands
> 2 ? 2 : i
.operands
;
4700 for (j
= 0; j
< n
; j
++)
4701 if (update_imm (j
) == 0)
4704 /* The 3rd operand can't be immediate operand. */
4705 gas_assert (operand_type_check (i
.types
[2], imm
) == 0);
4712 bad_implicit_operand (int xmm
)
4714 const char *ireg
= xmm
? "xmm0" : "ymm0";
4717 as_bad (_("the last operand of `%s' must be `%s%s'"),
4718 i
.tm
.name
, register_prefix
, ireg
);
4720 as_bad (_("the first operand of `%s' must be `%s%s'"),
4721 i
.tm
.name
, register_prefix
, ireg
);
4726 process_operands (void)
4728 /* Default segment register this instruction will use for memory
4729 accesses. 0 means unknown. This is only for optimizing out
4730 unnecessary segment overrides. */
4731 const seg_entry
*default_seg
= 0;
4733 if (i
.tm
.opcode_modifier
.sse2avx
&& i
.tm
.opcode_modifier
.vexvvvv
)
4735 unsigned int dupl
= i
.operands
;
4736 unsigned int dest
= dupl
- 1;
4739 /* The destination must be an xmm register. */
4740 gas_assert (i
.reg_operands
4741 && MAX_OPERANDS
> dupl
4742 && operand_type_equal (&i
.types
[dest
], ®xmm
));
4744 if (i
.tm
.opcode_modifier
.firstxmm0
)
4746 /* The first operand is implicit and must be xmm0. */
4747 gas_assert (operand_type_equal (&i
.types
[0], ®xmm
));
4748 if (i
.op
[0].regs
->reg_num
!= 0)
4749 return bad_implicit_operand (1);
4751 if (i
.tm
.opcode_modifier
.vexsources
== VEX3SOURCES
)
4753 /* Keep xmm0 for instructions with VEX prefix and 3
4759 /* We remove the first xmm0 and keep the number of
4760 operands unchanged, which in fact duplicates the
4762 for (j
= 1; j
< i
.operands
; j
++)
4764 i
.op
[j
- 1] = i
.op
[j
];
4765 i
.types
[j
- 1] = i
.types
[j
];
4766 i
.tm
.operand_types
[j
- 1] = i
.tm
.operand_types
[j
];
4770 else if (i
.tm
.opcode_modifier
.implicit1stxmm0
)
4772 gas_assert ((MAX_OPERANDS
- 1) > dupl
4773 && (i
.tm
.opcode_modifier
.vexsources
4776 /* Add the implicit xmm0 for instructions with VEX prefix
4778 for (j
= i
.operands
; j
> 0; j
--)
4780 i
.op
[j
] = i
.op
[j
- 1];
4781 i
.types
[j
] = i
.types
[j
- 1];
4782 i
.tm
.operand_types
[j
] = i
.tm
.operand_types
[j
- 1];
4785 = (const reg_entry
*) hash_find (reg_hash
, "xmm0");
4786 i
.types
[0] = regxmm
;
4787 i
.tm
.operand_types
[0] = regxmm
;
4790 i
.reg_operands
+= 2;
4795 i
.op
[dupl
] = i
.op
[dest
];
4796 i
.types
[dupl
] = i
.types
[dest
];
4797 i
.tm
.operand_types
[dupl
] = i
.tm
.operand_types
[dest
];
4806 i
.op
[dupl
] = i
.op
[dest
];
4807 i
.types
[dupl
] = i
.types
[dest
];
4808 i
.tm
.operand_types
[dupl
] = i
.tm
.operand_types
[dest
];
4811 if (i
.tm
.opcode_modifier
.immext
)
4814 else if (i
.tm
.opcode_modifier
.firstxmm0
)
4818 /* The first operand is implicit and must be xmm0/ymm0. */
4819 gas_assert (i
.reg_operands
4820 && (operand_type_equal (&i
.types
[0], ®xmm
)
4821 || operand_type_equal (&i
.types
[0], ®ymm
)));
4822 if (i
.op
[0].regs
->reg_num
!= 0)
4823 return bad_implicit_operand (i
.types
[0].bitfield
.regxmm
);
4825 for (j
= 1; j
< i
.operands
; j
++)
4827 i
.op
[j
- 1] = i
.op
[j
];
4828 i
.types
[j
- 1] = i
.types
[j
];
4830 /* We need to adjust fields in i.tm since they are used by
4831 build_modrm_byte. */
4832 i
.tm
.operand_types
[j
- 1] = i
.tm
.operand_types
[j
];
4839 else if (i
.tm
.opcode_modifier
.regkludge
)
4841 /* The imul $imm, %reg instruction is converted into
4842 imul $imm, %reg, %reg, and the clr %reg instruction
4843 is converted into xor %reg, %reg. */
4845 unsigned int first_reg_op
;
4847 if (operand_type_check (i
.types
[0], reg
))
4851 /* Pretend we saw the extra register operand. */
4852 gas_assert (i
.reg_operands
== 1
4853 && i
.op
[first_reg_op
+ 1].regs
== 0);
4854 i
.op
[first_reg_op
+ 1].regs
= i
.op
[first_reg_op
].regs
;
4855 i
.types
[first_reg_op
+ 1] = i
.types
[first_reg_op
];
4860 if (i
.tm
.opcode_modifier
.shortform
)
4862 if (i
.types
[0].bitfield
.sreg2
4863 || i
.types
[0].bitfield
.sreg3
)
4865 if (i
.tm
.base_opcode
== POP_SEG_SHORT
4866 && i
.op
[0].regs
->reg_num
== 1)
4868 as_bad (_("you can't `pop %scs'"), register_prefix
);
4871 i
.tm
.base_opcode
|= (i
.op
[0].regs
->reg_num
<< 3);
4872 if ((i
.op
[0].regs
->reg_flags
& RegRex
) != 0)
4877 /* The register or float register operand is in operand
4881 if (i
.types
[0].bitfield
.floatreg
4882 || operand_type_check (i
.types
[0], reg
))
4886 /* Register goes in low 3 bits of opcode. */
4887 i
.tm
.base_opcode
|= i
.op
[op
].regs
->reg_num
;
4888 if ((i
.op
[op
].regs
->reg_flags
& RegRex
) != 0)
4890 if (!quiet_warnings
&& i
.tm
.opcode_modifier
.ugh
)
4892 /* Warn about some common errors, but press on regardless.
4893 The first case can be generated by gcc (<= 2.8.1). */
4894 if (i
.operands
== 2)
4896 /* Reversed arguments on faddp, fsubp, etc. */
4897 as_warn (_("translating to `%s %s%s,%s%s'"), i
.tm
.name
,
4898 register_prefix
, i
.op
[!intel_syntax
].regs
->reg_name
,
4899 register_prefix
, i
.op
[intel_syntax
].regs
->reg_name
);
4903 /* Extraneous `l' suffix on fp insn. */
4904 as_warn (_("translating to `%s %s%s'"), i
.tm
.name
,
4905 register_prefix
, i
.op
[0].regs
->reg_name
);
4910 else if (i
.tm
.opcode_modifier
.modrm
)
4912 /* The opcode is completed (modulo i.tm.extension_opcode which
4913 must be put into the modrm byte). Now, we make the modrm and
4914 index base bytes based on all the info we've collected. */
4916 default_seg
= build_modrm_byte ();
4918 else if ((i
.tm
.base_opcode
& ~0x3) == MOV_AX_DISP32
)
4922 else if (i
.tm
.opcode_modifier
.isstring
)
4924 /* For the string instructions that allow a segment override
4925 on one of their operands, the default segment is ds. */
4929 if (i
.tm
.base_opcode
== 0x8d /* lea */
4932 as_warn (_("segment override on `%s' is ineffectual"), i
.tm
.name
);
4934 /* If a segment was explicitly specified, and the specified segment
4935 is not the default, use an opcode prefix to select it. If we
4936 never figured out what the default segment is, then default_seg
4937 will be zero at this point, and the specified segment prefix will
4939 if ((i
.seg
[0]) && (i
.seg
[0] != default_seg
))
4941 if (!add_prefix (i
.seg
[0]->seg_prefix
))
4947 static const seg_entry
*
4948 build_modrm_byte (void)
4950 const seg_entry
*default_seg
= 0;
4951 unsigned int source
, dest
;
4954 /* The first operand of instructions with VEX prefix and 3 sources
4955 must be VEX_Imm4. */
4956 vex_3_sources
= i
.tm
.opcode_modifier
.vexsources
== VEX3SOURCES
;
4959 unsigned int nds
, reg_slot
;
4962 if (i
.tm
.opcode_modifier
.veximmext
4963 && i
.tm
.opcode_modifier
.immext
)
4965 dest
= i
.operands
- 2;
4966 gas_assert (dest
== 3);
4969 dest
= i
.operands
- 1;
4972 /* This instruction must have 4 register operands
4973 or 3 register operands plus 1 memory operand.
4974 It must have VexNDS and VexImmExt. */
4975 gas_assert ((i
.reg_operands
== 4
4976 || (i
.reg_operands
== 3 && i
.mem_operands
== 1))
4977 && i
.tm
.opcode_modifier
.vexvvvv
== VEXXDS
4978 && i
.tm
.opcode_modifier
.veximmext
4979 && (operand_type_equal (&i
.tm
.operand_types
[dest
], ®xmm
)
4980 || operand_type_equal (&i
.tm
.operand_types
[dest
], ®ymm
)));
4982 /* Generate an 8bit immediate operand to encode the register
4984 exp
= &im_expressions
[i
.imm_operands
++];
4985 i
.op
[i
.operands
].imms
= exp
;
4986 i
.types
[i
.operands
] = imm8
;
4988 /* If VexW1 is set, the first operand is the source and
4989 the second operand is encoded in the immediate operand. */
4990 if (i
.tm
.opcode_modifier
.vexw
== VEXW1
)
5000 gas_assert ((operand_type_equal (&i
.tm
.operand_types
[reg_slot
], ®xmm
)
5001 || operand_type_equal (&i
.tm
.operand_types
[reg_slot
],
5003 && (operand_type_equal (&i
.tm
.operand_types
[nds
], ®xmm
)
5004 || operand_type_equal (&i
.tm
.operand_types
[nds
],
5006 exp
->X_op
= O_constant
;
5008 = ((i
.op
[reg_slot
].regs
->reg_num
5009 + ((i
.op
[reg_slot
].regs
->reg_flags
& RegRex
) ? 8 : 0)) << 4);
5010 i
.vex
.register_specifier
= i
.op
[nds
].regs
;
5015 /* i.reg_operands MUST be the number of real register operands;
5016 implicit registers do not count. If there are 3 register
5017 operands, it must be a instruction with VexNDS. For a
5018 instruction with VexNDD, the destination register is encoded
5019 in VEX prefix. If there are 4 register operands, it must be
5020 a instruction with VEX prefix and 3 sources. */
5021 if (i
.mem_operands
== 0
5022 && ((i
.reg_operands
== 2
5023 && i
.tm
.opcode_modifier
.vexvvvv
<= VEXXDS
)
5024 || (i
.reg_operands
== 3
5025 && i
.tm
.opcode_modifier
.vexvvvv
== VEXXDS
)
5026 || (i
.reg_operands
== 4 && vex_3_sources
)))
5034 /* When there are 3 operands, one of them may be immediate,
5035 which may be the first or the last operand. Otherwise,
5036 the first operand must be shift count register (cl) or it
5037 is an instruction with VexNDS. */
5038 gas_assert (i
.imm_operands
== 1
5039 || (i
.imm_operands
== 0
5040 && (i
.tm
.opcode_modifier
.vexvvvv
== VEXXDS
5041 || i
.types
[0].bitfield
.shiftcount
)));
5042 if (operand_type_check (i
.types
[0], imm
)
5043 || i
.types
[0].bitfield
.shiftcount
)
5049 /* When there are 4 operands, the first two must be 8bit
5050 immediate operands. The source operand will be the 3rd
5053 For instructions with VexNDS, if the first operand
5054 an imm8, the source operand is the 2nd one. If the last
5055 operand is imm8, the source operand is the first one. */
5056 gas_assert ((i
.imm_operands
== 2
5057 && i
.types
[0].bitfield
.imm8
5058 && i
.types
[1].bitfield
.imm8
)
5059 || (i
.tm
.opcode_modifier
.vexvvvv
== VEXXDS
5060 && i
.imm_operands
== 1
5061 && (i
.types
[0].bitfield
.imm8
5062 || i
.types
[i
.operands
- 1].bitfield
.imm8
)));
5063 if (i
.tm
.opcode_modifier
.vexvvvv
== VEXXDS
)
5065 if (i
.types
[0].bitfield
.imm8
)
5083 if (i
.tm
.opcode_modifier
.vexvvvv
== VEXXDS
)
5085 /* For instructions with VexNDS, the register-only
5086 source operand must be XMM or YMM register. It is
5087 encoded in VEX prefix. We need to clear RegMem bit
5088 before calling operand_type_equal. */
5089 i386_operand_type op
= i
.tm
.operand_types
[dest
];
5090 op
.bitfield
.regmem
= 0;
5091 if ((dest
+ 1) >= i
.operands
5092 || (!operand_type_equal (&op
, ®xmm
)
5093 && !operand_type_equal (&op
, ®ymm
)))
5095 i
.vex
.register_specifier
= i
.op
[dest
].regs
;
5101 /* One of the register operands will be encoded in the i.tm.reg
5102 field, the other in the combined i.tm.mode and i.tm.regmem
5103 fields. If no form of this instruction supports a memory
5104 destination operand, then we assume the source operand may
5105 sometimes be a memory operand and so we need to store the
5106 destination in the i.rm.reg field. */
5107 if (!i
.tm
.operand_types
[dest
].bitfield
.regmem
5108 && operand_type_check (i
.tm
.operand_types
[dest
], anymem
) == 0)
5110 i
.rm
.reg
= i
.op
[dest
].regs
->reg_num
;
5111 i
.rm
.regmem
= i
.op
[source
].regs
->reg_num
;
5112 if ((i
.op
[dest
].regs
->reg_flags
& RegRex
) != 0)
5114 if ((i
.op
[source
].regs
->reg_flags
& RegRex
) != 0)
5119 i
.rm
.reg
= i
.op
[source
].regs
->reg_num
;
5120 i
.rm
.regmem
= i
.op
[dest
].regs
->reg_num
;
5121 if ((i
.op
[dest
].regs
->reg_flags
& RegRex
) != 0)
5123 if ((i
.op
[source
].regs
->reg_flags
& RegRex
) != 0)
5126 if (flag_code
!= CODE_64BIT
&& (i
.rex
& (REX_R
| REX_B
)))
5128 if (!i
.types
[0].bitfield
.control
5129 && !i
.types
[1].bitfield
.control
)
5131 i
.rex
&= ~(REX_R
| REX_B
);
5132 add_prefix (LOCK_PREFIX_OPCODE
);
5136 { /* If it's not 2 reg operands... */
5141 unsigned int fake_zero_displacement
= 0;
5144 for (op
= 0; op
< i
.operands
; op
++)
5145 if (operand_type_check (i
.types
[op
], anymem
))
5147 gas_assert (op
< i
.operands
);
5151 if (i
.base_reg
== 0)
5154 if (!i
.disp_operands
)
5155 fake_zero_displacement
= 1;
5156 if (i
.index_reg
== 0)
5158 /* Operand is just <disp> */
5159 if (flag_code
== CODE_64BIT
)
5161 /* 64bit mode overwrites the 32bit absolute
5162 addressing by RIP relative addressing and
5163 absolute addressing is encoded by one of the
5164 redundant SIB forms. */
5165 i
.rm
.regmem
= ESCAPE_TO_TWO_BYTE_ADDRESSING
;
5166 i
.sib
.base
= NO_BASE_REGISTER
;
5167 i
.sib
.index
= NO_INDEX_REGISTER
;
5168 i
.types
[op
] = ((i
.prefix
[ADDR_PREFIX
] == 0)
5169 ? disp32s
: disp32
);
5171 else if ((flag_code
== CODE_16BIT
)
5172 ^ (i
.prefix
[ADDR_PREFIX
] != 0))
5174 i
.rm
.regmem
= NO_BASE_REGISTER_16
;
5175 i
.types
[op
] = disp16
;
5179 i
.rm
.regmem
= NO_BASE_REGISTER
;
5180 i
.types
[op
] = disp32
;
5183 else /* !i.base_reg && i.index_reg */
5185 if (i
.index_reg
->reg_num
== RegEiz
5186 || i
.index_reg
->reg_num
== RegRiz
)
5187 i
.sib
.index
= NO_INDEX_REGISTER
;
5189 i
.sib
.index
= i
.index_reg
->reg_num
;
5190 i
.sib
.base
= NO_BASE_REGISTER
;
5191 i
.sib
.scale
= i
.log2_scale_factor
;
5192 i
.rm
.regmem
= ESCAPE_TO_TWO_BYTE_ADDRESSING
;
5193 i
.types
[op
].bitfield
.disp8
= 0;
5194 i
.types
[op
].bitfield
.disp16
= 0;
5195 i
.types
[op
].bitfield
.disp64
= 0;
5196 if (flag_code
!= CODE_64BIT
)
5198 /* Must be 32 bit */
5199 i
.types
[op
].bitfield
.disp32
= 1;
5200 i
.types
[op
].bitfield
.disp32s
= 0;
5204 i
.types
[op
].bitfield
.disp32
= 0;
5205 i
.types
[op
].bitfield
.disp32s
= 1;
5207 if ((i
.index_reg
->reg_flags
& RegRex
) != 0)
5211 /* RIP addressing for 64bit mode. */
5212 else if (i
.base_reg
->reg_num
== RegRip
||
5213 i
.base_reg
->reg_num
== RegEip
)
5215 i
.rm
.regmem
= NO_BASE_REGISTER
;
5216 i
.types
[op
].bitfield
.disp8
= 0;
5217 i
.types
[op
].bitfield
.disp16
= 0;
5218 i
.types
[op
].bitfield
.disp32
= 0;
5219 i
.types
[op
].bitfield
.disp32s
= 1;
5220 i
.types
[op
].bitfield
.disp64
= 0;
5221 i
.flags
[op
] |= Operand_PCrel
;
5222 if (! i
.disp_operands
)
5223 fake_zero_displacement
= 1;
5225 else if (i
.base_reg
->reg_type
.bitfield
.reg16
)
5227 switch (i
.base_reg
->reg_num
)
5230 if (i
.index_reg
== 0)
5232 else /* (%bx,%si) -> 0, or (%bx,%di) -> 1 */
5233 i
.rm
.regmem
= i
.index_reg
->reg_num
- 6;
5237 if (i
.index_reg
== 0)
5240 if (operand_type_check (i
.types
[op
], disp
) == 0)
5242 /* fake (%bp) into 0(%bp) */
5243 i
.types
[op
].bitfield
.disp8
= 1;
5244 fake_zero_displacement
= 1;
5247 else /* (%bp,%si) -> 2, or (%bp,%di) -> 3 */
5248 i
.rm
.regmem
= i
.index_reg
->reg_num
- 6 + 2;
5250 default: /* (%si) -> 4 or (%di) -> 5 */
5251 i
.rm
.regmem
= i
.base_reg
->reg_num
- 6 + 4;
5253 i
.rm
.mode
= mode_from_disp_size (i
.types
[op
]);
5255 else /* i.base_reg and 32/64 bit mode */
5257 if (flag_code
== CODE_64BIT
5258 && operand_type_check (i
.types
[op
], disp
))
5260 i386_operand_type temp
;
5261 operand_type_set (&temp
, 0);
5262 temp
.bitfield
.disp8
= i
.types
[op
].bitfield
.disp8
;
5264 if (i
.prefix
[ADDR_PREFIX
] == 0)
5265 i
.types
[op
].bitfield
.disp32s
= 1;
5267 i
.types
[op
].bitfield
.disp32
= 1;
5270 i
.rm
.regmem
= i
.base_reg
->reg_num
;
5271 if ((i
.base_reg
->reg_flags
& RegRex
) != 0)
5273 i
.sib
.base
= i
.base_reg
->reg_num
;
5274 /* x86-64 ignores REX prefix bit here to avoid decoder
5276 if ((i
.base_reg
->reg_num
& 7) == EBP_REG_NUM
)
5279 if (i
.disp_operands
== 0)
5281 fake_zero_displacement
= 1;
5282 i
.types
[op
].bitfield
.disp8
= 1;
5285 else if (i
.base_reg
->reg_num
== ESP_REG_NUM
)
5289 i
.sib
.scale
= i
.log2_scale_factor
;
5290 if (i
.index_reg
== 0)
5292 /* <disp>(%esp) becomes two byte modrm with no index
5293 register. We've already stored the code for esp
5294 in i.rm.regmem ie. ESCAPE_TO_TWO_BYTE_ADDRESSING.
5295 Any base register besides %esp will not use the
5296 extra modrm byte. */
5297 i
.sib
.index
= NO_INDEX_REGISTER
;
5301 if (i
.index_reg
->reg_num
== RegEiz
5302 || i
.index_reg
->reg_num
== RegRiz
)
5303 i
.sib
.index
= NO_INDEX_REGISTER
;
5305 i
.sib
.index
= i
.index_reg
->reg_num
;
5306 i
.rm
.regmem
= ESCAPE_TO_TWO_BYTE_ADDRESSING
;
5307 if ((i
.index_reg
->reg_flags
& RegRex
) != 0)
5312 && (i
.reloc
[op
] == BFD_RELOC_386_TLS_DESC_CALL
5313 || i
.reloc
[op
] == BFD_RELOC_X86_64_TLSDESC_CALL
))
5316 i
.rm
.mode
= mode_from_disp_size (i
.types
[op
]);
5319 if (fake_zero_displacement
)
5321 /* Fakes a zero displacement assuming that i.types[op]
5322 holds the correct displacement size. */
5325 gas_assert (i
.op
[op
].disps
== 0);
5326 exp
= &disp_expressions
[i
.disp_operands
++];
5327 i
.op
[op
].disps
= exp
;
5328 exp
->X_op
= O_constant
;
5329 exp
->X_add_number
= 0;
5330 exp
->X_add_symbol
= (symbolS
*) 0;
5331 exp
->X_op_symbol
= (symbolS
*) 0;
5339 if (i
.tm
.opcode_modifier
.vexsources
== XOP2SOURCES
)
5341 if (operand_type_check (i
.types
[0], imm
))
5342 i
.vex
.register_specifier
= NULL
;
5345 /* VEX.vvvv encodes one of the sources when the first
5346 operand is not an immediate. */
5347 if (i
.tm
.opcode_modifier
.vexw
== VEXW0
)
5348 i
.vex
.register_specifier
= i
.op
[0].regs
;
5350 i
.vex
.register_specifier
= i
.op
[1].regs
;
5353 /* Destination is a XMM register encoded in the ModRM.reg
5355 i
.rm
.reg
= i
.op
[2].regs
->reg_num
;
5356 if ((i
.op
[2].regs
->reg_flags
& RegRex
) != 0)
5359 /* ModRM.rm and VEX.B encodes the other source. */
5360 if (!i
.mem_operands
)
5364 if (i
.tm
.opcode_modifier
.vexw
== VEXW0
)
5365 i
.rm
.regmem
= i
.op
[1].regs
->reg_num
;
5367 i
.rm
.regmem
= i
.op
[0].regs
->reg_num
;
5369 if ((i
.op
[1].regs
->reg_flags
& RegRex
) != 0)
5373 else if (i
.tm
.opcode_modifier
.vexvvvv
== VEXLWP
)
5375 i
.vex
.register_specifier
= i
.op
[2].regs
;
5376 if (!i
.mem_operands
)
5379 i
.rm
.regmem
= i
.op
[1].regs
->reg_num
;
5380 if ((i
.op
[1].regs
->reg_flags
& RegRex
) != 0)
5384 /* Fill in i.rm.reg or i.rm.regmem field with register operand
5385 (if any) based on i.tm.extension_opcode. Again, we must be
5386 careful to make sure that segment/control/debug/test/MMX
5387 registers are coded into the i.rm.reg field. */
5388 else if (i
.reg_operands
)
5391 unsigned int vex_reg
= ~0;
5393 for (op
= 0; op
< i
.operands
; op
++)
5394 if (i
.types
[op
].bitfield
.reg8
5395 || i
.types
[op
].bitfield
.reg16
5396 || i
.types
[op
].bitfield
.reg32
5397 || i
.types
[op
].bitfield
.reg64
5398 || i
.types
[op
].bitfield
.regmmx
5399 || i
.types
[op
].bitfield
.regxmm
5400 || i
.types
[op
].bitfield
.regymm
5401 || i
.types
[op
].bitfield
.sreg2
5402 || i
.types
[op
].bitfield
.sreg3
5403 || i
.types
[op
].bitfield
.control
5404 || i
.types
[op
].bitfield
.debug
5405 || i
.types
[op
].bitfield
.test
)
5410 else if (i
.tm
.opcode_modifier
.vexvvvv
== VEXXDS
)
5412 /* For instructions with VexNDS, the register-only
5413 source operand is encoded in VEX prefix. */
5414 gas_assert (mem
!= (unsigned int) ~0);
5419 gas_assert (op
< i
.operands
);
5424 gas_assert (vex_reg
< i
.operands
);
5427 else if (i
.tm
.opcode_modifier
.vexvvvv
== VEXNDD
)
5429 /* For instructions with VexNDD, there should be
5430 no memory operand and the register destination
5431 is encoded in VEX prefix. */
5432 gas_assert (i
.mem_operands
== 0
5433 && (op
+ 2) == i
.operands
);
5437 gas_assert (op
< i
.operands
);
5439 if (vex_reg
!= (unsigned int) ~0)
5441 gas_assert (i
.reg_operands
== 2);
5443 if (!operand_type_equal (&i
.tm
.operand_types
[vex_reg
],
5445 && !operand_type_equal (&i
.tm
.operand_types
[vex_reg
],
5449 i
.vex
.register_specifier
= i
.op
[vex_reg
].regs
;
5452 /* Don't set OP operand twice. */
5455 /* If there is an extension opcode to put here, the
5456 register number must be put into the regmem field. */
5457 if (i
.tm
.extension_opcode
!= None
)
5459 i
.rm
.regmem
= i
.op
[op
].regs
->reg_num
;
5460 if ((i
.op
[op
].regs
->reg_flags
& RegRex
) != 0)
5465 i
.rm
.reg
= i
.op
[op
].regs
->reg_num
;
5466 if ((i
.op
[op
].regs
->reg_flags
& RegRex
) != 0)
5471 /* Now, if no memory operand has set i.rm.mode = 0, 1, 2 we
5472 must set it to 3 to indicate this is a register operand
5473 in the regmem field. */
5474 if (!i
.mem_operands
)
5478 /* Fill in i.rm.reg field with extension opcode (if any). */
5479 if (i
.tm
.extension_opcode
!= None
)
5480 i
.rm
.reg
= i
.tm
.extension_opcode
;
5486 output_branch (void)
5491 relax_substateT subtype
;
5496 if (flag_code
== CODE_16BIT
)
5500 if (i
.prefix
[DATA_PREFIX
] != 0)
5506 /* Pentium4 branch hints. */
5507 if (i
.prefix
[SEG_PREFIX
] == CS_PREFIX_OPCODE
/* not taken */
5508 || i
.prefix
[SEG_PREFIX
] == DS_PREFIX_OPCODE
/* taken */)
5513 if (i
.prefix
[REX_PREFIX
] != 0)
5519 if (i
.prefixes
!= 0 && !intel_syntax
)
5520 as_warn (_("skipping prefixes on this instruction"));
5522 /* It's always a symbol; End frag & setup for relax.
5523 Make sure there is enough room in this frag for the largest
5524 instruction we may generate in md_convert_frag. This is 2
5525 bytes for the opcode and room for the prefix and largest
5527 frag_grow (prefix
+ 2 + 4);
5528 /* Prefix and 1 opcode byte go in fr_fix. */
5529 p
= frag_more (prefix
+ 1);
5530 if (i
.prefix
[DATA_PREFIX
] != 0)
5531 *p
++ = DATA_PREFIX_OPCODE
;
5532 if (i
.prefix
[SEG_PREFIX
] == CS_PREFIX_OPCODE
5533 || i
.prefix
[SEG_PREFIX
] == DS_PREFIX_OPCODE
)
5534 *p
++ = i
.prefix
[SEG_PREFIX
];
5535 if (i
.prefix
[REX_PREFIX
] != 0)
5536 *p
++ = i
.prefix
[REX_PREFIX
];
5537 *p
= i
.tm
.base_opcode
;
5539 if ((unsigned char) *p
== JUMP_PC_RELATIVE
)
5540 subtype
= ENCODE_RELAX_STATE (UNCOND_JUMP
, SMALL
);
5541 else if (cpu_arch_flags
.bitfield
.cpui386
)
5542 subtype
= ENCODE_RELAX_STATE (COND_JUMP
, SMALL
);
5544 subtype
= ENCODE_RELAX_STATE (COND_JUMP86
, SMALL
);
5547 sym
= i
.op
[0].disps
->X_add_symbol
;
5548 off
= i
.op
[0].disps
->X_add_number
;
5550 if (i
.op
[0].disps
->X_op
!= O_constant
5551 && i
.op
[0].disps
->X_op
!= O_symbol
)
5553 /* Handle complex expressions. */
5554 sym
= make_expr_symbol (i
.op
[0].disps
);
5558 /* 1 possible extra opcode + 4 byte displacement go in var part.
5559 Pass reloc in fr_var. */
5560 frag_var (rs_machine_dependent
, 5, i
.reloc
[0], subtype
, sym
, off
, p
);
5570 if (i
.tm
.opcode_modifier
.jumpbyte
)
5572 /* This is a loop or jecxz type instruction. */
5574 if (i
.prefix
[ADDR_PREFIX
] != 0)
5576 FRAG_APPEND_1_CHAR (ADDR_PREFIX_OPCODE
);
5579 /* Pentium4 branch hints. */
5580 if (i
.prefix
[SEG_PREFIX
] == CS_PREFIX_OPCODE
/* not taken */
5581 || i
.prefix
[SEG_PREFIX
] == DS_PREFIX_OPCODE
/* taken */)
5583 FRAG_APPEND_1_CHAR (i
.prefix
[SEG_PREFIX
]);
5592 if (flag_code
== CODE_16BIT
)
5595 if (i
.prefix
[DATA_PREFIX
] != 0)
5597 FRAG_APPEND_1_CHAR (DATA_PREFIX_OPCODE
);
5607 if (i
.prefix
[REX_PREFIX
] != 0)
5609 FRAG_APPEND_1_CHAR (i
.prefix
[REX_PREFIX
]);
5613 if (i
.prefixes
!= 0 && !intel_syntax
)
5614 as_warn (_("skipping prefixes on this instruction"));
5616 p
= frag_more (1 + size
);
5617 *p
++ = i
.tm
.base_opcode
;
5619 fixP
= fix_new_exp (frag_now
, p
- frag_now
->fr_literal
, size
,
5620 i
.op
[0].disps
, 1, reloc (size
, 1, 1, i
.reloc
[0]));
5622 /* All jumps handled here are signed, but don't use a signed limit
5623 check for 32 and 16 bit jumps as we want to allow wrap around at
5624 4G and 64k respectively. */
5626 fixP
->fx_signed
= 1;
5630 output_interseg_jump (void)
5638 if (flag_code
== CODE_16BIT
)
5642 if (i
.prefix
[DATA_PREFIX
] != 0)
5648 if (i
.prefix
[REX_PREFIX
] != 0)
5658 if (i
.prefixes
!= 0 && !intel_syntax
)
5659 as_warn (_("skipping prefixes on this instruction"));
5661 /* 1 opcode; 2 segment; offset */
5662 p
= frag_more (prefix
+ 1 + 2 + size
);
5664 if (i
.prefix
[DATA_PREFIX
] != 0)
5665 *p
++ = DATA_PREFIX_OPCODE
;
5667 if (i
.prefix
[REX_PREFIX
] != 0)
5668 *p
++ = i
.prefix
[REX_PREFIX
];
5670 *p
++ = i
.tm
.base_opcode
;
5671 if (i
.op
[1].imms
->X_op
== O_constant
)
5673 offsetT n
= i
.op
[1].imms
->X_add_number
;
5676 && !fits_in_unsigned_word (n
)
5677 && !fits_in_signed_word (n
))
5679 as_bad (_("16-bit jump out of range"));
5682 md_number_to_chars (p
, n
, size
);
5685 fix_new_exp (frag_now
, p
- frag_now
->fr_literal
, size
,
5686 i
.op
[1].imms
, 0, reloc (size
, 0, 0, i
.reloc
[1]));
5687 if (i
.op
[0].imms
->X_op
!= O_constant
)
5688 as_bad (_("can't handle non absolute segment in `%s'"),
5690 md_number_to_chars (p
+ size
, (valueT
) i
.op
[0].imms
->X_add_number
, 2);
5696 fragS
*insn_start_frag
;
5697 offsetT insn_start_off
;
5699 /* Tie dwarf2 debug info to the address at the start of the insn.
5700 We can't do this after the insn has been output as the current
5701 frag may have been closed off. eg. by frag_var. */
5702 dwarf2_emit_insn (0);
5704 insn_start_frag
= frag_now
;
5705 insn_start_off
= frag_now_fix ();
5708 if (i
.tm
.opcode_modifier
.jump
)
5710 else if (i
.tm
.opcode_modifier
.jumpbyte
5711 || i
.tm
.opcode_modifier
.jumpdword
)
5713 else if (i
.tm
.opcode_modifier
.jumpintersegment
)
5714 output_interseg_jump ();
5717 /* Output normal instructions here. */
5721 unsigned int prefix
;
5723 /* Since the VEX prefix contains the implicit prefix, we don't
5724 need the explicit prefix. */
5725 if (!i
.tm
.opcode_modifier
.vex
)
5727 switch (i
.tm
.opcode_length
)
5730 if (i
.tm
.base_opcode
& 0xff000000)
5732 prefix
= (i
.tm
.base_opcode
>> 24) & 0xff;
5737 if ((i
.tm
.base_opcode
& 0xff0000) != 0)
5739 prefix
= (i
.tm
.base_opcode
>> 16) & 0xff;
5740 if (i
.tm
.cpu_flags
.bitfield
.cpupadlock
)
5743 if (prefix
!= REPE_PREFIX_OPCODE
5744 || (i
.prefix
[REP_PREFIX
]
5745 != REPE_PREFIX_OPCODE
))
5746 add_prefix (prefix
);
5749 add_prefix (prefix
);
5758 /* The prefix bytes. */
5759 for (j
= ARRAY_SIZE (i
.prefix
), q
= i
.prefix
; j
> 0; j
--, q
++)
5761 FRAG_APPEND_1_CHAR (*q
);
5764 if (i
.tm
.opcode_modifier
.vex
)
5766 for (j
= 0, q
= i
.prefix
; j
< ARRAY_SIZE (i
.prefix
); j
++, q
++)
5771 /* REX byte is encoded in VEX prefix. */
5775 FRAG_APPEND_1_CHAR (*q
);
5778 /* There should be no other prefixes for instructions
5783 /* Now the VEX prefix. */
5784 p
= frag_more (i
.vex
.length
);
5785 for (j
= 0; j
< i
.vex
.length
; j
++)
5786 p
[j
] = i
.vex
.bytes
[j
];
5789 /* Now the opcode; be careful about word order here! */
5790 if (i
.tm
.opcode_length
== 1)
5792 FRAG_APPEND_1_CHAR (i
.tm
.base_opcode
);
5796 switch (i
.tm
.opcode_length
)
5800 *p
++ = (i
.tm
.base_opcode
>> 16) & 0xff;
5810 /* Put out high byte first: can't use md_number_to_chars! */
5811 *p
++ = (i
.tm
.base_opcode
>> 8) & 0xff;
5812 *p
= i
.tm
.base_opcode
& 0xff;
5815 /* Now the modrm byte and sib byte (if present). */
5816 if (i
.tm
.opcode_modifier
.modrm
)
5818 FRAG_APPEND_1_CHAR ((i
.rm
.regmem
<< 0
5821 /* If i.rm.regmem == ESP (4)
5822 && i.rm.mode != (Register mode)
5824 ==> need second modrm byte. */
5825 if (i
.rm
.regmem
== ESCAPE_TO_TWO_BYTE_ADDRESSING
5827 && !(i
.base_reg
&& i
.base_reg
->reg_type
.bitfield
.reg16
))
5828 FRAG_APPEND_1_CHAR ((i
.sib
.base
<< 0
5830 | i
.sib
.scale
<< 6));
5833 if (i
.disp_operands
)
5834 output_disp (insn_start_frag
, insn_start_off
);
5837 output_imm (insn_start_frag
, insn_start_off
);
5843 pi ("" /*line*/, &i
);
5845 #endif /* DEBUG386 */
5848 /* Return the size of the displacement operand N. */
5851 disp_size (unsigned int n
)
5854 if (i
.types
[n
].bitfield
.disp64
)
5856 else if (i
.types
[n
].bitfield
.disp8
)
5858 else if (i
.types
[n
].bitfield
.disp16
)
5863 /* Return the size of the immediate operand N. */
5866 imm_size (unsigned int n
)
5869 if (i
.types
[n
].bitfield
.imm64
)
5871 else if (i
.types
[n
].bitfield
.imm8
|| i
.types
[n
].bitfield
.imm8s
)
5873 else if (i
.types
[n
].bitfield
.imm16
)
5879 output_disp (fragS
*insn_start_frag
, offsetT insn_start_off
)
5884 for (n
= 0; n
< i
.operands
; n
++)
5886 if (operand_type_check (i
.types
[n
], disp
))
5888 if (i
.op
[n
].disps
->X_op
== O_constant
)
5890 int size
= disp_size (n
);
5893 val
= offset_in_range (i
.op
[n
].disps
->X_add_number
,
5895 p
= frag_more (size
);
5896 md_number_to_chars (p
, val
, size
);
5900 enum bfd_reloc_code_real reloc_type
;
5901 int size
= disp_size (n
);
5902 int sign
= i
.types
[n
].bitfield
.disp32s
;
5903 int pcrel
= (i
.flags
[n
] & Operand_PCrel
) != 0;
5905 /* We can't have 8 bit displacement here. */
5906 gas_assert (!i
.types
[n
].bitfield
.disp8
);
5908 /* The PC relative address is computed relative
5909 to the instruction boundary, so in case immediate
5910 fields follows, we need to adjust the value. */
5911 if (pcrel
&& i
.imm_operands
)
5916 for (n1
= 0; n1
< i
.operands
; n1
++)
5917 if (operand_type_check (i
.types
[n1
], imm
))
5919 /* Only one immediate is allowed for PC
5920 relative address. */
5921 gas_assert (sz
== 0);
5923 i
.op
[n
].disps
->X_add_number
-= sz
;
5925 /* We should find the immediate. */
5926 gas_assert (sz
!= 0);
5929 p
= frag_more (size
);
5930 reloc_type
= reloc (size
, pcrel
, sign
, i
.reloc
[n
]);
5932 && GOT_symbol
== i
.op
[n
].disps
->X_add_symbol
5933 && (((reloc_type
== BFD_RELOC_32
5934 || reloc_type
== BFD_RELOC_X86_64_32S
5935 || (reloc_type
== BFD_RELOC_64
5937 && (i
.op
[n
].disps
->X_op
== O_symbol
5938 || (i
.op
[n
].disps
->X_op
== O_add
5939 && ((symbol_get_value_expression
5940 (i
.op
[n
].disps
->X_op_symbol
)->X_op
)
5942 || reloc_type
== BFD_RELOC_32_PCREL
))
5946 if (insn_start_frag
== frag_now
)
5947 add
= (p
- frag_now
->fr_literal
) - insn_start_off
;
5952 add
= insn_start_frag
->fr_fix
- insn_start_off
;
5953 for (fr
= insn_start_frag
->fr_next
;
5954 fr
&& fr
!= frag_now
; fr
= fr
->fr_next
)
5956 add
+= p
- frag_now
->fr_literal
;
5961 reloc_type
= BFD_RELOC_386_GOTPC
;
5962 i
.op
[n
].imms
->X_add_number
+= add
;
5964 else if (reloc_type
== BFD_RELOC_64
)
5965 reloc_type
= BFD_RELOC_X86_64_GOTPC64
;
5967 /* Don't do the adjustment for x86-64, as there
5968 the pcrel addressing is relative to the _next_
5969 insn, and that is taken care of in other code. */
5970 reloc_type
= BFD_RELOC_X86_64_GOTPC32
;
5972 fix_new_exp (frag_now
, p
- frag_now
->fr_literal
, size
,
5973 i
.op
[n
].disps
, pcrel
, reloc_type
);
5980 output_imm (fragS
*insn_start_frag
, offsetT insn_start_off
)
5985 for (n
= 0; n
< i
.operands
; n
++)
5987 if (operand_type_check (i
.types
[n
], imm
))
5989 if (i
.op
[n
].imms
->X_op
== O_constant
)
5991 int size
= imm_size (n
);
5994 val
= offset_in_range (i
.op
[n
].imms
->X_add_number
,
5996 p
= frag_more (size
);
5997 md_number_to_chars (p
, val
, size
);
6001 /* Not absolute_section.
6002 Need a 32-bit fixup (don't support 8bit
6003 non-absolute imms). Try to support other
6005 enum bfd_reloc_code_real reloc_type
;
6006 int size
= imm_size (n
);
6009 if (i
.types
[n
].bitfield
.imm32s
6010 && (i
.suffix
== QWORD_MNEM_SUFFIX
6011 || (!i
.suffix
&& i
.tm
.opcode_modifier
.no_lsuf
)))
6016 p
= frag_more (size
);
6017 reloc_type
= reloc (size
, 0, sign
, i
.reloc
[n
]);
6019 /* This is tough to explain. We end up with this one if we
6020 * have operands that look like
6021 * "_GLOBAL_OFFSET_TABLE_+[.-.L284]". The goal here is to
6022 * obtain the absolute address of the GOT, and it is strongly
6023 * preferable from a performance point of view to avoid using
6024 * a runtime relocation for this. The actual sequence of
6025 * instructions often look something like:
6030 * addl $_GLOBAL_OFFSET_TABLE_+[.-.L66],%ebx
6032 * The call and pop essentially return the absolute address
6033 * of the label .L66 and store it in %ebx. The linker itself
6034 * will ultimately change the first operand of the addl so
6035 * that %ebx points to the GOT, but to keep things simple, the
6036 * .o file must have this operand set so that it generates not
6037 * the absolute address of .L66, but the absolute address of
6038 * itself. This allows the linker itself simply treat a GOTPC
6039 * relocation as asking for a pcrel offset to the GOT to be
6040 * added in, and the addend of the relocation is stored in the
6041 * operand field for the instruction itself.
6043 * Our job here is to fix the operand so that it would add
6044 * the correct offset so that %ebx would point to itself. The
6045 * thing that is tricky is that .-.L66 will point to the
6046 * beginning of the instruction, so we need to further modify
6047 * the operand so that it will point to itself. There are
6048 * other cases where you have something like:
6050 * .long $_GLOBAL_OFFSET_TABLE_+[.-.L66]
6052 * and here no correction would be required. Internally in
6053 * the assembler we treat operands of this form as not being
6054 * pcrel since the '.' is explicitly mentioned, and I wonder
6055 * whether it would simplify matters to do it this way. Who
6056 * knows. In earlier versions of the PIC patches, the
6057 * pcrel_adjust field was used to store the correction, but
6058 * since the expression is not pcrel, I felt it would be
6059 * confusing to do it this way. */
6061 if ((reloc_type
== BFD_RELOC_32
6062 || reloc_type
== BFD_RELOC_X86_64_32S
6063 || reloc_type
== BFD_RELOC_64
)
6065 && GOT_symbol
== i
.op
[n
].imms
->X_add_symbol
6066 && (i
.op
[n
].imms
->X_op
== O_symbol
6067 || (i
.op
[n
].imms
->X_op
== O_add
6068 && ((symbol_get_value_expression
6069 (i
.op
[n
].imms
->X_op_symbol
)->X_op
)
6074 if (insn_start_frag
== frag_now
)
6075 add
= (p
- frag_now
->fr_literal
) - insn_start_off
;
6080 add
= insn_start_frag
->fr_fix
- insn_start_off
;
6081 for (fr
= insn_start_frag
->fr_next
;
6082 fr
&& fr
!= frag_now
; fr
= fr
->fr_next
)
6084 add
+= p
- frag_now
->fr_literal
;
6088 reloc_type
= BFD_RELOC_386_GOTPC
;
6090 reloc_type
= BFD_RELOC_X86_64_GOTPC32
;
6092 reloc_type
= BFD_RELOC_X86_64_GOTPC64
;
6093 i
.op
[n
].imms
->X_add_number
+= add
;
6095 fix_new_exp (frag_now
, p
- frag_now
->fr_literal
, size
,
6096 i
.op
[n
].imms
, 0, reloc_type
);
6102 /* x86_cons_fix_new is called via the expression parsing code when a
6103 reloc is needed. We use this hook to get the correct .got reloc. */
6104 static enum bfd_reloc_code_real got_reloc
= NO_RELOC
;
6105 static int cons_sign
= -1;
6108 x86_cons_fix_new (fragS
*frag
, unsigned int off
, unsigned int len
,
6111 enum bfd_reloc_code_real r
= reloc (len
, 0, cons_sign
, got_reloc
);
6113 got_reloc
= NO_RELOC
;
6116 if (exp
->X_op
== O_secrel
)
6118 exp
->X_op
= O_symbol
;
6119 r
= BFD_RELOC_32_SECREL
;
6123 fix_new_exp (frag
, off
, len
, exp
, 0, r
);
6126 #if (!defined (OBJ_ELF) && !defined (OBJ_MAYBE_ELF)) || defined (LEX_AT)
6127 # define lex_got(reloc, adjust, types) NULL
6129 /* Parse operands of the form
6130 <symbol>@GOTOFF+<nnn>
6131 and similar .plt or .got references.
6133 If we find one, set up the correct relocation in RELOC and copy the
6134 input string, minus the `@GOTOFF' into a malloc'd buffer for
6135 parsing by the calling routine. Return this buffer, and if ADJUST
6136 is non-null set it to the length of the string we removed from the
6137 input line. Otherwise return NULL. */
6139 lex_got (enum bfd_reloc_code_real
*rel
,
6141 i386_operand_type
*types
)
6143 /* Some of the relocations depend on the size of what field is to
6144 be relocated. But in our callers i386_immediate and i386_displacement
6145 we don't yet know the operand size (this will be set by insn
6146 matching). Hence we record the word32 relocation here,
6147 and adjust the reloc according to the real size in reloc(). */
6148 static const struct {
6150 const enum bfd_reloc_code_real rel
[2];
6151 const i386_operand_type types64
;
6153 { "PLTOFF", { _dummy_first_bfd_reloc_code_real
,
6154 BFD_RELOC_X86_64_PLTOFF64
},
6155 OPERAND_TYPE_IMM64
},
6156 { "PLT", { BFD_RELOC_386_PLT32
,
6157 BFD_RELOC_X86_64_PLT32
},
6158 OPERAND_TYPE_IMM32_32S_DISP32
},
6159 { "GOTPLT", { _dummy_first_bfd_reloc_code_real
,
6160 BFD_RELOC_X86_64_GOTPLT64
},
6161 OPERAND_TYPE_IMM64_DISP64
},
6162 { "GOTOFF", { BFD_RELOC_386_GOTOFF
,
6163 BFD_RELOC_X86_64_GOTOFF64
},
6164 OPERAND_TYPE_IMM64_DISP64
},
6165 { "GOTPCREL", { _dummy_first_bfd_reloc_code_real
,
6166 BFD_RELOC_X86_64_GOTPCREL
},
6167 OPERAND_TYPE_IMM32_32S_DISP32
},
6168 { "TLSGD", { BFD_RELOC_386_TLS_GD
,
6169 BFD_RELOC_X86_64_TLSGD
},
6170 OPERAND_TYPE_IMM32_32S_DISP32
},
6171 { "TLSLDM", { BFD_RELOC_386_TLS_LDM
,
6172 _dummy_first_bfd_reloc_code_real
},
6173 OPERAND_TYPE_NONE
},
6174 { "TLSLD", { _dummy_first_bfd_reloc_code_real
,
6175 BFD_RELOC_X86_64_TLSLD
},
6176 OPERAND_TYPE_IMM32_32S_DISP32
},
6177 { "GOTTPOFF", { BFD_RELOC_386_TLS_IE_32
,
6178 BFD_RELOC_X86_64_GOTTPOFF
},
6179 OPERAND_TYPE_IMM32_32S_DISP32
},
6180 { "TPOFF", { BFD_RELOC_386_TLS_LE_32
,
6181 BFD_RELOC_X86_64_TPOFF32
},
6182 OPERAND_TYPE_IMM32_32S_64_DISP32_64
},
6183 { "NTPOFF", { BFD_RELOC_386_TLS_LE
,
6184 _dummy_first_bfd_reloc_code_real
},
6185 OPERAND_TYPE_NONE
},
6186 { "DTPOFF", { BFD_RELOC_386_TLS_LDO_32
,
6187 BFD_RELOC_X86_64_DTPOFF32
},
6189 OPERAND_TYPE_IMM32_32S_64_DISP32_64
},
6190 { "GOTNTPOFF",{ BFD_RELOC_386_TLS_GOTIE
,
6191 _dummy_first_bfd_reloc_code_real
},
6192 OPERAND_TYPE_NONE
},
6193 { "INDNTPOFF",{ BFD_RELOC_386_TLS_IE
,
6194 _dummy_first_bfd_reloc_code_real
},
6195 OPERAND_TYPE_NONE
},
6196 { "GOT", { BFD_RELOC_386_GOT32
,
6197 BFD_RELOC_X86_64_GOT32
},
6198 OPERAND_TYPE_IMM32_32S_64_DISP32
},
6199 { "TLSDESC", { BFD_RELOC_386_TLS_GOTDESC
,
6200 BFD_RELOC_X86_64_GOTPC32_TLSDESC
},
6201 OPERAND_TYPE_IMM32_32S_DISP32
},
6202 { "TLSCALL", { BFD_RELOC_386_TLS_DESC_CALL
,
6203 BFD_RELOC_X86_64_TLSDESC_CALL
},
6204 OPERAND_TYPE_IMM32_32S_DISP32
},
6212 for (cp
= input_line_pointer
; *cp
!= '@'; cp
++)
6213 if (is_end_of_line
[(unsigned char) *cp
] || *cp
== ',')
6216 for (j
= 0; j
< ARRAY_SIZE (gotrel
); j
++)
6220 len
= strlen (gotrel
[j
].str
);
6221 if (strncasecmp (cp
+ 1, gotrel
[j
].str
, len
) == 0)
6223 if (gotrel
[j
].rel
[object_64bit
] != 0)
6226 char *tmpbuf
, *past_reloc
;
6228 *rel
= gotrel
[j
].rel
[object_64bit
];
6234 if (flag_code
!= CODE_64BIT
)
6236 types
->bitfield
.imm32
= 1;
6237 types
->bitfield
.disp32
= 1;
6240 *types
= gotrel
[j
].types64
;
6243 if (GOT_symbol
== NULL
)
6244 GOT_symbol
= symbol_find_or_make (GLOBAL_OFFSET_TABLE_NAME
);
6246 /* The length of the first part of our input line. */
6247 first
= cp
- input_line_pointer
;
6249 /* The second part goes from after the reloc token until
6250 (and including) an end_of_line char or comma. */
6251 past_reloc
= cp
+ 1 + len
;
6253 while (!is_end_of_line
[(unsigned char) *cp
] && *cp
!= ',')
6255 second
= cp
+ 1 - past_reloc
;
6257 /* Allocate and copy string. The trailing NUL shouldn't
6258 be necessary, but be safe. */
6259 tmpbuf
= (char *) xmalloc (first
+ second
+ 2);
6260 memcpy (tmpbuf
, input_line_pointer
, first
);
6261 if (second
!= 0 && *past_reloc
!= ' ')
6262 /* Replace the relocation token with ' ', so that
6263 errors like foo@GOTOFF1 will be detected. */
6264 tmpbuf
[first
++] = ' ';
6265 memcpy (tmpbuf
+ first
, past_reloc
, second
);
6266 tmpbuf
[first
+ second
] = '\0';
6270 as_bad (_("@%s reloc is not supported with %d-bit output format"),
6271 gotrel
[j
].str
, 1 << (5 + object_64bit
));
6276 /* Might be a symbol version string. Don't as_bad here. */
6281 x86_cons (expressionS
*exp
, int size
)
6283 intel_syntax
= -intel_syntax
;
6285 if (size
== 4 || (object_64bit
&& size
== 8))
6287 /* Handle @GOTOFF and the like in an expression. */
6289 char *gotfree_input_line
;
6292 save
= input_line_pointer
;
6293 gotfree_input_line
= lex_got (&got_reloc
, &adjust
, NULL
);
6294 if (gotfree_input_line
)
6295 input_line_pointer
= gotfree_input_line
;
6299 if (gotfree_input_line
)
6301 /* expression () has merrily parsed up to the end of line,
6302 or a comma - in the wrong buffer. Transfer how far
6303 input_line_pointer has moved to the right buffer. */
6304 input_line_pointer
= (save
6305 + (input_line_pointer
- gotfree_input_line
)
6307 free (gotfree_input_line
);
6308 if (exp
->X_op
== O_constant
6309 || exp
->X_op
== O_absent
6310 || exp
->X_op
== O_illegal
6311 || exp
->X_op
== O_register
6312 || exp
->X_op
== O_big
)
6314 char c
= *input_line_pointer
;
6315 *input_line_pointer
= 0;
6316 as_bad (_("missing or invalid expression `%s'"), save
);
6317 *input_line_pointer
= c
;
6324 intel_syntax
= -intel_syntax
;
6327 i386_intel_simplify (exp
);
6332 signed_cons (int size
)
6334 if (flag_code
== CODE_64BIT
)
6342 pe_directive_secrel (dummy
)
6343 int dummy ATTRIBUTE_UNUSED
;
6350 if (exp
.X_op
== O_symbol
)
6351 exp
.X_op
= O_secrel
;
6353 emit_expr (&exp
, 4);
6355 while (*input_line_pointer
++ == ',');
6357 input_line_pointer
--;
6358 demand_empty_rest_of_line ();
6363 i386_immediate (char *imm_start
)
6365 char *save_input_line_pointer
;
6366 char *gotfree_input_line
;
6369 i386_operand_type types
;
6371 operand_type_set (&types
, ~0);
6373 if (i
.imm_operands
== MAX_IMMEDIATE_OPERANDS
)
6375 as_bad (_("at most %d immediate operands are allowed"),
6376 MAX_IMMEDIATE_OPERANDS
);
6380 exp
= &im_expressions
[i
.imm_operands
++];
6381 i
.op
[this_operand
].imms
= exp
;
6383 if (is_space_char (*imm_start
))
6386 save_input_line_pointer
= input_line_pointer
;
6387 input_line_pointer
= imm_start
;
6389 gotfree_input_line
= lex_got (&i
.reloc
[this_operand
], NULL
, &types
);
6390 if (gotfree_input_line
)
6391 input_line_pointer
= gotfree_input_line
;
6393 exp_seg
= expression (exp
);
6396 if (*input_line_pointer
)
6397 as_bad (_("junk `%s' after expression"), input_line_pointer
);
6399 input_line_pointer
= save_input_line_pointer
;
6400 if (gotfree_input_line
)
6402 free (gotfree_input_line
);
6404 if (exp
->X_op
== O_constant
|| exp
->X_op
== O_register
)
6405 exp
->X_op
= O_illegal
;
6408 return i386_finalize_immediate (exp_seg
, exp
, types
, imm_start
);
6412 i386_finalize_immediate (segT exp_seg ATTRIBUTE_UNUSED
, expressionS
*exp
,
6413 i386_operand_type types
, const char *imm_start
)
6415 if (exp
->X_op
== O_absent
|| exp
->X_op
== O_illegal
|| exp
->X_op
== O_big
)
6418 as_bad (_("missing or invalid immediate expression `%s'"),
6422 else if (exp
->X_op
== O_constant
)
6424 /* Size it properly later. */
6425 i
.types
[this_operand
].bitfield
.imm64
= 1;
6426 /* If BFD64, sign extend val. */
6427 if (!use_rela_relocations
6428 && (exp
->X_add_number
& ~(((addressT
) 2 << 31) - 1)) == 0)
6430 = (exp
->X_add_number
^ ((addressT
) 1 << 31)) - ((addressT
) 1 << 31);
6432 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
6433 else if (OUTPUT_FLAVOR
== bfd_target_aout_flavour
6434 && exp_seg
!= absolute_section
6435 && exp_seg
!= text_section
6436 && exp_seg
!= data_section
6437 && exp_seg
!= bss_section
6438 && exp_seg
!= undefined_section
6439 && !bfd_is_com_section (exp_seg
))
6441 as_bad (_("unimplemented segment %s in operand"), exp_seg
->name
);
6445 else if (!intel_syntax
&& exp
->X_op
== O_register
)
6448 as_bad (_("illegal immediate register operand %s"), imm_start
);
6453 /* This is an address. The size of the address will be
6454 determined later, depending on destination register,
6455 suffix, or the default for the section. */
6456 i
.types
[this_operand
].bitfield
.imm8
= 1;
6457 i
.types
[this_operand
].bitfield
.imm16
= 1;
6458 i
.types
[this_operand
].bitfield
.imm32
= 1;
6459 i
.types
[this_operand
].bitfield
.imm32s
= 1;
6460 i
.types
[this_operand
].bitfield
.imm64
= 1;
6461 i
.types
[this_operand
] = operand_type_and (i
.types
[this_operand
],
6469 i386_scale (char *scale
)
6472 char *save
= input_line_pointer
;
6474 input_line_pointer
= scale
;
6475 val
= get_absolute_expression ();
6480 i
.log2_scale_factor
= 0;
6483 i
.log2_scale_factor
= 1;
6486 i
.log2_scale_factor
= 2;
6489 i
.log2_scale_factor
= 3;
6493 char sep
= *input_line_pointer
;
6495 *input_line_pointer
= '\0';
6496 as_bad (_("expecting scale factor of 1, 2, 4, or 8: got `%s'"),
6498 *input_line_pointer
= sep
;
6499 input_line_pointer
= save
;
6503 if (i
.log2_scale_factor
!= 0 && i
.index_reg
== 0)
6505 as_warn (_("scale factor of %d without an index register"),
6506 1 << i
.log2_scale_factor
);
6507 i
.log2_scale_factor
= 0;
6509 scale
= input_line_pointer
;
6510 input_line_pointer
= save
;
6515 i386_displacement (char *disp_start
, char *disp_end
)
6519 char *save_input_line_pointer
;
6520 char *gotfree_input_line
;
6522 i386_operand_type bigdisp
, types
= anydisp
;
6525 if (i
.disp_operands
== MAX_MEMORY_OPERANDS
)
6527 as_bad (_("at most %d displacement operands are allowed"),
6528 MAX_MEMORY_OPERANDS
);
6532 operand_type_set (&bigdisp
, 0);
6533 if ((i
.types
[this_operand
].bitfield
.jumpabsolute
)
6534 || (!current_templates
->start
->opcode_modifier
.jump
6535 && !current_templates
->start
->opcode_modifier
.jumpdword
))
6537 bigdisp
.bitfield
.disp32
= 1;
6538 override
= (i
.prefix
[ADDR_PREFIX
] != 0);
6539 if (flag_code
== CODE_64BIT
)
6543 bigdisp
.bitfield
.disp32s
= 1;
6544 bigdisp
.bitfield
.disp64
= 1;
6547 else if ((flag_code
== CODE_16BIT
) ^ override
)
6549 bigdisp
.bitfield
.disp32
= 0;
6550 bigdisp
.bitfield
.disp16
= 1;
6555 /* For PC-relative branches, the width of the displacement
6556 is dependent upon data size, not address size. */
6557 override
= (i
.prefix
[DATA_PREFIX
] != 0);
6558 if (flag_code
== CODE_64BIT
)
6560 if (override
|| i
.suffix
== WORD_MNEM_SUFFIX
)
6561 bigdisp
.bitfield
.disp16
= 1;
6564 bigdisp
.bitfield
.disp32
= 1;
6565 bigdisp
.bitfield
.disp32s
= 1;
6571 override
= (i
.suffix
== (flag_code
!= CODE_16BIT
6573 : LONG_MNEM_SUFFIX
));
6574 bigdisp
.bitfield
.disp32
= 1;
6575 if ((flag_code
== CODE_16BIT
) ^ override
)
6577 bigdisp
.bitfield
.disp32
= 0;
6578 bigdisp
.bitfield
.disp16
= 1;
6582 i
.types
[this_operand
] = operand_type_or (i
.types
[this_operand
],
6585 exp
= &disp_expressions
[i
.disp_operands
];
6586 i
.op
[this_operand
].disps
= exp
;
6588 save_input_line_pointer
= input_line_pointer
;
6589 input_line_pointer
= disp_start
;
6590 END_STRING_AND_SAVE (disp_end
);
6592 #ifndef GCC_ASM_O_HACK
6593 #define GCC_ASM_O_HACK 0
6596 END_STRING_AND_SAVE (disp_end
+ 1);
6597 if (i
.types
[this_operand
].bitfield
.baseIndex
6598 && displacement_string_end
[-1] == '+')
6600 /* This hack is to avoid a warning when using the "o"
6601 constraint within gcc asm statements.
6604 #define _set_tssldt_desc(n,addr,limit,type) \
6605 __asm__ __volatile__ ( \
6607 "movw %w1,2+%0\n\t" \
6609 "movb %b1,4+%0\n\t" \
6610 "movb %4,5+%0\n\t" \
6611 "movb $0,6+%0\n\t" \
6612 "movb %h1,7+%0\n\t" \
6614 : "=o"(*(n)) : "q" (addr), "ri"(limit), "i"(type))
6616 This works great except that the output assembler ends
6617 up looking a bit weird if it turns out that there is
6618 no offset. You end up producing code that looks like:
6631 So here we provide the missing zero. */
6633 *displacement_string_end
= '0';
6636 gotfree_input_line
= lex_got (&i
.reloc
[this_operand
], NULL
, &types
);
6637 if (gotfree_input_line
)
6638 input_line_pointer
= gotfree_input_line
;
6640 exp_seg
= expression (exp
);
6643 if (*input_line_pointer
)
6644 as_bad (_("junk `%s' after expression"), input_line_pointer
);
6646 RESTORE_END_STRING (disp_end
+ 1);
6648 input_line_pointer
= save_input_line_pointer
;
6649 if (gotfree_input_line
)
6651 free (gotfree_input_line
);
6653 if (exp
->X_op
== O_constant
|| exp
->X_op
== O_register
)
6654 exp
->X_op
= O_illegal
;
6657 ret
= i386_finalize_displacement (exp_seg
, exp
, types
, disp_start
);
6659 RESTORE_END_STRING (disp_end
);
6665 i386_finalize_displacement (segT exp_seg ATTRIBUTE_UNUSED
, expressionS
*exp
,
6666 i386_operand_type types
, const char *disp_start
)
6668 i386_operand_type bigdisp
;
6671 /* We do this to make sure that the section symbol is in
6672 the symbol table. We will ultimately change the relocation
6673 to be relative to the beginning of the section. */
6674 if (i
.reloc
[this_operand
] == BFD_RELOC_386_GOTOFF
6675 || i
.reloc
[this_operand
] == BFD_RELOC_X86_64_GOTPCREL
6676 || i
.reloc
[this_operand
] == BFD_RELOC_X86_64_GOTOFF64
)
6678 if (exp
->X_op
!= O_symbol
)
6681 if (S_IS_LOCAL (exp
->X_add_symbol
)
6682 && S_GET_SEGMENT (exp
->X_add_symbol
) != undefined_section
)
6683 section_symbol (S_GET_SEGMENT (exp
->X_add_symbol
));
6684 exp
->X_op
= O_subtract
;
6685 exp
->X_op_symbol
= GOT_symbol
;
6686 if (i
.reloc
[this_operand
] == BFD_RELOC_X86_64_GOTPCREL
)
6687 i
.reloc
[this_operand
] = BFD_RELOC_32_PCREL
;
6688 else if (i
.reloc
[this_operand
] == BFD_RELOC_X86_64_GOTOFF64
)
6689 i
.reloc
[this_operand
] = BFD_RELOC_64
;
6691 i
.reloc
[this_operand
] = BFD_RELOC_32
;
6694 else if (exp
->X_op
== O_absent
6695 || exp
->X_op
== O_illegal
6696 || exp
->X_op
== O_big
)
6699 as_bad (_("missing or invalid displacement expression `%s'"),
6704 else if (flag_code
== CODE_64BIT
6705 && !i
.prefix
[ADDR_PREFIX
]
6706 && exp
->X_op
== O_constant
)
6708 /* Since displacement is signed extended to 64bit, don't allow
6709 disp32 and turn off disp32s if they are out of range. */
6710 i
.types
[this_operand
].bitfield
.disp32
= 0;
6711 if (!fits_in_signed_long (exp
->X_add_number
))
6713 i
.types
[this_operand
].bitfield
.disp32s
= 0;
6714 if (i
.types
[this_operand
].bitfield
.baseindex
)
6716 as_bad (_("0x%lx out range of signed 32bit displacement"),
6717 (long) exp
->X_add_number
);
6723 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
6724 else if (exp
->X_op
!= O_constant
6725 && OUTPUT_FLAVOR
== bfd_target_aout_flavour
6726 && exp_seg
!= absolute_section
6727 && exp_seg
!= text_section
6728 && exp_seg
!= data_section
6729 && exp_seg
!= bss_section
6730 && exp_seg
!= undefined_section
6731 && !bfd_is_com_section (exp_seg
))
6733 as_bad (_("unimplemented segment %s in operand"), exp_seg
->name
);
6738 /* Check if this is a displacement only operand. */
6739 bigdisp
= i
.types
[this_operand
];
6740 bigdisp
.bitfield
.disp8
= 0;
6741 bigdisp
.bitfield
.disp16
= 0;
6742 bigdisp
.bitfield
.disp32
= 0;
6743 bigdisp
.bitfield
.disp32s
= 0;
6744 bigdisp
.bitfield
.disp64
= 0;
6745 if (operand_type_all_zero (&bigdisp
))
6746 i
.types
[this_operand
] = operand_type_and (i
.types
[this_operand
],
6752 /* Make sure the memory operand we've been dealt is valid.
6753 Return 1 on success, 0 on a failure. */
6756 i386_index_check (const char *operand_string
)
6759 const char *kind
= "base/index";
6760 #if INFER_ADDR_PREFIX
6766 if (current_templates
->start
->opcode_modifier
.isstring
6767 && !current_templates
->start
->opcode_modifier
.immext
6768 && (current_templates
->end
[-1].opcode_modifier
.isstring
6771 /* Memory operands of string insns are special in that they only allow
6772 a single register (rDI, rSI, or rBX) as their memory address. */
6773 unsigned int expected
;
6775 kind
= "string address";
6777 if (current_templates
->start
->opcode_modifier
.w
)
6779 i386_operand_type type
= current_templates
->end
[-1].operand_types
[0];
6781 if (!type
.bitfield
.baseindex
6782 || ((!i
.mem_operands
!= !intel_syntax
)
6783 && current_templates
->end
[-1].operand_types
[1]
6784 .bitfield
.baseindex
))
6785 type
= current_templates
->end
[-1].operand_types
[1];
6786 expected
= type
.bitfield
.esseg
? 7 /* rDI */ : 6 /* rSI */;
6789 expected
= 3 /* rBX */;
6791 if (!i
.base_reg
|| i
.index_reg
6792 || operand_type_check (i
.types
[this_operand
], disp
))
6794 else if (!(flag_code
== CODE_64BIT
6795 ? i
.prefix
[ADDR_PREFIX
]
6796 ? i
.base_reg
->reg_type
.bitfield
.reg32
6797 : i
.base_reg
->reg_type
.bitfield
.reg64
6798 : (flag_code
== CODE_16BIT
) ^ !i
.prefix
[ADDR_PREFIX
]
6799 ? i
.base_reg
->reg_type
.bitfield
.reg32
6800 : i
.base_reg
->reg_type
.bitfield
.reg16
))
6802 else if (i
.base_reg
->reg_num
!= expected
)
6809 for (j
= 0; j
< i386_regtab_size
; ++j
)
6810 if ((flag_code
== CODE_64BIT
6811 ? i
.prefix
[ADDR_PREFIX
]
6812 ? i386_regtab
[j
].reg_type
.bitfield
.reg32
6813 : i386_regtab
[j
].reg_type
.bitfield
.reg64
6814 : (flag_code
== CODE_16BIT
) ^ !i
.prefix
[ADDR_PREFIX
]
6815 ? i386_regtab
[j
].reg_type
.bitfield
.reg32
6816 : i386_regtab
[j
].reg_type
.bitfield
.reg16
)
6817 && i386_regtab
[j
].reg_num
== expected
)
6819 gas_assert (j
< i386_regtab_size
);
6820 as_warn (_("`%s' is not valid here (expected `%c%s%s%c')"),
6822 intel_syntax
? '[' : '(',
6824 i386_regtab
[j
].reg_name
,
6825 intel_syntax
? ']' : ')');
6829 else if (flag_code
== CODE_64BIT
)
6832 && ((i
.prefix
[ADDR_PREFIX
] == 0
6833 && !i
.base_reg
->reg_type
.bitfield
.reg64
)
6834 || (i
.prefix
[ADDR_PREFIX
]
6835 && !i
.base_reg
->reg_type
.bitfield
.reg32
))
6837 || i
.base_reg
->reg_num
!=
6838 (i
.prefix
[ADDR_PREFIX
] == 0 ? RegRip
: RegEip
)))
6840 && (!i
.index_reg
->reg_type
.bitfield
.baseindex
6841 || (i
.prefix
[ADDR_PREFIX
] == 0
6842 && i
.index_reg
->reg_num
!= RegRiz
6843 && !i
.index_reg
->reg_type
.bitfield
.reg64
6845 || (i
.prefix
[ADDR_PREFIX
]
6846 && i
.index_reg
->reg_num
!= RegEiz
6847 && !i
.index_reg
->reg_type
.bitfield
.reg32
))))
6852 if ((flag_code
== CODE_16BIT
) ^ (i
.prefix
[ADDR_PREFIX
] != 0))
6856 && (!i
.base_reg
->reg_type
.bitfield
.reg16
6857 || !i
.base_reg
->reg_type
.bitfield
.baseindex
))
6859 && (!i
.index_reg
->reg_type
.bitfield
.reg16
6860 || !i
.index_reg
->reg_type
.bitfield
.baseindex
6862 && i
.base_reg
->reg_num
< 6
6863 && i
.index_reg
->reg_num
>= 6
6864 && i
.log2_scale_factor
== 0))))
6871 && !i
.base_reg
->reg_type
.bitfield
.reg32
)
6873 && ((!i
.index_reg
->reg_type
.bitfield
.reg32
6874 && i
.index_reg
->reg_num
!= RegEiz
)
6875 || !i
.index_reg
->reg_type
.bitfield
.baseindex
)))
6881 #if INFER_ADDR_PREFIX
6882 if (!i
.mem_operands
&& !i
.prefix
[ADDR_PREFIX
])
6884 i
.prefix
[ADDR_PREFIX
] = ADDR_PREFIX_OPCODE
;
6886 /* Change the size of any displacement too. At most one of
6887 Disp16 or Disp32 is set.
6888 FIXME. There doesn't seem to be any real need for separate
6889 Disp16 and Disp32 flags. The same goes for Imm16 and Imm32.
6890 Removing them would probably clean up the code quite a lot. */
6891 if (flag_code
!= CODE_64BIT
6892 && (i
.types
[this_operand
].bitfield
.disp16
6893 || i
.types
[this_operand
].bitfield
.disp32
))
6894 i
.types
[this_operand
]
6895 = operand_type_xor (i
.types
[this_operand
], disp16_32
);
6900 as_bad (_("`%s' is not a valid %s expression"),
6905 as_bad (_("`%s' is not a valid %s-bit %s expression"),
6907 flag_code_names
[i
.prefix
[ADDR_PREFIX
]
6908 ? flag_code
== CODE_32BIT
6917 /* Parse OPERAND_STRING into the i386_insn structure I. Returns zero
6921 i386_att_operand (char *operand_string
)
6925 char *op_string
= operand_string
;
6927 if (is_space_char (*op_string
))
6930 /* We check for an absolute prefix (differentiating,
6931 for example, 'jmp pc_relative_label' from 'jmp *absolute_label'. */
6932 if (*op_string
== ABSOLUTE_PREFIX
)
6935 if (is_space_char (*op_string
))
6937 i
.types
[this_operand
].bitfield
.jumpabsolute
= 1;
6940 /* Check if operand is a register. */
6941 if ((r
= parse_register (op_string
, &end_op
)) != NULL
)
6943 i386_operand_type temp
;
6945 /* Check for a segment override by searching for ':' after a
6946 segment register. */
6948 if (is_space_char (*op_string
))
6950 if (*op_string
== ':'
6951 && (r
->reg_type
.bitfield
.sreg2
6952 || r
->reg_type
.bitfield
.sreg3
))
6957 i
.seg
[i
.mem_operands
] = &es
;
6960 i
.seg
[i
.mem_operands
] = &cs
;
6963 i
.seg
[i
.mem_operands
] = &ss
;
6966 i
.seg
[i
.mem_operands
] = &ds
;
6969 i
.seg
[i
.mem_operands
] = &fs
;
6972 i
.seg
[i
.mem_operands
] = &gs
;
6976 /* Skip the ':' and whitespace. */
6978 if (is_space_char (*op_string
))
6981 if (!is_digit_char (*op_string
)
6982 && !is_identifier_char (*op_string
)
6983 && *op_string
!= '('
6984 && *op_string
!= ABSOLUTE_PREFIX
)
6986 as_bad (_("bad memory operand `%s'"), op_string
);
6989 /* Handle case of %es:*foo. */
6990 if (*op_string
== ABSOLUTE_PREFIX
)
6993 if (is_space_char (*op_string
))
6995 i
.types
[this_operand
].bitfield
.jumpabsolute
= 1;
6997 goto do_memory_reference
;
7001 as_bad (_("junk `%s' after register"), op_string
);
7005 temp
.bitfield
.baseindex
= 0;
7006 i
.types
[this_operand
] = operand_type_or (i
.types
[this_operand
],
7008 i
.types
[this_operand
].bitfield
.unspecified
= 0;
7009 i
.op
[this_operand
].regs
= r
;
7012 else if (*op_string
== REGISTER_PREFIX
)
7014 as_bad (_("bad register name `%s'"), op_string
);
7017 else if (*op_string
== IMMEDIATE_PREFIX
)
7020 if (i
.types
[this_operand
].bitfield
.jumpabsolute
)
7022 as_bad (_("immediate operand illegal with absolute jump"));
7025 if (!i386_immediate (op_string
))
7028 else if (is_digit_char (*op_string
)
7029 || is_identifier_char (*op_string
)
7030 || *op_string
== '(')
7032 /* This is a memory reference of some sort. */
7035 /* Start and end of displacement string expression (if found). */
7036 char *displacement_string_start
;
7037 char *displacement_string_end
;
7039 do_memory_reference
:
7040 if ((i
.mem_operands
== 1
7041 && !current_templates
->start
->opcode_modifier
.isstring
)
7042 || i
.mem_operands
== 2)
7044 as_bad (_("too many memory references for `%s'"),
7045 current_templates
->start
->name
);
7049 /* Check for base index form. We detect the base index form by
7050 looking for an ')' at the end of the operand, searching
7051 for the '(' matching it, and finding a REGISTER_PREFIX or ','
7053 base_string
= op_string
+ strlen (op_string
);
7056 if (is_space_char (*base_string
))
7059 /* If we only have a displacement, set-up for it to be parsed later. */
7060 displacement_string_start
= op_string
;
7061 displacement_string_end
= base_string
+ 1;
7063 if (*base_string
== ')')
7066 unsigned int parens_balanced
= 1;
7067 /* We've already checked that the number of left & right ()'s are
7068 equal, so this loop will not be infinite. */
7072 if (*base_string
== ')')
7074 if (*base_string
== '(')
7077 while (parens_balanced
);
7079 temp_string
= base_string
;
7081 /* Skip past '(' and whitespace. */
7083 if (is_space_char (*base_string
))
7086 if (*base_string
== ','
7087 || ((i
.base_reg
= parse_register (base_string
, &end_op
))
7090 displacement_string_end
= temp_string
;
7092 i
.types
[this_operand
].bitfield
.baseindex
= 1;
7096 base_string
= end_op
;
7097 if (is_space_char (*base_string
))
7101 /* There may be an index reg or scale factor here. */
7102 if (*base_string
== ',')
7105 if (is_space_char (*base_string
))
7108 if ((i
.index_reg
= parse_register (base_string
, &end_op
))
7111 base_string
= end_op
;
7112 if (is_space_char (*base_string
))
7114 if (*base_string
== ',')
7117 if (is_space_char (*base_string
))
7120 else if (*base_string
!= ')')
7122 as_bad (_("expecting `,' or `)' "
7123 "after index register in `%s'"),
7128 else if (*base_string
== REGISTER_PREFIX
)
7130 as_bad (_("bad register name `%s'"), base_string
);
7134 /* Check for scale factor. */
7135 if (*base_string
!= ')')
7137 char *end_scale
= i386_scale (base_string
);
7142 base_string
= end_scale
;
7143 if (is_space_char (*base_string
))
7145 if (*base_string
!= ')')
7147 as_bad (_("expecting `)' "
7148 "after scale factor in `%s'"),
7153 else if (!i
.index_reg
)
7155 as_bad (_("expecting index register or scale factor "
7156 "after `,'; got '%c'"),
7161 else if (*base_string
!= ')')
7163 as_bad (_("expecting `,' or `)' "
7164 "after base register in `%s'"),
7169 else if (*base_string
== REGISTER_PREFIX
)
7171 as_bad (_("bad register name `%s'"), base_string
);
7176 /* If there's an expression beginning the operand, parse it,
7177 assuming displacement_string_start and
7178 displacement_string_end are meaningful. */
7179 if (displacement_string_start
!= displacement_string_end
)
7181 if (!i386_displacement (displacement_string_start
,
7182 displacement_string_end
))
7186 /* Special case for (%dx) while doing input/output op. */
7188 && operand_type_equal (&i
.base_reg
->reg_type
,
7189 ®16_inoutportreg
)
7191 && i
.log2_scale_factor
== 0
7192 && i
.seg
[i
.mem_operands
] == 0
7193 && !operand_type_check (i
.types
[this_operand
], disp
))
7195 i
.types
[this_operand
] = inoutportreg
;
7199 if (i386_index_check (operand_string
) == 0)
7201 i
.types
[this_operand
].bitfield
.mem
= 1;
7206 /* It's not a memory operand; argh! */
7207 as_bad (_("invalid char %s beginning operand %d `%s'"),
7208 output_invalid (*op_string
),
7213 return 1; /* Normal return. */
7216 /* md_estimate_size_before_relax()
7218 Called just before relax() for rs_machine_dependent frags. The x86
7219 assembler uses these frags to handle variable size jump
7222 Any symbol that is now undefined will not become defined.
7223 Return the correct fr_subtype in the frag.
7224 Return the initial "guess for variable size of frag" to caller.
7225 The guess is actually the growth beyond the fixed part. Whatever
7226 we do to grow the fixed or variable part contributes to our
7230 md_estimate_size_before_relax (fragP
, segment
)
7234 /* We've already got fragP->fr_subtype right; all we have to do is
7235 check for un-relaxable symbols. On an ELF system, we can't relax
7236 an externally visible symbol, because it may be overridden by a
7238 if (S_GET_SEGMENT (fragP
->fr_symbol
) != segment
7239 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7241 && (S_IS_EXTERNAL (fragP
->fr_symbol
)
7242 || S_IS_WEAK (fragP
->fr_symbol
)
7243 || ((symbol_get_bfdsym (fragP
->fr_symbol
)->flags
7244 & BSF_GNU_INDIRECT_FUNCTION
))))
7246 #if defined (OBJ_COFF) && defined (TE_PE)
7247 || (OUTPUT_FLAVOR
== bfd_target_coff_flavour
7248 && S_IS_WEAK (fragP
->fr_symbol
))
7252 /* Symbol is undefined in this segment, or we need to keep a
7253 reloc so that weak symbols can be overridden. */
7254 int size
= (fragP
->fr_subtype
& CODE16
) ? 2 : 4;
7255 enum bfd_reloc_code_real reloc_type
;
7256 unsigned char *opcode
;
7259 if (fragP
->fr_var
!= NO_RELOC
)
7260 reloc_type
= (enum bfd_reloc_code_real
) fragP
->fr_var
;
7262 reloc_type
= BFD_RELOC_16_PCREL
;
7264 reloc_type
= BFD_RELOC_32_PCREL
;
7266 old_fr_fix
= fragP
->fr_fix
;
7267 opcode
= (unsigned char *) fragP
->fr_opcode
;
7269 switch (TYPE_FROM_RELAX_STATE (fragP
->fr_subtype
))
7272 /* Make jmp (0xeb) a (d)word displacement jump. */
7274 fragP
->fr_fix
+= size
;
7275 fix_new (fragP
, old_fr_fix
, size
,
7277 fragP
->fr_offset
, 1,
7283 && (!no_cond_jump_promotion
|| fragP
->fr_var
!= NO_RELOC
))
7285 /* Negate the condition, and branch past an
7286 unconditional jump. */
7289 /* Insert an unconditional jump. */
7291 /* We added two extra opcode bytes, and have a two byte
7293 fragP
->fr_fix
+= 2 + 2;
7294 fix_new (fragP
, old_fr_fix
+ 2, 2,
7296 fragP
->fr_offset
, 1,
7303 if (no_cond_jump_promotion
&& fragP
->fr_var
== NO_RELOC
)
7308 fixP
= fix_new (fragP
, old_fr_fix
, 1,
7310 fragP
->fr_offset
, 1,
7312 fixP
->fx_signed
= 1;
7316 /* This changes the byte-displacement jump 0x7N
7317 to the (d)word-displacement jump 0x0f,0x8N. */
7318 opcode
[1] = opcode
[0] + 0x10;
7319 opcode
[0] = TWO_BYTE_OPCODE_ESCAPE
;
7320 /* We've added an opcode byte. */
7321 fragP
->fr_fix
+= 1 + size
;
7322 fix_new (fragP
, old_fr_fix
+ 1, size
,
7324 fragP
->fr_offset
, 1,
7329 BAD_CASE (fragP
->fr_subtype
);
7333 return fragP
->fr_fix
- old_fr_fix
;
7336 /* Guess size depending on current relax state. Initially the relax
7337 state will correspond to a short jump and we return 1, because
7338 the variable part of the frag (the branch offset) is one byte
7339 long. However, we can relax a section more than once and in that
7340 case we must either set fr_subtype back to the unrelaxed state,
7341 or return the value for the appropriate branch. */
7342 return md_relax_table
[fragP
->fr_subtype
].rlx_length
;
7345 /* Called after relax() is finished.
7347 In: Address of frag.
7348 fr_type == rs_machine_dependent.
7349 fr_subtype is what the address relaxed to.
7351 Out: Any fixSs and constants are set up.
7352 Caller will turn frag into a ".space 0". */
7355 md_convert_frag (abfd
, sec
, fragP
)
7356 bfd
*abfd ATTRIBUTE_UNUSED
;
7357 segT sec ATTRIBUTE_UNUSED
;
7360 unsigned char *opcode
;
7361 unsigned char *where_to_put_displacement
= NULL
;
7362 offsetT target_address
;
7363 offsetT opcode_address
;
7364 unsigned int extension
= 0;
7365 offsetT displacement_from_opcode_start
;
7367 opcode
= (unsigned char *) fragP
->fr_opcode
;
7369 /* Address we want to reach in file space. */
7370 target_address
= S_GET_VALUE (fragP
->fr_symbol
) + fragP
->fr_offset
;
7372 /* Address opcode resides at in file space. */
7373 opcode_address
= fragP
->fr_address
+ fragP
->fr_fix
;
7375 /* Displacement from opcode start to fill into instruction. */
7376 displacement_from_opcode_start
= target_address
- opcode_address
;
7378 if ((fragP
->fr_subtype
& BIG
) == 0)
7380 /* Don't have to change opcode. */
7381 extension
= 1; /* 1 opcode + 1 displacement */
7382 where_to_put_displacement
= &opcode
[1];
7386 if (no_cond_jump_promotion
7387 && TYPE_FROM_RELAX_STATE (fragP
->fr_subtype
) != UNCOND_JUMP
)
7388 as_warn_where (fragP
->fr_file
, fragP
->fr_line
,
7389 _("long jump required"));
7391 switch (fragP
->fr_subtype
)
7393 case ENCODE_RELAX_STATE (UNCOND_JUMP
, BIG
):
7394 extension
= 4; /* 1 opcode + 4 displacement */
7396 where_to_put_displacement
= &opcode
[1];
7399 case ENCODE_RELAX_STATE (UNCOND_JUMP
, BIG16
):
7400 extension
= 2; /* 1 opcode + 2 displacement */
7402 where_to_put_displacement
= &opcode
[1];
7405 case ENCODE_RELAX_STATE (COND_JUMP
, BIG
):
7406 case ENCODE_RELAX_STATE (COND_JUMP86
, BIG
):
7407 extension
= 5; /* 2 opcode + 4 displacement */
7408 opcode
[1] = opcode
[0] + 0x10;
7409 opcode
[0] = TWO_BYTE_OPCODE_ESCAPE
;
7410 where_to_put_displacement
= &opcode
[2];
7413 case ENCODE_RELAX_STATE (COND_JUMP
, BIG16
):
7414 extension
= 3; /* 2 opcode + 2 displacement */
7415 opcode
[1] = opcode
[0] + 0x10;
7416 opcode
[0] = TWO_BYTE_OPCODE_ESCAPE
;
7417 where_to_put_displacement
= &opcode
[2];
7420 case ENCODE_RELAX_STATE (COND_JUMP86
, BIG16
):
7425 where_to_put_displacement
= &opcode
[3];
7429 BAD_CASE (fragP
->fr_subtype
);
7434 /* If size if less then four we are sure that the operand fits,
7435 but if it's 4, then it could be that the displacement is larger
7437 if (DISP_SIZE_FROM_RELAX_STATE (fragP
->fr_subtype
) == 4
7439 && ((addressT
) (displacement_from_opcode_start
- extension
7440 + ((addressT
) 1 << 31))
7441 > (((addressT
) 2 << 31) - 1)))
7443 as_bad_where (fragP
->fr_file
, fragP
->fr_line
,
7444 _("jump target out of range"));
7445 /* Make us emit 0. */
7446 displacement_from_opcode_start
= extension
;
7448 /* Now put displacement after opcode. */
7449 md_number_to_chars ((char *) where_to_put_displacement
,
7450 (valueT
) (displacement_from_opcode_start
- extension
),
7451 DISP_SIZE_FROM_RELAX_STATE (fragP
->fr_subtype
));
7452 fragP
->fr_fix
+= extension
;
7455 /* Apply a fixup (fixS) to segment data, once it has been determined
7456 by our caller that we have all the info we need to fix it up.
7458 On the 386, immediates, displacements, and data pointers are all in
7459 the same (little-endian) format, so we don't need to care about which
7463 md_apply_fix (fixP
, valP
, seg
)
7464 /* The fix we're to put in. */
7466 /* Pointer to the value of the bits. */
7468 /* Segment fix is from. */
7469 segT seg ATTRIBUTE_UNUSED
;
7471 char *p
= fixP
->fx_where
+ fixP
->fx_frag
->fr_literal
;
7472 valueT value
= *valP
;
7474 #if !defined (TE_Mach)
7477 switch (fixP
->fx_r_type
)
7483 fixP
->fx_r_type
= BFD_RELOC_64_PCREL
;
7486 case BFD_RELOC_X86_64_32S
:
7487 fixP
->fx_r_type
= BFD_RELOC_32_PCREL
;
7490 fixP
->fx_r_type
= BFD_RELOC_16_PCREL
;
7493 fixP
->fx_r_type
= BFD_RELOC_8_PCREL
;
7498 if (fixP
->fx_addsy
!= NULL
7499 && (fixP
->fx_r_type
== BFD_RELOC_32_PCREL
7500 || fixP
->fx_r_type
== BFD_RELOC_64_PCREL
7501 || fixP
->fx_r_type
== BFD_RELOC_16_PCREL
7502 || fixP
->fx_r_type
== BFD_RELOC_8_PCREL
)
7503 && !use_rela_relocations
)
7505 /* This is a hack. There should be a better way to handle this.
7506 This covers for the fact that bfd_install_relocation will
7507 subtract the current location (for partial_inplace, PC relative
7508 relocations); see more below. */
7512 || OUTPUT_FLAVOR
== bfd_target_coff_flavour
7515 value
+= fixP
->fx_where
+ fixP
->fx_frag
->fr_address
;
7517 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7520 segT sym_seg
= S_GET_SEGMENT (fixP
->fx_addsy
);
7523 || (symbol_section_p (fixP
->fx_addsy
)
7524 && sym_seg
!= absolute_section
))
7525 && !generic_force_reloc (fixP
))
7527 /* Yes, we add the values in twice. This is because
7528 bfd_install_relocation subtracts them out again. I think
7529 bfd_install_relocation is broken, but I don't dare change
7531 value
+= fixP
->fx_where
+ fixP
->fx_frag
->fr_address
;
7535 #if defined (OBJ_COFF) && defined (TE_PE)
7536 /* For some reason, the PE format does not store a
7537 section address offset for a PC relative symbol. */
7538 if (S_GET_SEGMENT (fixP
->fx_addsy
) != seg
7539 || S_IS_WEAK (fixP
->fx_addsy
))
7540 value
+= md_pcrel_from (fixP
);
7543 #if defined (OBJ_COFF) && defined (TE_PE)
7544 if (fixP
->fx_addsy
!= NULL
&& S_IS_WEAK (fixP
->fx_addsy
))
7546 value
-= S_GET_VALUE (fixP
->fx_addsy
);
7550 /* Fix a few things - the dynamic linker expects certain values here,
7551 and we must not disappoint it. */
7552 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7553 if (IS_ELF
&& fixP
->fx_addsy
)
7554 switch (fixP
->fx_r_type
)
7556 case BFD_RELOC_386_PLT32
:
7557 case BFD_RELOC_X86_64_PLT32
:
7558 /* Make the jump instruction point to the address of the operand. At
7559 runtime we merely add the offset to the actual PLT entry. */
7563 case BFD_RELOC_386_TLS_GD
:
7564 case BFD_RELOC_386_TLS_LDM
:
7565 case BFD_RELOC_386_TLS_IE_32
:
7566 case BFD_RELOC_386_TLS_IE
:
7567 case BFD_RELOC_386_TLS_GOTIE
:
7568 case BFD_RELOC_386_TLS_GOTDESC
:
7569 case BFD_RELOC_X86_64_TLSGD
:
7570 case BFD_RELOC_X86_64_TLSLD
:
7571 case BFD_RELOC_X86_64_GOTTPOFF
:
7572 case BFD_RELOC_X86_64_GOTPC32_TLSDESC
:
7573 value
= 0; /* Fully resolved at runtime. No addend. */
7575 case BFD_RELOC_386_TLS_LE
:
7576 case BFD_RELOC_386_TLS_LDO_32
:
7577 case BFD_RELOC_386_TLS_LE_32
:
7578 case BFD_RELOC_X86_64_DTPOFF32
:
7579 case BFD_RELOC_X86_64_DTPOFF64
:
7580 case BFD_RELOC_X86_64_TPOFF32
:
7581 case BFD_RELOC_X86_64_TPOFF64
:
7582 S_SET_THREAD_LOCAL (fixP
->fx_addsy
);
7585 case BFD_RELOC_386_TLS_DESC_CALL
:
7586 case BFD_RELOC_X86_64_TLSDESC_CALL
:
7587 value
= 0; /* Fully resolved at runtime. No addend. */
7588 S_SET_THREAD_LOCAL (fixP
->fx_addsy
);
7592 case BFD_RELOC_386_GOT32
:
7593 case BFD_RELOC_X86_64_GOT32
:
7594 value
= 0; /* Fully resolved at runtime. No addend. */
7597 case BFD_RELOC_VTABLE_INHERIT
:
7598 case BFD_RELOC_VTABLE_ENTRY
:
7605 #endif /* defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) */
7607 #endif /* !defined (TE_Mach) */
7609 /* Are we finished with this relocation now? */
7610 if (fixP
->fx_addsy
== NULL
)
7612 #if defined (OBJ_COFF) && defined (TE_PE)
7613 else if (fixP
->fx_addsy
!= NULL
&& S_IS_WEAK (fixP
->fx_addsy
))
7616 /* Remember value for tc_gen_reloc. */
7617 fixP
->fx_addnumber
= value
;
7618 /* Clear out the frag for now. */
7622 else if (use_rela_relocations
)
7624 fixP
->fx_no_overflow
= 1;
7625 /* Remember value for tc_gen_reloc. */
7626 fixP
->fx_addnumber
= value
;
7630 md_number_to_chars (p
, value
, fixP
->fx_size
);
7634 md_atof (int type
, char *litP
, int *sizeP
)
7636 /* This outputs the LITTLENUMs in REVERSE order;
7637 in accord with the bigendian 386. */
7638 return ieee_md_atof (type
, litP
, sizeP
, FALSE
);
7641 static char output_invalid_buf
[sizeof (unsigned char) * 2 + 6];
7644 output_invalid (int c
)
7647 snprintf (output_invalid_buf
, sizeof (output_invalid_buf
),
7650 snprintf (output_invalid_buf
, sizeof (output_invalid_buf
),
7651 "(0x%x)", (unsigned char) c
);
7652 return output_invalid_buf
;
7655 /* REG_STRING starts *before* REGISTER_PREFIX. */
7657 static const reg_entry
*
7658 parse_real_register (char *reg_string
, char **end_op
)
7660 char *s
= reg_string
;
7662 char reg_name_given
[MAX_REG_NAME_SIZE
+ 1];
7665 /* Skip possible REGISTER_PREFIX and possible whitespace. */
7666 if (*s
== REGISTER_PREFIX
)
7669 if (is_space_char (*s
))
7673 while ((*p
++ = register_chars
[(unsigned char) *s
]) != '\0')
7675 if (p
>= reg_name_given
+ MAX_REG_NAME_SIZE
)
7676 return (const reg_entry
*) NULL
;
7680 /* For naked regs, make sure that we are not dealing with an identifier.
7681 This prevents confusing an identifier like `eax_var' with register
7683 if (allow_naked_reg
&& identifier_chars
[(unsigned char) *s
])
7684 return (const reg_entry
*) NULL
;
7688 r
= (const reg_entry
*) hash_find (reg_hash
, reg_name_given
);
7690 /* Handle floating point regs, allowing spaces in the (i) part. */
7691 if (r
== i386_regtab
/* %st is first entry of table */)
7693 if (is_space_char (*s
))
7698 if (is_space_char (*s
))
7700 if (*s
>= '0' && *s
<= '7')
7704 if (is_space_char (*s
))
7709 r
= (const reg_entry
*) hash_find (reg_hash
, "st(0)");
7714 /* We have "%st(" then garbage. */
7715 return (const reg_entry
*) NULL
;
7719 if (r
== NULL
|| allow_pseudo_reg
)
7722 if (operand_type_all_zero (&r
->reg_type
))
7723 return (const reg_entry
*) NULL
;
7725 if ((r
->reg_type
.bitfield
.reg32
7726 || r
->reg_type
.bitfield
.sreg3
7727 || r
->reg_type
.bitfield
.control
7728 || r
->reg_type
.bitfield
.debug
7729 || r
->reg_type
.bitfield
.test
)
7730 && !cpu_arch_flags
.bitfield
.cpui386
)
7731 return (const reg_entry
*) NULL
;
7733 if (r
->reg_type
.bitfield
.floatreg
7734 && !cpu_arch_flags
.bitfield
.cpu8087
7735 && !cpu_arch_flags
.bitfield
.cpu287
7736 && !cpu_arch_flags
.bitfield
.cpu387
)
7737 return (const reg_entry
*) NULL
;
7739 if (r
->reg_type
.bitfield
.regmmx
&& !cpu_arch_flags
.bitfield
.cpummx
)
7740 return (const reg_entry
*) NULL
;
7742 if (r
->reg_type
.bitfield
.regxmm
&& !cpu_arch_flags
.bitfield
.cpusse
)
7743 return (const reg_entry
*) NULL
;
7745 if (r
->reg_type
.bitfield
.regymm
&& !cpu_arch_flags
.bitfield
.cpuavx
)
7746 return (const reg_entry
*) NULL
;
7748 /* Don't allow fake index register unless allow_index_reg isn't 0. */
7749 if (!allow_index_reg
7750 && (r
->reg_num
== RegEiz
|| r
->reg_num
== RegRiz
))
7751 return (const reg_entry
*) NULL
;
7753 if (((r
->reg_flags
& (RegRex64
| RegRex
))
7754 || r
->reg_type
.bitfield
.reg64
)
7755 && (!cpu_arch_flags
.bitfield
.cpulm
7756 || !operand_type_equal (&r
->reg_type
, &control
))
7757 && flag_code
!= CODE_64BIT
)
7758 return (const reg_entry
*) NULL
;
7760 if (r
->reg_type
.bitfield
.sreg3
&& r
->reg_num
== RegFlat
&& !intel_syntax
)
7761 return (const reg_entry
*) NULL
;
7766 /* REG_STRING starts *before* REGISTER_PREFIX. */
7768 static const reg_entry
*
7769 parse_register (char *reg_string
, char **end_op
)
7773 if (*reg_string
== REGISTER_PREFIX
|| allow_naked_reg
)
7774 r
= parse_real_register (reg_string
, end_op
);
7779 char *save
= input_line_pointer
;
7783 input_line_pointer
= reg_string
;
7784 c
= get_symbol_end ();
7785 symbolP
= symbol_find (reg_string
);
7786 if (symbolP
&& S_GET_SEGMENT (symbolP
) == reg_section
)
7788 const expressionS
*e
= symbol_get_value_expression (symbolP
);
7790 know (e
->X_op
== O_register
);
7791 know (e
->X_add_number
>= 0
7792 && (valueT
) e
->X_add_number
< i386_regtab_size
);
7793 r
= i386_regtab
+ e
->X_add_number
;
7794 *end_op
= input_line_pointer
;
7796 *input_line_pointer
= c
;
7797 input_line_pointer
= save
;
7803 i386_parse_name (char *name
, expressionS
*e
, char *nextcharP
)
7806 char *end
= input_line_pointer
;
7809 r
= parse_register (name
, &input_line_pointer
);
7810 if (r
&& end
<= input_line_pointer
)
7812 *nextcharP
= *input_line_pointer
;
7813 *input_line_pointer
= 0;
7814 e
->X_op
= O_register
;
7815 e
->X_add_number
= r
- i386_regtab
;
7818 input_line_pointer
= end
;
7820 return intel_syntax
? i386_intel_parse_name (name
, e
) : 0;
7824 md_operand (expressionS
*e
)
7829 switch (*input_line_pointer
)
7831 case REGISTER_PREFIX
:
7832 r
= parse_real_register (input_line_pointer
, &end
);
7835 e
->X_op
= O_register
;
7836 e
->X_add_number
= r
- i386_regtab
;
7837 input_line_pointer
= end
;
7842 gas_assert (intel_syntax
);
7843 end
= input_line_pointer
++;
7845 if (*input_line_pointer
== ']')
7847 ++input_line_pointer
;
7848 e
->X_op_symbol
= make_expr_symbol (e
);
7849 e
->X_add_symbol
= NULL
;
7850 e
->X_add_number
= 0;
7856 input_line_pointer
= end
;
7863 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7864 const char *md_shortopts
= "kVQ:sqn";
7866 const char *md_shortopts
= "qn";
7869 #define OPTION_32 (OPTION_MD_BASE + 0)
7870 #define OPTION_64 (OPTION_MD_BASE + 1)
7871 #define OPTION_DIVIDE (OPTION_MD_BASE + 2)
7872 #define OPTION_MARCH (OPTION_MD_BASE + 3)
7873 #define OPTION_MTUNE (OPTION_MD_BASE + 4)
7874 #define OPTION_MMNEMONIC (OPTION_MD_BASE + 5)
7875 #define OPTION_MSYNTAX (OPTION_MD_BASE + 6)
7876 #define OPTION_MINDEX_REG (OPTION_MD_BASE + 7)
7877 #define OPTION_MNAKED_REG (OPTION_MD_BASE + 8)
7878 #define OPTION_MOLD_GCC (OPTION_MD_BASE + 9)
7879 #define OPTION_MSSE2AVX (OPTION_MD_BASE + 10)
7880 #define OPTION_MSSE_CHECK (OPTION_MD_BASE + 11)
7881 #define OPTION_MAVXSCALAR (OPTION_MSSE_CHECK + 11)
7883 struct option md_longopts
[] =
7885 {"32", no_argument
, NULL
, OPTION_32
},
7886 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
7887 || defined (TE_PE) || defined (TE_PEP))
7888 {"64", no_argument
, NULL
, OPTION_64
},
7890 {"divide", no_argument
, NULL
, OPTION_DIVIDE
},
7891 {"march", required_argument
, NULL
, OPTION_MARCH
},
7892 {"mtune", required_argument
, NULL
, OPTION_MTUNE
},
7893 {"mmnemonic", required_argument
, NULL
, OPTION_MMNEMONIC
},
7894 {"msyntax", required_argument
, NULL
, OPTION_MSYNTAX
},
7895 {"mindex-reg", no_argument
, NULL
, OPTION_MINDEX_REG
},
7896 {"mnaked-reg", no_argument
, NULL
, OPTION_MNAKED_REG
},
7897 {"mold-gcc", no_argument
, NULL
, OPTION_MOLD_GCC
},
7898 {"msse2avx", no_argument
, NULL
, OPTION_MSSE2AVX
},
7899 {"msse-check", required_argument
, NULL
, OPTION_MSSE_CHECK
},
7900 {"mavxscalar", required_argument
, NULL
, OPTION_MAVXSCALAR
},
7901 {NULL
, no_argument
, NULL
, 0}
7903 size_t md_longopts_size
= sizeof (md_longopts
);
7906 md_parse_option (int c
, char *arg
)
7914 optimize_align_code
= 0;
7921 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7922 /* -Qy, -Qn: SVR4 arguments controlling whether a .comment section
7923 should be emitted or not. FIXME: Not implemented. */
7927 /* -V: SVR4 argument to print version ID. */
7929 print_version_id ();
7932 /* -k: Ignore for FreeBSD compatibility. */
7937 /* -s: On i386 Solaris, this tells the native assembler to use
7938 .stab instead of .stab.excl. We always use .stab anyhow. */
7941 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
7942 || defined (TE_PE) || defined (TE_PEP))
7945 const char **list
, **l
;
7947 list
= bfd_target_list ();
7948 for (l
= list
; *l
!= NULL
; l
++)
7949 if (CONST_STRNEQ (*l
, "elf64-x86-64")
7950 || strcmp (*l
, "coff-x86-64") == 0
7951 || strcmp (*l
, "pe-x86-64") == 0
7952 || strcmp (*l
, "pei-x86-64") == 0)
7954 default_arch
= "x86_64";
7958 as_fatal (_("No compiled in support for x86_64"));
7965 default_arch
= "i386";
7969 #ifdef SVR4_COMMENT_CHARS
7974 n
= (char *) xmalloc (strlen (i386_comment_chars
) + 1);
7976 for (s
= i386_comment_chars
; *s
!= '\0'; s
++)
7980 i386_comment_chars
= n
;
7986 arch
= xstrdup (arg
);
7990 as_fatal (_("Invalid -march= option: `%s'"), arg
);
7991 next
= strchr (arch
, '+');
7994 for (j
= 0; j
< ARRAY_SIZE (cpu_arch
); j
++)
7996 if (strcmp (arch
, cpu_arch
[j
].name
) == 0)
7999 cpu_arch_name
= cpu_arch
[j
].name
;
8000 cpu_sub_arch_name
= NULL
;
8001 cpu_arch_flags
= cpu_arch
[j
].flags
;
8002 cpu_arch_isa
= cpu_arch
[j
].type
;
8003 cpu_arch_isa_flags
= cpu_arch
[j
].flags
;
8004 if (!cpu_arch_tune_set
)
8006 cpu_arch_tune
= cpu_arch_isa
;
8007 cpu_arch_tune_flags
= cpu_arch_isa_flags
;
8011 else if (*cpu_arch
[j
].name
== '.'
8012 && strcmp (arch
, cpu_arch
[j
].name
+ 1) == 0)
8014 /* ISA entension. */
8015 i386_cpu_flags flags
;
8017 if (strncmp (arch
, "no", 2))
8018 flags
= cpu_flags_or (cpu_arch_flags
,
8021 flags
= cpu_flags_and_not (cpu_arch_flags
,
8023 if (!cpu_flags_equal (&flags
, &cpu_arch_flags
))
8025 if (cpu_sub_arch_name
)
8027 char *name
= cpu_sub_arch_name
;
8028 cpu_sub_arch_name
= concat (name
,
8030 (const char *) NULL
);
8034 cpu_sub_arch_name
= xstrdup (cpu_arch
[j
].name
);
8035 cpu_arch_flags
= flags
;
8041 if (j
>= ARRAY_SIZE (cpu_arch
))
8042 as_fatal (_("Invalid -march= option: `%s'"), arg
);
8046 while (next
!= NULL
);
8051 as_fatal (_("Invalid -mtune= option: `%s'"), arg
);
8052 for (j
= 0; j
< ARRAY_SIZE (cpu_arch
); j
++)
8054 if (strcmp (arg
, cpu_arch
[j
].name
) == 0)
8056 cpu_arch_tune_set
= 1;
8057 cpu_arch_tune
= cpu_arch
[j
].type
;
8058 cpu_arch_tune_flags
= cpu_arch
[j
].flags
;
8062 if (j
>= ARRAY_SIZE (cpu_arch
))
8063 as_fatal (_("Invalid -mtune= option: `%s'"), arg
);
8066 case OPTION_MMNEMONIC
:
8067 if (strcasecmp (arg
, "att") == 0)
8069 else if (strcasecmp (arg
, "intel") == 0)
8072 as_fatal (_("Invalid -mmnemonic= option: `%s'"), arg
);
8075 case OPTION_MSYNTAX
:
8076 if (strcasecmp (arg
, "att") == 0)
8078 else if (strcasecmp (arg
, "intel") == 0)
8081 as_fatal (_("Invalid -msyntax= option: `%s'"), arg
);
8084 case OPTION_MINDEX_REG
:
8085 allow_index_reg
= 1;
8088 case OPTION_MNAKED_REG
:
8089 allow_naked_reg
= 1;
8092 case OPTION_MOLD_GCC
:
8096 case OPTION_MSSE2AVX
:
8100 case OPTION_MSSE_CHECK
:
8101 if (strcasecmp (arg
, "error") == 0)
8102 sse_check
= sse_check_error
;
8103 else if (strcasecmp (arg
, "warning") == 0)
8104 sse_check
= sse_check_warning
;
8105 else if (strcasecmp (arg
, "none") == 0)
8106 sse_check
= sse_check_none
;
8108 as_fatal (_("Invalid -msse-check= option: `%s'"), arg
);
8111 case OPTION_MAVXSCALAR
:
8112 if (strcasecmp (arg
, "128") == 0)
8114 else if (strcasecmp (arg
, "256") == 0)
8117 as_fatal (_("Invalid -mavxscalar= option: `%s'"), arg
);
8126 #define MESSAGE_TEMPLATE \
8130 show_arch (FILE *stream
, int ext
)
8132 static char message
[] = MESSAGE_TEMPLATE
;
8133 char *start
= message
+ 27;
8135 int size
= sizeof (MESSAGE_TEMPLATE
);
8142 left
= size
- (start
- message
);
8143 for (j
= 0; j
< ARRAY_SIZE (cpu_arch
); j
++)
8145 /* Should it be skipped? */
8146 if (cpu_arch
[j
].skip
)
8149 name
= cpu_arch
[j
].name
;
8150 len
= cpu_arch
[j
].len
;
8153 /* It is an extension. Skip if we aren't asked to show it. */
8164 /* It is an processor. Skip if we show only extension. */
8168 /* Reserve 2 spaces for ", " or ",\0" */
8171 /* Check if there is any room. */
8179 p
= mempcpy (p
, name
, len
);
8183 /* Output the current message now and start a new one. */
8186 fprintf (stream
, "%s\n", message
);
8188 left
= size
- (start
- message
) - len
- 2;
8190 gas_assert (left
>= 0);
8192 p
= mempcpy (p
, name
, len
);
8197 fprintf (stream
, "%s\n", message
);
8201 md_show_usage (FILE *stream
)
8203 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8204 fprintf (stream
, _("\
8206 -V print assembler version number\n\
8209 fprintf (stream
, _("\
8210 -n Do not optimize code alignment\n\
8211 -q quieten some warnings\n"));
8212 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8213 fprintf (stream
, _("\
8216 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
8217 || defined (TE_PE) || defined (TE_PEP))
8218 fprintf (stream
, _("\
8219 --32/--64 generate 32bit/64bit code\n"));
8221 #ifdef SVR4_COMMENT_CHARS
8222 fprintf (stream
, _("\
8223 --divide do not treat `/' as a comment character\n"));
8225 fprintf (stream
, _("\
8226 --divide ignored\n"));
8228 fprintf (stream
, _("\
8229 -march=CPU[,+EXTENSION...]\n\
8230 generate code for CPU and EXTENSION, CPU is one of:\n"));
8231 show_arch (stream
, 0);
8232 fprintf (stream
, _("\
8233 EXTENSION is combination of:\n"));
8234 show_arch (stream
, 1);
8235 fprintf (stream
, _("\
8236 -mtune=CPU optimize for CPU, CPU is one of:\n"));
8237 show_arch (stream
, 0);
8238 fprintf (stream
, _("\
8239 -msse2avx encode SSE instructions with VEX prefix\n"));
8240 fprintf (stream
, _("\
8241 -msse-check=[none|error|warning]\n\
8242 check SSE instructions\n"));
8243 fprintf (stream
, _("\
8244 -mavxscalar=[128|256] encode scalar AVX instructions with specific vector\n\
8246 fprintf (stream
, _("\
8247 -mmnemonic=[att|intel] use AT&T/Intel mnemonic\n"));
8248 fprintf (stream
, _("\
8249 -msyntax=[att|intel] use AT&T/Intel syntax\n"));
8250 fprintf (stream
, _("\
8251 -mindex-reg support pseudo index registers\n"));
8252 fprintf (stream
, _("\
8253 -mnaked-reg don't require `%%' prefix for registers\n"));
8254 fprintf (stream
, _("\
8255 -mold-gcc support old (<= 2.8.1) versions of gcc\n"));
8258 #if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \
8259 || defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
8260 || defined (TE_PE) || defined (TE_PEP) || defined (OBJ_MACH_O))
8262 /* Pick the target format to use. */
8265 i386_target_format (void)
8267 if (!strcmp (default_arch
, "x86_64"))
8269 set_code_flag (CODE_64BIT
);
8270 if (cpu_flags_all_zero (&cpu_arch_isa_flags
))
8272 cpu_arch_isa_flags
.bitfield
.cpui186
= 1;
8273 cpu_arch_isa_flags
.bitfield
.cpui286
= 1;
8274 cpu_arch_isa_flags
.bitfield
.cpui386
= 1;
8275 cpu_arch_isa_flags
.bitfield
.cpui486
= 1;
8276 cpu_arch_isa_flags
.bitfield
.cpui586
= 1;
8277 cpu_arch_isa_flags
.bitfield
.cpui686
= 1;
8278 cpu_arch_isa_flags
.bitfield
.cpuclflush
= 1;
8279 cpu_arch_isa_flags
.bitfield
.cpummx
= 1;
8280 cpu_arch_isa_flags
.bitfield
.cpusse
= 1;
8281 cpu_arch_isa_flags
.bitfield
.cpusse2
= 1;
8282 cpu_arch_isa_flags
.bitfield
.cpulm
= 1;
8284 if (cpu_flags_all_zero (&cpu_arch_tune_flags
))
8286 cpu_arch_tune_flags
.bitfield
.cpui186
= 1;
8287 cpu_arch_tune_flags
.bitfield
.cpui286
= 1;
8288 cpu_arch_tune_flags
.bitfield
.cpui386
= 1;
8289 cpu_arch_tune_flags
.bitfield
.cpui486
= 1;
8290 cpu_arch_tune_flags
.bitfield
.cpui586
= 1;
8291 cpu_arch_tune_flags
.bitfield
.cpui686
= 1;
8292 cpu_arch_tune_flags
.bitfield
.cpuclflush
= 1;
8293 cpu_arch_tune_flags
.bitfield
.cpummx
= 1;
8294 cpu_arch_tune_flags
.bitfield
.cpusse
= 1;
8295 cpu_arch_tune_flags
.bitfield
.cpusse2
= 1;
8298 else if (!strcmp (default_arch
, "i386"))
8300 set_code_flag (CODE_32BIT
);
8301 if (cpu_flags_all_zero (&cpu_arch_isa_flags
))
8303 cpu_arch_isa_flags
.bitfield
.cpui186
= 1;
8304 cpu_arch_isa_flags
.bitfield
.cpui286
= 1;
8305 cpu_arch_isa_flags
.bitfield
.cpui386
= 1;
8307 if (cpu_flags_all_zero (&cpu_arch_tune_flags
))
8309 cpu_arch_tune_flags
.bitfield
.cpui186
= 1;
8310 cpu_arch_tune_flags
.bitfield
.cpui286
= 1;
8311 cpu_arch_tune_flags
.bitfield
.cpui386
= 1;
8315 as_fatal (_("Unknown architecture"));
8316 switch (OUTPUT_FLAVOR
)
8318 #if defined (OBJ_MAYBE_AOUT) || defined (OBJ_AOUT)
8319 case bfd_target_aout_flavour
:
8320 return AOUT_TARGET_FORMAT
;
8322 #if defined (OBJ_MAYBE_COFF) || defined (OBJ_COFF)
8323 # if defined (TE_PE) || defined (TE_PEP)
8324 case bfd_target_coff_flavour
:
8325 return flag_code
== CODE_64BIT
? "pe-x86-64" : "pe-i386";
8326 # elif defined (TE_GO32)
8327 case bfd_target_coff_flavour
:
8330 case bfd_target_coff_flavour
:
8334 #if defined (OBJ_MAYBE_ELF) || defined (OBJ_ELF)
8335 case bfd_target_elf_flavour
:
8337 if (flag_code
== CODE_64BIT
)
8340 use_rela_relocations
= 1;
8342 if (cpu_arch_isa
== PROCESSOR_L1OM
)
8344 if (flag_code
!= CODE_64BIT
)
8345 as_fatal (_("Intel L1OM is 64bit only"));
8346 return ELF_TARGET_L1OM_FORMAT
;
8349 return (flag_code
== CODE_64BIT
8350 ? ELF_TARGET_FORMAT64
: ELF_TARGET_FORMAT
);
8353 #if defined (OBJ_MACH_O)
8354 case bfd_target_mach_o_flavour
:
8355 return flag_code
== CODE_64BIT
? "mach-o-x86-64" : "mach-o-i386";
8363 #endif /* OBJ_MAYBE_ more than one */
8365 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF))
8367 i386_elf_emit_arch_note (void)
8369 if (IS_ELF
&& cpu_arch_name
!= NULL
)
8372 asection
*seg
= now_seg
;
8373 subsegT subseg
= now_subseg
;
8374 Elf_Internal_Note i_note
;
8375 Elf_External_Note e_note
;
8376 asection
*note_secp
;
8379 /* Create the .note section. */
8380 note_secp
= subseg_new (".note", 0);
8381 bfd_set_section_flags (stdoutput
,
8383 SEC_HAS_CONTENTS
| SEC_READONLY
);
8385 /* Process the arch string. */
8386 len
= strlen (cpu_arch_name
);
8388 i_note
.namesz
= len
+ 1;
8390 i_note
.type
= NT_ARCH
;
8391 p
= frag_more (sizeof (e_note
.namesz
));
8392 md_number_to_chars (p
, (valueT
) i_note
.namesz
, sizeof (e_note
.namesz
));
8393 p
= frag_more (sizeof (e_note
.descsz
));
8394 md_number_to_chars (p
, (valueT
) i_note
.descsz
, sizeof (e_note
.descsz
));
8395 p
= frag_more (sizeof (e_note
.type
));
8396 md_number_to_chars (p
, (valueT
) i_note
.type
, sizeof (e_note
.type
));
8397 p
= frag_more (len
+ 1);
8398 strcpy (p
, cpu_arch_name
);
8400 frag_align (2, 0, 0);
8402 subseg_set (seg
, subseg
);
8408 md_undefined_symbol (name
)
8411 if (name
[0] == GLOBAL_OFFSET_TABLE_NAME
[0]
8412 && name
[1] == GLOBAL_OFFSET_TABLE_NAME
[1]
8413 && name
[2] == GLOBAL_OFFSET_TABLE_NAME
[2]
8414 && strcmp (name
, GLOBAL_OFFSET_TABLE_NAME
) == 0)
8418 if (symbol_find (name
))
8419 as_bad (_("GOT already in symbol table"));
8420 GOT_symbol
= symbol_new (name
, undefined_section
,
8421 (valueT
) 0, &zero_address_frag
);
8428 /* Round up a section size to the appropriate boundary. */
8431 md_section_align (segment
, size
)
8432 segT segment ATTRIBUTE_UNUSED
;
8435 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
8436 if (OUTPUT_FLAVOR
== bfd_target_aout_flavour
)
8438 /* For a.out, force the section size to be aligned. If we don't do
8439 this, BFD will align it for us, but it will not write out the
8440 final bytes of the section. This may be a bug in BFD, but it is
8441 easier to fix it here since that is how the other a.out targets
8445 align
= bfd_get_section_alignment (stdoutput
, segment
);
8446 size
= ((size
+ (1 << align
) - 1) & ((valueT
) -1 << align
));
8453 /* On the i386, PC-relative offsets are relative to the start of the
8454 next instruction. That is, the address of the offset, plus its
8455 size, since the offset is always the last part of the insn. */
8458 md_pcrel_from (fixS
*fixP
)
8460 return fixP
->fx_size
+ fixP
->fx_where
+ fixP
->fx_frag
->fr_address
;
8466 s_bss (int ignore ATTRIBUTE_UNUSED
)
8470 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8472 obj_elf_section_change_hook ();
8474 temp
= get_absolute_expression ();
8475 subseg_set (bss_section
, (subsegT
) temp
);
8476 demand_empty_rest_of_line ();
8482 i386_validate_fix (fixS
*fixp
)
8484 if (fixp
->fx_subsy
&& fixp
->fx_subsy
== GOT_symbol
)
8486 if (fixp
->fx_r_type
== BFD_RELOC_32_PCREL
)
8490 fixp
->fx_r_type
= BFD_RELOC_X86_64_GOTPCREL
;
8495 fixp
->fx_r_type
= BFD_RELOC_386_GOTOFF
;
8497 fixp
->fx_r_type
= BFD_RELOC_X86_64_GOTOFF64
;
8504 tc_gen_reloc (section
, fixp
)
8505 asection
*section ATTRIBUTE_UNUSED
;
8509 bfd_reloc_code_real_type code
;
8511 switch (fixp
->fx_r_type
)
8513 case BFD_RELOC_X86_64_PLT32
:
8514 case BFD_RELOC_X86_64_GOT32
:
8515 case BFD_RELOC_X86_64_GOTPCREL
:
8516 case BFD_RELOC_386_PLT32
:
8517 case BFD_RELOC_386_GOT32
:
8518 case BFD_RELOC_386_GOTOFF
:
8519 case BFD_RELOC_386_GOTPC
:
8520 case BFD_RELOC_386_TLS_GD
:
8521 case BFD_RELOC_386_TLS_LDM
:
8522 case BFD_RELOC_386_TLS_LDO_32
:
8523 case BFD_RELOC_386_TLS_IE_32
:
8524 case BFD_RELOC_386_TLS_IE
:
8525 case BFD_RELOC_386_TLS_GOTIE
:
8526 case BFD_RELOC_386_TLS_LE_32
:
8527 case BFD_RELOC_386_TLS_LE
:
8528 case BFD_RELOC_386_TLS_GOTDESC
:
8529 case BFD_RELOC_386_TLS_DESC_CALL
:
8530 case BFD_RELOC_X86_64_TLSGD
:
8531 case BFD_RELOC_X86_64_TLSLD
:
8532 case BFD_RELOC_X86_64_DTPOFF32
:
8533 case BFD_RELOC_X86_64_DTPOFF64
:
8534 case BFD_RELOC_X86_64_GOTTPOFF
:
8535 case BFD_RELOC_X86_64_TPOFF32
:
8536 case BFD_RELOC_X86_64_TPOFF64
:
8537 case BFD_RELOC_X86_64_GOTOFF64
:
8538 case BFD_RELOC_X86_64_GOTPC32
:
8539 case BFD_RELOC_X86_64_GOT64
:
8540 case BFD_RELOC_X86_64_GOTPCREL64
:
8541 case BFD_RELOC_X86_64_GOTPC64
:
8542 case BFD_RELOC_X86_64_GOTPLT64
:
8543 case BFD_RELOC_X86_64_PLTOFF64
:
8544 case BFD_RELOC_X86_64_GOTPC32_TLSDESC
:
8545 case BFD_RELOC_X86_64_TLSDESC_CALL
:
8547 case BFD_RELOC_VTABLE_ENTRY
:
8548 case BFD_RELOC_VTABLE_INHERIT
:
8550 case BFD_RELOC_32_SECREL
:
8552 code
= fixp
->fx_r_type
;
8554 case BFD_RELOC_X86_64_32S
:
8555 if (!fixp
->fx_pcrel
)
8557 /* Don't turn BFD_RELOC_X86_64_32S into BFD_RELOC_32. */
8558 code
= fixp
->fx_r_type
;
8564 switch (fixp
->fx_size
)
8567 as_bad_where (fixp
->fx_file
, fixp
->fx_line
,
8568 _("can not do %d byte pc-relative relocation"),
8570 code
= BFD_RELOC_32_PCREL
;
8572 case 1: code
= BFD_RELOC_8_PCREL
; break;
8573 case 2: code
= BFD_RELOC_16_PCREL
; break;
8574 case 4: code
= BFD_RELOC_32_PCREL
; break;
8576 case 8: code
= BFD_RELOC_64_PCREL
; break;
8582 switch (fixp
->fx_size
)
8585 as_bad_where (fixp
->fx_file
, fixp
->fx_line
,
8586 _("can not do %d byte relocation"),
8588 code
= BFD_RELOC_32
;
8590 case 1: code
= BFD_RELOC_8
; break;
8591 case 2: code
= BFD_RELOC_16
; break;
8592 case 4: code
= BFD_RELOC_32
; break;
8594 case 8: code
= BFD_RELOC_64
; break;
8601 if ((code
== BFD_RELOC_32
8602 || code
== BFD_RELOC_32_PCREL
8603 || code
== BFD_RELOC_X86_64_32S
)
8605 && fixp
->fx_addsy
== GOT_symbol
)
8608 code
= BFD_RELOC_386_GOTPC
;
8610 code
= BFD_RELOC_X86_64_GOTPC32
;
8612 if ((code
== BFD_RELOC_64
|| code
== BFD_RELOC_64_PCREL
)
8614 && fixp
->fx_addsy
== GOT_symbol
)
8616 code
= BFD_RELOC_X86_64_GOTPC64
;
8619 rel
= (arelent
*) xmalloc (sizeof (arelent
));
8620 rel
->sym_ptr_ptr
= (asymbol
**) xmalloc (sizeof (asymbol
*));
8621 *rel
->sym_ptr_ptr
= symbol_get_bfdsym (fixp
->fx_addsy
);
8623 rel
->address
= fixp
->fx_frag
->fr_address
+ fixp
->fx_where
;
8625 if (!use_rela_relocations
)
8627 /* HACK: Since i386 ELF uses Rel instead of Rela, encode the
8628 vtable entry to be used in the relocation's section offset. */
8629 if (fixp
->fx_r_type
== BFD_RELOC_VTABLE_ENTRY
)
8630 rel
->address
= fixp
->fx_offset
;
8631 #if defined (OBJ_COFF) && defined (TE_PE)
8632 else if (fixp
->fx_addsy
&& S_IS_WEAK (fixp
->fx_addsy
))
8633 rel
->addend
= fixp
->fx_addnumber
- (S_GET_VALUE (fixp
->fx_addsy
) * 2);
8638 /* Use the rela in 64bit mode. */
8641 if (!fixp
->fx_pcrel
)
8642 rel
->addend
= fixp
->fx_offset
;
8646 case BFD_RELOC_X86_64_PLT32
:
8647 case BFD_RELOC_X86_64_GOT32
:
8648 case BFD_RELOC_X86_64_GOTPCREL
:
8649 case BFD_RELOC_X86_64_TLSGD
:
8650 case BFD_RELOC_X86_64_TLSLD
:
8651 case BFD_RELOC_X86_64_GOTTPOFF
:
8652 case BFD_RELOC_X86_64_GOTPC32_TLSDESC
:
8653 case BFD_RELOC_X86_64_TLSDESC_CALL
:
8654 rel
->addend
= fixp
->fx_offset
- fixp
->fx_size
;
8657 rel
->addend
= (section
->vma
8659 + fixp
->fx_addnumber
8660 + md_pcrel_from (fixp
));
8665 rel
->howto
= bfd_reloc_type_lookup (stdoutput
, code
);
8666 if (rel
->howto
== NULL
)
8668 as_bad_where (fixp
->fx_file
, fixp
->fx_line
,
8669 _("cannot represent relocation type %s"),
8670 bfd_get_reloc_code_name (code
));
8671 /* Set howto to a garbage value so that we can keep going. */
8672 rel
->howto
= bfd_reloc_type_lookup (stdoutput
, BFD_RELOC_32
);
8673 gas_assert (rel
->howto
!= NULL
);
8679 #include "tc-i386-intel.c"
8682 tc_x86_parse_to_dw2regnum (expressionS
*exp
)
8684 int saved_naked_reg
;
8685 char saved_register_dot
;
8687 saved_naked_reg
= allow_naked_reg
;
8688 allow_naked_reg
= 1;
8689 saved_register_dot
= register_chars
['.'];
8690 register_chars
['.'] = '.';
8691 allow_pseudo_reg
= 1;
8692 expression_and_evaluate (exp
);
8693 allow_pseudo_reg
= 0;
8694 register_chars
['.'] = saved_register_dot
;
8695 allow_naked_reg
= saved_naked_reg
;
8697 if (exp
->X_op
== O_register
&& exp
->X_add_number
>= 0)
8699 if ((addressT
) exp
->X_add_number
< i386_regtab_size
)
8701 exp
->X_op
= O_constant
;
8702 exp
->X_add_number
= i386_regtab
[exp
->X_add_number
]
8703 .dw2_regnum
[flag_code
>> 1];
8706 exp
->X_op
= O_illegal
;
8711 tc_x86_frame_initial_instructions (void)
8713 static unsigned int sp_regno
[2];
8715 if (!sp_regno
[flag_code
>> 1])
8717 char *saved_input
= input_line_pointer
;
8718 char sp
[][4] = {"esp", "rsp"};
8721 input_line_pointer
= sp
[flag_code
>> 1];
8722 tc_x86_parse_to_dw2regnum (&exp
);
8723 gas_assert (exp
.X_op
== O_constant
);
8724 sp_regno
[flag_code
>> 1] = exp
.X_add_number
;
8725 input_line_pointer
= saved_input
;
8728 cfi_add_CFA_def_cfa (sp_regno
[flag_code
>> 1], -x86_cie_data_alignment
);
8729 cfi_add_CFA_offset (x86_dwarf2_return_column
, x86_cie_data_alignment
);
8733 i386_elf_section_type (const char *str
, size_t len
)
8735 if (flag_code
== CODE_64BIT
8736 && len
== sizeof ("unwind") - 1
8737 && strncmp (str
, "unwind", 6) == 0)
8738 return SHT_X86_64_UNWIND
;
8745 i386_solaris_fix_up_eh_frame (segT sec
)
8747 if (flag_code
== CODE_64BIT
)
8748 elf_section_type (sec
) = SHT_X86_64_UNWIND
;
8754 tc_pe_dwarf2_emit_offset (symbolS
*symbol
, unsigned int size
)
8758 exp
.X_op
= O_secrel
;
8759 exp
.X_add_symbol
= symbol
;
8760 exp
.X_add_number
= 0;
8761 emit_expr (&exp
, size
);
8765 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8766 /* For ELF on x86-64, add support for SHF_X86_64_LARGE. */
8769 x86_64_section_letter (int letter
, char **ptr_msg
)
8771 if (flag_code
== CODE_64BIT
)
8774 return SHF_X86_64_LARGE
;
8776 *ptr_msg
= _("Bad .section directive: want a,l,w,x,M,S,G,T in string");
8779 *ptr_msg
= _("Bad .section directive: want a,w,x,M,S,G,T in string");
8784 x86_64_section_word (char *str
, size_t len
)
8786 if (len
== 5 && flag_code
== CODE_64BIT
&& CONST_STRNEQ (str
, "large"))
8787 return SHF_X86_64_LARGE
;
8793 handle_large_common (int small ATTRIBUTE_UNUSED
)
8795 if (flag_code
!= CODE_64BIT
)
8797 s_comm_internal (0, elf_common_parse
);
8798 as_warn (_(".largecomm supported only in 64bit mode, producing .comm"));
8802 static segT lbss_section
;
8803 asection
*saved_com_section_ptr
= elf_com_section_ptr
;
8804 asection
*saved_bss_section
= bss_section
;
8806 if (lbss_section
== NULL
)
8808 flagword applicable
;
8810 subsegT subseg
= now_subseg
;
8812 /* The .lbss section is for local .largecomm symbols. */
8813 lbss_section
= subseg_new (".lbss", 0);
8814 applicable
= bfd_applicable_section_flags (stdoutput
);
8815 bfd_set_section_flags (stdoutput
, lbss_section
,
8816 applicable
& SEC_ALLOC
);
8817 seg_info (lbss_section
)->bss
= 1;
8819 subseg_set (seg
, subseg
);
8822 elf_com_section_ptr
= &_bfd_elf_large_com_section
;
8823 bss_section
= lbss_section
;
8825 s_comm_internal (0, elf_common_parse
);
8827 elf_com_section_ptr
= saved_com_section_ptr
;
8828 bss_section
= saved_bss_section
;
8831 #endif /* OBJ_ELF || OBJ_MAYBE_ELF */