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, 2010
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.
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. */
135 unsigned int negated; /* turn off indicated flags. */
139 static void update_code_flag (int, int);
140 static void set_code_flag (int);
141 static void set_16bit_gcc_code_flag (int);
142 static void set_intel_syntax (int);
143 static void set_intel_mnemonic (int);
144 static void set_allow_index_reg (int);
145 static void set_sse_check (int);
146 static void set_cpu_arch (int);
148 static void pe_directive_secrel (int);
150 static void signed_cons (int);
151 static char *output_invalid (int c);
152 static int i386_finalize_immediate (segT, expressionS *, i386_operand_type,
154 static int i386_finalize_displacement (segT, expressionS *, i386_operand_type,
156 static int i386_att_operand (char *);
157 static int i386_intel_operand (char *, int);
158 static int i386_intel_simplify (expressionS *);
159 static int i386_intel_parse_name (const char *, expressionS *);
160 static const reg_entry *parse_register (char *, char **);
161 static char *parse_insn (char *, char *);
162 static char *parse_operands (char *, const char *);
163 static void swap_operands (void);
164 static void swap_2_operands (int, int);
165 static void optimize_imm (void);
166 static void optimize_disp (void);
167 static const insn_template *match_template (void);
168 static int check_string (void);
169 static int process_suffix (void);
170 static int check_byte_reg (void);
171 static int check_long_reg (void);
172 static int check_qword_reg (void);
173 static int check_word_reg (void);
174 static int finalize_imm (void);
175 static int process_operands (void);
176 static const seg_entry *build_modrm_byte (void);
177 static void output_insn (void);
178 static void output_imm (fragS *, offsetT);
179 static void output_disp (fragS *, offsetT);
181 static void s_bss (int);
183 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
184 static void handle_large_common (int small ATTRIBUTE_UNUSED);
187 static const char *default_arch = DEFAULT_ARCH;
192 /* VEX prefix is either 2 byte or 3 byte. */
193 unsigned char bytes[3];
195 /* Destination or source register specifier. */
196 const reg_entry *register_specifier;
199 /* 'md_assemble ()' gathers together information and puts it into a
206 const reg_entry *regs;
211 operand_size_mismatch,
212 operand_type_mismatch,
213 register_type_mismatch,
214 number_of_operands_mismatch,
215 invalid_instruction_suffix,
218 unsupported_with_intel_mnemonic,
225 /* TM holds the template for the insn were currently assembling. */
228 /* SUFFIX holds the instruction size suffix for byte, word, dword
229 or qword, if given. */
232 /* OPERANDS gives the number of given operands. */
233 unsigned int operands;
235 /* REG_OPERANDS, DISP_OPERANDS, MEM_OPERANDS, IMM_OPERANDS give the number
236 of given register, displacement, memory operands and immediate
238 unsigned int reg_operands, disp_operands, mem_operands, imm_operands;
240 /* TYPES [i] is the type (see above #defines) which tells us how to
241 use OP[i] for the corresponding operand. */
242 i386_operand_type types[MAX_OPERANDS];
244 /* Displacement expression, immediate expression, or register for each
246 union i386_op op[MAX_OPERANDS];
248 /* Flags for operands. */
249 unsigned int flags[MAX_OPERANDS];
250 #define Operand_PCrel 1
252 /* Relocation type for operand */
253 enum bfd_reloc_code_real reloc[MAX_OPERANDS];
255 /* BASE_REG, INDEX_REG, and LOG2_SCALE_FACTOR are used to encode
256 the base index byte below. */
257 const reg_entry *base_reg;
258 const reg_entry *index_reg;
259 unsigned int log2_scale_factor;
261 /* SEG gives the seg_entries of this insn. They are zero unless
262 explicit segment overrides are given. */
263 const seg_entry *seg[2];
265 /* PREFIX holds all the given prefix opcodes (usually null).
266 PREFIXES is the number of prefix opcodes. */
267 unsigned int prefixes;
268 unsigned char prefix[MAX_PREFIXES];
270 /* RM and SIB are the modrm byte and the sib byte where the
271 addressing modes of this insn are encoded. */
277 /* Swap operand in encoding. */
278 unsigned int swap_operand;
280 /* Force 32bit displacement in encoding. */
281 unsigned int disp32_encoding;
284 enum i386_error error;
287 typedef struct _i386_insn i386_insn;
289 /* List of chars besides those in app.c:symbol_chars that can start an
290 operand. Used to prevent the scrubber eating vital white-space. */
291 const char extra_symbol_chars[] = "*%-(["
300 #if (defined (TE_I386AIX) \
301 || ((defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)) \
302 && !defined (TE_GNU) \
303 && !defined (TE_LINUX) \
304 && !defined (TE_NETWARE) \
305 && !defined (TE_FreeBSD) \
306 && !defined (TE_NetBSD)))
307 /* This array holds the chars that always start a comment. If the
308 pre-processor is disabled, these aren't very useful. The option
309 --divide will remove '/' from this list. */
310 const char *i386_comment_chars = "#/";
311 #define SVR4_COMMENT_CHARS 1
312 #define PREFIX_SEPARATOR '\\'
315 const char *i386_comment_chars = "#";
316 #define PREFIX_SEPARATOR '/'
319 /* This array holds the chars that only start a comment at the beginning of
320 a line. If the line seems to have the form '# 123 filename'
321 .line and .file directives will appear in the pre-processed output.
322 Note that input_file.c hand checks for '#' at the beginning of the
323 first line of the input file. This is because the compiler outputs
324 #NO_APP at the beginning of its output.
325 Also note that comments started like this one will always work if
326 '/' isn't otherwise defined. */
327 const char line_comment_chars[] = "#/";
329 const char line_separator_chars[] = ";";
331 /* Chars that can be used to separate mant from exp in floating point
333 const char EXP_CHARS[] = "eE";
335 /* Chars that mean this number is a floating point constant
338 const char FLT_CHARS[] = "fFdDxX";
340 /* Tables for lexical analysis. */
341 static char mnemonic_chars[256];
342 static char register_chars[256];
343 static char operand_chars[256];
344 static char identifier_chars[256];
345 static char digit_chars[256];
347 /* Lexical macros. */
348 #define is_mnemonic_char(x) (mnemonic_chars[(unsigned char) x])
349 #define is_operand_char(x) (operand_chars[(unsigned char) x])
350 #define is_register_char(x) (register_chars[(unsigned char) x])
351 #define is_space_char(x) ((x) == ' ')
352 #define is_identifier_char(x) (identifier_chars[(unsigned char) x])
353 #define is_digit_char(x) (digit_chars[(unsigned char) x])
355 /* All non-digit non-letter characters that may occur in an operand. */
356 static char operand_special_chars[] = "%$-+(,)*._~/<>|&^!:[@]";
358 /* md_assemble() always leaves the strings it's passed unaltered. To
359 effect this we maintain a stack of saved characters that we've smashed
360 with '\0's (indicating end of strings for various sub-fields of the
361 assembler instruction). */
362 static char save_stack[32];
363 static char *save_stack_p;
364 #define END_STRING_AND_SAVE(s) \
365 do { *save_stack_p++ = *(s); *(s) = '\0'; } while (0)
366 #define RESTORE_END_STRING(s) \
367 do { *(s) = *--save_stack_p; } while (0)
369 /* The instruction we're assembling. */
372 /* Possible templates for current insn. */
373 static const templates *current_templates;
375 /* Per instruction expressionS buffers: max displacements & immediates. */
376 static expressionS disp_expressions[MAX_MEMORY_OPERANDS];
377 static expressionS im_expressions[MAX_IMMEDIATE_OPERANDS];
379 /* Current operand we are working on. */
380 static int this_operand = -1;
382 /* We support four different modes. FLAG_CODE variable is used to distinguish
390 static enum flag_code flag_code;
391 static unsigned int object_64bit;
392 static unsigned int disallow_64bit_reloc;
393 static int use_rela_relocations = 0;
395 #if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \
396 || defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
397 || defined (TE_PE) || defined (TE_PEP) || defined (OBJ_MACH_O))
399 /* The ELF ABI to use. */
407 static enum x86_elf_abi x86_elf_abi = I386_ABI;
410 /* The names used to print error messages. */
411 static const char *flag_code_names[] =
418 /* 1 for intel syntax,
420 static int intel_syntax = 0;
422 /* 1 for intel mnemonic,
423 0 if att mnemonic. */
424 static int intel_mnemonic = !SYSV386_COMPAT;
426 /* 1 if support old (<= 2.8.1) versions of gcc. */
427 static int old_gcc = OLDGCC_COMPAT;
429 /* 1 if pseudo registers are permitted. */
430 static int allow_pseudo_reg = 0;
432 /* 1 if register prefix % not required. */
433 static int allow_naked_reg = 0;
435 /* 1 if pseudo index register, eiz/riz, is allowed . */
436 static int allow_index_reg = 0;
446 /* Register prefix used for error message. */
447 static const char *register_prefix = "%";
449 /* Used in 16 bit gcc mode to add an l suffix to call, ret, enter,
450 leave, push, and pop instructions so that gcc has the same stack
451 frame as in 32 bit mode. */
452 static char stackop_size = '\0';
454 /* Non-zero to optimize code alignment. */
455 int optimize_align_code = 1;
457 /* Non-zero to quieten some warnings. */
458 static int quiet_warnings = 0;
461 static const char *cpu_arch_name = NULL;
462 static char *cpu_sub_arch_name = NULL;
464 /* CPU feature flags. */
465 static i386_cpu_flags cpu_arch_flags = CPU_UNKNOWN_FLAGS;
467 /* If we have selected a cpu we are generating instructions for. */
468 static int cpu_arch_tune_set = 0;
470 /* Cpu we are generating instructions for. */
471 enum processor_type cpu_arch_tune = PROCESSOR_UNKNOWN;
473 /* CPU feature flags of cpu we are generating instructions for. */
474 static i386_cpu_flags cpu_arch_tune_flags;
476 /* CPU instruction set architecture used. */
477 enum processor_type cpu_arch_isa = PROCESSOR_UNKNOWN;
479 /* CPU feature flags of instruction set architecture used. */
480 i386_cpu_flags cpu_arch_isa_flags;
482 /* If set, conditional jumps are not automatically promoted to handle
483 larger than a byte offset. */
484 static unsigned int no_cond_jump_promotion = 0;
486 /* Encode SSE instructions with VEX prefix. */
487 static unsigned int sse2avx;
489 /* Encode scalar AVX instructions with specific vector length. */
496 /* Pre-defined "_GLOBAL_OFFSET_TABLE_". */
497 static symbolS *GOT_symbol;
499 /* The dwarf2 return column, adjusted for 32 or 64 bit. */
500 unsigned int x86_dwarf2_return_column;
502 /* The dwarf2 data alignment, adjusted for 32 or 64 bit. */
503 int x86_cie_data_alignment;
505 /* Interface to relax_segment.
506 There are 3 major relax states for 386 jump insns because the
507 different types of jumps add different sizes to frags when we're
508 figuring out what sort of jump to choose to reach a given label. */
511 #define UNCOND_JUMP 0
513 #define COND_JUMP86 2
518 #define SMALL16 (SMALL | CODE16)
520 #define BIG16 (BIG | CODE16)
524 #define INLINE __inline__
530 #define ENCODE_RELAX_STATE(type, size) \
531 ((relax_substateT) (((type) << 2) | (size)))
532 #define TYPE_FROM_RELAX_STATE(s) \
534 #define DISP_SIZE_FROM_RELAX_STATE(s) \
535 ((((s) & 3) == BIG ? 4 : (((s) & 3) == BIG16 ? 2 : 1)))
537 /* This table is used by relax_frag to promote short jumps to long
538 ones where necessary. SMALL (short) jumps may be promoted to BIG
539 (32 bit long) ones, and SMALL16 jumps to BIG16 (16 bit long). We
540 don't allow a short jump in a 32 bit code segment to be promoted to
541 a 16 bit offset jump because it's slower (requires data size
542 prefix), and doesn't work, unless the destination is in the bottom
543 64k of the code segment (The top 16 bits of eip are zeroed). */
545 const relax_typeS md_relax_table[] =
548 1) most positive reach of this state,
549 2) most negative reach of this state,
550 3) how many bytes this mode will have in the variable part of the frag
551 4) which index into the table to try if we can't fit into this one. */
553 /* UNCOND_JUMP states. */
554 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (UNCOND_JUMP, BIG)},
555 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (UNCOND_JUMP, BIG16)},
556 /* dword jmp adds 4 bytes to frag:
557 0 extra opcode bytes, 4 displacement bytes. */
559 /* word jmp adds 2 byte2 to frag:
560 0 extra opcode bytes, 2 displacement bytes. */
563 /* COND_JUMP states. */
564 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP, BIG)},
565 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP, BIG16)},
566 /* dword conditionals adds 5 bytes to frag:
567 1 extra opcode byte, 4 displacement bytes. */
569 /* word conditionals add 3 bytes to frag:
570 1 extra opcode byte, 2 displacement bytes. */
573 /* COND_JUMP86 states. */
574 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP86, BIG)},
575 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP86, BIG16)},
576 /* dword conditionals adds 5 bytes to frag:
577 1 extra opcode byte, 4 displacement bytes. */
579 /* word conditionals add 4 bytes to frag:
580 1 displacement byte and a 3 byte long branch insn. */
584 static const arch_entry cpu_arch[] =
586 /* Do not replace the first two entries - i386_target_format()
587 relies on them being there in this order. */
588 { STRING_COMMA_LEN ("generic32"), PROCESSOR_GENERIC32,
589 CPU_GENERIC32_FLAGS, 0, 0 },
590 { STRING_COMMA_LEN ("generic64"), PROCESSOR_GENERIC64,
591 CPU_GENERIC64_FLAGS, 0, 0 },
592 { STRING_COMMA_LEN ("i8086"), PROCESSOR_UNKNOWN,
593 CPU_NONE_FLAGS, 0, 0 },
594 { STRING_COMMA_LEN ("i186"), PROCESSOR_UNKNOWN,
595 CPU_I186_FLAGS, 0, 0 },
596 { STRING_COMMA_LEN ("i286"), PROCESSOR_UNKNOWN,
597 CPU_I286_FLAGS, 0, 0 },
598 { STRING_COMMA_LEN ("i386"), PROCESSOR_I386,
599 CPU_I386_FLAGS, 0, 0 },
600 { STRING_COMMA_LEN ("i486"), PROCESSOR_I486,
601 CPU_I486_FLAGS, 0, 0 },
602 { STRING_COMMA_LEN ("i586"), PROCESSOR_PENTIUM,
603 CPU_I586_FLAGS, 0, 0 },
604 { STRING_COMMA_LEN ("i686"), PROCESSOR_PENTIUMPRO,
605 CPU_I686_FLAGS, 0, 0 },
606 { STRING_COMMA_LEN ("pentium"), PROCESSOR_PENTIUM,
607 CPU_I586_FLAGS, 0, 0 },
608 { STRING_COMMA_LEN ("pentiumpro"), PROCESSOR_PENTIUMPRO,
609 CPU_PENTIUMPRO_FLAGS, 0, 0 },
610 { STRING_COMMA_LEN ("pentiumii"), PROCESSOR_PENTIUMPRO,
611 CPU_P2_FLAGS, 0, 0 },
612 { STRING_COMMA_LEN ("pentiumiii"),PROCESSOR_PENTIUMPRO,
613 CPU_P3_FLAGS, 0, 0 },
614 { STRING_COMMA_LEN ("pentium4"), PROCESSOR_PENTIUM4,
615 CPU_P4_FLAGS, 0, 0 },
616 { STRING_COMMA_LEN ("prescott"), PROCESSOR_NOCONA,
617 CPU_CORE_FLAGS, 0, 0 },
618 { STRING_COMMA_LEN ("nocona"), PROCESSOR_NOCONA,
619 CPU_NOCONA_FLAGS, 0, 0 },
620 { STRING_COMMA_LEN ("yonah"), PROCESSOR_CORE,
621 CPU_CORE_FLAGS, 1, 0 },
622 { STRING_COMMA_LEN ("core"), PROCESSOR_CORE,
623 CPU_CORE_FLAGS, 0, 0 },
624 { STRING_COMMA_LEN ("merom"), PROCESSOR_CORE2,
625 CPU_CORE2_FLAGS, 1, 0 },
626 { STRING_COMMA_LEN ("core2"), PROCESSOR_CORE2,
627 CPU_CORE2_FLAGS, 0, 0 },
628 { STRING_COMMA_LEN ("corei7"), PROCESSOR_COREI7,
629 CPU_COREI7_FLAGS, 0, 0 },
630 { STRING_COMMA_LEN ("l1om"), PROCESSOR_L1OM,
631 CPU_L1OM_FLAGS, 0, 0 },
632 { STRING_COMMA_LEN ("k6"), PROCESSOR_K6,
633 CPU_K6_FLAGS, 0, 0 },
634 { STRING_COMMA_LEN ("k6_2"), PROCESSOR_K6,
635 CPU_K6_2_FLAGS, 0, 0 },
636 { STRING_COMMA_LEN ("athlon"), PROCESSOR_ATHLON,
637 CPU_ATHLON_FLAGS, 0, 0 },
638 { STRING_COMMA_LEN ("sledgehammer"), PROCESSOR_K8,
639 CPU_K8_FLAGS, 1, 0 },
640 { STRING_COMMA_LEN ("opteron"), PROCESSOR_K8,
641 CPU_K8_FLAGS, 0, 0 },
642 { STRING_COMMA_LEN ("k8"), PROCESSOR_K8,
643 CPU_K8_FLAGS, 0, 0 },
644 { STRING_COMMA_LEN ("amdfam10"), PROCESSOR_AMDFAM10,
645 CPU_AMDFAM10_FLAGS, 0, 0 },
646 { STRING_COMMA_LEN ("bdver1"), PROCESSOR_BDVER1,
647 CPU_BDVER1_FLAGS, 0, 0 },
648 { STRING_COMMA_LEN (".8087"), PROCESSOR_UNKNOWN,
649 CPU_8087_FLAGS, 0, 0 },
650 { STRING_COMMA_LEN (".287"), PROCESSOR_UNKNOWN,
651 CPU_287_FLAGS, 0, 0 },
652 { STRING_COMMA_LEN (".387"), PROCESSOR_UNKNOWN,
653 CPU_387_FLAGS, 0, 0 },
654 { STRING_COMMA_LEN (".no87"), PROCESSOR_UNKNOWN,
655 CPU_ANY87_FLAGS, 0, 1 },
656 { STRING_COMMA_LEN (".mmx"), PROCESSOR_UNKNOWN,
657 CPU_MMX_FLAGS, 0, 0 },
658 { STRING_COMMA_LEN (".nommx"), PROCESSOR_UNKNOWN,
659 CPU_3DNOWA_FLAGS, 0, 1 },
660 { STRING_COMMA_LEN (".sse"), PROCESSOR_UNKNOWN,
661 CPU_SSE_FLAGS, 0, 0 },
662 { STRING_COMMA_LEN (".sse2"), PROCESSOR_UNKNOWN,
663 CPU_SSE2_FLAGS, 0, 0 },
664 { STRING_COMMA_LEN (".sse3"), PROCESSOR_UNKNOWN,
665 CPU_SSE3_FLAGS, 0, 0 },
666 { STRING_COMMA_LEN (".ssse3"), PROCESSOR_UNKNOWN,
667 CPU_SSSE3_FLAGS, 0, 0 },
668 { STRING_COMMA_LEN (".sse4.1"), PROCESSOR_UNKNOWN,
669 CPU_SSE4_1_FLAGS, 0, 0 },
670 { STRING_COMMA_LEN (".sse4.2"), PROCESSOR_UNKNOWN,
671 CPU_SSE4_2_FLAGS, 0, 0 },
672 { STRING_COMMA_LEN (".sse4"), PROCESSOR_UNKNOWN,
673 CPU_SSE4_2_FLAGS, 0, 0 },
674 { STRING_COMMA_LEN (".nosse"), PROCESSOR_UNKNOWN,
675 CPU_ANY_SSE_FLAGS, 0, 1 },
676 { STRING_COMMA_LEN (".avx"), PROCESSOR_UNKNOWN,
677 CPU_AVX_FLAGS, 0, 0 },
678 { STRING_COMMA_LEN (".noavx"), PROCESSOR_UNKNOWN,
679 CPU_ANY_AVX_FLAGS, 0, 1 },
680 { STRING_COMMA_LEN (".vmx"), PROCESSOR_UNKNOWN,
681 CPU_VMX_FLAGS, 0, 0 },
682 { STRING_COMMA_LEN (".smx"), PROCESSOR_UNKNOWN,
683 CPU_SMX_FLAGS, 0, 0 },
684 { STRING_COMMA_LEN (".xsave"), PROCESSOR_UNKNOWN,
685 CPU_XSAVE_FLAGS, 0, 0 },
686 { STRING_COMMA_LEN (".xsaveopt"), PROCESSOR_UNKNOWN,
687 CPU_XSAVEOPT_FLAGS, 0, 0 },
688 { STRING_COMMA_LEN (".aes"), PROCESSOR_UNKNOWN,
689 CPU_AES_FLAGS, 0, 0 },
690 { STRING_COMMA_LEN (".pclmul"), PROCESSOR_UNKNOWN,
691 CPU_PCLMUL_FLAGS, 0, 0 },
692 { STRING_COMMA_LEN (".clmul"), PROCESSOR_UNKNOWN,
693 CPU_PCLMUL_FLAGS, 1, 0 },
694 { STRING_COMMA_LEN (".fsgsbase"), PROCESSOR_UNKNOWN,
695 CPU_FSGSBASE_FLAGS, 0, 0 },
696 { STRING_COMMA_LEN (".rdrnd"), PROCESSOR_UNKNOWN,
697 CPU_RDRND_FLAGS, 0, 0 },
698 { STRING_COMMA_LEN (".f16c"), PROCESSOR_UNKNOWN,
699 CPU_F16C_FLAGS, 0, 0 },
700 { STRING_COMMA_LEN (".fma"), PROCESSOR_UNKNOWN,
701 CPU_FMA_FLAGS, 0, 0 },
702 { STRING_COMMA_LEN (".fma4"), PROCESSOR_UNKNOWN,
703 CPU_FMA4_FLAGS, 0, 0 },
704 { STRING_COMMA_LEN (".xop"), PROCESSOR_UNKNOWN,
705 CPU_XOP_FLAGS, 0, 0 },
706 { STRING_COMMA_LEN (".lwp"), PROCESSOR_UNKNOWN,
707 CPU_LWP_FLAGS, 0, 0 },
708 { STRING_COMMA_LEN (".movbe"), PROCESSOR_UNKNOWN,
709 CPU_MOVBE_FLAGS, 0, 0 },
710 { STRING_COMMA_LEN (".ept"), PROCESSOR_UNKNOWN,
711 CPU_EPT_FLAGS, 0, 0 },
712 { STRING_COMMA_LEN (".clflush"), PROCESSOR_UNKNOWN,
713 CPU_CLFLUSH_FLAGS, 0, 0 },
714 { STRING_COMMA_LEN (".nop"), PROCESSOR_UNKNOWN,
715 CPU_NOP_FLAGS, 0, 0 },
716 { STRING_COMMA_LEN (".syscall"), PROCESSOR_UNKNOWN,
717 CPU_SYSCALL_FLAGS, 0, 0 },
718 { STRING_COMMA_LEN (".rdtscp"), PROCESSOR_UNKNOWN,
719 CPU_RDTSCP_FLAGS, 0, 0 },
720 { STRING_COMMA_LEN (".3dnow"), PROCESSOR_UNKNOWN,
721 CPU_3DNOW_FLAGS, 0, 0 },
722 { STRING_COMMA_LEN (".3dnowa"), PROCESSOR_UNKNOWN,
723 CPU_3DNOWA_FLAGS, 0, 0 },
724 { STRING_COMMA_LEN (".padlock"), PROCESSOR_UNKNOWN,
725 CPU_PADLOCK_FLAGS, 0, 0 },
726 { STRING_COMMA_LEN (".pacifica"), PROCESSOR_UNKNOWN,
727 CPU_SVME_FLAGS, 1, 0 },
728 { STRING_COMMA_LEN (".svme"), PROCESSOR_UNKNOWN,
729 CPU_SVME_FLAGS, 0, 0 },
730 { STRING_COMMA_LEN (".sse4a"), PROCESSOR_UNKNOWN,
731 CPU_SSE4A_FLAGS, 0, 0 },
732 { STRING_COMMA_LEN (".abm"), PROCESSOR_UNKNOWN,
733 CPU_ABM_FLAGS, 0, 0 },
734 { STRING_COMMA_LEN (".bmi"), PROCESSOR_UNKNOWN,
735 CPU_BMI_FLAGS, 0, 0 },
736 { STRING_COMMA_LEN (".tbm"), PROCESSOR_UNKNOWN,
737 CPU_TBM_FLAGS, 0, 0 },
741 /* Like s_lcomm_internal in gas/read.c but the alignment string
742 is allowed to be optional. */
745 pe_lcomm_internal (int needs_align, symbolS *symbolP, addressT size)
752 && *input_line_pointer == ',')
754 align = parse_align (needs_align - 1);
756 if (align == (addressT) -1)
771 bss_alloc (symbolP, size, align);
776 pe_lcomm (int needs_align)
778 s_comm_internal (needs_align * 2, pe_lcomm_internal);
782 const pseudo_typeS md_pseudo_table[] =
784 #if !defined(OBJ_AOUT) && !defined(USE_ALIGN_PTWO)
785 {"align", s_align_bytes, 0},
787 {"align", s_align_ptwo, 0},
789 {"arch", set_cpu_arch, 0},
793 {"lcomm", pe_lcomm, 1},
795 {"ffloat", float_cons, 'f'},
796 {"dfloat", float_cons, 'd'},
797 {"tfloat", float_cons, 'x'},
799 {"slong", signed_cons, 4},
800 {"noopt", s_ignore, 0},
801 {"optim", s_ignore, 0},
802 {"code16gcc", set_16bit_gcc_code_flag, CODE_16BIT},
803 {"code16", set_code_flag, CODE_16BIT},
804 {"code32", set_code_flag, CODE_32BIT},
805 {"code64", set_code_flag, CODE_64BIT},
806 {"intel_syntax", set_intel_syntax, 1},
807 {"att_syntax", set_intel_syntax, 0},
808 {"intel_mnemonic", set_intel_mnemonic, 1},
809 {"att_mnemonic", set_intel_mnemonic, 0},
810 {"allow_index_reg", set_allow_index_reg, 1},
811 {"disallow_index_reg", set_allow_index_reg, 0},
812 {"sse_check", set_sse_check, 0},
813 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
814 {"largecomm", handle_large_common, 0},
816 {"file", (void (*) (int)) dwarf2_directive_file, 0},
817 {"loc", dwarf2_directive_loc, 0},
818 {"loc_mark_labels", dwarf2_directive_loc_mark_labels, 0},
821 {"secrel32", pe_directive_secrel, 0},
826 /* For interface with expression (). */
827 extern char *input_line_pointer;
829 /* Hash table for instruction mnemonic lookup. */
830 static struct hash_control *op_hash;
832 /* Hash table for register lookup. */
833 static struct hash_control *reg_hash;
836 i386_align_code (fragS *fragP, int count)
838 /* Various efficient no-op patterns for aligning code labels.
839 Note: Don't try to assemble the instructions in the comments.
840 0L and 0w are not legal. */
841 static const char f32_1[] =
843 static const char f32_2[] =
844 {0x66,0x90}; /* xchg %ax,%ax */
845 static const char f32_3[] =
846 {0x8d,0x76,0x00}; /* leal 0(%esi),%esi */
847 static const char f32_4[] =
848 {0x8d,0x74,0x26,0x00}; /* leal 0(%esi,1),%esi */
849 static const char f32_5[] =
851 0x8d,0x74,0x26,0x00}; /* leal 0(%esi,1),%esi */
852 static const char f32_6[] =
853 {0x8d,0xb6,0x00,0x00,0x00,0x00}; /* leal 0L(%esi),%esi */
854 static const char f32_7[] =
855 {0x8d,0xb4,0x26,0x00,0x00,0x00,0x00}; /* leal 0L(%esi,1),%esi */
856 static const char f32_8[] =
858 0x8d,0xb4,0x26,0x00,0x00,0x00,0x00}; /* leal 0L(%esi,1),%esi */
859 static const char f32_9[] =
860 {0x89,0xf6, /* movl %esi,%esi */
861 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
862 static const char f32_10[] =
863 {0x8d,0x76,0x00, /* leal 0(%esi),%esi */
864 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
865 static const char f32_11[] =
866 {0x8d,0x74,0x26,0x00, /* leal 0(%esi,1),%esi */
867 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
868 static const char f32_12[] =
869 {0x8d,0xb6,0x00,0x00,0x00,0x00, /* leal 0L(%esi),%esi */
870 0x8d,0xbf,0x00,0x00,0x00,0x00}; /* leal 0L(%edi),%edi */
871 static const char f32_13[] =
872 {0x8d,0xb6,0x00,0x00,0x00,0x00, /* leal 0L(%esi),%esi */
873 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
874 static const char f32_14[] =
875 {0x8d,0xb4,0x26,0x00,0x00,0x00,0x00, /* leal 0L(%esi,1),%esi */
876 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
877 static const char f16_3[] =
878 {0x8d,0x74,0x00}; /* lea 0(%esi),%esi */
879 static const char f16_4[] =
880 {0x8d,0xb4,0x00,0x00}; /* lea 0w(%si),%si */
881 static const char f16_5[] =
883 0x8d,0xb4,0x00,0x00}; /* lea 0w(%si),%si */
884 static const char f16_6[] =
885 {0x89,0xf6, /* mov %si,%si */
886 0x8d,0xbd,0x00,0x00}; /* lea 0w(%di),%di */
887 static const char f16_7[] =
888 {0x8d,0x74,0x00, /* lea 0(%si),%si */
889 0x8d,0xbd,0x00,0x00}; /* lea 0w(%di),%di */
890 static const char f16_8[] =
891 {0x8d,0xb4,0x00,0x00, /* lea 0w(%si),%si */
892 0x8d,0xbd,0x00,0x00}; /* lea 0w(%di),%di */
893 static const char jump_31[] =
894 {0xeb,0x1d,0x90,0x90,0x90,0x90,0x90, /* jmp .+31; lotsa nops */
895 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
896 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
897 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90};
898 static const char *const f32_patt[] = {
899 f32_1, f32_2, f32_3, f32_4, f32_5, f32_6, f32_7, f32_8,
900 f32_9, f32_10, f32_11, f32_12, f32_13, f32_14
902 static const char *const f16_patt[] = {
903 f32_1, f32_2, f16_3, f16_4, f16_5, f16_6, f16_7, f16_8
906 static const char alt_3[] =
908 /* nopl 0(%[re]ax) */
909 static const char alt_4[] =
910 {0x0f,0x1f,0x40,0x00};
911 /* nopl 0(%[re]ax,%[re]ax,1) */
912 static const char alt_5[] =
913 {0x0f,0x1f,0x44,0x00,0x00};
914 /* nopw 0(%[re]ax,%[re]ax,1) */
915 static const char alt_6[] =
916 {0x66,0x0f,0x1f,0x44,0x00,0x00};
917 /* nopl 0L(%[re]ax) */
918 static const char alt_7[] =
919 {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
920 /* nopl 0L(%[re]ax,%[re]ax,1) */
921 static const char alt_8[] =
922 {0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
923 /* nopw 0L(%[re]ax,%[re]ax,1) */
924 static const char alt_9[] =
925 {0x66,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
926 /* nopw %cs:0L(%[re]ax,%[re]ax,1) */
927 static const char alt_10[] =
928 {0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
930 nopw %cs:0L(%[re]ax,%[re]ax,1) */
931 static const char alt_long_11[] =
933 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
936 nopw %cs:0L(%[re]ax,%[re]ax,1) */
937 static const char alt_long_12[] =
940 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
944 nopw %cs:0L(%[re]ax,%[re]ax,1) */
945 static const char alt_long_13[] =
949 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
954 nopw %cs:0L(%[re]ax,%[re]ax,1) */
955 static const char alt_long_14[] =
960 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
966 nopw %cs:0L(%[re]ax,%[re]ax,1) */
967 static const char alt_long_15[] =
973 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
974 /* nopl 0(%[re]ax,%[re]ax,1)
975 nopw 0(%[re]ax,%[re]ax,1) */
976 static const char alt_short_11[] =
977 {0x0f,0x1f,0x44,0x00,0x00,
978 0x66,0x0f,0x1f,0x44,0x00,0x00};
979 /* nopw 0(%[re]ax,%[re]ax,1)
980 nopw 0(%[re]ax,%[re]ax,1) */
981 static const char alt_short_12[] =
982 {0x66,0x0f,0x1f,0x44,0x00,0x00,
983 0x66,0x0f,0x1f,0x44,0x00,0x00};
984 /* nopw 0(%[re]ax,%[re]ax,1)
986 static const char alt_short_13[] =
987 {0x66,0x0f,0x1f,0x44,0x00,0x00,
988 0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
991 static const char alt_short_14[] =
992 {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00,
993 0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
995 nopl 0L(%[re]ax,%[re]ax,1) */
996 static const char alt_short_15[] =
997 {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00,
998 0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
999 static const char *const alt_short_patt[] = {
1000 f32_1, f32_2, alt_3, alt_4, alt_5, alt_6, alt_7, alt_8,
1001 alt_9, alt_10, alt_short_11, alt_short_12, alt_short_13,
1002 alt_short_14, alt_short_15
1004 static const char *const alt_long_patt[] = {
1005 f32_1, f32_2, alt_3, alt_4, alt_5, alt_6, alt_7, alt_8,
1006 alt_9, alt_10, alt_long_11, alt_long_12, alt_long_13,
1007 alt_long_14, alt_long_15
1010 /* Only align for at least a positive non-zero boundary. */
1011 if (count <= 0 || count > MAX_MEM_FOR_RS_ALIGN_CODE)
1014 /* We need to decide which NOP sequence to use for 32bit and
1015 64bit. When -mtune= is used:
1017 1. For PROCESSOR_I386, PROCESSOR_I486, PROCESSOR_PENTIUM and
1018 PROCESSOR_GENERIC32, f32_patt will be used.
1019 2. For PROCESSOR_PENTIUMPRO, PROCESSOR_PENTIUM4, PROCESSOR_NOCONA,
1020 PROCESSOR_CORE, PROCESSOR_CORE2, PROCESSOR_COREI7, and
1021 PROCESSOR_GENERIC64, alt_long_patt will be used.
1022 3. For PROCESSOR_ATHLON, PROCESSOR_K6, PROCESSOR_K8 and
1023 PROCESSOR_AMDFAM10, and PROCESSOR_BDVER1, alt_short_patt
1026 When -mtune= isn't used, alt_long_patt will be used if
1027 cpu_arch_isa_flags has CpuNop. Otherwise, f32_patt will
1030 When -march= or .arch is used, we can't use anything beyond
1031 cpu_arch_isa_flags. */
1033 if (flag_code == CODE_16BIT)
1037 memcpy (fragP->fr_literal + fragP->fr_fix,
1039 /* Adjust jump offset. */
1040 fragP->fr_literal[fragP->fr_fix + 1] = count - 2;
1043 memcpy (fragP->fr_literal + fragP->fr_fix,
1044 f16_patt[count - 1], count);
1048 const char *const *patt = NULL;
1050 if (fragP->tc_frag_data.isa == PROCESSOR_UNKNOWN)
1052 /* PROCESSOR_UNKNOWN means that all ISAs may be used. */
1053 switch (cpu_arch_tune)
1055 case PROCESSOR_UNKNOWN:
1056 /* We use cpu_arch_isa_flags to check if we SHOULD
1057 optimize with nops. */
1058 if (fragP->tc_frag_data.isa_flags.bitfield.cpunop)
1059 patt = alt_long_patt;
1063 case PROCESSOR_PENTIUMPRO:
1064 case PROCESSOR_PENTIUM4:
1065 case PROCESSOR_NOCONA:
1066 case PROCESSOR_CORE:
1067 case PROCESSOR_CORE2:
1068 case PROCESSOR_COREI7:
1069 case PROCESSOR_L1OM:
1070 case PROCESSOR_GENERIC64:
1071 patt = alt_long_patt;
1074 case PROCESSOR_ATHLON:
1076 case PROCESSOR_AMDFAM10:
1077 case PROCESSOR_BDVER1:
1078 patt = alt_short_patt;
1080 case PROCESSOR_I386:
1081 case PROCESSOR_I486:
1082 case PROCESSOR_PENTIUM:
1083 case PROCESSOR_GENERIC32:
1090 switch (fragP->tc_frag_data.tune)
1092 case PROCESSOR_UNKNOWN:
1093 /* When cpu_arch_isa is set, cpu_arch_tune shouldn't be
1094 PROCESSOR_UNKNOWN. */
1098 case PROCESSOR_I386:
1099 case PROCESSOR_I486:
1100 case PROCESSOR_PENTIUM:
1102 case PROCESSOR_ATHLON:
1104 case PROCESSOR_AMDFAM10:
1105 case PROCESSOR_BDVER1:
1106 case PROCESSOR_GENERIC32:
1107 /* We use cpu_arch_isa_flags to check if we CAN optimize
1109 if (fragP->tc_frag_data.isa_flags.bitfield.cpunop)
1110 patt = alt_short_patt;
1114 case PROCESSOR_PENTIUMPRO:
1115 case PROCESSOR_PENTIUM4:
1116 case PROCESSOR_NOCONA:
1117 case PROCESSOR_CORE:
1118 case PROCESSOR_CORE2:
1119 case PROCESSOR_COREI7:
1120 case PROCESSOR_L1OM:
1121 if (fragP->tc_frag_data.isa_flags.bitfield.cpunop)
1122 patt = alt_long_patt;
1126 case PROCESSOR_GENERIC64:
1127 patt = alt_long_patt;
1132 if (patt == f32_patt)
1134 /* If the padding is less than 15 bytes, we use the normal
1135 ones. Otherwise, we use a jump instruction and adjust
1139 /* For 64bit, the limit is 3 bytes. */
1140 if (flag_code == CODE_64BIT
1141 && fragP->tc_frag_data.isa_flags.bitfield.cpulm)
1146 memcpy (fragP->fr_literal + fragP->fr_fix,
1147 patt[count - 1], count);
1150 memcpy (fragP->fr_literal + fragP->fr_fix,
1152 /* Adjust jump offset. */
1153 fragP->fr_literal[fragP->fr_fix + 1] = count - 2;
1158 /* Maximum length of an instruction is 15 byte. If the
1159 padding is greater than 15 bytes and we don't use jump,
1160 we have to break it into smaller pieces. */
1161 int padding = count;
1162 while (padding > 15)
1165 memcpy (fragP->fr_literal + fragP->fr_fix + padding,
1170 memcpy (fragP->fr_literal + fragP->fr_fix,
1171 patt [padding - 1], padding);
1174 fragP->fr_var = count;
1178 operand_type_all_zero (const union i386_operand_type *x)
1180 switch (ARRAY_SIZE(x->array))
1189 return !x->array[0];
1196 operand_type_set (union i386_operand_type *x, unsigned int v)
1198 switch (ARRAY_SIZE(x->array))
1213 operand_type_equal (const union i386_operand_type *x,
1214 const union i386_operand_type *y)
1216 switch (ARRAY_SIZE(x->array))
1219 if (x->array[2] != y->array[2])
1222 if (x->array[1] != y->array[1])
1225 return x->array[0] == y->array[0];
1233 cpu_flags_all_zero (const union i386_cpu_flags *x)
1235 switch (ARRAY_SIZE(x->array))
1244 return !x->array[0];
1251 cpu_flags_set (union i386_cpu_flags *x, unsigned int v)
1253 switch (ARRAY_SIZE(x->array))
1268 cpu_flags_equal (const union i386_cpu_flags *x,
1269 const union i386_cpu_flags *y)
1271 switch (ARRAY_SIZE(x->array))
1274 if (x->array[2] != y->array[2])
1277 if (x->array[1] != y->array[1])
1280 return x->array[0] == y->array[0];
1288 cpu_flags_check_cpu64 (i386_cpu_flags f)
1290 return !((flag_code == CODE_64BIT && f.bitfield.cpuno64)
1291 || (flag_code != CODE_64BIT && f.bitfield.cpu64));
1294 static INLINE i386_cpu_flags
1295 cpu_flags_and (i386_cpu_flags x, i386_cpu_flags y)
1297 switch (ARRAY_SIZE (x.array))
1300 x.array [2] &= y.array [2];
1302 x.array [1] &= y.array [1];
1304 x.array [0] &= y.array [0];
1312 static INLINE i386_cpu_flags
1313 cpu_flags_or (i386_cpu_flags x, i386_cpu_flags y)
1315 switch (ARRAY_SIZE (x.array))
1318 x.array [2] |= y.array [2];
1320 x.array [1] |= y.array [1];
1322 x.array [0] |= y.array [0];
1330 static INLINE i386_cpu_flags
1331 cpu_flags_and_not (i386_cpu_flags x, i386_cpu_flags y)
1333 switch (ARRAY_SIZE (x.array))
1336 x.array [2] &= ~y.array [2];
1338 x.array [1] &= ~y.array [1];
1340 x.array [0] &= ~y.array [0];
1348 #define CPU_FLAGS_ARCH_MATCH 0x1
1349 #define CPU_FLAGS_64BIT_MATCH 0x2
1350 #define CPU_FLAGS_AES_MATCH 0x4
1351 #define CPU_FLAGS_PCLMUL_MATCH 0x8
1352 #define CPU_FLAGS_AVX_MATCH 0x10
1354 #define CPU_FLAGS_32BIT_MATCH \
1355 (CPU_FLAGS_ARCH_MATCH | CPU_FLAGS_AES_MATCH \
1356 | CPU_FLAGS_PCLMUL_MATCH | CPU_FLAGS_AVX_MATCH)
1357 #define CPU_FLAGS_PERFECT_MATCH \
1358 (CPU_FLAGS_32BIT_MATCH | CPU_FLAGS_64BIT_MATCH)
1360 /* Return CPU flags match bits. */
1363 cpu_flags_match (const insn_template *t)
1365 i386_cpu_flags x = t->cpu_flags;
1366 int match = cpu_flags_check_cpu64 (x) ? CPU_FLAGS_64BIT_MATCH : 0;
1368 x.bitfield.cpu64 = 0;
1369 x.bitfield.cpuno64 = 0;
1371 if (cpu_flags_all_zero (&x))
1373 /* This instruction is available on all archs. */
1374 match |= CPU_FLAGS_32BIT_MATCH;
1378 /* This instruction is available only on some archs. */
1379 i386_cpu_flags cpu = cpu_arch_flags;
1381 cpu.bitfield.cpu64 = 0;
1382 cpu.bitfield.cpuno64 = 0;
1383 cpu = cpu_flags_and (x, cpu);
1384 if (!cpu_flags_all_zero (&cpu))
1386 if (x.bitfield.cpuavx)
1388 /* We only need to check AES/PCLMUL/SSE2AVX with AVX. */
1389 if (cpu.bitfield.cpuavx)
1391 /* Check SSE2AVX. */
1392 if (!t->opcode_modifier.sse2avx|| sse2avx)
1394 match |= (CPU_FLAGS_ARCH_MATCH
1395 | CPU_FLAGS_AVX_MATCH);
1397 if (!x.bitfield.cpuaes || cpu.bitfield.cpuaes)
1398 match |= CPU_FLAGS_AES_MATCH;
1400 if (!x.bitfield.cpupclmul
1401 || cpu.bitfield.cpupclmul)
1402 match |= CPU_FLAGS_PCLMUL_MATCH;
1406 match |= CPU_FLAGS_ARCH_MATCH;
1409 match |= CPU_FLAGS_32BIT_MATCH;
1415 static INLINE i386_operand_type
1416 operand_type_and (i386_operand_type x, i386_operand_type y)
1418 switch (ARRAY_SIZE (x.array))
1421 x.array [2] &= y.array [2];
1423 x.array [1] &= y.array [1];
1425 x.array [0] &= y.array [0];
1433 static INLINE i386_operand_type
1434 operand_type_or (i386_operand_type x, i386_operand_type y)
1436 switch (ARRAY_SIZE (x.array))
1439 x.array [2] |= y.array [2];
1441 x.array [1] |= y.array [1];
1443 x.array [0] |= y.array [0];
1451 static INLINE i386_operand_type
1452 operand_type_xor (i386_operand_type x, i386_operand_type y)
1454 switch (ARRAY_SIZE (x.array))
1457 x.array [2] ^= y.array [2];
1459 x.array [1] ^= y.array [1];
1461 x.array [0] ^= y.array [0];
1469 static const i386_operand_type acc32 = OPERAND_TYPE_ACC32;
1470 static const i386_operand_type acc64 = OPERAND_TYPE_ACC64;
1471 static const i386_operand_type control = OPERAND_TYPE_CONTROL;
1472 static const i386_operand_type inoutportreg
1473 = OPERAND_TYPE_INOUTPORTREG;
1474 static const i386_operand_type reg16_inoutportreg
1475 = OPERAND_TYPE_REG16_INOUTPORTREG;
1476 static const i386_operand_type disp16 = OPERAND_TYPE_DISP16;
1477 static const i386_operand_type disp32 = OPERAND_TYPE_DISP32;
1478 static const i386_operand_type disp32s = OPERAND_TYPE_DISP32S;
1479 static const i386_operand_type disp16_32 = OPERAND_TYPE_DISP16_32;
1480 static const i386_operand_type anydisp
1481 = OPERAND_TYPE_ANYDISP;
1482 static const i386_operand_type regxmm = OPERAND_TYPE_REGXMM;
1483 static const i386_operand_type regymm = OPERAND_TYPE_REGYMM;
1484 static const i386_operand_type imm8 = OPERAND_TYPE_IMM8;
1485 static const i386_operand_type imm8s = OPERAND_TYPE_IMM8S;
1486 static const i386_operand_type imm16 = OPERAND_TYPE_IMM16;
1487 static const i386_operand_type imm32 = OPERAND_TYPE_IMM32;
1488 static const i386_operand_type imm32s = OPERAND_TYPE_IMM32S;
1489 static const i386_operand_type imm64 = OPERAND_TYPE_IMM64;
1490 static const i386_operand_type imm16_32 = OPERAND_TYPE_IMM16_32;
1491 static const i386_operand_type imm16_32s = OPERAND_TYPE_IMM16_32S;
1492 static const i386_operand_type imm16_32_32s = OPERAND_TYPE_IMM16_32_32S;
1493 static const i386_operand_type vec_imm4 = OPERAND_TYPE_VEC_IMM4;
1504 operand_type_check (i386_operand_type t, enum operand_type c)
1509 return (t.bitfield.reg8
1512 || t.bitfield.reg64);
1515 return (t.bitfield.imm8
1519 || t.bitfield.imm32s
1520 || t.bitfield.imm64);
1523 return (t.bitfield.disp8
1524 || t.bitfield.disp16
1525 || t.bitfield.disp32
1526 || t.bitfield.disp32s
1527 || t.bitfield.disp64);
1530 return (t.bitfield.disp8
1531 || t.bitfield.disp16
1532 || t.bitfield.disp32
1533 || t.bitfield.disp32s
1534 || t.bitfield.disp64
1535 || t.bitfield.baseindex);
1544 /* Return 1 if there is no conflict in 8bit/16bit/32bit/64bit on
1545 operand J for instruction template T. */
1548 match_reg_size (const insn_template *t, unsigned int j)
1550 return !((i.types[j].bitfield.byte
1551 && !t->operand_types[j].bitfield.byte)
1552 || (i.types[j].bitfield.word
1553 && !t->operand_types[j].bitfield.word)
1554 || (i.types[j].bitfield.dword
1555 && !t->operand_types[j].bitfield.dword)
1556 || (i.types[j].bitfield.qword
1557 && !t->operand_types[j].bitfield.qword));
1560 /* Return 1 if there is no conflict in any size on operand J for
1561 instruction template T. */
1564 match_mem_size (const insn_template *t, unsigned int j)
1566 return (match_reg_size (t, j)
1567 && !((i.types[j].bitfield.unspecified
1568 && !t->operand_types[j].bitfield.unspecified)
1569 || (i.types[j].bitfield.fword
1570 && !t->operand_types[j].bitfield.fword)
1571 || (i.types[j].bitfield.tbyte
1572 && !t->operand_types[j].bitfield.tbyte)
1573 || (i.types[j].bitfield.xmmword
1574 && !t->operand_types[j].bitfield.xmmword)
1575 || (i.types[j].bitfield.ymmword
1576 && !t->operand_types[j].bitfield.ymmword)));
1579 /* Return 1 if there is no size conflict on any operands for
1580 instruction template T. */
1583 operand_size_match (const insn_template *t)
1588 /* Don't check jump instructions. */
1589 if (t->opcode_modifier.jump
1590 || t->opcode_modifier.jumpbyte
1591 || t->opcode_modifier.jumpdword
1592 || t->opcode_modifier.jumpintersegment)
1595 /* Check memory and accumulator operand size. */
1596 for (j = 0; j < i.operands; j++)
1598 if (t->operand_types[j].bitfield.anysize)
1601 if (t->operand_types[j].bitfield.acc && !match_reg_size (t, j))
1607 if (i.types[j].bitfield.mem && !match_mem_size (t, j))
1616 else if (!t->opcode_modifier.d && !t->opcode_modifier.floatd)
1619 i.error = operand_size_mismatch;
1623 /* Check reverse. */
1624 gas_assert (i.operands == 2);
1627 for (j = 0; j < 2; j++)
1629 if (t->operand_types[j].bitfield.acc
1630 && !match_reg_size (t, j ? 0 : 1))
1633 if (i.types[j].bitfield.mem
1634 && !match_mem_size (t, j ? 0 : 1))
1642 operand_type_match (i386_operand_type overlap,
1643 i386_operand_type given)
1645 i386_operand_type temp = overlap;
1647 temp.bitfield.jumpabsolute = 0;
1648 temp.bitfield.unspecified = 0;
1649 temp.bitfield.byte = 0;
1650 temp.bitfield.word = 0;
1651 temp.bitfield.dword = 0;
1652 temp.bitfield.fword = 0;
1653 temp.bitfield.qword = 0;
1654 temp.bitfield.tbyte = 0;
1655 temp.bitfield.xmmword = 0;
1656 temp.bitfield.ymmword = 0;
1657 if (operand_type_all_zero (&temp))
1660 if (given.bitfield.baseindex == overlap.bitfield.baseindex
1661 && given.bitfield.jumpabsolute == overlap.bitfield.jumpabsolute)
1665 i.error = operand_type_mismatch;
1669 /* If given types g0 and g1 are registers they must be of the same type
1670 unless the expected operand type register overlap is null.
1671 Note that Acc in a template matches every size of reg. */
1674 operand_type_register_match (i386_operand_type m0,
1675 i386_operand_type g0,
1676 i386_operand_type t0,
1677 i386_operand_type m1,
1678 i386_operand_type g1,
1679 i386_operand_type t1)
1681 if (!operand_type_check (g0, reg))
1684 if (!operand_type_check (g1, reg))
1687 if (g0.bitfield.reg8 == g1.bitfield.reg8
1688 && g0.bitfield.reg16 == g1.bitfield.reg16
1689 && g0.bitfield.reg32 == g1.bitfield.reg32
1690 && g0.bitfield.reg64 == g1.bitfield.reg64)
1693 if (m0.bitfield.acc)
1695 t0.bitfield.reg8 = 1;
1696 t0.bitfield.reg16 = 1;
1697 t0.bitfield.reg32 = 1;
1698 t0.bitfield.reg64 = 1;
1701 if (m1.bitfield.acc)
1703 t1.bitfield.reg8 = 1;
1704 t1.bitfield.reg16 = 1;
1705 t1.bitfield.reg32 = 1;
1706 t1.bitfield.reg64 = 1;
1709 if (!(t0.bitfield.reg8 & t1.bitfield.reg8)
1710 && !(t0.bitfield.reg16 & t1.bitfield.reg16)
1711 && !(t0.bitfield.reg32 & t1.bitfield.reg32)
1712 && !(t0.bitfield.reg64 & t1.bitfield.reg64))
1715 i.error = register_type_mismatch;
1720 static INLINE unsigned int
1721 mode_from_disp_size (i386_operand_type t)
1723 if (t.bitfield.disp8)
1725 else if (t.bitfield.disp16
1726 || t.bitfield.disp32
1727 || t.bitfield.disp32s)
1734 fits_in_signed_byte (offsetT num)
1736 return (num >= -128) && (num <= 127);
1740 fits_in_unsigned_byte (offsetT num)
1742 return (num & 0xff) == num;
1746 fits_in_unsigned_word (offsetT num)
1748 return (num & 0xffff) == num;
1752 fits_in_signed_word (offsetT num)
1754 return (-32768 <= num) && (num <= 32767);
1758 fits_in_signed_long (offsetT num ATTRIBUTE_UNUSED)
1763 return (!(((offsetT) -1 << 31) & num)
1764 || (((offsetT) -1 << 31) & num) == ((offsetT) -1 << 31));
1766 } /* fits_in_signed_long() */
1769 fits_in_unsigned_long (offsetT num ATTRIBUTE_UNUSED)
1774 return (num & (((offsetT) 2 << 31) - 1)) == num;
1776 } /* fits_in_unsigned_long() */
1779 fits_in_imm4 (offsetT num)
1781 return (num & 0xf) == num;
1784 static i386_operand_type
1785 smallest_imm_type (offsetT num)
1787 i386_operand_type t;
1789 operand_type_set (&t, 0);
1790 t.bitfield.imm64 = 1;
1792 if (cpu_arch_tune != PROCESSOR_I486 && num == 1)
1794 /* This code is disabled on the 486 because all the Imm1 forms
1795 in the opcode table are slower on the i486. They're the
1796 versions with the implicitly specified single-position
1797 displacement, which has another syntax if you really want to
1799 t.bitfield.imm1 = 1;
1800 t.bitfield.imm8 = 1;
1801 t.bitfield.imm8s = 1;
1802 t.bitfield.imm16 = 1;
1803 t.bitfield.imm32 = 1;
1804 t.bitfield.imm32s = 1;
1806 else if (fits_in_signed_byte (num))
1808 t.bitfield.imm8 = 1;
1809 t.bitfield.imm8s = 1;
1810 t.bitfield.imm16 = 1;
1811 t.bitfield.imm32 = 1;
1812 t.bitfield.imm32s = 1;
1814 else if (fits_in_unsigned_byte (num))
1816 t.bitfield.imm8 = 1;
1817 t.bitfield.imm16 = 1;
1818 t.bitfield.imm32 = 1;
1819 t.bitfield.imm32s = 1;
1821 else if (fits_in_signed_word (num) || fits_in_unsigned_word (num))
1823 t.bitfield.imm16 = 1;
1824 t.bitfield.imm32 = 1;
1825 t.bitfield.imm32s = 1;
1827 else if (fits_in_signed_long (num))
1829 t.bitfield.imm32 = 1;
1830 t.bitfield.imm32s = 1;
1832 else if (fits_in_unsigned_long (num))
1833 t.bitfield.imm32 = 1;
1839 offset_in_range (offsetT val, int size)
1845 case 1: mask = ((addressT) 1 << 8) - 1; break;
1846 case 2: mask = ((addressT) 1 << 16) - 1; break;
1847 case 4: mask = ((addressT) 2 << 31) - 1; break;
1849 case 8: mask = ((addressT) 2 << 63) - 1; break;
1855 /* If BFD64, sign extend val for 32bit address mode. */
1856 if (flag_code != CODE_64BIT
1857 || i.prefix[ADDR_PREFIX])
1858 if ((val & ~(((addressT) 2 << 31) - 1)) == 0)
1859 val = (val ^ ((addressT) 1 << 31)) - ((addressT) 1 << 31);
1862 if ((val & ~mask) != 0 && (val & ~mask) != ~mask)
1864 char buf1[40], buf2[40];
1866 sprint_value (buf1, val);
1867 sprint_value (buf2, val & mask);
1868 as_warn (_("%s shortened to %s"), buf1, buf2);
1882 a. PREFIX_EXIST if attempting to add a prefix where one from the
1883 same class already exists.
1884 b. PREFIX_LOCK if lock prefix is added.
1885 c. PREFIX_REP if rep/repne prefix is added.
1886 d. PREFIX_OTHER if other prefix is added.
1889 static enum PREFIX_GROUP
1890 add_prefix (unsigned int prefix)
1892 enum PREFIX_GROUP ret = PREFIX_OTHER;
1895 if (prefix >= REX_OPCODE && prefix < REX_OPCODE + 16
1896 && flag_code == CODE_64BIT)
1898 if ((i.prefix[REX_PREFIX] & prefix & REX_W)
1899 || ((i.prefix[REX_PREFIX] & (REX_R | REX_X | REX_B))
1900 && (prefix & (REX_R | REX_X | REX_B))))
1911 case CS_PREFIX_OPCODE:
1912 case DS_PREFIX_OPCODE:
1913 case ES_PREFIX_OPCODE:
1914 case FS_PREFIX_OPCODE:
1915 case GS_PREFIX_OPCODE:
1916 case SS_PREFIX_OPCODE:
1920 case REPNE_PREFIX_OPCODE:
1921 case REPE_PREFIX_OPCODE:
1926 case LOCK_PREFIX_OPCODE:
1935 case ADDR_PREFIX_OPCODE:
1939 case DATA_PREFIX_OPCODE:
1943 if (i.prefix[q] != 0)
1951 i.prefix[q] |= prefix;
1954 as_bad (_("same type of prefix used twice"));
1960 update_code_flag (int value, int check)
1962 PRINTF_LIKE ((*as_error));
1964 flag_code = (enum flag_code) value;
1965 if (flag_code == CODE_64BIT)
1967 cpu_arch_flags.bitfield.cpu64 = 1;
1968 cpu_arch_flags.bitfield.cpuno64 = 0;
1972 cpu_arch_flags.bitfield.cpu64 = 0;
1973 cpu_arch_flags.bitfield.cpuno64 = 1;
1975 if (value == CODE_64BIT && !cpu_arch_flags.bitfield.cpulm )
1978 as_error = as_fatal;
1981 (*as_error) (_("64bit mode not supported on `%s'."),
1982 cpu_arch_name ? cpu_arch_name : default_arch);
1984 if (value == CODE_32BIT && !cpu_arch_flags.bitfield.cpui386)
1987 as_error = as_fatal;
1990 (*as_error) (_("32bit mode not supported on `%s'."),
1991 cpu_arch_name ? cpu_arch_name : default_arch);
1993 stackop_size = '\0';
1997 set_code_flag (int value)
1999 update_code_flag (value, 0);
2003 set_16bit_gcc_code_flag (int new_code_flag)
2005 flag_code = (enum flag_code) new_code_flag;
2006 if (flag_code != CODE_16BIT)
2008 cpu_arch_flags.bitfield.cpu64 = 0;
2009 cpu_arch_flags.bitfield.cpuno64 = 1;
2010 stackop_size = LONG_MNEM_SUFFIX;
2014 set_intel_syntax (int syntax_flag)
2016 /* Find out if register prefixing is specified. */
2017 int ask_naked_reg = 0;
2020 if (!is_end_of_line[(unsigned char) *input_line_pointer])
2022 char *string = input_line_pointer;
2023 int e = get_symbol_end ();
2025 if (strcmp (string, "prefix") == 0)
2027 else if (strcmp (string, "noprefix") == 0)
2030 as_bad (_("bad argument to syntax directive."));
2031 *input_line_pointer = e;
2033 demand_empty_rest_of_line ();
2035 intel_syntax = syntax_flag;
2037 if (ask_naked_reg == 0)
2038 allow_naked_reg = (intel_syntax
2039 && (bfd_get_symbol_leading_char (stdoutput) != '\0'));
2041 allow_naked_reg = (ask_naked_reg < 0);
2043 expr_set_rank (O_full_ptr, syntax_flag ? 10 : 0);
2045 identifier_chars['%'] = intel_syntax && allow_naked_reg ? '%' : 0;
2046 identifier_chars['$'] = intel_syntax ? '$' : 0;
2047 register_prefix = allow_naked_reg ? "" : "%";
2051 set_intel_mnemonic (int mnemonic_flag)
2053 intel_mnemonic = mnemonic_flag;
2057 set_allow_index_reg (int flag)
2059 allow_index_reg = flag;
2063 set_sse_check (int dummy ATTRIBUTE_UNUSED)
2067 if (!is_end_of_line[(unsigned char) *input_line_pointer])
2069 char *string = input_line_pointer;
2070 int e = get_symbol_end ();
2072 if (strcmp (string, "none") == 0)
2073 sse_check = sse_check_none;
2074 else if (strcmp (string, "warning") == 0)
2075 sse_check = sse_check_warning;
2076 else if (strcmp (string, "error") == 0)
2077 sse_check = sse_check_error;
2079 as_bad (_("bad argument to sse_check directive."));
2080 *input_line_pointer = e;
2083 as_bad (_("missing argument for sse_check directive"));
2085 demand_empty_rest_of_line ();
2089 check_cpu_arch_compatible (const char *name ATTRIBUTE_UNUSED,
2090 i386_cpu_flags new_flag ATTRIBUTE_UNUSED)
2092 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
2093 static const char *arch;
2095 /* Intel LIOM is only supported on ELF. */
2101 /* Use cpu_arch_name if it is set in md_parse_option. Otherwise
2102 use default_arch. */
2103 arch = cpu_arch_name;
2105 arch = default_arch;
2108 /* If we are targeting Intel L1OM, we must enable it. */
2109 if (get_elf_backend_data (stdoutput)->elf_machine_code != EM_L1OM
2110 || new_flag.bitfield.cpul1om)
2113 as_bad (_("`%s' is not supported on `%s'"), name, arch);
2118 set_cpu_arch (int dummy ATTRIBUTE_UNUSED)
2122 if (!is_end_of_line[(unsigned char) *input_line_pointer])
2124 char *string = input_line_pointer;
2125 int e = get_symbol_end ();
2127 i386_cpu_flags flags;
2129 for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
2131 if (strcmp (string, cpu_arch[j].name) == 0)
2133 check_cpu_arch_compatible (string, cpu_arch[j].flags);
2137 cpu_arch_name = cpu_arch[j].name;
2138 cpu_sub_arch_name = NULL;
2139 cpu_arch_flags = cpu_arch[j].flags;
2140 if (flag_code == CODE_64BIT)
2142 cpu_arch_flags.bitfield.cpu64 = 1;
2143 cpu_arch_flags.bitfield.cpuno64 = 0;
2147 cpu_arch_flags.bitfield.cpu64 = 0;
2148 cpu_arch_flags.bitfield.cpuno64 = 1;
2150 cpu_arch_isa = cpu_arch[j].type;
2151 cpu_arch_isa_flags = cpu_arch[j].flags;
2152 if (!cpu_arch_tune_set)
2154 cpu_arch_tune = cpu_arch_isa;
2155 cpu_arch_tune_flags = cpu_arch_isa_flags;
2160 if (!cpu_arch[j].negated)
2161 flags = cpu_flags_or (cpu_arch_flags,
2164 flags = cpu_flags_and_not (cpu_arch_flags,
2166 if (!cpu_flags_equal (&flags, &cpu_arch_flags))
2168 if (cpu_sub_arch_name)
2170 char *name = cpu_sub_arch_name;
2171 cpu_sub_arch_name = concat (name,
2173 (const char *) NULL);
2177 cpu_sub_arch_name = xstrdup (cpu_arch[j].name);
2178 cpu_arch_flags = flags;
2180 *input_line_pointer = e;
2181 demand_empty_rest_of_line ();
2185 if (j >= ARRAY_SIZE (cpu_arch))
2186 as_bad (_("no such architecture: `%s'"), string);
2188 *input_line_pointer = e;
2191 as_bad (_("missing cpu architecture"));
2193 no_cond_jump_promotion = 0;
2194 if (*input_line_pointer == ','
2195 && !is_end_of_line[(unsigned char) input_line_pointer[1]])
2197 char *string = ++input_line_pointer;
2198 int e = get_symbol_end ();
2200 if (strcmp (string, "nojumps") == 0)
2201 no_cond_jump_promotion = 1;
2202 else if (strcmp (string, "jumps") == 0)
2205 as_bad (_("no such architecture modifier: `%s'"), string);
2207 *input_line_pointer = e;
2210 demand_empty_rest_of_line ();
2213 enum bfd_architecture
2216 if (cpu_arch_isa == PROCESSOR_L1OM)
2218 if (OUTPUT_FLAVOR != bfd_target_elf_flavour
2219 || flag_code != CODE_64BIT)
2220 as_fatal (_("Intel L1OM is 64bit ELF only"));
2221 return bfd_arch_l1om;
2224 return bfd_arch_i386;
2230 if (!strncmp (default_arch, "x86_64", 6))
2232 if (cpu_arch_isa == PROCESSOR_L1OM)
2234 if (OUTPUT_FLAVOR != bfd_target_elf_flavour
2235 || default_arch[6] != '\0')
2236 as_fatal (_("Intel L1OM is 64bit ELF only"));
2237 return bfd_mach_l1om;
2239 else if (default_arch[6] == '\0')
2240 return bfd_mach_x86_64;
2242 return bfd_mach_x64_32;
2244 else if (!strcmp (default_arch, "i386"))
2245 return bfd_mach_i386_i386;
2247 as_fatal (_("Unknown architecture"));
2253 const char *hash_err;
2255 /* Initialize op_hash hash table. */
2256 op_hash = hash_new ();
2259 const insn_template *optab;
2260 templates *core_optab;
2262 /* Setup for loop. */
2264 core_optab = (templates *) xmalloc (sizeof (templates));
2265 core_optab->start = optab;
2270 if (optab->name == NULL
2271 || strcmp (optab->name, (optab - 1)->name) != 0)
2273 /* different name --> ship out current template list;
2274 add to hash table; & begin anew. */
2275 core_optab->end = optab;
2276 hash_err = hash_insert (op_hash,
2278 (void *) core_optab);
2281 as_fatal (_("Internal Error: Can't hash %s: %s"),
2285 if (optab->name == NULL)
2287 core_optab = (templates *) xmalloc (sizeof (templates));
2288 core_optab->start = optab;
2293 /* Initialize reg_hash hash table. */
2294 reg_hash = hash_new ();
2296 const reg_entry *regtab;
2297 unsigned int regtab_size = i386_regtab_size;
2299 for (regtab = i386_regtab; regtab_size--; regtab++)
2301 hash_err = hash_insert (reg_hash, regtab->reg_name, (void *) regtab);
2303 as_fatal (_("Internal Error: Can't hash %s: %s"),
2309 /* Fill in lexical tables: mnemonic_chars, operand_chars. */
2314 for (c = 0; c < 256; c++)
2319 mnemonic_chars[c] = c;
2320 register_chars[c] = c;
2321 operand_chars[c] = c;
2323 else if (ISLOWER (c))
2325 mnemonic_chars[c] = c;
2326 register_chars[c] = c;
2327 operand_chars[c] = c;
2329 else if (ISUPPER (c))
2331 mnemonic_chars[c] = TOLOWER (c);
2332 register_chars[c] = mnemonic_chars[c];
2333 operand_chars[c] = c;
2336 if (ISALPHA (c) || ISDIGIT (c))
2337 identifier_chars[c] = c;
2340 identifier_chars[c] = c;
2341 operand_chars[c] = c;
2346 identifier_chars['@'] = '@';
2349 identifier_chars['?'] = '?';
2350 operand_chars['?'] = '?';
2352 digit_chars['-'] = '-';
2353 mnemonic_chars['_'] = '_';
2354 mnemonic_chars['-'] = '-';
2355 mnemonic_chars['.'] = '.';
2356 identifier_chars['_'] = '_';
2357 identifier_chars['.'] = '.';
2359 for (p = operand_special_chars; *p != '\0'; p++)
2360 operand_chars[(unsigned char) *p] = *p;
2363 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
2366 record_alignment (text_section, 2);
2367 record_alignment (data_section, 2);
2368 record_alignment (bss_section, 2);
2372 if (flag_code == CODE_64BIT)
2374 x86_dwarf2_return_column = 16;
2375 x86_cie_data_alignment = -8;
2379 x86_dwarf2_return_column = 8;
2380 x86_cie_data_alignment = -4;
2385 i386_print_statistics (FILE *file)
2387 hash_print_statistics (file, "i386 opcode", op_hash);
2388 hash_print_statistics (file, "i386 register", reg_hash);
2393 /* Debugging routines for md_assemble. */
2394 static void pte (insn_template *);
2395 static void pt (i386_operand_type);
2396 static void pe (expressionS *);
2397 static void ps (symbolS *);
2400 pi (char *line, i386_insn *x)
2404 fprintf (stdout, "%s: template ", line);
2406 fprintf (stdout, " address: base %s index %s scale %x\n",
2407 x->base_reg ? x->base_reg->reg_name : "none",
2408 x->index_reg ? x->index_reg->reg_name : "none",
2409 x->log2_scale_factor);
2410 fprintf (stdout, " modrm: mode %x reg %x reg/mem %x\n",
2411 x->rm.mode, x->rm.reg, x->rm.regmem);
2412 fprintf (stdout, " sib: base %x index %x scale %x\n",
2413 x->sib.base, x->sib.index, x->sib.scale);
2414 fprintf (stdout, " rex: 64bit %x extX %x extY %x extZ %x\n",
2415 (x->rex & REX_W) != 0,
2416 (x->rex & REX_R) != 0,
2417 (x->rex & REX_X) != 0,
2418 (x->rex & REX_B) != 0);
2419 for (j = 0; j < x->operands; j++)
2421 fprintf (stdout, " #%d: ", j + 1);
2423 fprintf (stdout, "\n");
2424 if (x->types[j].bitfield.reg8
2425 || x->types[j].bitfield.reg16
2426 || x->types[j].bitfield.reg32
2427 || x->types[j].bitfield.reg64
2428 || x->types[j].bitfield.regmmx
2429 || x->types[j].bitfield.regxmm
2430 || x->types[j].bitfield.regymm
2431 || x->types[j].bitfield.sreg2
2432 || x->types[j].bitfield.sreg3
2433 || x->types[j].bitfield.control
2434 || x->types[j].bitfield.debug
2435 || x->types[j].bitfield.test)
2436 fprintf (stdout, "%s\n", x->op[j].regs->reg_name);
2437 if (operand_type_check (x->types[j], imm))
2439 if (operand_type_check (x->types[j], disp))
2440 pe (x->op[j].disps);
2445 pte (insn_template *t)
2448 fprintf (stdout, " %d operands ", t->operands);
2449 fprintf (stdout, "opcode %x ", t->base_opcode);
2450 if (t->extension_opcode != None)
2451 fprintf (stdout, "ext %x ", t->extension_opcode);
2452 if (t->opcode_modifier.d)
2453 fprintf (stdout, "D");
2454 if (t->opcode_modifier.w)
2455 fprintf (stdout, "W");
2456 fprintf (stdout, "\n");
2457 for (j = 0; j < t->operands; j++)
2459 fprintf (stdout, " #%d type ", j + 1);
2460 pt (t->operand_types[j]);
2461 fprintf (stdout, "\n");
2468 fprintf (stdout, " operation %d\n", e->X_op);
2469 fprintf (stdout, " add_number %ld (%lx)\n",
2470 (long) e->X_add_number, (long) e->X_add_number);
2471 if (e->X_add_symbol)
2473 fprintf (stdout, " add_symbol ");
2474 ps (e->X_add_symbol);
2475 fprintf (stdout, "\n");
2479 fprintf (stdout, " op_symbol ");
2480 ps (e->X_op_symbol);
2481 fprintf (stdout, "\n");
2488 fprintf (stdout, "%s type %s%s",
2490 S_IS_EXTERNAL (s) ? "EXTERNAL " : "",
2491 segment_name (S_GET_SEGMENT (s)));
2494 static struct type_name
2496 i386_operand_type mask;
2499 const type_names[] =
2501 { OPERAND_TYPE_REG8, "r8" },
2502 { OPERAND_TYPE_REG16, "r16" },
2503 { OPERAND_TYPE_REG32, "r32" },
2504 { OPERAND_TYPE_REG64, "r64" },
2505 { OPERAND_TYPE_IMM8, "i8" },
2506 { OPERAND_TYPE_IMM8, "i8s" },
2507 { OPERAND_TYPE_IMM16, "i16" },
2508 { OPERAND_TYPE_IMM32, "i32" },
2509 { OPERAND_TYPE_IMM32S, "i32s" },
2510 { OPERAND_TYPE_IMM64, "i64" },
2511 { OPERAND_TYPE_IMM1, "i1" },
2512 { OPERAND_TYPE_BASEINDEX, "BaseIndex" },
2513 { OPERAND_TYPE_DISP8, "d8" },
2514 { OPERAND_TYPE_DISP16, "d16" },
2515 { OPERAND_TYPE_DISP32, "d32" },
2516 { OPERAND_TYPE_DISP32S, "d32s" },
2517 { OPERAND_TYPE_DISP64, "d64" },
2518 { OPERAND_TYPE_INOUTPORTREG, "InOutPortReg" },
2519 { OPERAND_TYPE_SHIFTCOUNT, "ShiftCount" },
2520 { OPERAND_TYPE_CONTROL, "control reg" },
2521 { OPERAND_TYPE_TEST, "test reg" },
2522 { OPERAND_TYPE_DEBUG, "debug reg" },
2523 { OPERAND_TYPE_FLOATREG, "FReg" },
2524 { OPERAND_TYPE_FLOATACC, "FAcc" },
2525 { OPERAND_TYPE_SREG2, "SReg2" },
2526 { OPERAND_TYPE_SREG3, "SReg3" },
2527 { OPERAND_TYPE_ACC, "Acc" },
2528 { OPERAND_TYPE_JUMPABSOLUTE, "Jump Absolute" },
2529 { OPERAND_TYPE_REGMMX, "rMMX" },
2530 { OPERAND_TYPE_REGXMM, "rXMM" },
2531 { OPERAND_TYPE_REGYMM, "rYMM" },
2532 { OPERAND_TYPE_ESSEG, "es" },
2536 pt (i386_operand_type t)
2539 i386_operand_type a;
2541 for (j = 0; j < ARRAY_SIZE (type_names); j++)
2543 a = operand_type_and (t, type_names[j].mask);
2544 if (!operand_type_all_zero (&a))
2545 fprintf (stdout, "%s, ", type_names[j].name);
2550 #endif /* DEBUG386 */
2552 static bfd_reloc_code_real_type
2553 reloc (unsigned int size,
2556 bfd_reloc_code_real_type other)
2558 if (other != NO_RELOC)
2560 reloc_howto_type *rel;
2565 case BFD_RELOC_X86_64_GOT32:
2566 return BFD_RELOC_X86_64_GOT64;
2568 case BFD_RELOC_X86_64_PLTOFF64:
2569 return BFD_RELOC_X86_64_PLTOFF64;
2571 case BFD_RELOC_X86_64_GOTPC32:
2572 other = BFD_RELOC_X86_64_GOTPC64;
2574 case BFD_RELOC_X86_64_GOTPCREL:
2575 other = BFD_RELOC_X86_64_GOTPCREL64;
2577 case BFD_RELOC_X86_64_TPOFF32:
2578 other = BFD_RELOC_X86_64_TPOFF64;
2580 case BFD_RELOC_X86_64_DTPOFF32:
2581 other = BFD_RELOC_X86_64_DTPOFF64;
2587 /* Sign-checking 4-byte relocations in 16-/32-bit code is pointless. */
2588 if (size == 4 && flag_code != CODE_64BIT)
2591 rel = bfd_reloc_type_lookup (stdoutput, other);
2593 as_bad (_("unknown relocation (%u)"), other);
2594 else if (size != bfd_get_reloc_size (rel))
2595 as_bad (_("%u-byte relocation cannot be applied to %u-byte field"),
2596 bfd_get_reloc_size (rel),
2598 else if (pcrel && !rel->pc_relative)
2599 as_bad (_("non-pc-relative relocation for pc-relative field"));
2600 else if ((rel->complain_on_overflow == complain_overflow_signed
2602 || (rel->complain_on_overflow == complain_overflow_unsigned
2604 as_bad (_("relocated field and relocation type differ in signedness"));
2613 as_bad (_("there are no unsigned pc-relative relocations"));
2616 case 1: return BFD_RELOC_8_PCREL;
2617 case 2: return BFD_RELOC_16_PCREL;
2618 case 4: return BFD_RELOC_32_PCREL;
2619 case 8: return BFD_RELOC_64_PCREL;
2621 as_bad (_("cannot do %u byte pc-relative relocation"), size);
2628 case 4: return BFD_RELOC_X86_64_32S;
2633 case 1: return BFD_RELOC_8;
2634 case 2: return BFD_RELOC_16;
2635 case 4: return BFD_RELOC_32;
2636 case 8: return BFD_RELOC_64;
2638 as_bad (_("cannot do %s %u byte relocation"),
2639 sign > 0 ? "signed" : "unsigned", size);
2645 /* Here we decide which fixups can be adjusted to make them relative to
2646 the beginning of the section instead of the symbol. Basically we need
2647 to make sure that the dynamic relocations are done correctly, so in
2648 some cases we force the original symbol to be used. */
2651 tc_i386_fix_adjustable (fixS *fixP ATTRIBUTE_UNUSED)
2653 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
2657 /* Don't adjust pc-relative references to merge sections in 64-bit
2659 if (use_rela_relocations
2660 && (S_GET_SEGMENT (fixP->fx_addsy)->flags & SEC_MERGE) != 0
2664 /* The x86_64 GOTPCREL are represented as 32bit PCrel relocations
2665 and changed later by validate_fix. */
2666 if (GOT_symbol && fixP->fx_subsy == GOT_symbol
2667 && fixP->fx_r_type == BFD_RELOC_32_PCREL)
2670 /* adjust_reloc_syms doesn't know about the GOT. */
2671 if (fixP->fx_r_type == BFD_RELOC_386_GOTOFF
2672 || fixP->fx_r_type == BFD_RELOC_386_PLT32
2673 || fixP->fx_r_type == BFD_RELOC_386_GOT32
2674 || fixP->fx_r_type == BFD_RELOC_386_TLS_GD
2675 || fixP->fx_r_type == BFD_RELOC_386_TLS_LDM
2676 || fixP->fx_r_type == BFD_RELOC_386_TLS_LDO_32
2677 || fixP->fx_r_type == BFD_RELOC_386_TLS_IE_32
2678 || fixP->fx_r_type == BFD_RELOC_386_TLS_IE
2679 || fixP->fx_r_type == BFD_RELOC_386_TLS_GOTIE
2680 || fixP->fx_r_type == BFD_RELOC_386_TLS_LE_32
2681 || fixP->fx_r_type == BFD_RELOC_386_TLS_LE
2682 || fixP->fx_r_type == BFD_RELOC_386_TLS_GOTDESC
2683 || fixP->fx_r_type == BFD_RELOC_386_TLS_DESC_CALL
2684 || fixP->fx_r_type == BFD_RELOC_X86_64_PLT32
2685 || fixP->fx_r_type == BFD_RELOC_X86_64_GOT32
2686 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTPCREL
2687 || fixP->fx_r_type == BFD_RELOC_X86_64_TLSGD
2688 || fixP->fx_r_type == BFD_RELOC_X86_64_TLSLD
2689 || fixP->fx_r_type == BFD_RELOC_X86_64_DTPOFF32
2690 || fixP->fx_r_type == BFD_RELOC_X86_64_DTPOFF64
2691 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTTPOFF
2692 || fixP->fx_r_type == BFD_RELOC_X86_64_TPOFF32
2693 || fixP->fx_r_type == BFD_RELOC_X86_64_TPOFF64
2694 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTOFF64
2695 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTPC32_TLSDESC
2696 || fixP->fx_r_type == BFD_RELOC_X86_64_TLSDESC_CALL
2697 || fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
2698 || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
2705 intel_float_operand (const char *mnemonic)
2707 /* Note that the value returned is meaningful only for opcodes with (memory)
2708 operands, hence the code here is free to improperly handle opcodes that
2709 have no operands (for better performance and smaller code). */
2711 if (mnemonic[0] != 'f')
2712 return 0; /* non-math */
2714 switch (mnemonic[1])
2716 /* fclex, fdecstp, fdisi, femms, feni, fincstp, finit, fsetpm, and
2717 the fs segment override prefix not currently handled because no
2718 call path can make opcodes without operands get here */
2720 return 2 /* integer op */;
2722 if (mnemonic[2] == 'd' && (mnemonic[3] == 'c' || mnemonic[3] == 'e'))
2723 return 3; /* fldcw/fldenv */
2726 if (mnemonic[2] != 'o' /* fnop */)
2727 return 3; /* non-waiting control op */
2730 if (mnemonic[2] == 's')
2731 return 3; /* frstor/frstpm */
2734 if (mnemonic[2] == 'a')
2735 return 3; /* fsave */
2736 if (mnemonic[2] == 't')
2738 switch (mnemonic[3])
2740 case 'c': /* fstcw */
2741 case 'd': /* fstdw */
2742 case 'e': /* fstenv */
2743 case 's': /* fsts[gw] */
2749 if (mnemonic[2] == 'r' || mnemonic[2] == 's')
2750 return 0; /* fxsave/fxrstor are not really math ops */
2757 /* Build the VEX prefix. */
2760 build_vex_prefix (const insn_template *t)
2762 unsigned int register_specifier;
2763 unsigned int implied_prefix;
2764 unsigned int vector_length;
2766 /* Check register specifier. */
2767 if (i.vex.register_specifier)
2769 register_specifier = i.vex.register_specifier->reg_num;
2770 if ((i.vex.register_specifier->reg_flags & RegRex))
2771 register_specifier += 8;
2772 register_specifier = ~register_specifier & 0xf;
2775 register_specifier = 0xf;
2777 /* Use 2-byte VEX prefix by swappping destination and source
2780 && i.operands == i.reg_operands
2781 && i.tm.opcode_modifier.vexopcode == VEX0F
2782 && i.tm.opcode_modifier.s
2785 unsigned int xchg = i.operands - 1;
2786 union i386_op temp_op;
2787 i386_operand_type temp_type;
2789 temp_type = i.types[xchg];
2790 i.types[xchg] = i.types[0];
2791 i.types[0] = temp_type;
2792 temp_op = i.op[xchg];
2793 i.op[xchg] = i.op[0];
2796 gas_assert (i.rm.mode == 3);
2800 i.rm.regmem = i.rm.reg;
2803 /* Use the next insn. */
2807 if (i.tm.opcode_modifier.vex == VEXScalar)
2808 vector_length = avxscalar;
2810 vector_length = i.tm.opcode_modifier.vex == VEX256 ? 1 : 0;
2812 switch ((i.tm.base_opcode >> 8) & 0xff)
2817 case DATA_PREFIX_OPCODE:
2820 case REPE_PREFIX_OPCODE:
2823 case REPNE_PREFIX_OPCODE:
2830 /* Use 2-byte VEX prefix if possible. */
2831 if (i.tm.opcode_modifier.vexopcode == VEX0F
2832 && i.tm.opcode_modifier.vexw != VEXW1
2833 && (i.rex & (REX_W | REX_X | REX_B)) == 0)
2835 /* 2-byte VEX prefix. */
2839 i.vex.bytes[0] = 0xc5;
2841 /* Check the REX.R bit. */
2842 r = (i.rex & REX_R) ? 0 : 1;
2843 i.vex.bytes[1] = (r << 7
2844 | register_specifier << 3
2845 | vector_length << 2
2850 /* 3-byte VEX prefix. */
2855 switch (i.tm.opcode_modifier.vexopcode)
2859 i.vex.bytes[0] = 0xc4;
2863 i.vex.bytes[0] = 0xc4;
2867 i.vex.bytes[0] = 0xc4;
2871 i.vex.bytes[0] = 0x8f;
2875 i.vex.bytes[0] = 0x8f;
2879 i.vex.bytes[0] = 0x8f;
2885 /* The high 3 bits of the second VEX byte are 1's compliment
2886 of RXB bits from REX. */
2887 i.vex.bytes[1] = (~i.rex & 0x7) << 5 | m;
2889 /* Check the REX.W bit. */
2890 w = (i.rex & REX_W) ? 1 : 0;
2891 if (i.tm.opcode_modifier.vexw)
2896 if (i.tm.opcode_modifier.vexw == VEXW1)
2900 i.vex.bytes[2] = (w << 7
2901 | register_specifier << 3
2902 | vector_length << 2
2908 process_immext (void)
2912 if (i.tm.cpu_flags.bitfield.cpusse3 && i.operands > 0)
2914 /* SSE3 Instructions have the fixed operands with an opcode
2915 suffix which is coded in the same place as an 8-bit immediate
2916 field would be. Here we check those operands and remove them
2920 for (x = 0; x < i.operands; x++)
2921 if (i.op[x].regs->reg_num != x)
2922 as_bad (_("can't use register '%s%s' as operand %d in '%s'."),
2923 register_prefix, i.op[x].regs->reg_name, x + 1,
2929 /* These AMD 3DNow! and SSE2 instructions have an opcode suffix
2930 which is coded in the same place as an 8-bit immediate field
2931 would be. Here we fake an 8-bit immediate operand from the
2932 opcode suffix stored in tm.extension_opcode.
2934 AVX instructions also use this encoding, for some of
2935 3 argument instructions. */
2937 gas_assert (i.imm_operands == 0
2939 || (i.tm.opcode_modifier.vex
2940 && i.operands <= 4)));
2942 exp = &im_expressions[i.imm_operands++];
2943 i.op[i.operands].imms = exp;
2944 i.types[i.operands] = imm8;
2946 exp->X_op = O_constant;
2947 exp->X_add_number = i.tm.extension_opcode;
2948 i.tm.extension_opcode = None;
2951 /* This is the guts of the machine-dependent assembler. LINE points to a
2952 machine dependent instruction. This function is supposed to emit
2953 the frags/bytes it assembles to. */
2956 md_assemble (char *line)
2959 char mnemonic[MAX_MNEM_SIZE];
2960 const insn_template *t;
2962 /* Initialize globals. */
2963 memset (&i, '\0', sizeof (i));
2964 for (j = 0; j < MAX_OPERANDS; j++)
2965 i.reloc[j] = NO_RELOC;
2966 memset (disp_expressions, '\0', sizeof (disp_expressions));
2967 memset (im_expressions, '\0', sizeof (im_expressions));
2968 save_stack_p = save_stack;
2970 /* First parse an instruction mnemonic & call i386_operand for the operands.
2971 We assume that the scrubber has arranged it so that line[0] is the valid
2972 start of a (possibly prefixed) mnemonic. */
2974 line = parse_insn (line, mnemonic);
2978 line = parse_operands (line, mnemonic);
2983 /* Now we've parsed the mnemonic into a set of templates, and have the
2984 operands at hand. */
2986 /* All intel opcodes have reversed operands except for "bound" and
2987 "enter". We also don't reverse intersegment "jmp" and "call"
2988 instructions with 2 immediate operands so that the immediate segment
2989 precedes the offset, as it does when in AT&T mode. */
2992 && (strcmp (mnemonic, "bound") != 0)
2993 && (strcmp (mnemonic, "invlpga") != 0)
2994 && !(operand_type_check (i.types[0], imm)
2995 && operand_type_check (i.types[1], imm)))
2998 /* The order of the immediates should be reversed
2999 for 2 immediates extrq and insertq instructions */
3000 if (i.imm_operands == 2
3001 && (strcmp (mnemonic, "extrq") == 0
3002 || strcmp (mnemonic, "insertq") == 0))
3003 swap_2_operands (0, 1);
3008 /* Don't optimize displacement for movabs since it only takes 64bit
3011 && !i.disp32_encoding
3012 && (flag_code != CODE_64BIT
3013 || strcmp (mnemonic, "movabs") != 0))
3016 /* Next, we find a template that matches the given insn,
3017 making sure the overlap of the given operands types is consistent
3018 with the template operand types. */
3020 if (!(t = match_template ()))
3023 if (sse_check != sse_check_none
3024 && !i.tm.opcode_modifier.noavx
3025 && (i.tm.cpu_flags.bitfield.cpusse
3026 || i.tm.cpu_flags.bitfield.cpusse2
3027 || i.tm.cpu_flags.bitfield.cpusse3
3028 || i.tm.cpu_flags.bitfield.cpussse3
3029 || i.tm.cpu_flags.bitfield.cpusse4_1
3030 || i.tm.cpu_flags.bitfield.cpusse4_2))
3032 (sse_check == sse_check_warning
3034 : as_bad) (_("SSE instruction `%s' is used"), i.tm.name);
3037 /* Zap movzx and movsx suffix. The suffix has been set from
3038 "word ptr" or "byte ptr" on the source operand in Intel syntax
3039 or extracted from mnemonic in AT&T syntax. But we'll use
3040 the destination register to choose the suffix for encoding. */
3041 if ((i.tm.base_opcode & ~9) == 0x0fb6)
3043 /* In Intel syntax, there must be a suffix. In AT&T syntax, if
3044 there is no suffix, the default will be byte extension. */
3045 if (i.reg_operands != 2
3048 as_bad (_("ambiguous operand size for `%s'"), i.tm.name);
3053 if (i.tm.opcode_modifier.fwait)
3054 if (!add_prefix (FWAIT_OPCODE))
3057 /* Check for lock without a lockable instruction. Destination operand
3058 must be memory unless it is xchg (0x86). */
3059 if (i.prefix[LOCK_PREFIX]
3060 && (!i.tm.opcode_modifier.islockable
3061 || i.mem_operands == 0
3062 || (i.tm.base_opcode != 0x86
3063 && !operand_type_check (i.types[i.operands - 1], anymem))))
3065 as_bad (_("expecting lockable instruction after `lock'"));
3069 /* Check string instruction segment overrides. */
3070 if (i.tm.opcode_modifier.isstring && i.mem_operands != 0)
3072 if (!check_string ())
3074 i.disp_operands = 0;
3077 if (!process_suffix ())
3080 /* Update operand types. */
3081 for (j = 0; j < i.operands; j++)
3082 i.types[j] = operand_type_and (i.types[j], i.tm.operand_types[j]);
3084 /* Make still unresolved immediate matches conform to size of immediate
3085 given in i.suffix. */
3086 if (!finalize_imm ())
3089 if (i.types[0].bitfield.imm1)
3090 i.imm_operands = 0; /* kludge for shift insns. */
3092 /* We only need to check those implicit registers for instructions
3093 with 3 operands or less. */
3094 if (i.operands <= 3)
3095 for (j = 0; j < i.operands; j++)
3096 if (i.types[j].bitfield.inoutportreg
3097 || i.types[j].bitfield.shiftcount
3098 || i.types[j].bitfield.acc
3099 || i.types[j].bitfield.floatacc)
3102 /* ImmExt should be processed after SSE2AVX. */
3103 if (!i.tm.opcode_modifier.sse2avx
3104 && i.tm.opcode_modifier.immext)
3107 /* For insns with operands there are more diddles to do to the opcode. */
3110 if (!process_operands ())
3113 else if (!quiet_warnings && i.tm.opcode_modifier.ugh)
3115 /* UnixWare fsub no args is alias for fsubp, fadd -> faddp, etc. */
3116 as_warn (_("translating to `%sp'"), i.tm.name);
3119 if (i.tm.opcode_modifier.vex)
3120 build_vex_prefix (t);
3122 /* Handle conversion of 'int $3' --> special int3 insn. XOP or FMA4
3123 instructions may define INT_OPCODE as well, so avoid this corner
3124 case for those instructions that use MODRM. */
3125 if (i.tm.base_opcode == INT_OPCODE
3126 && !i.tm.opcode_modifier.modrm
3127 && i.op[0].imms->X_add_number == 3)
3129 i.tm.base_opcode = INT3_OPCODE;
3133 if ((i.tm.opcode_modifier.jump
3134 || i.tm.opcode_modifier.jumpbyte
3135 || i.tm.opcode_modifier.jumpdword)
3136 && i.op[0].disps->X_op == O_constant)
3138 /* Convert "jmp constant" (and "call constant") to a jump (call) to
3139 the absolute address given by the constant. Since ix86 jumps and
3140 calls are pc relative, we need to generate a reloc. */
3141 i.op[0].disps->X_add_symbol = &abs_symbol;
3142 i.op[0].disps->X_op = O_symbol;
3145 if (i.tm.opcode_modifier.rex64)
3148 /* For 8 bit registers we need an empty rex prefix. Also if the
3149 instruction already has a prefix, we need to convert old
3150 registers to new ones. */
3152 if ((i.types[0].bitfield.reg8
3153 && (i.op[0].regs->reg_flags & RegRex64) != 0)
3154 || (i.types[1].bitfield.reg8
3155 && (i.op[1].regs->reg_flags & RegRex64) != 0)
3156 || ((i.types[0].bitfield.reg8
3157 || i.types[1].bitfield.reg8)
3162 i.rex |= REX_OPCODE;
3163 for (x = 0; x < 2; x++)
3165 /* Look for 8 bit operand that uses old registers. */
3166 if (i.types[x].bitfield.reg8
3167 && (i.op[x].regs->reg_flags & RegRex64) == 0)
3169 /* In case it is "hi" register, give up. */
3170 if (i.op[x].regs->reg_num > 3)
3171 as_bad (_("can't encode register '%s%s' in an "
3172 "instruction requiring REX prefix."),
3173 register_prefix, i.op[x].regs->reg_name);
3175 /* Otherwise it is equivalent to the extended register.
3176 Since the encoding doesn't change this is merely
3177 cosmetic cleanup for debug output. */
3179 i.op[x].regs = i.op[x].regs + 8;
3185 add_prefix (REX_OPCODE | i.rex);
3187 /* We are ready to output the insn. */
3192 parse_insn (char *line, char *mnemonic)
3195 char *token_start = l;
3198 const insn_template *t;
3201 /* Non-zero if we found a prefix only acceptable with string insns. */
3202 const char *expecting_string_instruction = NULL;
3207 while ((*mnem_p = mnemonic_chars[(unsigned char) *l]) != 0)
3212 if (mnem_p >= mnemonic + MAX_MNEM_SIZE)
3214 as_bad (_("no such instruction: `%s'"), token_start);
3219 if (!is_space_char (*l)
3220 && *l != END_OF_INSN
3222 || (*l != PREFIX_SEPARATOR
3225 as_bad (_("invalid character %s in mnemonic"),
3226 output_invalid (*l));
3229 if (token_start == l)
3231 if (!intel_syntax && *l == PREFIX_SEPARATOR)
3232 as_bad (_("expecting prefix; got nothing"));
3234 as_bad (_("expecting mnemonic; got nothing"));
3238 /* Look up instruction (or prefix) via hash table. */
3239 current_templates = (const templates *) hash_find (op_hash, mnemonic);
3241 if (*l != END_OF_INSN
3242 && (!is_space_char (*l) || l[1] != END_OF_INSN)
3243 && current_templates
3244 && current_templates->start->opcode_modifier.isprefix)
3246 if (!cpu_flags_check_cpu64 (current_templates->start->cpu_flags))
3248 as_bad ((flag_code != CODE_64BIT
3249 ? _("`%s' is only supported in 64-bit mode")
3250 : _("`%s' is not supported in 64-bit mode")),
3251 current_templates->start->name);
3254 /* If we are in 16-bit mode, do not allow addr16 or data16.
3255 Similarly, in 32-bit mode, do not allow addr32 or data32. */
3256 if ((current_templates->start->opcode_modifier.size16
3257 || current_templates->start->opcode_modifier.size32)
3258 && flag_code != CODE_64BIT
3259 && (current_templates->start->opcode_modifier.size32
3260 ^ (flag_code == CODE_16BIT)))
3262 as_bad (_("redundant %s prefix"),
3263 current_templates->start->name);
3266 /* Add prefix, checking for repeated prefixes. */
3267 switch (add_prefix (current_templates->start->base_opcode))
3272 expecting_string_instruction = current_templates->start->name;
3277 /* Skip past PREFIX_SEPARATOR and reset token_start. */
3284 if (!current_templates)
3286 /* Check if we should swap operand or force 32bit displacement in
3288 if (mnem_p - 2 == dot_p && dot_p[1] == 's')
3290 else if (mnem_p - 4 == dot_p
3294 i.disp32_encoding = 1;
3299 current_templates = (const templates *) hash_find (op_hash, mnemonic);
3302 if (!current_templates)
3305 /* See if we can get a match by trimming off a suffix. */
3308 case WORD_MNEM_SUFFIX:
3309 if (intel_syntax && (intel_float_operand (mnemonic) & 2))
3310 i.suffix = SHORT_MNEM_SUFFIX;
3312 case BYTE_MNEM_SUFFIX:
3313 case QWORD_MNEM_SUFFIX:
3314 i.suffix = mnem_p[-1];
3316 current_templates = (const templates *) hash_find (op_hash,
3319 case SHORT_MNEM_SUFFIX:
3320 case LONG_MNEM_SUFFIX:
3323 i.suffix = mnem_p[-1];
3325 current_templates = (const templates *) hash_find (op_hash,
3334 if (intel_float_operand (mnemonic) == 1)
3335 i.suffix = SHORT_MNEM_SUFFIX;
3337 i.suffix = LONG_MNEM_SUFFIX;
3339 current_templates = (const templates *) hash_find (op_hash,
3344 if (!current_templates)
3346 as_bad (_("no such instruction: `%s'"), token_start);
3351 if (current_templates->start->opcode_modifier.jump
3352 || current_templates->start->opcode_modifier.jumpbyte)
3354 /* Check for a branch hint. We allow ",pt" and ",pn" for
3355 predict taken and predict not taken respectively.
3356 I'm not sure that branch hints actually do anything on loop
3357 and jcxz insns (JumpByte) for current Pentium4 chips. They
3358 may work in the future and it doesn't hurt to accept them
3360 if (l[0] == ',' && l[1] == 'p')
3364 if (!add_prefix (DS_PREFIX_OPCODE))
3368 else if (l[2] == 'n')
3370 if (!add_prefix (CS_PREFIX_OPCODE))
3376 /* Any other comma loses. */
3379 as_bad (_("invalid character %s in mnemonic"),
3380 output_invalid (*l));
3384 /* Check if instruction is supported on specified architecture. */
3386 for (t = current_templates->start; t < current_templates->end; ++t)
3388 supported |= cpu_flags_match (t);
3389 if (supported == CPU_FLAGS_PERFECT_MATCH)
3393 if (!(supported & CPU_FLAGS_64BIT_MATCH))
3395 as_bad (flag_code == CODE_64BIT
3396 ? _("`%s' is not supported in 64-bit mode")
3397 : _("`%s' is only supported in 64-bit mode"),
3398 current_templates->start->name);
3401 if (supported != CPU_FLAGS_PERFECT_MATCH)
3403 as_bad (_("`%s' is not supported on `%s%s'"),
3404 current_templates->start->name,
3405 cpu_arch_name ? cpu_arch_name : default_arch,
3406 cpu_sub_arch_name ? cpu_sub_arch_name : "");
3411 if (!cpu_arch_flags.bitfield.cpui386
3412 && (flag_code != CODE_16BIT))
3414 as_warn (_("use .code16 to ensure correct addressing mode"));
3417 /* Check for rep/repne without a string instruction. */
3418 if (expecting_string_instruction)
3420 static templates override;
3422 for (t = current_templates->start; t < current_templates->end; ++t)
3423 if (t->opcode_modifier.isstring)
3425 if (t >= current_templates->end)
3427 as_bad (_("expecting string instruction after `%s'"),
3428 expecting_string_instruction);
3431 for (override.start = t; t < current_templates->end; ++t)
3432 if (!t->opcode_modifier.isstring)
3435 current_templates = &override;
3442 parse_operands (char *l, const char *mnemonic)
3446 /* 1 if operand is pending after ','. */
3447 unsigned int expecting_operand = 0;
3449 /* Non-zero if operand parens not balanced. */
3450 unsigned int paren_not_balanced;
3452 while (*l != END_OF_INSN)
3454 /* Skip optional white space before operand. */
3455 if (is_space_char (*l))
3457 if (!is_operand_char (*l) && *l != END_OF_INSN)
3459 as_bad (_("invalid character %s before operand %d"),
3460 output_invalid (*l),
3464 token_start = l; /* after white space */
3465 paren_not_balanced = 0;
3466 while (paren_not_balanced || *l != ',')
3468 if (*l == END_OF_INSN)
3470 if (paren_not_balanced)
3473 as_bad (_("unbalanced parenthesis in operand %d."),
3476 as_bad (_("unbalanced brackets in operand %d."),
3481 break; /* we are done */
3483 else if (!is_operand_char (*l) && !is_space_char (*l))
3485 as_bad (_("invalid character %s in operand %d"),
3486 output_invalid (*l),
3493 ++paren_not_balanced;
3495 --paren_not_balanced;
3500 ++paren_not_balanced;
3502 --paren_not_balanced;
3506 if (l != token_start)
3507 { /* Yes, we've read in another operand. */
3508 unsigned int operand_ok;
3509 this_operand = i.operands++;
3510 i.types[this_operand].bitfield.unspecified = 1;
3511 if (i.operands > MAX_OPERANDS)
3513 as_bad (_("spurious operands; (%d operands/instruction max)"),
3517 /* Now parse operand adding info to 'i' as we go along. */
3518 END_STRING_AND_SAVE (l);
3522 i386_intel_operand (token_start,
3523 intel_float_operand (mnemonic));
3525 operand_ok = i386_att_operand (token_start);
3527 RESTORE_END_STRING (l);
3533 if (expecting_operand)
3535 expecting_operand_after_comma:
3536 as_bad (_("expecting operand after ','; got nothing"));
3541 as_bad (_("expecting operand before ','; got nothing"));
3546 /* Now *l must be either ',' or END_OF_INSN. */
3549 if (*++l == END_OF_INSN)
3551 /* Just skip it, if it's \n complain. */
3552 goto expecting_operand_after_comma;
3554 expecting_operand = 1;
3561 swap_2_operands (int xchg1, int xchg2)
3563 union i386_op temp_op;
3564 i386_operand_type temp_type;
3565 enum bfd_reloc_code_real temp_reloc;
3567 temp_type = i.types[xchg2];
3568 i.types[xchg2] = i.types[xchg1];
3569 i.types[xchg1] = temp_type;
3570 temp_op = i.op[xchg2];
3571 i.op[xchg2] = i.op[xchg1];
3572 i.op[xchg1] = temp_op;
3573 temp_reloc = i.reloc[xchg2];
3574 i.reloc[xchg2] = i.reloc[xchg1];
3575 i.reloc[xchg1] = temp_reloc;
3579 swap_operands (void)
3585 swap_2_operands (1, i.operands - 2);
3588 swap_2_operands (0, i.operands - 1);
3594 if (i.mem_operands == 2)
3596 const seg_entry *temp_seg;
3597 temp_seg = i.seg[0];
3598 i.seg[0] = i.seg[1];
3599 i.seg[1] = temp_seg;
3603 /* Try to ensure constant immediates are represented in the smallest
3608 char guess_suffix = 0;
3612 guess_suffix = i.suffix;
3613 else if (i.reg_operands)
3615 /* Figure out a suffix from the last register operand specified.
3616 We can't do this properly yet, ie. excluding InOutPortReg,
3617 but the following works for instructions with immediates.
3618 In any case, we can't set i.suffix yet. */
3619 for (op = i.operands; --op >= 0;)
3620 if (i.types[op].bitfield.reg8)
3622 guess_suffix = BYTE_MNEM_SUFFIX;
3625 else if (i.types[op].bitfield.reg16)
3627 guess_suffix = WORD_MNEM_SUFFIX;
3630 else if (i.types[op].bitfield.reg32)
3632 guess_suffix = LONG_MNEM_SUFFIX;
3635 else if (i.types[op].bitfield.reg64)
3637 guess_suffix = QWORD_MNEM_SUFFIX;
3641 else if ((flag_code == CODE_16BIT) ^ (i.prefix[DATA_PREFIX] != 0))
3642 guess_suffix = WORD_MNEM_SUFFIX;
3644 for (op = i.operands; --op >= 0;)
3645 if (operand_type_check (i.types[op], imm))
3647 switch (i.op[op].imms->X_op)
3650 /* If a suffix is given, this operand may be shortened. */
3651 switch (guess_suffix)
3653 case LONG_MNEM_SUFFIX:
3654 i.types[op].bitfield.imm32 = 1;
3655 i.types[op].bitfield.imm64 = 1;
3657 case WORD_MNEM_SUFFIX:
3658 i.types[op].bitfield.imm16 = 1;
3659 i.types[op].bitfield.imm32 = 1;
3660 i.types[op].bitfield.imm32s = 1;
3661 i.types[op].bitfield.imm64 = 1;
3663 case BYTE_MNEM_SUFFIX:
3664 i.types[op].bitfield.imm8 = 1;
3665 i.types[op].bitfield.imm8s = 1;
3666 i.types[op].bitfield.imm16 = 1;
3667 i.types[op].bitfield.imm32 = 1;
3668 i.types[op].bitfield.imm32s = 1;
3669 i.types[op].bitfield.imm64 = 1;
3673 /* If this operand is at most 16 bits, convert it
3674 to a signed 16 bit number before trying to see
3675 whether it will fit in an even smaller size.
3676 This allows a 16-bit operand such as $0xffe0 to
3677 be recognised as within Imm8S range. */
3678 if ((i.types[op].bitfield.imm16)
3679 && (i.op[op].imms->X_add_number & ~(offsetT) 0xffff) == 0)
3681 i.op[op].imms->X_add_number =
3682 (((i.op[op].imms->X_add_number & 0xffff) ^ 0x8000) - 0x8000);
3684 if ((i.types[op].bitfield.imm32)
3685 && ((i.op[op].imms->X_add_number & ~(((offsetT) 2 << 31) - 1))
3688 i.op[op].imms->X_add_number = ((i.op[op].imms->X_add_number
3689 ^ ((offsetT) 1 << 31))
3690 - ((offsetT) 1 << 31));
3693 = operand_type_or (i.types[op],
3694 smallest_imm_type (i.op[op].imms->X_add_number));
3696 /* We must avoid matching of Imm32 templates when 64bit
3697 only immediate is available. */
3698 if (guess_suffix == QWORD_MNEM_SUFFIX)
3699 i.types[op].bitfield.imm32 = 0;
3706 /* Symbols and expressions. */
3708 /* Convert symbolic operand to proper sizes for matching, but don't
3709 prevent matching a set of insns that only supports sizes other
3710 than those matching the insn suffix. */
3712 i386_operand_type mask, allowed;
3713 const insn_template *t;
3715 operand_type_set (&mask, 0);
3716 operand_type_set (&allowed, 0);
3718 for (t = current_templates->start;
3719 t < current_templates->end;
3721 allowed = operand_type_or (allowed,
3722 t->operand_types[op]);
3723 switch (guess_suffix)
3725 case QWORD_MNEM_SUFFIX:
3726 mask.bitfield.imm64 = 1;
3727 mask.bitfield.imm32s = 1;
3729 case LONG_MNEM_SUFFIX:
3730 mask.bitfield.imm32 = 1;
3732 case WORD_MNEM_SUFFIX:
3733 mask.bitfield.imm16 = 1;
3735 case BYTE_MNEM_SUFFIX:
3736 mask.bitfield.imm8 = 1;
3741 allowed = operand_type_and (mask, allowed);
3742 if (!operand_type_all_zero (&allowed))
3743 i.types[op] = operand_type_and (i.types[op], mask);
3750 /* Try to use the smallest displacement type too. */
3752 optimize_disp (void)
3756 for (op = i.operands; --op >= 0;)
3757 if (operand_type_check (i.types[op], disp))
3759 if (i.op[op].disps->X_op == O_constant)
3761 offsetT op_disp = i.op[op].disps->X_add_number;
3763 if (i.types[op].bitfield.disp16
3764 && (op_disp & ~(offsetT) 0xffff) == 0)
3766 /* If this operand is at most 16 bits, convert
3767 to a signed 16 bit number and don't use 64bit
3769 op_disp = (((op_disp & 0xffff) ^ 0x8000) - 0x8000);
3770 i.types[op].bitfield.disp64 = 0;
3772 if (i.types[op].bitfield.disp32
3773 && (op_disp & ~(((offsetT) 2 << 31) - 1)) == 0)
3775 /* If this operand is at most 32 bits, convert
3776 to a signed 32 bit number and don't use 64bit
3778 op_disp &= (((offsetT) 2 << 31) - 1);
3779 op_disp = (op_disp ^ ((offsetT) 1 << 31)) - ((addressT) 1 << 31);
3780 i.types[op].bitfield.disp64 = 0;
3782 if (!op_disp && i.types[op].bitfield.baseindex)
3784 i.types[op].bitfield.disp8 = 0;
3785 i.types[op].bitfield.disp16 = 0;
3786 i.types[op].bitfield.disp32 = 0;
3787 i.types[op].bitfield.disp32s = 0;
3788 i.types[op].bitfield.disp64 = 0;
3792 else if (flag_code == CODE_64BIT)
3794 if (fits_in_signed_long (op_disp))
3796 i.types[op].bitfield.disp64 = 0;
3797 i.types[op].bitfield.disp32s = 1;
3799 if (i.prefix[ADDR_PREFIX]
3800 && fits_in_unsigned_long (op_disp))
3801 i.types[op].bitfield.disp32 = 1;
3803 if ((i.types[op].bitfield.disp32
3804 || i.types[op].bitfield.disp32s
3805 || i.types[op].bitfield.disp16)
3806 && fits_in_signed_byte (op_disp))
3807 i.types[op].bitfield.disp8 = 1;
3809 else if (i.reloc[op] == BFD_RELOC_386_TLS_DESC_CALL
3810 || i.reloc[op] == BFD_RELOC_X86_64_TLSDESC_CALL)
3812 fix_new_exp (frag_now, frag_more (0) - frag_now->fr_literal, 0,
3813 i.op[op].disps, 0, i.reloc[op]);
3814 i.types[op].bitfield.disp8 = 0;
3815 i.types[op].bitfield.disp16 = 0;
3816 i.types[op].bitfield.disp32 = 0;
3817 i.types[op].bitfield.disp32s = 0;
3818 i.types[op].bitfield.disp64 = 0;
3821 /* We only support 64bit displacement on constants. */
3822 i.types[op].bitfield.disp64 = 0;
3826 /* Check if operands are valid for the instruction. Update VEX
3830 VEX_check_operands (const insn_template *t)
3832 if (!t->opcode_modifier.vex)
3835 /* Only check VEX_Imm4, which must be the first operand. */
3836 if (t->operand_types[0].bitfield.vec_imm4)
3838 if (i.op[0].imms->X_op != O_constant
3839 || !fits_in_imm4 (i.op[0].imms->X_add_number))
3845 /* Turn off Imm8 so that update_imm won't complain. */
3846 i.types[0] = vec_imm4;
3852 static const insn_template *
3853 match_template (void)
3855 /* Points to template once we've found it. */
3856 const insn_template *t;
3857 i386_operand_type overlap0, overlap1, overlap2, overlap3;
3858 i386_operand_type overlap4;
3859 unsigned int found_reverse_match;
3860 i386_opcode_modifier suffix_check;
3861 i386_operand_type operand_types [MAX_OPERANDS];
3862 int addr_prefix_disp;
3864 unsigned int found_cpu_match;
3865 unsigned int check_register;
3867 #if MAX_OPERANDS != 5
3868 # error "MAX_OPERANDS must be 5."
3871 found_reverse_match = 0;
3872 addr_prefix_disp = -1;
3874 memset (&suffix_check, 0, sizeof (suffix_check));
3875 if (i.suffix == BYTE_MNEM_SUFFIX)
3876 suffix_check.no_bsuf = 1;
3877 else if (i.suffix == WORD_MNEM_SUFFIX)
3878 suffix_check.no_wsuf = 1;
3879 else if (i.suffix == SHORT_MNEM_SUFFIX)
3880 suffix_check.no_ssuf = 1;
3881 else if (i.suffix == LONG_MNEM_SUFFIX)
3882 suffix_check.no_lsuf = 1;
3883 else if (i.suffix == QWORD_MNEM_SUFFIX)
3884 suffix_check.no_qsuf = 1;
3885 else if (i.suffix == LONG_DOUBLE_MNEM_SUFFIX)
3886 suffix_check.no_ldsuf = 1;
3888 /* Must have right number of operands. */
3889 i.error = number_of_operands_mismatch;
3891 for (t = current_templates->start; t < current_templates->end; t++)
3893 addr_prefix_disp = -1;
3895 if (i.operands != t->operands)
3898 /* Check processor support. */
3899 i.error = unsupported;
3900 found_cpu_match = (cpu_flags_match (t)
3901 == CPU_FLAGS_PERFECT_MATCH);
3902 if (!found_cpu_match)
3905 /* Check old gcc support. */
3906 i.error = old_gcc_only;
3907 if (!old_gcc && t->opcode_modifier.oldgcc)
3910 /* Check AT&T mnemonic. */
3911 i.error = unsupported_with_intel_mnemonic;
3912 if (intel_mnemonic && t->opcode_modifier.attmnemonic)
3915 /* Check AT&T/Intel syntax. */
3916 i.error = unsupported_syntax;
3917 if ((intel_syntax && t->opcode_modifier.attsyntax)
3918 || (!intel_syntax && t->opcode_modifier.intelsyntax))
3921 /* Check the suffix, except for some instructions in intel mode. */
3922 i.error = invalid_instruction_suffix;
3923 if ((!intel_syntax || !t->opcode_modifier.ignoresize)
3924 && ((t->opcode_modifier.no_bsuf && suffix_check.no_bsuf)
3925 || (t->opcode_modifier.no_wsuf && suffix_check.no_wsuf)
3926 || (t->opcode_modifier.no_lsuf && suffix_check.no_lsuf)
3927 || (t->opcode_modifier.no_ssuf && suffix_check.no_ssuf)
3928 || (t->opcode_modifier.no_qsuf && suffix_check.no_qsuf)
3929 || (t->opcode_modifier.no_ldsuf && suffix_check.no_ldsuf)))
3932 if (!operand_size_match (t))
3935 for (j = 0; j < MAX_OPERANDS; j++)
3936 operand_types[j] = t->operand_types[j];
3938 /* In general, don't allow 64-bit operands in 32-bit mode. */
3939 if (i.suffix == QWORD_MNEM_SUFFIX
3940 && flag_code != CODE_64BIT
3942 ? (!t->opcode_modifier.ignoresize
3943 && !intel_float_operand (t->name))
3944 : intel_float_operand (t->name) != 2)
3945 && ((!operand_types[0].bitfield.regmmx
3946 && !operand_types[0].bitfield.regxmm
3947 && !operand_types[0].bitfield.regymm)
3948 || (!operand_types[t->operands > 1].bitfield.regmmx
3949 && !!operand_types[t->operands > 1].bitfield.regxmm
3950 && !!operand_types[t->operands > 1].bitfield.regymm))
3951 && (t->base_opcode != 0x0fc7
3952 || t->extension_opcode != 1 /* cmpxchg8b */))
3955 /* In general, don't allow 32-bit operands on pre-386. */
3956 else if (i.suffix == LONG_MNEM_SUFFIX
3957 && !cpu_arch_flags.bitfield.cpui386
3959 ? (!t->opcode_modifier.ignoresize
3960 && !intel_float_operand (t->name))
3961 : intel_float_operand (t->name) != 2)
3962 && ((!operand_types[0].bitfield.regmmx
3963 && !operand_types[0].bitfield.regxmm)
3964 || (!operand_types[t->operands > 1].bitfield.regmmx
3965 && !!operand_types[t->operands > 1].bitfield.regxmm)))
3968 /* Do not verify operands when there are none. */
3972 /* We've found a match; break out of loop. */
3976 /* Address size prefix will turn Disp64/Disp32/Disp16 operand
3977 into Disp32/Disp16/Disp32 operand. */
3978 if (i.prefix[ADDR_PREFIX] != 0)
3980 /* There should be only one Disp operand. */
3984 for (j = 0; j < MAX_OPERANDS; j++)
3986 if (operand_types[j].bitfield.disp16)
3988 addr_prefix_disp = j;
3989 operand_types[j].bitfield.disp32 = 1;
3990 operand_types[j].bitfield.disp16 = 0;
3996 for (j = 0; j < MAX_OPERANDS; j++)
3998 if (operand_types[j].bitfield.disp32)
4000 addr_prefix_disp = j;
4001 operand_types[j].bitfield.disp32 = 0;
4002 operand_types[j].bitfield.disp16 = 1;
4008 for (j = 0; j < MAX_OPERANDS; j++)
4010 if (operand_types[j].bitfield.disp64)
4012 addr_prefix_disp = j;
4013 operand_types[j].bitfield.disp64 = 0;
4014 operand_types[j].bitfield.disp32 = 1;
4022 /* We check register size if needed. */
4023 check_register = t->opcode_modifier.checkregsize;
4024 overlap0 = operand_type_and (i.types[0], operand_types[0]);
4025 switch (t->operands)
4028 if (!operand_type_match (overlap0, i.types[0]))
4032 /* xchg %eax, %eax is a special case. It is an aliase for nop
4033 only in 32bit mode and we can use opcode 0x90. In 64bit
4034 mode, we can't use 0x90 for xchg %eax, %eax since it should
4035 zero-extend %eax to %rax. */
4036 if (flag_code == CODE_64BIT
4037 && t->base_opcode == 0x90
4038 && operand_type_equal (&i.types [0], &acc32)
4039 && operand_type_equal (&i.types [1], &acc32))
4043 /* If we swap operand in encoding, we either match
4044 the next one or reverse direction of operands. */
4045 if (t->opcode_modifier.s)
4047 else if (t->opcode_modifier.d)
4052 /* If we swap operand in encoding, we match the next one. */
4053 if (i.swap_operand && t->opcode_modifier.s)
4057 overlap1 = operand_type_and (i.types[1], operand_types[1]);
4058 if (!operand_type_match (overlap0, i.types[0])
4059 || !operand_type_match (overlap1, i.types[1])
4061 && !operand_type_register_match (overlap0, i.types[0],
4063 overlap1, i.types[1],
4066 /* Check if other direction is valid ... */
4067 if (!t->opcode_modifier.d && !t->opcode_modifier.floatd)
4071 /* Try reversing direction of operands. */
4072 overlap0 = operand_type_and (i.types[0], operand_types[1]);
4073 overlap1 = operand_type_and (i.types[1], operand_types[0]);
4074 if (!operand_type_match (overlap0, i.types[0])
4075 || !operand_type_match (overlap1, i.types[1])
4077 && !operand_type_register_match (overlap0,
4084 /* Does not match either direction. */
4087 /* found_reverse_match holds which of D or FloatDR
4089 if (t->opcode_modifier.d)
4090 found_reverse_match = Opcode_D;
4091 else if (t->opcode_modifier.floatd)
4092 found_reverse_match = Opcode_FloatD;
4094 found_reverse_match = 0;
4095 if (t->opcode_modifier.floatr)
4096 found_reverse_match |= Opcode_FloatR;
4100 /* Found a forward 2 operand match here. */
4101 switch (t->operands)
4104 overlap4 = operand_type_and (i.types[4],
4107 overlap3 = operand_type_and (i.types[3],
4110 overlap2 = operand_type_and (i.types[2],
4115 switch (t->operands)
4118 if (!operand_type_match (overlap4, i.types[4])
4119 || !operand_type_register_match (overlap3,
4127 if (!operand_type_match (overlap3, i.types[3])
4129 && !operand_type_register_match (overlap2,
4137 /* Here we make use of the fact that there are no
4138 reverse match 3 operand instructions, and all 3
4139 operand instructions only need to be checked for
4140 register consistency between operands 2 and 3. */
4141 if (!operand_type_match (overlap2, i.types[2])
4143 && !operand_type_register_match (overlap1,
4153 /* Found either forward/reverse 2, 3 or 4 operand match here:
4154 slip through to break. */
4156 if (!found_cpu_match)
4158 found_reverse_match = 0;
4162 /* Check if VEX operands are valid. */
4163 if (VEX_check_operands (t))
4166 /* We've found a match; break out of loop. */
4170 if (t == current_templates->end)
4172 /* We found no match. */
4173 const char *err_msg;
4178 case operand_size_mismatch:
4179 err_msg = _("operand size mismatch");
4181 case operand_type_mismatch:
4182 err_msg = _("operand type mismatch");
4184 case register_type_mismatch:
4185 err_msg = _("register type mismatch");
4187 case number_of_operands_mismatch:
4188 err_msg = _("number of operands mismatch");
4190 case invalid_instruction_suffix:
4191 err_msg = _("invalid instruction suffix");
4194 err_msg = _("Imm4 isn't the first operand");
4197 err_msg = _("only supported with old gcc");
4199 case unsupported_with_intel_mnemonic:
4200 err_msg = _("unsupported with Intel mnemonic");
4202 case unsupported_syntax:
4203 err_msg = _("unsupported syntax");
4206 err_msg = _("unsupported");
4209 as_bad (_("%s for `%s'"), err_msg,
4210 current_templates->start->name);
4214 if (!quiet_warnings)
4217 && (i.types[0].bitfield.jumpabsolute
4218 != operand_types[0].bitfield.jumpabsolute))
4220 as_warn (_("indirect %s without `*'"), t->name);
4223 if (t->opcode_modifier.isprefix
4224 && t->opcode_modifier.ignoresize)
4226 /* Warn them that a data or address size prefix doesn't
4227 affect assembly of the next line of code. */
4228 as_warn (_("stand-alone `%s' prefix"), t->name);
4232 /* Copy the template we found. */
4235 if (addr_prefix_disp != -1)
4236 i.tm.operand_types[addr_prefix_disp]
4237 = operand_types[addr_prefix_disp];
4239 if (found_reverse_match)
4241 /* If we found a reverse match we must alter the opcode
4242 direction bit. found_reverse_match holds bits to change
4243 (different for int & float insns). */
4245 i.tm.base_opcode ^= found_reverse_match;
4247 i.tm.operand_types[0] = operand_types[1];
4248 i.tm.operand_types[1] = operand_types[0];
4257 int mem_op = operand_type_check (i.types[0], anymem) ? 0 : 1;
4258 if (i.tm.operand_types[mem_op].bitfield.esseg)
4260 if (i.seg[0] != NULL && i.seg[0] != &es)
4262 as_bad (_("`%s' operand %d must use `%ses' segment"),
4268 /* There's only ever one segment override allowed per instruction.
4269 This instruction possibly has a legal segment override on the
4270 second operand, so copy the segment to where non-string
4271 instructions store it, allowing common code. */
4272 i.seg[0] = i.seg[1];
4274 else if (i.tm.operand_types[mem_op + 1].bitfield.esseg)
4276 if (i.seg[1] != NULL && i.seg[1] != &es)
4278 as_bad (_("`%s' operand %d must use `%ses' segment"),
4289 process_suffix (void)
4291 /* If matched instruction specifies an explicit instruction mnemonic
4293 if (i.tm.opcode_modifier.size16)
4294 i.suffix = WORD_MNEM_SUFFIX;
4295 else if (i.tm.opcode_modifier.size32)
4296 i.suffix = LONG_MNEM_SUFFIX;
4297 else if (i.tm.opcode_modifier.size64)
4298 i.suffix = QWORD_MNEM_SUFFIX;
4299 else if (i.reg_operands)
4301 /* If there's no instruction mnemonic suffix we try to invent one
4302 based on register operands. */
4305 /* We take i.suffix from the last register operand specified,
4306 Destination register type is more significant than source
4307 register type. crc32 in SSE4.2 prefers source register
4309 if (i.tm.base_opcode == 0xf20f38f1)
4311 if (i.types[0].bitfield.reg16)
4312 i.suffix = WORD_MNEM_SUFFIX;
4313 else if (i.types[0].bitfield.reg32)
4314 i.suffix = LONG_MNEM_SUFFIX;
4315 else if (i.types[0].bitfield.reg64)
4316 i.suffix = QWORD_MNEM_SUFFIX;
4318 else if (i.tm.base_opcode == 0xf20f38f0)
4320 if (i.types[0].bitfield.reg8)
4321 i.suffix = BYTE_MNEM_SUFFIX;
4328 if (i.tm.base_opcode == 0xf20f38f1
4329 || i.tm.base_opcode == 0xf20f38f0)
4331 /* We have to know the operand size for crc32. */
4332 as_bad (_("ambiguous memory operand size for `%s`"),
4337 for (op = i.operands; --op >= 0;)
4338 if (!i.tm.operand_types[op].bitfield.inoutportreg)
4340 if (i.types[op].bitfield.reg8)
4342 i.suffix = BYTE_MNEM_SUFFIX;
4345 else if (i.types[op].bitfield.reg16)
4347 i.suffix = WORD_MNEM_SUFFIX;
4350 else if (i.types[op].bitfield.reg32)
4352 i.suffix = LONG_MNEM_SUFFIX;
4355 else if (i.types[op].bitfield.reg64)
4357 i.suffix = QWORD_MNEM_SUFFIX;
4363 else if (i.suffix == BYTE_MNEM_SUFFIX)
4366 && i.tm.opcode_modifier.ignoresize
4367 && i.tm.opcode_modifier.no_bsuf)
4369 else if (!check_byte_reg ())
4372 else if (i.suffix == LONG_MNEM_SUFFIX)
4375 && i.tm.opcode_modifier.ignoresize
4376 && i.tm.opcode_modifier.no_lsuf)
4378 else if (!check_long_reg ())
4381 else if (i.suffix == QWORD_MNEM_SUFFIX)
4384 && i.tm.opcode_modifier.ignoresize
4385 && i.tm.opcode_modifier.no_qsuf)
4387 else if (!check_qword_reg ())
4390 else if (i.suffix == WORD_MNEM_SUFFIX)
4393 && i.tm.opcode_modifier.ignoresize
4394 && i.tm.opcode_modifier.no_wsuf)
4396 else if (!check_word_reg ())
4399 else if (i.suffix == XMMWORD_MNEM_SUFFIX
4400 || i.suffix == YMMWORD_MNEM_SUFFIX)
4402 /* Skip if the instruction has x/y suffix. match_template
4403 should check if it is a valid suffix. */
4405 else if (intel_syntax && i.tm.opcode_modifier.ignoresize)
4406 /* Do nothing if the instruction is going to ignore the prefix. */
4411 else if (i.tm.opcode_modifier.defaultsize
4413 /* exclude fldenv/frstor/fsave/fstenv */
4414 && i.tm.opcode_modifier.no_ssuf)
4416 i.suffix = stackop_size;
4418 else if (intel_syntax
4420 && (i.tm.operand_types[0].bitfield.jumpabsolute
4421 || i.tm.opcode_modifier.jumpbyte
4422 || i.tm.opcode_modifier.jumpintersegment
4423 || (i.tm.base_opcode == 0x0f01 /* [ls][gi]dt */
4424 && i.tm.extension_opcode <= 3)))
4429 if (!i.tm.opcode_modifier.no_qsuf)
4431 i.suffix = QWORD_MNEM_SUFFIX;
4435 if (!i.tm.opcode_modifier.no_lsuf)
4436 i.suffix = LONG_MNEM_SUFFIX;
4439 if (!i.tm.opcode_modifier.no_wsuf)
4440 i.suffix = WORD_MNEM_SUFFIX;
4449 if (i.tm.opcode_modifier.w)
4451 as_bad (_("no instruction mnemonic suffix given and "
4452 "no register operands; can't size instruction"));
4458 unsigned int suffixes;
4460 suffixes = !i.tm.opcode_modifier.no_bsuf;
4461 if (!i.tm.opcode_modifier.no_wsuf)
4463 if (!i.tm.opcode_modifier.no_lsuf)
4465 if (!i.tm.opcode_modifier.no_ldsuf)
4467 if (!i.tm.opcode_modifier.no_ssuf)
4469 if (!i.tm.opcode_modifier.no_qsuf)
4472 /* There are more than suffix matches. */
4473 if (i.tm.opcode_modifier.w
4474 || ((suffixes & (suffixes - 1))
4475 && !i.tm.opcode_modifier.defaultsize
4476 && !i.tm.opcode_modifier.ignoresize))
4478 as_bad (_("ambiguous operand size for `%s'"), i.tm.name);
4484 /* Change the opcode based on the operand size given by i.suffix;
4485 We don't need to change things for byte insns. */
4488 && i.suffix != BYTE_MNEM_SUFFIX
4489 && i.suffix != XMMWORD_MNEM_SUFFIX
4490 && i.suffix != YMMWORD_MNEM_SUFFIX)
4492 /* It's not a byte, select word/dword operation. */
4493 if (i.tm.opcode_modifier.w)
4495 if (i.tm.opcode_modifier.shortform)
4496 i.tm.base_opcode |= 8;
4498 i.tm.base_opcode |= 1;
4501 /* Now select between word & dword operations via the operand
4502 size prefix, except for instructions that will ignore this
4504 if (i.tm.opcode_modifier.addrprefixop0)
4506 /* The address size override prefix changes the size of the
4508 if ((flag_code == CODE_32BIT
4509 && i.op->regs[0].reg_type.bitfield.reg16)
4510 || (flag_code != CODE_32BIT
4511 && i.op->regs[0].reg_type.bitfield.reg32))
4512 if (!add_prefix (ADDR_PREFIX_OPCODE))
4515 else if (i.suffix != QWORD_MNEM_SUFFIX
4516 && i.suffix != LONG_DOUBLE_MNEM_SUFFIX
4517 && !i.tm.opcode_modifier.ignoresize
4518 && !i.tm.opcode_modifier.floatmf
4519 && ((i.suffix == LONG_MNEM_SUFFIX) == (flag_code == CODE_16BIT)
4520 || (flag_code == CODE_64BIT
4521 && i.tm.opcode_modifier.jumpbyte)))
4523 unsigned int prefix = DATA_PREFIX_OPCODE;
4525 if (i.tm.opcode_modifier.jumpbyte) /* jcxz, loop */
4526 prefix = ADDR_PREFIX_OPCODE;
4528 if (!add_prefix (prefix))
4532 /* Set mode64 for an operand. */
4533 if (i.suffix == QWORD_MNEM_SUFFIX
4534 && flag_code == CODE_64BIT
4535 && !i.tm.opcode_modifier.norex64)
4537 /* Special case for xchg %rax,%rax. It is NOP and doesn't
4538 need rex64. cmpxchg8b is also a special case. */
4539 if (! (i.operands == 2
4540 && i.tm.base_opcode == 0x90
4541 && i.tm.extension_opcode == None
4542 && operand_type_equal (&i.types [0], &acc64)
4543 && operand_type_equal (&i.types [1], &acc64))
4544 && ! (i.operands == 1
4545 && i.tm.base_opcode == 0xfc7
4546 && i.tm.extension_opcode == 1
4547 && !operand_type_check (i.types [0], reg)
4548 && operand_type_check (i.types [0], anymem)))
4552 /* Size floating point instruction. */
4553 if (i.suffix == LONG_MNEM_SUFFIX)
4554 if (i.tm.opcode_modifier.floatmf)
4555 i.tm.base_opcode ^= 4;
4562 check_byte_reg (void)
4566 for (op = i.operands; --op >= 0;)
4568 /* If this is an eight bit register, it's OK. If it's the 16 or
4569 32 bit version of an eight bit register, we will just use the
4570 low portion, and that's OK too. */
4571 if (i.types[op].bitfield.reg8)
4574 /* crc32 doesn't generate this warning. */
4575 if (i.tm.base_opcode == 0xf20f38f0)
4578 if ((i.types[op].bitfield.reg16
4579 || i.types[op].bitfield.reg32
4580 || i.types[op].bitfield.reg64)
4581 && i.op[op].regs->reg_num < 4)
4583 /* Prohibit these changes in the 64bit mode, since the
4584 lowering is more complicated. */
4585 if (flag_code == CODE_64BIT
4586 && !i.tm.operand_types[op].bitfield.inoutportreg)
4588 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4589 register_prefix, i.op[op].regs->reg_name,
4593 #if REGISTER_WARNINGS
4595 && !i.tm.operand_types[op].bitfield.inoutportreg)
4596 as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
4598 (i.op[op].regs + (i.types[op].bitfield.reg16
4599 ? REGNAM_AL - REGNAM_AX
4600 : REGNAM_AL - REGNAM_EAX))->reg_name,
4602 i.op[op].regs->reg_name,
4607 /* Any other register is bad. */
4608 if (i.types[op].bitfield.reg16
4609 || i.types[op].bitfield.reg32
4610 || i.types[op].bitfield.reg64
4611 || i.types[op].bitfield.regmmx
4612 || i.types[op].bitfield.regxmm
4613 || i.types[op].bitfield.regymm
4614 || i.types[op].bitfield.sreg2
4615 || i.types[op].bitfield.sreg3
4616 || i.types[op].bitfield.control
4617 || i.types[op].bitfield.debug
4618 || i.types[op].bitfield.test
4619 || i.types[op].bitfield.floatreg
4620 || i.types[op].bitfield.floatacc)
4622 as_bad (_("`%s%s' not allowed with `%s%c'"),
4624 i.op[op].regs->reg_name,
4634 check_long_reg (void)
4638 for (op = i.operands; --op >= 0;)
4639 /* Reject eight bit registers, except where the template requires
4640 them. (eg. movzb) */
4641 if (i.types[op].bitfield.reg8
4642 && (i.tm.operand_types[op].bitfield.reg16
4643 || i.tm.operand_types[op].bitfield.reg32
4644 || i.tm.operand_types[op].bitfield.acc))
4646 as_bad (_("`%s%s' not allowed with `%s%c'"),
4648 i.op[op].regs->reg_name,
4653 /* Warn if the e prefix on a general reg is missing. */
4654 else if ((!quiet_warnings || flag_code == CODE_64BIT)
4655 && i.types[op].bitfield.reg16
4656 && (i.tm.operand_types[op].bitfield.reg32
4657 || i.tm.operand_types[op].bitfield.acc))
4659 /* Prohibit these changes in the 64bit mode, since the
4660 lowering is more complicated. */
4661 if (flag_code == CODE_64BIT)
4663 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4664 register_prefix, i.op[op].regs->reg_name,
4668 #if REGISTER_WARNINGS
4670 as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
4672 (i.op[op].regs + REGNAM_EAX - REGNAM_AX)->reg_name,
4674 i.op[op].regs->reg_name,
4678 /* Warn if the r prefix on a general reg is missing. */
4679 else if (i.types[op].bitfield.reg64
4680 && (i.tm.operand_types[op].bitfield.reg32
4681 || i.tm.operand_types[op].bitfield.acc))
4684 && i.tm.opcode_modifier.toqword
4685 && !i.types[0].bitfield.regxmm)
4687 /* Convert to QWORD. We want REX byte. */
4688 i.suffix = QWORD_MNEM_SUFFIX;
4692 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4693 register_prefix, i.op[op].regs->reg_name,
4702 check_qword_reg (void)
4706 for (op = i.operands; --op >= 0; )
4707 /* Reject eight bit registers, except where the template requires
4708 them. (eg. movzb) */
4709 if (i.types[op].bitfield.reg8
4710 && (i.tm.operand_types[op].bitfield.reg16
4711 || i.tm.operand_types[op].bitfield.reg32
4712 || i.tm.operand_types[op].bitfield.acc))
4714 as_bad (_("`%s%s' not allowed with `%s%c'"),
4716 i.op[op].regs->reg_name,
4721 /* Warn if the e prefix on a general reg is missing. */
4722 else if ((i.types[op].bitfield.reg16
4723 || i.types[op].bitfield.reg32)
4724 && (i.tm.operand_types[op].bitfield.reg32
4725 || i.tm.operand_types[op].bitfield.acc))
4727 /* Prohibit these changes in the 64bit mode, since the
4728 lowering is more complicated. */
4730 && i.tm.opcode_modifier.todword
4731 && !i.types[0].bitfield.regxmm)
4733 /* Convert to DWORD. We don't want REX byte. */
4734 i.suffix = LONG_MNEM_SUFFIX;
4738 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4739 register_prefix, i.op[op].regs->reg_name,
4748 check_word_reg (void)
4751 for (op = i.operands; --op >= 0;)
4752 /* Reject eight bit registers, except where the template requires
4753 them. (eg. movzb) */
4754 if (i.types[op].bitfield.reg8
4755 && (i.tm.operand_types[op].bitfield.reg16
4756 || i.tm.operand_types[op].bitfield.reg32
4757 || i.tm.operand_types[op].bitfield.acc))
4759 as_bad (_("`%s%s' not allowed with `%s%c'"),
4761 i.op[op].regs->reg_name,
4766 /* Warn if the e prefix on a general reg is present. */
4767 else if ((!quiet_warnings || flag_code == CODE_64BIT)
4768 && i.types[op].bitfield.reg32
4769 && (i.tm.operand_types[op].bitfield.reg16
4770 || i.tm.operand_types[op].bitfield.acc))
4772 /* Prohibit these changes in the 64bit mode, since the
4773 lowering is more complicated. */
4774 if (flag_code == CODE_64BIT)
4776 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4777 register_prefix, i.op[op].regs->reg_name,
4782 #if REGISTER_WARNINGS
4783 as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
4785 (i.op[op].regs + REGNAM_AX - REGNAM_EAX)->reg_name,
4787 i.op[op].regs->reg_name,
4795 update_imm (unsigned int j)
4797 i386_operand_type overlap = i.types[j];
4798 if ((overlap.bitfield.imm8
4799 || overlap.bitfield.imm8s
4800 || overlap.bitfield.imm16
4801 || overlap.bitfield.imm32
4802 || overlap.bitfield.imm32s
4803 || overlap.bitfield.imm64)
4804 && !operand_type_equal (&overlap, &imm8)
4805 && !operand_type_equal (&overlap, &imm8s)
4806 && !operand_type_equal (&overlap, &imm16)
4807 && !operand_type_equal (&overlap, &imm32)
4808 && !operand_type_equal (&overlap, &imm32s)
4809 && !operand_type_equal (&overlap, &imm64))
4813 i386_operand_type temp;
4815 operand_type_set (&temp, 0);
4816 if (i.suffix == BYTE_MNEM_SUFFIX)
4818 temp.bitfield.imm8 = overlap.bitfield.imm8;
4819 temp.bitfield.imm8s = overlap.bitfield.imm8s;
4821 else if (i.suffix == WORD_MNEM_SUFFIX)
4822 temp.bitfield.imm16 = overlap.bitfield.imm16;
4823 else if (i.suffix == QWORD_MNEM_SUFFIX)
4825 temp.bitfield.imm64 = overlap.bitfield.imm64;
4826 temp.bitfield.imm32s = overlap.bitfield.imm32s;
4829 temp.bitfield.imm32 = overlap.bitfield.imm32;
4832 else if (operand_type_equal (&overlap, &imm16_32_32s)
4833 || operand_type_equal (&overlap, &imm16_32)
4834 || operand_type_equal (&overlap, &imm16_32s))
4836 if ((flag_code == CODE_16BIT) ^ (i.prefix[DATA_PREFIX] != 0))
4841 if (!operand_type_equal (&overlap, &imm8)
4842 && !operand_type_equal (&overlap, &imm8s)
4843 && !operand_type_equal (&overlap, &imm16)
4844 && !operand_type_equal (&overlap, &imm32)
4845 && !operand_type_equal (&overlap, &imm32s)
4846 && !operand_type_equal (&overlap, &imm64))
4848 as_bad (_("no instruction mnemonic suffix given; "
4849 "can't determine immediate size"));
4853 i.types[j] = overlap;
4863 /* Update the first 2 immediate operands. */
4864 n = i.operands > 2 ? 2 : i.operands;
4867 for (j = 0; j < n; j++)
4868 if (update_imm (j) == 0)
4871 /* The 3rd operand can't be immediate operand. */
4872 gas_assert (operand_type_check (i.types[2], imm) == 0);
4879 bad_implicit_operand (int xmm)
4881 const char *ireg = xmm ? "xmm0" : "ymm0";
4884 as_bad (_("the last operand of `%s' must be `%s%s'"),
4885 i.tm.name, register_prefix, ireg);
4887 as_bad (_("the first operand of `%s' must be `%s%s'"),
4888 i.tm.name, register_prefix, ireg);
4893 process_operands (void)
4895 /* Default segment register this instruction will use for memory
4896 accesses. 0 means unknown. This is only for optimizing out
4897 unnecessary segment overrides. */
4898 const seg_entry *default_seg = 0;
4900 if (i.tm.opcode_modifier.sse2avx && i.tm.opcode_modifier.vexvvvv)
4902 unsigned int dupl = i.operands;
4903 unsigned int dest = dupl - 1;
4906 /* The destination must be an xmm register. */
4907 gas_assert (i.reg_operands
4908 && MAX_OPERANDS > dupl
4909 && operand_type_equal (&i.types[dest], ®xmm));
4911 if (i.tm.opcode_modifier.firstxmm0)
4913 /* The first operand is implicit and must be xmm0. */
4914 gas_assert (operand_type_equal (&i.types[0], ®xmm));
4915 if (i.op[0].regs->reg_num != 0)
4916 return bad_implicit_operand (1);
4918 if (i.tm.opcode_modifier.vexsources == VEX3SOURCES)
4920 /* Keep xmm0 for instructions with VEX prefix and 3
4926 /* We remove the first xmm0 and keep the number of
4927 operands unchanged, which in fact duplicates the
4929 for (j = 1; j < i.operands; j++)
4931 i.op[j - 1] = i.op[j];
4932 i.types[j - 1] = i.types[j];
4933 i.tm.operand_types[j - 1] = i.tm.operand_types[j];
4937 else if (i.tm.opcode_modifier.implicit1stxmm0)
4939 gas_assert ((MAX_OPERANDS - 1) > dupl
4940 && (i.tm.opcode_modifier.vexsources
4943 /* Add the implicit xmm0 for instructions with VEX prefix
4945 for (j = i.operands; j > 0; j--)
4947 i.op[j] = i.op[j - 1];
4948 i.types[j] = i.types[j - 1];
4949 i.tm.operand_types[j] = i.tm.operand_types[j - 1];
4952 = (const reg_entry *) hash_find (reg_hash, "xmm0");
4953 i.types[0] = regxmm;
4954 i.tm.operand_types[0] = regxmm;
4957 i.reg_operands += 2;
4962 i.op[dupl] = i.op[dest];
4963 i.types[dupl] = i.types[dest];
4964 i.tm.operand_types[dupl] = i.tm.operand_types[dest];
4973 i.op[dupl] = i.op[dest];
4974 i.types[dupl] = i.types[dest];
4975 i.tm.operand_types[dupl] = i.tm.operand_types[dest];
4978 if (i.tm.opcode_modifier.immext)
4981 else if (i.tm.opcode_modifier.firstxmm0)
4985 /* The first operand is implicit and must be xmm0/ymm0. */
4986 gas_assert (i.reg_operands
4987 && (operand_type_equal (&i.types[0], ®xmm)
4988 || operand_type_equal (&i.types[0], ®ymm)));
4989 if (i.op[0].regs->reg_num != 0)
4990 return bad_implicit_operand (i.types[0].bitfield.regxmm);
4992 for (j = 1; j < i.operands; j++)
4994 i.op[j - 1] = i.op[j];
4995 i.types[j - 1] = i.types[j];
4997 /* We need to adjust fields in i.tm since they are used by
4998 build_modrm_byte. */
4999 i.tm.operand_types [j - 1] = i.tm.operand_types [j];
5006 else if (i.tm.opcode_modifier.regkludge)
5008 /* The imul $imm, %reg instruction is converted into
5009 imul $imm, %reg, %reg, and the clr %reg instruction
5010 is converted into xor %reg, %reg. */
5012 unsigned int first_reg_op;
5014 if (operand_type_check (i.types[0], reg))
5018 /* Pretend we saw the extra register operand. */
5019 gas_assert (i.reg_operands == 1
5020 && i.op[first_reg_op + 1].regs == 0);
5021 i.op[first_reg_op + 1].regs = i.op[first_reg_op].regs;
5022 i.types[first_reg_op + 1] = i.types[first_reg_op];
5027 if (i.tm.opcode_modifier.shortform)
5029 if (i.types[0].bitfield.sreg2
5030 || i.types[0].bitfield.sreg3)
5032 if (i.tm.base_opcode == POP_SEG_SHORT
5033 && i.op[0].regs->reg_num == 1)
5035 as_bad (_("you can't `pop %scs'"), register_prefix);
5038 i.tm.base_opcode |= (i.op[0].regs->reg_num << 3);
5039 if ((i.op[0].regs->reg_flags & RegRex) != 0)
5044 /* The register or float register operand is in operand
5048 if (i.types[0].bitfield.floatreg
5049 || operand_type_check (i.types[0], reg))
5053 /* Register goes in low 3 bits of opcode. */
5054 i.tm.base_opcode |= i.op[op].regs->reg_num;
5055 if ((i.op[op].regs->reg_flags & RegRex) != 0)
5057 if (!quiet_warnings && i.tm.opcode_modifier.ugh)
5059 /* Warn about some common errors, but press on regardless.
5060 The first case can be generated by gcc (<= 2.8.1). */
5061 if (i.operands == 2)
5063 /* Reversed arguments on faddp, fsubp, etc. */
5064 as_warn (_("translating to `%s %s%s,%s%s'"), i.tm.name,
5065 register_prefix, i.op[!intel_syntax].regs->reg_name,
5066 register_prefix, i.op[intel_syntax].regs->reg_name);
5070 /* Extraneous `l' suffix on fp insn. */
5071 as_warn (_("translating to `%s %s%s'"), i.tm.name,
5072 register_prefix, i.op[0].regs->reg_name);
5077 else if (i.tm.opcode_modifier.modrm)
5079 /* The opcode is completed (modulo i.tm.extension_opcode which
5080 must be put into the modrm byte). Now, we make the modrm and
5081 index base bytes based on all the info we've collected. */
5083 default_seg = build_modrm_byte ();
5085 else if ((i.tm.base_opcode & ~0x3) == MOV_AX_DISP32)
5089 else if (i.tm.opcode_modifier.isstring)
5091 /* For the string instructions that allow a segment override
5092 on one of their operands, the default segment is ds. */
5096 if (i.tm.base_opcode == 0x8d /* lea */
5099 as_warn (_("segment override on `%s' is ineffectual"), i.tm.name);
5101 /* If a segment was explicitly specified, and the specified segment
5102 is not the default, use an opcode prefix to select it. If we
5103 never figured out what the default segment is, then default_seg
5104 will be zero at this point, and the specified segment prefix will
5106 if ((i.seg[0]) && (i.seg[0] != default_seg))
5108 if (!add_prefix (i.seg[0]->seg_prefix))
5114 static const seg_entry *
5115 build_modrm_byte (void)
5117 const seg_entry *default_seg = 0;
5118 unsigned int source, dest;
5121 /* The first operand of instructions with VEX prefix and 3 sources
5122 must be VEX_Imm4. */
5123 vex_3_sources = i.tm.opcode_modifier.vexsources == VEX3SOURCES;
5126 unsigned int nds, reg_slot;
5129 if (i.tm.opcode_modifier.veximmext
5130 && i.tm.opcode_modifier.immext)
5132 dest = i.operands - 2;
5133 gas_assert (dest == 3);
5136 dest = i.operands - 1;
5139 /* There are 2 kinds of instructions:
5140 1. 5 operands: 4 register operands or 3 register operands
5141 plus 1 memory operand plus one Vec_Imm4 operand, VexXDS, and
5142 VexW0 or VexW1. The destination must be either XMM or YMM
5144 2. 4 operands: 4 register operands or 3 register operands
5145 plus 1 memory operand, VexXDS, and VexImmExt */
5146 gas_assert ((i.reg_operands == 4
5147 || (i.reg_operands == 3 && i.mem_operands == 1))
5148 && i.tm.opcode_modifier.vexvvvv == VEXXDS
5149 && (i.tm.opcode_modifier.veximmext
5150 || (i.imm_operands == 1
5151 && i.types[0].bitfield.vec_imm4
5152 && (i.tm.opcode_modifier.vexw == VEXW0
5153 || i.tm.opcode_modifier.vexw == VEXW1)
5154 && (operand_type_equal (&i.tm.operand_types[dest], ®xmm)
5155 || operand_type_equal (&i.tm.operand_types[dest], ®ymm)))));
5157 if (i.imm_operands == 0)
5159 /* When there is no immediate operand, generate an 8bit
5160 immediate operand to encode the first operand. */
5161 exp = &im_expressions[i.imm_operands++];
5162 i.op[i.operands].imms = exp;
5163 i.types[i.operands] = imm8;
5165 /* If VexW1 is set, the first operand is the source and
5166 the second operand is encoded in the immediate operand. */
5167 if (i.tm.opcode_modifier.vexw == VEXW1)
5178 /* FMA swaps REG and NDS. */
5179 if (i.tm.cpu_flags.bitfield.cpufma)
5187 gas_assert (operand_type_equal (&i.tm.operand_types[reg_slot],
5189 || operand_type_equal (&i.tm.operand_types[reg_slot],
5191 exp->X_op = O_constant;
5193 = ((i.op[reg_slot].regs->reg_num
5194 + ((i.op[reg_slot].regs->reg_flags & RegRex) ? 8 : 0))
5199 unsigned int imm_slot;
5201 if (i.tm.opcode_modifier.vexw == VEXW0)
5203 /* If VexW0 is set, the third operand is the source and
5204 the second operand is encoded in the immediate
5211 /* VexW1 is set, the second operand is the source and
5212 the third operand is encoded in the immediate
5218 if (i.tm.opcode_modifier.immext)
5220 /* When ImmExt is set, the immdiate byte is the last
5222 imm_slot = i.operands - 1;
5230 /* Turn on Imm8 so that output_imm will generate it. */
5231 i.types[imm_slot].bitfield.imm8 = 1;
5234 gas_assert (operand_type_equal (&i.tm.operand_types[reg_slot],
5236 || operand_type_equal (&i.tm.operand_types[reg_slot],
5238 i.op[imm_slot].imms->X_add_number
5239 |= ((i.op[reg_slot].regs->reg_num
5240 + ((i.op[reg_slot].regs->reg_flags & RegRex) ? 8 : 0))
5244 gas_assert (operand_type_equal (&i.tm.operand_types[nds], ®xmm)
5245 || operand_type_equal (&i.tm.operand_types[nds],
5247 i.vex.register_specifier = i.op[nds].regs;
5252 /* i.reg_operands MUST be the number of real register operands;
5253 implicit registers do not count. If there are 3 register
5254 operands, it must be a instruction with VexNDS. For a
5255 instruction with VexNDD, the destination register is encoded
5256 in VEX prefix. If there are 4 register operands, it must be
5257 a instruction with VEX prefix and 3 sources. */
5258 if (i.mem_operands == 0
5259 && ((i.reg_operands == 2
5260 && i.tm.opcode_modifier.vexvvvv <= VEXXDS)
5261 || (i.reg_operands == 3
5262 && i.tm.opcode_modifier.vexvvvv == VEXXDS)
5263 || (i.reg_operands == 4 && vex_3_sources)))
5271 /* When there are 3 operands, one of them may be immediate,
5272 which may be the first or the last operand. Otherwise,
5273 the first operand must be shift count register (cl) or it
5274 is an instruction with VexNDS. */
5275 gas_assert (i.imm_operands == 1
5276 || (i.imm_operands == 0
5277 && (i.tm.opcode_modifier.vexvvvv == VEXXDS
5278 || i.types[0].bitfield.shiftcount)));
5279 if (operand_type_check (i.types[0], imm)
5280 || i.types[0].bitfield.shiftcount)
5286 /* When there are 4 operands, the first two must be 8bit
5287 immediate operands. The source operand will be the 3rd
5290 For instructions with VexNDS, if the first operand
5291 an imm8, the source operand is the 2nd one. If the last
5292 operand is imm8, the source operand is the first one. */
5293 gas_assert ((i.imm_operands == 2
5294 && i.types[0].bitfield.imm8
5295 && i.types[1].bitfield.imm8)
5296 || (i.tm.opcode_modifier.vexvvvv == VEXXDS
5297 && i.imm_operands == 1
5298 && (i.types[0].bitfield.imm8
5299 || i.types[i.operands - 1].bitfield.imm8)));
5300 if (i.imm_operands == 2)
5304 if (i.types[0].bitfield.imm8)
5320 if (i.tm.opcode_modifier.vexvvvv == VEXXDS)
5322 /* For instructions with VexNDS, the register-only
5323 source operand must be 32/64bit integer, XMM or
5324 YMM register. It is encoded in VEX prefix. We
5325 need to clear RegMem bit before calling
5326 operand_type_equal. */
5328 i386_operand_type op;
5331 /* Check register-only source operand when two source
5332 operands are swapped. */
5333 if (!i.tm.operand_types[source].bitfield.baseindex
5334 && i.tm.operand_types[dest].bitfield.baseindex)
5342 op = i.tm.operand_types[vvvv];
5343 op.bitfield.regmem = 0;
5344 if ((dest + 1) >= i.operands
5345 || (op.bitfield.reg32 != 1
5346 && !op.bitfield.reg64 != 1
5347 && !operand_type_equal (&op, ®xmm)
5348 && !operand_type_equal (&op, ®ymm)))
5350 i.vex.register_specifier = i.op[vvvv].regs;
5356 /* One of the register operands will be encoded in the i.tm.reg
5357 field, the other in the combined i.tm.mode and i.tm.regmem
5358 fields. If no form of this instruction supports a memory
5359 destination operand, then we assume the source operand may
5360 sometimes be a memory operand and so we need to store the
5361 destination in the i.rm.reg field. */
5362 if (!i.tm.operand_types[dest].bitfield.regmem
5363 && operand_type_check (i.tm.operand_types[dest], anymem) == 0)
5365 i.rm.reg = i.op[dest].regs->reg_num;
5366 i.rm.regmem = i.op[source].regs->reg_num;
5367 if ((i.op[dest].regs->reg_flags & RegRex) != 0)
5369 if ((i.op[source].regs->reg_flags & RegRex) != 0)
5374 i.rm.reg = i.op[source].regs->reg_num;
5375 i.rm.regmem = i.op[dest].regs->reg_num;
5376 if ((i.op[dest].regs->reg_flags & RegRex) != 0)
5378 if ((i.op[source].regs->reg_flags & RegRex) != 0)
5381 if (flag_code != CODE_64BIT && (i.rex & (REX_R | REX_B)))
5383 if (!i.types[0].bitfield.control
5384 && !i.types[1].bitfield.control)
5386 i.rex &= ~(REX_R | REX_B);
5387 add_prefix (LOCK_PREFIX_OPCODE);
5391 { /* If it's not 2 reg operands... */
5396 unsigned int fake_zero_displacement = 0;
5399 for (op = 0; op < i.operands; op++)
5400 if (operand_type_check (i.types[op], anymem))
5402 gas_assert (op < i.operands);
5406 if (i.base_reg == 0)
5409 if (!i.disp_operands)
5410 fake_zero_displacement = 1;
5411 if (i.index_reg == 0)
5413 /* Operand is just <disp> */
5414 if (flag_code == CODE_64BIT)
5416 /* 64bit mode overwrites the 32bit absolute
5417 addressing by RIP relative addressing and
5418 absolute addressing is encoded by one of the
5419 redundant SIB forms. */
5420 i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
5421 i.sib.base = NO_BASE_REGISTER;
5422 i.sib.index = NO_INDEX_REGISTER;
5423 i.types[op] = ((i.prefix[ADDR_PREFIX] == 0)
5424 ? disp32s : disp32);
5426 else if ((flag_code == CODE_16BIT)
5427 ^ (i.prefix[ADDR_PREFIX] != 0))
5429 i.rm.regmem = NO_BASE_REGISTER_16;
5430 i.types[op] = disp16;
5434 i.rm.regmem = NO_BASE_REGISTER;
5435 i.types[op] = disp32;
5438 else /* !i.base_reg && i.index_reg */
5440 if (i.index_reg->reg_num == RegEiz
5441 || i.index_reg->reg_num == RegRiz)
5442 i.sib.index = NO_INDEX_REGISTER;
5444 i.sib.index = i.index_reg->reg_num;
5445 i.sib.base = NO_BASE_REGISTER;
5446 i.sib.scale = i.log2_scale_factor;
5447 i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
5448 i.types[op].bitfield.disp8 = 0;
5449 i.types[op].bitfield.disp16 = 0;
5450 i.types[op].bitfield.disp64 = 0;
5451 if (flag_code != CODE_64BIT)
5453 /* Must be 32 bit */
5454 i.types[op].bitfield.disp32 = 1;
5455 i.types[op].bitfield.disp32s = 0;
5459 i.types[op].bitfield.disp32 = 0;
5460 i.types[op].bitfield.disp32s = 1;
5462 if ((i.index_reg->reg_flags & RegRex) != 0)
5466 /* RIP addressing for 64bit mode. */
5467 else if (i.base_reg->reg_num == RegRip ||
5468 i.base_reg->reg_num == RegEip)
5470 i.rm.regmem = NO_BASE_REGISTER;
5471 i.types[op].bitfield.disp8 = 0;
5472 i.types[op].bitfield.disp16 = 0;
5473 i.types[op].bitfield.disp32 = 0;
5474 i.types[op].bitfield.disp32s = 1;
5475 i.types[op].bitfield.disp64 = 0;
5476 i.flags[op] |= Operand_PCrel;
5477 if (! i.disp_operands)
5478 fake_zero_displacement = 1;
5480 else if (i.base_reg->reg_type.bitfield.reg16)
5482 switch (i.base_reg->reg_num)
5485 if (i.index_reg == 0)
5487 else /* (%bx,%si) -> 0, or (%bx,%di) -> 1 */
5488 i.rm.regmem = i.index_reg->reg_num - 6;
5492 if (i.index_reg == 0)
5495 if (operand_type_check (i.types[op], disp) == 0)
5497 /* fake (%bp) into 0(%bp) */
5498 i.types[op].bitfield.disp8 = 1;
5499 fake_zero_displacement = 1;
5502 else /* (%bp,%si) -> 2, or (%bp,%di) -> 3 */
5503 i.rm.regmem = i.index_reg->reg_num - 6 + 2;
5505 default: /* (%si) -> 4 or (%di) -> 5 */
5506 i.rm.regmem = i.base_reg->reg_num - 6 + 4;
5508 i.rm.mode = mode_from_disp_size (i.types[op]);
5510 else /* i.base_reg and 32/64 bit mode */
5512 if (flag_code == CODE_64BIT
5513 && operand_type_check (i.types[op], disp))
5515 i386_operand_type temp;
5516 operand_type_set (&temp, 0);
5517 temp.bitfield.disp8 = i.types[op].bitfield.disp8;
5519 if (i.prefix[ADDR_PREFIX] == 0)
5520 i.types[op].bitfield.disp32s = 1;
5522 i.types[op].bitfield.disp32 = 1;
5525 i.rm.regmem = i.base_reg->reg_num;
5526 if ((i.base_reg->reg_flags & RegRex) != 0)
5528 i.sib.base = i.base_reg->reg_num;
5529 /* x86-64 ignores REX prefix bit here to avoid decoder
5531 if ((i.base_reg->reg_num & 7) == EBP_REG_NUM)
5534 if (i.disp_operands == 0)
5536 fake_zero_displacement = 1;
5537 i.types[op].bitfield.disp8 = 1;
5540 else if (i.base_reg->reg_num == ESP_REG_NUM)
5544 i.sib.scale = i.log2_scale_factor;
5545 if (i.index_reg == 0)
5547 /* <disp>(%esp) becomes two byte modrm with no index
5548 register. We've already stored the code for esp
5549 in i.rm.regmem ie. ESCAPE_TO_TWO_BYTE_ADDRESSING.
5550 Any base register besides %esp will not use the
5551 extra modrm byte. */
5552 i.sib.index = NO_INDEX_REGISTER;
5556 if (i.index_reg->reg_num == RegEiz
5557 || i.index_reg->reg_num == RegRiz)
5558 i.sib.index = NO_INDEX_REGISTER;
5560 i.sib.index = i.index_reg->reg_num;
5561 i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
5562 if ((i.index_reg->reg_flags & RegRex) != 0)
5567 && (i.reloc[op] == BFD_RELOC_386_TLS_DESC_CALL
5568 || i.reloc[op] == BFD_RELOC_X86_64_TLSDESC_CALL))
5571 i.rm.mode = mode_from_disp_size (i.types[op]);
5574 if (fake_zero_displacement)
5576 /* Fakes a zero displacement assuming that i.types[op]
5577 holds the correct displacement size. */
5580 gas_assert (i.op[op].disps == 0);
5581 exp = &disp_expressions[i.disp_operands++];
5582 i.op[op].disps = exp;
5583 exp->X_op = O_constant;
5584 exp->X_add_number = 0;
5585 exp->X_add_symbol = (symbolS *) 0;
5586 exp->X_op_symbol = (symbolS *) 0;
5594 if (i.tm.opcode_modifier.vexsources == XOP2SOURCES)
5596 if (operand_type_check (i.types[0], imm))
5597 i.vex.register_specifier = NULL;
5600 /* VEX.vvvv encodes one of the sources when the first
5601 operand is not an immediate. */
5602 if (i.tm.opcode_modifier.vexw == VEXW0)
5603 i.vex.register_specifier = i.op[0].regs;
5605 i.vex.register_specifier = i.op[1].regs;
5608 /* Destination is a XMM register encoded in the ModRM.reg
5610 i.rm.reg = i.op[2].regs->reg_num;
5611 if ((i.op[2].regs->reg_flags & RegRex) != 0)
5614 /* ModRM.rm and VEX.B encodes the other source. */
5615 if (!i.mem_operands)
5619 if (i.tm.opcode_modifier.vexw == VEXW0)
5620 i.rm.regmem = i.op[1].regs->reg_num;
5622 i.rm.regmem = i.op[0].regs->reg_num;
5624 if ((i.op[1].regs->reg_flags & RegRex) != 0)
5628 else if (i.tm.opcode_modifier.vexvvvv == VEXLWP)
5630 i.vex.register_specifier = i.op[2].regs;
5631 if (!i.mem_operands)
5634 i.rm.regmem = i.op[1].regs->reg_num;
5635 if ((i.op[1].regs->reg_flags & RegRex) != 0)
5639 /* Fill in i.rm.reg or i.rm.regmem field with register operand
5640 (if any) based on i.tm.extension_opcode. Again, we must be
5641 careful to make sure that segment/control/debug/test/MMX
5642 registers are coded into the i.rm.reg field. */
5643 else if (i.reg_operands)
5646 unsigned int vex_reg = ~0;
5648 for (op = 0; op < i.operands; op++)
5649 if (i.types[op].bitfield.reg8
5650 || i.types[op].bitfield.reg16
5651 || i.types[op].bitfield.reg32
5652 || i.types[op].bitfield.reg64
5653 || i.types[op].bitfield.regmmx
5654 || i.types[op].bitfield.regxmm
5655 || i.types[op].bitfield.regymm
5656 || i.types[op].bitfield.sreg2
5657 || i.types[op].bitfield.sreg3
5658 || i.types[op].bitfield.control
5659 || i.types[op].bitfield.debug
5660 || i.types[op].bitfield.test)
5665 else if (i.tm.opcode_modifier.vexvvvv == VEXXDS)
5667 /* For instructions with VexNDS, the register-only
5668 source operand is encoded in VEX prefix. */
5669 gas_assert (mem != (unsigned int) ~0);
5674 gas_assert (op < i.operands);
5678 /* Check register-only source operand when two source
5679 operands are swapped. */
5680 if (!i.tm.operand_types[op].bitfield.baseindex
5681 && i.tm.operand_types[op + 1].bitfield.baseindex)
5685 gas_assert (mem == (vex_reg + 1)
5686 && op < i.operands);
5691 gas_assert (vex_reg < i.operands);
5695 else if (i.tm.opcode_modifier.vexvvvv == VEXNDD)
5697 /* For instructions with VexNDD, the register destination
5698 is encoded in VEX prefix. */
5699 if (i.mem_operands == 0)
5701 /* There is no memory operand. */
5702 gas_assert ((op + 2) == i.operands);
5707 /* There are only 2 operands. */
5708 gas_assert (op < 2 && i.operands == 2);
5713 gas_assert (op < i.operands);
5715 if (vex_reg != (unsigned int) ~0)
5717 i386_operand_type *type = &i.tm.operand_types[vex_reg];
5719 if (type->bitfield.reg32 != 1
5720 && type->bitfield.reg64 != 1
5721 && !operand_type_equal (type, ®xmm)
5722 && !operand_type_equal (type, ®ymm))
5725 i.vex.register_specifier = i.op[vex_reg].regs;
5728 /* Don't set OP operand twice. */
5731 /* If there is an extension opcode to put here, the
5732 register number must be put into the regmem field. */
5733 if (i.tm.extension_opcode != None)
5735 i.rm.regmem = i.op[op].regs->reg_num;
5736 if ((i.op[op].regs->reg_flags & RegRex) != 0)
5741 i.rm.reg = i.op[op].regs->reg_num;
5742 if ((i.op[op].regs->reg_flags & RegRex) != 0)
5747 /* Now, if no memory operand has set i.rm.mode = 0, 1, 2 we
5748 must set it to 3 to indicate this is a register operand
5749 in the regmem field. */
5750 if (!i.mem_operands)
5754 /* Fill in i.rm.reg field with extension opcode (if any). */
5755 if (i.tm.extension_opcode != None)
5756 i.rm.reg = i.tm.extension_opcode;
5762 output_branch (void)
5768 relax_substateT subtype;
5772 code16 = flag_code == CODE_16BIT ? CODE16 : 0;
5773 size = i.disp32_encoding ? BIG : SMALL;
5776 if (i.prefix[DATA_PREFIX] != 0)
5782 /* Pentium4 branch hints. */
5783 if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE /* not taken */
5784 || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE /* taken */)
5789 if (i.prefix[REX_PREFIX] != 0)
5795 if (i.prefixes != 0 && !intel_syntax)
5796 as_warn (_("skipping prefixes on this instruction"));
5798 /* It's always a symbol; End frag & setup for relax.
5799 Make sure there is enough room in this frag for the largest
5800 instruction we may generate in md_convert_frag. This is 2
5801 bytes for the opcode and room for the prefix and largest
5803 frag_grow (prefix + 2 + 4);
5804 /* Prefix and 1 opcode byte go in fr_fix. */
5805 p = frag_more (prefix + 1);
5806 if (i.prefix[DATA_PREFIX] != 0)
5807 *p++ = DATA_PREFIX_OPCODE;
5808 if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE
5809 || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE)
5810 *p++ = i.prefix[SEG_PREFIX];
5811 if (i.prefix[REX_PREFIX] != 0)
5812 *p++ = i.prefix[REX_PREFIX];
5813 *p = i.tm.base_opcode;
5815 if ((unsigned char) *p == JUMP_PC_RELATIVE)
5816 subtype = ENCODE_RELAX_STATE (UNCOND_JUMP, size);
5817 else if (cpu_arch_flags.bitfield.cpui386)
5818 subtype = ENCODE_RELAX_STATE (COND_JUMP, size);
5820 subtype = ENCODE_RELAX_STATE (COND_JUMP86, size);
5823 sym = i.op[0].disps->X_add_symbol;
5824 off = i.op[0].disps->X_add_number;
5826 if (i.op[0].disps->X_op != O_constant
5827 && i.op[0].disps->X_op != O_symbol)
5829 /* Handle complex expressions. */
5830 sym = make_expr_symbol (i.op[0].disps);
5834 /* 1 possible extra opcode + 4 byte displacement go in var part.
5835 Pass reloc in fr_var. */
5836 frag_var (rs_machine_dependent, 5, i.reloc[0], subtype, sym, off, p);
5846 if (i.tm.opcode_modifier.jumpbyte)
5848 /* This is a loop or jecxz type instruction. */
5850 if (i.prefix[ADDR_PREFIX] != 0)
5852 FRAG_APPEND_1_CHAR (ADDR_PREFIX_OPCODE);
5855 /* Pentium4 branch hints. */
5856 if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE /* not taken */
5857 || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE /* taken */)
5859 FRAG_APPEND_1_CHAR (i.prefix[SEG_PREFIX]);
5868 if (flag_code == CODE_16BIT)
5871 if (i.prefix[DATA_PREFIX] != 0)
5873 FRAG_APPEND_1_CHAR (DATA_PREFIX_OPCODE);
5883 if (i.prefix[REX_PREFIX] != 0)
5885 FRAG_APPEND_1_CHAR (i.prefix[REX_PREFIX]);
5889 if (i.prefixes != 0 && !intel_syntax)
5890 as_warn (_("skipping prefixes on this instruction"));
5892 p = frag_more (1 + size);
5893 *p++ = i.tm.base_opcode;
5895 fixP = fix_new_exp (frag_now, p - frag_now->fr_literal, size,
5896 i.op[0].disps, 1, reloc (size, 1, 1, i.reloc[0]));
5898 /* All jumps handled here are signed, but don't use a signed limit
5899 check for 32 and 16 bit jumps as we want to allow wrap around at
5900 4G and 64k respectively. */
5902 fixP->fx_signed = 1;
5906 output_interseg_jump (void)
5914 if (flag_code == CODE_16BIT)
5918 if (i.prefix[DATA_PREFIX] != 0)
5924 if (i.prefix[REX_PREFIX] != 0)
5934 if (i.prefixes != 0 && !intel_syntax)
5935 as_warn (_("skipping prefixes on this instruction"));
5937 /* 1 opcode; 2 segment; offset */
5938 p = frag_more (prefix + 1 + 2 + size);
5940 if (i.prefix[DATA_PREFIX] != 0)
5941 *p++ = DATA_PREFIX_OPCODE;
5943 if (i.prefix[REX_PREFIX] != 0)
5944 *p++ = i.prefix[REX_PREFIX];
5946 *p++ = i.tm.base_opcode;
5947 if (i.op[1].imms->X_op == O_constant)
5949 offsetT n = i.op[1].imms->X_add_number;
5952 && !fits_in_unsigned_word (n)
5953 && !fits_in_signed_word (n))
5955 as_bad (_("16-bit jump out of range"));
5958 md_number_to_chars (p, n, size);
5961 fix_new_exp (frag_now, p - frag_now->fr_literal, size,
5962 i.op[1].imms, 0, reloc (size, 0, 0, i.reloc[1]));
5963 if (i.op[0].imms->X_op != O_constant)
5964 as_bad (_("can't handle non absolute segment in `%s'"),
5966 md_number_to_chars (p + size, (valueT) i.op[0].imms->X_add_number, 2);
5972 fragS *insn_start_frag;
5973 offsetT insn_start_off;
5975 /* Tie dwarf2 debug info to the address at the start of the insn.
5976 We can't do this after the insn has been output as the current
5977 frag may have been closed off. eg. by frag_var. */
5978 dwarf2_emit_insn (0);
5980 insn_start_frag = frag_now;
5981 insn_start_off = frag_now_fix ();
5984 if (i.tm.opcode_modifier.jump)
5986 else if (i.tm.opcode_modifier.jumpbyte
5987 || i.tm.opcode_modifier.jumpdword)
5989 else if (i.tm.opcode_modifier.jumpintersegment)
5990 output_interseg_jump ();
5993 /* Output normal instructions here. */
5997 unsigned int prefix;
5999 /* Since the VEX prefix contains the implicit prefix, we don't
6000 need the explicit prefix. */
6001 if (!i.tm.opcode_modifier.vex)
6003 switch (i.tm.opcode_length)
6006 if (i.tm.base_opcode & 0xff000000)
6008 prefix = (i.tm.base_opcode >> 24) & 0xff;
6013 if ((i.tm.base_opcode & 0xff0000) != 0)
6015 prefix = (i.tm.base_opcode >> 16) & 0xff;
6016 if (i.tm.cpu_flags.bitfield.cpupadlock)
6019 if (prefix != REPE_PREFIX_OPCODE
6020 || (i.prefix[REP_PREFIX]
6021 != REPE_PREFIX_OPCODE))
6022 add_prefix (prefix);
6025 add_prefix (prefix);
6034 /* The prefix bytes. */
6035 for (j = ARRAY_SIZE (i.prefix), q = i.prefix; j > 0; j--, q++)
6037 FRAG_APPEND_1_CHAR (*q);
6040 if (i.tm.opcode_modifier.vex)
6042 for (j = 0, q = i.prefix; j < ARRAY_SIZE (i.prefix); j++, q++)
6047 /* REX byte is encoded in VEX prefix. */
6051 FRAG_APPEND_1_CHAR (*q);
6054 /* There should be no other prefixes for instructions
6059 /* Now the VEX prefix. */
6060 p = frag_more (i.vex.length);
6061 for (j = 0; j < i.vex.length; j++)
6062 p[j] = i.vex.bytes[j];
6065 /* Now the opcode; be careful about word order here! */
6066 if (i.tm.opcode_length == 1)
6068 FRAG_APPEND_1_CHAR (i.tm.base_opcode);
6072 switch (i.tm.opcode_length)
6076 *p++ = (i.tm.base_opcode >> 16) & 0xff;
6086 /* Put out high byte first: can't use md_number_to_chars! */
6087 *p++ = (i.tm.base_opcode >> 8) & 0xff;
6088 *p = i.tm.base_opcode & 0xff;
6091 /* Now the modrm byte and sib byte (if present). */
6092 if (i.tm.opcode_modifier.modrm)
6094 FRAG_APPEND_1_CHAR ((i.rm.regmem << 0
6097 /* If i.rm.regmem == ESP (4)
6098 && i.rm.mode != (Register mode)
6100 ==> need second modrm byte. */
6101 if (i.rm.regmem == ESCAPE_TO_TWO_BYTE_ADDRESSING
6103 && !(i.base_reg && i.base_reg->reg_type.bitfield.reg16))
6104 FRAG_APPEND_1_CHAR ((i.sib.base << 0
6106 | i.sib.scale << 6));
6109 if (i.disp_operands)
6110 output_disp (insn_start_frag, insn_start_off);
6113 output_imm (insn_start_frag, insn_start_off);
6119 pi ("" /*line*/, &i);
6121 #endif /* DEBUG386 */
6124 /* Return the size of the displacement operand N. */
6127 disp_size (unsigned int n)
6130 if (i.types[n].bitfield.disp64)
6132 else if (i.types[n].bitfield.disp8)
6134 else if (i.types[n].bitfield.disp16)
6139 /* Return the size of the immediate operand N. */
6142 imm_size (unsigned int n)
6145 if (i.types[n].bitfield.imm64)
6147 else if (i.types[n].bitfield.imm8 || i.types[n].bitfield.imm8s)
6149 else if (i.types[n].bitfield.imm16)
6155 output_disp (fragS *insn_start_frag, offsetT insn_start_off)
6160 for (n = 0; n < i.operands; n++)
6162 if (operand_type_check (i.types[n], disp))
6164 if (i.op[n].disps->X_op == O_constant)
6166 int size = disp_size (n);
6169 val = offset_in_range (i.op[n].disps->X_add_number,
6171 p = frag_more (size);
6172 md_number_to_chars (p, val, size);
6176 enum bfd_reloc_code_real reloc_type;
6177 int size = disp_size (n);
6178 int sign = i.types[n].bitfield.disp32s;
6179 int pcrel = (i.flags[n] & Operand_PCrel) != 0;
6181 /* We can't have 8 bit displacement here. */
6182 gas_assert (!i.types[n].bitfield.disp8);
6184 /* The PC relative address is computed relative
6185 to the instruction boundary, so in case immediate
6186 fields follows, we need to adjust the value. */
6187 if (pcrel && i.imm_operands)
6192 for (n1 = 0; n1 < i.operands; n1++)
6193 if (operand_type_check (i.types[n1], imm))
6195 /* Only one immediate is allowed for PC
6196 relative address. */
6197 gas_assert (sz == 0);
6199 i.op[n].disps->X_add_number -= sz;
6201 /* We should find the immediate. */
6202 gas_assert (sz != 0);
6205 p = frag_more (size);
6206 reloc_type = reloc (size, pcrel, sign, i.reloc[n]);
6208 && GOT_symbol == i.op[n].disps->X_add_symbol
6209 && (((reloc_type == BFD_RELOC_32
6210 || reloc_type == BFD_RELOC_X86_64_32S
6211 || (reloc_type == BFD_RELOC_64
6213 && (i.op[n].disps->X_op == O_symbol
6214 || (i.op[n].disps->X_op == O_add
6215 && ((symbol_get_value_expression
6216 (i.op[n].disps->X_op_symbol)->X_op)
6218 || reloc_type == BFD_RELOC_32_PCREL))
6222 if (insn_start_frag == frag_now)
6223 add = (p - frag_now->fr_literal) - insn_start_off;
6228 add = insn_start_frag->fr_fix - insn_start_off;
6229 for (fr = insn_start_frag->fr_next;
6230 fr && fr != frag_now; fr = fr->fr_next)
6232 add += p - frag_now->fr_literal;
6237 reloc_type = BFD_RELOC_386_GOTPC;
6238 i.op[n].imms->X_add_number += add;
6240 else if (reloc_type == BFD_RELOC_64)
6241 reloc_type = BFD_RELOC_X86_64_GOTPC64;
6243 /* Don't do the adjustment for x86-64, as there
6244 the pcrel addressing is relative to the _next_
6245 insn, and that is taken care of in other code. */
6246 reloc_type = BFD_RELOC_X86_64_GOTPC32;
6248 fix_new_exp (frag_now, p - frag_now->fr_literal, size,
6249 i.op[n].disps, pcrel, reloc_type);
6256 output_imm (fragS *insn_start_frag, offsetT insn_start_off)
6261 for (n = 0; n < i.operands; n++)
6263 if (operand_type_check (i.types[n], imm))
6265 if (i.op[n].imms->X_op == O_constant)
6267 int size = imm_size (n);
6270 val = offset_in_range (i.op[n].imms->X_add_number,
6272 p = frag_more (size);
6273 md_number_to_chars (p, val, size);
6277 /* Not absolute_section.
6278 Need a 32-bit fixup (don't support 8bit
6279 non-absolute imms). Try to support other
6281 enum bfd_reloc_code_real reloc_type;
6282 int size = imm_size (n);
6285 if (i.types[n].bitfield.imm32s
6286 && (i.suffix == QWORD_MNEM_SUFFIX
6287 || (!i.suffix && i.tm.opcode_modifier.no_lsuf)))
6292 p = frag_more (size);
6293 reloc_type = reloc (size, 0, sign, i.reloc[n]);
6295 /* This is tough to explain. We end up with this one if we
6296 * have operands that look like
6297 * "_GLOBAL_OFFSET_TABLE_+[.-.L284]". The goal here is to
6298 * obtain the absolute address of the GOT, and it is strongly
6299 * preferable from a performance point of view to avoid using
6300 * a runtime relocation for this. The actual sequence of
6301 * instructions often look something like:
6306 * addl $_GLOBAL_OFFSET_TABLE_+[.-.L66],%ebx
6308 * The call and pop essentially return the absolute address
6309 * of the label .L66 and store it in %ebx. The linker itself
6310 * will ultimately change the first operand of the addl so
6311 * that %ebx points to the GOT, but to keep things simple, the
6312 * .o file must have this operand set so that it generates not
6313 * the absolute address of .L66, but the absolute address of
6314 * itself. This allows the linker itself simply treat a GOTPC
6315 * relocation as asking for a pcrel offset to the GOT to be
6316 * added in, and the addend of the relocation is stored in the
6317 * operand field for the instruction itself.
6319 * Our job here is to fix the operand so that it would add
6320 * the correct offset so that %ebx would point to itself. The
6321 * thing that is tricky is that .-.L66 will point to the
6322 * beginning of the instruction, so we need to further modify
6323 * the operand so that it will point to itself. There are
6324 * other cases where you have something like:
6326 * .long $_GLOBAL_OFFSET_TABLE_+[.-.L66]
6328 * and here no correction would be required. Internally in
6329 * the assembler we treat operands of this form as not being
6330 * pcrel since the '.' is explicitly mentioned, and I wonder
6331 * whether it would simplify matters to do it this way. Who
6332 * knows. In earlier versions of the PIC patches, the
6333 * pcrel_adjust field was used to store the correction, but
6334 * since the expression is not pcrel, I felt it would be
6335 * confusing to do it this way. */
6337 if ((reloc_type == BFD_RELOC_32
6338 || reloc_type == BFD_RELOC_X86_64_32S
6339 || reloc_type == BFD_RELOC_64)
6341 && GOT_symbol == i.op[n].imms->X_add_symbol
6342 && (i.op[n].imms->X_op == O_symbol
6343 || (i.op[n].imms->X_op == O_add
6344 && ((symbol_get_value_expression
6345 (i.op[n].imms->X_op_symbol)->X_op)
6350 if (insn_start_frag == frag_now)
6351 add = (p - frag_now->fr_literal) - insn_start_off;
6356 add = insn_start_frag->fr_fix - insn_start_off;
6357 for (fr = insn_start_frag->fr_next;
6358 fr && fr != frag_now; fr = fr->fr_next)
6360 add += p - frag_now->fr_literal;
6364 reloc_type = BFD_RELOC_386_GOTPC;
6366 reloc_type = BFD_RELOC_X86_64_GOTPC32;
6368 reloc_type = BFD_RELOC_X86_64_GOTPC64;
6369 i.op[n].imms->X_add_number += add;
6371 fix_new_exp (frag_now, p - frag_now->fr_literal, size,
6372 i.op[n].imms, 0, reloc_type);
6378 /* x86_cons_fix_new is called via the expression parsing code when a
6379 reloc is needed. We use this hook to get the correct .got reloc. */
6380 static enum bfd_reloc_code_real got_reloc = NO_RELOC;
6381 static int cons_sign = -1;
6384 x86_cons_fix_new (fragS *frag, unsigned int off, unsigned int len,
6387 enum bfd_reloc_code_real r = reloc (len, 0, cons_sign, got_reloc);
6389 got_reloc = NO_RELOC;
6392 if (exp->X_op == O_secrel)
6394 exp->X_op = O_symbol;
6395 r = BFD_RELOC_32_SECREL;
6399 fix_new_exp (frag, off, len, exp, 0, r);
6402 #if (!defined (OBJ_ELF) && !defined (OBJ_MAYBE_ELF)) || defined (LEX_AT)
6403 # define lex_got(reloc, adjust, types) NULL
6405 /* Parse operands of the form
6406 <symbol>@GOTOFF+<nnn>
6407 and similar .plt or .got references.
6409 If we find one, set up the correct relocation in RELOC and copy the
6410 input string, minus the `@GOTOFF' into a malloc'd buffer for
6411 parsing by the calling routine. Return this buffer, and if ADJUST
6412 is non-null set it to the length of the string we removed from the
6413 input line. Otherwise return NULL. */
6415 lex_got (enum bfd_reloc_code_real *rel,
6417 i386_operand_type *types)
6419 /* Some of the relocations depend on the size of what field is to
6420 be relocated. But in our callers i386_immediate and i386_displacement
6421 we don't yet know the operand size (this will be set by insn
6422 matching). Hence we record the word32 relocation here,
6423 and adjust the reloc according to the real size in reloc(). */
6424 static const struct {
6427 const enum bfd_reloc_code_real rel[2];
6428 const i386_operand_type types64;
6430 { STRING_COMMA_LEN ("PLTOFF"), { _dummy_first_bfd_reloc_code_real,
6431 BFD_RELOC_X86_64_PLTOFF64 },
6432 OPERAND_TYPE_IMM64 },
6433 { STRING_COMMA_LEN ("PLT"), { BFD_RELOC_386_PLT32,
6434 BFD_RELOC_X86_64_PLT32 },
6435 OPERAND_TYPE_IMM32_32S_DISP32 },
6436 { STRING_COMMA_LEN ("GOTPLT"), { _dummy_first_bfd_reloc_code_real,
6437 BFD_RELOC_X86_64_GOTPLT64 },
6438 OPERAND_TYPE_IMM64_DISP64 },
6439 { STRING_COMMA_LEN ("GOTOFF"), { BFD_RELOC_386_GOTOFF,
6440 BFD_RELOC_X86_64_GOTOFF64 },
6441 OPERAND_TYPE_IMM64_DISP64 },
6442 { STRING_COMMA_LEN ("GOTPCREL"), { _dummy_first_bfd_reloc_code_real,
6443 BFD_RELOC_X86_64_GOTPCREL },
6444 OPERAND_TYPE_IMM32_32S_DISP32 },
6445 { STRING_COMMA_LEN ("TLSGD"), { BFD_RELOC_386_TLS_GD,
6446 BFD_RELOC_X86_64_TLSGD },
6447 OPERAND_TYPE_IMM32_32S_DISP32 },
6448 { STRING_COMMA_LEN ("TLSLDM"), { BFD_RELOC_386_TLS_LDM,
6449 _dummy_first_bfd_reloc_code_real },
6450 OPERAND_TYPE_NONE },
6451 { STRING_COMMA_LEN ("TLSLD"), { _dummy_first_bfd_reloc_code_real,
6452 BFD_RELOC_X86_64_TLSLD },
6453 OPERAND_TYPE_IMM32_32S_DISP32 },
6454 { STRING_COMMA_LEN ("GOTTPOFF"), { BFD_RELOC_386_TLS_IE_32,
6455 BFD_RELOC_X86_64_GOTTPOFF },
6456 OPERAND_TYPE_IMM32_32S_DISP32 },
6457 { STRING_COMMA_LEN ("TPOFF"), { BFD_RELOC_386_TLS_LE_32,
6458 BFD_RELOC_X86_64_TPOFF32 },
6459 OPERAND_TYPE_IMM32_32S_64_DISP32_64 },
6460 { STRING_COMMA_LEN ("NTPOFF"), { BFD_RELOC_386_TLS_LE,
6461 _dummy_first_bfd_reloc_code_real },
6462 OPERAND_TYPE_NONE },
6463 { STRING_COMMA_LEN ("DTPOFF"), { BFD_RELOC_386_TLS_LDO_32,
6464 BFD_RELOC_X86_64_DTPOFF32 },
6465 OPERAND_TYPE_IMM32_32S_64_DISP32_64 },
6466 { STRING_COMMA_LEN ("GOTNTPOFF"),{ BFD_RELOC_386_TLS_GOTIE,
6467 _dummy_first_bfd_reloc_code_real },
6468 OPERAND_TYPE_NONE },
6469 { STRING_COMMA_LEN ("INDNTPOFF"),{ BFD_RELOC_386_TLS_IE,
6470 _dummy_first_bfd_reloc_code_real },
6471 OPERAND_TYPE_NONE },
6472 { STRING_COMMA_LEN ("GOT"), { BFD_RELOC_386_GOT32,
6473 BFD_RELOC_X86_64_GOT32 },
6474 OPERAND_TYPE_IMM32_32S_64_DISP32 },
6475 { STRING_COMMA_LEN ("TLSDESC"), { BFD_RELOC_386_TLS_GOTDESC,
6476 BFD_RELOC_X86_64_GOTPC32_TLSDESC },
6477 OPERAND_TYPE_IMM32_32S_DISP32 },
6478 { STRING_COMMA_LEN ("TLSCALL"), { BFD_RELOC_386_TLS_DESC_CALL,
6479 BFD_RELOC_X86_64_TLSDESC_CALL },
6480 OPERAND_TYPE_IMM32_32S_DISP32 },
6488 for (cp = input_line_pointer; *cp != '@'; cp++)
6489 if (is_end_of_line[(unsigned char) *cp] || *cp == ',')
6492 for (j = 0; j < ARRAY_SIZE (gotrel); j++)
6494 int len = gotrel[j].len;
6495 if (strncasecmp (cp + 1, gotrel[j].str, len) == 0)
6497 if (gotrel[j].rel[object_64bit] != 0)
6500 char *tmpbuf, *past_reloc;
6502 *rel = gotrel[j].rel[object_64bit];
6508 if (flag_code != CODE_64BIT)
6510 types->bitfield.imm32 = 1;
6511 types->bitfield.disp32 = 1;
6514 *types = gotrel[j].types64;
6517 if (GOT_symbol == NULL)
6518 GOT_symbol = symbol_find_or_make (GLOBAL_OFFSET_TABLE_NAME);
6520 /* The length of the first part of our input line. */
6521 first = cp - input_line_pointer;
6523 /* The second part goes from after the reloc token until
6524 (and including) an end_of_line char or comma. */
6525 past_reloc = cp + 1 + len;
6527 while (!is_end_of_line[(unsigned char) *cp] && *cp != ',')
6529 second = cp + 1 - past_reloc;
6531 /* Allocate and copy string. The trailing NUL shouldn't
6532 be necessary, but be safe. */
6533 tmpbuf = (char *) xmalloc (first + second + 2);
6534 memcpy (tmpbuf, input_line_pointer, first);
6535 if (second != 0 && *past_reloc != ' ')
6536 /* Replace the relocation token with ' ', so that
6537 errors like foo@GOTOFF1 will be detected. */
6538 tmpbuf[first++] = ' ';
6539 memcpy (tmpbuf + first, past_reloc, second);
6540 tmpbuf[first + second] = '\0';
6544 as_bad (_("@%s reloc is not supported with %d-bit output format"),
6545 gotrel[j].str, 1 << (5 + object_64bit));
6550 /* Might be a symbol version string. Don't as_bad here. */
6555 x86_cons (expressionS *exp, int size)
6557 intel_syntax = -intel_syntax;
6560 if (size == 4 || (object_64bit && size == 8))
6562 /* Handle @GOTOFF and the like in an expression. */
6564 char *gotfree_input_line;
6567 save = input_line_pointer;
6568 gotfree_input_line = lex_got (&got_reloc, &adjust, NULL);
6569 if (gotfree_input_line)
6570 input_line_pointer = gotfree_input_line;
6574 if (gotfree_input_line)
6576 /* expression () has merrily parsed up to the end of line,
6577 or a comma - in the wrong buffer. Transfer how far
6578 input_line_pointer has moved to the right buffer. */
6579 input_line_pointer = (save
6580 + (input_line_pointer - gotfree_input_line)
6582 free (gotfree_input_line);
6583 if (exp->X_op == O_constant
6584 || exp->X_op == O_absent
6585 || exp->X_op == O_illegal
6586 || exp->X_op == O_register
6587 || exp->X_op == O_big)
6589 char c = *input_line_pointer;
6590 *input_line_pointer = 0;
6591 as_bad (_("missing or invalid expression `%s'"), save);
6592 *input_line_pointer = c;
6599 intel_syntax = -intel_syntax;
6602 i386_intel_simplify (exp);
6607 signed_cons (int size)
6609 if (flag_code == CODE_64BIT)
6617 pe_directive_secrel (dummy)
6618 int dummy ATTRIBUTE_UNUSED;
6625 if (exp.X_op == O_symbol)
6626 exp.X_op = O_secrel;
6628 emit_expr (&exp, 4);
6630 while (*input_line_pointer++ == ',');
6632 input_line_pointer--;
6633 demand_empty_rest_of_line ();
6638 i386_immediate (char *imm_start)
6640 char *save_input_line_pointer;
6641 char *gotfree_input_line;
6644 i386_operand_type types;
6646 operand_type_set (&types, ~0);
6648 if (i.imm_operands == MAX_IMMEDIATE_OPERANDS)
6650 as_bad (_("at most %d immediate operands are allowed"),
6651 MAX_IMMEDIATE_OPERANDS);
6655 exp = &im_expressions[i.imm_operands++];
6656 i.op[this_operand].imms = exp;
6658 if (is_space_char (*imm_start))
6661 save_input_line_pointer = input_line_pointer;
6662 input_line_pointer = imm_start;
6664 gotfree_input_line = lex_got (&i.reloc[this_operand], NULL, &types);
6665 if (gotfree_input_line)
6666 input_line_pointer = gotfree_input_line;
6668 exp_seg = expression (exp);
6671 if (*input_line_pointer)
6672 as_bad (_("junk `%s' after expression"), input_line_pointer);
6674 input_line_pointer = save_input_line_pointer;
6675 if (gotfree_input_line)
6677 free (gotfree_input_line);
6679 if (exp->X_op == O_constant || exp->X_op == O_register)
6680 exp->X_op = O_illegal;
6683 return i386_finalize_immediate (exp_seg, exp, types, imm_start);
6687 i386_finalize_immediate (segT exp_seg ATTRIBUTE_UNUSED, expressionS *exp,
6688 i386_operand_type types, const char *imm_start)
6690 if (exp->X_op == O_absent || exp->X_op == O_illegal || exp->X_op == O_big)
6693 as_bad (_("missing or invalid immediate expression `%s'"),
6697 else if (exp->X_op == O_constant)
6699 /* Size it properly later. */
6700 i.types[this_operand].bitfield.imm64 = 1;
6701 /* If not 64bit, sign extend val. */
6702 if (flag_code != CODE_64BIT
6703 && (exp->X_add_number & ~(((addressT) 2 << 31) - 1)) == 0)
6705 = (exp->X_add_number ^ ((addressT) 1 << 31)) - ((addressT) 1 << 31);
6707 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
6708 else if (OUTPUT_FLAVOR == bfd_target_aout_flavour
6709 && exp_seg != absolute_section
6710 && exp_seg != text_section
6711 && exp_seg != data_section
6712 && exp_seg != bss_section
6713 && exp_seg != undefined_section
6714 && !bfd_is_com_section (exp_seg))
6716 as_bad (_("unimplemented segment %s in operand"), exp_seg->name);
6720 else if (!intel_syntax && exp->X_op == O_register)
6723 as_bad (_("illegal immediate register operand %s"), imm_start);
6728 /* This is an address. The size of the address will be
6729 determined later, depending on destination register,
6730 suffix, or the default for the section. */
6731 i.types[this_operand].bitfield.imm8 = 1;
6732 i.types[this_operand].bitfield.imm16 = 1;
6733 i.types[this_operand].bitfield.imm32 = 1;
6734 i.types[this_operand].bitfield.imm32s = 1;
6735 i.types[this_operand].bitfield.imm64 = 1;
6736 i.types[this_operand] = operand_type_and (i.types[this_operand],
6744 i386_scale (char *scale)
6747 char *save = input_line_pointer;
6749 input_line_pointer = scale;
6750 val = get_absolute_expression ();
6755 i.log2_scale_factor = 0;
6758 i.log2_scale_factor = 1;
6761 i.log2_scale_factor = 2;
6764 i.log2_scale_factor = 3;
6768 char sep = *input_line_pointer;
6770 *input_line_pointer = '\0';
6771 as_bad (_("expecting scale factor of 1, 2, 4, or 8: got `%s'"),
6773 *input_line_pointer = sep;
6774 input_line_pointer = save;
6778 if (i.log2_scale_factor != 0 && i.index_reg == 0)
6780 as_warn (_("scale factor of %d without an index register"),
6781 1 << i.log2_scale_factor);
6782 i.log2_scale_factor = 0;
6784 scale = input_line_pointer;
6785 input_line_pointer = save;
6790 i386_displacement (char *disp_start, char *disp_end)
6794 char *save_input_line_pointer;
6795 char *gotfree_input_line;
6797 i386_operand_type bigdisp, types = anydisp;
6800 if (i.disp_operands == MAX_MEMORY_OPERANDS)
6802 as_bad (_("at most %d displacement operands are allowed"),
6803 MAX_MEMORY_OPERANDS);
6807 operand_type_set (&bigdisp, 0);
6808 if ((i.types[this_operand].bitfield.jumpabsolute)
6809 || (!current_templates->start->opcode_modifier.jump
6810 && !current_templates->start->opcode_modifier.jumpdword))
6812 bigdisp.bitfield.disp32 = 1;
6813 override = (i.prefix[ADDR_PREFIX] != 0);
6814 if (flag_code == CODE_64BIT)
6818 bigdisp.bitfield.disp32s = 1;
6819 bigdisp.bitfield.disp64 = 1;
6822 else if ((flag_code == CODE_16BIT) ^ override)
6824 bigdisp.bitfield.disp32 = 0;
6825 bigdisp.bitfield.disp16 = 1;
6830 /* For PC-relative branches, the width of the displacement
6831 is dependent upon data size, not address size. */
6832 override = (i.prefix[DATA_PREFIX] != 0);
6833 if (flag_code == CODE_64BIT)
6835 if (override || i.suffix == WORD_MNEM_SUFFIX)
6836 bigdisp.bitfield.disp16 = 1;
6839 bigdisp.bitfield.disp32 = 1;
6840 bigdisp.bitfield.disp32s = 1;
6846 override = (i.suffix == (flag_code != CODE_16BIT
6848 : LONG_MNEM_SUFFIX));
6849 bigdisp.bitfield.disp32 = 1;
6850 if ((flag_code == CODE_16BIT) ^ override)
6852 bigdisp.bitfield.disp32 = 0;
6853 bigdisp.bitfield.disp16 = 1;
6857 i.types[this_operand] = operand_type_or (i.types[this_operand],
6860 exp = &disp_expressions[i.disp_operands];
6861 i.op[this_operand].disps = exp;
6863 save_input_line_pointer = input_line_pointer;
6864 input_line_pointer = disp_start;
6865 END_STRING_AND_SAVE (disp_end);
6867 #ifndef GCC_ASM_O_HACK
6868 #define GCC_ASM_O_HACK 0
6871 END_STRING_AND_SAVE (disp_end + 1);
6872 if (i.types[this_operand].bitfield.baseIndex
6873 && displacement_string_end[-1] == '+')
6875 /* This hack is to avoid a warning when using the "o"
6876 constraint within gcc asm statements.
6879 #define _set_tssldt_desc(n,addr,limit,type) \
6880 __asm__ __volatile__ ( \
6882 "movw %w1,2+%0\n\t" \
6884 "movb %b1,4+%0\n\t" \
6885 "movb %4,5+%0\n\t" \
6886 "movb $0,6+%0\n\t" \
6887 "movb %h1,7+%0\n\t" \
6889 : "=o"(*(n)) : "q" (addr), "ri"(limit), "i"(type))
6891 This works great except that the output assembler ends
6892 up looking a bit weird if it turns out that there is
6893 no offset. You end up producing code that looks like:
6906 So here we provide the missing zero. */
6908 *displacement_string_end = '0';
6911 gotfree_input_line = lex_got (&i.reloc[this_operand], NULL, &types);
6912 if (gotfree_input_line)
6913 input_line_pointer = gotfree_input_line;
6915 exp_seg = expression (exp);
6918 if (*input_line_pointer)
6919 as_bad (_("junk `%s' after expression"), input_line_pointer);
6921 RESTORE_END_STRING (disp_end + 1);
6923 input_line_pointer = save_input_line_pointer;
6924 if (gotfree_input_line)
6926 free (gotfree_input_line);
6928 if (exp->X_op == O_constant || exp->X_op == O_register)
6929 exp->X_op = O_illegal;
6932 ret = i386_finalize_displacement (exp_seg, exp, types, disp_start);
6934 RESTORE_END_STRING (disp_end);
6940 i386_finalize_displacement (segT exp_seg ATTRIBUTE_UNUSED, expressionS *exp,
6941 i386_operand_type types, const char *disp_start)
6943 i386_operand_type bigdisp;
6946 /* We do this to make sure that the section symbol is in
6947 the symbol table. We will ultimately change the relocation
6948 to be relative to the beginning of the section. */
6949 if (i.reloc[this_operand] == BFD_RELOC_386_GOTOFF
6950 || i.reloc[this_operand] == BFD_RELOC_X86_64_GOTPCREL
6951 || i.reloc[this_operand] == BFD_RELOC_X86_64_GOTOFF64)
6953 if (exp->X_op != O_symbol)
6956 if (S_IS_LOCAL (exp->X_add_symbol)
6957 && S_GET_SEGMENT (exp->X_add_symbol) != undefined_section
6958 && S_GET_SEGMENT (exp->X_add_symbol) != expr_section)
6959 section_symbol (S_GET_SEGMENT (exp->X_add_symbol));
6960 exp->X_op = O_subtract;
6961 exp->X_op_symbol = GOT_symbol;
6962 if (i.reloc[this_operand] == BFD_RELOC_X86_64_GOTPCREL)
6963 i.reloc[this_operand] = BFD_RELOC_32_PCREL;
6964 else if (i.reloc[this_operand] == BFD_RELOC_X86_64_GOTOFF64)
6965 i.reloc[this_operand] = BFD_RELOC_64;
6967 i.reloc[this_operand] = BFD_RELOC_32;
6970 else if (exp->X_op == O_absent
6971 || exp->X_op == O_illegal
6972 || exp->X_op == O_big)
6975 as_bad (_("missing or invalid displacement expression `%s'"),
6980 else if (flag_code == CODE_64BIT
6981 && !i.prefix[ADDR_PREFIX]
6982 && exp->X_op == O_constant)
6984 /* Since displacement is signed extended to 64bit, don't allow
6985 disp32 and turn off disp32s if they are out of range. */
6986 i.types[this_operand].bitfield.disp32 = 0;
6987 if (!fits_in_signed_long (exp->X_add_number))
6989 i.types[this_operand].bitfield.disp32s = 0;
6990 if (i.types[this_operand].bitfield.baseindex)
6992 as_bad (_("0x%lx out range of signed 32bit displacement"),
6993 (long) exp->X_add_number);
6999 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
7000 else if (exp->X_op != O_constant
7001 && OUTPUT_FLAVOR == bfd_target_aout_flavour
7002 && exp_seg != absolute_section
7003 && exp_seg != text_section
7004 && exp_seg != data_section
7005 && exp_seg != bss_section
7006 && exp_seg != undefined_section
7007 && !bfd_is_com_section (exp_seg))
7009 as_bad (_("unimplemented segment %s in operand"), exp_seg->name);
7014 /* Check if this is a displacement only operand. */
7015 bigdisp = i.types[this_operand];
7016 bigdisp.bitfield.disp8 = 0;
7017 bigdisp.bitfield.disp16 = 0;
7018 bigdisp.bitfield.disp32 = 0;
7019 bigdisp.bitfield.disp32s = 0;
7020 bigdisp.bitfield.disp64 = 0;
7021 if (operand_type_all_zero (&bigdisp))
7022 i.types[this_operand] = operand_type_and (i.types[this_operand],
7028 /* Make sure the memory operand we've been dealt is valid.
7029 Return 1 on success, 0 on a failure. */
7032 i386_index_check (const char *operand_string)
7035 const char *kind = "base/index";
7036 #if INFER_ADDR_PREFIX
7042 if (current_templates->start->opcode_modifier.isstring
7043 && !current_templates->start->opcode_modifier.immext
7044 && (current_templates->end[-1].opcode_modifier.isstring
7047 /* Memory operands of string insns are special in that they only allow
7048 a single register (rDI, rSI, or rBX) as their memory address. */
7049 unsigned int expected;
7051 kind = "string address";
7053 if (current_templates->start->opcode_modifier.w)
7055 i386_operand_type type = current_templates->end[-1].operand_types[0];
7057 if (!type.bitfield.baseindex
7058 || ((!i.mem_operands != !intel_syntax)
7059 && current_templates->end[-1].operand_types[1]
7060 .bitfield.baseindex))
7061 type = current_templates->end[-1].operand_types[1];
7062 expected = type.bitfield.esseg ? 7 /* rDI */ : 6 /* rSI */;
7065 expected = 3 /* rBX */;
7067 if (!i.base_reg || i.index_reg
7068 || operand_type_check (i.types[this_operand], disp))
7070 else if (!(flag_code == CODE_64BIT
7071 ? i.prefix[ADDR_PREFIX]
7072 ? i.base_reg->reg_type.bitfield.reg32
7073 : i.base_reg->reg_type.bitfield.reg64
7074 : (flag_code == CODE_16BIT) ^ !i.prefix[ADDR_PREFIX]
7075 ? i.base_reg->reg_type.bitfield.reg32
7076 : i.base_reg->reg_type.bitfield.reg16))
7078 else if (i.base_reg->reg_num != expected)
7085 for (j = 0; j < i386_regtab_size; ++j)
7086 if ((flag_code == CODE_64BIT
7087 ? i.prefix[ADDR_PREFIX]
7088 ? i386_regtab[j].reg_type.bitfield.reg32
7089 : i386_regtab[j].reg_type.bitfield.reg64
7090 : (flag_code == CODE_16BIT) ^ !i.prefix[ADDR_PREFIX]
7091 ? i386_regtab[j].reg_type.bitfield.reg32
7092 : i386_regtab[j].reg_type.bitfield.reg16)
7093 && i386_regtab[j].reg_num == expected)
7095 gas_assert (j < i386_regtab_size);
7096 as_warn (_("`%s' is not valid here (expected `%c%s%s%c')"),
7098 intel_syntax ? '[' : '(',
7100 i386_regtab[j].reg_name,
7101 intel_syntax ? ']' : ')');
7105 else if (flag_code == CODE_64BIT)
7108 && ((i.prefix[ADDR_PREFIX] == 0
7109 && !i.base_reg->reg_type.bitfield.reg64)
7110 || (i.prefix[ADDR_PREFIX]
7111 && !i.base_reg->reg_type.bitfield.reg32))
7113 || i.base_reg->reg_num !=
7114 (i.prefix[ADDR_PREFIX] == 0 ? RegRip : RegEip)))
7116 && (!i.index_reg->reg_type.bitfield.baseindex
7117 || (i.prefix[ADDR_PREFIX] == 0
7118 && i.index_reg->reg_num != RegRiz
7119 && !i.index_reg->reg_type.bitfield.reg64
7121 || (i.prefix[ADDR_PREFIX]
7122 && i.index_reg->reg_num != RegEiz
7123 && !i.index_reg->reg_type.bitfield.reg32))))
7128 if ((flag_code == CODE_16BIT) ^ (i.prefix[ADDR_PREFIX] != 0))
7132 && (!i.base_reg->reg_type.bitfield.reg16
7133 || !i.base_reg->reg_type.bitfield.baseindex))
7135 && (!i.index_reg->reg_type.bitfield.reg16
7136 || !i.index_reg->reg_type.bitfield.baseindex
7138 && i.base_reg->reg_num < 6
7139 && i.index_reg->reg_num >= 6
7140 && i.log2_scale_factor == 0))))
7147 && !i.base_reg->reg_type.bitfield.reg32)
7149 && ((!i.index_reg->reg_type.bitfield.reg32
7150 && i.index_reg->reg_num != RegEiz)
7151 || !i.index_reg->reg_type.bitfield.baseindex)))
7157 #if INFER_ADDR_PREFIX
7158 if (!i.mem_operands && !i.prefix[ADDR_PREFIX])
7160 i.prefix[ADDR_PREFIX] = ADDR_PREFIX_OPCODE;
7162 /* Change the size of any displacement too. At most one of
7163 Disp16 or Disp32 is set.
7164 FIXME. There doesn't seem to be any real need for separate
7165 Disp16 and Disp32 flags. The same goes for Imm16 and Imm32.
7166 Removing them would probably clean up the code quite a lot. */
7167 if (flag_code != CODE_64BIT
7168 && (i.types[this_operand].bitfield.disp16
7169 || i.types[this_operand].bitfield.disp32))
7170 i.types[this_operand]
7171 = operand_type_xor (i.types[this_operand], disp16_32);
7176 as_bad (_("`%s' is not a valid %s expression"),
7181 as_bad (_("`%s' is not a valid %s-bit %s expression"),
7183 flag_code_names[i.prefix[ADDR_PREFIX]
7184 ? flag_code == CODE_32BIT
7193 /* Parse OPERAND_STRING into the i386_insn structure I. Returns zero
7197 i386_att_operand (char *operand_string)
7201 char *op_string = operand_string;
7203 if (is_space_char (*op_string))
7206 /* We check for an absolute prefix (differentiating,
7207 for example, 'jmp pc_relative_label' from 'jmp *absolute_label'. */
7208 if (*op_string == ABSOLUTE_PREFIX)
7211 if (is_space_char (*op_string))
7213 i.types[this_operand].bitfield.jumpabsolute = 1;
7216 /* Check if operand is a register. */
7217 if ((r = parse_register (op_string, &end_op)) != NULL)
7219 i386_operand_type temp;
7221 /* Check for a segment override by searching for ':' after a
7222 segment register. */
7224 if (is_space_char (*op_string))
7226 if (*op_string == ':'
7227 && (r->reg_type.bitfield.sreg2
7228 || r->reg_type.bitfield.sreg3))
7233 i.seg[i.mem_operands] = &es;
7236 i.seg[i.mem_operands] = &cs;
7239 i.seg[i.mem_operands] = &ss;
7242 i.seg[i.mem_operands] = &ds;
7245 i.seg[i.mem_operands] = &fs;
7248 i.seg[i.mem_operands] = &gs;
7252 /* Skip the ':' and whitespace. */
7254 if (is_space_char (*op_string))
7257 if (!is_digit_char (*op_string)
7258 && !is_identifier_char (*op_string)
7259 && *op_string != '('
7260 && *op_string != ABSOLUTE_PREFIX)
7262 as_bad (_("bad memory operand `%s'"), op_string);
7265 /* Handle case of %es:*foo. */
7266 if (*op_string == ABSOLUTE_PREFIX)
7269 if (is_space_char (*op_string))
7271 i.types[this_operand].bitfield.jumpabsolute = 1;
7273 goto do_memory_reference;
7277 as_bad (_("junk `%s' after register"), op_string);
7281 temp.bitfield.baseindex = 0;
7282 i.types[this_operand] = operand_type_or (i.types[this_operand],
7284 i.types[this_operand].bitfield.unspecified = 0;
7285 i.op[this_operand].regs = r;
7288 else if (*op_string == REGISTER_PREFIX)
7290 as_bad (_("bad register name `%s'"), op_string);
7293 else if (*op_string == IMMEDIATE_PREFIX)
7296 if (i.types[this_operand].bitfield.jumpabsolute)
7298 as_bad (_("immediate operand illegal with absolute jump"));
7301 if (!i386_immediate (op_string))
7304 else if (is_digit_char (*op_string)
7305 || is_identifier_char (*op_string)
7306 || *op_string == '(')
7308 /* This is a memory reference of some sort. */
7311 /* Start and end of displacement string expression (if found). */
7312 char *displacement_string_start;
7313 char *displacement_string_end;
7315 do_memory_reference:
7316 if ((i.mem_operands == 1
7317 && !current_templates->start->opcode_modifier.isstring)
7318 || i.mem_operands == 2)
7320 as_bad (_("too many memory references for `%s'"),
7321 current_templates->start->name);
7325 /* Check for base index form. We detect the base index form by
7326 looking for an ')' at the end of the operand, searching
7327 for the '(' matching it, and finding a REGISTER_PREFIX or ','
7329 base_string = op_string + strlen (op_string);
7332 if (is_space_char (*base_string))
7335 /* If we only have a displacement, set-up for it to be parsed later. */
7336 displacement_string_start = op_string;
7337 displacement_string_end = base_string + 1;
7339 if (*base_string == ')')
7342 unsigned int parens_balanced = 1;
7343 /* We've already checked that the number of left & right ()'s are
7344 equal, so this loop will not be infinite. */
7348 if (*base_string == ')')
7350 if (*base_string == '(')
7353 while (parens_balanced);
7355 temp_string = base_string;
7357 /* Skip past '(' and whitespace. */
7359 if (is_space_char (*base_string))
7362 if (*base_string == ','
7363 || ((i.base_reg = parse_register (base_string, &end_op))
7366 displacement_string_end = temp_string;
7368 i.types[this_operand].bitfield.baseindex = 1;
7372 base_string = end_op;
7373 if (is_space_char (*base_string))
7377 /* There may be an index reg or scale factor here. */
7378 if (*base_string == ',')
7381 if (is_space_char (*base_string))
7384 if ((i.index_reg = parse_register (base_string, &end_op))
7387 base_string = end_op;
7388 if (is_space_char (*base_string))
7390 if (*base_string == ',')
7393 if (is_space_char (*base_string))
7396 else if (*base_string != ')')
7398 as_bad (_("expecting `,' or `)' "
7399 "after index register in `%s'"),
7404 else if (*base_string == REGISTER_PREFIX)
7406 as_bad (_("bad register name `%s'"), base_string);
7410 /* Check for scale factor. */
7411 if (*base_string != ')')
7413 char *end_scale = i386_scale (base_string);
7418 base_string = end_scale;
7419 if (is_space_char (*base_string))
7421 if (*base_string != ')')
7423 as_bad (_("expecting `)' "
7424 "after scale factor in `%s'"),
7429 else if (!i.index_reg)
7431 as_bad (_("expecting index register or scale factor "
7432 "after `,'; got '%c'"),
7437 else if (*base_string != ')')
7439 as_bad (_("expecting `,' or `)' "
7440 "after base register in `%s'"),
7445 else if (*base_string == REGISTER_PREFIX)
7447 as_bad (_("bad register name `%s'"), base_string);
7452 /* If there's an expression beginning the operand, parse it,
7453 assuming displacement_string_start and
7454 displacement_string_end are meaningful. */
7455 if (displacement_string_start != displacement_string_end)
7457 if (!i386_displacement (displacement_string_start,
7458 displacement_string_end))
7462 /* Special case for (%dx) while doing input/output op. */
7464 && operand_type_equal (&i.base_reg->reg_type,
7465 ®16_inoutportreg)
7467 && i.log2_scale_factor == 0
7468 && i.seg[i.mem_operands] == 0
7469 && !operand_type_check (i.types[this_operand], disp))
7471 i.types[this_operand] = inoutportreg;
7475 if (i386_index_check (operand_string) == 0)
7477 i.types[this_operand].bitfield.mem = 1;
7482 /* It's not a memory operand; argh! */
7483 as_bad (_("invalid char %s beginning operand %d `%s'"),
7484 output_invalid (*op_string),
7489 return 1; /* Normal return. */
7492 /* md_estimate_size_before_relax()
7494 Called just before relax() for rs_machine_dependent frags. The x86
7495 assembler uses these frags to handle variable size jump
7498 Any symbol that is now undefined will not become defined.
7499 Return the correct fr_subtype in the frag.
7500 Return the initial "guess for variable size of frag" to caller.
7501 The guess is actually the growth beyond the fixed part. Whatever
7502 we do to grow the fixed or variable part contributes to our
7506 md_estimate_size_before_relax (fragP, segment)
7510 /* We've already got fragP->fr_subtype right; all we have to do is
7511 check for un-relaxable symbols. On an ELF system, we can't relax
7512 an externally visible symbol, because it may be overridden by a
7514 if (S_GET_SEGMENT (fragP->fr_symbol) != segment
7515 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7517 && (S_IS_EXTERNAL (fragP->fr_symbol)
7518 || S_IS_WEAK (fragP->fr_symbol)
7519 || ((symbol_get_bfdsym (fragP->fr_symbol)->flags
7520 & BSF_GNU_INDIRECT_FUNCTION))))
7522 #if defined (OBJ_COFF) && defined (TE_PE)
7523 || (OUTPUT_FLAVOR == bfd_target_coff_flavour
7524 && S_IS_WEAK (fragP->fr_symbol))
7528 /* Symbol is undefined in this segment, or we need to keep a
7529 reloc so that weak symbols can be overridden. */
7530 int size = (fragP->fr_subtype & CODE16) ? 2 : 4;
7531 enum bfd_reloc_code_real reloc_type;
7532 unsigned char *opcode;
7535 if (fragP->fr_var != NO_RELOC)
7536 reloc_type = (enum bfd_reloc_code_real) fragP->fr_var;
7538 reloc_type = BFD_RELOC_16_PCREL;
7540 reloc_type = BFD_RELOC_32_PCREL;
7542 old_fr_fix = fragP->fr_fix;
7543 opcode = (unsigned char *) fragP->fr_opcode;
7545 switch (TYPE_FROM_RELAX_STATE (fragP->fr_subtype))
7548 /* Make jmp (0xeb) a (d)word displacement jump. */
7550 fragP->fr_fix += size;
7551 fix_new (fragP, old_fr_fix, size,
7553 fragP->fr_offset, 1,
7559 && (!no_cond_jump_promotion || fragP->fr_var != NO_RELOC))
7561 /* Negate the condition, and branch past an
7562 unconditional jump. */
7565 /* Insert an unconditional jump. */
7567 /* We added two extra opcode bytes, and have a two byte
7569 fragP->fr_fix += 2 + 2;
7570 fix_new (fragP, old_fr_fix + 2, 2,
7572 fragP->fr_offset, 1,
7579 if (no_cond_jump_promotion && fragP->fr_var == NO_RELOC)
7584 fixP = fix_new (fragP, old_fr_fix, 1,
7586 fragP->fr_offset, 1,
7588 fixP->fx_signed = 1;
7592 /* This changes the byte-displacement jump 0x7N
7593 to the (d)word-displacement jump 0x0f,0x8N. */
7594 opcode[1] = opcode[0] + 0x10;
7595 opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
7596 /* We've added an opcode byte. */
7597 fragP->fr_fix += 1 + size;
7598 fix_new (fragP, old_fr_fix + 1, size,
7600 fragP->fr_offset, 1,
7605 BAD_CASE (fragP->fr_subtype);
7609 return fragP->fr_fix - old_fr_fix;
7612 /* Guess size depending on current relax state. Initially the relax
7613 state will correspond to a short jump and we return 1, because
7614 the variable part of the frag (the branch offset) is one byte
7615 long. However, we can relax a section more than once and in that
7616 case we must either set fr_subtype back to the unrelaxed state,
7617 or return the value for the appropriate branch. */
7618 return md_relax_table[fragP->fr_subtype].rlx_length;
7621 /* Called after relax() is finished.
7623 In: Address of frag.
7624 fr_type == rs_machine_dependent.
7625 fr_subtype is what the address relaxed to.
7627 Out: Any fixSs and constants are set up.
7628 Caller will turn frag into a ".space 0". */
7631 md_convert_frag (abfd, sec, fragP)
7632 bfd *abfd ATTRIBUTE_UNUSED;
7633 segT sec ATTRIBUTE_UNUSED;
7636 unsigned char *opcode;
7637 unsigned char *where_to_put_displacement = NULL;
7638 offsetT target_address;
7639 offsetT opcode_address;
7640 unsigned int extension = 0;
7641 offsetT displacement_from_opcode_start;
7643 opcode = (unsigned char *) fragP->fr_opcode;
7645 /* Address we want to reach in file space. */
7646 target_address = S_GET_VALUE (fragP->fr_symbol) + fragP->fr_offset;
7648 /* Address opcode resides at in file space. */
7649 opcode_address = fragP->fr_address + fragP->fr_fix;
7651 /* Displacement from opcode start to fill into instruction. */
7652 displacement_from_opcode_start = target_address - opcode_address;
7654 if ((fragP->fr_subtype & BIG) == 0)
7656 /* Don't have to change opcode. */
7657 extension = 1; /* 1 opcode + 1 displacement */
7658 where_to_put_displacement = &opcode[1];
7662 if (no_cond_jump_promotion
7663 && TYPE_FROM_RELAX_STATE (fragP->fr_subtype) != UNCOND_JUMP)
7664 as_warn_where (fragP->fr_file, fragP->fr_line,
7665 _("long jump required"));
7667 switch (fragP->fr_subtype)
7669 case ENCODE_RELAX_STATE (UNCOND_JUMP, BIG):
7670 extension = 4; /* 1 opcode + 4 displacement */
7672 where_to_put_displacement = &opcode[1];
7675 case ENCODE_RELAX_STATE (UNCOND_JUMP, BIG16):
7676 extension = 2; /* 1 opcode + 2 displacement */
7678 where_to_put_displacement = &opcode[1];
7681 case ENCODE_RELAX_STATE (COND_JUMP, BIG):
7682 case ENCODE_RELAX_STATE (COND_JUMP86, BIG):
7683 extension = 5; /* 2 opcode + 4 displacement */
7684 opcode[1] = opcode[0] + 0x10;
7685 opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
7686 where_to_put_displacement = &opcode[2];
7689 case ENCODE_RELAX_STATE (COND_JUMP, BIG16):
7690 extension = 3; /* 2 opcode + 2 displacement */
7691 opcode[1] = opcode[0] + 0x10;
7692 opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
7693 where_to_put_displacement = &opcode[2];
7696 case ENCODE_RELAX_STATE (COND_JUMP86, BIG16):
7701 where_to_put_displacement = &opcode[3];
7705 BAD_CASE (fragP->fr_subtype);
7710 /* If size if less then four we are sure that the operand fits,
7711 but if it's 4, then it could be that the displacement is larger
7713 if (DISP_SIZE_FROM_RELAX_STATE (fragP->fr_subtype) == 4
7715 && ((addressT) (displacement_from_opcode_start - extension
7716 + ((addressT) 1 << 31))
7717 > (((addressT) 2 << 31) - 1)))
7719 as_bad_where (fragP->fr_file, fragP->fr_line,
7720 _("jump target out of range"));
7721 /* Make us emit 0. */
7722 displacement_from_opcode_start = extension;
7724 /* Now put displacement after opcode. */
7725 md_number_to_chars ((char *) where_to_put_displacement,
7726 (valueT) (displacement_from_opcode_start - extension),
7727 DISP_SIZE_FROM_RELAX_STATE (fragP->fr_subtype));
7728 fragP->fr_fix += extension;
7731 /* Apply a fixup (fixS) to segment data, once it has been determined
7732 by our caller that we have all the info we need to fix it up.
7734 On the 386, immediates, displacements, and data pointers are all in
7735 the same (little-endian) format, so we don't need to care about which
7739 md_apply_fix (fixP, valP, seg)
7740 /* The fix we're to put in. */
7742 /* Pointer to the value of the bits. */
7744 /* Segment fix is from. */
7745 segT seg ATTRIBUTE_UNUSED;
7747 char *p = fixP->fx_where + fixP->fx_frag->fr_literal;
7748 valueT value = *valP;
7750 #if !defined (TE_Mach)
7753 switch (fixP->fx_r_type)
7759 fixP->fx_r_type = BFD_RELOC_64_PCREL;
7762 case BFD_RELOC_X86_64_32S:
7763 fixP->fx_r_type = BFD_RELOC_32_PCREL;
7766 fixP->fx_r_type = BFD_RELOC_16_PCREL;
7769 fixP->fx_r_type = BFD_RELOC_8_PCREL;
7774 if (fixP->fx_addsy != NULL
7775 && (fixP->fx_r_type == BFD_RELOC_32_PCREL
7776 || fixP->fx_r_type == BFD_RELOC_64_PCREL
7777 || fixP->fx_r_type == BFD_RELOC_16_PCREL
7778 || fixP->fx_r_type == BFD_RELOC_8_PCREL)
7779 && !use_rela_relocations)
7781 /* This is a hack. There should be a better way to handle this.
7782 This covers for the fact that bfd_install_relocation will
7783 subtract the current location (for partial_inplace, PC relative
7784 relocations); see more below. */
7788 || OUTPUT_FLAVOR == bfd_target_coff_flavour
7791 value += fixP->fx_where + fixP->fx_frag->fr_address;
7793 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7796 segT sym_seg = S_GET_SEGMENT (fixP->fx_addsy);
7799 || (symbol_section_p (fixP->fx_addsy)
7800 && sym_seg != absolute_section))
7801 && !generic_force_reloc (fixP))
7803 /* Yes, we add the values in twice. This is because
7804 bfd_install_relocation subtracts them out again. I think
7805 bfd_install_relocation is broken, but I don't dare change
7807 value += fixP->fx_where + fixP->fx_frag->fr_address;
7811 #if defined (OBJ_COFF) && defined (TE_PE)
7812 /* For some reason, the PE format does not store a
7813 section address offset for a PC relative symbol. */
7814 if (S_GET_SEGMENT (fixP->fx_addsy) != seg
7815 || S_IS_WEAK (fixP->fx_addsy))
7816 value += md_pcrel_from (fixP);
7819 #if defined (OBJ_COFF) && defined (TE_PE)
7820 if (fixP->fx_addsy != NULL && S_IS_WEAK (fixP->fx_addsy))
7822 value -= S_GET_VALUE (fixP->fx_addsy);
7826 /* Fix a few things - the dynamic linker expects certain values here,
7827 and we must not disappoint it. */
7828 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7829 if (IS_ELF && fixP->fx_addsy)
7830 switch (fixP->fx_r_type)
7832 case BFD_RELOC_386_PLT32:
7833 case BFD_RELOC_X86_64_PLT32:
7834 /* Make the jump instruction point to the address of the operand. At
7835 runtime we merely add the offset to the actual PLT entry. */
7839 case BFD_RELOC_386_TLS_GD:
7840 case BFD_RELOC_386_TLS_LDM:
7841 case BFD_RELOC_386_TLS_IE_32:
7842 case BFD_RELOC_386_TLS_IE:
7843 case BFD_RELOC_386_TLS_GOTIE:
7844 case BFD_RELOC_386_TLS_GOTDESC:
7845 case BFD_RELOC_X86_64_TLSGD:
7846 case BFD_RELOC_X86_64_TLSLD:
7847 case BFD_RELOC_X86_64_GOTTPOFF:
7848 case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
7849 value = 0; /* Fully resolved at runtime. No addend. */
7851 case BFD_RELOC_386_TLS_LE:
7852 case BFD_RELOC_386_TLS_LDO_32:
7853 case BFD_RELOC_386_TLS_LE_32:
7854 case BFD_RELOC_X86_64_DTPOFF32:
7855 case BFD_RELOC_X86_64_DTPOFF64:
7856 case BFD_RELOC_X86_64_TPOFF32:
7857 case BFD_RELOC_X86_64_TPOFF64:
7858 S_SET_THREAD_LOCAL (fixP->fx_addsy);
7861 case BFD_RELOC_386_TLS_DESC_CALL:
7862 case BFD_RELOC_X86_64_TLSDESC_CALL:
7863 value = 0; /* Fully resolved at runtime. No addend. */
7864 S_SET_THREAD_LOCAL (fixP->fx_addsy);
7868 case BFD_RELOC_386_GOT32:
7869 case BFD_RELOC_X86_64_GOT32:
7870 value = 0; /* Fully resolved at runtime. No addend. */
7873 case BFD_RELOC_VTABLE_INHERIT:
7874 case BFD_RELOC_VTABLE_ENTRY:
7881 #endif /* defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) */
7883 #endif /* !defined (TE_Mach) */
7885 /* Are we finished with this relocation now? */
7886 if (fixP->fx_addsy == NULL)
7888 #if defined (OBJ_COFF) && defined (TE_PE)
7889 else if (fixP->fx_addsy != NULL && S_IS_WEAK (fixP->fx_addsy))
7892 /* Remember value for tc_gen_reloc. */
7893 fixP->fx_addnumber = value;
7894 /* Clear out the frag for now. */
7898 else if (use_rela_relocations)
7900 fixP->fx_no_overflow = 1;
7901 /* Remember value for tc_gen_reloc. */
7902 fixP->fx_addnumber = value;
7906 md_number_to_chars (p, value, fixP->fx_size);
7910 md_atof (int type, char *litP, int *sizeP)
7912 /* This outputs the LITTLENUMs in REVERSE order;
7913 in accord with the bigendian 386. */
7914 return ieee_md_atof (type, litP, sizeP, FALSE);
7917 static char output_invalid_buf[sizeof (unsigned char) * 2 + 6];
7920 output_invalid (int c)
7923 snprintf (output_invalid_buf, sizeof (output_invalid_buf),
7926 snprintf (output_invalid_buf, sizeof (output_invalid_buf),
7927 "(0x%x)", (unsigned char) c);
7928 return output_invalid_buf;
7931 /* REG_STRING starts *before* REGISTER_PREFIX. */
7933 static const reg_entry *
7934 parse_real_register (char *reg_string, char **end_op)
7936 char *s = reg_string;
7938 char reg_name_given[MAX_REG_NAME_SIZE + 1];
7941 /* Skip possible REGISTER_PREFIX and possible whitespace. */
7942 if (*s == REGISTER_PREFIX)
7945 if (is_space_char (*s))
7949 while ((*p++ = register_chars[(unsigned char) *s]) != '\0')
7951 if (p >= reg_name_given + MAX_REG_NAME_SIZE)
7952 return (const reg_entry *) NULL;
7956 /* For naked regs, make sure that we are not dealing with an identifier.
7957 This prevents confusing an identifier like `eax_var' with register
7959 if (allow_naked_reg && identifier_chars[(unsigned char) *s])
7960 return (const reg_entry *) NULL;
7964 r = (const reg_entry *) hash_find (reg_hash, reg_name_given);
7966 /* Handle floating point regs, allowing spaces in the (i) part. */
7967 if (r == i386_regtab /* %st is first entry of table */)
7969 if (is_space_char (*s))
7974 if (is_space_char (*s))
7976 if (*s >= '0' && *s <= '7')
7980 if (is_space_char (*s))
7985 r = (const reg_entry *) hash_find (reg_hash, "st(0)");
7990 /* We have "%st(" then garbage. */
7991 return (const reg_entry *) NULL;
7995 if (r == NULL || allow_pseudo_reg)
7998 if (operand_type_all_zero (&r->reg_type))
7999 return (const reg_entry *) NULL;
8001 if ((r->reg_type.bitfield.reg32
8002 || r->reg_type.bitfield.sreg3
8003 || r->reg_type.bitfield.control
8004 || r->reg_type.bitfield.debug
8005 || r->reg_type.bitfield.test)
8006 && !cpu_arch_flags.bitfield.cpui386)
8007 return (const reg_entry *) NULL;
8009 if (r->reg_type.bitfield.floatreg
8010 && !cpu_arch_flags.bitfield.cpu8087
8011 && !cpu_arch_flags.bitfield.cpu287
8012 && !cpu_arch_flags.bitfield.cpu387)
8013 return (const reg_entry *) NULL;
8015 if (r->reg_type.bitfield.regmmx && !cpu_arch_flags.bitfield.cpummx)
8016 return (const reg_entry *) NULL;
8018 if (r->reg_type.bitfield.regxmm && !cpu_arch_flags.bitfield.cpusse)
8019 return (const reg_entry *) NULL;
8021 if (r->reg_type.bitfield.regymm && !cpu_arch_flags.bitfield.cpuavx)
8022 return (const reg_entry *) NULL;
8024 /* Don't allow fake index register unless allow_index_reg isn't 0. */
8025 if (!allow_index_reg
8026 && (r->reg_num == RegEiz || r->reg_num == RegRiz))
8027 return (const reg_entry *) NULL;
8029 if (((r->reg_flags & (RegRex64 | RegRex))
8030 || r->reg_type.bitfield.reg64)
8031 && (!cpu_arch_flags.bitfield.cpulm
8032 || !operand_type_equal (&r->reg_type, &control))
8033 && flag_code != CODE_64BIT)
8034 return (const reg_entry *) NULL;
8036 if (r->reg_type.bitfield.sreg3 && r->reg_num == RegFlat && !intel_syntax)
8037 return (const reg_entry *) NULL;
8042 /* REG_STRING starts *before* REGISTER_PREFIX. */
8044 static const reg_entry *
8045 parse_register (char *reg_string, char **end_op)
8049 if (*reg_string == REGISTER_PREFIX || allow_naked_reg)
8050 r = parse_real_register (reg_string, end_op);
8055 char *save = input_line_pointer;
8059 input_line_pointer = reg_string;
8060 c = get_symbol_end ();
8061 symbolP = symbol_find (reg_string);
8062 if (symbolP && S_GET_SEGMENT (symbolP) == reg_section)
8064 const expressionS *e = symbol_get_value_expression (symbolP);
8066 know (e->X_op == O_register);
8067 know (e->X_add_number >= 0
8068 && (valueT) e->X_add_number < i386_regtab_size);
8069 r = i386_regtab + e->X_add_number;
8070 *end_op = input_line_pointer;
8072 *input_line_pointer = c;
8073 input_line_pointer = save;
8079 i386_parse_name (char *name, expressionS *e, char *nextcharP)
8082 char *end = input_line_pointer;
8085 r = parse_register (name, &input_line_pointer);
8086 if (r && end <= input_line_pointer)
8088 *nextcharP = *input_line_pointer;
8089 *input_line_pointer = 0;
8090 e->X_op = O_register;
8091 e->X_add_number = r - i386_regtab;
8094 input_line_pointer = end;
8096 return intel_syntax ? i386_intel_parse_name (name, e) : 0;
8100 md_operand (expressionS *e)
8105 switch (*input_line_pointer)
8107 case REGISTER_PREFIX:
8108 r = parse_real_register (input_line_pointer, &end);
8111 e->X_op = O_register;
8112 e->X_add_number = r - i386_regtab;
8113 input_line_pointer = end;
8118 gas_assert (intel_syntax);
8119 end = input_line_pointer++;
8121 if (*input_line_pointer == ']')
8123 ++input_line_pointer;
8124 e->X_op_symbol = make_expr_symbol (e);
8125 e->X_add_symbol = NULL;
8126 e->X_add_number = 0;
8132 input_line_pointer = end;
8139 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8140 const char *md_shortopts = "kVQ:sqn";
8142 const char *md_shortopts = "qn";
8145 #define OPTION_32 (OPTION_MD_BASE + 0)
8146 #define OPTION_64 (OPTION_MD_BASE + 1)
8147 #define OPTION_DIVIDE (OPTION_MD_BASE + 2)
8148 #define OPTION_MARCH (OPTION_MD_BASE + 3)
8149 #define OPTION_MTUNE (OPTION_MD_BASE + 4)
8150 #define OPTION_MMNEMONIC (OPTION_MD_BASE + 5)
8151 #define OPTION_MSYNTAX (OPTION_MD_BASE + 6)
8152 #define OPTION_MINDEX_REG (OPTION_MD_BASE + 7)
8153 #define OPTION_MNAKED_REG (OPTION_MD_BASE + 8)
8154 #define OPTION_MOLD_GCC (OPTION_MD_BASE + 9)
8155 #define OPTION_MSSE2AVX (OPTION_MD_BASE + 10)
8156 #define OPTION_MSSE_CHECK (OPTION_MD_BASE + 11)
8157 #define OPTION_MAVXSCALAR (OPTION_MD_BASE + 12)
8158 #define OPTION_X32 (OPTION_MD_BASE + 13)
8160 struct option md_longopts[] =
8162 {"32", no_argument, NULL, OPTION_32},
8163 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
8164 || defined (TE_PE) || defined (TE_PEP))
8165 {"64", no_argument, NULL, OPTION_64},
8167 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8168 {"x32", no_argument, NULL, OPTION_X32},
8170 {"divide", no_argument, NULL, OPTION_DIVIDE},
8171 {"march", required_argument, NULL, OPTION_MARCH},
8172 {"mtune", required_argument, NULL, OPTION_MTUNE},
8173 {"mmnemonic", required_argument, NULL, OPTION_MMNEMONIC},
8174 {"msyntax", required_argument, NULL, OPTION_MSYNTAX},
8175 {"mindex-reg", no_argument, NULL, OPTION_MINDEX_REG},
8176 {"mnaked-reg", no_argument, NULL, OPTION_MNAKED_REG},
8177 {"mold-gcc", no_argument, NULL, OPTION_MOLD_GCC},
8178 {"msse2avx", no_argument, NULL, OPTION_MSSE2AVX},
8179 {"msse-check", required_argument, NULL, OPTION_MSSE_CHECK},
8180 {"mavxscalar", required_argument, NULL, OPTION_MAVXSCALAR},
8181 {NULL, no_argument, NULL, 0}
8183 size_t md_longopts_size = sizeof (md_longopts);
8186 md_parse_option (int c, char *arg)
8194 optimize_align_code = 0;
8201 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8202 /* -Qy, -Qn: SVR4 arguments controlling whether a .comment section
8203 should be emitted or not. FIXME: Not implemented. */
8207 /* -V: SVR4 argument to print version ID. */
8209 print_version_id ();
8212 /* -k: Ignore for FreeBSD compatibility. */
8217 /* -s: On i386 Solaris, this tells the native assembler to use
8218 .stab instead of .stab.excl. We always use .stab anyhow. */
8221 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
8222 || defined (TE_PE) || defined (TE_PEP))
8225 const char **list, **l;
8227 list = bfd_target_list ();
8228 for (l = list; *l != NULL; l++)
8229 if (CONST_STRNEQ (*l, "elf64-x86-64")
8230 || strcmp (*l, "coff-x86-64") == 0
8231 || strcmp (*l, "pe-x86-64") == 0
8232 || strcmp (*l, "pei-x86-64") == 0)
8234 default_arch = "x86_64";
8238 as_fatal (_("No compiled in support for x86_64"));
8244 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8248 const char **list, **l;
8250 list = bfd_target_list ();
8251 for (l = list; *l != NULL; l++)
8252 if (CONST_STRNEQ (*l, "elf32-x86-64"))
8254 default_arch = "x86_64:32";
8258 as_fatal (_("No compiled in support for 32bit x86_64"));
8262 as_fatal (_("32bit x86_64 is only supported for ELF"));
8267 default_arch = "i386";
8271 #ifdef SVR4_COMMENT_CHARS
8276 n = (char *) xmalloc (strlen (i386_comment_chars) + 1);
8278 for (s = i386_comment_chars; *s != '\0'; s++)
8282 i386_comment_chars = n;
8288 arch = xstrdup (arg);
8292 as_fatal (_("Invalid -march= option: `%s'"), arg);
8293 next = strchr (arch, '+');
8296 for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
8298 if (strcmp (arch, cpu_arch [j].name) == 0)
8301 if (! cpu_arch[j].flags.bitfield.cpui386)
8304 cpu_arch_name = cpu_arch[j].name;
8305 cpu_sub_arch_name = NULL;
8306 cpu_arch_flags = cpu_arch[j].flags;
8307 cpu_arch_isa = cpu_arch[j].type;
8308 cpu_arch_isa_flags = cpu_arch[j].flags;
8309 if (!cpu_arch_tune_set)
8311 cpu_arch_tune = cpu_arch_isa;
8312 cpu_arch_tune_flags = cpu_arch_isa_flags;
8316 else if (*cpu_arch [j].name == '.'
8317 && strcmp (arch, cpu_arch [j].name + 1) == 0)
8319 /* ISA entension. */
8320 i386_cpu_flags flags;
8322 if (!cpu_arch[j].negated)
8323 flags = cpu_flags_or (cpu_arch_flags,
8326 flags = cpu_flags_and_not (cpu_arch_flags,
8328 if (!cpu_flags_equal (&flags, &cpu_arch_flags))
8330 if (cpu_sub_arch_name)
8332 char *name = cpu_sub_arch_name;
8333 cpu_sub_arch_name = concat (name,
8335 (const char *) NULL);
8339 cpu_sub_arch_name = xstrdup (cpu_arch[j].name);
8340 cpu_arch_flags = flags;
8346 if (j >= ARRAY_SIZE (cpu_arch))
8347 as_fatal (_("Invalid -march= option: `%s'"), arg);
8351 while (next != NULL );
8356 as_fatal (_("Invalid -mtune= option: `%s'"), arg);
8357 for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
8359 if (strcmp (arg, cpu_arch [j].name) == 0)
8361 cpu_arch_tune_set = 1;
8362 cpu_arch_tune = cpu_arch [j].type;
8363 cpu_arch_tune_flags = cpu_arch[j].flags;
8367 if (j >= ARRAY_SIZE (cpu_arch))
8368 as_fatal (_("Invalid -mtune= option: `%s'"), arg);
8371 case OPTION_MMNEMONIC:
8372 if (strcasecmp (arg, "att") == 0)
8374 else if (strcasecmp (arg, "intel") == 0)
8377 as_fatal (_("Invalid -mmnemonic= option: `%s'"), arg);
8380 case OPTION_MSYNTAX:
8381 if (strcasecmp (arg, "att") == 0)
8383 else if (strcasecmp (arg, "intel") == 0)
8386 as_fatal (_("Invalid -msyntax= option: `%s'"), arg);
8389 case OPTION_MINDEX_REG:
8390 allow_index_reg = 1;
8393 case OPTION_MNAKED_REG:
8394 allow_naked_reg = 1;
8397 case OPTION_MOLD_GCC:
8401 case OPTION_MSSE2AVX:
8405 case OPTION_MSSE_CHECK:
8406 if (strcasecmp (arg, "error") == 0)
8407 sse_check = sse_check_error;
8408 else if (strcasecmp (arg, "warning") == 0)
8409 sse_check = sse_check_warning;
8410 else if (strcasecmp (arg, "none") == 0)
8411 sse_check = sse_check_none;
8413 as_fatal (_("Invalid -msse-check= option: `%s'"), arg);
8416 case OPTION_MAVXSCALAR:
8417 if (strcasecmp (arg, "128") == 0)
8419 else if (strcasecmp (arg, "256") == 0)
8422 as_fatal (_("Invalid -mavxscalar= option: `%s'"), arg);
8431 #define MESSAGE_TEMPLATE \
8435 show_arch (FILE *stream, int ext, int check)
8437 static char message[] = MESSAGE_TEMPLATE;
8438 char *start = message + 27;
8440 int size = sizeof (MESSAGE_TEMPLATE);
8447 left = size - (start - message);
8448 for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
8450 /* Should it be skipped? */
8451 if (cpu_arch [j].skip)
8454 name = cpu_arch [j].name;
8455 len = cpu_arch [j].len;
8458 /* It is an extension. Skip if we aren't asked to show it. */
8469 /* It is an processor. Skip if we show only extension. */
8472 else if (check && ! cpu_arch[j].flags.bitfield.cpui386)
8474 /* It is an impossible processor - skip. */
8478 /* Reserve 2 spaces for ", " or ",\0" */
8481 /* Check if there is any room. */
8489 p = mempcpy (p, name, len);
8493 /* Output the current message now and start a new one. */
8496 fprintf (stream, "%s\n", message);
8498 left = size - (start - message) - len - 2;
8500 gas_assert (left >= 0);
8502 p = mempcpy (p, name, len);
8507 fprintf (stream, "%s\n", message);
8511 md_show_usage (FILE *stream)
8513 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8514 fprintf (stream, _("\
8516 -V print assembler version number\n\
8519 fprintf (stream, _("\
8520 -n Do not optimize code alignment\n\
8521 -q quieten some warnings\n"));
8522 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8523 fprintf (stream, _("\
8526 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
8527 || defined (TE_PE) || defined (TE_PEP))
8528 fprintf (stream, _("\
8529 --32/--64/--x32 generate 32bit/64bit/x32 code\n"));
8531 #ifdef SVR4_COMMENT_CHARS
8532 fprintf (stream, _("\
8533 --divide do not treat `/' as a comment character\n"));
8535 fprintf (stream, _("\
8536 --divide ignored\n"));
8538 fprintf (stream, _("\
8539 -march=CPU[,+EXTENSION...]\n\
8540 generate code for CPU and EXTENSION, CPU is one of:\n"));
8541 show_arch (stream, 0, 1);
8542 fprintf (stream, _("\
8543 EXTENSION is combination of:\n"));
8544 show_arch (stream, 1, 0);
8545 fprintf (stream, _("\
8546 -mtune=CPU optimize for CPU, CPU is one of:\n"));
8547 show_arch (stream, 0, 0);
8548 fprintf (stream, _("\
8549 -msse2avx encode SSE instructions with VEX prefix\n"));
8550 fprintf (stream, _("\
8551 -msse-check=[none|error|warning]\n\
8552 check SSE instructions\n"));
8553 fprintf (stream, _("\
8554 -mavxscalar=[128|256] encode scalar AVX instructions with specific vector\n\
8556 fprintf (stream, _("\
8557 -mmnemonic=[att|intel] use AT&T/Intel mnemonic\n"));
8558 fprintf (stream, _("\
8559 -msyntax=[att|intel] use AT&T/Intel syntax\n"));
8560 fprintf (stream, _("\
8561 -mindex-reg support pseudo index registers\n"));
8562 fprintf (stream, _("\
8563 -mnaked-reg don't require `%%' prefix for registers\n"));
8564 fprintf (stream, _("\
8565 -mold-gcc support old (<= 2.8.1) versions of gcc\n"));
8568 #if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \
8569 || defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
8570 || defined (TE_PE) || defined (TE_PEP) || defined (OBJ_MACH_O))
8572 /* Pick the target format to use. */
8575 i386_target_format (void)
8577 if (!strncmp (default_arch, "x86_64", 6))
8579 update_code_flag (CODE_64BIT, 1);
8580 if (default_arch[6] == '\0')
8581 x86_elf_abi = X86_64_ABI;
8583 x86_elf_abi = X86_64_X32_ABI;
8585 else if (!strcmp (default_arch, "i386"))
8586 update_code_flag (CODE_32BIT, 1);
8588 as_fatal (_("Unknown architecture"));
8590 if (cpu_flags_all_zero (&cpu_arch_isa_flags))
8591 cpu_arch_isa_flags = cpu_arch[flag_code == CODE_64BIT].flags;
8592 if (cpu_flags_all_zero (&cpu_arch_tune_flags))
8593 cpu_arch_tune_flags = cpu_arch[flag_code == CODE_64BIT].flags;
8595 switch (OUTPUT_FLAVOR)
8597 #if defined (OBJ_MAYBE_AOUT) || defined (OBJ_AOUT)
8598 case bfd_target_aout_flavour:
8599 return AOUT_TARGET_FORMAT;
8601 #if defined (OBJ_MAYBE_COFF) || defined (OBJ_COFF)
8602 # if defined (TE_PE) || defined (TE_PEP)
8603 case bfd_target_coff_flavour:
8604 return flag_code == CODE_64BIT ? "pe-x86-64" : "pe-i386";
8605 # elif defined (TE_GO32)
8606 case bfd_target_coff_flavour:
8609 case bfd_target_coff_flavour:
8613 #if defined (OBJ_MAYBE_ELF) || defined (OBJ_ELF)
8614 case bfd_target_elf_flavour:
8618 switch (x86_elf_abi)
8621 format = ELF_TARGET_FORMAT;
8624 use_rela_relocations = 1;
8626 format = ELF_TARGET_FORMAT64;
8628 case X86_64_X32_ABI:
8629 use_rela_relocations = 1;
8631 disallow_64bit_reloc = 1;
8632 format = ELF_TARGET_FORMAT32;
8635 if (cpu_arch_isa == PROCESSOR_L1OM)
8637 if (x86_elf_abi != X86_64_ABI)
8638 as_fatal (_("Intel L1OM is 64bit only"));
8639 return ELF_TARGET_L1OM_FORMAT;
8645 #if defined (OBJ_MACH_O)
8646 case bfd_target_mach_o_flavour:
8647 return flag_code == CODE_64BIT ? "mach-o-x86-64" : "mach-o-i386";
8655 #endif /* OBJ_MAYBE_ more than one */
8657 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF))
8659 i386_elf_emit_arch_note (void)
8661 if (IS_ELF && cpu_arch_name != NULL)
8664 asection *seg = now_seg;
8665 subsegT subseg = now_subseg;
8666 Elf_Internal_Note i_note;
8667 Elf_External_Note e_note;
8668 asection *note_secp;
8671 /* Create the .note section. */
8672 note_secp = subseg_new (".note", 0);
8673 bfd_set_section_flags (stdoutput,
8675 SEC_HAS_CONTENTS | SEC_READONLY);
8677 /* Process the arch string. */
8678 len = strlen (cpu_arch_name);
8680 i_note.namesz = len + 1;
8682 i_note.type = NT_ARCH;
8683 p = frag_more (sizeof (e_note.namesz));
8684 md_number_to_chars (p, (valueT) i_note.namesz, sizeof (e_note.namesz));
8685 p = frag_more (sizeof (e_note.descsz));
8686 md_number_to_chars (p, (valueT) i_note.descsz, sizeof (e_note.descsz));
8687 p = frag_more (sizeof (e_note.type));
8688 md_number_to_chars (p, (valueT) i_note.type, sizeof (e_note.type));
8689 p = frag_more (len + 1);
8690 strcpy (p, cpu_arch_name);
8692 frag_align (2, 0, 0);
8694 subseg_set (seg, subseg);
8700 md_undefined_symbol (name)
8703 if (name[0] == GLOBAL_OFFSET_TABLE_NAME[0]
8704 && name[1] == GLOBAL_OFFSET_TABLE_NAME[1]
8705 && name[2] == GLOBAL_OFFSET_TABLE_NAME[2]
8706 && strcmp (name, GLOBAL_OFFSET_TABLE_NAME) == 0)
8710 if (symbol_find (name))
8711 as_bad (_("GOT already in symbol table"));
8712 GOT_symbol = symbol_new (name, undefined_section,
8713 (valueT) 0, &zero_address_frag);
8720 /* Round up a section size to the appropriate boundary. */
8723 md_section_align (segment, size)
8724 segT segment ATTRIBUTE_UNUSED;
8727 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
8728 if (OUTPUT_FLAVOR == bfd_target_aout_flavour)
8730 /* For a.out, force the section size to be aligned. If we don't do
8731 this, BFD will align it for us, but it will not write out the
8732 final bytes of the section. This may be a bug in BFD, but it is
8733 easier to fix it here since that is how the other a.out targets
8737 align = bfd_get_section_alignment (stdoutput, segment);
8738 size = ((size + (1 << align) - 1) & ((valueT) -1 << align));
8745 /* On the i386, PC-relative offsets are relative to the start of the
8746 next instruction. That is, the address of the offset, plus its
8747 size, since the offset is always the last part of the insn. */
8750 md_pcrel_from (fixS *fixP)
8752 return fixP->fx_size + fixP->fx_where + fixP->fx_frag->fr_address;
8758 s_bss (int ignore ATTRIBUTE_UNUSED)
8762 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8764 obj_elf_section_change_hook ();
8766 temp = get_absolute_expression ();
8767 subseg_set (bss_section, (subsegT) temp);
8768 demand_empty_rest_of_line ();
8774 i386_validate_fix (fixS *fixp)
8776 if (fixp->fx_subsy && fixp->fx_subsy == GOT_symbol)
8778 if (fixp->fx_r_type == BFD_RELOC_32_PCREL)
8782 fixp->fx_r_type = BFD_RELOC_X86_64_GOTPCREL;
8787 fixp->fx_r_type = BFD_RELOC_386_GOTOFF;
8789 fixp->fx_r_type = BFD_RELOC_X86_64_GOTOFF64;
8796 tc_gen_reloc (section, fixp)
8797 asection *section ATTRIBUTE_UNUSED;
8801 bfd_reloc_code_real_type code;
8803 switch (fixp->fx_r_type)
8805 case BFD_RELOC_X86_64_PLT32:
8806 case BFD_RELOC_X86_64_GOT32:
8807 case BFD_RELOC_X86_64_GOTPCREL:
8808 case BFD_RELOC_386_PLT32:
8809 case BFD_RELOC_386_GOT32:
8810 case BFD_RELOC_386_GOTOFF:
8811 case BFD_RELOC_386_GOTPC:
8812 case BFD_RELOC_386_TLS_GD:
8813 case BFD_RELOC_386_TLS_LDM:
8814 case BFD_RELOC_386_TLS_LDO_32:
8815 case BFD_RELOC_386_TLS_IE_32:
8816 case BFD_RELOC_386_TLS_IE:
8817 case BFD_RELOC_386_TLS_GOTIE:
8818 case BFD_RELOC_386_TLS_LE_32:
8819 case BFD_RELOC_386_TLS_LE:
8820 case BFD_RELOC_386_TLS_GOTDESC:
8821 case BFD_RELOC_386_TLS_DESC_CALL:
8822 case BFD_RELOC_X86_64_TLSGD:
8823 case BFD_RELOC_X86_64_TLSLD:
8824 case BFD_RELOC_X86_64_DTPOFF32:
8825 case BFD_RELOC_X86_64_DTPOFF64:
8826 case BFD_RELOC_X86_64_GOTTPOFF:
8827 case BFD_RELOC_X86_64_TPOFF32:
8828 case BFD_RELOC_X86_64_TPOFF64:
8829 case BFD_RELOC_X86_64_GOTOFF64:
8830 case BFD_RELOC_X86_64_GOTPC32:
8831 case BFD_RELOC_X86_64_GOT64:
8832 case BFD_RELOC_X86_64_GOTPCREL64:
8833 case BFD_RELOC_X86_64_GOTPC64:
8834 case BFD_RELOC_X86_64_GOTPLT64:
8835 case BFD_RELOC_X86_64_PLTOFF64:
8836 case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
8837 case BFD_RELOC_X86_64_TLSDESC_CALL:
8839 case BFD_RELOC_VTABLE_ENTRY:
8840 case BFD_RELOC_VTABLE_INHERIT:
8842 case BFD_RELOC_32_SECREL:
8844 code = fixp->fx_r_type;
8846 case BFD_RELOC_X86_64_32S:
8847 if (!fixp->fx_pcrel)
8849 /* Don't turn BFD_RELOC_X86_64_32S into BFD_RELOC_32. */
8850 code = fixp->fx_r_type;
8856 switch (fixp->fx_size)
8859 as_bad_where (fixp->fx_file, fixp->fx_line,
8860 _("can not do %d byte pc-relative relocation"),
8862 code = BFD_RELOC_32_PCREL;
8864 case 1: code = BFD_RELOC_8_PCREL; break;
8865 case 2: code = BFD_RELOC_16_PCREL; break;
8866 case 4: code = BFD_RELOC_32_PCREL; break;
8868 case 8: code = BFD_RELOC_64_PCREL; break;
8874 switch (fixp->fx_size)
8877 as_bad_where (fixp->fx_file, fixp->fx_line,
8878 _("can not do %d byte relocation"),
8880 code = BFD_RELOC_32;
8882 case 1: code = BFD_RELOC_8; break;
8883 case 2: code = BFD_RELOC_16; break;
8884 case 4: code = BFD_RELOC_32; break;
8886 case 8: code = BFD_RELOC_64; break;
8893 if ((code == BFD_RELOC_32
8894 || code == BFD_RELOC_32_PCREL
8895 || code == BFD_RELOC_X86_64_32S)
8897 && fixp->fx_addsy == GOT_symbol)
8900 code = BFD_RELOC_386_GOTPC;
8902 code = BFD_RELOC_X86_64_GOTPC32;
8904 if ((code == BFD_RELOC_64 || code == BFD_RELOC_64_PCREL)
8906 && fixp->fx_addsy == GOT_symbol)
8908 code = BFD_RELOC_X86_64_GOTPC64;
8911 rel = (arelent *) xmalloc (sizeof (arelent));
8912 rel->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
8913 *rel->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
8915 rel->address = fixp->fx_frag->fr_address + fixp->fx_where;
8917 if (!use_rela_relocations)
8919 /* HACK: Since i386 ELF uses Rel instead of Rela, encode the
8920 vtable entry to be used in the relocation's section offset. */
8921 if (fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
8922 rel->address = fixp->fx_offset;
8923 #if defined (OBJ_COFF) && defined (TE_PE)
8924 else if (fixp->fx_addsy && S_IS_WEAK (fixp->fx_addsy))
8925 rel->addend = fixp->fx_addnumber - (S_GET_VALUE (fixp->fx_addsy) * 2);
8930 /* Use the rela in 64bit mode. */
8933 if (disallow_64bit_reloc)
8937 case BFD_RELOC_X86_64_DTPOFF64:
8938 case BFD_RELOC_X86_64_TPOFF64:
8939 case BFD_RELOC_64_PCREL:
8940 case BFD_RELOC_X86_64_GOTOFF64:
8941 case BFD_RELOC_X86_64_GOT64:
8942 case BFD_RELOC_X86_64_GOTPCREL64:
8943 case BFD_RELOC_X86_64_GOTPC64:
8944 case BFD_RELOC_X86_64_GOTPLT64:
8945 case BFD_RELOC_X86_64_PLTOFF64:
8946 as_bad_where (fixp->fx_file, fixp->fx_line,
8947 _("cannot represent relocation type %s in x32 mode"),
8948 bfd_get_reloc_code_name (code));
8954 if (!fixp->fx_pcrel)
8955 rel->addend = fixp->fx_offset;
8959 case BFD_RELOC_X86_64_PLT32:
8960 case BFD_RELOC_X86_64_GOT32:
8961 case BFD_RELOC_X86_64_GOTPCREL:
8962 case BFD_RELOC_X86_64_TLSGD:
8963 case BFD_RELOC_X86_64_TLSLD:
8964 case BFD_RELOC_X86_64_GOTTPOFF:
8965 case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
8966 case BFD_RELOC_X86_64_TLSDESC_CALL:
8967 rel->addend = fixp->fx_offset - fixp->fx_size;
8970 rel->addend = (section->vma
8972 + fixp->fx_addnumber
8973 + md_pcrel_from (fixp));
8978 rel->howto = bfd_reloc_type_lookup (stdoutput, code);
8979 if (rel->howto == NULL)
8981 as_bad_where (fixp->fx_file, fixp->fx_line,
8982 _("cannot represent relocation type %s"),
8983 bfd_get_reloc_code_name (code));
8984 /* Set howto to a garbage value so that we can keep going. */
8985 rel->howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_32);
8986 gas_assert (rel->howto != NULL);
8992 #include "tc-i386-intel.c"
8995 tc_x86_parse_to_dw2regnum (expressionS *exp)
8997 int saved_naked_reg;
8998 char saved_register_dot;
9000 saved_naked_reg = allow_naked_reg;
9001 allow_naked_reg = 1;
9002 saved_register_dot = register_chars['.'];
9003 register_chars['.'] = '.';
9004 allow_pseudo_reg = 1;
9005 expression_and_evaluate (exp);
9006 allow_pseudo_reg = 0;
9007 register_chars['.'] = saved_register_dot;
9008 allow_naked_reg = saved_naked_reg;
9010 if (exp->X_op == O_register && exp->X_add_number >= 0)
9012 if ((addressT) exp->X_add_number < i386_regtab_size)
9014 exp->X_op = O_constant;
9015 exp->X_add_number = i386_regtab[exp->X_add_number]
9016 .dw2_regnum[flag_code >> 1];
9019 exp->X_op = O_illegal;
9024 tc_x86_frame_initial_instructions (void)
9026 static unsigned int sp_regno[2];
9028 if (!sp_regno[flag_code >> 1])
9030 char *saved_input = input_line_pointer;
9031 char sp[][4] = {"esp", "rsp"};
9034 input_line_pointer = sp[flag_code >> 1];
9035 tc_x86_parse_to_dw2regnum (&exp);
9036 gas_assert (exp.X_op == O_constant);
9037 sp_regno[flag_code >> 1] = exp.X_add_number;
9038 input_line_pointer = saved_input;
9041 cfi_add_CFA_def_cfa (sp_regno[flag_code >> 1], -x86_cie_data_alignment);
9042 cfi_add_CFA_offset (x86_dwarf2_return_column, x86_cie_data_alignment);
9046 i386_elf_section_type (const char *str, size_t len)
9048 if (flag_code == CODE_64BIT
9049 && len == sizeof ("unwind") - 1
9050 && strncmp (str, "unwind", 6) == 0)
9051 return SHT_X86_64_UNWIND;
9058 i386_solaris_fix_up_eh_frame (segT sec)
9060 if (flag_code == CODE_64BIT)
9061 elf_section_type (sec) = SHT_X86_64_UNWIND;
9067 tc_pe_dwarf2_emit_offset (symbolS *symbol, unsigned int size)
9071 exp.X_op = O_secrel;
9072 exp.X_add_symbol = symbol;
9073 exp.X_add_number = 0;
9074 emit_expr (&exp, size);
9078 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
9079 /* For ELF on x86-64, add support for SHF_X86_64_LARGE. */
9082 x86_64_section_letter (int letter, char **ptr_msg)
9084 if (flag_code == CODE_64BIT)
9087 return SHF_X86_64_LARGE;
9089 *ptr_msg = _("bad .section directive: want a,l,w,x,M,S,G,T in string");
9092 *ptr_msg = _("bad .section directive: want a,w,x,M,S,G,T in string");
9097 x86_64_section_word (char *str, size_t len)
9099 if (len == 5 && flag_code == CODE_64BIT && CONST_STRNEQ (str, "large"))
9100 return SHF_X86_64_LARGE;
9106 handle_large_common (int small ATTRIBUTE_UNUSED)
9108 if (flag_code != CODE_64BIT)
9110 s_comm_internal (0, elf_common_parse);
9111 as_warn (_(".largecomm supported only in 64bit mode, producing .comm"));
9115 static segT lbss_section;
9116 asection *saved_com_section_ptr = elf_com_section_ptr;
9117 asection *saved_bss_section = bss_section;
9119 if (lbss_section == NULL)
9121 flagword applicable;
9123 subsegT subseg = now_subseg;
9125 /* The .lbss section is for local .largecomm symbols. */
9126 lbss_section = subseg_new (".lbss", 0);
9127 applicable = bfd_applicable_section_flags (stdoutput);
9128 bfd_set_section_flags (stdoutput, lbss_section,
9129 applicable & SEC_ALLOC);
9130 seg_info (lbss_section)->bss = 1;
9132 subseg_set (seg, subseg);
9135 elf_com_section_ptr = &_bfd_elf_large_com_section;
9136 bss_section = lbss_section;
9138 s_comm_internal (0, elf_common_parse);
9140 elf_com_section_ptr = saved_com_section_ptr;
9141 bss_section = saved_bss_section;
9144 #endif /* OBJ_ELF || OBJ_MAYBE_ELF */