x86: relax redundant REX prefix check
[external/binutils.git] / gas / config / tc-i386.c
1 /* tc-i386.c -- Assemble code for the Intel 80386
2    Copyright (C) 1989-2018 Free Software Foundation, Inc.
3
4    This file is part of GAS, the GNU Assembler.
5
6    GAS is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3, or (at your option)
9    any later version.
10
11    GAS is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with GAS; see the file COPYING.  If not, write to the Free
18    Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
19    02110-1301, USA.  */
20
21 /* Intel 80386 machine specific gas.
22    Written by Eliot Dresselhaus (eliot@mgm.mit.edu).
23    x86_64 support by Jan Hubicka (jh@suse.cz)
24    VIA PadLock support by Michal Ludvig (mludvig@suse.cz)
25    Bugs & suggestions are completely welcome.  This is free software.
26    Please help us make it better.  */
27
28 #include "as.h"
29 #include "safe-ctype.h"
30 #include "subsegs.h"
31 #include "dwarf2dbg.h"
32 #include "dw2gencfi.h"
33 #include "elf/x86-64.h"
34 #include "opcodes/i386-init.h"
35
36 #ifndef REGISTER_WARNINGS
37 #define REGISTER_WARNINGS 1
38 #endif
39
40 #ifndef INFER_ADDR_PREFIX
41 #define INFER_ADDR_PREFIX 1
42 #endif
43
44 #ifndef DEFAULT_ARCH
45 #define DEFAULT_ARCH "i386"
46 #endif
47
48 #ifndef INLINE
49 #if __GNUC__ >= 2
50 #define INLINE __inline__
51 #else
52 #define INLINE
53 #endif
54 #endif
55
56 /* Prefixes will be emitted in the order defined below.
57    WAIT_PREFIX must be the first prefix since FWAIT is really is an
58    instruction, and so must come before any prefixes.
59    The preferred prefix order is SEG_PREFIX, ADDR_PREFIX, DATA_PREFIX,
60    REP_PREFIX/HLE_PREFIX, LOCK_PREFIX.  */
61 #define WAIT_PREFIX     0
62 #define SEG_PREFIX      1
63 #define ADDR_PREFIX     2
64 #define DATA_PREFIX     3
65 #define REP_PREFIX      4
66 #define HLE_PREFIX      REP_PREFIX
67 #define BND_PREFIX      REP_PREFIX
68 #define LOCK_PREFIX     5
69 #define REX_PREFIX      6       /* must come last.  */
70 #define MAX_PREFIXES    7       /* max prefixes per opcode */
71
72 /* we define the syntax here (modulo base,index,scale syntax) */
73 #define REGISTER_PREFIX '%'
74 #define IMMEDIATE_PREFIX '$'
75 #define ABSOLUTE_PREFIX '*'
76
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 /* Intel Syntax.  Use a non-ascii letter since since it never appears
85    in instructions.  */
86 #define LONG_DOUBLE_MNEM_SUFFIX '\1'
87
88 #define END_OF_INSN '\0'
89
90 /*
91   'templates' is for grouping together 'template' structures for opcodes
92   of the same name.  This is only used for storing the insns in the grand
93   ole hash table of insns.
94   The templates themselves start at START and range up to (but not including)
95   END.
96   */
97 typedef struct
98 {
99   const insn_template *start;
100   const insn_template *end;
101 }
102 templates;
103
104 /* 386 operand encoding bytes:  see 386 book for details of this.  */
105 typedef struct
106 {
107   unsigned int regmem;  /* codes register or memory operand */
108   unsigned int reg;     /* codes register operand (or extended opcode) */
109   unsigned int mode;    /* how to interpret regmem & reg */
110 }
111 modrm_byte;
112
113 /* x86-64 extension prefix.  */
114 typedef int rex_byte;
115
116 /* 386 opcode byte to code indirect addressing.  */
117 typedef struct
118 {
119   unsigned base;
120   unsigned index;
121   unsigned scale;
122 }
123 sib_byte;
124
125 /* x86 arch names, types and features */
126 typedef struct
127 {
128   const char *name;             /* arch name */
129   unsigned int len;             /* arch string length */
130   enum processor_type type;     /* arch type */
131   i386_cpu_flags flags;         /* cpu feature flags */
132   unsigned int skip;            /* show_arch should skip this. */
133 }
134 arch_entry;
135
136 /* Used to turn off indicated flags.  */
137 typedef struct
138 {
139   const char *name;             /* arch name */
140   unsigned int len;             /* arch string length */
141   i386_cpu_flags flags;         /* cpu feature flags */
142 }
143 noarch_entry;
144
145 static void update_code_flag (int, int);
146 static void set_code_flag (int);
147 static void set_16bit_gcc_code_flag (int);
148 static void set_intel_syntax (int);
149 static void set_intel_mnemonic (int);
150 static void set_allow_index_reg (int);
151 static void set_check (int);
152 static void set_cpu_arch (int);
153 #ifdef TE_PE
154 static void pe_directive_secrel (int);
155 #endif
156 static void signed_cons (int);
157 static char *output_invalid (int c);
158 static int i386_finalize_immediate (segT, expressionS *, i386_operand_type,
159                                     const char *);
160 static int i386_finalize_displacement (segT, expressionS *, i386_operand_type,
161                                        const char *);
162 static int i386_att_operand (char *);
163 static int i386_intel_operand (char *, int);
164 static int i386_intel_simplify (expressionS *);
165 static int i386_intel_parse_name (const char *, expressionS *);
166 static const reg_entry *parse_register (char *, char **);
167 static char *parse_insn (char *, char *);
168 static char *parse_operands (char *, const char *);
169 static void swap_operands (void);
170 static void swap_2_operands (int, int);
171 static void optimize_imm (void);
172 static void optimize_disp (void);
173 static const insn_template *match_template (char);
174 static int check_string (void);
175 static int process_suffix (void);
176 static int check_byte_reg (void);
177 static int check_long_reg (void);
178 static int check_qword_reg (void);
179 static int check_word_reg (void);
180 static int finalize_imm (void);
181 static int process_operands (void);
182 static const seg_entry *build_modrm_byte (void);
183 static void output_insn (void);
184 static void output_imm (fragS *, offsetT);
185 static void output_disp (fragS *, offsetT);
186 #ifndef I386COFF
187 static void s_bss (int);
188 #endif
189 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
190 static void handle_large_common (int small ATTRIBUTE_UNUSED);
191 #endif
192
193 static const char *default_arch = DEFAULT_ARCH;
194
195 /* This struct describes rounding control and SAE in the instruction.  */
196 struct RC_Operation
197 {
198   enum rc_type
199     {
200       rne = 0,
201       rd,
202       ru,
203       rz,
204       saeonly
205     } type;
206   int operand;
207 };
208
209 static struct RC_Operation rc_op;
210
211 /* The struct describes masking, applied to OPERAND in the instruction.
212    MASK is a pointer to the corresponding mask register.  ZEROING tells
213    whether merging or zeroing mask is used.  */
214 struct Mask_Operation
215 {
216   const reg_entry *mask;
217   unsigned int zeroing;
218   /* The operand where this operation is associated.  */
219   int operand;
220 };
221
222 static struct Mask_Operation mask_op;
223
224 /* The struct describes broadcasting, applied to OPERAND.  FACTOR is
225    broadcast factor.  */
226 struct Broadcast_Operation
227 {
228   /* Type of broadcast: {1to2}, {1to4}, {1to8}, or {1to16}.  */
229   int type;
230
231   /* Index of broadcasted operand.  */
232   int operand;
233 };
234
235 static struct Broadcast_Operation broadcast_op;
236
237 /* VEX prefix.  */
238 typedef struct
239 {
240   /* VEX prefix is either 2 byte or 3 byte.  EVEX is 4 byte.  */
241   unsigned char bytes[4];
242   unsigned int length;
243   /* Destination or source register specifier.  */
244   const reg_entry *register_specifier;
245 } vex_prefix;
246
247 /* 'md_assemble ()' gathers together information and puts it into a
248    i386_insn.  */
249
250 union i386_op
251   {
252     expressionS *disps;
253     expressionS *imms;
254     const reg_entry *regs;
255   };
256
257 enum i386_error
258   {
259     operand_size_mismatch,
260     operand_type_mismatch,
261     register_type_mismatch,
262     number_of_operands_mismatch,
263     invalid_instruction_suffix,
264     bad_imm4,
265     unsupported_with_intel_mnemonic,
266     unsupported_syntax,
267     unsupported,
268     invalid_vsib_address,
269     invalid_vector_register_set,
270     unsupported_vector_index_register,
271     unsupported_broadcast,
272     broadcast_not_on_src_operand,
273     broadcast_needed,
274     unsupported_masking,
275     mask_not_on_destination,
276     no_default_mask,
277     unsupported_rc_sae,
278     rc_sae_operand_not_last_imm,
279     invalid_register_operand,
280   };
281
282 struct _i386_insn
283   {
284     /* TM holds the template for the insn were currently assembling.  */
285     insn_template tm;
286
287     /* SUFFIX holds the instruction size suffix for byte, word, dword
288        or qword, if given.  */
289     char suffix;
290
291     /* OPERANDS gives the number of given operands.  */
292     unsigned int operands;
293
294     /* REG_OPERANDS, DISP_OPERANDS, MEM_OPERANDS, IMM_OPERANDS give the number
295        of given register, displacement, memory operands and immediate
296        operands.  */
297     unsigned int reg_operands, disp_operands, mem_operands, imm_operands;
298
299     /* TYPES [i] is the type (see above #defines) which tells us how to
300        use OP[i] for the corresponding operand.  */
301     i386_operand_type types[MAX_OPERANDS];
302
303     /* Displacement expression, immediate expression, or register for each
304        operand.  */
305     union i386_op op[MAX_OPERANDS];
306
307     /* Flags for operands.  */
308     unsigned int flags[MAX_OPERANDS];
309 #define Operand_PCrel 1
310
311     /* Relocation type for operand */
312     enum bfd_reloc_code_real reloc[MAX_OPERANDS];
313
314     /* BASE_REG, INDEX_REG, and LOG2_SCALE_FACTOR are used to encode
315        the base index byte below.  */
316     const reg_entry *base_reg;
317     const reg_entry *index_reg;
318     unsigned int log2_scale_factor;
319
320     /* SEG gives the seg_entries of this insn.  They are zero unless
321        explicit segment overrides are given.  */
322     const seg_entry *seg[2];
323
324     /* Copied first memory operand string, for re-checking.  */
325     char *memop1_string;
326
327     /* PREFIX holds all the given prefix opcodes (usually null).
328        PREFIXES is the number of prefix opcodes.  */
329     unsigned int prefixes;
330     unsigned char prefix[MAX_PREFIXES];
331
332     /* RM and SIB are the modrm byte and the sib byte where the
333        addressing modes of this insn are encoded.  */
334     modrm_byte rm;
335     rex_byte rex;
336     rex_byte vrex;
337     sib_byte sib;
338     vex_prefix vex;
339
340     /* Masking attributes.  */
341     struct Mask_Operation *mask;
342
343     /* Rounding control and SAE attributes.  */
344     struct RC_Operation *rounding;
345
346     /* Broadcasting attributes.  */
347     struct Broadcast_Operation *broadcast;
348
349     /* Compressed disp8*N attribute.  */
350     unsigned int memshift;
351
352     /* Prefer load or store in encoding.  */
353     enum
354       {
355         dir_encoding_default = 0,
356         dir_encoding_load,
357         dir_encoding_store
358       } dir_encoding;
359
360     /* Prefer 8bit or 32bit displacement in encoding.  */
361     enum
362       {
363         disp_encoding_default = 0,
364         disp_encoding_8bit,
365         disp_encoding_32bit
366       } disp_encoding;
367
368     /* Prefer the REX byte in encoding.  */
369     bfd_boolean rex_encoding;
370
371     /* Disable instruction size optimization.  */
372     bfd_boolean no_optimize;
373
374     /* How to encode vector instructions.  */
375     enum
376       {
377         vex_encoding_default = 0,
378         vex_encoding_vex2,
379         vex_encoding_vex3,
380         vex_encoding_evex
381       } vec_encoding;
382
383     /* REP prefix.  */
384     const char *rep_prefix;
385
386     /* HLE prefix.  */
387     const char *hle_prefix;
388
389     /* Have BND prefix.  */
390     const char *bnd_prefix;
391
392     /* Have NOTRACK prefix.  */
393     const char *notrack_prefix;
394
395     /* Error message.  */
396     enum i386_error error;
397   };
398
399 typedef struct _i386_insn i386_insn;
400
401 /* Link RC type with corresponding string, that'll be looked for in
402    asm.  */
403 struct RC_name
404 {
405   enum rc_type type;
406   const char *name;
407   unsigned int len;
408 };
409
410 static const struct RC_name RC_NamesTable[] =
411 {
412   {  rne, STRING_COMMA_LEN ("rn-sae") },
413   {  rd,  STRING_COMMA_LEN ("rd-sae") },
414   {  ru,  STRING_COMMA_LEN ("ru-sae") },
415   {  rz,  STRING_COMMA_LEN ("rz-sae") },
416   {  saeonly,  STRING_COMMA_LEN ("sae") },
417 };
418
419 /* List of chars besides those in app.c:symbol_chars that can start an
420    operand.  Used to prevent the scrubber eating vital white-space.  */
421 const char extra_symbol_chars[] = "*%-([{}"
422 #ifdef LEX_AT
423         "@"
424 #endif
425 #ifdef LEX_QM
426         "?"
427 #endif
428         ;
429
430 #if (defined (TE_I386AIX)                               \
431      || ((defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)) \
432          && !defined (TE_GNU)                           \
433          && !defined (TE_LINUX)                         \
434          && !defined (TE_NACL)                          \
435          && !defined (TE_FreeBSD)                       \
436          && !defined (TE_DragonFly)                     \
437          && !defined (TE_NetBSD)))
438 /* This array holds the chars that always start a comment.  If the
439    pre-processor is disabled, these aren't very useful.  The option
440    --divide will remove '/' from this list.  */
441 const char *i386_comment_chars = "#/";
442 #define SVR4_COMMENT_CHARS 1
443 #define PREFIX_SEPARATOR '\\'
444
445 #else
446 const char *i386_comment_chars = "#";
447 #define PREFIX_SEPARATOR '/'
448 #endif
449
450 /* This array holds the chars that only start a comment at the beginning of
451    a line.  If the line seems to have the form '# 123 filename'
452    .line and .file directives will appear in the pre-processed output.
453    Note that input_file.c hand checks for '#' at the beginning of the
454    first line of the input file.  This is because the compiler outputs
455    #NO_APP at the beginning of its output.
456    Also note that comments started like this one will always work if
457    '/' isn't otherwise defined.  */
458 const char line_comment_chars[] = "#/";
459
460 const char line_separator_chars[] = ";";
461
462 /* Chars that can be used to separate mant from exp in floating point
463    nums.  */
464 const char EXP_CHARS[] = "eE";
465
466 /* Chars that mean this number is a floating point constant
467    As in 0f12.456
468    or    0d1.2345e12.  */
469 const char FLT_CHARS[] = "fFdDxX";
470
471 /* Tables for lexical analysis.  */
472 static char mnemonic_chars[256];
473 static char register_chars[256];
474 static char operand_chars[256];
475 static char identifier_chars[256];
476 static char digit_chars[256];
477
478 /* Lexical macros.  */
479 #define is_mnemonic_char(x) (mnemonic_chars[(unsigned char) x])
480 #define is_operand_char(x) (operand_chars[(unsigned char) x])
481 #define is_register_char(x) (register_chars[(unsigned char) x])
482 #define is_space_char(x) ((x) == ' ')
483 #define is_identifier_char(x) (identifier_chars[(unsigned char) x])
484 #define is_digit_char(x) (digit_chars[(unsigned char) x])
485
486 /* All non-digit non-letter characters that may occur in an operand.  */
487 static char operand_special_chars[] = "%$-+(,)*._~/<>|&^!:[@]";
488
489 /* md_assemble() always leaves the strings it's passed unaltered.  To
490    effect this we maintain a stack of saved characters that we've smashed
491    with '\0's (indicating end of strings for various sub-fields of the
492    assembler instruction).  */
493 static char save_stack[32];
494 static char *save_stack_p;
495 #define END_STRING_AND_SAVE(s) \
496         do { *save_stack_p++ = *(s); *(s) = '\0'; } while (0)
497 #define RESTORE_END_STRING(s) \
498         do { *(s) = *--save_stack_p; } while (0)
499
500 /* The instruction we're assembling.  */
501 static i386_insn i;
502
503 /* Possible templates for current insn.  */
504 static const templates *current_templates;
505
506 /* Per instruction expressionS buffers: max displacements & immediates.  */
507 static expressionS disp_expressions[MAX_MEMORY_OPERANDS];
508 static expressionS im_expressions[MAX_IMMEDIATE_OPERANDS];
509
510 /* Current operand we are working on.  */
511 static int this_operand = -1;
512
513 /* We support four different modes.  FLAG_CODE variable is used to distinguish
514    these.  */
515
516 enum flag_code {
517         CODE_32BIT,
518         CODE_16BIT,
519         CODE_64BIT };
520
521 static enum flag_code flag_code;
522 static unsigned int object_64bit;
523 static unsigned int disallow_64bit_reloc;
524 static int use_rela_relocations = 0;
525
526 #if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \
527      || defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
528      || defined (TE_PE) || defined (TE_PEP) || defined (OBJ_MACH_O))
529
530 /* The ELF ABI to use.  */
531 enum x86_elf_abi
532 {
533   I386_ABI,
534   X86_64_ABI,
535   X86_64_X32_ABI
536 };
537
538 static enum x86_elf_abi x86_elf_abi = I386_ABI;
539 #endif
540
541 #if defined (TE_PE) || defined (TE_PEP)
542 /* Use big object file format.  */
543 static int use_big_obj = 0;
544 #endif
545
546 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
547 /* 1 if generating code for a shared library.  */
548 static int shared = 0;
549 #endif
550
551 /* 1 for intel syntax,
552    0 if att syntax.  */
553 static int intel_syntax = 0;
554
555 /* 1 for Intel64 ISA,
556    0 if AMD64 ISA.  */
557 static int intel64;
558
559 /* 1 for intel mnemonic,
560    0 if att mnemonic.  */
561 static int intel_mnemonic = !SYSV386_COMPAT;
562
563 /* 1 if pseudo registers are permitted.  */
564 static int allow_pseudo_reg = 0;
565
566 /* 1 if register prefix % not required.  */
567 static int allow_naked_reg = 0;
568
569 /* 1 if the assembler should add BND prefix for all control-transferring
570    instructions supporting it, even if this prefix wasn't specified
571    explicitly.  */
572 static int add_bnd_prefix = 0;
573
574 /* 1 if pseudo index register, eiz/riz, is allowed .  */
575 static int allow_index_reg = 0;
576
577 /* 1 if the assembler should ignore LOCK prefix, even if it was
578    specified explicitly.  */
579 static int omit_lock_prefix = 0;
580
581 /* 1 if the assembler should encode lfence, mfence, and sfence as
582    "lock addl $0, (%{re}sp)".  */
583 static int avoid_fence = 0;
584
585 /* 1 if the assembler should generate relax relocations.  */
586
587 static int generate_relax_relocations
588   = DEFAULT_GENERATE_X86_RELAX_RELOCATIONS;
589
590 static enum check_kind
591   {
592     check_none = 0,
593     check_warning,
594     check_error
595   }
596 sse_check, operand_check = check_warning;
597
598 /* Optimization:
599    1. Clear the REX_W bit with register operand if possible.
600    2. Above plus use 128bit vector instruction to clear the full vector
601       register.
602  */
603 static int optimize = 0;
604
605 /* Optimization:
606    1. Clear the REX_W bit with register operand if possible.
607    2. Above plus use 128bit vector instruction to clear the full vector
608       register.
609    3. Above plus optimize "test{q,l,w} $imm8,%r{64,32,16}" to
610       "testb $imm7,%r8".
611  */
612 static int optimize_for_space = 0;
613
614 /* Register prefix used for error message.  */
615 static const char *register_prefix = "%";
616
617 /* Used in 16 bit gcc mode to add an l suffix to call, ret, enter,
618    leave, push, and pop instructions so that gcc has the same stack
619    frame as in 32 bit mode.  */
620 static char stackop_size = '\0';
621
622 /* Non-zero to optimize code alignment.  */
623 int optimize_align_code = 1;
624
625 /* Non-zero to quieten some warnings.  */
626 static int quiet_warnings = 0;
627
628 /* CPU name.  */
629 static const char *cpu_arch_name = NULL;
630 static char *cpu_sub_arch_name = NULL;
631
632 /* CPU feature flags.  */
633 static i386_cpu_flags cpu_arch_flags = CPU_UNKNOWN_FLAGS;
634
635 /* If we have selected a cpu we are generating instructions for.  */
636 static int cpu_arch_tune_set = 0;
637
638 /* Cpu we are generating instructions for.  */
639 enum processor_type cpu_arch_tune = PROCESSOR_UNKNOWN;
640
641 /* CPU feature flags of cpu we are generating instructions for.  */
642 static i386_cpu_flags cpu_arch_tune_flags;
643
644 /* CPU instruction set architecture used.  */
645 enum processor_type cpu_arch_isa = PROCESSOR_UNKNOWN;
646
647 /* CPU feature flags of instruction set architecture used.  */
648 i386_cpu_flags cpu_arch_isa_flags;
649
650 /* If set, conditional jumps are not automatically promoted to handle
651    larger than a byte offset.  */
652 static unsigned int no_cond_jump_promotion = 0;
653
654 /* Encode SSE instructions with VEX prefix.  */
655 static unsigned int sse2avx;
656
657 /* Encode scalar AVX instructions with specific vector length.  */
658 static enum
659   {
660     vex128 = 0,
661     vex256
662   } avxscalar;
663
664 /* Encode scalar EVEX LIG instructions with specific vector length.  */
665 static enum
666   {
667     evexl128 = 0,
668     evexl256,
669     evexl512
670   } evexlig;
671
672 /* Encode EVEX WIG instructions with specific evex.w.  */
673 static enum
674   {
675     evexw0 = 0,
676     evexw1
677   } evexwig;
678
679 /* Value to encode in EVEX RC bits, for SAE-only instructions.  */
680 static enum rc_type evexrcig = rne;
681
682 /* Pre-defined "_GLOBAL_OFFSET_TABLE_".  */
683 static symbolS *GOT_symbol;
684
685 /* The dwarf2 return column, adjusted for 32 or 64 bit.  */
686 unsigned int x86_dwarf2_return_column;
687
688 /* The dwarf2 data alignment, adjusted for 32 or 64 bit.  */
689 int x86_cie_data_alignment;
690
691 /* Interface to relax_segment.
692    There are 3 major relax states for 386 jump insns because the
693    different types of jumps add different sizes to frags when we're
694    figuring out what sort of jump to choose to reach a given label.  */
695
696 /* Types.  */
697 #define UNCOND_JUMP 0
698 #define COND_JUMP 1
699 #define COND_JUMP86 2
700
701 /* Sizes.  */
702 #define CODE16  1
703 #define SMALL   0
704 #define SMALL16 (SMALL | CODE16)
705 #define BIG     2
706 #define BIG16   (BIG | CODE16)
707
708 #ifndef INLINE
709 #ifdef __GNUC__
710 #define INLINE __inline__
711 #else
712 #define INLINE
713 #endif
714 #endif
715
716 #define ENCODE_RELAX_STATE(type, size) \
717   ((relax_substateT) (((type) << 2) | (size)))
718 #define TYPE_FROM_RELAX_STATE(s) \
719   ((s) >> 2)
720 #define DISP_SIZE_FROM_RELAX_STATE(s) \
721     ((((s) & 3) == BIG ? 4 : (((s) & 3) == BIG16 ? 2 : 1)))
722
723 /* This table is used by relax_frag to promote short jumps to long
724    ones where necessary.  SMALL (short) jumps may be promoted to BIG
725    (32 bit long) ones, and SMALL16 jumps to BIG16 (16 bit long).  We
726    don't allow a short jump in a 32 bit code segment to be promoted to
727    a 16 bit offset jump because it's slower (requires data size
728    prefix), and doesn't work, unless the destination is in the bottom
729    64k of the code segment (The top 16 bits of eip are zeroed).  */
730
731 const relax_typeS md_relax_table[] =
732 {
733   /* The fields are:
734      1) most positive reach of this state,
735      2) most negative reach of this state,
736      3) how many bytes this mode will have in the variable part of the frag
737      4) which index into the table to try if we can't fit into this one.  */
738
739   /* UNCOND_JUMP states.  */
740   {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (UNCOND_JUMP, BIG)},
741   {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (UNCOND_JUMP, BIG16)},
742   /* dword jmp adds 4 bytes to frag:
743      0 extra opcode bytes, 4 displacement bytes.  */
744   {0, 0, 4, 0},
745   /* word jmp adds 2 byte2 to frag:
746      0 extra opcode bytes, 2 displacement bytes.  */
747   {0, 0, 2, 0},
748
749   /* COND_JUMP states.  */
750   {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP, BIG)},
751   {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP, BIG16)},
752   /* dword conditionals adds 5 bytes to frag:
753      1 extra opcode byte, 4 displacement bytes.  */
754   {0, 0, 5, 0},
755   /* word conditionals add 3 bytes to frag:
756      1 extra opcode byte, 2 displacement bytes.  */
757   {0, 0, 3, 0},
758
759   /* COND_JUMP86 states.  */
760   {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP86, BIG)},
761   {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP86, BIG16)},
762   /* dword conditionals adds 5 bytes to frag:
763      1 extra opcode byte, 4 displacement bytes.  */
764   {0, 0, 5, 0},
765   /* word conditionals add 4 bytes to frag:
766      1 displacement byte and a 3 byte long branch insn.  */
767   {0, 0, 4, 0}
768 };
769
770 static const arch_entry cpu_arch[] =
771 {
772   /* Do not replace the first two entries - i386_target_format()
773      relies on them being there in this order.  */
774   { STRING_COMMA_LEN ("generic32"), PROCESSOR_GENERIC32,
775     CPU_GENERIC32_FLAGS, 0 },
776   { STRING_COMMA_LEN ("generic64"), PROCESSOR_GENERIC64,
777     CPU_GENERIC64_FLAGS, 0 },
778   { STRING_COMMA_LEN ("i8086"), PROCESSOR_UNKNOWN,
779     CPU_NONE_FLAGS, 0 },
780   { STRING_COMMA_LEN ("i186"), PROCESSOR_UNKNOWN,
781     CPU_I186_FLAGS, 0 },
782   { STRING_COMMA_LEN ("i286"), PROCESSOR_UNKNOWN,
783     CPU_I286_FLAGS, 0 },
784   { STRING_COMMA_LEN ("i386"), PROCESSOR_I386,
785     CPU_I386_FLAGS, 0 },
786   { STRING_COMMA_LEN ("i486"), PROCESSOR_I486,
787     CPU_I486_FLAGS, 0 },
788   { STRING_COMMA_LEN ("i586"), PROCESSOR_PENTIUM,
789     CPU_I586_FLAGS, 0 },
790   { STRING_COMMA_LEN ("i686"), PROCESSOR_PENTIUMPRO,
791     CPU_I686_FLAGS, 0 },
792   { STRING_COMMA_LEN ("pentium"), PROCESSOR_PENTIUM,
793     CPU_I586_FLAGS, 0 },
794   { STRING_COMMA_LEN ("pentiumpro"), PROCESSOR_PENTIUMPRO,
795     CPU_PENTIUMPRO_FLAGS, 0 },
796   { STRING_COMMA_LEN ("pentiumii"), PROCESSOR_PENTIUMPRO,
797     CPU_P2_FLAGS, 0 },
798   { STRING_COMMA_LEN ("pentiumiii"),PROCESSOR_PENTIUMPRO,
799     CPU_P3_FLAGS, 0 },
800   { STRING_COMMA_LEN ("pentium4"), PROCESSOR_PENTIUM4,
801     CPU_P4_FLAGS, 0 },
802   { STRING_COMMA_LEN ("prescott"), PROCESSOR_NOCONA,
803     CPU_CORE_FLAGS, 0 },
804   { STRING_COMMA_LEN ("nocona"), PROCESSOR_NOCONA,
805     CPU_NOCONA_FLAGS, 0 },
806   { STRING_COMMA_LEN ("yonah"), PROCESSOR_CORE,
807     CPU_CORE_FLAGS, 1 },
808   { STRING_COMMA_LEN ("core"), PROCESSOR_CORE,
809     CPU_CORE_FLAGS, 0 },
810   { STRING_COMMA_LEN ("merom"), PROCESSOR_CORE2,
811     CPU_CORE2_FLAGS, 1 },
812   { STRING_COMMA_LEN ("core2"), PROCESSOR_CORE2,
813     CPU_CORE2_FLAGS, 0 },
814   { STRING_COMMA_LEN ("corei7"), PROCESSOR_COREI7,
815     CPU_COREI7_FLAGS, 0 },
816   { STRING_COMMA_LEN ("l1om"), PROCESSOR_L1OM,
817     CPU_L1OM_FLAGS, 0 },
818   { STRING_COMMA_LEN ("k1om"), PROCESSOR_K1OM,
819     CPU_K1OM_FLAGS, 0 },
820   { STRING_COMMA_LEN ("iamcu"), PROCESSOR_IAMCU,
821     CPU_IAMCU_FLAGS, 0 },
822   { STRING_COMMA_LEN ("k6"), PROCESSOR_K6,
823     CPU_K6_FLAGS, 0 },
824   { STRING_COMMA_LEN ("k6_2"), PROCESSOR_K6,
825     CPU_K6_2_FLAGS, 0 },
826   { STRING_COMMA_LEN ("athlon"), PROCESSOR_ATHLON,
827     CPU_ATHLON_FLAGS, 0 },
828   { STRING_COMMA_LEN ("sledgehammer"), PROCESSOR_K8,
829     CPU_K8_FLAGS, 1 },
830   { STRING_COMMA_LEN ("opteron"), PROCESSOR_K8,
831     CPU_K8_FLAGS, 0 },
832   { STRING_COMMA_LEN ("k8"), PROCESSOR_K8,
833     CPU_K8_FLAGS, 0 },
834   { STRING_COMMA_LEN ("amdfam10"), PROCESSOR_AMDFAM10,
835     CPU_AMDFAM10_FLAGS, 0 },
836   { STRING_COMMA_LEN ("bdver1"), PROCESSOR_BD,
837     CPU_BDVER1_FLAGS, 0 },
838   { STRING_COMMA_LEN ("bdver2"), PROCESSOR_BD,
839     CPU_BDVER2_FLAGS, 0 },
840   { STRING_COMMA_LEN ("bdver3"), PROCESSOR_BD,
841     CPU_BDVER3_FLAGS, 0 },
842   { STRING_COMMA_LEN ("bdver4"), PROCESSOR_BD,
843     CPU_BDVER4_FLAGS, 0 },
844   { STRING_COMMA_LEN ("znver1"), PROCESSOR_ZNVER,
845     CPU_ZNVER1_FLAGS, 0 },
846   { STRING_COMMA_LEN ("znver2"), PROCESSOR_ZNVER,
847     CPU_ZNVER2_FLAGS, 0 },
848   { STRING_COMMA_LEN ("btver1"), PROCESSOR_BT,
849     CPU_BTVER1_FLAGS, 0 },
850   { STRING_COMMA_LEN ("btver2"), PROCESSOR_BT,
851     CPU_BTVER2_FLAGS, 0 },
852   { STRING_COMMA_LEN (".8087"), PROCESSOR_UNKNOWN,
853     CPU_8087_FLAGS, 0 },
854   { STRING_COMMA_LEN (".287"), PROCESSOR_UNKNOWN,
855     CPU_287_FLAGS, 0 },
856   { STRING_COMMA_LEN (".387"), PROCESSOR_UNKNOWN,
857     CPU_387_FLAGS, 0 },
858   { STRING_COMMA_LEN (".687"), PROCESSOR_UNKNOWN,
859     CPU_687_FLAGS, 0 },
860   { STRING_COMMA_LEN (".mmx"), PROCESSOR_UNKNOWN,
861     CPU_MMX_FLAGS, 0 },
862   { STRING_COMMA_LEN (".sse"), PROCESSOR_UNKNOWN,
863     CPU_SSE_FLAGS, 0 },
864   { STRING_COMMA_LEN (".sse2"), PROCESSOR_UNKNOWN,
865     CPU_SSE2_FLAGS, 0 },
866   { STRING_COMMA_LEN (".sse3"), PROCESSOR_UNKNOWN,
867     CPU_SSE3_FLAGS, 0 },
868   { STRING_COMMA_LEN (".ssse3"), PROCESSOR_UNKNOWN,
869     CPU_SSSE3_FLAGS, 0 },
870   { STRING_COMMA_LEN (".sse4.1"), PROCESSOR_UNKNOWN,
871     CPU_SSE4_1_FLAGS, 0 },
872   { STRING_COMMA_LEN (".sse4.2"), PROCESSOR_UNKNOWN,
873     CPU_SSE4_2_FLAGS, 0 },
874   { STRING_COMMA_LEN (".sse4"), PROCESSOR_UNKNOWN,
875     CPU_SSE4_2_FLAGS, 0 },
876   { STRING_COMMA_LEN (".avx"), PROCESSOR_UNKNOWN,
877     CPU_AVX_FLAGS, 0 },
878   { STRING_COMMA_LEN (".avx2"), PROCESSOR_UNKNOWN,
879     CPU_AVX2_FLAGS, 0 },
880   { STRING_COMMA_LEN (".avx512f"), PROCESSOR_UNKNOWN,
881     CPU_AVX512F_FLAGS, 0 },
882   { STRING_COMMA_LEN (".avx512cd"), PROCESSOR_UNKNOWN,
883     CPU_AVX512CD_FLAGS, 0 },
884   { STRING_COMMA_LEN (".avx512er"), PROCESSOR_UNKNOWN,
885     CPU_AVX512ER_FLAGS, 0 },
886   { STRING_COMMA_LEN (".avx512pf"), PROCESSOR_UNKNOWN,
887     CPU_AVX512PF_FLAGS, 0 },
888   { STRING_COMMA_LEN (".avx512dq"), PROCESSOR_UNKNOWN,
889     CPU_AVX512DQ_FLAGS, 0 },
890   { STRING_COMMA_LEN (".avx512bw"), PROCESSOR_UNKNOWN,
891     CPU_AVX512BW_FLAGS, 0 },
892   { STRING_COMMA_LEN (".avx512vl"), PROCESSOR_UNKNOWN,
893     CPU_AVX512VL_FLAGS, 0 },
894   { STRING_COMMA_LEN (".vmx"), PROCESSOR_UNKNOWN,
895     CPU_VMX_FLAGS, 0 },
896   { STRING_COMMA_LEN (".vmfunc"), PROCESSOR_UNKNOWN,
897     CPU_VMFUNC_FLAGS, 0 },
898   { STRING_COMMA_LEN (".smx"), PROCESSOR_UNKNOWN,
899     CPU_SMX_FLAGS, 0 },
900   { STRING_COMMA_LEN (".xsave"), PROCESSOR_UNKNOWN,
901     CPU_XSAVE_FLAGS, 0 },
902   { STRING_COMMA_LEN (".xsaveopt"), PROCESSOR_UNKNOWN,
903     CPU_XSAVEOPT_FLAGS, 0 },
904   { STRING_COMMA_LEN (".xsavec"), PROCESSOR_UNKNOWN,
905     CPU_XSAVEC_FLAGS, 0 },
906   { STRING_COMMA_LEN (".xsaves"), PROCESSOR_UNKNOWN,
907     CPU_XSAVES_FLAGS, 0 },
908   { STRING_COMMA_LEN (".aes"), PROCESSOR_UNKNOWN,
909     CPU_AES_FLAGS, 0 },
910   { STRING_COMMA_LEN (".pclmul"), PROCESSOR_UNKNOWN,
911     CPU_PCLMUL_FLAGS, 0 },
912   { STRING_COMMA_LEN (".clmul"), PROCESSOR_UNKNOWN,
913     CPU_PCLMUL_FLAGS, 1 },
914   { STRING_COMMA_LEN (".fsgsbase"), PROCESSOR_UNKNOWN,
915     CPU_FSGSBASE_FLAGS, 0 },
916   { STRING_COMMA_LEN (".rdrnd"), PROCESSOR_UNKNOWN,
917     CPU_RDRND_FLAGS, 0 },
918   { STRING_COMMA_LEN (".f16c"), PROCESSOR_UNKNOWN,
919     CPU_F16C_FLAGS, 0 },
920   { STRING_COMMA_LEN (".bmi2"), PROCESSOR_UNKNOWN,
921     CPU_BMI2_FLAGS, 0 },
922   { STRING_COMMA_LEN (".fma"), PROCESSOR_UNKNOWN,
923     CPU_FMA_FLAGS, 0 },
924   { STRING_COMMA_LEN (".fma4"), PROCESSOR_UNKNOWN,
925     CPU_FMA4_FLAGS, 0 },
926   { STRING_COMMA_LEN (".xop"), PROCESSOR_UNKNOWN,
927     CPU_XOP_FLAGS, 0 },
928   { STRING_COMMA_LEN (".lwp"), PROCESSOR_UNKNOWN,
929     CPU_LWP_FLAGS, 0 },
930   { STRING_COMMA_LEN (".movbe"), PROCESSOR_UNKNOWN,
931     CPU_MOVBE_FLAGS, 0 },
932   { STRING_COMMA_LEN (".cx16"), PROCESSOR_UNKNOWN,
933     CPU_CX16_FLAGS, 0 },
934   { STRING_COMMA_LEN (".ept"), PROCESSOR_UNKNOWN,
935     CPU_EPT_FLAGS, 0 },
936   { STRING_COMMA_LEN (".lzcnt"), PROCESSOR_UNKNOWN,
937     CPU_LZCNT_FLAGS, 0 },
938   { STRING_COMMA_LEN (".hle"), PROCESSOR_UNKNOWN,
939     CPU_HLE_FLAGS, 0 },
940   { STRING_COMMA_LEN (".rtm"), PROCESSOR_UNKNOWN,
941     CPU_RTM_FLAGS, 0 },
942   { STRING_COMMA_LEN (".invpcid"), PROCESSOR_UNKNOWN,
943     CPU_INVPCID_FLAGS, 0 },
944   { STRING_COMMA_LEN (".clflush"), PROCESSOR_UNKNOWN,
945     CPU_CLFLUSH_FLAGS, 0 },
946   { STRING_COMMA_LEN (".nop"), PROCESSOR_UNKNOWN,
947     CPU_NOP_FLAGS, 0 },
948   { STRING_COMMA_LEN (".syscall"), PROCESSOR_UNKNOWN,
949     CPU_SYSCALL_FLAGS, 0 },
950   { STRING_COMMA_LEN (".rdtscp"), PROCESSOR_UNKNOWN,
951     CPU_RDTSCP_FLAGS, 0 },
952   { STRING_COMMA_LEN (".3dnow"), PROCESSOR_UNKNOWN,
953     CPU_3DNOW_FLAGS, 0 },
954   { STRING_COMMA_LEN (".3dnowa"), PROCESSOR_UNKNOWN,
955     CPU_3DNOWA_FLAGS, 0 },
956   { STRING_COMMA_LEN (".padlock"), PROCESSOR_UNKNOWN,
957     CPU_PADLOCK_FLAGS, 0 },
958   { STRING_COMMA_LEN (".pacifica"), PROCESSOR_UNKNOWN,
959     CPU_SVME_FLAGS, 1 },
960   { STRING_COMMA_LEN (".svme"), PROCESSOR_UNKNOWN,
961     CPU_SVME_FLAGS, 0 },
962   { STRING_COMMA_LEN (".sse4a"), PROCESSOR_UNKNOWN,
963     CPU_SSE4A_FLAGS, 0 },
964   { STRING_COMMA_LEN (".abm"), PROCESSOR_UNKNOWN,
965     CPU_ABM_FLAGS, 0 },
966   { STRING_COMMA_LEN (".bmi"), PROCESSOR_UNKNOWN,
967     CPU_BMI_FLAGS, 0 },
968   { STRING_COMMA_LEN (".tbm"), PROCESSOR_UNKNOWN,
969     CPU_TBM_FLAGS, 0 },
970   { STRING_COMMA_LEN (".adx"), PROCESSOR_UNKNOWN,
971     CPU_ADX_FLAGS, 0 },
972   { STRING_COMMA_LEN (".rdseed"), PROCESSOR_UNKNOWN,
973     CPU_RDSEED_FLAGS, 0 },
974   { STRING_COMMA_LEN (".prfchw"), PROCESSOR_UNKNOWN,
975     CPU_PRFCHW_FLAGS, 0 },
976   { STRING_COMMA_LEN (".smap"), PROCESSOR_UNKNOWN,
977     CPU_SMAP_FLAGS, 0 },
978   { STRING_COMMA_LEN (".mpx"), PROCESSOR_UNKNOWN,
979     CPU_MPX_FLAGS, 0 },
980   { STRING_COMMA_LEN (".sha"), PROCESSOR_UNKNOWN,
981     CPU_SHA_FLAGS, 0 },
982   { STRING_COMMA_LEN (".clflushopt"), PROCESSOR_UNKNOWN,
983     CPU_CLFLUSHOPT_FLAGS, 0 },
984   { STRING_COMMA_LEN (".prefetchwt1"), PROCESSOR_UNKNOWN,
985     CPU_PREFETCHWT1_FLAGS, 0 },
986   { STRING_COMMA_LEN (".se1"), PROCESSOR_UNKNOWN,
987     CPU_SE1_FLAGS, 0 },
988   { STRING_COMMA_LEN (".clwb"), PROCESSOR_UNKNOWN,
989     CPU_CLWB_FLAGS, 0 },
990   { STRING_COMMA_LEN (".avx512ifma"), PROCESSOR_UNKNOWN,
991     CPU_AVX512IFMA_FLAGS, 0 },
992   { STRING_COMMA_LEN (".avx512vbmi"), PROCESSOR_UNKNOWN,
993     CPU_AVX512VBMI_FLAGS, 0 },
994   { STRING_COMMA_LEN (".avx512_4fmaps"), PROCESSOR_UNKNOWN,
995     CPU_AVX512_4FMAPS_FLAGS, 0 },
996   { STRING_COMMA_LEN (".avx512_4vnniw"), PROCESSOR_UNKNOWN,
997     CPU_AVX512_4VNNIW_FLAGS, 0 },
998   { STRING_COMMA_LEN (".avx512_vpopcntdq"), PROCESSOR_UNKNOWN,
999     CPU_AVX512_VPOPCNTDQ_FLAGS, 0 },
1000   { STRING_COMMA_LEN (".avx512_vbmi2"), PROCESSOR_UNKNOWN,
1001     CPU_AVX512_VBMI2_FLAGS, 0 },
1002   { STRING_COMMA_LEN (".avx512_vnni"), PROCESSOR_UNKNOWN,
1003     CPU_AVX512_VNNI_FLAGS, 0 },
1004   { STRING_COMMA_LEN (".avx512_bitalg"), PROCESSOR_UNKNOWN,
1005     CPU_AVX512_BITALG_FLAGS, 0 },
1006   { STRING_COMMA_LEN (".clzero"), PROCESSOR_UNKNOWN,
1007     CPU_CLZERO_FLAGS, 0 },
1008   { STRING_COMMA_LEN (".mwaitx"), PROCESSOR_UNKNOWN,
1009     CPU_MWAITX_FLAGS, 0 },
1010   { STRING_COMMA_LEN (".ospke"), PROCESSOR_UNKNOWN,
1011     CPU_OSPKE_FLAGS, 0 },
1012   { STRING_COMMA_LEN (".rdpid"), PROCESSOR_UNKNOWN,
1013     CPU_RDPID_FLAGS, 0 },
1014   { STRING_COMMA_LEN (".ptwrite"), PROCESSOR_UNKNOWN,
1015     CPU_PTWRITE_FLAGS, 0 },
1016   { STRING_COMMA_LEN (".ibt"), PROCESSOR_UNKNOWN,
1017     CPU_IBT_FLAGS, 0 },
1018   { STRING_COMMA_LEN (".shstk"), PROCESSOR_UNKNOWN,
1019     CPU_SHSTK_FLAGS, 0 },
1020   { STRING_COMMA_LEN (".gfni"), PROCESSOR_UNKNOWN,
1021     CPU_GFNI_FLAGS, 0 },
1022   { STRING_COMMA_LEN (".vaes"), PROCESSOR_UNKNOWN,
1023     CPU_VAES_FLAGS, 0 },
1024   { STRING_COMMA_LEN (".vpclmulqdq"), PROCESSOR_UNKNOWN,
1025     CPU_VPCLMULQDQ_FLAGS, 0 },
1026   { STRING_COMMA_LEN (".wbnoinvd"), PROCESSOR_UNKNOWN,
1027     CPU_WBNOINVD_FLAGS, 0 },
1028   { STRING_COMMA_LEN (".pconfig"), PROCESSOR_UNKNOWN,
1029     CPU_PCONFIG_FLAGS, 0 },
1030   { STRING_COMMA_LEN (".waitpkg"), PROCESSOR_UNKNOWN,
1031     CPU_WAITPKG_FLAGS, 0 },
1032   { STRING_COMMA_LEN (".cldemote"), PROCESSOR_UNKNOWN,
1033     CPU_CLDEMOTE_FLAGS, 0 },
1034   { STRING_COMMA_LEN (".movdiri"), PROCESSOR_UNKNOWN,
1035     CPU_MOVDIRI_FLAGS, 0 },
1036   { STRING_COMMA_LEN (".movdir64b"), PROCESSOR_UNKNOWN,
1037     CPU_MOVDIR64B_FLAGS, 0 },
1038 };
1039
1040 static const noarch_entry cpu_noarch[] =
1041 {
1042   { STRING_COMMA_LEN ("no87"),  CPU_ANY_X87_FLAGS },
1043   { STRING_COMMA_LEN ("no287"),  CPU_ANY_287_FLAGS },
1044   { STRING_COMMA_LEN ("no387"),  CPU_ANY_387_FLAGS },
1045   { STRING_COMMA_LEN ("no687"),  CPU_ANY_687_FLAGS },
1046   { STRING_COMMA_LEN ("nommx"),  CPU_ANY_MMX_FLAGS },
1047   { STRING_COMMA_LEN ("nosse"),  CPU_ANY_SSE_FLAGS },
1048   { STRING_COMMA_LEN ("nosse2"),  CPU_ANY_SSE2_FLAGS },
1049   { STRING_COMMA_LEN ("nosse3"),  CPU_ANY_SSE3_FLAGS },
1050   { STRING_COMMA_LEN ("nossse3"),  CPU_ANY_SSSE3_FLAGS },
1051   { STRING_COMMA_LEN ("nosse4.1"),  CPU_ANY_SSE4_1_FLAGS },
1052   { STRING_COMMA_LEN ("nosse4.2"),  CPU_ANY_SSE4_2_FLAGS },
1053   { STRING_COMMA_LEN ("nosse4"),  CPU_ANY_SSE4_1_FLAGS },
1054   { STRING_COMMA_LEN ("noavx"),  CPU_ANY_AVX_FLAGS },
1055   { STRING_COMMA_LEN ("noavx2"),  CPU_ANY_AVX2_FLAGS },
1056   { STRING_COMMA_LEN ("noavx512f"), CPU_ANY_AVX512F_FLAGS },
1057   { STRING_COMMA_LEN ("noavx512cd"), CPU_ANY_AVX512CD_FLAGS },
1058   { STRING_COMMA_LEN ("noavx512er"), CPU_ANY_AVX512ER_FLAGS },
1059   { STRING_COMMA_LEN ("noavx512pf"), CPU_ANY_AVX512PF_FLAGS },
1060   { STRING_COMMA_LEN ("noavx512dq"), CPU_ANY_AVX512DQ_FLAGS },
1061   { STRING_COMMA_LEN ("noavx512bw"), CPU_ANY_AVX512BW_FLAGS },
1062   { STRING_COMMA_LEN ("noavx512vl"), CPU_ANY_AVX512VL_FLAGS },
1063   { STRING_COMMA_LEN ("noavx512ifma"), CPU_ANY_AVX512IFMA_FLAGS },
1064   { STRING_COMMA_LEN ("noavx512vbmi"), CPU_ANY_AVX512VBMI_FLAGS },
1065   { STRING_COMMA_LEN ("noavx512_4fmaps"), CPU_ANY_AVX512_4FMAPS_FLAGS },
1066   { STRING_COMMA_LEN ("noavx512_4vnniw"), CPU_ANY_AVX512_4VNNIW_FLAGS },
1067   { STRING_COMMA_LEN ("noavx512_vpopcntdq"), CPU_ANY_AVX512_VPOPCNTDQ_FLAGS },
1068   { STRING_COMMA_LEN ("noavx512_vbmi2"), CPU_ANY_AVX512_VBMI2_FLAGS },
1069   { STRING_COMMA_LEN ("noavx512_vnni"), CPU_ANY_AVX512_VNNI_FLAGS },
1070   { STRING_COMMA_LEN ("noavx512_bitalg"), CPU_ANY_AVX512_BITALG_FLAGS },
1071   { STRING_COMMA_LEN ("noibt"), CPU_ANY_IBT_FLAGS },
1072   { STRING_COMMA_LEN ("noshstk"), CPU_ANY_SHSTK_FLAGS },
1073   { STRING_COMMA_LEN ("nomovdiri"), CPU_ANY_MOVDIRI_FLAGS },
1074   { STRING_COMMA_LEN ("nomovdir64b"), CPU_ANY_MOVDIR64B_FLAGS },
1075 };
1076
1077 #ifdef I386COFF
1078 /* Like s_lcomm_internal in gas/read.c but the alignment string
1079    is allowed to be optional.  */
1080
1081 static symbolS *
1082 pe_lcomm_internal (int needs_align, symbolS *symbolP, addressT size)
1083 {
1084   addressT align = 0;
1085
1086   SKIP_WHITESPACE ();
1087
1088   if (needs_align
1089       && *input_line_pointer == ',')
1090     {
1091       align = parse_align (needs_align - 1);
1092
1093       if (align == (addressT) -1)
1094         return NULL;
1095     }
1096   else
1097     {
1098       if (size >= 8)
1099         align = 3;
1100       else if (size >= 4)
1101         align = 2;
1102       else if (size >= 2)
1103         align = 1;
1104       else
1105         align = 0;
1106     }
1107
1108   bss_alloc (symbolP, size, align);
1109   return symbolP;
1110 }
1111
1112 static void
1113 pe_lcomm (int needs_align)
1114 {
1115   s_comm_internal (needs_align * 2, pe_lcomm_internal);
1116 }
1117 #endif
1118
1119 const pseudo_typeS md_pseudo_table[] =
1120 {
1121 #if !defined(OBJ_AOUT) && !defined(USE_ALIGN_PTWO)
1122   {"align", s_align_bytes, 0},
1123 #else
1124   {"align", s_align_ptwo, 0},
1125 #endif
1126   {"arch", set_cpu_arch, 0},
1127 #ifndef I386COFF
1128   {"bss", s_bss, 0},
1129 #else
1130   {"lcomm", pe_lcomm, 1},
1131 #endif
1132   {"ffloat", float_cons, 'f'},
1133   {"dfloat", float_cons, 'd'},
1134   {"tfloat", float_cons, 'x'},
1135   {"value", cons, 2},
1136   {"slong", signed_cons, 4},
1137   {"noopt", s_ignore, 0},
1138   {"optim", s_ignore, 0},
1139   {"code16gcc", set_16bit_gcc_code_flag, CODE_16BIT},
1140   {"code16", set_code_flag, CODE_16BIT},
1141   {"code32", set_code_flag, CODE_32BIT},
1142 #ifdef BFD64
1143   {"code64", set_code_flag, CODE_64BIT},
1144 #endif
1145   {"intel_syntax", set_intel_syntax, 1},
1146   {"att_syntax", set_intel_syntax, 0},
1147   {"intel_mnemonic", set_intel_mnemonic, 1},
1148   {"att_mnemonic", set_intel_mnemonic, 0},
1149   {"allow_index_reg", set_allow_index_reg, 1},
1150   {"disallow_index_reg", set_allow_index_reg, 0},
1151   {"sse_check", set_check, 0},
1152   {"operand_check", set_check, 1},
1153 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
1154   {"largecomm", handle_large_common, 0},
1155 #else
1156   {"file", dwarf2_directive_file, 0},
1157   {"loc", dwarf2_directive_loc, 0},
1158   {"loc_mark_labels", dwarf2_directive_loc_mark_labels, 0},
1159 #endif
1160 #ifdef TE_PE
1161   {"secrel32", pe_directive_secrel, 0},
1162 #endif
1163   {0, 0, 0}
1164 };
1165
1166 /* For interface with expression ().  */
1167 extern char *input_line_pointer;
1168
1169 /* Hash table for instruction mnemonic lookup.  */
1170 static struct hash_control *op_hash;
1171
1172 /* Hash table for register lookup.  */
1173 static struct hash_control *reg_hash;
1174 \f
1175   /* Various efficient no-op patterns for aligning code labels.
1176      Note: Don't try to assemble the instructions in the comments.
1177      0L and 0w are not legal.  */
1178 static const unsigned char f32_1[] =
1179   {0x90};                               /* nop                  */
1180 static const unsigned char f32_2[] =
1181   {0x66,0x90};                          /* xchg %ax,%ax         */
1182 static const unsigned char f32_3[] =
1183   {0x8d,0x76,0x00};                     /* leal 0(%esi),%esi    */
1184 static const unsigned char f32_4[] =
1185   {0x8d,0x74,0x26,0x00};                /* leal 0(%esi,1),%esi  */
1186 static const unsigned char f32_6[] =
1187   {0x8d,0xb6,0x00,0x00,0x00,0x00};      /* leal 0L(%esi),%esi   */
1188 static const unsigned char f32_7[] =
1189   {0x8d,0xb4,0x26,0x00,0x00,0x00,0x00}; /* leal 0L(%esi,1),%esi */
1190 static const unsigned char f16_3[] =
1191   {0x8d,0x74,0x00};                     /* lea 0(%si),%si       */
1192 static const unsigned char f16_4[] =
1193   {0x8d,0xb4,0x00,0x00};                /* lea 0W(%si),%si      */
1194 static const unsigned char jump_disp8[] =
1195   {0xeb};                               /* jmp disp8           */
1196 static const unsigned char jump32_disp32[] =
1197   {0xe9};                               /* jmp disp32          */
1198 static const unsigned char jump16_disp32[] =
1199   {0x66,0xe9};                          /* jmp disp32          */
1200 /* 32-bit NOPs patterns.  */
1201 static const unsigned char *const f32_patt[] = {
1202   f32_1, f32_2, f32_3, f32_4, NULL, f32_6, f32_7
1203 };
1204 /* 16-bit NOPs patterns.  */
1205 static const unsigned char *const f16_patt[] = {
1206   f32_1, f32_2, f16_3, f16_4
1207 };
1208 /* nopl (%[re]ax) */
1209 static const unsigned char alt_3[] =
1210   {0x0f,0x1f,0x00};
1211 /* nopl 0(%[re]ax) */
1212 static const unsigned char alt_4[] =
1213   {0x0f,0x1f,0x40,0x00};
1214 /* nopl 0(%[re]ax,%[re]ax,1) */
1215 static const unsigned char alt_5[] =
1216   {0x0f,0x1f,0x44,0x00,0x00};
1217 /* nopw 0(%[re]ax,%[re]ax,1) */
1218 static const unsigned char alt_6[] =
1219   {0x66,0x0f,0x1f,0x44,0x00,0x00};
1220 /* nopl 0L(%[re]ax) */
1221 static const unsigned char alt_7[] =
1222   {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
1223 /* nopl 0L(%[re]ax,%[re]ax,1) */
1224 static const unsigned char alt_8[] =
1225   {0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
1226 /* nopw 0L(%[re]ax,%[re]ax,1) */
1227 static const unsigned char alt_9[] =
1228   {0x66,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
1229 /* nopw %cs:0L(%[re]ax,%[re]ax,1) */
1230 static const unsigned char alt_10[] =
1231   {0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
1232 /* data16 nopw %cs:0L(%eax,%eax,1) */
1233 static const unsigned char alt_11[] =
1234   {0x66,0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
1235 /* 32-bit and 64-bit NOPs patterns.  */
1236 static const unsigned char *const alt_patt[] = {
1237   f32_1, f32_2, alt_3, alt_4, alt_5, alt_6, alt_7, alt_8,
1238   alt_9, alt_10, alt_11
1239 };
1240
1241 /* Genenerate COUNT bytes of NOPs to WHERE from PATT with the maximum
1242    size of a single NOP instruction MAX_SINGLE_NOP_SIZE.  */
1243
1244 static void
1245 i386_output_nops (char *where, const unsigned char *const *patt,
1246                   int count, int max_single_nop_size)
1247
1248 {
1249   /* Place the longer NOP first.  */
1250   int last;
1251   int offset;
1252   const unsigned char *nops =  patt[max_single_nop_size - 1];
1253
1254   /* Use the smaller one if the requsted one isn't available.  */
1255   if (nops == NULL)
1256     {
1257       max_single_nop_size--;
1258       nops = patt[max_single_nop_size - 1];
1259     }
1260
1261   last = count % max_single_nop_size;
1262
1263   count -= last;
1264   for (offset = 0; offset < count; offset += max_single_nop_size)
1265     memcpy (where + offset, nops, max_single_nop_size);
1266
1267   if (last)
1268     {
1269       nops = patt[last - 1];
1270       if (nops == NULL)
1271         {
1272           /* Use the smaller one plus one-byte NOP if the needed one
1273              isn't available.  */
1274           last--;
1275           nops = patt[last - 1];
1276           memcpy (where + offset, nops, last);
1277           where[offset + last] = *patt[0];
1278         }
1279       else
1280         memcpy (where + offset, nops, last);
1281     }
1282 }
1283
1284 static INLINE int
1285 fits_in_imm7 (offsetT num)
1286 {
1287   return (num & 0x7f) == num;
1288 }
1289
1290 static INLINE int
1291 fits_in_imm31 (offsetT num)
1292 {
1293   return (num & 0x7fffffff) == num;
1294 }
1295
1296 /* Genenerate COUNT bytes of NOPs to WHERE with the maximum size of a
1297    single NOP instruction LIMIT.  */
1298
1299 void
1300 i386_generate_nops (fragS *fragP, char *where, offsetT count, int limit)
1301 {
1302   const unsigned char *const *patt = NULL;
1303   int max_single_nop_size;
1304   /* Maximum number of NOPs before switching to jump over NOPs.  */
1305   int max_number_of_nops;
1306
1307   switch (fragP->fr_type)
1308     {
1309     case rs_fill_nop:
1310     case rs_align_code:
1311       break;
1312     default:
1313       return;
1314     }
1315
1316   /* We need to decide which NOP sequence to use for 32bit and
1317      64bit. When -mtune= is used:
1318
1319      1. For PROCESSOR_I386, PROCESSOR_I486, PROCESSOR_PENTIUM and
1320      PROCESSOR_GENERIC32, f32_patt will be used.
1321      2. For the rest, alt_patt will be used.
1322
1323      When -mtune= isn't used, alt_patt will be used if
1324      cpu_arch_isa_flags has CpuNop.  Otherwise, f32_patt will
1325      be used.
1326
1327      When -march= or .arch is used, we can't use anything beyond
1328      cpu_arch_isa_flags.   */
1329
1330   if (flag_code == CODE_16BIT)
1331     {
1332       patt = f16_patt;
1333       max_single_nop_size = sizeof (f16_patt) / sizeof (f16_patt[0]);
1334       /* Limit number of NOPs to 2 in 16-bit mode.  */
1335       max_number_of_nops = 2;
1336     }
1337   else
1338     {
1339       if (fragP->tc_frag_data.isa == PROCESSOR_UNKNOWN)
1340         {
1341           /* PROCESSOR_UNKNOWN means that all ISAs may be used.  */
1342           switch (cpu_arch_tune)
1343             {
1344             case PROCESSOR_UNKNOWN:
1345               /* We use cpu_arch_isa_flags to check if we SHOULD
1346                  optimize with nops.  */
1347               if (fragP->tc_frag_data.isa_flags.bitfield.cpunop)
1348                 patt = alt_patt;
1349               else
1350                 patt = f32_patt;
1351               break;
1352             case PROCESSOR_PENTIUM4:
1353             case PROCESSOR_NOCONA:
1354             case PROCESSOR_CORE:
1355             case PROCESSOR_CORE2:
1356             case PROCESSOR_COREI7:
1357             case PROCESSOR_L1OM:
1358             case PROCESSOR_K1OM:
1359             case PROCESSOR_GENERIC64:
1360             case PROCESSOR_K6:
1361             case PROCESSOR_ATHLON:
1362             case PROCESSOR_K8:
1363             case PROCESSOR_AMDFAM10:
1364             case PROCESSOR_BD:
1365             case PROCESSOR_ZNVER:
1366             case PROCESSOR_BT:
1367               patt = alt_patt;
1368               break;
1369             case PROCESSOR_I386:
1370             case PROCESSOR_I486:
1371             case PROCESSOR_PENTIUM:
1372             case PROCESSOR_PENTIUMPRO:
1373             case PROCESSOR_IAMCU:
1374             case PROCESSOR_GENERIC32:
1375               patt = f32_patt;
1376               break;
1377             }
1378         }
1379       else
1380         {
1381           switch (fragP->tc_frag_data.tune)
1382             {
1383             case PROCESSOR_UNKNOWN:
1384               /* When cpu_arch_isa is set, cpu_arch_tune shouldn't be
1385                  PROCESSOR_UNKNOWN.  */
1386               abort ();
1387               break;
1388
1389             case PROCESSOR_I386:
1390             case PROCESSOR_I486:
1391             case PROCESSOR_PENTIUM:
1392             case PROCESSOR_IAMCU:
1393             case PROCESSOR_K6:
1394             case PROCESSOR_ATHLON:
1395             case PROCESSOR_K8:
1396             case PROCESSOR_AMDFAM10:
1397             case PROCESSOR_BD:
1398             case PROCESSOR_ZNVER:
1399             case PROCESSOR_BT:
1400             case PROCESSOR_GENERIC32:
1401               /* We use cpu_arch_isa_flags to check if we CAN optimize
1402                  with nops.  */
1403               if (fragP->tc_frag_data.isa_flags.bitfield.cpunop)
1404                 patt = alt_patt;
1405               else
1406                 patt = f32_patt;
1407               break;
1408             case PROCESSOR_PENTIUMPRO:
1409             case PROCESSOR_PENTIUM4:
1410             case PROCESSOR_NOCONA:
1411             case PROCESSOR_CORE:
1412             case PROCESSOR_CORE2:
1413             case PROCESSOR_COREI7:
1414             case PROCESSOR_L1OM:
1415             case PROCESSOR_K1OM:
1416               if (fragP->tc_frag_data.isa_flags.bitfield.cpunop)
1417                 patt = alt_patt;
1418               else
1419                 patt = f32_patt;
1420               break;
1421             case PROCESSOR_GENERIC64:
1422               patt = alt_patt;
1423               break;
1424             }
1425         }
1426
1427       if (patt == f32_patt)
1428         {
1429           max_single_nop_size = sizeof (f32_patt) / sizeof (f32_patt[0]);
1430           /* Limit number of NOPs to 2 for older processors.  */
1431           max_number_of_nops = 2;
1432         }
1433       else
1434         {
1435           max_single_nop_size = sizeof (alt_patt) / sizeof (alt_patt[0]);
1436           /* Limit number of NOPs to 7 for newer processors.  */
1437           max_number_of_nops = 7;
1438         }
1439     }
1440
1441   if (limit == 0)
1442     limit = max_single_nop_size;
1443
1444   if (fragP->fr_type == rs_fill_nop)
1445     {
1446       /* Output NOPs for .nop directive.  */
1447       if (limit > max_single_nop_size)
1448         {
1449           as_bad_where (fragP->fr_file, fragP->fr_line,
1450                         _("invalid single nop size: %d "
1451                           "(expect within [0, %d])"),
1452                         limit, max_single_nop_size);
1453           return;
1454         }
1455     }
1456   else
1457     fragP->fr_var = count;
1458
1459   if ((count / max_single_nop_size) > max_number_of_nops)
1460     {
1461       /* Generate jump over NOPs.  */
1462       offsetT disp = count - 2;
1463       if (fits_in_imm7 (disp))
1464         {
1465           /* Use "jmp disp8" if possible.  */
1466           count = disp;
1467           where[0] = jump_disp8[0];
1468           where[1] = count;
1469           where += 2;
1470         }
1471       else
1472         {
1473           unsigned int size_of_jump;
1474
1475           if (flag_code == CODE_16BIT)
1476             {
1477               where[0] = jump16_disp32[0];
1478               where[1] = jump16_disp32[1];
1479               size_of_jump = 2;
1480             }
1481           else
1482             {
1483               where[0] = jump32_disp32[0];
1484               size_of_jump = 1;
1485             }
1486
1487           count -= size_of_jump + 4;
1488           if (!fits_in_imm31 (count))
1489             {
1490               as_bad_where (fragP->fr_file, fragP->fr_line,
1491                             _("jump over nop padding out of range"));
1492               return;
1493             }
1494
1495           md_number_to_chars (where + size_of_jump, count, 4);
1496           where += size_of_jump + 4;
1497         }
1498     }
1499
1500   /* Generate multiple NOPs.  */
1501   i386_output_nops (where, patt, count, limit);
1502 }
1503
1504 static INLINE int
1505 operand_type_all_zero (const union i386_operand_type *x)
1506 {
1507   switch (ARRAY_SIZE(x->array))
1508     {
1509     case 3:
1510       if (x->array[2])
1511         return 0;
1512       /* Fall through.  */
1513     case 2:
1514       if (x->array[1])
1515         return 0;
1516       /* Fall through.  */
1517     case 1:
1518       return !x->array[0];
1519     default:
1520       abort ();
1521     }
1522 }
1523
1524 static INLINE void
1525 operand_type_set (union i386_operand_type *x, unsigned int v)
1526 {
1527   switch (ARRAY_SIZE(x->array))
1528     {
1529     case 3:
1530       x->array[2] = v;
1531       /* Fall through.  */
1532     case 2:
1533       x->array[1] = v;
1534       /* Fall through.  */
1535     case 1:
1536       x->array[0] = v;
1537       /* Fall through.  */
1538       break;
1539     default:
1540       abort ();
1541     }
1542 }
1543
1544 static INLINE int
1545 operand_type_equal (const union i386_operand_type *x,
1546                     const union i386_operand_type *y)
1547 {
1548   switch (ARRAY_SIZE(x->array))
1549     {
1550     case 3:
1551       if (x->array[2] != y->array[2])
1552         return 0;
1553       /* Fall through.  */
1554     case 2:
1555       if (x->array[1] != y->array[1])
1556         return 0;
1557       /* Fall through.  */
1558     case 1:
1559       return x->array[0] == y->array[0];
1560       break;
1561     default:
1562       abort ();
1563     }
1564 }
1565
1566 static INLINE int
1567 cpu_flags_all_zero (const union i386_cpu_flags *x)
1568 {
1569   switch (ARRAY_SIZE(x->array))
1570     {
1571     case 4:
1572       if (x->array[3])
1573         return 0;
1574       /* Fall through.  */
1575     case 3:
1576       if (x->array[2])
1577         return 0;
1578       /* Fall through.  */
1579     case 2:
1580       if (x->array[1])
1581         return 0;
1582       /* Fall through.  */
1583     case 1:
1584       return !x->array[0];
1585     default:
1586       abort ();
1587     }
1588 }
1589
1590 static INLINE int
1591 cpu_flags_equal (const union i386_cpu_flags *x,
1592                  const union i386_cpu_flags *y)
1593 {
1594   switch (ARRAY_SIZE(x->array))
1595     {
1596     case 4:
1597       if (x->array[3] != y->array[3])
1598         return 0;
1599       /* Fall through.  */
1600     case 3:
1601       if (x->array[2] != y->array[2])
1602         return 0;
1603       /* Fall through.  */
1604     case 2:
1605       if (x->array[1] != y->array[1])
1606         return 0;
1607       /* Fall through.  */
1608     case 1:
1609       return x->array[0] == y->array[0];
1610       break;
1611     default:
1612       abort ();
1613     }
1614 }
1615
1616 static INLINE int
1617 cpu_flags_check_cpu64 (i386_cpu_flags f)
1618 {
1619   return !((flag_code == CODE_64BIT && f.bitfield.cpuno64)
1620            || (flag_code != CODE_64BIT && f.bitfield.cpu64));
1621 }
1622
1623 static INLINE i386_cpu_flags
1624 cpu_flags_and (i386_cpu_flags x, i386_cpu_flags y)
1625 {
1626   switch (ARRAY_SIZE (x.array))
1627     {
1628     case 4:
1629       x.array [3] &= y.array [3];
1630       /* Fall through.  */
1631     case 3:
1632       x.array [2] &= y.array [2];
1633       /* Fall through.  */
1634     case 2:
1635       x.array [1] &= y.array [1];
1636       /* Fall through.  */
1637     case 1:
1638       x.array [0] &= y.array [0];
1639       break;
1640     default:
1641       abort ();
1642     }
1643   return x;
1644 }
1645
1646 static INLINE i386_cpu_flags
1647 cpu_flags_or (i386_cpu_flags x, i386_cpu_flags y)
1648 {
1649   switch (ARRAY_SIZE (x.array))
1650     {
1651     case 4:
1652       x.array [3] |= y.array [3];
1653       /* Fall through.  */
1654     case 3:
1655       x.array [2] |= y.array [2];
1656       /* Fall through.  */
1657     case 2:
1658       x.array [1] |= y.array [1];
1659       /* Fall through.  */
1660     case 1:
1661       x.array [0] |= y.array [0];
1662       break;
1663     default:
1664       abort ();
1665     }
1666   return x;
1667 }
1668
1669 static INLINE i386_cpu_flags
1670 cpu_flags_and_not (i386_cpu_flags x, i386_cpu_flags y)
1671 {
1672   switch (ARRAY_SIZE (x.array))
1673     {
1674     case 4:
1675       x.array [3] &= ~y.array [3];
1676       /* Fall through.  */
1677     case 3:
1678       x.array [2] &= ~y.array [2];
1679       /* Fall through.  */
1680     case 2:
1681       x.array [1] &= ~y.array [1];
1682       /* Fall through.  */
1683     case 1:
1684       x.array [0] &= ~y.array [0];
1685       break;
1686     default:
1687       abort ();
1688     }
1689   return x;
1690 }
1691
1692 #define CPU_FLAGS_ARCH_MATCH            0x1
1693 #define CPU_FLAGS_64BIT_MATCH           0x2
1694
1695 #define CPU_FLAGS_PERFECT_MATCH \
1696   (CPU_FLAGS_ARCH_MATCH | CPU_FLAGS_64BIT_MATCH)
1697
1698 /* Return CPU flags match bits. */
1699
1700 static int
1701 cpu_flags_match (const insn_template *t)
1702 {
1703   i386_cpu_flags x = t->cpu_flags;
1704   int match = cpu_flags_check_cpu64 (x) ? CPU_FLAGS_64BIT_MATCH : 0;
1705
1706   x.bitfield.cpu64 = 0;
1707   x.bitfield.cpuno64 = 0;
1708
1709   if (cpu_flags_all_zero (&x))
1710     {
1711       /* This instruction is available on all archs.  */
1712       match |= CPU_FLAGS_ARCH_MATCH;
1713     }
1714   else
1715     {
1716       /* This instruction is available only on some archs.  */
1717       i386_cpu_flags cpu = cpu_arch_flags;
1718
1719       /* AVX512VL is no standalone feature - match it and then strip it.  */
1720       if (x.bitfield.cpuavx512vl && !cpu.bitfield.cpuavx512vl)
1721         return match;
1722       x.bitfield.cpuavx512vl = 0;
1723
1724       cpu = cpu_flags_and (x, cpu);
1725       if (!cpu_flags_all_zero (&cpu))
1726         {
1727           if (x.bitfield.cpuavx)
1728             {
1729               /* We need to check a few extra flags with AVX.  */
1730               if (cpu.bitfield.cpuavx
1731                   && (!t->opcode_modifier.sse2avx || sse2avx)
1732                   && (!x.bitfield.cpuaes || cpu.bitfield.cpuaes)
1733                   && (!x.bitfield.cpugfni || cpu.bitfield.cpugfni)
1734                   && (!x.bitfield.cpupclmul || cpu.bitfield.cpupclmul))
1735                 match |= CPU_FLAGS_ARCH_MATCH;
1736             }
1737           else if (x.bitfield.cpuavx512f)
1738             {
1739               /* We need to check a few extra flags with AVX512F.  */
1740               if (cpu.bitfield.cpuavx512f
1741                   && (!x.bitfield.cpugfni || cpu.bitfield.cpugfni)
1742                   && (!x.bitfield.cpuvaes || cpu.bitfield.cpuvaes)
1743                   && (!x.bitfield.cpuvpclmulqdq || cpu.bitfield.cpuvpclmulqdq))
1744                 match |= CPU_FLAGS_ARCH_MATCH;
1745             }
1746           else
1747             match |= CPU_FLAGS_ARCH_MATCH;
1748         }
1749     }
1750   return match;
1751 }
1752
1753 static INLINE i386_operand_type
1754 operand_type_and (i386_operand_type x, i386_operand_type y)
1755 {
1756   switch (ARRAY_SIZE (x.array))
1757     {
1758     case 3:
1759       x.array [2] &= y.array [2];
1760       /* Fall through.  */
1761     case 2:
1762       x.array [1] &= y.array [1];
1763       /* Fall through.  */
1764     case 1:
1765       x.array [0] &= y.array [0];
1766       break;
1767     default:
1768       abort ();
1769     }
1770   return x;
1771 }
1772
1773 static INLINE i386_operand_type
1774 operand_type_and_not (i386_operand_type x, i386_operand_type y)
1775 {
1776   switch (ARRAY_SIZE (x.array))
1777     {
1778     case 3:
1779       x.array [2] &= ~y.array [2];
1780       /* Fall through.  */
1781     case 2:
1782       x.array [1] &= ~y.array [1];
1783       /* Fall through.  */
1784     case 1:
1785       x.array [0] &= ~y.array [0];
1786       break;
1787     default:
1788       abort ();
1789     }
1790   return x;
1791 }
1792
1793 static INLINE i386_operand_type
1794 operand_type_or (i386_operand_type x, i386_operand_type y)
1795 {
1796   switch (ARRAY_SIZE (x.array))
1797     {
1798     case 3:
1799       x.array [2] |= y.array [2];
1800       /* Fall through.  */
1801     case 2:
1802       x.array [1] |= y.array [1];
1803       /* Fall through.  */
1804     case 1:
1805       x.array [0] |= y.array [0];
1806       break;
1807     default:
1808       abort ();
1809     }
1810   return x;
1811 }
1812
1813 static INLINE i386_operand_type
1814 operand_type_xor (i386_operand_type x, i386_operand_type y)
1815 {
1816   switch (ARRAY_SIZE (x.array))
1817     {
1818     case 3:
1819       x.array [2] ^= y.array [2];
1820       /* Fall through.  */
1821     case 2:
1822       x.array [1] ^= y.array [1];
1823       /* Fall through.  */
1824     case 1:
1825       x.array [0] ^= y.array [0];
1826       break;
1827     default:
1828       abort ();
1829     }
1830   return x;
1831 }
1832
1833 static const i386_operand_type acc32 = OPERAND_TYPE_ACC32;
1834 static const i386_operand_type acc64 = OPERAND_TYPE_ACC64;
1835 static const i386_operand_type inoutportreg
1836   = OPERAND_TYPE_INOUTPORTREG;
1837 static const i386_operand_type reg16_inoutportreg
1838   = OPERAND_TYPE_REG16_INOUTPORTREG;
1839 static const i386_operand_type disp16 = OPERAND_TYPE_DISP16;
1840 static const i386_operand_type disp32 = OPERAND_TYPE_DISP32;
1841 static const i386_operand_type disp32s = OPERAND_TYPE_DISP32S;
1842 static const i386_operand_type disp16_32 = OPERAND_TYPE_DISP16_32;
1843 static const i386_operand_type anydisp
1844   = OPERAND_TYPE_ANYDISP;
1845 static const i386_operand_type regxmm = OPERAND_TYPE_REGXMM;
1846 static const i386_operand_type regmask = OPERAND_TYPE_REGMASK;
1847 static const i386_operand_type imm8 = OPERAND_TYPE_IMM8;
1848 static const i386_operand_type imm8s = OPERAND_TYPE_IMM8S;
1849 static const i386_operand_type imm16 = OPERAND_TYPE_IMM16;
1850 static const i386_operand_type imm32 = OPERAND_TYPE_IMM32;
1851 static const i386_operand_type imm32s = OPERAND_TYPE_IMM32S;
1852 static const i386_operand_type imm64 = OPERAND_TYPE_IMM64;
1853 static const i386_operand_type imm16_32 = OPERAND_TYPE_IMM16_32;
1854 static const i386_operand_type imm16_32s = OPERAND_TYPE_IMM16_32S;
1855 static const i386_operand_type imm16_32_32s = OPERAND_TYPE_IMM16_32_32S;
1856 static const i386_operand_type vec_imm4 = OPERAND_TYPE_VEC_IMM4;
1857
1858 enum operand_type
1859 {
1860   reg,
1861   imm,
1862   disp,
1863   anymem
1864 };
1865
1866 static INLINE int
1867 operand_type_check (i386_operand_type t, enum operand_type c)
1868 {
1869   switch (c)
1870     {
1871     case reg:
1872       return t.bitfield.reg;
1873
1874     case imm:
1875       return (t.bitfield.imm8
1876               || t.bitfield.imm8s
1877               || t.bitfield.imm16
1878               || t.bitfield.imm32
1879               || t.bitfield.imm32s
1880               || t.bitfield.imm64);
1881
1882     case disp:
1883       return (t.bitfield.disp8
1884               || t.bitfield.disp16
1885               || t.bitfield.disp32
1886               || t.bitfield.disp32s
1887               || t.bitfield.disp64);
1888
1889     case anymem:
1890       return (t.bitfield.disp8
1891               || t.bitfield.disp16
1892               || t.bitfield.disp32
1893               || t.bitfield.disp32s
1894               || t.bitfield.disp64
1895               || t.bitfield.baseindex);
1896
1897     default:
1898       abort ();
1899     }
1900
1901   return 0;
1902 }
1903
1904 /* Return 1 if there is no conflict in 8bit/16bit/32bit/64bit/80bit on
1905    operand J for instruction template T.  */
1906
1907 static INLINE int
1908 match_reg_size (const insn_template *t, unsigned int j)
1909 {
1910   return !((i.types[j].bitfield.byte
1911             && !t->operand_types[j].bitfield.byte)
1912            || (i.types[j].bitfield.word
1913                && !t->operand_types[j].bitfield.word)
1914            || (i.types[j].bitfield.dword
1915                && !t->operand_types[j].bitfield.dword)
1916            || (i.types[j].bitfield.qword
1917                && !t->operand_types[j].bitfield.qword)
1918            || (i.types[j].bitfield.tbyte
1919                && !t->operand_types[j].bitfield.tbyte));
1920 }
1921
1922 /* Return 1 if there is no conflict in SIMD register on
1923    operand J for instruction template T.  */
1924
1925 static INLINE int
1926 match_simd_size (const insn_template *t, unsigned int j)
1927 {
1928   return !((i.types[j].bitfield.xmmword
1929             && !t->operand_types[j].bitfield.xmmword)
1930            || (i.types[j].bitfield.ymmword
1931                && !t->operand_types[j].bitfield.ymmword)
1932            || (i.types[j].bitfield.zmmword
1933                && !t->operand_types[j].bitfield.zmmword));
1934 }
1935
1936 /* Return 1 if there is no conflict in any size on operand J for
1937    instruction template T.  */
1938
1939 static INLINE int
1940 match_mem_size (const insn_template *t, unsigned int j)
1941 {
1942   return (match_reg_size (t, j)
1943           && !((i.types[j].bitfield.unspecified
1944                 && !i.broadcast
1945                 && !t->operand_types[j].bitfield.unspecified)
1946                || (i.types[j].bitfield.fword
1947                    && !t->operand_types[j].bitfield.fword)
1948                /* For scalar opcode templates to allow register and memory
1949                   operands at the same time, some special casing is needed
1950                   here.  Also for v{,p}broadcast*, {,v}pmov{s,z}*, and
1951                   down-conversion vpmov*.  */
1952                || ((t->operand_types[j].bitfield.regsimd
1953                     && !t->opcode_modifier.broadcast
1954                     && (t->operand_types[j].bitfield.byte
1955                         || t->operand_types[j].bitfield.word
1956                         || t->operand_types[j].bitfield.dword
1957                         || t->operand_types[j].bitfield.qword))
1958                    ? (i.types[j].bitfield.xmmword
1959                       || i.types[j].bitfield.ymmword
1960                       || i.types[j].bitfield.zmmword)
1961                    : !match_simd_size(t, j))));
1962 }
1963
1964 /* Return 1 if there is no size conflict on any operands for
1965    instruction template T.  */
1966
1967 static INLINE int
1968 operand_size_match (const insn_template *t)
1969 {
1970   unsigned int j;
1971   int match = 1;
1972
1973   /* Don't check jump instructions.  */
1974   if (t->opcode_modifier.jump
1975       || t->opcode_modifier.jumpbyte
1976       || t->opcode_modifier.jumpdword
1977       || t->opcode_modifier.jumpintersegment)
1978     return match;
1979
1980   /* Check memory and accumulator operand size.  */
1981   for (j = 0; j < i.operands; j++)
1982     {
1983       if (!i.types[j].bitfield.reg && !i.types[j].bitfield.regsimd
1984           && t->operand_types[j].bitfield.anysize)
1985         continue;
1986
1987       if (t->operand_types[j].bitfield.reg
1988           && !match_reg_size (t, j))
1989         {
1990           match = 0;
1991           break;
1992         }
1993
1994       if (t->operand_types[j].bitfield.regsimd
1995           && !match_simd_size (t, j))
1996         {
1997           match = 0;
1998           break;
1999         }
2000
2001       if (t->operand_types[j].bitfield.acc
2002           && (!match_reg_size (t, j) || !match_simd_size (t, j)))
2003         {
2004           match = 0;
2005           break;
2006         }
2007
2008       if (i.types[j].bitfield.mem && !match_mem_size (t, j))
2009         {
2010           match = 0;
2011           break;
2012         }
2013     }
2014
2015   if (match)
2016     return match;
2017   else if (!t->opcode_modifier.d)
2018     {
2019 mismatch:
2020       i.error = operand_size_mismatch;
2021       return 0;
2022     }
2023
2024   /* Check reverse.  */
2025   gas_assert (i.operands == 2);
2026
2027   match = 1;
2028   for (j = 0; j < 2; j++)
2029     {
2030       if ((t->operand_types[j].bitfield.reg
2031            || t->operand_types[j].bitfield.acc)
2032           && !match_reg_size (t, j ? 0 : 1))
2033         goto mismatch;
2034
2035       if (i.types[j].bitfield.mem
2036           && !match_mem_size (t, j ? 0 : 1))
2037         goto mismatch;
2038     }
2039
2040   return match;
2041 }
2042
2043 static INLINE int
2044 operand_type_match (i386_operand_type overlap,
2045                     i386_operand_type given)
2046 {
2047   i386_operand_type temp = overlap;
2048
2049   temp.bitfield.jumpabsolute = 0;
2050   temp.bitfield.unspecified = 0;
2051   temp.bitfield.byte = 0;
2052   temp.bitfield.word = 0;
2053   temp.bitfield.dword = 0;
2054   temp.bitfield.fword = 0;
2055   temp.bitfield.qword = 0;
2056   temp.bitfield.tbyte = 0;
2057   temp.bitfield.xmmword = 0;
2058   temp.bitfield.ymmword = 0;
2059   temp.bitfield.zmmword = 0;
2060   if (operand_type_all_zero (&temp))
2061     goto mismatch;
2062
2063   if (given.bitfield.baseindex == overlap.bitfield.baseindex
2064       && given.bitfield.jumpabsolute == overlap.bitfield.jumpabsolute)
2065     return 1;
2066
2067 mismatch:
2068   i.error = operand_type_mismatch;
2069   return 0;
2070 }
2071
2072 /* If given types g0 and g1 are registers they must be of the same type
2073    unless the expected operand type register overlap is null.
2074    Memory operand size of certain SIMD instructions is also being checked
2075    here.  */
2076
2077 static INLINE int
2078 operand_type_register_match (i386_operand_type g0,
2079                              i386_operand_type t0,
2080                              i386_operand_type g1,
2081                              i386_operand_type t1)
2082 {
2083   if (!g0.bitfield.reg
2084       && !g0.bitfield.regsimd
2085       && (!operand_type_check (g0, anymem)
2086           || g0.bitfield.unspecified
2087           || !t0.bitfield.regsimd))
2088     return 1;
2089
2090   if (!g1.bitfield.reg
2091       && !g1.bitfield.regsimd
2092       && (!operand_type_check (g1, anymem)
2093           || g1.bitfield.unspecified
2094           || !t1.bitfield.regsimd))
2095     return 1;
2096
2097   if (g0.bitfield.byte == g1.bitfield.byte
2098       && g0.bitfield.word == g1.bitfield.word
2099       && g0.bitfield.dword == g1.bitfield.dword
2100       && g0.bitfield.qword == g1.bitfield.qword
2101       && g0.bitfield.xmmword == g1.bitfield.xmmword
2102       && g0.bitfield.ymmword == g1.bitfield.ymmword
2103       && g0.bitfield.zmmword == g1.bitfield.zmmword)
2104     return 1;
2105
2106   if (!(t0.bitfield.byte & t1.bitfield.byte)
2107       && !(t0.bitfield.word & t1.bitfield.word)
2108       && !(t0.bitfield.dword & t1.bitfield.dword)
2109       && !(t0.bitfield.qword & t1.bitfield.qword)
2110       && !(t0.bitfield.xmmword & t1.bitfield.xmmword)
2111       && !(t0.bitfield.ymmword & t1.bitfield.ymmword)
2112       && !(t0.bitfield.zmmword & t1.bitfield.zmmword))
2113     return 1;
2114
2115   i.error = register_type_mismatch;
2116
2117   return 0;
2118 }
2119
2120 static INLINE unsigned int
2121 register_number (const reg_entry *r)
2122 {
2123   unsigned int nr = r->reg_num;
2124
2125   if (r->reg_flags & RegRex)
2126     nr += 8;
2127
2128   if (r->reg_flags & RegVRex)
2129     nr += 16;
2130
2131   return nr;
2132 }
2133
2134 static INLINE unsigned int
2135 mode_from_disp_size (i386_operand_type t)
2136 {
2137   if (t.bitfield.disp8)
2138     return 1;
2139   else if (t.bitfield.disp16
2140            || t.bitfield.disp32
2141            || t.bitfield.disp32s)
2142     return 2;
2143   else
2144     return 0;
2145 }
2146
2147 static INLINE int
2148 fits_in_signed_byte (addressT num)
2149 {
2150   return num + 0x80 <= 0xff;
2151 }
2152
2153 static INLINE int
2154 fits_in_unsigned_byte (addressT num)
2155 {
2156   return num <= 0xff;
2157 }
2158
2159 static INLINE int
2160 fits_in_unsigned_word (addressT num)
2161 {
2162   return num <= 0xffff;
2163 }
2164
2165 static INLINE int
2166 fits_in_signed_word (addressT num)
2167 {
2168   return num + 0x8000 <= 0xffff;
2169 }
2170
2171 static INLINE int
2172 fits_in_signed_long (addressT num ATTRIBUTE_UNUSED)
2173 {
2174 #ifndef BFD64
2175   return 1;
2176 #else
2177   return num + 0x80000000 <= 0xffffffff;
2178 #endif
2179 }                               /* fits_in_signed_long() */
2180
2181 static INLINE int
2182 fits_in_unsigned_long (addressT num ATTRIBUTE_UNUSED)
2183 {
2184 #ifndef BFD64
2185   return 1;
2186 #else
2187   return num <= 0xffffffff;
2188 #endif
2189 }                               /* fits_in_unsigned_long() */
2190
2191 static INLINE int
2192 fits_in_disp8 (offsetT num)
2193 {
2194   int shift = i.memshift;
2195   unsigned int mask;
2196
2197   if (shift == -1)
2198     abort ();
2199
2200   mask = (1 << shift) - 1;
2201
2202   /* Return 0 if NUM isn't properly aligned.  */
2203   if ((num & mask))
2204     return 0;
2205
2206   /* Check if NUM will fit in 8bit after shift.  */
2207   return fits_in_signed_byte (num >> shift);
2208 }
2209
2210 static INLINE int
2211 fits_in_imm4 (offsetT num)
2212 {
2213   return (num & 0xf) == num;
2214 }
2215
2216 static i386_operand_type
2217 smallest_imm_type (offsetT num)
2218 {
2219   i386_operand_type t;
2220
2221   operand_type_set (&t, 0);
2222   t.bitfield.imm64 = 1;
2223
2224   if (cpu_arch_tune != PROCESSOR_I486 && num == 1)
2225     {
2226       /* This code is disabled on the 486 because all the Imm1 forms
2227          in the opcode table are slower on the i486.  They're the
2228          versions with the implicitly specified single-position
2229          displacement, which has another syntax if you really want to
2230          use that form.  */
2231       t.bitfield.imm1 = 1;
2232       t.bitfield.imm8 = 1;
2233       t.bitfield.imm8s = 1;
2234       t.bitfield.imm16 = 1;
2235       t.bitfield.imm32 = 1;
2236       t.bitfield.imm32s = 1;
2237     }
2238   else if (fits_in_signed_byte (num))
2239     {
2240       t.bitfield.imm8 = 1;
2241       t.bitfield.imm8s = 1;
2242       t.bitfield.imm16 = 1;
2243       t.bitfield.imm32 = 1;
2244       t.bitfield.imm32s = 1;
2245     }
2246   else if (fits_in_unsigned_byte (num))
2247     {
2248       t.bitfield.imm8 = 1;
2249       t.bitfield.imm16 = 1;
2250       t.bitfield.imm32 = 1;
2251       t.bitfield.imm32s = 1;
2252     }
2253   else if (fits_in_signed_word (num) || fits_in_unsigned_word (num))
2254     {
2255       t.bitfield.imm16 = 1;
2256       t.bitfield.imm32 = 1;
2257       t.bitfield.imm32s = 1;
2258     }
2259   else if (fits_in_signed_long (num))
2260     {
2261       t.bitfield.imm32 = 1;
2262       t.bitfield.imm32s = 1;
2263     }
2264   else if (fits_in_unsigned_long (num))
2265     t.bitfield.imm32 = 1;
2266
2267   return t;
2268 }
2269
2270 static offsetT
2271 offset_in_range (offsetT val, int size)
2272 {
2273   addressT mask;
2274
2275   switch (size)
2276     {
2277     case 1: mask = ((addressT) 1 <<  8) - 1; break;
2278     case 2: mask = ((addressT) 1 << 16) - 1; break;
2279     case 4: mask = ((addressT) 2 << 31) - 1; break;
2280 #ifdef BFD64
2281     case 8: mask = ((addressT) 2 << 63) - 1; break;
2282 #endif
2283     default: abort ();
2284     }
2285
2286 #ifdef BFD64
2287   /* If BFD64, sign extend val for 32bit address mode.  */
2288   if (flag_code != CODE_64BIT
2289       || i.prefix[ADDR_PREFIX])
2290     if ((val & ~(((addressT) 2 << 31) - 1)) == 0)
2291       val = (val ^ ((addressT) 1 << 31)) - ((addressT) 1 << 31);
2292 #endif
2293
2294   if ((val & ~mask) != 0 && (val & ~mask) != ~mask)
2295     {
2296       char buf1[40], buf2[40];
2297
2298       sprint_value (buf1, val);
2299       sprint_value (buf2, val & mask);
2300       as_warn (_("%s shortened to %s"), buf1, buf2);
2301     }
2302   return val & mask;
2303 }
2304
2305 enum PREFIX_GROUP
2306 {
2307   PREFIX_EXIST = 0,
2308   PREFIX_LOCK,
2309   PREFIX_REP,
2310   PREFIX_DS,
2311   PREFIX_OTHER
2312 };
2313
2314 /* Returns
2315    a. PREFIX_EXIST if attempting to add a prefix where one from the
2316    same class already exists.
2317    b. PREFIX_LOCK if lock prefix is added.
2318    c. PREFIX_REP if rep/repne prefix is added.
2319    d. PREFIX_DS if ds prefix is added.
2320    e. PREFIX_OTHER if other prefix is added.
2321  */
2322
2323 static enum PREFIX_GROUP
2324 add_prefix (unsigned int prefix)
2325 {
2326   enum PREFIX_GROUP ret = PREFIX_OTHER;
2327   unsigned int q;
2328
2329   if (prefix >= REX_OPCODE && prefix < REX_OPCODE + 16
2330       && flag_code == CODE_64BIT)
2331     {
2332       if ((i.prefix[REX_PREFIX] & prefix & REX_W)
2333           || (i.prefix[REX_PREFIX] & prefix & REX_R)
2334           || (i.prefix[REX_PREFIX] & prefix & REX_X)
2335           || (i.prefix[REX_PREFIX] & prefix & REX_B))
2336         ret = PREFIX_EXIST;
2337       q = REX_PREFIX;
2338     }
2339   else
2340     {
2341       switch (prefix)
2342         {
2343         default:
2344           abort ();
2345
2346         case DS_PREFIX_OPCODE:
2347           ret = PREFIX_DS;
2348           /* Fall through.  */
2349         case CS_PREFIX_OPCODE:
2350         case ES_PREFIX_OPCODE:
2351         case FS_PREFIX_OPCODE:
2352         case GS_PREFIX_OPCODE:
2353         case SS_PREFIX_OPCODE:
2354           q = SEG_PREFIX;
2355           break;
2356
2357         case REPNE_PREFIX_OPCODE:
2358         case REPE_PREFIX_OPCODE:
2359           q = REP_PREFIX;
2360           ret = PREFIX_REP;
2361           break;
2362
2363         case LOCK_PREFIX_OPCODE:
2364           q = LOCK_PREFIX;
2365           ret = PREFIX_LOCK;
2366           break;
2367
2368         case FWAIT_OPCODE:
2369           q = WAIT_PREFIX;
2370           break;
2371
2372         case ADDR_PREFIX_OPCODE:
2373           q = ADDR_PREFIX;
2374           break;
2375
2376         case DATA_PREFIX_OPCODE:
2377           q = DATA_PREFIX;
2378           break;
2379         }
2380       if (i.prefix[q] != 0)
2381         ret = PREFIX_EXIST;
2382     }
2383
2384   if (ret)
2385     {
2386       if (!i.prefix[q])
2387         ++i.prefixes;
2388       i.prefix[q] |= prefix;
2389     }
2390   else
2391     as_bad (_("same type of prefix used twice"));
2392
2393   return ret;
2394 }
2395
2396 static void
2397 update_code_flag (int value, int check)
2398 {
2399   PRINTF_LIKE ((*as_error));
2400
2401   flag_code = (enum flag_code) value;
2402   if (flag_code == CODE_64BIT)
2403     {
2404       cpu_arch_flags.bitfield.cpu64 = 1;
2405       cpu_arch_flags.bitfield.cpuno64 = 0;
2406     }
2407   else
2408     {
2409       cpu_arch_flags.bitfield.cpu64 = 0;
2410       cpu_arch_flags.bitfield.cpuno64 = 1;
2411     }
2412   if (value == CODE_64BIT && !cpu_arch_flags.bitfield.cpulm )
2413     {
2414       if (check)
2415         as_error = as_fatal;
2416       else
2417         as_error = as_bad;
2418       (*as_error) (_("64bit mode not supported on `%s'."),
2419                    cpu_arch_name ? cpu_arch_name : default_arch);
2420     }
2421   if (value == CODE_32BIT && !cpu_arch_flags.bitfield.cpui386)
2422     {
2423       if (check)
2424         as_error = as_fatal;
2425       else
2426         as_error = as_bad;
2427       (*as_error) (_("32bit mode not supported on `%s'."),
2428                    cpu_arch_name ? cpu_arch_name : default_arch);
2429     }
2430   stackop_size = '\0';
2431 }
2432
2433 static void
2434 set_code_flag (int value)
2435 {
2436   update_code_flag (value, 0);
2437 }
2438
2439 static void
2440 set_16bit_gcc_code_flag (int new_code_flag)
2441 {
2442   flag_code = (enum flag_code) new_code_flag;
2443   if (flag_code != CODE_16BIT)
2444     abort ();
2445   cpu_arch_flags.bitfield.cpu64 = 0;
2446   cpu_arch_flags.bitfield.cpuno64 = 1;
2447   stackop_size = LONG_MNEM_SUFFIX;
2448 }
2449
2450 static void
2451 set_intel_syntax (int syntax_flag)
2452 {
2453   /* Find out if register prefixing is specified.  */
2454   int ask_naked_reg = 0;
2455
2456   SKIP_WHITESPACE ();
2457   if (!is_end_of_line[(unsigned char) *input_line_pointer])
2458     {
2459       char *string;
2460       int e = get_symbol_name (&string);
2461
2462       if (strcmp (string, "prefix") == 0)
2463         ask_naked_reg = 1;
2464       else if (strcmp (string, "noprefix") == 0)
2465         ask_naked_reg = -1;
2466       else
2467         as_bad (_("bad argument to syntax directive."));
2468       (void) restore_line_pointer (e);
2469     }
2470   demand_empty_rest_of_line ();
2471
2472   intel_syntax = syntax_flag;
2473
2474   if (ask_naked_reg == 0)
2475     allow_naked_reg = (intel_syntax
2476                        && (bfd_get_symbol_leading_char (stdoutput) != '\0'));
2477   else
2478     allow_naked_reg = (ask_naked_reg < 0);
2479
2480   expr_set_rank (O_full_ptr, syntax_flag ? 10 : 0);
2481
2482   identifier_chars['%'] = intel_syntax && allow_naked_reg ? '%' : 0;
2483   identifier_chars['$'] = intel_syntax ? '$' : 0;
2484   register_prefix = allow_naked_reg ? "" : "%";
2485 }
2486
2487 static void
2488 set_intel_mnemonic (int mnemonic_flag)
2489 {
2490   intel_mnemonic = mnemonic_flag;
2491 }
2492
2493 static void
2494 set_allow_index_reg (int flag)
2495 {
2496   allow_index_reg = flag;
2497 }
2498
2499 static void
2500 set_check (int what)
2501 {
2502   enum check_kind *kind;
2503   const char *str;
2504
2505   if (what)
2506     {
2507       kind = &operand_check;
2508       str = "operand";
2509     }
2510   else
2511     {
2512       kind = &sse_check;
2513       str = "sse";
2514     }
2515
2516   SKIP_WHITESPACE ();
2517
2518   if (!is_end_of_line[(unsigned char) *input_line_pointer])
2519     {
2520       char *string;
2521       int e = get_symbol_name (&string);
2522
2523       if (strcmp (string, "none") == 0)
2524         *kind = check_none;
2525       else if (strcmp (string, "warning") == 0)
2526         *kind = check_warning;
2527       else if (strcmp (string, "error") == 0)
2528         *kind = check_error;
2529       else
2530         as_bad (_("bad argument to %s_check directive."), str);
2531       (void) restore_line_pointer (e);
2532     }
2533   else
2534     as_bad (_("missing argument for %s_check directive"), str);
2535
2536   demand_empty_rest_of_line ();
2537 }
2538
2539 static void
2540 check_cpu_arch_compatible (const char *name ATTRIBUTE_UNUSED,
2541                            i386_cpu_flags new_flag ATTRIBUTE_UNUSED)
2542 {
2543 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
2544   static const char *arch;
2545
2546   /* Intel LIOM is only supported on ELF.  */
2547   if (!IS_ELF)
2548     return;
2549
2550   if (!arch)
2551     {
2552       /* Use cpu_arch_name if it is set in md_parse_option.  Otherwise
2553          use default_arch.  */
2554       arch = cpu_arch_name;
2555       if (!arch)
2556         arch = default_arch;
2557     }
2558
2559   /* If we are targeting Intel MCU, we must enable it.  */
2560   if (get_elf_backend_data (stdoutput)->elf_machine_code != EM_IAMCU
2561       || new_flag.bitfield.cpuiamcu)
2562     return;
2563
2564   /* If we are targeting Intel L1OM, we must enable it.  */
2565   if (get_elf_backend_data (stdoutput)->elf_machine_code != EM_L1OM
2566       || new_flag.bitfield.cpul1om)
2567     return;
2568
2569   /* If we are targeting Intel K1OM, we must enable it.  */
2570   if (get_elf_backend_data (stdoutput)->elf_machine_code != EM_K1OM
2571       || new_flag.bitfield.cpuk1om)
2572     return;
2573
2574   as_bad (_("`%s' is not supported on `%s'"), name, arch);
2575 #endif
2576 }
2577
2578 static void
2579 set_cpu_arch (int dummy ATTRIBUTE_UNUSED)
2580 {
2581   SKIP_WHITESPACE ();
2582
2583   if (!is_end_of_line[(unsigned char) *input_line_pointer])
2584     {
2585       char *string;
2586       int e = get_symbol_name (&string);
2587       unsigned int j;
2588       i386_cpu_flags flags;
2589
2590       for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
2591         {
2592           if (strcmp (string, cpu_arch[j].name) == 0)
2593             {
2594               check_cpu_arch_compatible (string, cpu_arch[j].flags);
2595
2596               if (*string != '.')
2597                 {
2598                   cpu_arch_name = cpu_arch[j].name;
2599                   cpu_sub_arch_name = NULL;
2600                   cpu_arch_flags = cpu_arch[j].flags;
2601                   if (flag_code == CODE_64BIT)
2602                     {
2603                       cpu_arch_flags.bitfield.cpu64 = 1;
2604                       cpu_arch_flags.bitfield.cpuno64 = 0;
2605                     }
2606                   else
2607                     {
2608                       cpu_arch_flags.bitfield.cpu64 = 0;
2609                       cpu_arch_flags.bitfield.cpuno64 = 1;
2610                     }
2611                   cpu_arch_isa = cpu_arch[j].type;
2612                   cpu_arch_isa_flags = cpu_arch[j].flags;
2613                   if (!cpu_arch_tune_set)
2614                     {
2615                       cpu_arch_tune = cpu_arch_isa;
2616                       cpu_arch_tune_flags = cpu_arch_isa_flags;
2617                     }
2618                   break;
2619                 }
2620
2621               flags = cpu_flags_or (cpu_arch_flags,
2622                                     cpu_arch[j].flags);
2623
2624               if (!cpu_flags_equal (&flags, &cpu_arch_flags))
2625                 {
2626                   if (cpu_sub_arch_name)
2627                     {
2628                       char *name = cpu_sub_arch_name;
2629                       cpu_sub_arch_name = concat (name,
2630                                                   cpu_arch[j].name,
2631                                                   (const char *) NULL);
2632                       free (name);
2633                     }
2634                   else
2635                     cpu_sub_arch_name = xstrdup (cpu_arch[j].name);
2636                   cpu_arch_flags = flags;
2637                   cpu_arch_isa_flags = flags;
2638                 }
2639               else
2640                 cpu_arch_isa_flags
2641                   = cpu_flags_or (cpu_arch_isa_flags,
2642                                   cpu_arch[j].flags);
2643               (void) restore_line_pointer (e);
2644               demand_empty_rest_of_line ();
2645               return;
2646             }
2647         }
2648
2649       if (*string == '.' && j >= ARRAY_SIZE (cpu_arch))
2650         {
2651           /* Disable an ISA extension.  */
2652           for (j = 0; j < ARRAY_SIZE (cpu_noarch); j++)
2653             if (strcmp (string + 1, cpu_noarch [j].name) == 0)
2654               {
2655                 flags = cpu_flags_and_not (cpu_arch_flags,
2656                                            cpu_noarch[j].flags);
2657                 if (!cpu_flags_equal (&flags, &cpu_arch_flags))
2658                   {
2659                     if (cpu_sub_arch_name)
2660                       {
2661                         char *name = cpu_sub_arch_name;
2662                         cpu_sub_arch_name = concat (name, string,
2663                                                     (const char *) NULL);
2664                         free (name);
2665                       }
2666                     else
2667                       cpu_sub_arch_name = xstrdup (string);
2668                     cpu_arch_flags = flags;
2669                     cpu_arch_isa_flags = flags;
2670                   }
2671                 (void) restore_line_pointer (e);
2672                 demand_empty_rest_of_line ();
2673                 return;
2674               }
2675
2676           j = ARRAY_SIZE (cpu_arch);
2677         }
2678
2679       if (j >= ARRAY_SIZE (cpu_arch))
2680         as_bad (_("no such architecture: `%s'"), string);
2681
2682       *input_line_pointer = e;
2683     }
2684   else
2685     as_bad (_("missing cpu architecture"));
2686
2687   no_cond_jump_promotion = 0;
2688   if (*input_line_pointer == ','
2689       && !is_end_of_line[(unsigned char) input_line_pointer[1]])
2690     {
2691       char *string;
2692       char e;
2693
2694       ++input_line_pointer;
2695       e = get_symbol_name (&string);
2696
2697       if (strcmp (string, "nojumps") == 0)
2698         no_cond_jump_promotion = 1;
2699       else if (strcmp (string, "jumps") == 0)
2700         ;
2701       else
2702         as_bad (_("no such architecture modifier: `%s'"), string);
2703
2704       (void) restore_line_pointer (e);
2705     }
2706
2707   demand_empty_rest_of_line ();
2708 }
2709
2710 enum bfd_architecture
2711 i386_arch (void)
2712 {
2713   if (cpu_arch_isa == PROCESSOR_L1OM)
2714     {
2715       if (OUTPUT_FLAVOR != bfd_target_elf_flavour
2716           || flag_code != CODE_64BIT)
2717         as_fatal (_("Intel L1OM is 64bit ELF only"));
2718       return bfd_arch_l1om;
2719     }
2720   else if (cpu_arch_isa == PROCESSOR_K1OM)
2721     {
2722       if (OUTPUT_FLAVOR != bfd_target_elf_flavour
2723           || flag_code != CODE_64BIT)
2724         as_fatal (_("Intel K1OM is 64bit ELF only"));
2725       return bfd_arch_k1om;
2726     }
2727   else if (cpu_arch_isa == PROCESSOR_IAMCU)
2728     {
2729       if (OUTPUT_FLAVOR != bfd_target_elf_flavour
2730           || flag_code == CODE_64BIT)
2731         as_fatal (_("Intel MCU is 32bit ELF only"));
2732       return bfd_arch_iamcu;
2733     }
2734   else
2735     return bfd_arch_i386;
2736 }
2737
2738 unsigned long
2739 i386_mach (void)
2740 {
2741   if (!strncmp (default_arch, "x86_64", 6))
2742     {
2743       if (cpu_arch_isa == PROCESSOR_L1OM)
2744         {
2745           if (OUTPUT_FLAVOR != bfd_target_elf_flavour
2746               || default_arch[6] != '\0')
2747             as_fatal (_("Intel L1OM is 64bit ELF only"));
2748           return bfd_mach_l1om;
2749         }
2750       else if (cpu_arch_isa == PROCESSOR_K1OM)
2751         {
2752           if (OUTPUT_FLAVOR != bfd_target_elf_flavour
2753               || default_arch[6] != '\0')
2754             as_fatal (_("Intel K1OM is 64bit ELF only"));
2755           return bfd_mach_k1om;
2756         }
2757       else if (default_arch[6] == '\0')
2758         return bfd_mach_x86_64;
2759       else
2760         return bfd_mach_x64_32;
2761     }
2762   else if (!strcmp (default_arch, "i386")
2763            || !strcmp (default_arch, "iamcu"))
2764     {
2765       if (cpu_arch_isa == PROCESSOR_IAMCU)
2766         {
2767           if (OUTPUT_FLAVOR != bfd_target_elf_flavour)
2768             as_fatal (_("Intel MCU is 32bit ELF only"));
2769           return bfd_mach_i386_iamcu;
2770         }
2771       else
2772         return bfd_mach_i386_i386;
2773     }
2774   else
2775     as_fatal (_("unknown architecture"));
2776 }
2777 \f
2778 void
2779 md_begin (void)
2780 {
2781   const char *hash_err;
2782
2783   /* Support pseudo prefixes like {disp32}.  */
2784   lex_type ['{'] = LEX_BEGIN_NAME;
2785
2786   /* Initialize op_hash hash table.  */
2787   op_hash = hash_new ();
2788
2789   {
2790     const insn_template *optab;
2791     templates *core_optab;
2792
2793     /* Setup for loop.  */
2794     optab = i386_optab;
2795     core_optab = XNEW (templates);
2796     core_optab->start = optab;
2797
2798     while (1)
2799       {
2800         ++optab;
2801         if (optab->name == NULL
2802             || strcmp (optab->name, (optab - 1)->name) != 0)
2803           {
2804             /* different name --> ship out current template list;
2805                add to hash table; & begin anew.  */
2806             core_optab->end = optab;
2807             hash_err = hash_insert (op_hash,
2808                                     (optab - 1)->name,
2809                                     (void *) core_optab);
2810             if (hash_err)
2811               {
2812                 as_fatal (_("can't hash %s: %s"),
2813                           (optab - 1)->name,
2814                           hash_err);
2815               }
2816             if (optab->name == NULL)
2817               break;
2818             core_optab = XNEW (templates);
2819             core_optab->start = optab;
2820           }
2821       }
2822   }
2823
2824   /* Initialize reg_hash hash table.  */
2825   reg_hash = hash_new ();
2826   {
2827     const reg_entry *regtab;
2828     unsigned int regtab_size = i386_regtab_size;
2829
2830     for (regtab = i386_regtab; regtab_size--; regtab++)
2831       {
2832         hash_err = hash_insert (reg_hash, regtab->reg_name, (void *) regtab);
2833         if (hash_err)
2834           as_fatal (_("can't hash %s: %s"),
2835                     regtab->reg_name,
2836                     hash_err);
2837       }
2838   }
2839
2840   /* Fill in lexical tables:  mnemonic_chars, operand_chars.  */
2841   {
2842     int c;
2843     char *p;
2844
2845     for (c = 0; c < 256; c++)
2846       {
2847         if (ISDIGIT (c))
2848           {
2849             digit_chars[c] = c;
2850             mnemonic_chars[c] = c;
2851             register_chars[c] = c;
2852             operand_chars[c] = c;
2853           }
2854         else if (ISLOWER (c))
2855           {
2856             mnemonic_chars[c] = c;
2857             register_chars[c] = c;
2858             operand_chars[c] = c;
2859           }
2860         else if (ISUPPER (c))
2861           {
2862             mnemonic_chars[c] = TOLOWER (c);
2863             register_chars[c] = mnemonic_chars[c];
2864             operand_chars[c] = c;
2865           }
2866         else if (c == '{' || c == '}')
2867           {
2868             mnemonic_chars[c] = c;
2869             operand_chars[c] = c;
2870           }
2871
2872         if (ISALPHA (c) || ISDIGIT (c))
2873           identifier_chars[c] = c;
2874         else if (c >= 128)
2875           {
2876             identifier_chars[c] = c;
2877             operand_chars[c] = c;
2878           }
2879       }
2880
2881 #ifdef LEX_AT
2882     identifier_chars['@'] = '@';
2883 #endif
2884 #ifdef LEX_QM
2885     identifier_chars['?'] = '?';
2886     operand_chars['?'] = '?';
2887 #endif
2888     digit_chars['-'] = '-';
2889     mnemonic_chars['_'] = '_';
2890     mnemonic_chars['-'] = '-';
2891     mnemonic_chars['.'] = '.';
2892     identifier_chars['_'] = '_';
2893     identifier_chars['.'] = '.';
2894
2895     for (p = operand_special_chars; *p != '\0'; p++)
2896       operand_chars[(unsigned char) *p] = *p;
2897   }
2898
2899   if (flag_code == CODE_64BIT)
2900     {
2901 #if defined (OBJ_COFF) && defined (TE_PE)
2902       x86_dwarf2_return_column = (OUTPUT_FLAVOR == bfd_target_coff_flavour
2903                                   ? 32 : 16);
2904 #else
2905       x86_dwarf2_return_column = 16;
2906 #endif
2907       x86_cie_data_alignment = -8;
2908     }
2909   else
2910     {
2911       x86_dwarf2_return_column = 8;
2912       x86_cie_data_alignment = -4;
2913     }
2914 }
2915
2916 void
2917 i386_print_statistics (FILE *file)
2918 {
2919   hash_print_statistics (file, "i386 opcode", op_hash);
2920   hash_print_statistics (file, "i386 register", reg_hash);
2921 }
2922 \f
2923 #ifdef DEBUG386
2924
2925 /* Debugging routines for md_assemble.  */
2926 static void pte (insn_template *);
2927 static void pt (i386_operand_type);
2928 static void pe (expressionS *);
2929 static void ps (symbolS *);
2930
2931 static void
2932 pi (char *line, i386_insn *x)
2933 {
2934   unsigned int j;
2935
2936   fprintf (stdout, "%s: template ", line);
2937   pte (&x->tm);
2938   fprintf (stdout, "  address: base %s  index %s  scale %x\n",
2939            x->base_reg ? x->base_reg->reg_name : "none",
2940            x->index_reg ? x->index_reg->reg_name : "none",
2941            x->log2_scale_factor);
2942   fprintf (stdout, "  modrm:  mode %x  reg %x  reg/mem %x\n",
2943            x->rm.mode, x->rm.reg, x->rm.regmem);
2944   fprintf (stdout, "  sib:  base %x  index %x  scale %x\n",
2945            x->sib.base, x->sib.index, x->sib.scale);
2946   fprintf (stdout, "  rex: 64bit %x  extX %x  extY %x  extZ %x\n",
2947            (x->rex & REX_W) != 0,
2948            (x->rex & REX_R) != 0,
2949            (x->rex & REX_X) != 0,
2950            (x->rex & REX_B) != 0);
2951   for (j = 0; j < x->operands; j++)
2952     {
2953       fprintf (stdout, "    #%d:  ", j + 1);
2954       pt (x->types[j]);
2955       fprintf (stdout, "\n");
2956       if (x->types[j].bitfield.reg
2957           || x->types[j].bitfield.regmmx
2958           || x->types[j].bitfield.regsimd
2959           || x->types[j].bitfield.sreg2
2960           || x->types[j].bitfield.sreg3
2961           || x->types[j].bitfield.control
2962           || x->types[j].bitfield.debug
2963           || x->types[j].bitfield.test)
2964         fprintf (stdout, "%s\n", x->op[j].regs->reg_name);
2965       if (operand_type_check (x->types[j], imm))
2966         pe (x->op[j].imms);
2967       if (operand_type_check (x->types[j], disp))
2968         pe (x->op[j].disps);
2969     }
2970 }
2971
2972 static void
2973 pte (insn_template *t)
2974 {
2975   unsigned int j;
2976   fprintf (stdout, " %d operands ", t->operands);
2977   fprintf (stdout, "opcode %x ", t->base_opcode);
2978   if (t->extension_opcode != None)
2979     fprintf (stdout, "ext %x ", t->extension_opcode);
2980   if (t->opcode_modifier.d)
2981     fprintf (stdout, "D");
2982   if (t->opcode_modifier.w)
2983     fprintf (stdout, "W");
2984   fprintf (stdout, "\n");
2985   for (j = 0; j < t->operands; j++)
2986     {
2987       fprintf (stdout, "    #%d type ", j + 1);
2988       pt (t->operand_types[j]);
2989       fprintf (stdout, "\n");
2990     }
2991 }
2992
2993 static void
2994 pe (expressionS *e)
2995 {
2996   fprintf (stdout, "    operation     %d\n", e->X_op);
2997   fprintf (stdout, "    add_number    %ld (%lx)\n",
2998            (long) e->X_add_number, (long) e->X_add_number);
2999   if (e->X_add_symbol)
3000     {
3001       fprintf (stdout, "    add_symbol    ");
3002       ps (e->X_add_symbol);
3003       fprintf (stdout, "\n");
3004     }
3005   if (e->X_op_symbol)
3006     {
3007       fprintf (stdout, "    op_symbol    ");
3008       ps (e->X_op_symbol);
3009       fprintf (stdout, "\n");
3010     }
3011 }
3012
3013 static void
3014 ps (symbolS *s)
3015 {
3016   fprintf (stdout, "%s type %s%s",
3017            S_GET_NAME (s),
3018            S_IS_EXTERNAL (s) ? "EXTERNAL " : "",
3019            segment_name (S_GET_SEGMENT (s)));
3020 }
3021
3022 static struct type_name
3023   {
3024     i386_operand_type mask;
3025     const char *name;
3026   }
3027 const type_names[] =
3028 {
3029   { OPERAND_TYPE_REG8, "r8" },
3030   { OPERAND_TYPE_REG16, "r16" },
3031   { OPERAND_TYPE_REG32, "r32" },
3032   { OPERAND_TYPE_REG64, "r64" },
3033   { OPERAND_TYPE_IMM8, "i8" },
3034   { OPERAND_TYPE_IMM8, "i8s" },
3035   { OPERAND_TYPE_IMM16, "i16" },
3036   { OPERAND_TYPE_IMM32, "i32" },
3037   { OPERAND_TYPE_IMM32S, "i32s" },
3038   { OPERAND_TYPE_IMM64, "i64" },
3039   { OPERAND_TYPE_IMM1, "i1" },
3040   { OPERAND_TYPE_BASEINDEX, "BaseIndex" },
3041   { OPERAND_TYPE_DISP8, "d8" },
3042   { OPERAND_TYPE_DISP16, "d16" },
3043   { OPERAND_TYPE_DISP32, "d32" },
3044   { OPERAND_TYPE_DISP32S, "d32s" },
3045   { OPERAND_TYPE_DISP64, "d64" },
3046   { OPERAND_TYPE_INOUTPORTREG, "InOutPortReg" },
3047   { OPERAND_TYPE_SHIFTCOUNT, "ShiftCount" },
3048   { OPERAND_TYPE_CONTROL, "control reg" },
3049   { OPERAND_TYPE_TEST, "test reg" },
3050   { OPERAND_TYPE_DEBUG, "debug reg" },
3051   { OPERAND_TYPE_FLOATREG, "FReg" },
3052   { OPERAND_TYPE_FLOATACC, "FAcc" },
3053   { OPERAND_TYPE_SREG2, "SReg2" },
3054   { OPERAND_TYPE_SREG3, "SReg3" },
3055   { OPERAND_TYPE_ACC, "Acc" },
3056   { OPERAND_TYPE_JUMPABSOLUTE, "Jump Absolute" },
3057   { OPERAND_TYPE_REGMMX, "rMMX" },
3058   { OPERAND_TYPE_REGXMM, "rXMM" },
3059   { OPERAND_TYPE_REGYMM, "rYMM" },
3060   { OPERAND_TYPE_REGZMM, "rZMM" },
3061   { OPERAND_TYPE_REGMASK, "Mask reg" },
3062   { OPERAND_TYPE_ESSEG, "es" },
3063 };
3064
3065 static void
3066 pt (i386_operand_type t)
3067 {
3068   unsigned int j;
3069   i386_operand_type a;
3070
3071   for (j = 0; j < ARRAY_SIZE (type_names); j++)
3072     {
3073       a = operand_type_and (t, type_names[j].mask);
3074       if (!operand_type_all_zero (&a))
3075         fprintf (stdout, "%s, ",  type_names[j].name);
3076     }
3077   fflush (stdout);
3078 }
3079
3080 #endif /* DEBUG386 */
3081 \f
3082 static bfd_reloc_code_real_type
3083 reloc (unsigned int size,
3084        int pcrel,
3085        int sign,
3086        bfd_reloc_code_real_type other)
3087 {
3088   if (other != NO_RELOC)
3089     {
3090       reloc_howto_type *rel;
3091
3092       if (size == 8)
3093         switch (other)
3094           {
3095           case BFD_RELOC_X86_64_GOT32:
3096             return BFD_RELOC_X86_64_GOT64;
3097             break;
3098           case BFD_RELOC_X86_64_GOTPLT64:
3099             return BFD_RELOC_X86_64_GOTPLT64;
3100             break;
3101           case BFD_RELOC_X86_64_PLTOFF64:
3102             return BFD_RELOC_X86_64_PLTOFF64;
3103             break;
3104           case BFD_RELOC_X86_64_GOTPC32:
3105             other = BFD_RELOC_X86_64_GOTPC64;
3106             break;
3107           case BFD_RELOC_X86_64_GOTPCREL:
3108             other = BFD_RELOC_X86_64_GOTPCREL64;
3109             break;
3110           case BFD_RELOC_X86_64_TPOFF32:
3111             other = BFD_RELOC_X86_64_TPOFF64;
3112             break;
3113           case BFD_RELOC_X86_64_DTPOFF32:
3114             other = BFD_RELOC_X86_64_DTPOFF64;
3115             break;
3116           default:
3117             break;
3118           }
3119
3120 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
3121       if (other == BFD_RELOC_SIZE32)
3122         {
3123           if (size == 8)
3124             other = BFD_RELOC_SIZE64;
3125           if (pcrel)
3126             {
3127               as_bad (_("there are no pc-relative size relocations"));
3128               return NO_RELOC;
3129             }
3130         }
3131 #endif
3132
3133       /* Sign-checking 4-byte relocations in 16-/32-bit code is pointless.  */
3134       if (size == 4 && (flag_code != CODE_64BIT || disallow_64bit_reloc))
3135         sign = -1;
3136
3137       rel = bfd_reloc_type_lookup (stdoutput, other);
3138       if (!rel)
3139         as_bad (_("unknown relocation (%u)"), other);
3140       else if (size != bfd_get_reloc_size (rel))
3141         as_bad (_("%u-byte relocation cannot be applied to %u-byte field"),
3142                 bfd_get_reloc_size (rel),
3143                 size);
3144       else if (pcrel && !rel->pc_relative)
3145         as_bad (_("non-pc-relative relocation for pc-relative field"));
3146       else if ((rel->complain_on_overflow == complain_overflow_signed
3147                 && !sign)
3148                || (rel->complain_on_overflow == complain_overflow_unsigned
3149                    && sign > 0))
3150         as_bad (_("relocated field and relocation type differ in signedness"));
3151       else
3152         return other;
3153       return NO_RELOC;
3154     }
3155
3156   if (pcrel)
3157     {
3158       if (!sign)
3159         as_bad (_("there are no unsigned pc-relative relocations"));
3160       switch (size)
3161         {
3162         case 1: return BFD_RELOC_8_PCREL;
3163         case 2: return BFD_RELOC_16_PCREL;
3164         case 4: return BFD_RELOC_32_PCREL;
3165         case 8: return BFD_RELOC_64_PCREL;
3166         }
3167       as_bad (_("cannot do %u byte pc-relative relocation"), size);
3168     }
3169   else
3170     {
3171       if (sign > 0)
3172         switch (size)
3173           {
3174           case 4: return BFD_RELOC_X86_64_32S;
3175           }
3176       else
3177         switch (size)
3178           {
3179           case 1: return BFD_RELOC_8;
3180           case 2: return BFD_RELOC_16;
3181           case 4: return BFD_RELOC_32;
3182           case 8: return BFD_RELOC_64;
3183           }
3184       as_bad (_("cannot do %s %u byte relocation"),
3185               sign > 0 ? "signed" : "unsigned", size);
3186     }
3187
3188   return NO_RELOC;
3189 }
3190
3191 /* Here we decide which fixups can be adjusted to make them relative to
3192    the beginning of the section instead of the symbol.  Basically we need
3193    to make sure that the dynamic relocations are done correctly, so in
3194    some cases we force the original symbol to be used.  */
3195
3196 int
3197 tc_i386_fix_adjustable (fixS *fixP ATTRIBUTE_UNUSED)
3198 {
3199 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
3200   if (!IS_ELF)
3201     return 1;
3202
3203   /* Don't adjust pc-relative references to merge sections in 64-bit
3204      mode.  */
3205   if (use_rela_relocations
3206       && (S_GET_SEGMENT (fixP->fx_addsy)->flags & SEC_MERGE) != 0
3207       && fixP->fx_pcrel)
3208     return 0;
3209
3210   /* The x86_64 GOTPCREL are represented as 32bit PCrel relocations
3211      and changed later by validate_fix.  */
3212   if (GOT_symbol && fixP->fx_subsy == GOT_symbol
3213       && fixP->fx_r_type == BFD_RELOC_32_PCREL)
3214     return 0;
3215
3216   /* Adjust_reloc_syms doesn't know about the GOT.  Need to keep symbol
3217      for size relocations.  */
3218   if (fixP->fx_r_type == BFD_RELOC_SIZE32
3219       || fixP->fx_r_type == BFD_RELOC_SIZE64
3220       || fixP->fx_r_type == BFD_RELOC_386_GOTOFF
3221       || fixP->fx_r_type == BFD_RELOC_386_PLT32
3222       || fixP->fx_r_type == BFD_RELOC_386_GOT32
3223       || fixP->fx_r_type == BFD_RELOC_386_GOT32X
3224       || fixP->fx_r_type == BFD_RELOC_386_TLS_GD
3225       || fixP->fx_r_type == BFD_RELOC_386_TLS_LDM
3226       || fixP->fx_r_type == BFD_RELOC_386_TLS_LDO_32
3227       || fixP->fx_r_type == BFD_RELOC_386_TLS_IE_32
3228       || fixP->fx_r_type == BFD_RELOC_386_TLS_IE
3229       || fixP->fx_r_type == BFD_RELOC_386_TLS_GOTIE
3230       || fixP->fx_r_type == BFD_RELOC_386_TLS_LE_32
3231       || fixP->fx_r_type == BFD_RELOC_386_TLS_LE
3232       || fixP->fx_r_type == BFD_RELOC_386_TLS_GOTDESC
3233       || fixP->fx_r_type == BFD_RELOC_386_TLS_DESC_CALL
3234       || fixP->fx_r_type == BFD_RELOC_X86_64_PLT32
3235       || fixP->fx_r_type == BFD_RELOC_X86_64_GOT32
3236       || fixP->fx_r_type == BFD_RELOC_X86_64_GOTPCREL
3237       || fixP->fx_r_type == BFD_RELOC_X86_64_GOTPCRELX
3238       || fixP->fx_r_type == BFD_RELOC_X86_64_REX_GOTPCRELX
3239       || fixP->fx_r_type == BFD_RELOC_X86_64_TLSGD
3240       || fixP->fx_r_type == BFD_RELOC_X86_64_TLSLD
3241       || fixP->fx_r_type == BFD_RELOC_X86_64_DTPOFF32
3242       || fixP->fx_r_type == BFD_RELOC_X86_64_DTPOFF64
3243       || fixP->fx_r_type == BFD_RELOC_X86_64_GOTTPOFF
3244       || fixP->fx_r_type == BFD_RELOC_X86_64_TPOFF32
3245       || fixP->fx_r_type == BFD_RELOC_X86_64_TPOFF64
3246       || fixP->fx_r_type == BFD_RELOC_X86_64_GOTOFF64
3247       || fixP->fx_r_type == BFD_RELOC_X86_64_GOTPC32_TLSDESC
3248       || fixP->fx_r_type == BFD_RELOC_X86_64_TLSDESC_CALL
3249       || fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
3250       || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
3251     return 0;
3252 #endif
3253   return 1;
3254 }
3255
3256 static int
3257 intel_float_operand (const char *mnemonic)
3258 {
3259   /* Note that the value returned is meaningful only for opcodes with (memory)
3260      operands, hence the code here is free to improperly handle opcodes that
3261      have no operands (for better performance and smaller code). */
3262
3263   if (mnemonic[0] != 'f')
3264     return 0; /* non-math */
3265
3266   switch (mnemonic[1])
3267     {
3268     /* fclex, fdecstp, fdisi, femms, feni, fincstp, finit, fsetpm, and
3269        the fs segment override prefix not currently handled because no
3270        call path can make opcodes without operands get here */
3271     case 'i':
3272       return 2 /* integer op */;
3273     case 'l':
3274       if (mnemonic[2] == 'd' && (mnemonic[3] == 'c' || mnemonic[3] == 'e'))
3275         return 3; /* fldcw/fldenv */
3276       break;
3277     case 'n':
3278       if (mnemonic[2] != 'o' /* fnop */)
3279         return 3; /* non-waiting control op */
3280       break;
3281     case 'r':
3282       if (mnemonic[2] == 's')
3283         return 3; /* frstor/frstpm */
3284       break;
3285     case 's':
3286       if (mnemonic[2] == 'a')
3287         return 3; /* fsave */
3288       if (mnemonic[2] == 't')
3289         {
3290           switch (mnemonic[3])
3291             {
3292             case 'c': /* fstcw */
3293             case 'd': /* fstdw */
3294             case 'e': /* fstenv */
3295             case 's': /* fsts[gw] */
3296               return 3;
3297             }
3298         }
3299       break;
3300     case 'x':
3301       if (mnemonic[2] == 'r' || mnemonic[2] == 's')
3302         return 0; /* fxsave/fxrstor are not really math ops */
3303       break;
3304     }
3305
3306   return 1;
3307 }
3308
3309 /* Build the VEX prefix.  */
3310
3311 static void
3312 build_vex_prefix (const insn_template *t)
3313 {
3314   unsigned int register_specifier;
3315   unsigned int implied_prefix;
3316   unsigned int vector_length;
3317
3318   /* Check register specifier.  */
3319   if (i.vex.register_specifier)
3320     {
3321       register_specifier =
3322         ~register_number (i.vex.register_specifier) & 0xf;
3323       gas_assert ((i.vex.register_specifier->reg_flags & RegVRex) == 0);
3324     }
3325   else
3326     register_specifier = 0xf;
3327
3328   /* Use 2-byte VEX prefix by swapping destination and source
3329      operand.  */
3330   if (i.vec_encoding != vex_encoding_vex3
3331       && i.dir_encoding == dir_encoding_default
3332       && i.operands == i.reg_operands
3333       && i.tm.opcode_modifier.vexopcode == VEX0F
3334       && i.tm.opcode_modifier.load
3335       && i.rex == REX_B)
3336     {
3337       unsigned int xchg = i.operands - 1;
3338       union i386_op temp_op;
3339       i386_operand_type temp_type;
3340
3341       temp_type = i.types[xchg];
3342       i.types[xchg] = i.types[0];
3343       i.types[0] = temp_type;
3344       temp_op = i.op[xchg];
3345       i.op[xchg] = i.op[0];
3346       i.op[0] = temp_op;
3347
3348       gas_assert (i.rm.mode == 3);
3349
3350       i.rex = REX_R;
3351       xchg = i.rm.regmem;
3352       i.rm.regmem = i.rm.reg;
3353       i.rm.reg = xchg;
3354
3355       /* Use the next insn.  */
3356       i.tm = t[1];
3357     }
3358
3359   if (i.tm.opcode_modifier.vex == VEXScalar)
3360     vector_length = avxscalar;
3361   else if (i.tm.opcode_modifier.vex == VEX256)
3362     vector_length = 1;
3363   else
3364     {
3365       unsigned int op;
3366
3367       vector_length = 0;
3368       for (op = 0; op < t->operands; ++op)
3369         if (t->operand_types[op].bitfield.xmmword
3370             && t->operand_types[op].bitfield.ymmword
3371             && i.types[op].bitfield.ymmword)
3372           {
3373             vector_length = 1;
3374             break;
3375           }
3376     }
3377
3378   switch ((i.tm.base_opcode >> 8) & 0xff)
3379     {
3380     case 0:
3381       implied_prefix = 0;
3382       break;
3383     case DATA_PREFIX_OPCODE:
3384       implied_prefix = 1;
3385       break;
3386     case REPE_PREFIX_OPCODE:
3387       implied_prefix = 2;
3388       break;
3389     case REPNE_PREFIX_OPCODE:
3390       implied_prefix = 3;
3391       break;
3392     default:
3393       abort ();
3394     }
3395
3396   /* Use 2-byte VEX prefix if possible.  */
3397   if (i.vec_encoding != vex_encoding_vex3
3398       && i.tm.opcode_modifier.vexopcode == VEX0F
3399       && i.tm.opcode_modifier.vexw != VEXW1
3400       && (i.rex & (REX_W | REX_X | REX_B)) == 0)
3401     {
3402       /* 2-byte VEX prefix.  */
3403       unsigned int r;
3404
3405       i.vex.length = 2;
3406       i.vex.bytes[0] = 0xc5;
3407
3408       /* Check the REX.R bit.  */
3409       r = (i.rex & REX_R) ? 0 : 1;
3410       i.vex.bytes[1] = (r << 7
3411                         | register_specifier << 3
3412                         | vector_length << 2
3413                         | implied_prefix);
3414     }
3415   else
3416     {
3417       /* 3-byte VEX prefix.  */
3418       unsigned int m, w;
3419
3420       i.vex.length = 3;
3421
3422       switch (i.tm.opcode_modifier.vexopcode)
3423         {
3424         case VEX0F:
3425           m = 0x1;
3426           i.vex.bytes[0] = 0xc4;
3427           break;
3428         case VEX0F38:
3429           m = 0x2;
3430           i.vex.bytes[0] = 0xc4;
3431           break;
3432         case VEX0F3A:
3433           m = 0x3;
3434           i.vex.bytes[0] = 0xc4;
3435           break;
3436         case XOP08:
3437           m = 0x8;
3438           i.vex.bytes[0] = 0x8f;
3439           break;
3440         case XOP09:
3441           m = 0x9;
3442           i.vex.bytes[0] = 0x8f;
3443           break;
3444         case XOP0A:
3445           m = 0xa;
3446           i.vex.bytes[0] = 0x8f;
3447           break;
3448         default:
3449           abort ();
3450         }
3451
3452       /* The high 3 bits of the second VEX byte are 1's compliment
3453          of RXB bits from REX.  */
3454       i.vex.bytes[1] = (~i.rex & 0x7) << 5 | m;
3455
3456       /* Check the REX.W bit.  */
3457       w = (i.rex & REX_W) ? 1 : 0;
3458       if (i.tm.opcode_modifier.vexw == VEXW1)
3459         w = 1;
3460
3461       i.vex.bytes[2] = (w << 7
3462                         | register_specifier << 3
3463                         | vector_length << 2
3464                         | implied_prefix);
3465     }
3466 }
3467
3468 static INLINE bfd_boolean
3469 is_evex_encoding (const insn_template *t)
3470 {
3471   return t->opcode_modifier.evex
3472          || t->opcode_modifier.broadcast || t->opcode_modifier.masking
3473          || t->opcode_modifier.staticrounding || t->opcode_modifier.sae;
3474 }
3475
3476 /* Build the EVEX prefix.  */
3477
3478 static void
3479 build_evex_prefix (void)
3480 {
3481   unsigned int register_specifier;
3482   unsigned int implied_prefix;
3483   unsigned int m, w;
3484   rex_byte vrex_used = 0;
3485
3486   /* Check register specifier.  */
3487   if (i.vex.register_specifier)
3488     {
3489       gas_assert ((i.vrex & REX_X) == 0);
3490
3491       register_specifier = i.vex.register_specifier->reg_num;
3492       if ((i.vex.register_specifier->reg_flags & RegRex))
3493         register_specifier += 8;
3494       /* The upper 16 registers are encoded in the fourth byte of the
3495          EVEX prefix.  */
3496       if (!(i.vex.register_specifier->reg_flags & RegVRex))
3497         i.vex.bytes[3] = 0x8;
3498       register_specifier = ~register_specifier & 0xf;
3499     }
3500   else
3501     {
3502       register_specifier = 0xf;
3503
3504       /* Encode upper 16 vector index register in the fourth byte of
3505          the EVEX prefix.  */
3506       if (!(i.vrex & REX_X))
3507         i.vex.bytes[3] = 0x8;
3508       else
3509         vrex_used |= REX_X;
3510     }
3511
3512   switch ((i.tm.base_opcode >> 8) & 0xff)
3513     {
3514     case 0:
3515       implied_prefix = 0;
3516       break;
3517     case DATA_PREFIX_OPCODE:
3518       implied_prefix = 1;
3519       break;
3520     case REPE_PREFIX_OPCODE:
3521       implied_prefix = 2;
3522       break;
3523     case REPNE_PREFIX_OPCODE:
3524       implied_prefix = 3;
3525       break;
3526     default:
3527       abort ();
3528     }
3529
3530   /* 4 byte EVEX prefix.  */
3531   i.vex.length = 4;
3532   i.vex.bytes[0] = 0x62;
3533
3534   /* mmmm bits.  */
3535   switch (i.tm.opcode_modifier.vexopcode)
3536     {
3537     case VEX0F:
3538       m = 1;
3539       break;
3540     case VEX0F38:
3541       m = 2;
3542       break;
3543     case VEX0F3A:
3544       m = 3;
3545       break;
3546     default:
3547       abort ();
3548       break;
3549     }
3550
3551   /* The high 3 bits of the second EVEX byte are 1's compliment of RXB
3552      bits from REX.  */
3553   i.vex.bytes[1] = (~i.rex & 0x7) << 5 | m;
3554
3555   /* The fifth bit of the second EVEX byte is 1's compliment of the
3556      REX_R bit in VREX.  */
3557   if (!(i.vrex & REX_R))
3558     i.vex.bytes[1] |= 0x10;
3559   else
3560     vrex_used |= REX_R;
3561
3562   if ((i.reg_operands + i.imm_operands) == i.operands)
3563     {
3564       /* When all operands are registers, the REX_X bit in REX is not
3565          used.  We reuse it to encode the upper 16 registers, which is
3566          indicated by the REX_B bit in VREX.  The REX_X bit is encoded
3567          as 1's compliment.  */
3568       if ((i.vrex & REX_B))
3569         {
3570           vrex_used |= REX_B;
3571           i.vex.bytes[1] &= ~0x40;
3572         }
3573     }
3574
3575   /* EVEX instructions shouldn't need the REX prefix.  */
3576   i.vrex &= ~vrex_used;
3577   gas_assert (i.vrex == 0);
3578
3579   /* Check the REX.W bit.  */
3580   w = (i.rex & REX_W) ? 1 : 0;
3581   if (i.tm.opcode_modifier.vexw)
3582     {
3583       if (i.tm.opcode_modifier.vexw == VEXW1)
3584         w = 1;
3585     }
3586   /* If w is not set it means we are dealing with WIG instruction.  */
3587   else if (!w)
3588     {
3589       if (evexwig == evexw1)
3590         w = 1;
3591     }
3592
3593   /* Encode the U bit.  */
3594   implied_prefix |= 0x4;
3595
3596   /* The third byte of the EVEX prefix.  */
3597   i.vex.bytes[2] = (w << 7 | register_specifier << 3 | implied_prefix);
3598
3599   /* The fourth byte of the EVEX prefix.  */
3600   /* The zeroing-masking bit.  */
3601   if (i.mask && i.mask->zeroing)
3602     i.vex.bytes[3] |= 0x80;
3603
3604   /* Don't always set the broadcast bit if there is no RC.  */
3605   if (!i.rounding)
3606     {
3607       /* Encode the vector length.  */
3608       unsigned int vec_length;
3609
3610       if (!i.tm.opcode_modifier.evex
3611           || i.tm.opcode_modifier.evex == EVEXDYN)
3612         {
3613           unsigned int op;
3614
3615           vec_length = 0;
3616           for (op = 0; op < i.tm.operands; ++op)
3617             if (i.tm.operand_types[op].bitfield.xmmword
3618                 + i.tm.operand_types[op].bitfield.ymmword
3619                 + i.tm.operand_types[op].bitfield.zmmword > 1)
3620               {
3621                 if (i.types[op].bitfield.zmmword)
3622                   i.tm.opcode_modifier.evex = EVEX512;
3623                 else if (i.types[op].bitfield.ymmword)
3624                   i.tm.opcode_modifier.evex = EVEX256;
3625                 else if (i.types[op].bitfield.xmmword)
3626                   i.tm.opcode_modifier.evex = EVEX128;
3627                 else
3628                   continue;
3629                 break;
3630               }
3631         }
3632
3633       switch (i.tm.opcode_modifier.evex)
3634         {
3635         case EVEXLIG: /* LL' is ignored */
3636           vec_length = evexlig << 5;
3637           break;
3638         case EVEX128:
3639           vec_length = 0 << 5;
3640           break;
3641         case EVEX256:
3642           vec_length = 1 << 5;
3643           break;
3644         case EVEX512:
3645           vec_length = 2 << 5;
3646           break;
3647         default:
3648           abort ();
3649           break;
3650         }
3651       i.vex.bytes[3] |= vec_length;
3652       /* Encode the broadcast bit.  */
3653       if (i.broadcast)
3654         i.vex.bytes[3] |= 0x10;
3655     }
3656   else
3657     {
3658       if (i.rounding->type != saeonly)
3659         i.vex.bytes[3] |= 0x10 | (i.rounding->type << 5);
3660       else
3661         i.vex.bytes[3] |= 0x10 | (evexrcig << 5);
3662     }
3663
3664   if (i.mask && i.mask->mask)
3665     i.vex.bytes[3] |= i.mask->mask->reg_num;
3666 }
3667
3668 static void
3669 process_immext (void)
3670 {
3671   expressionS *exp;
3672
3673   if ((i.tm.cpu_flags.bitfield.cpusse3 || i.tm.cpu_flags.bitfield.cpusvme)
3674       && i.operands > 0)
3675     {
3676       /* MONITOR/MWAIT as well as SVME instructions have fixed operands
3677          with an opcode suffix which is coded in the same place as an
3678          8-bit immediate field would be.
3679          Here we check those operands and remove them afterwards.  */
3680       unsigned int x;
3681
3682       for (x = 0; x < i.operands; x++)
3683         if (register_number (i.op[x].regs) != x)
3684           as_bad (_("can't use register '%s%s' as operand %d in '%s'."),
3685                   register_prefix, i.op[x].regs->reg_name, x + 1,
3686                   i.tm.name);
3687
3688       i.operands = 0;
3689     }
3690
3691   if (i.tm.cpu_flags.bitfield.cpumwaitx && i.operands > 0)
3692     {
3693       /* MONITORX/MWAITX instructions have fixed operands with an opcode
3694          suffix which is coded in the same place as an 8-bit immediate
3695          field would be.
3696          Here we check those operands and remove them afterwards.  */
3697       unsigned int x;
3698
3699       if (i.operands != 3)
3700         abort();
3701
3702       for (x = 0; x < 2; x++)
3703         if (register_number (i.op[x].regs) != x)
3704           goto bad_register_operand;
3705
3706       /* Check for third operand for mwaitx/monitorx insn.  */
3707       if (register_number (i.op[x].regs)
3708           != (x + (i.tm.extension_opcode == 0xfb)))
3709         {
3710 bad_register_operand:
3711           as_bad (_("can't use register '%s%s' as operand %d in '%s'."),
3712                   register_prefix, i.op[x].regs->reg_name, x+1,
3713                   i.tm.name);
3714         }
3715
3716       i.operands = 0;
3717     }
3718
3719   /* These AMD 3DNow! and SSE2 instructions have an opcode suffix
3720      which is coded in the same place as an 8-bit immediate field
3721      would be.  Here we fake an 8-bit immediate operand from the
3722      opcode suffix stored in tm.extension_opcode.
3723
3724      AVX instructions also use this encoding, for some of
3725      3 argument instructions.  */
3726
3727   gas_assert (i.imm_operands <= 1
3728               && (i.operands <= 2
3729                   || ((i.tm.opcode_modifier.vex
3730                        || i.tm.opcode_modifier.vexopcode
3731                        || is_evex_encoding (&i.tm))
3732                       && i.operands <= 4)));
3733
3734   exp = &im_expressions[i.imm_operands++];
3735   i.op[i.operands].imms = exp;
3736   i.types[i.operands] = imm8;
3737   i.operands++;
3738   exp->X_op = O_constant;
3739   exp->X_add_number = i.tm.extension_opcode;
3740   i.tm.extension_opcode = None;
3741 }
3742
3743
3744 static int
3745 check_hle (void)
3746 {
3747   switch (i.tm.opcode_modifier.hleprefixok)
3748     {
3749     default:
3750       abort ();
3751     case HLEPrefixNone:
3752       as_bad (_("invalid instruction `%s' after `%s'"),
3753               i.tm.name, i.hle_prefix);
3754       return 0;
3755     case HLEPrefixLock:
3756       if (i.prefix[LOCK_PREFIX])
3757         return 1;
3758       as_bad (_("missing `lock' with `%s'"), i.hle_prefix);
3759       return 0;
3760     case HLEPrefixAny:
3761       return 1;
3762     case HLEPrefixRelease:
3763       if (i.prefix[HLE_PREFIX] != XRELEASE_PREFIX_OPCODE)
3764         {
3765           as_bad (_("instruction `%s' after `xacquire' not allowed"),
3766                   i.tm.name);
3767           return 0;
3768         }
3769       if (i.mem_operands == 0
3770           || !operand_type_check (i.types[i.operands - 1], anymem))
3771         {
3772           as_bad (_("memory destination needed for instruction `%s'"
3773                     " after `xrelease'"), i.tm.name);
3774           return 0;
3775         }
3776       return 1;
3777     }
3778 }
3779
3780 /* Try the shortest encoding by shortening operand size.  */
3781
3782 static void
3783 optimize_encoding (void)
3784 {
3785   int j;
3786
3787   if (optimize_for_space
3788       && i.reg_operands == 1
3789       && i.imm_operands == 1
3790       && !i.types[1].bitfield.byte
3791       && i.op[0].imms->X_op == O_constant
3792       && fits_in_imm7 (i.op[0].imms->X_add_number)
3793       && ((i.tm.base_opcode == 0xa8
3794            && i.tm.extension_opcode == None)
3795           || (i.tm.base_opcode == 0xf6
3796               && i.tm.extension_opcode == 0x0)))
3797     {
3798       /* Optimize: -Os:
3799            test $imm7, %r64/%r32/%r16  -> test $imm7, %r8
3800        */
3801       unsigned int base_regnum = i.op[1].regs->reg_num;
3802       if (flag_code == CODE_64BIT || base_regnum < 4)
3803         {
3804           i.types[1].bitfield.byte = 1;
3805           /* Ignore the suffix.  */
3806           i.suffix = 0;
3807           if (base_regnum >= 4
3808               && !(i.op[1].regs->reg_flags & RegRex))
3809             {
3810               /* Handle SP, BP, SI and DI registers.  */
3811               if (i.types[1].bitfield.word)
3812                 j = 16;
3813               else if (i.types[1].bitfield.dword)
3814                 j = 32;
3815               else
3816                 j = 48;
3817               i.op[1].regs -= j;
3818             }
3819         }
3820     }
3821   else if (flag_code == CODE_64BIT
3822            && ((i.types[1].bitfield.qword
3823                 && i.reg_operands == 1
3824                 && i.imm_operands == 1
3825                 && i.op[0].imms->X_op == O_constant
3826                 && ((i.tm.base_opcode == 0xb0
3827                      && i.tm.extension_opcode == None
3828                      && fits_in_unsigned_long (i.op[0].imms->X_add_number))
3829                     || (fits_in_imm31 (i.op[0].imms->X_add_number)
3830                         && (((i.tm.base_opcode == 0x24
3831                               || i.tm.base_opcode == 0xa8)
3832                              && i.tm.extension_opcode == None)
3833                             || (i.tm.base_opcode == 0x80
3834                                 && i.tm.extension_opcode == 0x4)
3835                             || ((i.tm.base_opcode == 0xf6
3836                                  || i.tm.base_opcode == 0xc6)
3837                                 && i.tm.extension_opcode == 0x0)))))
3838                || (i.types[0].bitfield.qword
3839                    && ((i.reg_operands == 2
3840                         && i.op[0].regs == i.op[1].regs
3841                         && ((i.tm.base_opcode == 0x30
3842                              || i.tm.base_opcode == 0x28)
3843                             && i.tm.extension_opcode == None))
3844                        || (i.reg_operands == 1
3845                            && i.operands == 1
3846                            && i.tm.base_opcode == 0x30
3847                            && i.tm.extension_opcode == None)))))
3848     {
3849       /* Optimize: -O:
3850            andq $imm31, %r64   -> andl $imm31, %r32
3851            testq $imm31, %r64  -> testl $imm31, %r32
3852            xorq %r64, %r64     -> xorl %r32, %r32
3853            subq %r64, %r64     -> subl %r32, %r32
3854            movq $imm31, %r64   -> movl $imm31, %r32
3855            movq $imm32, %r64   -> movl $imm32, %r32
3856         */
3857       i.tm.opcode_modifier.norex64 = 1;
3858       if (i.tm.base_opcode == 0xb0 || i.tm.base_opcode == 0xc6)
3859         {
3860           /* Handle
3861                movq $imm31, %r64   -> movl $imm31, %r32
3862                movq $imm32, %r64   -> movl $imm32, %r32
3863            */
3864           i.tm.operand_types[0].bitfield.imm32 = 1;
3865           i.tm.operand_types[0].bitfield.imm32s = 0;
3866           i.tm.operand_types[0].bitfield.imm64 = 0;
3867           i.types[0].bitfield.imm32 = 1;
3868           i.types[0].bitfield.imm32s = 0;
3869           i.types[0].bitfield.imm64 = 0;
3870           i.types[1].bitfield.dword = 1;
3871           i.types[1].bitfield.qword = 0;
3872           if (i.tm.base_opcode == 0xc6)
3873             {
3874               /* Handle
3875                    movq $imm31, %r64   -> movl $imm31, %r32
3876                */
3877               i.tm.base_opcode = 0xb0;
3878               i.tm.extension_opcode = None;
3879               i.tm.opcode_modifier.shortform = 1;
3880               i.tm.opcode_modifier.modrm = 0;
3881             }
3882         }
3883     }
3884   else if (optimize > 1
3885            && i.reg_operands == 3
3886            && i.op[0].regs == i.op[1].regs
3887            && !i.types[2].bitfield.xmmword
3888            && (i.tm.opcode_modifier.vex
3889                || ((!i.mask || i.mask->zeroing)
3890                    && !i.rounding
3891                    && is_evex_encoding (&i.tm)
3892                    && (i.vec_encoding != vex_encoding_evex
3893                        || i.tm.cpu_flags.bitfield.cpuavx512vl
3894                        || cpu_arch_isa_flags.bitfield.cpuavx512vl)))
3895            && ((i.tm.base_opcode == 0x55
3896                 || i.tm.base_opcode == 0x6655
3897                 || i.tm.base_opcode == 0x66df
3898                 || i.tm.base_opcode == 0x57
3899                 || i.tm.base_opcode == 0x6657
3900                 || i.tm.base_opcode == 0x66ef
3901                 || i.tm.base_opcode == 0x66f8
3902                 || i.tm.base_opcode == 0x66f9
3903                 || i.tm.base_opcode == 0x66fa
3904                 || i.tm.base_opcode == 0x66fb)
3905                && i.tm.extension_opcode == None))
3906     {
3907       /* Optimize: -O2:
3908            VOP, one of vandnps, vandnpd, vxorps, vxorpd, vpsubb, vpsubd,
3909            vpsubq and vpsubw:
3910              EVEX VOP %zmmM, %zmmM, %zmmN
3911                -> VEX VOP %xmmM, %xmmM, %xmmN (M and N < 16)
3912                -> EVEX VOP %xmmM, %xmmM, %xmmN (M || N >= 16)
3913              EVEX VOP %ymmM, %ymmM, %ymmN
3914                -> VEX VOP %xmmM, %xmmM, %xmmN (M and N < 16)
3915                -> EVEX VOP %xmmM, %xmmM, %xmmN (M || N >= 16)
3916              VEX VOP %ymmM, %ymmM, %ymmN
3917                -> VEX VOP %xmmM, %xmmM, %xmmN
3918            VOP, one of vpandn and vpxor:
3919              VEX VOP %ymmM, %ymmM, %ymmN
3920                -> VEX VOP %xmmM, %xmmM, %xmmN
3921            VOP, one of vpandnd and vpandnq:
3922              EVEX VOP %zmmM, %zmmM, %zmmN
3923                -> VEX vpandn %xmmM, %xmmM, %xmmN (M and N < 16)
3924                -> EVEX VOP %xmmM, %xmmM, %xmmN (M || N >= 16)
3925              EVEX VOP %ymmM, %ymmM, %ymmN
3926                -> VEX vpandn %xmmM, %xmmM, %xmmN (M and N < 16)
3927                -> EVEX VOP %xmmM, %xmmM, %xmmN (M || N >= 16)
3928            VOP, one of vpxord and vpxorq:
3929              EVEX VOP %zmmM, %zmmM, %zmmN
3930                -> VEX vpxor %xmmM, %xmmM, %xmmN (M and N < 16)
3931                -> EVEX VOP %xmmM, %xmmM, %xmmN (M || N >= 16)
3932              EVEX VOP %ymmM, %ymmM, %ymmN
3933                -> VEX vpxor %xmmM, %xmmM, %xmmN (M and N < 16)
3934                -> EVEX VOP %xmmM, %xmmM, %xmmN (M || N >= 16)
3935        */
3936       if (is_evex_encoding (&i.tm))
3937         {
3938           if (i.vec_encoding == vex_encoding_evex)
3939             i.tm.opcode_modifier.evex = EVEX128;
3940           else
3941             {
3942               i.tm.opcode_modifier.vex = VEX128;
3943               i.tm.opcode_modifier.vexw = VEXW0;
3944               i.tm.opcode_modifier.evex = 0;
3945             }
3946         }
3947       else
3948         i.tm.opcode_modifier.vex = VEX128;
3949
3950       if (i.tm.opcode_modifier.vex)
3951         for (j = 0; j < 3; j++)
3952           {
3953             i.types[j].bitfield.xmmword = 1;
3954             i.types[j].bitfield.ymmword = 0;
3955           }
3956     }
3957 }
3958
3959 /* This is the guts of the machine-dependent assembler.  LINE points to a
3960    machine dependent instruction.  This function is supposed to emit
3961    the frags/bytes it assembles to.  */
3962
3963 void
3964 md_assemble (char *line)
3965 {
3966   unsigned int j;
3967   char mnemonic[MAX_MNEM_SIZE], mnem_suffix;
3968   const insn_template *t;
3969
3970   /* Initialize globals.  */
3971   memset (&i, '\0', sizeof (i));
3972   for (j = 0; j < MAX_OPERANDS; j++)
3973     i.reloc[j] = NO_RELOC;
3974   memset (disp_expressions, '\0', sizeof (disp_expressions));
3975   memset (im_expressions, '\0', sizeof (im_expressions));
3976   save_stack_p = save_stack;
3977
3978   /* First parse an instruction mnemonic & call i386_operand for the operands.
3979      We assume that the scrubber has arranged it so that line[0] is the valid
3980      start of a (possibly prefixed) mnemonic.  */
3981
3982   line = parse_insn (line, mnemonic);
3983   if (line == NULL)
3984     return;
3985   mnem_suffix = i.suffix;
3986
3987   line = parse_operands (line, mnemonic);
3988   this_operand = -1;
3989   xfree (i.memop1_string);
3990   i.memop1_string = NULL;
3991   if (line == NULL)
3992     return;
3993
3994   /* Now we've parsed the mnemonic into a set of templates, and have the
3995      operands at hand.  */
3996
3997   /* All intel opcodes have reversed operands except for "bound" and
3998      "enter".  We also don't reverse intersegment "jmp" and "call"
3999      instructions with 2 immediate operands so that the immediate segment
4000      precedes the offset, as it does when in AT&T mode. */
4001   if (intel_syntax
4002       && i.operands > 1
4003       && (strcmp (mnemonic, "bound") != 0)
4004       && (strcmp (mnemonic, "invlpga") != 0)
4005       && !(operand_type_check (i.types[0], imm)
4006            && operand_type_check (i.types[1], imm)))
4007     swap_operands ();
4008
4009   /* The order of the immediates should be reversed
4010      for 2 immediates extrq and insertq instructions */
4011   if (i.imm_operands == 2
4012       && (strcmp (mnemonic, "extrq") == 0
4013           || strcmp (mnemonic, "insertq") == 0))
4014       swap_2_operands (0, 1);
4015
4016   if (i.imm_operands)
4017     optimize_imm ();
4018
4019   /* Don't optimize displacement for movabs since it only takes 64bit
4020      displacement.  */
4021   if (i.disp_operands
4022       && i.disp_encoding != disp_encoding_32bit
4023       && (flag_code != CODE_64BIT
4024           || strcmp (mnemonic, "movabs") != 0))
4025     optimize_disp ();
4026
4027   /* Next, we find a template that matches the given insn,
4028      making sure the overlap of the given operands types is consistent
4029      with the template operand types.  */
4030
4031   if (!(t = match_template (mnem_suffix)))
4032     return;
4033
4034   if (sse_check != check_none
4035       && !i.tm.opcode_modifier.noavx
4036       && !i.tm.cpu_flags.bitfield.cpuavx
4037       && (i.tm.cpu_flags.bitfield.cpusse
4038           || i.tm.cpu_flags.bitfield.cpusse2
4039           || i.tm.cpu_flags.bitfield.cpusse3
4040           || i.tm.cpu_flags.bitfield.cpussse3
4041           || i.tm.cpu_flags.bitfield.cpusse4_1
4042           || i.tm.cpu_flags.bitfield.cpusse4_2
4043           || i.tm.cpu_flags.bitfield.cpupclmul
4044           || i.tm.cpu_flags.bitfield.cpuaes
4045           || i.tm.cpu_flags.bitfield.cpugfni))
4046     {
4047       (sse_check == check_warning
4048        ? as_warn
4049        : as_bad) (_("SSE instruction `%s' is used"), i.tm.name);
4050     }
4051
4052   /* Zap movzx and movsx suffix.  The suffix has been set from
4053      "word ptr" or "byte ptr" on the source operand in Intel syntax
4054      or extracted from mnemonic in AT&T syntax.  But we'll use
4055      the destination register to choose the suffix for encoding.  */
4056   if ((i.tm.base_opcode & ~9) == 0x0fb6)
4057     {
4058       /* In Intel syntax, there must be a suffix.  In AT&T syntax, if
4059          there is no suffix, the default will be byte extension.  */
4060       if (i.reg_operands != 2
4061           && !i.suffix
4062           && intel_syntax)
4063         as_bad (_("ambiguous operand size for `%s'"), i.tm.name);
4064
4065       i.suffix = 0;
4066     }
4067
4068   if (i.tm.opcode_modifier.fwait)
4069     if (!add_prefix (FWAIT_OPCODE))
4070       return;
4071
4072   /* Check if REP prefix is OK.  */
4073   if (i.rep_prefix && !i.tm.opcode_modifier.repprefixok)
4074     {
4075       as_bad (_("invalid instruction `%s' after `%s'"),
4076                 i.tm.name, i.rep_prefix);
4077       return;
4078     }
4079
4080   /* Check for lock without a lockable instruction.  Destination operand
4081      must be memory unless it is xchg (0x86).  */
4082   if (i.prefix[LOCK_PREFIX]
4083       && (!i.tm.opcode_modifier.islockable
4084           || i.mem_operands == 0
4085           || (i.tm.base_opcode != 0x86
4086               && !operand_type_check (i.types[i.operands - 1], anymem))))
4087     {
4088       as_bad (_("expecting lockable instruction after `lock'"));
4089       return;
4090     }
4091
4092   /* Check if HLE prefix is OK.  */
4093   if (i.hle_prefix && !check_hle ())
4094     return;
4095
4096   /* Check BND prefix.  */
4097   if (i.bnd_prefix && !i.tm.opcode_modifier.bndprefixok)
4098     as_bad (_("expecting valid branch instruction after `bnd'"));
4099
4100   /* Check NOTRACK prefix.  */
4101   if (i.notrack_prefix && !i.tm.opcode_modifier.notrackprefixok)
4102     as_bad (_("expecting indirect branch instruction after `notrack'"));
4103
4104   if (i.tm.cpu_flags.bitfield.cpumpx)
4105     {
4106       if (flag_code == CODE_64BIT && i.prefix[ADDR_PREFIX])
4107         as_bad (_("32-bit address isn't allowed in 64-bit MPX instructions."));
4108       else if (flag_code != CODE_16BIT
4109                ? i.prefix[ADDR_PREFIX]
4110                : i.mem_operands && !i.prefix[ADDR_PREFIX])
4111         as_bad (_("16-bit address isn't allowed in MPX instructions"));
4112     }
4113
4114   /* Insert BND prefix.  */
4115   if (add_bnd_prefix
4116       && i.tm.opcode_modifier.bndprefixok
4117       && !i.prefix[BND_PREFIX])
4118     add_prefix (BND_PREFIX_OPCODE);
4119
4120   /* Check string instruction segment overrides.  */
4121   if (i.tm.opcode_modifier.isstring && i.mem_operands != 0)
4122     {
4123       if (!check_string ())
4124         return;
4125       i.disp_operands = 0;
4126     }
4127
4128   if (optimize && !i.no_optimize && i.tm.opcode_modifier.optimize)
4129     optimize_encoding ();
4130
4131   if (!process_suffix ())
4132     return;
4133
4134   /* Update operand types.  */
4135   for (j = 0; j < i.operands; j++)
4136     i.types[j] = operand_type_and (i.types[j], i.tm.operand_types[j]);
4137
4138   /* Make still unresolved immediate matches conform to size of immediate
4139      given in i.suffix.  */
4140   if (!finalize_imm ())
4141     return;
4142
4143   if (i.types[0].bitfield.imm1)
4144     i.imm_operands = 0; /* kludge for shift insns.  */
4145
4146   /* We only need to check those implicit registers for instructions
4147      with 3 operands or less.  */
4148   if (i.operands <= 3)
4149     for (j = 0; j < i.operands; j++)
4150       if (i.types[j].bitfield.inoutportreg
4151           || i.types[j].bitfield.shiftcount
4152           || (i.types[j].bitfield.acc && !i.types[j].bitfield.xmmword))
4153         i.reg_operands--;
4154
4155   /* ImmExt should be processed after SSE2AVX.  */
4156   if (!i.tm.opcode_modifier.sse2avx
4157       && i.tm.opcode_modifier.immext)
4158     process_immext ();
4159
4160   /* For insns with operands there are more diddles to do to the opcode.  */
4161   if (i.operands)
4162     {
4163       if (!process_operands ())
4164         return;
4165     }
4166   else if (!quiet_warnings && i.tm.opcode_modifier.ugh)
4167     {
4168       /* UnixWare fsub no args is alias for fsubp, fadd -> faddp, etc.  */
4169       as_warn (_("translating to `%sp'"), i.tm.name);
4170     }
4171
4172   if (i.tm.opcode_modifier.vex || i.tm.opcode_modifier.vexopcode
4173       || is_evex_encoding (&i.tm))
4174     {
4175       if (flag_code == CODE_16BIT)
4176         {
4177           as_bad (_("instruction `%s' isn't supported in 16-bit mode."),
4178                   i.tm.name);
4179           return;
4180         }
4181
4182       if (i.tm.opcode_modifier.vex)
4183         build_vex_prefix (t);
4184       else
4185         build_evex_prefix ();
4186     }
4187
4188   /* Handle conversion of 'int $3' --> special int3 insn.  XOP or FMA4
4189      instructions may define INT_OPCODE as well, so avoid this corner
4190      case for those instructions that use MODRM.  */
4191   if (i.tm.base_opcode == INT_OPCODE
4192       && !i.tm.opcode_modifier.modrm
4193       && i.op[0].imms->X_add_number == 3)
4194     {
4195       i.tm.base_opcode = INT3_OPCODE;
4196       i.imm_operands = 0;
4197     }
4198
4199   if ((i.tm.opcode_modifier.jump
4200        || i.tm.opcode_modifier.jumpbyte
4201        || i.tm.opcode_modifier.jumpdword)
4202       && i.op[0].disps->X_op == O_constant)
4203     {
4204       /* Convert "jmp constant" (and "call constant") to a jump (call) to
4205          the absolute address given by the constant.  Since ix86 jumps and
4206          calls are pc relative, we need to generate a reloc.  */
4207       i.op[0].disps->X_add_symbol = &abs_symbol;
4208       i.op[0].disps->X_op = O_symbol;
4209     }
4210
4211   if (i.tm.opcode_modifier.rex64)
4212     i.rex |= REX_W;
4213
4214   /* For 8 bit registers we need an empty rex prefix.  Also if the
4215      instruction already has a prefix, we need to convert old
4216      registers to new ones.  */
4217
4218   if ((i.types[0].bitfield.reg && i.types[0].bitfield.byte
4219        && (i.op[0].regs->reg_flags & RegRex64) != 0)
4220       || (i.types[1].bitfield.reg && i.types[1].bitfield.byte
4221           && (i.op[1].regs->reg_flags & RegRex64) != 0)
4222       || (((i.types[0].bitfield.reg && i.types[0].bitfield.byte)
4223            || (i.types[1].bitfield.reg && i.types[1].bitfield.byte))
4224           && i.rex != 0))
4225     {
4226       int x;
4227
4228       i.rex |= REX_OPCODE;
4229       for (x = 0; x < 2; x++)
4230         {
4231           /* Look for 8 bit operand that uses old registers.  */
4232           if (i.types[x].bitfield.reg && i.types[x].bitfield.byte
4233               && (i.op[x].regs->reg_flags & RegRex64) == 0)
4234             {
4235               /* In case it is "hi" register, give up.  */
4236               if (i.op[x].regs->reg_num > 3)
4237                 as_bad (_("can't encode register '%s%s' in an "
4238                           "instruction requiring REX prefix."),
4239                         register_prefix, i.op[x].regs->reg_name);
4240
4241               /* Otherwise it is equivalent to the extended register.
4242                  Since the encoding doesn't change this is merely
4243                  cosmetic cleanup for debug output.  */
4244
4245               i.op[x].regs = i.op[x].regs + 8;
4246             }
4247         }
4248     }
4249
4250   if (i.rex == 0 && i.rex_encoding)
4251     {
4252       /* Check if we can add a REX_OPCODE byte.  Look for 8 bit operand
4253          that uses legacy register.  If it is "hi" register, don't add
4254          the REX_OPCODE byte.  */
4255       int x;
4256       for (x = 0; x < 2; x++)
4257         if (i.types[x].bitfield.reg
4258             && i.types[x].bitfield.byte
4259             && (i.op[x].regs->reg_flags & RegRex64) == 0
4260             && i.op[x].regs->reg_num > 3)
4261           {
4262             i.rex_encoding = FALSE;
4263             break;
4264           }
4265
4266       if (i.rex_encoding)
4267         i.rex = REX_OPCODE;
4268     }
4269
4270   if (i.rex != 0)
4271     add_prefix (REX_OPCODE | i.rex);
4272
4273   /* We are ready to output the insn.  */
4274   output_insn ();
4275 }
4276
4277 static char *
4278 parse_insn (char *line, char *mnemonic)
4279 {
4280   char *l = line;
4281   char *token_start = l;
4282   char *mnem_p;
4283   int supported;
4284   const insn_template *t;
4285   char *dot_p = NULL;
4286
4287   while (1)
4288     {
4289       mnem_p = mnemonic;
4290       while ((*mnem_p = mnemonic_chars[(unsigned char) *l]) != 0)
4291         {
4292           if (*mnem_p == '.')
4293             dot_p = mnem_p;
4294           mnem_p++;
4295           if (mnem_p >= mnemonic + MAX_MNEM_SIZE)
4296             {
4297               as_bad (_("no such instruction: `%s'"), token_start);
4298               return NULL;
4299             }
4300           l++;
4301         }
4302       if (!is_space_char (*l)
4303           && *l != END_OF_INSN
4304           && (intel_syntax
4305               || (*l != PREFIX_SEPARATOR
4306                   && *l != ',')))
4307         {
4308           as_bad (_("invalid character %s in mnemonic"),
4309                   output_invalid (*l));
4310           return NULL;
4311         }
4312       if (token_start == l)
4313         {
4314           if (!intel_syntax && *l == PREFIX_SEPARATOR)
4315             as_bad (_("expecting prefix; got nothing"));
4316           else
4317             as_bad (_("expecting mnemonic; got nothing"));
4318           return NULL;
4319         }
4320
4321       /* Look up instruction (or prefix) via hash table.  */
4322       current_templates = (const templates *) hash_find (op_hash, mnemonic);
4323
4324       if (*l != END_OF_INSN
4325           && (!is_space_char (*l) || l[1] != END_OF_INSN)
4326           && current_templates
4327           && current_templates->start->opcode_modifier.isprefix)
4328         {
4329           if (!cpu_flags_check_cpu64 (current_templates->start->cpu_flags))
4330             {
4331               as_bad ((flag_code != CODE_64BIT
4332                        ? _("`%s' is only supported in 64-bit mode")
4333                        : _("`%s' is not supported in 64-bit mode")),
4334                       current_templates->start->name);
4335               return NULL;
4336             }
4337           /* If we are in 16-bit mode, do not allow addr16 or data16.
4338              Similarly, in 32-bit mode, do not allow addr32 or data32.  */
4339           if ((current_templates->start->opcode_modifier.size16
4340                || current_templates->start->opcode_modifier.size32)
4341               && flag_code != CODE_64BIT
4342               && (current_templates->start->opcode_modifier.size32
4343                   ^ (flag_code == CODE_16BIT)))
4344             {
4345               as_bad (_("redundant %s prefix"),
4346                       current_templates->start->name);
4347               return NULL;
4348             }
4349           if (current_templates->start->opcode_length == 0)
4350             {
4351               /* Handle pseudo prefixes.  */
4352               switch (current_templates->start->base_opcode)
4353                 {
4354                 case 0x0:
4355                   /* {disp8} */
4356                   i.disp_encoding = disp_encoding_8bit;
4357                   break;
4358                 case 0x1:
4359                   /* {disp32} */
4360                   i.disp_encoding = disp_encoding_32bit;
4361                   break;
4362                 case 0x2:
4363                   /* {load} */
4364                   i.dir_encoding = dir_encoding_load;
4365                   break;
4366                 case 0x3:
4367                   /* {store} */
4368                   i.dir_encoding = dir_encoding_store;
4369                   break;
4370                 case 0x4:
4371                   /* {vex2} */
4372                   i.vec_encoding = vex_encoding_vex2;
4373                   break;
4374                 case 0x5:
4375                   /* {vex3} */
4376                   i.vec_encoding = vex_encoding_vex3;
4377                   break;
4378                 case 0x6:
4379                   /* {evex} */
4380                   i.vec_encoding = vex_encoding_evex;
4381                   break;
4382                 case 0x7:
4383                   /* {rex} */
4384                   i.rex_encoding = TRUE;
4385                   break;
4386                 case 0x8:
4387                   /* {nooptimize} */
4388                   i.no_optimize = TRUE;
4389                   break;
4390                 default:
4391                   abort ();
4392                 }
4393             }
4394           else
4395             {
4396               /* Add prefix, checking for repeated prefixes.  */
4397               switch (add_prefix (current_templates->start->base_opcode))
4398                 {
4399                 case PREFIX_EXIST:
4400                   return NULL;
4401                 case PREFIX_DS:
4402                   if (current_templates->start->cpu_flags.bitfield.cpuibt)
4403                     i.notrack_prefix = current_templates->start->name;
4404                   break;
4405                 case PREFIX_REP:
4406                   if (current_templates->start->cpu_flags.bitfield.cpuhle)
4407                     i.hle_prefix = current_templates->start->name;
4408                   else if (current_templates->start->cpu_flags.bitfield.cpumpx)
4409                     i.bnd_prefix = current_templates->start->name;
4410                   else
4411                     i.rep_prefix = current_templates->start->name;
4412                   break;
4413                 default:
4414                   break;
4415                 }
4416             }
4417           /* Skip past PREFIX_SEPARATOR and reset token_start.  */
4418           token_start = ++l;
4419         }
4420       else
4421         break;
4422     }
4423
4424   if (!current_templates)
4425     {
4426       /* Check if we should swap operand or force 32bit displacement in
4427          encoding.  */
4428       if (mnem_p - 2 == dot_p && dot_p[1] == 's')
4429         i.dir_encoding = dir_encoding_store;
4430       else if (mnem_p - 3 == dot_p
4431                && dot_p[1] == 'd'
4432                && dot_p[2] == '8')
4433         i.disp_encoding = disp_encoding_8bit;
4434       else if (mnem_p - 4 == dot_p
4435                && dot_p[1] == 'd'
4436                && dot_p[2] == '3'
4437                && dot_p[3] == '2')
4438         i.disp_encoding = disp_encoding_32bit;
4439       else
4440         goto check_suffix;
4441       mnem_p = dot_p;
4442       *dot_p = '\0';
4443       current_templates = (const templates *) hash_find (op_hash, mnemonic);
4444     }
4445
4446   if (!current_templates)
4447     {
4448 check_suffix:
4449       /* See if we can get a match by trimming off a suffix.  */
4450       switch (mnem_p[-1])
4451         {
4452         case WORD_MNEM_SUFFIX:
4453           if (intel_syntax && (intel_float_operand (mnemonic) & 2))
4454             i.suffix = SHORT_MNEM_SUFFIX;
4455           else
4456             /* Fall through.  */
4457         case BYTE_MNEM_SUFFIX:
4458         case QWORD_MNEM_SUFFIX:
4459           i.suffix = mnem_p[-1];
4460           mnem_p[-1] = '\0';
4461           current_templates = (const templates *) hash_find (op_hash,
4462                                                              mnemonic);
4463           break;
4464         case SHORT_MNEM_SUFFIX:
4465         case LONG_MNEM_SUFFIX:
4466           if (!intel_syntax)
4467             {
4468               i.suffix = mnem_p[-1];
4469               mnem_p[-1] = '\0';
4470               current_templates = (const templates *) hash_find (op_hash,
4471                                                                  mnemonic);
4472             }
4473           break;
4474
4475           /* Intel Syntax.  */
4476         case 'd':
4477           if (intel_syntax)
4478             {
4479               if (intel_float_operand (mnemonic) == 1)
4480                 i.suffix = SHORT_MNEM_SUFFIX;
4481               else
4482                 i.suffix = LONG_MNEM_SUFFIX;
4483               mnem_p[-1] = '\0';
4484               current_templates = (const templates *) hash_find (op_hash,
4485                                                                  mnemonic);
4486             }
4487           break;
4488         }
4489       if (!current_templates)
4490         {
4491           as_bad (_("no such instruction: `%s'"), token_start);
4492           return NULL;
4493         }
4494     }
4495
4496   if (current_templates->start->opcode_modifier.jump
4497       || current_templates->start->opcode_modifier.jumpbyte)
4498     {
4499       /* Check for a branch hint.  We allow ",pt" and ",pn" for
4500          predict taken and predict not taken respectively.
4501          I'm not sure that branch hints actually do anything on loop
4502          and jcxz insns (JumpByte) for current Pentium4 chips.  They
4503          may work in the future and it doesn't hurt to accept them
4504          now.  */
4505       if (l[0] == ',' && l[1] == 'p')
4506         {
4507           if (l[2] == 't')
4508             {
4509               if (!add_prefix (DS_PREFIX_OPCODE))
4510                 return NULL;
4511               l += 3;
4512             }
4513           else if (l[2] == 'n')
4514             {
4515               if (!add_prefix (CS_PREFIX_OPCODE))
4516                 return NULL;
4517               l += 3;
4518             }
4519         }
4520     }
4521   /* Any other comma loses.  */
4522   if (*l == ',')
4523     {
4524       as_bad (_("invalid character %s in mnemonic"),
4525               output_invalid (*l));
4526       return NULL;
4527     }
4528
4529   /* Check if instruction is supported on specified architecture.  */
4530   supported = 0;
4531   for (t = current_templates->start; t < current_templates->end; ++t)
4532     {
4533       supported |= cpu_flags_match (t);
4534       if (supported == CPU_FLAGS_PERFECT_MATCH)
4535         {
4536           if (!cpu_arch_flags.bitfield.cpui386 && (flag_code != CODE_16BIT))
4537             as_warn (_("use .code16 to ensure correct addressing mode"));
4538
4539           return l;
4540         }
4541     }
4542
4543   if (!(supported & CPU_FLAGS_64BIT_MATCH))
4544     as_bad (flag_code == CODE_64BIT
4545             ? _("`%s' is not supported in 64-bit mode")
4546             : _("`%s' is only supported in 64-bit mode"),
4547             current_templates->start->name);
4548   else
4549     as_bad (_("`%s' is not supported on `%s%s'"),
4550             current_templates->start->name,
4551             cpu_arch_name ? cpu_arch_name : default_arch,
4552             cpu_sub_arch_name ? cpu_sub_arch_name : "");
4553
4554   return NULL;
4555 }
4556
4557 static char *
4558 parse_operands (char *l, const char *mnemonic)
4559 {
4560   char *token_start;
4561
4562   /* 1 if operand is pending after ','.  */
4563   unsigned int expecting_operand = 0;
4564
4565   /* Non-zero if operand parens not balanced.  */
4566   unsigned int paren_not_balanced;
4567
4568   while (*l != END_OF_INSN)
4569     {
4570       /* Skip optional white space before operand.  */
4571       if (is_space_char (*l))
4572         ++l;
4573       if (!is_operand_char (*l) && *l != END_OF_INSN && *l != '"')
4574         {
4575           as_bad (_("invalid character %s before operand %d"),
4576                   output_invalid (*l),
4577                   i.operands + 1);
4578           return NULL;
4579         }
4580       token_start = l;  /* After white space.  */
4581       paren_not_balanced = 0;
4582       while (paren_not_balanced || *l != ',')
4583         {
4584           if (*l == END_OF_INSN)
4585             {
4586               if (paren_not_balanced)
4587                 {
4588                   if (!intel_syntax)
4589                     as_bad (_("unbalanced parenthesis in operand %d."),
4590                             i.operands + 1);
4591                   else
4592                     as_bad (_("unbalanced brackets in operand %d."),
4593                             i.operands + 1);
4594                   return NULL;
4595                 }
4596               else
4597                 break;  /* we are done */
4598             }
4599           else if (!is_operand_char (*l) && !is_space_char (*l) && *l != '"')
4600             {
4601               as_bad (_("invalid character %s in operand %d"),
4602                       output_invalid (*l),
4603                       i.operands + 1);
4604               return NULL;
4605             }
4606           if (!intel_syntax)
4607             {
4608               if (*l == '(')
4609                 ++paren_not_balanced;
4610               if (*l == ')')
4611                 --paren_not_balanced;
4612             }
4613           else
4614             {
4615               if (*l == '[')
4616                 ++paren_not_balanced;
4617               if (*l == ']')
4618                 --paren_not_balanced;
4619             }
4620           l++;
4621         }
4622       if (l != token_start)
4623         {                       /* Yes, we've read in another operand.  */
4624           unsigned int operand_ok;
4625           this_operand = i.operands++;
4626           if (i.operands > MAX_OPERANDS)
4627             {
4628               as_bad (_("spurious operands; (%d operands/instruction max)"),
4629                       MAX_OPERANDS);
4630               return NULL;
4631             }
4632           i.types[this_operand].bitfield.unspecified = 1;
4633           /* Now parse operand adding info to 'i' as we go along.  */
4634           END_STRING_AND_SAVE (l);
4635
4636           if (intel_syntax)
4637             operand_ok =
4638               i386_intel_operand (token_start,
4639                                   intel_float_operand (mnemonic));
4640           else
4641             operand_ok = i386_att_operand (token_start);
4642
4643           RESTORE_END_STRING (l);
4644           if (!operand_ok)
4645             return NULL;
4646         }
4647       else
4648         {
4649           if (expecting_operand)
4650             {
4651             expecting_operand_after_comma:
4652               as_bad (_("expecting operand after ','; got nothing"));
4653               return NULL;
4654             }
4655           if (*l == ',')
4656             {
4657               as_bad (_("expecting operand before ','; got nothing"));
4658               return NULL;
4659             }
4660         }
4661
4662       /* Now *l must be either ',' or END_OF_INSN.  */
4663       if (*l == ',')
4664         {
4665           if (*++l == END_OF_INSN)
4666             {
4667               /* Just skip it, if it's \n complain.  */
4668               goto expecting_operand_after_comma;
4669             }
4670           expecting_operand = 1;
4671         }
4672     }
4673   return l;
4674 }
4675
4676 static void
4677 swap_2_operands (int xchg1, int xchg2)
4678 {
4679   union i386_op temp_op;
4680   i386_operand_type temp_type;
4681   enum bfd_reloc_code_real temp_reloc;
4682
4683   temp_type = i.types[xchg2];
4684   i.types[xchg2] = i.types[xchg1];
4685   i.types[xchg1] = temp_type;
4686   temp_op = i.op[xchg2];
4687   i.op[xchg2] = i.op[xchg1];
4688   i.op[xchg1] = temp_op;
4689   temp_reloc = i.reloc[xchg2];
4690   i.reloc[xchg2] = i.reloc[xchg1];
4691   i.reloc[xchg1] = temp_reloc;
4692
4693   if (i.mask)
4694     {
4695       if (i.mask->operand == xchg1)
4696         i.mask->operand = xchg2;
4697       else if (i.mask->operand == xchg2)
4698         i.mask->operand = xchg1;
4699     }
4700   if (i.broadcast)
4701     {
4702       if (i.broadcast->operand == xchg1)
4703         i.broadcast->operand = xchg2;
4704       else if (i.broadcast->operand == xchg2)
4705         i.broadcast->operand = xchg1;
4706     }
4707   if (i.rounding)
4708     {
4709       if (i.rounding->operand == xchg1)
4710         i.rounding->operand = xchg2;
4711       else if (i.rounding->operand == xchg2)
4712         i.rounding->operand = xchg1;
4713     }
4714 }
4715
4716 static void
4717 swap_operands (void)
4718 {
4719   switch (i.operands)
4720     {
4721     case 5:
4722     case 4:
4723       swap_2_operands (1, i.operands - 2);
4724       /* Fall through.  */
4725     case 3:
4726     case 2:
4727       swap_2_operands (0, i.operands - 1);
4728       break;
4729     default:
4730       abort ();
4731     }
4732
4733   if (i.mem_operands == 2)
4734     {
4735       const seg_entry *temp_seg;
4736       temp_seg = i.seg[0];
4737       i.seg[0] = i.seg[1];
4738       i.seg[1] = temp_seg;
4739     }
4740 }
4741
4742 /* Try to ensure constant immediates are represented in the smallest
4743    opcode possible.  */
4744 static void
4745 optimize_imm (void)
4746 {
4747   char guess_suffix = 0;
4748   int op;
4749
4750   if (i.suffix)
4751     guess_suffix = i.suffix;
4752   else if (i.reg_operands)
4753     {
4754       /* Figure out a suffix from the last register operand specified.
4755          We can't do this properly yet, ie. excluding InOutPortReg,
4756          but the following works for instructions with immediates.
4757          In any case, we can't set i.suffix yet.  */
4758       for (op = i.operands; --op >= 0;)
4759         if (i.types[op].bitfield.reg && i.types[op].bitfield.byte)
4760           {
4761             guess_suffix = BYTE_MNEM_SUFFIX;
4762             break;
4763           }
4764         else if (i.types[op].bitfield.reg && i.types[op].bitfield.word)
4765           {
4766             guess_suffix = WORD_MNEM_SUFFIX;
4767             break;
4768           }
4769         else if (i.types[op].bitfield.reg && i.types[op].bitfield.dword)
4770           {
4771             guess_suffix = LONG_MNEM_SUFFIX;
4772             break;
4773           }
4774         else if (i.types[op].bitfield.reg && i.types[op].bitfield.qword)
4775           {
4776             guess_suffix = QWORD_MNEM_SUFFIX;
4777             break;
4778           }
4779     }
4780   else if ((flag_code == CODE_16BIT) ^ (i.prefix[DATA_PREFIX] != 0))
4781     guess_suffix = WORD_MNEM_SUFFIX;
4782
4783   for (op = i.operands; --op >= 0;)
4784     if (operand_type_check (i.types[op], imm))
4785       {
4786         switch (i.op[op].imms->X_op)
4787           {
4788           case O_constant:
4789             /* If a suffix is given, this operand may be shortened.  */
4790             switch (guess_suffix)
4791               {
4792               case LONG_MNEM_SUFFIX:
4793                 i.types[op].bitfield.imm32 = 1;
4794                 i.types[op].bitfield.imm64 = 1;
4795                 break;
4796               case WORD_MNEM_SUFFIX:
4797                 i.types[op].bitfield.imm16 = 1;
4798                 i.types[op].bitfield.imm32 = 1;
4799                 i.types[op].bitfield.imm32s = 1;
4800                 i.types[op].bitfield.imm64 = 1;
4801                 break;
4802               case BYTE_MNEM_SUFFIX:
4803                 i.types[op].bitfield.imm8 = 1;
4804                 i.types[op].bitfield.imm8s = 1;
4805                 i.types[op].bitfield.imm16 = 1;
4806                 i.types[op].bitfield.imm32 = 1;
4807                 i.types[op].bitfield.imm32s = 1;
4808                 i.types[op].bitfield.imm64 = 1;
4809                 break;
4810               }
4811
4812             /* If this operand is at most 16 bits, convert it
4813                to a signed 16 bit number before trying to see
4814                whether it will fit in an even smaller size.
4815                This allows a 16-bit operand such as $0xffe0 to
4816                be recognised as within Imm8S range.  */
4817             if ((i.types[op].bitfield.imm16)
4818                 && (i.op[op].imms->X_add_number & ~(offsetT) 0xffff) == 0)
4819               {
4820                 i.op[op].imms->X_add_number =
4821                   (((i.op[op].imms->X_add_number & 0xffff) ^ 0x8000) - 0x8000);
4822               }
4823 #ifdef BFD64
4824             /* Store 32-bit immediate in 64-bit for 64-bit BFD.  */
4825             if ((i.types[op].bitfield.imm32)
4826                 && ((i.op[op].imms->X_add_number & ~(((offsetT) 2 << 31) - 1))
4827                     == 0))
4828               {
4829                 i.op[op].imms->X_add_number = ((i.op[op].imms->X_add_number
4830                                                 ^ ((offsetT) 1 << 31))
4831                                                - ((offsetT) 1 << 31));
4832               }
4833 #endif
4834             i.types[op]
4835               = operand_type_or (i.types[op],
4836                                  smallest_imm_type (i.op[op].imms->X_add_number));
4837
4838             /* We must avoid matching of Imm32 templates when 64bit
4839                only immediate is available.  */
4840             if (guess_suffix == QWORD_MNEM_SUFFIX)
4841               i.types[op].bitfield.imm32 = 0;
4842             break;
4843
4844           case O_absent:
4845           case O_register:
4846             abort ();
4847
4848             /* Symbols and expressions.  */
4849           default:
4850             /* Convert symbolic operand to proper sizes for matching, but don't
4851                prevent matching a set of insns that only supports sizes other
4852                than those matching the insn suffix.  */
4853             {
4854               i386_operand_type mask, allowed;
4855               const insn_template *t;
4856
4857               operand_type_set (&mask, 0);
4858               operand_type_set (&allowed, 0);
4859
4860               for (t = current_templates->start;
4861                    t < current_templates->end;
4862                    ++t)
4863                 allowed = operand_type_or (allowed,
4864                                            t->operand_types[op]);
4865               switch (guess_suffix)
4866                 {
4867                 case QWORD_MNEM_SUFFIX:
4868                   mask.bitfield.imm64 = 1;
4869                   mask.bitfield.imm32s = 1;
4870                   break;
4871                 case LONG_MNEM_SUFFIX:
4872                   mask.bitfield.imm32 = 1;
4873                   break;
4874                 case WORD_MNEM_SUFFIX:
4875                   mask.bitfield.imm16 = 1;
4876                   break;
4877                 case BYTE_MNEM_SUFFIX:
4878                   mask.bitfield.imm8 = 1;
4879                   break;
4880                 default:
4881                   break;
4882                 }
4883               allowed = operand_type_and (mask, allowed);
4884               if (!operand_type_all_zero (&allowed))
4885                 i.types[op] = operand_type_and (i.types[op], mask);
4886             }
4887             break;
4888           }
4889       }
4890 }
4891
4892 /* Try to use the smallest displacement type too.  */
4893 static void
4894 optimize_disp (void)
4895 {
4896   int op;
4897
4898   for (op = i.operands; --op >= 0;)
4899     if (operand_type_check (i.types[op], disp))
4900       {
4901         if (i.op[op].disps->X_op == O_constant)
4902           {
4903             offsetT op_disp = i.op[op].disps->X_add_number;
4904
4905             if (i.types[op].bitfield.disp16
4906                 && (op_disp & ~(offsetT) 0xffff) == 0)
4907               {
4908                 /* If this operand is at most 16 bits, convert
4909                    to a signed 16 bit number and don't use 64bit
4910                    displacement.  */
4911                 op_disp = (((op_disp & 0xffff) ^ 0x8000) - 0x8000);
4912                 i.types[op].bitfield.disp64 = 0;
4913               }
4914 #ifdef BFD64
4915             /* Optimize 64-bit displacement to 32-bit for 64-bit BFD.  */
4916             if (i.types[op].bitfield.disp32
4917                 && (op_disp & ~(((offsetT) 2 << 31) - 1)) == 0)
4918               {
4919                 /* If this operand is at most 32 bits, convert
4920                    to a signed 32 bit number and don't use 64bit
4921                    displacement.  */
4922                 op_disp &= (((offsetT) 2 << 31) - 1);
4923                 op_disp = (op_disp ^ ((offsetT) 1 << 31)) - ((addressT) 1 << 31);
4924                 i.types[op].bitfield.disp64 = 0;
4925               }
4926 #endif
4927             if (!op_disp && i.types[op].bitfield.baseindex)
4928               {
4929                 i.types[op].bitfield.disp8 = 0;
4930                 i.types[op].bitfield.disp16 = 0;
4931                 i.types[op].bitfield.disp32 = 0;
4932                 i.types[op].bitfield.disp32s = 0;
4933                 i.types[op].bitfield.disp64 = 0;
4934                 i.op[op].disps = 0;
4935                 i.disp_operands--;
4936               }
4937             else if (flag_code == CODE_64BIT)
4938               {
4939                 if (fits_in_signed_long (op_disp))
4940                   {
4941                     i.types[op].bitfield.disp64 = 0;
4942                     i.types[op].bitfield.disp32s = 1;
4943                   }
4944                 if (i.prefix[ADDR_PREFIX]
4945                     && fits_in_unsigned_long (op_disp))
4946                   i.types[op].bitfield.disp32 = 1;
4947               }
4948             if ((i.types[op].bitfield.disp32
4949                  || i.types[op].bitfield.disp32s
4950                  || i.types[op].bitfield.disp16)
4951                 && fits_in_disp8 (op_disp))
4952               i.types[op].bitfield.disp8 = 1;
4953           }
4954         else if (i.reloc[op] == BFD_RELOC_386_TLS_DESC_CALL
4955                  || i.reloc[op] == BFD_RELOC_X86_64_TLSDESC_CALL)
4956           {
4957             fix_new_exp (frag_now, frag_more (0) - frag_now->fr_literal, 0,
4958                          i.op[op].disps, 0, i.reloc[op]);
4959             i.types[op].bitfield.disp8 = 0;
4960             i.types[op].bitfield.disp16 = 0;
4961             i.types[op].bitfield.disp32 = 0;
4962             i.types[op].bitfield.disp32s = 0;
4963             i.types[op].bitfield.disp64 = 0;
4964           }
4965         else
4966           /* We only support 64bit displacement on constants.  */
4967           i.types[op].bitfield.disp64 = 0;
4968       }
4969 }
4970
4971 /* Check if operands are valid for the instruction.  */
4972
4973 static int
4974 check_VecOperands (const insn_template *t)
4975 {
4976   unsigned int op;
4977   i386_cpu_flags cpu;
4978   static const i386_cpu_flags avx512 = CPU_ANY_AVX512F_FLAGS;
4979
4980   /* Templates allowing for ZMMword as well as YMMword and/or XMMword for
4981      any one operand are implicity requiring AVX512VL support if the actual
4982      operand size is YMMword or XMMword.  Since this function runs after
4983      template matching, there's no need to check for YMMword/XMMword in
4984      the template.  */
4985   cpu = cpu_flags_and (t->cpu_flags, avx512);
4986   if (!cpu_flags_all_zero (&cpu)
4987       && !t->cpu_flags.bitfield.cpuavx512vl
4988       && !cpu_arch_flags.bitfield.cpuavx512vl)
4989     {
4990       for (op = 0; op < t->operands; ++op)
4991         {
4992           if (t->operand_types[op].bitfield.zmmword
4993               && (i.types[op].bitfield.ymmword
4994                   || i.types[op].bitfield.xmmword))
4995             {
4996               i.error = unsupported;
4997               return 1;
4998             }
4999         }
5000     }
5001
5002   /* Without VSIB byte, we can't have a vector register for index.  */
5003   if (!t->opcode_modifier.vecsib
5004       && i.index_reg
5005       && (i.index_reg->reg_type.bitfield.xmmword
5006           || i.index_reg->reg_type.bitfield.ymmword
5007           || i.index_reg->reg_type.bitfield.zmmword))
5008     {
5009       i.error = unsupported_vector_index_register;
5010       return 1;
5011     }
5012
5013   /* Check if default mask is allowed.  */
5014   if (t->opcode_modifier.nodefmask
5015       && (!i.mask || i.mask->mask->reg_num == 0))
5016     {
5017       i.error = no_default_mask;
5018       return 1;
5019     }
5020
5021   /* For VSIB byte, we need a vector register for index, and all vector
5022      registers must be distinct.  */
5023   if (t->opcode_modifier.vecsib)
5024     {
5025       if (!i.index_reg
5026           || !((t->opcode_modifier.vecsib == VecSIB128
5027                 && i.index_reg->reg_type.bitfield.xmmword)
5028                || (t->opcode_modifier.vecsib == VecSIB256
5029                    && i.index_reg->reg_type.bitfield.ymmword)
5030                || (t->opcode_modifier.vecsib == VecSIB512
5031                    && i.index_reg->reg_type.bitfield.zmmword)))
5032       {
5033         i.error = invalid_vsib_address;
5034         return 1;
5035       }
5036
5037       gas_assert (i.reg_operands == 2 || i.mask);
5038       if (i.reg_operands == 2 && !i.mask)
5039         {
5040           gas_assert (i.types[0].bitfield.regsimd);
5041           gas_assert (i.types[0].bitfield.xmmword
5042                       || i.types[0].bitfield.ymmword);
5043           gas_assert (i.types[2].bitfield.regsimd);
5044           gas_assert (i.types[2].bitfield.xmmword
5045                       || i.types[2].bitfield.ymmword);
5046           if (operand_check == check_none)
5047             return 0;
5048           if (register_number (i.op[0].regs)
5049               != register_number (i.index_reg)
5050               && register_number (i.op[2].regs)
5051                  != register_number (i.index_reg)
5052               && register_number (i.op[0].regs)
5053                  != register_number (i.op[2].regs))
5054             return 0;
5055           if (operand_check == check_error)
5056             {
5057               i.error = invalid_vector_register_set;
5058               return 1;
5059             }
5060           as_warn (_("mask, index, and destination registers should be distinct"));
5061         }
5062       else if (i.reg_operands == 1 && i.mask)
5063         {
5064           if (i.types[1].bitfield.regsimd
5065               && (i.types[1].bitfield.xmmword
5066                   || i.types[1].bitfield.ymmword
5067                   || i.types[1].bitfield.zmmword)
5068               && (register_number (i.op[1].regs)
5069                   == register_number (i.index_reg)))
5070             {
5071               if (operand_check == check_error)
5072                 {
5073                   i.error = invalid_vector_register_set;
5074                   return 1;
5075                 }
5076               if (operand_check != check_none)
5077                 as_warn (_("index and destination registers should be distinct"));
5078             }
5079         }
5080     }
5081
5082   /* Check if broadcast is supported by the instruction and is applied
5083      to the memory operand.  */
5084   if (i.broadcast)
5085     {
5086       i386_operand_type type, overlap;
5087
5088       /* Check if specified broadcast is supported in this instruction,
5089          and it's applied to memory operand of DWORD or QWORD type.  */
5090       op = i.broadcast->operand;
5091       if (!t->opcode_modifier.broadcast
5092           || !i.types[op].bitfield.mem
5093           || (!i.types[op].bitfield.unspecified
5094               && (t->operand_types[op].bitfield.dword
5095                   ? !i.types[op].bitfield.dword
5096                   : !i.types[op].bitfield.qword)))
5097         {
5098         bad_broadcast:
5099           i.error = unsupported_broadcast;
5100           return 1;
5101         }
5102
5103       operand_type_set (&type, 0);
5104       switch ((t->operand_types[op].bitfield.dword ? 4 : 8) * i.broadcast->type)
5105         {
5106         case 8:
5107           type.bitfield.qword = 1;
5108           break;
5109         case 16:
5110           type.bitfield.xmmword = 1;
5111           break;
5112         case 32:
5113           type.bitfield.ymmword = 1;
5114           break;
5115         case 64:
5116           type.bitfield.zmmword = 1;
5117           break;
5118         default:
5119           goto bad_broadcast;
5120         }
5121
5122       overlap = operand_type_and (type, t->operand_types[op]);
5123       if (operand_type_all_zero (&overlap))
5124           goto bad_broadcast;
5125
5126       if (t->opcode_modifier.checkregsize)
5127         {
5128           unsigned int j;
5129
5130           type.bitfield.baseindex = 1;
5131           for (j = 0; j < i.operands; ++j)
5132             {
5133               if (j != op
5134                   && !operand_type_register_match(i.types[j],
5135                                                   t->operand_types[j],
5136                                                   type,
5137                                                   t->operand_types[op]))
5138                 goto bad_broadcast;
5139             }
5140         }
5141     }
5142   /* If broadcast is supported in this instruction, we need to check if
5143      operand of one-element size isn't specified without broadcast.  */
5144   else if (t->opcode_modifier.broadcast && i.mem_operands)
5145     {
5146       /* Find memory operand.  */
5147       for (op = 0; op < i.operands; op++)
5148         if (operand_type_check (i.types[op], anymem))
5149           break;
5150       gas_assert (op < i.operands);
5151       /* Check size of the memory operand.  */
5152       if (t->operand_types[op].bitfield.dword
5153           ? i.types[op].bitfield.dword
5154           : i.types[op].bitfield.qword)
5155         {
5156           i.error = broadcast_needed;
5157           return 1;
5158         }
5159     }
5160   else
5161     op = MAX_OPERANDS - 1; /* Avoid uninitialized variable warning.  */
5162
5163   /* Check if requested masking is supported.  */
5164   if (i.mask
5165       && (!t->opcode_modifier.masking
5166           || (i.mask->zeroing
5167               && t->opcode_modifier.masking == MERGING_MASKING)))
5168     {
5169       i.error = unsupported_masking;
5170       return 1;
5171     }
5172
5173   /* Check if masking is applied to dest operand.  */
5174   if (i.mask && (i.mask->operand != (int) (i.operands - 1)))
5175     {
5176       i.error = mask_not_on_destination;
5177       return 1;
5178     }
5179
5180   /* Check RC/SAE.  */
5181   if (i.rounding)
5182     {
5183       if ((i.rounding->type != saeonly
5184            && !t->opcode_modifier.staticrounding)
5185           || (i.rounding->type == saeonly
5186               && (t->opcode_modifier.staticrounding
5187                   || !t->opcode_modifier.sae)))
5188         {
5189           i.error = unsupported_rc_sae;
5190           return 1;
5191         }
5192       /* If the instruction has several immediate operands and one of
5193          them is rounding, the rounding operand should be the last
5194          immediate operand.  */
5195       if (i.imm_operands > 1
5196           && i.rounding->operand != (int) (i.imm_operands - 1))
5197         {
5198           i.error = rc_sae_operand_not_last_imm;
5199           return 1;
5200         }
5201     }
5202
5203   /* Check vector Disp8 operand.  */
5204   if (t->opcode_modifier.disp8memshift
5205       && i.disp_encoding != disp_encoding_32bit)
5206     {
5207       if (i.broadcast)
5208         i.memshift = t->operand_types[op].bitfield.dword ? 2 : 3;
5209       else
5210         i.memshift = t->opcode_modifier.disp8memshift;
5211
5212       for (op = 0; op < i.operands; op++)
5213         if (operand_type_check (i.types[op], disp)
5214             && i.op[op].disps->X_op == O_constant)
5215           {
5216             if (fits_in_disp8 (i.op[op].disps->X_add_number))
5217               {
5218                 i.types[op].bitfield.disp8 = 1;
5219                 return 0;
5220               }
5221             i.types[op].bitfield.disp8 = 0;
5222           }
5223     }
5224
5225   i.memshift = 0;
5226
5227   return 0;
5228 }
5229
5230 /* Check if operands are valid for the instruction.  Update VEX
5231    operand types.  */
5232
5233 static int
5234 VEX_check_operands (const insn_template *t)
5235 {
5236   if (i.vec_encoding == vex_encoding_evex)
5237     {
5238       /* This instruction must be encoded with EVEX prefix.  */
5239       if (!is_evex_encoding (t))
5240         {
5241           i.error = unsupported;
5242           return 1;
5243         }
5244       return 0;
5245     }
5246
5247   if (!t->opcode_modifier.vex)
5248     {
5249       /* This instruction template doesn't have VEX prefix.  */
5250       if (i.vec_encoding != vex_encoding_default)
5251         {
5252           i.error = unsupported;
5253           return 1;
5254         }
5255       return 0;
5256     }
5257
5258   /* Only check VEX_Imm4, which must be the first operand.  */
5259   if (t->operand_types[0].bitfield.vec_imm4)
5260     {
5261       if (i.op[0].imms->X_op != O_constant
5262           || !fits_in_imm4 (i.op[0].imms->X_add_number))
5263         {
5264           i.error = bad_imm4;
5265           return 1;
5266         }
5267
5268       /* Turn off Imm8 so that update_imm won't complain.  */
5269       i.types[0] = vec_imm4;
5270     }
5271
5272   return 0;
5273 }
5274
5275 static const insn_template *
5276 match_template (char mnem_suffix)
5277 {
5278   /* Points to template once we've found it.  */
5279   const insn_template *t;
5280   i386_operand_type overlap0, overlap1, overlap2, overlap3;
5281   i386_operand_type overlap4;
5282   unsigned int found_reverse_match;
5283   i386_opcode_modifier suffix_check, mnemsuf_check;
5284   i386_operand_type operand_types [MAX_OPERANDS];
5285   int addr_prefix_disp;
5286   unsigned int j;
5287   unsigned int found_cpu_match;
5288   unsigned int check_register;
5289   enum i386_error specific_error = 0;
5290
5291 #if MAX_OPERANDS != 5
5292 # error "MAX_OPERANDS must be 5."
5293 #endif
5294
5295   found_reverse_match = 0;
5296   addr_prefix_disp = -1;
5297
5298   memset (&suffix_check, 0, sizeof (suffix_check));
5299   if (intel_syntax && i.broadcast)
5300     /* nothing */;
5301   else if (i.suffix == BYTE_MNEM_SUFFIX)
5302     suffix_check.no_bsuf = 1;
5303   else if (i.suffix == WORD_MNEM_SUFFIX)
5304     suffix_check.no_wsuf = 1;
5305   else if (i.suffix == SHORT_MNEM_SUFFIX)
5306     suffix_check.no_ssuf = 1;
5307   else if (i.suffix == LONG_MNEM_SUFFIX)
5308     suffix_check.no_lsuf = 1;
5309   else if (i.suffix == QWORD_MNEM_SUFFIX)
5310     suffix_check.no_qsuf = 1;
5311   else if (i.suffix == LONG_DOUBLE_MNEM_SUFFIX)
5312     suffix_check.no_ldsuf = 1;
5313
5314   memset (&mnemsuf_check, 0, sizeof (mnemsuf_check));
5315   if (intel_syntax)
5316     {
5317       switch (mnem_suffix)
5318         {
5319         case BYTE_MNEM_SUFFIX:  mnemsuf_check.no_bsuf = 1; break;
5320         case WORD_MNEM_SUFFIX:  mnemsuf_check.no_wsuf = 1; break;
5321         case SHORT_MNEM_SUFFIX: mnemsuf_check.no_ssuf = 1; break;
5322         case LONG_MNEM_SUFFIX:  mnemsuf_check.no_lsuf = 1; break;
5323         case QWORD_MNEM_SUFFIX: mnemsuf_check.no_qsuf = 1; break;
5324         }
5325     }
5326
5327   /* Must have right number of operands.  */
5328   i.error = number_of_operands_mismatch;
5329
5330   for (t = current_templates->start; t < current_templates->end; t++)
5331     {
5332       addr_prefix_disp = -1;
5333
5334       if (i.operands != t->operands)
5335         continue;
5336
5337       /* Check processor support.  */
5338       i.error = unsupported;
5339       found_cpu_match = (cpu_flags_match (t)
5340                          == CPU_FLAGS_PERFECT_MATCH);
5341       if (!found_cpu_match)
5342         continue;
5343
5344       /* Check AT&T mnemonic.   */
5345       i.error = unsupported_with_intel_mnemonic;
5346       if (intel_mnemonic && t->opcode_modifier.attmnemonic)
5347         continue;
5348
5349       /* Check AT&T/Intel syntax and Intel64/AMD64 ISA.   */
5350       i.error = unsupported_syntax;
5351       if ((intel_syntax && t->opcode_modifier.attsyntax)
5352           || (!intel_syntax && t->opcode_modifier.intelsyntax)
5353           || (intel64 && t->opcode_modifier.amd64)
5354           || (!intel64 && t->opcode_modifier.intel64))
5355         continue;
5356
5357       /* Check the suffix, except for some instructions in intel mode.  */
5358       i.error = invalid_instruction_suffix;
5359       if ((!intel_syntax || !t->opcode_modifier.ignoresize)
5360           && ((t->opcode_modifier.no_bsuf && suffix_check.no_bsuf)
5361               || (t->opcode_modifier.no_wsuf && suffix_check.no_wsuf)
5362               || (t->opcode_modifier.no_lsuf && suffix_check.no_lsuf)
5363               || (t->opcode_modifier.no_ssuf && suffix_check.no_ssuf)
5364               || (t->opcode_modifier.no_qsuf && suffix_check.no_qsuf)
5365               || (t->opcode_modifier.no_ldsuf && suffix_check.no_ldsuf)))
5366         continue;
5367       /* In Intel mode all mnemonic suffixes must be explicitly allowed.  */
5368       if ((t->opcode_modifier.no_bsuf && mnemsuf_check.no_bsuf)
5369           || (t->opcode_modifier.no_wsuf && mnemsuf_check.no_wsuf)
5370           || (t->opcode_modifier.no_lsuf && mnemsuf_check.no_lsuf)
5371           || (t->opcode_modifier.no_ssuf && mnemsuf_check.no_ssuf)
5372           || (t->opcode_modifier.no_qsuf && mnemsuf_check.no_qsuf)
5373           || (t->opcode_modifier.no_ldsuf && mnemsuf_check.no_ldsuf))
5374         continue;
5375
5376       if (!operand_size_match (t))
5377         continue;
5378
5379       for (j = 0; j < MAX_OPERANDS; j++)
5380         operand_types[j] = t->operand_types[j];
5381
5382       /* In general, don't allow 64-bit operands in 32-bit mode.  */
5383       if (i.suffix == QWORD_MNEM_SUFFIX
5384           && flag_code != CODE_64BIT
5385           && (intel_syntax
5386               ? (!t->opcode_modifier.ignoresize
5387                  && !intel_float_operand (t->name))
5388               : intel_float_operand (t->name) != 2)
5389           && ((!operand_types[0].bitfield.regmmx
5390                && !operand_types[0].bitfield.regsimd)
5391               || (!operand_types[t->operands > 1].bitfield.regmmx
5392                   && !operand_types[t->operands > 1].bitfield.regsimd))
5393           && (t->base_opcode != 0x0fc7
5394               || t->extension_opcode != 1 /* cmpxchg8b */))
5395         continue;
5396
5397       /* In general, don't allow 32-bit operands on pre-386.  */
5398       else if (i.suffix == LONG_MNEM_SUFFIX
5399                && !cpu_arch_flags.bitfield.cpui386
5400                && (intel_syntax
5401                    ? (!t->opcode_modifier.ignoresize
5402                       && !intel_float_operand (t->name))
5403                    : intel_float_operand (t->name) != 2)
5404                && ((!operand_types[0].bitfield.regmmx
5405                     && !operand_types[0].bitfield.regsimd)
5406                    || (!operand_types[t->operands > 1].bitfield.regmmx
5407                        && !operand_types[t->operands > 1].bitfield.regsimd)))
5408         continue;
5409
5410       /* Do not verify operands when there are none.  */
5411       else
5412         {
5413           if (!t->operands)
5414             /* We've found a match; break out of loop.  */
5415             break;
5416         }
5417
5418       /* Address size prefix will turn Disp64/Disp32/Disp16 operand
5419          into Disp32/Disp16/Disp32 operand.  */
5420       if (i.prefix[ADDR_PREFIX] != 0)
5421           {
5422             /* There should be only one Disp operand.  */
5423             switch (flag_code)
5424             {
5425             case CODE_16BIT:
5426               for (j = 0; j < MAX_OPERANDS; j++)
5427                 {
5428                   if (operand_types[j].bitfield.disp16)
5429                     {
5430                       addr_prefix_disp = j;
5431                       operand_types[j].bitfield.disp32 = 1;
5432                       operand_types[j].bitfield.disp16 = 0;
5433                       break;
5434                     }
5435                 }
5436               break;
5437             case CODE_32BIT:
5438               for (j = 0; j < MAX_OPERANDS; j++)
5439                 {
5440                   if (operand_types[j].bitfield.disp32)
5441                     {
5442                       addr_prefix_disp = j;
5443                       operand_types[j].bitfield.disp32 = 0;
5444                       operand_types[j].bitfield.disp16 = 1;
5445                       break;
5446                     }
5447                 }
5448               break;
5449             case CODE_64BIT:
5450               for (j = 0; j < MAX_OPERANDS; j++)
5451                 {
5452                   if (operand_types[j].bitfield.disp64)
5453                     {
5454                       addr_prefix_disp = j;
5455                       operand_types[j].bitfield.disp64 = 0;
5456                       operand_types[j].bitfield.disp32 = 1;
5457                       break;
5458                     }
5459                 }
5460               break;
5461             }
5462           }
5463
5464       /* Force 0x8b encoding for "mov foo@GOT, %eax".  */
5465       if (i.reloc[0] == BFD_RELOC_386_GOT32 && t->base_opcode == 0xa0)
5466         continue;
5467
5468       /* We check register size if needed.  */
5469       if (t->opcode_modifier.checkregsize)
5470         {
5471           check_register = (1 << t->operands) - 1;
5472           if (i.broadcast)
5473             check_register &= ~(1 << i.broadcast->operand);
5474         }
5475       else
5476         check_register = 0;
5477
5478       overlap0 = operand_type_and (i.types[0], operand_types[0]);
5479       switch (t->operands)
5480         {
5481         case 1:
5482           if (!operand_type_match (overlap0, i.types[0]))
5483             continue;
5484           break;
5485         case 2:
5486           /* xchg %eax, %eax is a special case. It is an alias for nop
5487              only in 32bit mode and we can use opcode 0x90.  In 64bit
5488              mode, we can't use 0x90 for xchg %eax, %eax since it should
5489              zero-extend %eax to %rax.  */
5490           if (flag_code == CODE_64BIT
5491               && t->base_opcode == 0x90
5492               && operand_type_equal (&i.types [0], &acc32)
5493               && operand_type_equal (&i.types [1], &acc32))
5494             continue;
5495           /* xrelease mov %eax, <disp> is another special case. It must not
5496              match the accumulator-only encoding of mov.  */
5497           if (flag_code != CODE_64BIT
5498               && i.hle_prefix
5499               && t->base_opcode == 0xa0
5500               && i.types[0].bitfield.acc
5501               && operand_type_check (i.types[1], anymem))
5502             continue;
5503           /* If we want store form, we reverse direction of operands.  */
5504           if (i.dir_encoding == dir_encoding_store
5505               && t->opcode_modifier.d)
5506             goto check_reverse;
5507           /* Fall through.  */
5508
5509         case 3:
5510           /* If we want store form, we skip the current load.  */
5511           if (i.dir_encoding == dir_encoding_store
5512               && i.mem_operands == 0
5513               && t->opcode_modifier.load)
5514             continue;
5515           /* Fall through.  */
5516         case 4:
5517         case 5:
5518           overlap1 = operand_type_and (i.types[1], operand_types[1]);
5519           if (!operand_type_match (overlap0, i.types[0])
5520               || !operand_type_match (overlap1, i.types[1])
5521               || ((check_register & 3) == 3
5522                   && !operand_type_register_match (i.types[0],
5523                                                    operand_types[0],
5524                                                    i.types[1],
5525                                                    operand_types[1])))
5526             {
5527               /* Check if other direction is valid ...  */
5528               if (!t->opcode_modifier.d)
5529                 continue;
5530
5531 check_reverse:
5532               /* Try reversing direction of operands.  */
5533               overlap0 = operand_type_and (i.types[0], operand_types[1]);
5534               overlap1 = operand_type_and (i.types[1], operand_types[0]);
5535               if (!operand_type_match (overlap0, i.types[0])
5536                   || !operand_type_match (overlap1, i.types[1])
5537                   || (check_register
5538                       && !operand_type_register_match (i.types[0],
5539                                                        operand_types[1],
5540                                                        i.types[1],
5541                                                        operand_types[0])))
5542                 {
5543                   /* Does not match either direction.  */
5544                   continue;
5545                 }
5546               /* found_reverse_match holds which of D or FloatR
5547                  we've found.  */
5548               if (!t->opcode_modifier.d)
5549                 found_reverse_match = 0;
5550               else if (operand_types[0].bitfield.tbyte)
5551                 found_reverse_match = Opcode_FloatD;
5552               else
5553                 found_reverse_match = Opcode_D;
5554               if (t->opcode_modifier.floatr)
5555                 found_reverse_match |= Opcode_FloatR;
5556             }
5557           else
5558             {
5559               /* Found a forward 2 operand match here.  */
5560               switch (t->operands)
5561                 {
5562                 case 5:
5563                   overlap4 = operand_type_and (i.types[4],
5564                                                operand_types[4]);
5565                   /* Fall through.  */
5566                 case 4:
5567                   overlap3 = operand_type_and (i.types[3],
5568                                                operand_types[3]);
5569                   /* Fall through.  */
5570                 case 3:
5571                   overlap2 = operand_type_and (i.types[2],
5572                                                operand_types[2]);
5573                   break;
5574                 }
5575
5576               switch (t->operands)
5577                 {
5578                 case 5:
5579                   if (!operand_type_match (overlap4, i.types[4])
5580                       || !operand_type_register_match (i.types[3],
5581                                                        operand_types[3],
5582                                                        i.types[4],
5583                                                        operand_types[4]))
5584                     continue;
5585                   /* Fall through.  */
5586                 case 4:
5587                   if (!operand_type_match (overlap3, i.types[3])
5588                       || ((check_register & 0xa) == 0xa
5589                           && !operand_type_register_match (i.types[1],
5590                                                             operand_types[1],
5591                                                             i.types[3],
5592                                                             operand_types[3]))
5593                       || ((check_register & 0xc) == 0xc
5594                           && !operand_type_register_match (i.types[2],
5595                                                             operand_types[2],
5596                                                             i.types[3],
5597                                                             operand_types[3])))
5598                     continue;
5599                   /* Fall through.  */
5600                 case 3:
5601                   /* Here we make use of the fact that there are no
5602                      reverse match 3 operand instructions.  */
5603                   if (!operand_type_match (overlap2, i.types[2])
5604                       || ((check_register & 5) == 5
5605                           && !operand_type_register_match (i.types[0],
5606                                                             operand_types[0],
5607                                                             i.types[2],
5608                                                             operand_types[2]))
5609                       || ((check_register & 6) == 6
5610                           && !operand_type_register_match (i.types[1],
5611                                                             operand_types[1],
5612                                                             i.types[2],
5613                                                             operand_types[2])))
5614                     continue;
5615                   break;
5616                 }
5617             }
5618           /* Found either forward/reverse 2, 3 or 4 operand match here:
5619              slip through to break.  */
5620         }
5621       if (!found_cpu_match)
5622         {
5623           found_reverse_match = 0;
5624           continue;
5625         }
5626
5627       /* Check if vector and VEX operands are valid.  */
5628       if (check_VecOperands (t) || VEX_check_operands (t))
5629         {
5630           specific_error = i.error;
5631           continue;
5632         }
5633
5634       /* We've found a match; break out of loop.  */
5635       break;
5636     }
5637
5638   if (t == current_templates->end)
5639     {
5640       /* We found no match.  */
5641       const char *err_msg;
5642       switch (specific_error ? specific_error : i.error)
5643         {
5644         default:
5645           abort ();
5646         case operand_size_mismatch:
5647           err_msg = _("operand size mismatch");
5648           break;
5649         case operand_type_mismatch:
5650           err_msg = _("operand type mismatch");
5651           break;
5652         case register_type_mismatch:
5653           err_msg = _("register type mismatch");
5654           break;
5655         case number_of_operands_mismatch:
5656           err_msg = _("number of operands mismatch");
5657           break;
5658         case invalid_instruction_suffix:
5659           err_msg = _("invalid instruction suffix");
5660           break;
5661         case bad_imm4:
5662           err_msg = _("constant doesn't fit in 4 bits");
5663           break;
5664         case unsupported_with_intel_mnemonic:
5665           err_msg = _("unsupported with Intel mnemonic");
5666           break;
5667         case unsupported_syntax:
5668           err_msg = _("unsupported syntax");
5669           break;
5670         case unsupported:
5671           as_bad (_("unsupported instruction `%s'"),
5672                   current_templates->start->name);
5673           return NULL;
5674         case invalid_vsib_address:
5675           err_msg = _("invalid VSIB address");
5676           break;
5677         case invalid_vector_register_set:
5678           err_msg = _("mask, index, and destination registers must be distinct");
5679           break;
5680         case unsupported_vector_index_register:
5681           err_msg = _("unsupported vector index register");
5682           break;
5683         case unsupported_broadcast:
5684           err_msg = _("unsupported broadcast");
5685           break;
5686         case broadcast_not_on_src_operand:
5687           err_msg = _("broadcast not on source memory operand");
5688           break;
5689         case broadcast_needed:
5690           err_msg = _("broadcast is needed for operand of such type");
5691           break;
5692         case unsupported_masking:
5693           err_msg = _("unsupported masking");
5694           break;
5695         case mask_not_on_destination:
5696           err_msg = _("mask not on destination operand");
5697           break;
5698         case no_default_mask:
5699           err_msg = _("default mask isn't allowed");
5700           break;
5701         case unsupported_rc_sae:
5702           err_msg = _("unsupported static rounding/sae");
5703           break;
5704         case rc_sae_operand_not_last_imm:
5705           if (intel_syntax)
5706             err_msg = _("RC/SAE operand must precede immediate operands");
5707           else
5708             err_msg = _("RC/SAE operand must follow immediate operands");
5709           break;
5710         case invalid_register_operand:
5711           err_msg = _("invalid register operand");
5712           break;
5713         }
5714       as_bad (_("%s for `%s'"), err_msg,
5715               current_templates->start->name);
5716       return NULL;
5717     }
5718
5719   if (!quiet_warnings)
5720     {
5721       if (!intel_syntax
5722           && (i.types[0].bitfield.jumpabsolute
5723               != operand_types[0].bitfield.jumpabsolute))
5724         {
5725           as_warn (_("indirect %s without `*'"), t->name);
5726         }
5727
5728       if (t->opcode_modifier.isprefix
5729           && t->opcode_modifier.ignoresize)
5730         {
5731           /* Warn them that a data or address size prefix doesn't
5732              affect assembly of the next line of code.  */
5733           as_warn (_("stand-alone `%s' prefix"), t->name);
5734         }
5735     }
5736
5737   /* Copy the template we found.  */
5738   i.tm = *t;
5739
5740   if (addr_prefix_disp != -1)
5741     i.tm.operand_types[addr_prefix_disp]
5742       = operand_types[addr_prefix_disp];
5743
5744   if (found_reverse_match)
5745     {
5746       /* If we found a reverse match we must alter the opcode
5747          direction bit.  found_reverse_match holds bits to change
5748          (different for int & float insns).  */
5749
5750       i.tm.base_opcode ^= found_reverse_match;
5751
5752       i.tm.operand_types[0] = operand_types[1];
5753       i.tm.operand_types[1] = operand_types[0];
5754     }
5755
5756   return t;
5757 }
5758
5759 static int
5760 check_string (void)
5761 {
5762   int mem_op = operand_type_check (i.types[0], anymem) ? 0 : 1;
5763   if (i.tm.operand_types[mem_op].bitfield.esseg)
5764     {
5765       if (i.seg[0] != NULL && i.seg[0] != &es)
5766         {
5767           as_bad (_("`%s' operand %d must use `%ses' segment"),
5768                   i.tm.name,
5769                   mem_op + 1,
5770                   register_prefix);
5771           return 0;
5772         }
5773       /* There's only ever one segment override allowed per instruction.
5774          This instruction possibly has a legal segment override on the
5775          second operand, so copy the segment to where non-string
5776          instructions store it, allowing common code.  */
5777       i.seg[0] = i.seg[1];
5778     }
5779   else if (i.tm.operand_types[mem_op + 1].bitfield.esseg)
5780     {
5781       if (i.seg[1] != NULL && i.seg[1] != &es)
5782         {
5783           as_bad (_("`%s' operand %d must use `%ses' segment"),
5784                   i.tm.name,
5785                   mem_op + 2,
5786                   register_prefix);
5787           return 0;
5788         }
5789     }
5790   return 1;
5791 }
5792
5793 static int
5794 process_suffix (void)
5795 {
5796   /* If matched instruction specifies an explicit instruction mnemonic
5797      suffix, use it.  */
5798   if (i.tm.opcode_modifier.size16)
5799     i.suffix = WORD_MNEM_SUFFIX;
5800   else if (i.tm.opcode_modifier.size32)
5801     i.suffix = LONG_MNEM_SUFFIX;
5802   else if (i.tm.opcode_modifier.size64)
5803     i.suffix = QWORD_MNEM_SUFFIX;
5804   else if (i.reg_operands)
5805     {
5806       /* If there's no instruction mnemonic suffix we try to invent one
5807          based on register operands.  */
5808       if (!i.suffix)
5809         {
5810           /* We take i.suffix from the last register operand specified,
5811              Destination register type is more significant than source
5812              register type.  crc32 in SSE4.2 prefers source register
5813              type. */
5814           if (i.tm.base_opcode == 0xf20f38f1)
5815             {
5816               if (i.types[0].bitfield.reg && i.types[0].bitfield.word)
5817                 i.suffix = WORD_MNEM_SUFFIX;
5818               else if (i.types[0].bitfield.reg && i.types[0].bitfield.dword)
5819                 i.suffix = LONG_MNEM_SUFFIX;
5820               else if (i.types[0].bitfield.reg && i.types[0].bitfield.qword)
5821                 i.suffix = QWORD_MNEM_SUFFIX;
5822             }
5823           else if (i.tm.base_opcode == 0xf20f38f0)
5824             {
5825               if (i.types[0].bitfield.reg && i.types[0].bitfield.byte)
5826                 i.suffix = BYTE_MNEM_SUFFIX;
5827             }
5828
5829           if (!i.suffix)
5830             {
5831               int op;
5832
5833               if (i.tm.base_opcode == 0xf20f38f1
5834                   || i.tm.base_opcode == 0xf20f38f0)
5835                 {
5836                   /* We have to know the operand size for crc32.  */
5837                   as_bad (_("ambiguous memory operand size for `%s`"),
5838                           i.tm.name);
5839                   return 0;
5840                 }
5841
5842               for (op = i.operands; --op >= 0;)
5843                 if (!i.tm.operand_types[op].bitfield.inoutportreg
5844                     && !i.tm.operand_types[op].bitfield.shiftcount)
5845                   {
5846                     if (!i.types[op].bitfield.reg)
5847                       continue;
5848                     if (i.types[op].bitfield.byte)
5849                       i.suffix = BYTE_MNEM_SUFFIX;
5850                     else if (i.types[op].bitfield.word)
5851                       i.suffix = WORD_MNEM_SUFFIX;
5852                     else if (i.types[op].bitfield.dword)
5853                       i.suffix = LONG_MNEM_SUFFIX;
5854                     else if (i.types[op].bitfield.qword)
5855                       i.suffix = QWORD_MNEM_SUFFIX;
5856                     else
5857                       continue;
5858                     break;
5859                   }
5860             }
5861         }
5862       else if (i.suffix == BYTE_MNEM_SUFFIX)
5863         {
5864           if (intel_syntax
5865               && i.tm.opcode_modifier.ignoresize
5866               && i.tm.opcode_modifier.no_bsuf)
5867             i.suffix = 0;
5868           else if (!check_byte_reg ())
5869             return 0;
5870         }
5871       else if (i.suffix == LONG_MNEM_SUFFIX)
5872         {
5873           if (intel_syntax
5874               && i.tm.opcode_modifier.ignoresize
5875               && i.tm.opcode_modifier.no_lsuf
5876               && !i.tm.opcode_modifier.todword
5877               && !i.tm.opcode_modifier.toqword)
5878             i.suffix = 0;
5879           else if (!check_long_reg ())
5880             return 0;
5881         }
5882       else if (i.suffix == QWORD_MNEM_SUFFIX)
5883         {
5884           if (intel_syntax
5885               && i.tm.opcode_modifier.ignoresize
5886               && i.tm.opcode_modifier.no_qsuf
5887               && !i.tm.opcode_modifier.todword
5888               && !i.tm.opcode_modifier.toqword)
5889             i.suffix = 0;
5890           else if (!check_qword_reg ())
5891             return 0;
5892         }
5893       else if (i.suffix == WORD_MNEM_SUFFIX)
5894         {
5895           if (intel_syntax
5896               && i.tm.opcode_modifier.ignoresize
5897               && i.tm.opcode_modifier.no_wsuf)
5898             i.suffix = 0;
5899           else if (!check_word_reg ())
5900             return 0;
5901         }
5902       else if (intel_syntax && i.tm.opcode_modifier.ignoresize)
5903         /* Do nothing if the instruction is going to ignore the prefix.  */
5904         ;
5905       else
5906         abort ();
5907     }
5908   else if (i.tm.opcode_modifier.defaultsize
5909            && !i.suffix
5910            /* exclude fldenv/frstor/fsave/fstenv */
5911            && i.tm.opcode_modifier.no_ssuf)
5912     {
5913       i.suffix = stackop_size;
5914     }
5915   else if (intel_syntax
5916            && !i.suffix
5917            && (i.tm.operand_types[0].bitfield.jumpabsolute
5918                || i.tm.opcode_modifier.jumpbyte
5919                || i.tm.opcode_modifier.jumpintersegment
5920                || (i.tm.base_opcode == 0x0f01 /* [ls][gi]dt */
5921                    && i.tm.extension_opcode <= 3)))
5922     {
5923       switch (flag_code)
5924         {
5925         case CODE_64BIT:
5926           if (!i.tm.opcode_modifier.no_qsuf)
5927             {
5928               i.suffix = QWORD_MNEM_SUFFIX;
5929               break;
5930             }
5931           /* Fall through.  */
5932         case CODE_32BIT:
5933           if (!i.tm.opcode_modifier.no_lsuf)
5934             i.suffix = LONG_MNEM_SUFFIX;
5935           break;
5936         case CODE_16BIT:
5937           if (!i.tm.opcode_modifier.no_wsuf)
5938             i.suffix = WORD_MNEM_SUFFIX;
5939           break;
5940         }
5941     }
5942
5943   if (!i.suffix)
5944     {
5945       if (!intel_syntax)
5946         {
5947           if (i.tm.opcode_modifier.w)
5948             {
5949               as_bad (_("no instruction mnemonic suffix given and "
5950                         "no register operands; can't size instruction"));
5951               return 0;
5952             }
5953         }
5954       else
5955         {
5956           unsigned int suffixes;
5957
5958           suffixes = !i.tm.opcode_modifier.no_bsuf;
5959           if (!i.tm.opcode_modifier.no_wsuf)
5960             suffixes |= 1 << 1;
5961           if (!i.tm.opcode_modifier.no_lsuf)
5962             suffixes |= 1 << 2;
5963           if (!i.tm.opcode_modifier.no_ldsuf)
5964             suffixes |= 1 << 3;
5965           if (!i.tm.opcode_modifier.no_ssuf)
5966             suffixes |= 1 << 4;
5967           if (flag_code == CODE_64BIT && !i.tm.opcode_modifier.no_qsuf)
5968             suffixes |= 1 << 5;
5969
5970           /* There are more than suffix matches.  */
5971           if (i.tm.opcode_modifier.w
5972               || ((suffixes & (suffixes - 1))
5973                   && !i.tm.opcode_modifier.defaultsize
5974                   && !i.tm.opcode_modifier.ignoresize))
5975             {
5976               as_bad (_("ambiguous operand size for `%s'"), i.tm.name);
5977               return 0;
5978             }
5979         }
5980     }
5981
5982   /* Change the opcode based on the operand size given by i.suffix.  */
5983   switch (i.suffix)
5984     {
5985     /* Size floating point instruction.  */
5986     case LONG_MNEM_SUFFIX:
5987       if (i.tm.opcode_modifier.floatmf)
5988         {
5989           i.tm.base_opcode ^= 4;
5990           break;
5991         }
5992     /* fall through */
5993     case WORD_MNEM_SUFFIX:
5994     case QWORD_MNEM_SUFFIX:
5995       /* It's not a byte, select word/dword operation.  */
5996       if (i.tm.opcode_modifier.w)
5997         {
5998           if (i.tm.opcode_modifier.shortform)
5999             i.tm.base_opcode |= 8;
6000           else
6001             i.tm.base_opcode |= 1;
6002         }
6003     /* fall through */
6004     case SHORT_MNEM_SUFFIX:
6005       /* Now select between word & dword operations via the operand
6006          size prefix, except for instructions that will ignore this
6007          prefix anyway.  */
6008       if (i.reg_operands > 0
6009           && i.types[0].bitfield.reg
6010           && i.tm.opcode_modifier.addrprefixopreg
6011           && (i.tm.opcode_modifier.immext
6012               || i.operands == 1))
6013         {
6014           /* The address size override prefix changes the size of the
6015              first operand.  */
6016           if ((flag_code == CODE_32BIT
6017                && i.op[0].regs->reg_type.bitfield.word)
6018               || (flag_code != CODE_32BIT
6019                   && i.op[0].regs->reg_type.bitfield.dword))
6020             if (!add_prefix (ADDR_PREFIX_OPCODE))
6021               return 0;
6022         }
6023       else if (i.suffix != QWORD_MNEM_SUFFIX
6024                && !i.tm.opcode_modifier.ignoresize
6025                && !i.tm.opcode_modifier.floatmf
6026                && ((i.suffix == LONG_MNEM_SUFFIX) == (flag_code == CODE_16BIT)
6027                    || (flag_code == CODE_64BIT
6028                        && i.tm.opcode_modifier.jumpbyte)))
6029         {
6030           unsigned int prefix = DATA_PREFIX_OPCODE;
6031
6032           if (i.tm.opcode_modifier.jumpbyte) /* jcxz, loop */
6033             prefix = ADDR_PREFIX_OPCODE;
6034
6035           if (!add_prefix (prefix))
6036             return 0;
6037         }
6038
6039       /* Set mode64 for an operand.  */
6040       if (i.suffix == QWORD_MNEM_SUFFIX
6041           && flag_code == CODE_64BIT
6042           && !i.tm.opcode_modifier.norex64
6043           /* Special case for xchg %rax,%rax.  It is NOP and doesn't
6044              need rex64. */
6045           && ! (i.operands == 2
6046                 && i.tm.base_opcode == 0x90
6047                 && i.tm.extension_opcode == None
6048                 && operand_type_equal (&i.types [0], &acc64)
6049                 && operand_type_equal (&i.types [1], &acc64)))
6050         i.rex |= REX_W;
6051
6052       break;
6053     }
6054
6055   if (i.reg_operands != 0
6056       && i.operands > 1
6057       && i.tm.opcode_modifier.addrprefixopreg
6058       && !i.tm.opcode_modifier.immext)
6059     {
6060       /* Check invalid register operand when the address size override
6061          prefix changes the size of register operands.  */
6062       unsigned int op;
6063       enum { need_word, need_dword, need_qword } need;
6064
6065       if (flag_code == CODE_32BIT)
6066         need = i.prefix[ADDR_PREFIX] ? need_word : need_dword;
6067       else
6068         {
6069           if (i.prefix[ADDR_PREFIX])
6070             need = need_dword;
6071           else
6072             need = flag_code == CODE_64BIT ? need_qword : need_word;
6073         }
6074
6075       for (op = 0; op < i.operands; op++)
6076         if (i.types[op].bitfield.reg
6077             && ((need == need_word
6078                  && !i.op[op].regs->reg_type.bitfield.word)
6079                 || (need == need_dword
6080                     && !i.op[op].regs->reg_type.bitfield.dword)
6081                 || (need == need_qword
6082                     && !i.op[op].regs->reg_type.bitfield.qword)))
6083           {
6084             as_bad (_("invalid register operand size for `%s'"),
6085                     i.tm.name);
6086             return 0;
6087           }
6088     }
6089
6090   return 1;
6091 }
6092
6093 static int
6094 check_byte_reg (void)
6095 {
6096   int op;
6097
6098   for (op = i.operands; --op >= 0;)
6099     {
6100       /* Skip non-register operands. */
6101       if (!i.types[op].bitfield.reg)
6102         continue;
6103
6104       /* If this is an eight bit register, it's OK.  If it's the 16 or
6105          32 bit version of an eight bit register, we will just use the
6106          low portion, and that's OK too.  */
6107       if (i.types[op].bitfield.byte)
6108         continue;
6109
6110       /* I/O port address operands are OK too.  */
6111       if (i.tm.operand_types[op].bitfield.inoutportreg)
6112         continue;
6113
6114       /* crc32 doesn't generate this warning.  */
6115       if (i.tm.base_opcode == 0xf20f38f0)
6116         continue;
6117
6118       if ((i.types[op].bitfield.word
6119            || i.types[op].bitfield.dword
6120            || i.types[op].bitfield.qword)
6121           && i.op[op].regs->reg_num < 4
6122           /* Prohibit these changes in 64bit mode, since the lowering
6123              would be more complicated.  */
6124           && flag_code != CODE_64BIT)
6125         {
6126 #if REGISTER_WARNINGS
6127           if (!quiet_warnings)
6128             as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
6129                      register_prefix,
6130                      (i.op[op].regs + (i.types[op].bitfield.word
6131                                        ? REGNAM_AL - REGNAM_AX
6132                                        : REGNAM_AL - REGNAM_EAX))->reg_name,
6133                      register_prefix,
6134                      i.op[op].regs->reg_name,
6135                      i.suffix);
6136 #endif
6137           continue;
6138         }
6139       /* Any other register is bad.  */
6140       if (i.types[op].bitfield.reg
6141           || i.types[op].bitfield.regmmx
6142           || i.types[op].bitfield.regsimd
6143           || i.types[op].bitfield.sreg2
6144           || i.types[op].bitfield.sreg3
6145           || i.types[op].bitfield.control
6146           || i.types[op].bitfield.debug
6147           || i.types[op].bitfield.test)
6148         {
6149           as_bad (_("`%s%s' not allowed with `%s%c'"),
6150                   register_prefix,
6151                   i.op[op].regs->reg_name,
6152                   i.tm.name,
6153                   i.suffix);
6154           return 0;
6155         }
6156     }
6157   return 1;
6158 }
6159
6160 static int
6161 check_long_reg (void)
6162 {
6163   int op;
6164
6165   for (op = i.operands; --op >= 0;)
6166     /* Skip non-register operands. */
6167     if (!i.types[op].bitfield.reg)
6168       continue;
6169     /* Reject eight bit registers, except where the template requires
6170        them. (eg. movzb)  */
6171     else if (i.types[op].bitfield.byte
6172              && (i.tm.operand_types[op].bitfield.reg
6173                  || i.tm.operand_types[op].bitfield.acc)
6174              && (i.tm.operand_types[op].bitfield.word
6175                  || i.tm.operand_types[op].bitfield.dword))
6176       {
6177         as_bad (_("`%s%s' not allowed with `%s%c'"),
6178                 register_prefix,
6179                 i.op[op].regs->reg_name,
6180                 i.tm.name,
6181                 i.suffix);
6182         return 0;
6183       }
6184     /* Warn if the e prefix on a general reg is missing.  */
6185     else if ((!quiet_warnings || flag_code == CODE_64BIT)
6186              && i.types[op].bitfield.word
6187              && (i.tm.operand_types[op].bitfield.reg
6188                  || i.tm.operand_types[op].bitfield.acc)
6189              && i.tm.operand_types[op].bitfield.dword)
6190       {
6191         /* Prohibit these changes in the 64bit mode, since the
6192            lowering is more complicated.  */
6193         if (flag_code == CODE_64BIT)
6194           {
6195             as_bad (_("incorrect register `%s%s' used with `%c' suffix"),
6196                     register_prefix, i.op[op].regs->reg_name,
6197                     i.suffix);
6198             return 0;
6199           }
6200 #if REGISTER_WARNINGS
6201         as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
6202                  register_prefix,
6203                  (i.op[op].regs + REGNAM_EAX - REGNAM_AX)->reg_name,
6204                  register_prefix, i.op[op].regs->reg_name, i.suffix);
6205 #endif
6206       }
6207     /* Warn if the r prefix on a general reg is present.  */
6208     else if (i.types[op].bitfield.qword
6209              && (i.tm.operand_types[op].bitfield.reg
6210                  || i.tm.operand_types[op].bitfield.acc)
6211              && i.tm.operand_types[op].bitfield.dword)
6212       {
6213         if (intel_syntax
6214             && i.tm.opcode_modifier.toqword
6215             && !i.types[0].bitfield.regsimd)
6216           {
6217             /* Convert to QWORD.  We want REX byte. */
6218             i.suffix = QWORD_MNEM_SUFFIX;
6219           }
6220         else
6221           {
6222             as_bad (_("incorrect register `%s%s' used with `%c' suffix"),
6223                     register_prefix, i.op[op].regs->reg_name,
6224                     i.suffix);
6225             return 0;
6226           }
6227       }
6228   return 1;
6229 }
6230
6231 static int
6232 check_qword_reg (void)
6233 {
6234   int op;
6235
6236   for (op = i.operands; --op >= 0; )
6237     /* Skip non-register operands. */
6238     if (!i.types[op].bitfield.reg)
6239       continue;
6240     /* Reject eight bit registers, except where the template requires
6241        them. (eg. movzb)  */
6242     else if (i.types[op].bitfield.byte
6243              && (i.tm.operand_types[op].bitfield.reg
6244                  || i.tm.operand_types[op].bitfield.acc)
6245              && (i.tm.operand_types[op].bitfield.word
6246                  || i.tm.operand_types[op].bitfield.dword))
6247       {
6248         as_bad (_("`%s%s' not allowed with `%s%c'"),
6249                 register_prefix,
6250                 i.op[op].regs->reg_name,
6251                 i.tm.name,
6252                 i.suffix);
6253         return 0;
6254       }
6255     /* Warn if the r prefix on a general reg is missing.  */
6256     else if ((i.types[op].bitfield.word
6257               || i.types[op].bitfield.dword)
6258              && (i.tm.operand_types[op].bitfield.reg
6259                  || i.tm.operand_types[op].bitfield.acc)
6260              && i.tm.operand_types[op].bitfield.qword)
6261       {
6262         /* Prohibit these changes in the 64bit mode, since the
6263            lowering is more complicated.  */
6264         if (intel_syntax
6265             && i.tm.opcode_modifier.todword
6266             && !i.types[0].bitfield.regsimd)
6267           {
6268             /* Convert to DWORD.  We don't want REX byte. */
6269             i.suffix = LONG_MNEM_SUFFIX;
6270           }
6271         else
6272           {
6273             as_bad (_("incorrect register `%s%s' used with `%c' suffix"),
6274                     register_prefix, i.op[op].regs->reg_name,
6275                     i.suffix);
6276             return 0;
6277           }
6278       }
6279   return 1;
6280 }
6281
6282 static int
6283 check_word_reg (void)
6284 {
6285   int op;
6286   for (op = i.operands; --op >= 0;)
6287     /* Skip non-register operands. */
6288     if (!i.types[op].bitfield.reg)
6289       continue;
6290     /* Reject eight bit registers, except where the template requires
6291        them. (eg. movzb)  */
6292     else if (i.types[op].bitfield.byte
6293              && (i.tm.operand_types[op].bitfield.reg
6294                  || i.tm.operand_types[op].bitfield.acc)
6295              && (i.tm.operand_types[op].bitfield.word
6296                  || i.tm.operand_types[op].bitfield.dword))
6297       {
6298         as_bad (_("`%s%s' not allowed with `%s%c'"),
6299                 register_prefix,
6300                 i.op[op].regs->reg_name,
6301                 i.tm.name,
6302                 i.suffix);
6303         return 0;
6304       }
6305     /* Warn if the e or r prefix on a general reg is present.  */
6306     else if ((!quiet_warnings || flag_code == CODE_64BIT)
6307              && (i.types[op].bitfield.dword
6308                  || i.types[op].bitfield.qword)
6309              && (i.tm.operand_types[op].bitfield.reg
6310                  || i.tm.operand_types[op].bitfield.acc)
6311              && i.tm.operand_types[op].bitfield.word)
6312       {
6313         /* Prohibit these changes in the 64bit mode, since the
6314            lowering is more complicated.  */
6315         if (flag_code == CODE_64BIT)
6316           {
6317             as_bad (_("incorrect register `%s%s' used with `%c' suffix"),
6318                     register_prefix, i.op[op].regs->reg_name,
6319                     i.suffix);
6320             return 0;
6321           }
6322 #if REGISTER_WARNINGS
6323         as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
6324                  register_prefix,
6325                  (i.op[op].regs + REGNAM_AX - REGNAM_EAX)->reg_name,
6326                  register_prefix, i.op[op].regs->reg_name, i.suffix);
6327 #endif
6328       }
6329   return 1;
6330 }
6331
6332 static int
6333 update_imm (unsigned int j)
6334 {
6335   i386_operand_type overlap = i.types[j];
6336   if ((overlap.bitfield.imm8
6337        || overlap.bitfield.imm8s
6338        || overlap.bitfield.imm16
6339        || overlap.bitfield.imm32
6340        || overlap.bitfield.imm32s
6341        || overlap.bitfield.imm64)
6342       && !operand_type_equal (&overlap, &imm8)
6343       && !operand_type_equal (&overlap, &imm8s)
6344       && !operand_type_equal (&overlap, &imm16)
6345       && !operand_type_equal (&overlap, &imm32)
6346       && !operand_type_equal (&overlap, &imm32s)
6347       && !operand_type_equal (&overlap, &imm64))
6348     {
6349       if (i.suffix)
6350         {
6351           i386_operand_type temp;
6352
6353           operand_type_set (&temp, 0);
6354           if (i.suffix == BYTE_MNEM_SUFFIX)
6355             {
6356               temp.bitfield.imm8 = overlap.bitfield.imm8;
6357               temp.bitfield.imm8s = overlap.bitfield.imm8s;
6358             }
6359           else if (i.suffix == WORD_MNEM_SUFFIX)
6360             temp.bitfield.imm16 = overlap.bitfield.imm16;
6361           else if (i.suffix == QWORD_MNEM_SUFFIX)
6362             {
6363               temp.bitfield.imm64 = overlap.bitfield.imm64;
6364               temp.bitfield.imm32s = overlap.bitfield.imm32s;
6365             }
6366           else
6367             temp.bitfield.imm32 = overlap.bitfield.imm32;
6368           overlap = temp;
6369         }
6370       else if (operand_type_equal (&overlap, &imm16_32_32s)
6371                || operand_type_equal (&overlap, &imm16_32)
6372                || operand_type_equal (&overlap, &imm16_32s))
6373         {
6374           if ((flag_code == CODE_16BIT) ^ (i.prefix[DATA_PREFIX] != 0))
6375             overlap = imm16;
6376           else
6377             overlap = imm32s;
6378         }
6379       if (!operand_type_equal (&overlap, &imm8)
6380           && !operand_type_equal (&overlap, &imm8s)
6381           && !operand_type_equal (&overlap, &imm16)
6382           && !operand_type_equal (&overlap, &imm32)
6383           && !operand_type_equal (&overlap, &imm32s)
6384           && !operand_type_equal (&overlap, &imm64))
6385         {
6386           as_bad (_("no instruction mnemonic suffix given; "
6387                     "can't determine immediate size"));
6388           return 0;
6389         }
6390     }
6391   i.types[j] = overlap;
6392
6393   return 1;
6394 }
6395
6396 static int
6397 finalize_imm (void)
6398 {
6399   unsigned int j, n;
6400
6401   /* Update the first 2 immediate operands.  */
6402   n = i.operands > 2 ? 2 : i.operands;
6403   if (n)
6404     {
6405       for (j = 0; j < n; j++)
6406         if (update_imm (j) == 0)
6407           return 0;
6408
6409       /* The 3rd operand can't be immediate operand.  */
6410       gas_assert (operand_type_check (i.types[2], imm) == 0);
6411     }
6412
6413   return 1;
6414 }
6415
6416 static int
6417 process_operands (void)
6418 {
6419   /* Default segment register this instruction will use for memory
6420      accesses.  0 means unknown.  This is only for optimizing out
6421      unnecessary segment overrides.  */
6422   const seg_entry *default_seg = 0;
6423
6424   if (i.tm.opcode_modifier.sse2avx && i.tm.opcode_modifier.vexvvvv)
6425     {
6426       unsigned int dupl = i.operands;
6427       unsigned int dest = dupl - 1;
6428       unsigned int j;
6429
6430       /* The destination must be an xmm register.  */
6431       gas_assert (i.reg_operands
6432                   && MAX_OPERANDS > dupl
6433                   && operand_type_equal (&i.types[dest], &regxmm));
6434
6435       if (i.tm.operand_types[0].bitfield.acc
6436           && i.tm.operand_types[0].bitfield.xmmword)
6437         {
6438           if (i.tm.opcode_modifier.vexsources == VEX3SOURCES)
6439             {
6440               /* Keep xmm0 for instructions with VEX prefix and 3
6441                  sources.  */
6442               i.tm.operand_types[0].bitfield.acc = 0;
6443               i.tm.operand_types[0].bitfield.regsimd = 1;
6444               goto duplicate;
6445             }
6446           else
6447             {
6448               /* We remove the first xmm0 and keep the number of
6449                  operands unchanged, which in fact duplicates the
6450                  destination.  */
6451               for (j = 1; j < i.operands; j++)
6452                 {
6453                   i.op[j - 1] = i.op[j];
6454                   i.types[j - 1] = i.types[j];
6455                   i.tm.operand_types[j - 1] = i.tm.operand_types[j];
6456                 }
6457             }
6458         }
6459       else if (i.tm.opcode_modifier.implicit1stxmm0)
6460         {
6461           gas_assert ((MAX_OPERANDS - 1) > dupl
6462                       && (i.tm.opcode_modifier.vexsources
6463                           == VEX3SOURCES));
6464
6465           /* Add the implicit xmm0 for instructions with VEX prefix
6466              and 3 sources.  */
6467           for (j = i.operands; j > 0; j--)
6468             {
6469               i.op[j] = i.op[j - 1];
6470               i.types[j] = i.types[j - 1];
6471               i.tm.operand_types[j] = i.tm.operand_types[j - 1];
6472             }
6473           i.op[0].regs
6474             = (const reg_entry *) hash_find (reg_hash, "xmm0");
6475           i.types[0] = regxmm;
6476           i.tm.operand_types[0] = regxmm;
6477
6478           i.operands += 2;
6479           i.reg_operands += 2;
6480           i.tm.operands += 2;
6481
6482           dupl++;
6483           dest++;
6484           i.op[dupl] = i.op[dest];
6485           i.types[dupl] = i.types[dest];
6486           i.tm.operand_types[dupl] = i.tm.operand_types[dest];
6487         }
6488       else
6489         {
6490 duplicate:
6491           i.operands++;
6492           i.reg_operands++;
6493           i.tm.operands++;
6494
6495           i.op[dupl] = i.op[dest];
6496           i.types[dupl] = i.types[dest];
6497           i.tm.operand_types[dupl] = i.tm.operand_types[dest];
6498         }
6499
6500        if (i.tm.opcode_modifier.immext)
6501          process_immext ();
6502     }
6503   else if (i.tm.operand_types[0].bitfield.acc
6504            && i.tm.operand_types[0].bitfield.xmmword)
6505     {
6506       unsigned int j;
6507
6508       for (j = 1; j < i.operands; j++)
6509         {
6510           i.op[j - 1] = i.op[j];
6511           i.types[j - 1] = i.types[j];
6512
6513           /* We need to adjust fields in i.tm since they are used by
6514              build_modrm_byte.  */
6515           i.tm.operand_types [j - 1] = i.tm.operand_types [j];
6516         }
6517
6518       i.operands--;
6519       i.reg_operands--;
6520       i.tm.operands--;
6521     }
6522   else if (i.tm.opcode_modifier.implicitquadgroup)
6523     {
6524       unsigned int regnum, first_reg_in_group, last_reg_in_group;
6525
6526       /* The second operand must be {x,y,z}mmN, where N is a multiple of 4. */
6527       gas_assert (i.operands >= 2 && i.types[1].bitfield.regsimd);
6528       regnum = register_number (i.op[1].regs);
6529       first_reg_in_group = regnum & ~3;
6530       last_reg_in_group = first_reg_in_group + 3;
6531       if (regnum != first_reg_in_group)
6532         as_warn (_("source register `%s%s' implicitly denotes"
6533                    " `%s%.3s%u' to `%s%.3s%u' source group in `%s'"),
6534                  register_prefix, i.op[1].regs->reg_name,
6535                  register_prefix, i.op[1].regs->reg_name, first_reg_in_group,
6536                  register_prefix, i.op[1].regs->reg_name, last_reg_in_group,
6537                  i.tm.name);
6538     }
6539   else if (i.tm.opcode_modifier.regkludge)
6540     {
6541       /* The imul $imm, %reg instruction is converted into
6542          imul $imm, %reg, %reg, and the clr %reg instruction
6543          is converted into xor %reg, %reg.  */
6544
6545       unsigned int first_reg_op;
6546
6547       if (operand_type_check (i.types[0], reg))
6548         first_reg_op = 0;
6549       else
6550         first_reg_op = 1;
6551       /* Pretend we saw the extra register operand.  */
6552       gas_assert (i.reg_operands == 1
6553                   && i.op[first_reg_op + 1].regs == 0);
6554       i.op[first_reg_op + 1].regs = i.op[first_reg_op].regs;
6555       i.types[first_reg_op + 1] = i.types[first_reg_op];
6556       i.operands++;
6557       i.reg_operands++;
6558     }
6559
6560   if (i.tm.opcode_modifier.shortform)
6561     {
6562       if (i.types[0].bitfield.sreg2
6563           || i.types[0].bitfield.sreg3)
6564         {
6565           if (i.tm.base_opcode == POP_SEG_SHORT
6566               && i.op[0].regs->reg_num == 1)
6567             {
6568               as_bad (_("you can't `pop %scs'"), register_prefix);
6569               return 0;
6570             }
6571           i.tm.base_opcode |= (i.op[0].regs->reg_num << 3);
6572           if ((i.op[0].regs->reg_flags & RegRex) != 0)
6573             i.rex |= REX_B;
6574         }
6575       else
6576         {
6577           /* The register or float register operand is in operand
6578              0 or 1.  */
6579           unsigned int op;
6580
6581           if ((i.types[0].bitfield.reg && i.types[0].bitfield.tbyte)
6582               || operand_type_check (i.types[0], reg))
6583             op = 0;
6584           else
6585             op = 1;
6586           /* Register goes in low 3 bits of opcode.  */
6587           i.tm.base_opcode |= i.op[op].regs->reg_num;
6588           if ((i.op[op].regs->reg_flags & RegRex) != 0)
6589             i.rex |= REX_B;
6590           if (!quiet_warnings && i.tm.opcode_modifier.ugh)
6591             {
6592               /* Warn about some common errors, but press on regardless.
6593                  The first case can be generated by gcc (<= 2.8.1).  */
6594               if (i.operands == 2)
6595                 {
6596                   /* Reversed arguments on faddp, fsubp, etc.  */
6597                   as_warn (_("translating to `%s %s%s,%s%s'"), i.tm.name,
6598                            register_prefix, i.op[!intel_syntax].regs->reg_name,
6599                            register_prefix, i.op[intel_syntax].regs->reg_name);
6600                 }
6601               else
6602                 {
6603                   /* Extraneous `l' suffix on fp insn.  */
6604                   as_warn (_("translating to `%s %s%s'"), i.tm.name,
6605                            register_prefix, i.op[0].regs->reg_name);
6606                 }
6607             }
6608         }
6609     }
6610   else if (i.tm.opcode_modifier.modrm)
6611     {
6612       /* The opcode is completed (modulo i.tm.extension_opcode which
6613          must be put into the modrm byte).  Now, we make the modrm and
6614          index base bytes based on all the info we've collected.  */
6615
6616       default_seg = build_modrm_byte ();
6617     }
6618   else if ((i.tm.base_opcode & ~0x3) == MOV_AX_DISP32)
6619     {
6620       default_seg = &ds;
6621     }
6622   else if (i.tm.opcode_modifier.isstring)
6623     {
6624       /* For the string instructions that allow a segment override
6625          on one of their operands, the default segment is ds.  */
6626       default_seg = &ds;
6627     }
6628
6629   if (i.tm.base_opcode == 0x8d /* lea */
6630       && i.seg[0]
6631       && !quiet_warnings)
6632     as_warn (_("segment override on `%s' is ineffectual"), i.tm.name);
6633
6634   /* If a segment was explicitly specified, and the specified segment
6635      is not the default, use an opcode prefix to select it.  If we
6636      never figured out what the default segment is, then default_seg
6637      will be zero at this point, and the specified segment prefix will
6638      always be used.  */
6639   if ((i.seg[0]) && (i.seg[0] != default_seg))
6640     {
6641       if (!add_prefix (i.seg[0]->seg_prefix))
6642         return 0;
6643     }
6644   return 1;
6645 }
6646
6647 static const seg_entry *
6648 build_modrm_byte (void)
6649 {
6650   const seg_entry *default_seg = 0;
6651   unsigned int source, dest;
6652   int vex_3_sources;
6653
6654   vex_3_sources = i.tm.opcode_modifier.vexsources == VEX3SOURCES;
6655   if (vex_3_sources)
6656     {
6657       unsigned int nds, reg_slot;
6658       expressionS *exp;
6659
6660       dest = i.operands - 1;
6661       nds = dest - 1;
6662
6663       /* There are 2 kinds of instructions:
6664          1. 5 operands: 4 register operands or 3 register operands
6665          plus 1 memory operand plus one Vec_Imm4 operand, VexXDS, and
6666          VexW0 or VexW1.  The destination must be either XMM, YMM or
6667          ZMM register.
6668          2. 4 operands: 4 register operands or 3 register operands
6669          plus 1 memory operand, with VexXDS.  */
6670       gas_assert ((i.reg_operands == 4
6671                    || (i.reg_operands == 3 && i.mem_operands == 1))
6672                   && i.tm.opcode_modifier.vexvvvv == VEXXDS
6673                   && i.tm.opcode_modifier.vexw
6674                   && i.tm.operand_types[dest].bitfield.regsimd);
6675
6676       /* If VexW1 is set, the first non-immediate operand is the source and
6677          the second non-immediate one is encoded in the immediate operand.  */
6678       if (i.tm.opcode_modifier.vexw == VEXW1)
6679         {
6680           source = i.imm_operands;
6681           reg_slot = i.imm_operands + 1;
6682         }
6683       else
6684         {
6685           source = i.imm_operands + 1;
6686           reg_slot = i.imm_operands;
6687         }
6688
6689       if (i.imm_operands == 0)
6690         {
6691           /* When there is no immediate operand, generate an 8bit
6692              immediate operand to encode the first operand.  */
6693           exp = &im_expressions[i.imm_operands++];
6694           i.op[i.operands].imms = exp;
6695           i.types[i.operands] = imm8;
6696           i.operands++;
6697
6698           gas_assert (i.tm.operand_types[reg_slot].bitfield.regsimd);
6699           exp->X_op = O_constant;
6700           exp->X_add_number = register_number (i.op[reg_slot].regs) << 4;
6701           gas_assert ((i.op[reg_slot].regs->reg_flags & RegVRex) == 0);
6702         }
6703       else
6704         {
6705           unsigned int imm_slot;
6706
6707           gas_assert (i.imm_operands == 1 && i.types[0].bitfield.vec_imm4);
6708
6709           if (i.tm.opcode_modifier.immext)
6710             {
6711               /* When ImmExt is set, the immediate byte is the last
6712                  operand.  */
6713               imm_slot = i.operands - 1;
6714               source--;
6715               reg_slot--;
6716             }
6717           else
6718             {
6719               imm_slot = 0;
6720
6721               /* Turn on Imm8 so that output_imm will generate it.  */
6722               i.types[imm_slot].bitfield.imm8 = 1;
6723             }
6724
6725           gas_assert (i.tm.operand_types[reg_slot].bitfield.regsimd);
6726           i.op[imm_slot].imms->X_add_number
6727               |= register_number (i.op[reg_slot].regs) << 4;
6728           gas_assert ((i.op[reg_slot].regs->reg_flags & RegVRex) == 0);
6729         }
6730
6731       gas_assert (i.tm.operand_types[nds].bitfield.regsimd);
6732       i.vex.register_specifier = i.op[nds].regs;
6733     }
6734   else
6735     source = dest = 0;
6736
6737   /* i.reg_operands MUST be the number of real register operands;
6738      implicit registers do not count.  If there are 3 register
6739      operands, it must be a instruction with VexNDS.  For a
6740      instruction with VexNDD, the destination register is encoded
6741      in VEX prefix.  If there are 4 register operands, it must be
6742      a instruction with VEX prefix and 3 sources.  */
6743   if (i.mem_operands == 0
6744       && ((i.reg_operands == 2
6745            && i.tm.opcode_modifier.vexvvvv <= VEXXDS)
6746           || (i.reg_operands == 3
6747               && i.tm.opcode_modifier.vexvvvv == VEXXDS)
6748           || (i.reg_operands == 4 && vex_3_sources)))
6749     {
6750       switch (i.operands)
6751         {
6752         case 2:
6753           source = 0;
6754           break;
6755         case 3:
6756           /* When there are 3 operands, one of them may be immediate,
6757              which may be the first or the last operand.  Otherwise,
6758              the first operand must be shift count register (cl) or it
6759              is an instruction with VexNDS. */
6760           gas_assert (i.imm_operands == 1
6761                       || (i.imm_operands == 0
6762                           && (i.tm.opcode_modifier.vexvvvv == VEXXDS
6763                               || i.types[0].bitfield.shiftcount)));
6764           if (operand_type_check (i.types[0], imm)
6765               || i.types[0].bitfield.shiftcount)
6766             source = 1;
6767           else
6768             source = 0;
6769           break;
6770         case 4:
6771           /* When there are 4 operands, the first two must be 8bit
6772              immediate operands. The source operand will be the 3rd
6773              one.
6774
6775              For instructions with VexNDS, if the first operand
6776              an imm8, the source operand is the 2nd one.  If the last
6777              operand is imm8, the source operand is the first one.  */
6778           gas_assert ((i.imm_operands == 2
6779                        && i.types[0].bitfield.imm8
6780                        && i.types[1].bitfield.imm8)
6781                       || (i.tm.opcode_modifier.vexvvvv == VEXXDS
6782                           && i.imm_operands == 1
6783                           && (i.types[0].bitfield.imm8
6784                               || i.types[i.operands - 1].bitfield.imm8
6785                               || i.rounding)));
6786           if (i.imm_operands == 2)
6787             source = 2;
6788           else
6789             {
6790               if (i.types[0].bitfield.imm8)
6791                 source = 1;
6792               else
6793                 source = 0;
6794             }
6795           break;
6796         case 5:
6797           if (is_evex_encoding (&i.tm))
6798             {
6799               /* For EVEX instructions, when there are 5 operands, the
6800                  first one must be immediate operand.  If the second one
6801                  is immediate operand, the source operand is the 3th
6802                  one.  If the last one is immediate operand, the source
6803                  operand is the 2nd one.  */
6804               gas_assert (i.imm_operands == 2
6805                           && i.tm.opcode_modifier.sae
6806                           && operand_type_check (i.types[0], imm));
6807               if (operand_type_check (i.types[1], imm))
6808                 source = 2;
6809               else if (operand_type_check (i.types[4], imm))
6810                 source = 1;
6811               else
6812                 abort ();
6813             }
6814           break;
6815         default:
6816           abort ();
6817         }
6818
6819       if (!vex_3_sources)
6820         {
6821           dest = source + 1;
6822
6823           /* RC/SAE operand could be between DEST and SRC.  That happens
6824              when one operand is GPR and the other one is XMM/YMM/ZMM
6825              register.  */
6826           if (i.rounding && i.rounding->operand == (int) dest)
6827             dest++;
6828
6829           if (i.tm.opcode_modifier.vexvvvv == VEXXDS)
6830             {
6831               /* For instructions with VexNDS, the register-only source
6832                  operand must be a 32/64bit integer, XMM, YMM, ZMM, or mask
6833                  register.  It is encoded in VEX prefix.  We need to
6834                  clear RegMem bit before calling operand_type_equal.  */
6835
6836               i386_operand_type op;
6837               unsigned int vvvv;
6838
6839               /* Check register-only source operand when two source
6840                  operands are swapped.  */
6841               if (!i.tm.operand_types[source].bitfield.baseindex
6842                   && i.tm.operand_types[dest].bitfield.baseindex)
6843                 {
6844                   vvvv = source;
6845                   source = dest;
6846                 }
6847               else
6848                 vvvv = dest;
6849
6850               op = i.tm.operand_types[vvvv];
6851               op.bitfield.regmem = 0;
6852               if ((dest + 1) >= i.operands
6853                   || ((!op.bitfield.reg
6854                        || (!op.bitfield.dword && !op.bitfield.qword))
6855                       && !op.bitfield.regsimd
6856                       && !operand_type_equal (&op, &regmask)))
6857                 abort ();
6858               i.vex.register_specifier = i.op[vvvv].regs;
6859               dest++;
6860             }
6861         }
6862
6863       i.rm.mode = 3;
6864       /* One of the register operands will be encoded in the i.tm.reg
6865          field, the other in the combined i.tm.mode and i.tm.regmem
6866          fields.  If no form of this instruction supports a memory
6867          destination operand, then we assume the source operand may
6868          sometimes be a memory operand and so we need to store the
6869          destination in the i.rm.reg field.  */
6870       if (!i.tm.operand_types[dest].bitfield.regmem
6871           && operand_type_check (i.tm.operand_types[dest], anymem) == 0)
6872         {
6873           i.rm.reg = i.op[dest].regs->reg_num;
6874           i.rm.regmem = i.op[source].regs->reg_num;
6875           if ((i.op[dest].regs->reg_flags & RegRex) != 0)
6876             i.rex |= REX_R;
6877           if ((i.op[dest].regs->reg_flags & RegVRex) != 0)
6878             i.vrex |= REX_R;
6879           if ((i.op[source].regs->reg_flags & RegRex) != 0)
6880             i.rex |= REX_B;
6881           if ((i.op[source].regs->reg_flags & RegVRex) != 0)
6882             i.vrex |= REX_B;
6883         }
6884       else
6885         {
6886           i.rm.reg = i.op[source].regs->reg_num;
6887           i.rm.regmem = i.op[dest].regs->reg_num;
6888           if ((i.op[dest].regs->reg_flags & RegRex) != 0)
6889             i.rex |= REX_B;
6890           if ((i.op[dest].regs->reg_flags & RegVRex) != 0)
6891             i.vrex |= REX_B;
6892           if ((i.op[source].regs->reg_flags & RegRex) != 0)
6893             i.rex |= REX_R;
6894           if ((i.op[source].regs->reg_flags & RegVRex) != 0)
6895             i.vrex |= REX_R;
6896         }
6897       if (flag_code != CODE_64BIT && (i.rex & REX_R))
6898         {
6899           if (!i.types[i.tm.operand_types[0].bitfield.regmem].bitfield.control)
6900             abort ();
6901           i.rex &= ~REX_R;
6902           add_prefix (LOCK_PREFIX_OPCODE);
6903         }
6904     }
6905   else
6906     {                   /* If it's not 2 reg operands...  */
6907       unsigned int mem;
6908
6909       if (i.mem_operands)
6910         {
6911           unsigned int fake_zero_displacement = 0;
6912           unsigned int op;
6913
6914           for (op = 0; op < i.operands; op++)
6915             if (operand_type_check (i.types[op], anymem))
6916               break;
6917           gas_assert (op < i.operands);
6918
6919           if (i.tm.opcode_modifier.vecsib)
6920             {
6921               if (i.index_reg->reg_num == RegEiz
6922                   || i.index_reg->reg_num == RegRiz)
6923                 abort ();
6924
6925               i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
6926               if (!i.base_reg)
6927                 {
6928                   i.sib.base = NO_BASE_REGISTER;
6929                   i.sib.scale = i.log2_scale_factor;
6930                   i.types[op].bitfield.disp8 = 0;
6931                   i.types[op].bitfield.disp16 = 0;
6932                   i.types[op].bitfield.disp64 = 0;
6933                   if (flag_code != CODE_64BIT || i.prefix[ADDR_PREFIX])
6934                     {
6935                       /* Must be 32 bit */
6936                       i.types[op].bitfield.disp32 = 1;
6937                       i.types[op].bitfield.disp32s = 0;
6938                     }
6939                   else
6940                     {
6941                       i.types[op].bitfield.disp32 = 0;
6942                       i.types[op].bitfield.disp32s = 1;
6943                     }
6944                 }
6945               i.sib.index = i.index_reg->reg_num;
6946               if ((i.index_reg->reg_flags & RegRex) != 0)
6947                 i.rex |= REX_X;
6948               if ((i.index_reg->reg_flags & RegVRex) != 0)
6949                 i.vrex |= REX_X;
6950             }
6951
6952           default_seg = &ds;
6953
6954           if (i.base_reg == 0)
6955             {
6956               i.rm.mode = 0;
6957               if (!i.disp_operands)
6958                 fake_zero_displacement = 1;
6959               if (i.index_reg == 0)
6960                 {
6961                   i386_operand_type newdisp;
6962
6963                   gas_assert (!i.tm.opcode_modifier.vecsib);
6964                   /* Operand is just <disp>  */
6965                   if (flag_code == CODE_64BIT)
6966                     {
6967                       /* 64bit mode overwrites the 32bit absolute
6968                          addressing by RIP relative addressing and
6969                          absolute addressing is encoded by one of the
6970                          redundant SIB forms.  */
6971                       i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
6972                       i.sib.base = NO_BASE_REGISTER;
6973                       i.sib.index = NO_INDEX_REGISTER;
6974                       newdisp = (!i.prefix[ADDR_PREFIX] ? disp32s : disp32);
6975                     }
6976                   else if ((flag_code == CODE_16BIT)
6977                            ^ (i.prefix[ADDR_PREFIX] != 0))
6978                     {
6979                       i.rm.regmem = NO_BASE_REGISTER_16;
6980                       newdisp = disp16;
6981                     }
6982                   else
6983                     {
6984                       i.rm.regmem = NO_BASE_REGISTER;
6985                       newdisp = disp32;
6986                     }
6987                   i.types[op] = operand_type_and_not (i.types[op], anydisp);
6988                   i.types[op] = operand_type_or (i.types[op], newdisp);
6989                 }
6990               else if (!i.tm.opcode_modifier.vecsib)
6991                 {
6992                   /* !i.base_reg && i.index_reg  */
6993                   if (i.index_reg->reg_num == RegEiz
6994                       || i.index_reg->reg_num == RegRiz)
6995                     i.sib.index = NO_INDEX_REGISTER;
6996                   else
6997                     i.sib.index = i.index_reg->reg_num;
6998                   i.sib.base = NO_BASE_REGISTER;
6999                   i.sib.scale = i.log2_scale_factor;
7000                   i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
7001                   i.types[op].bitfield.disp8 = 0;
7002                   i.types[op].bitfield.disp16 = 0;
7003                   i.types[op].bitfield.disp64 = 0;
7004                   if (flag_code != CODE_64BIT || i.prefix[ADDR_PREFIX])
7005                     {
7006                       /* Must be 32 bit */
7007                       i.types[op].bitfield.disp32 = 1;
7008                       i.types[op].bitfield.disp32s = 0;
7009                     }
7010                   else
7011                     {
7012                       i.types[op].bitfield.disp32 = 0;
7013                       i.types[op].bitfield.disp32s = 1;
7014                     }
7015                   if ((i.index_reg->reg_flags & RegRex) != 0)
7016                     i.rex |= REX_X;
7017                 }
7018             }
7019           /* RIP addressing for 64bit mode.  */
7020           else if (i.base_reg->reg_num == RegRip ||
7021                    i.base_reg->reg_num == RegEip)
7022             {
7023               gas_assert (!i.tm.opcode_modifier.vecsib);
7024               i.rm.regmem = NO_BASE_REGISTER;
7025               i.types[op].bitfield.disp8 = 0;
7026               i.types[op].bitfield.disp16 = 0;
7027               i.types[op].bitfield.disp32 = 0;
7028               i.types[op].bitfield.disp32s = 1;
7029               i.types[op].bitfield.disp64 = 0;
7030               i.flags[op] |= Operand_PCrel;
7031               if (! i.disp_operands)
7032                 fake_zero_displacement = 1;
7033             }
7034           else if (i.base_reg->reg_type.bitfield.word)
7035             {
7036               gas_assert (!i.tm.opcode_modifier.vecsib);
7037               switch (i.base_reg->reg_num)
7038                 {
7039                 case 3: /* (%bx)  */
7040                   if (i.index_reg == 0)
7041                     i.rm.regmem = 7;
7042                   else /* (%bx,%si) -> 0, or (%bx,%di) -> 1  */
7043                     i.rm.regmem = i.index_reg->reg_num - 6;
7044                   break;
7045                 case 5: /* (%bp)  */
7046                   default_seg = &ss;
7047                   if (i.index_reg == 0)
7048                     {
7049                       i.rm.regmem = 6;
7050                       if (operand_type_check (i.types[op], disp) == 0)
7051                         {
7052                           /* fake (%bp) into 0(%bp)  */
7053                           i.types[op].bitfield.disp8 = 1;
7054                           fake_zero_displacement = 1;
7055                         }
7056                     }
7057                   else /* (%bp,%si) -> 2, or (%bp,%di) -> 3  */
7058                     i.rm.regmem = i.index_reg->reg_num - 6 + 2;
7059                   break;
7060                 default: /* (%si) -> 4 or (%di) -> 5  */
7061                   i.rm.regmem = i.base_reg->reg_num - 6 + 4;
7062                 }
7063               i.rm.mode = mode_from_disp_size (i.types[op]);
7064             }
7065           else /* i.base_reg and 32/64 bit mode  */
7066             {
7067               if (flag_code == CODE_64BIT
7068                   && operand_type_check (i.types[op], disp))
7069                 {
7070                   i.types[op].bitfield.disp16 = 0;
7071                   i.types[op].bitfield.disp64 = 0;
7072                   if (i.prefix[ADDR_PREFIX] == 0)
7073                     {
7074                       i.types[op].bitfield.disp32 = 0;
7075                       i.types[op].bitfield.disp32s = 1;
7076                     }
7077                   else
7078                     {
7079                       i.types[op].bitfield.disp32 = 1;
7080                       i.types[op].bitfield.disp32s = 0;
7081                     }
7082                 }
7083
7084               if (!i.tm.opcode_modifier.vecsib)
7085                 i.rm.regmem = i.base_reg->reg_num;
7086               if ((i.base_reg->reg_flags & RegRex) != 0)
7087                 i.rex |= REX_B;
7088               i.sib.base = i.base_reg->reg_num;
7089               /* x86-64 ignores REX prefix bit here to avoid decoder
7090                  complications.  */
7091               if (!(i.base_reg->reg_flags & RegRex)
7092                   && (i.base_reg->reg_num == EBP_REG_NUM
7093                    || i.base_reg->reg_num == ESP_REG_NUM))
7094                   default_seg = &ss;
7095               if (i.base_reg->reg_num == 5 && i.disp_operands == 0)
7096                 {
7097                   fake_zero_displacement = 1;
7098                   i.types[op].bitfield.disp8 = 1;
7099                 }
7100               i.sib.scale = i.log2_scale_factor;
7101               if (i.index_reg == 0)
7102                 {
7103                   gas_assert (!i.tm.opcode_modifier.vecsib);
7104                   /* <disp>(%esp) becomes two byte modrm with no index
7105                      register.  We've already stored the code for esp
7106                      in i.rm.regmem ie. ESCAPE_TO_TWO_BYTE_ADDRESSING.
7107                      Any base register besides %esp will not use the
7108                      extra modrm byte.  */
7109                   i.sib.index = NO_INDEX_REGISTER;
7110                 }
7111               else if (!i.tm.opcode_modifier.vecsib)
7112                 {
7113                   if (i.index_reg->reg_num == RegEiz
7114                       || i.index_reg->reg_num == RegRiz)
7115                     i.sib.index = NO_INDEX_REGISTER;
7116                   else
7117                     i.sib.index = i.index_reg->reg_num;
7118                   i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
7119                   if ((i.index_reg->reg_flags & RegRex) != 0)
7120                     i.rex |= REX_X;
7121                 }
7122
7123               if (i.disp_operands
7124                   && (i.reloc[op] == BFD_RELOC_386_TLS_DESC_CALL
7125                       || i.reloc[op] == BFD_RELOC_X86_64_TLSDESC_CALL))
7126                 i.rm.mode = 0;
7127               else
7128                 {
7129                   if (!fake_zero_displacement
7130                       && !i.disp_operands
7131                       && i.disp_encoding)
7132                     {
7133                       fake_zero_displacement = 1;
7134                       if (i.disp_encoding == disp_encoding_8bit)
7135                         i.types[op].bitfield.disp8 = 1;
7136                       else
7137                         i.types[op].bitfield.disp32 = 1;
7138                     }
7139                   i.rm.mode = mode_from_disp_size (i.types[op]);
7140                 }
7141             }
7142
7143           if (fake_zero_displacement)
7144             {
7145               /* Fakes a zero displacement assuming that i.types[op]
7146                  holds the correct displacement size.  */
7147               expressionS *exp;
7148
7149               gas_assert (i.op[op].disps == 0);
7150               exp = &disp_expressions[i.disp_operands++];
7151               i.op[op].disps = exp;
7152               exp->X_op = O_constant;
7153               exp->X_add_number = 0;
7154               exp->X_add_symbol = (symbolS *) 0;
7155               exp->X_op_symbol = (symbolS *) 0;
7156             }
7157
7158           mem = op;
7159         }
7160       else
7161         mem = ~0;
7162
7163       if (i.tm.opcode_modifier.vexsources == XOP2SOURCES)
7164         {
7165           if (operand_type_check (i.types[0], imm))
7166             i.vex.register_specifier = NULL;
7167           else
7168             {
7169               /* VEX.vvvv encodes one of the sources when the first
7170                  operand is not an immediate.  */
7171               if (i.tm.opcode_modifier.vexw == VEXW0)
7172                 i.vex.register_specifier = i.op[0].regs;
7173               else
7174                 i.vex.register_specifier = i.op[1].regs;
7175             }
7176
7177           /* Destination is a XMM register encoded in the ModRM.reg
7178              and VEX.R bit.  */
7179           i.rm.reg = i.op[2].regs->reg_num;
7180           if ((i.op[2].regs->reg_flags & RegRex) != 0)
7181             i.rex |= REX_R;
7182
7183           /* ModRM.rm and VEX.B encodes the other source.  */
7184           if (!i.mem_operands)
7185             {
7186               i.rm.mode = 3;
7187
7188               if (i.tm.opcode_modifier.vexw == VEXW0)
7189                 i.rm.regmem = i.op[1].regs->reg_num;
7190               else
7191                 i.rm.regmem = i.op[0].regs->reg_num;
7192
7193               if ((i.op[1].regs->reg_flags & RegRex) != 0)
7194                 i.rex |= REX_B;
7195             }
7196         }
7197       else if (i.tm.opcode_modifier.vexvvvv == VEXLWP)
7198         {
7199           i.vex.register_specifier = i.op[2].regs;
7200           if (!i.mem_operands)
7201             {
7202               i.rm.mode = 3;
7203               i.rm.regmem = i.op[1].regs->reg_num;
7204               if ((i.op[1].regs->reg_flags & RegRex) != 0)
7205                 i.rex |= REX_B;
7206             }
7207         }
7208       /* Fill in i.rm.reg or i.rm.regmem field with register operand
7209          (if any) based on i.tm.extension_opcode.  Again, we must be
7210          careful to make sure that segment/control/debug/test/MMX
7211          registers are coded into the i.rm.reg field.  */
7212       else if (i.reg_operands)
7213         {
7214           unsigned int op;
7215           unsigned int vex_reg = ~0;
7216
7217           for (op = 0; op < i.operands; op++)
7218             if (i.types[op].bitfield.reg
7219                 || i.types[op].bitfield.regmmx
7220                 || i.types[op].bitfield.regsimd
7221                 || i.types[op].bitfield.regbnd
7222                 || i.types[op].bitfield.regmask
7223                 || i.types[op].bitfield.sreg2
7224                 || i.types[op].bitfield.sreg3
7225                 || i.types[op].bitfield.control
7226                 || i.types[op].bitfield.debug
7227                 || i.types[op].bitfield.test)
7228               break;
7229
7230           if (vex_3_sources)
7231             op = dest;
7232           else if (i.tm.opcode_modifier.vexvvvv == VEXXDS)
7233             {
7234               /* For instructions with VexNDS, the register-only
7235                  source operand is encoded in VEX prefix. */
7236               gas_assert (mem != (unsigned int) ~0);
7237
7238               if (op > mem)
7239                 {
7240                   vex_reg = op++;
7241                   gas_assert (op < i.operands);
7242                 }
7243               else
7244                 {
7245                   /* Check register-only source operand when two source
7246                      operands are swapped.  */
7247                   if (!i.tm.operand_types[op].bitfield.baseindex
7248                       && i.tm.operand_types[op + 1].bitfield.baseindex)
7249                     {
7250                       vex_reg = op;
7251                       op += 2;
7252                       gas_assert (mem == (vex_reg + 1)
7253                                   && op < i.operands);
7254                     }
7255                   else
7256                     {
7257                       vex_reg = op + 1;
7258                       gas_assert (vex_reg < i.operands);
7259                     }
7260                 }
7261             }
7262           else if (i.tm.opcode_modifier.vexvvvv == VEXNDD)
7263             {
7264               /* For instructions with VexNDD, the register destination
7265                  is encoded in VEX prefix.  */
7266               if (i.mem_operands == 0)
7267                 {
7268                   /* There is no memory operand.  */
7269                   gas_assert ((op + 2) == i.operands);
7270                   vex_reg = op + 1;
7271                 }
7272               else
7273                 {
7274                   /* There are only 2 non-immediate operands.  */
7275                   gas_assert (op < i.imm_operands + 2
7276                               && i.operands == i.imm_operands + 2);
7277                   vex_reg = i.imm_operands + 1;
7278                 }
7279             }
7280           else
7281             gas_assert (op < i.operands);
7282
7283           if (vex_reg != (unsigned int) ~0)
7284             {
7285               i386_operand_type *type = &i.tm.operand_types[vex_reg];
7286
7287               if ((!type->bitfield.reg
7288                    || (!type->bitfield.dword && !type->bitfield.qword))
7289                   && !type->bitfield.regsimd
7290                   && !operand_type_equal (type, &regmask))
7291                 abort ();
7292
7293               i.vex.register_specifier = i.op[vex_reg].regs;
7294             }
7295
7296           /* Don't set OP operand twice.  */
7297           if (vex_reg != op)
7298             {
7299               /* If there is an extension opcode to put here, the
7300                  register number must be put into the regmem field.  */
7301               if (i.tm.extension_opcode != None)
7302                 {
7303                   i.rm.regmem = i.op[op].regs->reg_num;
7304                   if ((i.op[op].regs->reg_flags & RegRex) != 0)
7305                     i.rex |= REX_B;
7306                   if ((i.op[op].regs->reg_flags & RegVRex) != 0)
7307                     i.vrex |= REX_B;
7308                 }
7309               else
7310                 {
7311                   i.rm.reg = i.op[op].regs->reg_num;
7312                   if ((i.op[op].regs->reg_flags & RegRex) != 0)
7313                     i.rex |= REX_R;
7314                   if ((i.op[op].regs->reg_flags & RegVRex) != 0)
7315                     i.vrex |= REX_R;
7316                 }
7317             }
7318
7319           /* Now, if no memory operand has set i.rm.mode = 0, 1, 2 we
7320              must set it to 3 to indicate this is a register operand
7321              in the regmem field.  */
7322           if (!i.mem_operands)
7323             i.rm.mode = 3;
7324         }
7325
7326       /* Fill in i.rm.reg field with extension opcode (if any).  */
7327       if (i.tm.extension_opcode != None)
7328         i.rm.reg = i.tm.extension_opcode;
7329     }
7330   return default_seg;
7331 }
7332
7333 static void
7334 output_branch (void)
7335 {
7336   char *p;
7337   int size;
7338   int code16;
7339   int prefix;
7340   relax_substateT subtype;
7341   symbolS *sym;
7342   offsetT off;
7343
7344   code16 = flag_code == CODE_16BIT ? CODE16 : 0;
7345   size = i.disp_encoding == disp_encoding_32bit ? BIG : SMALL;
7346
7347   prefix = 0;
7348   if (i.prefix[DATA_PREFIX] != 0)
7349     {
7350       prefix = 1;
7351       i.prefixes -= 1;
7352       code16 ^= CODE16;
7353     }
7354   /* Pentium4 branch hints.  */
7355   if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE /* not taken */
7356       || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE /* taken */)
7357     {
7358       prefix++;
7359       i.prefixes--;
7360     }
7361   if (i.prefix[REX_PREFIX] != 0)
7362     {
7363       prefix++;
7364       i.prefixes--;
7365     }
7366
7367   /* BND prefixed jump.  */
7368   if (i.prefix[BND_PREFIX] != 0)
7369     {
7370       FRAG_APPEND_1_CHAR (i.prefix[BND_PREFIX]);
7371       i.prefixes -= 1;
7372     }
7373
7374   if (i.prefixes != 0 && !intel_syntax)
7375     as_warn (_("skipping prefixes on this instruction"));
7376
7377   /* It's always a symbol;  End frag & setup for relax.
7378      Make sure there is enough room in this frag for the largest
7379      instruction we may generate in md_convert_frag.  This is 2
7380      bytes for the opcode and room for the prefix and largest
7381      displacement.  */
7382   frag_grow (prefix + 2 + 4);
7383   /* Prefix and 1 opcode byte go in fr_fix.  */
7384   p = frag_more (prefix + 1);
7385   if (i.prefix[DATA_PREFIX] != 0)
7386     *p++ = DATA_PREFIX_OPCODE;
7387   if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE
7388       || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE)
7389     *p++ = i.prefix[SEG_PREFIX];
7390   if (i.prefix[REX_PREFIX] != 0)
7391     *p++ = i.prefix[REX_PREFIX];
7392   *p = i.tm.base_opcode;
7393
7394   if ((unsigned char) *p == JUMP_PC_RELATIVE)
7395     subtype = ENCODE_RELAX_STATE (UNCOND_JUMP, size);
7396   else if (cpu_arch_flags.bitfield.cpui386)
7397     subtype = ENCODE_RELAX_STATE (COND_JUMP, size);
7398   else
7399     subtype = ENCODE_RELAX_STATE (COND_JUMP86, size);
7400   subtype |= code16;
7401
7402   sym = i.op[0].disps->X_add_symbol;
7403   off = i.op[0].disps->X_add_number;
7404
7405   if (i.op[0].disps->X_op != O_constant
7406       && i.op[0].disps->X_op != O_symbol)
7407     {
7408       /* Handle complex expressions.  */
7409       sym = make_expr_symbol (i.op[0].disps);
7410       off = 0;
7411     }
7412
7413   /* 1 possible extra opcode + 4 byte displacement go in var part.
7414      Pass reloc in fr_var.  */
7415   frag_var (rs_machine_dependent, 5, i.reloc[0], subtype, sym, off, p);
7416 }
7417
7418 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7419 /* Return TRUE iff PLT32 relocation should be used for branching to
7420    symbol S.  */
7421
7422 static bfd_boolean
7423 need_plt32_p (symbolS *s)
7424 {
7425   /* PLT32 relocation is ELF only.  */
7426   if (!IS_ELF)
7427     return FALSE;
7428
7429   /* Since there is no need to prepare for PLT branch on x86-64, we
7430      can generate R_X86_64_PLT32, instead of R_X86_64_PC32, which can
7431      be used as a marker for 32-bit PC-relative branches.  */
7432   if (!object_64bit)
7433     return FALSE;
7434
7435   /* Weak or undefined symbol need PLT32 relocation.  */
7436   if (S_IS_WEAK (s) || !S_IS_DEFINED (s))
7437     return TRUE;
7438
7439   /* Non-global symbol doesn't need PLT32 relocation.  */
7440   if (! S_IS_EXTERNAL (s))
7441     return FALSE;
7442
7443   /* Other global symbols need PLT32 relocation.  NB: Symbol with
7444      non-default visibilities are treated as normal global symbol
7445      so that PLT32 relocation can be used as a marker for 32-bit
7446      PC-relative branches.  It is useful for linker relaxation.  */
7447   return TRUE;
7448 }
7449 #endif
7450
7451 static void
7452 output_jump (void)
7453 {
7454   char *p;
7455   int size;
7456   fixS *fixP;
7457   bfd_reloc_code_real_type jump_reloc = i.reloc[0];
7458
7459   if (i.tm.opcode_modifier.jumpbyte)
7460     {
7461       /* This is a loop or jecxz type instruction.  */
7462       size = 1;
7463       if (i.prefix[ADDR_PREFIX] != 0)
7464         {
7465           FRAG_APPEND_1_CHAR (ADDR_PREFIX_OPCODE);
7466           i.prefixes -= 1;
7467         }
7468       /* Pentium4 branch hints.  */
7469       if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE /* not taken */
7470           || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE /* taken */)
7471         {
7472           FRAG_APPEND_1_CHAR (i.prefix[SEG_PREFIX]);
7473           i.prefixes--;
7474         }
7475     }
7476   else
7477     {
7478       int code16;
7479
7480       code16 = 0;
7481       if (flag_code == CODE_16BIT)
7482         code16 = CODE16;
7483
7484       if (i.prefix[DATA_PREFIX] != 0)
7485         {
7486           FRAG_APPEND_1_CHAR (DATA_PREFIX_OPCODE);
7487           i.prefixes -= 1;
7488           code16 ^= CODE16;
7489         }
7490
7491       size = 4;
7492       if (code16)
7493         size = 2;
7494     }
7495
7496   if (i.prefix[REX_PREFIX] != 0)
7497     {
7498       FRAG_APPEND_1_CHAR (i.prefix[REX_PREFIX]);
7499       i.prefixes -= 1;
7500     }
7501
7502   /* BND prefixed jump.  */
7503   if (i.prefix[BND_PREFIX] != 0)
7504     {
7505       FRAG_APPEND_1_CHAR (i.prefix[BND_PREFIX]);
7506       i.prefixes -= 1;
7507     }
7508
7509   if (i.prefixes != 0 && !intel_syntax)
7510     as_warn (_("skipping prefixes on this instruction"));
7511
7512   p = frag_more (i.tm.opcode_length + size);
7513   switch (i.tm.opcode_length)
7514     {
7515     case 2:
7516       *p++ = i.tm.base_opcode >> 8;
7517       /* Fall through.  */
7518     case 1:
7519       *p++ = i.tm.base_opcode;
7520       break;
7521     default:
7522       abort ();
7523     }
7524
7525 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7526   if (size == 4
7527       && jump_reloc == NO_RELOC
7528       && need_plt32_p (i.op[0].disps->X_add_symbol))
7529     jump_reloc = BFD_RELOC_X86_64_PLT32;
7530 #endif
7531
7532   jump_reloc = reloc (size, 1, 1, jump_reloc);
7533
7534   fixP = fix_new_exp (frag_now, p - frag_now->fr_literal, size,
7535                       i.op[0].disps, 1, jump_reloc);
7536
7537   /* All jumps handled here are signed, but don't use a signed limit
7538      check for 32 and 16 bit jumps as we want to allow wrap around at
7539      4G and 64k respectively.  */
7540   if (size == 1)
7541     fixP->fx_signed = 1;
7542 }
7543
7544 static void
7545 output_interseg_jump (void)
7546 {
7547   char *p;
7548   int size;
7549   int prefix;
7550   int code16;
7551
7552   code16 = 0;
7553   if (flag_code == CODE_16BIT)
7554     code16 = CODE16;
7555
7556   prefix = 0;
7557   if (i.prefix[DATA_PREFIX] != 0)
7558     {
7559       prefix = 1;
7560       i.prefixes -= 1;
7561       code16 ^= CODE16;
7562     }
7563   if (i.prefix[REX_PREFIX] != 0)
7564     {
7565       prefix++;
7566       i.prefixes -= 1;
7567     }
7568
7569   size = 4;
7570   if (code16)
7571     size = 2;
7572
7573   if (i.prefixes != 0 && !intel_syntax)
7574     as_warn (_("skipping prefixes on this instruction"));
7575
7576   /* 1 opcode; 2 segment; offset  */
7577   p = frag_more (prefix + 1 + 2 + size);
7578
7579   if (i.prefix[DATA_PREFIX] != 0)
7580     *p++ = DATA_PREFIX_OPCODE;
7581
7582   if (i.prefix[REX_PREFIX] != 0)
7583     *p++ = i.prefix[REX_PREFIX];
7584
7585   *p++ = i.tm.base_opcode;
7586   if (i.op[1].imms->X_op == O_constant)
7587     {
7588       offsetT n = i.op[1].imms->X_add_number;
7589
7590       if (size == 2
7591           && !fits_in_unsigned_word (n)
7592           && !fits_in_signed_word (n))
7593         {
7594           as_bad (_("16-bit jump out of range"));
7595           return;
7596         }
7597       md_number_to_chars (p, n, size);
7598     }
7599   else
7600     fix_new_exp (frag_now, p - frag_now->fr_literal, size,
7601                  i.op[1].imms, 0, reloc (size, 0, 0, i.reloc[1]));
7602   if (i.op[0].imms->X_op != O_constant)
7603     as_bad (_("can't handle non absolute segment in `%s'"),
7604             i.tm.name);
7605   md_number_to_chars (p + size, (valueT) i.op[0].imms->X_add_number, 2);
7606 }
7607
7608 static void
7609 output_insn (void)
7610 {
7611   fragS *insn_start_frag;
7612   offsetT insn_start_off;
7613
7614   /* Tie dwarf2 debug info to the address at the start of the insn.
7615      We can't do this after the insn has been output as the current
7616      frag may have been closed off.  eg. by frag_var.  */
7617   dwarf2_emit_insn (0);
7618
7619   insn_start_frag = frag_now;
7620   insn_start_off = frag_now_fix ();
7621
7622   /* Output jumps.  */
7623   if (i.tm.opcode_modifier.jump)
7624     output_branch ();
7625   else if (i.tm.opcode_modifier.jumpbyte
7626            || i.tm.opcode_modifier.jumpdword)
7627     output_jump ();
7628   else if (i.tm.opcode_modifier.jumpintersegment)
7629     output_interseg_jump ();
7630   else
7631     {
7632       /* Output normal instructions here.  */
7633       char *p;
7634       unsigned char *q;
7635       unsigned int j;
7636       unsigned int prefix;
7637
7638       if (avoid_fence
7639          && i.tm.base_opcode == 0xfae
7640          && i.operands == 1
7641          && i.imm_operands == 1
7642          && (i.op[0].imms->X_add_number == 0xe8
7643              || i.op[0].imms->X_add_number == 0xf0
7644              || i.op[0].imms->X_add_number == 0xf8))
7645         {
7646           /* Encode lfence, mfence, and sfence as
7647              f0 83 04 24 00   lock addl $0x0, (%{re}sp).  */
7648           offsetT val = 0x240483f0ULL;
7649           p = frag_more (5);
7650           md_number_to_chars (p, val, 5);
7651           return;
7652         }
7653
7654       /* Some processors fail on LOCK prefix. This options makes
7655          assembler ignore LOCK prefix and serves as a workaround.  */
7656       if (omit_lock_prefix)
7657         {
7658           if (i.tm.base_opcode == LOCK_PREFIX_OPCODE)
7659             return;
7660           i.prefix[LOCK_PREFIX] = 0;
7661         }
7662
7663       /* Since the VEX/EVEX prefix contains the implicit prefix, we
7664          don't need the explicit prefix.  */
7665       if (!i.tm.opcode_modifier.vex && !i.tm.opcode_modifier.evex)
7666         {
7667           switch (i.tm.opcode_length)
7668             {
7669             case 3:
7670               if (i.tm.base_opcode & 0xff000000)
7671                 {
7672                   prefix = (i.tm.base_opcode >> 24) & 0xff;
7673                   goto check_prefix;
7674                 }
7675               break;
7676             case 2:
7677               if ((i.tm.base_opcode & 0xff0000) != 0)
7678                 {
7679                   prefix = (i.tm.base_opcode >> 16) & 0xff;
7680                   if (i.tm.cpu_flags.bitfield.cpupadlock)
7681                     {
7682 check_prefix:
7683                       if (prefix != REPE_PREFIX_OPCODE
7684                           || (i.prefix[REP_PREFIX]
7685                               != REPE_PREFIX_OPCODE))
7686                         add_prefix (prefix);
7687                     }
7688                   else
7689                     add_prefix (prefix);
7690                 }
7691               break;
7692             case 1:
7693               break;
7694             case 0:
7695               /* Check for pseudo prefixes.  */
7696               as_bad_where (insn_start_frag->fr_file,
7697                             insn_start_frag->fr_line,
7698                              _("pseudo prefix without instruction"));
7699               return;
7700             default:
7701               abort ();
7702             }
7703
7704 #if defined (OBJ_MAYBE_ELF) || defined (OBJ_ELF)
7705           /* For x32, add a dummy REX_OPCODE prefix for mov/add with
7706              R_X86_64_GOTTPOFF relocation so that linker can safely
7707              perform IE->LE optimization.  */
7708           if (x86_elf_abi == X86_64_X32_ABI
7709               && i.operands == 2
7710               && i.reloc[0] == BFD_RELOC_X86_64_GOTTPOFF
7711               && i.prefix[REX_PREFIX] == 0)
7712             add_prefix (REX_OPCODE);
7713 #endif
7714
7715           /* The prefix bytes.  */
7716           for (j = ARRAY_SIZE (i.prefix), q = i.prefix; j > 0; j--, q++)
7717             if (*q)
7718               FRAG_APPEND_1_CHAR (*q);
7719         }
7720       else
7721         {
7722           for (j = 0, q = i.prefix; j < ARRAY_SIZE (i.prefix); j++, q++)
7723             if (*q)
7724               switch (j)
7725                 {
7726                 case REX_PREFIX:
7727                   /* REX byte is encoded in VEX prefix.  */
7728                   break;
7729                 case SEG_PREFIX:
7730                 case ADDR_PREFIX:
7731                   FRAG_APPEND_1_CHAR (*q);
7732                   break;
7733                 default:
7734                   /* There should be no other prefixes for instructions
7735                      with VEX prefix.  */
7736                   abort ();
7737                 }
7738
7739           /* For EVEX instructions i.vrex should become 0 after
7740              build_evex_prefix.  For VEX instructions upper 16 registers
7741              aren't available, so VREX should be 0.  */
7742           if (i.vrex)
7743             abort ();
7744           /* Now the VEX prefix.  */
7745           p = frag_more (i.vex.length);
7746           for (j = 0; j < i.vex.length; j++)
7747             p[j] = i.vex.bytes[j];
7748         }
7749
7750       /* Now the opcode; be careful about word order here!  */
7751       if (i.tm.opcode_length == 1)
7752         {
7753           FRAG_APPEND_1_CHAR (i.tm.base_opcode);
7754         }
7755       else
7756         {
7757           switch (i.tm.opcode_length)
7758             {
7759             case 4:
7760               p = frag_more (4);
7761               *p++ = (i.tm.base_opcode >> 24) & 0xff;
7762               *p++ = (i.tm.base_opcode >> 16) & 0xff;
7763               break;
7764             case 3:
7765               p = frag_more (3);
7766               *p++ = (i.tm.base_opcode >> 16) & 0xff;
7767               break;
7768             case 2:
7769               p = frag_more (2);
7770               break;
7771             default:
7772               abort ();
7773               break;
7774             }
7775
7776           /* Put out high byte first: can't use md_number_to_chars!  */
7777           *p++ = (i.tm.base_opcode >> 8) & 0xff;
7778           *p = i.tm.base_opcode & 0xff;
7779         }
7780
7781       /* Now the modrm byte and sib byte (if present).  */
7782       if (i.tm.opcode_modifier.modrm)
7783         {
7784           FRAG_APPEND_1_CHAR ((i.rm.regmem << 0
7785                                | i.rm.reg << 3
7786                                | i.rm.mode << 6));
7787           /* If i.rm.regmem == ESP (4)
7788              && i.rm.mode != (Register mode)
7789              && not 16 bit
7790              ==> need second modrm byte.  */
7791           if (i.rm.regmem == ESCAPE_TO_TWO_BYTE_ADDRESSING
7792               && i.rm.mode != 3
7793               && !(i.base_reg && i.base_reg->reg_type.bitfield.word))
7794             FRAG_APPEND_1_CHAR ((i.sib.base << 0
7795                                  | i.sib.index << 3
7796                                  | i.sib.scale << 6));
7797         }
7798
7799       if (i.disp_operands)
7800         output_disp (insn_start_frag, insn_start_off);
7801
7802       if (i.imm_operands)
7803         output_imm (insn_start_frag, insn_start_off);
7804     }
7805
7806 #ifdef DEBUG386
7807   if (flag_debug)
7808     {
7809       pi ("" /*line*/, &i);
7810     }
7811 #endif /* DEBUG386  */
7812 }
7813
7814 /* Return the size of the displacement operand N.  */
7815
7816 static int
7817 disp_size (unsigned int n)
7818 {
7819   int size = 4;
7820
7821   if (i.types[n].bitfield.disp64)
7822     size = 8;
7823   else if (i.types[n].bitfield.disp8)
7824     size = 1;
7825   else if (i.types[n].bitfield.disp16)
7826     size = 2;
7827   return size;
7828 }
7829
7830 /* Return the size of the immediate operand N.  */
7831
7832 static int
7833 imm_size (unsigned int n)
7834 {
7835   int size = 4;
7836   if (i.types[n].bitfield.imm64)
7837     size = 8;
7838   else if (i.types[n].bitfield.imm8 || i.types[n].bitfield.imm8s)
7839     size = 1;
7840   else if (i.types[n].bitfield.imm16)
7841     size = 2;
7842   return size;
7843 }
7844
7845 static void
7846 output_disp (fragS *insn_start_frag, offsetT insn_start_off)
7847 {
7848   char *p;
7849   unsigned int n;
7850
7851   for (n = 0; n < i.operands; n++)
7852     {
7853       if (operand_type_check (i.types[n], disp))
7854         {
7855           if (i.op[n].disps->X_op == O_constant)
7856             {
7857               int size = disp_size (n);
7858               offsetT val = i.op[n].disps->X_add_number;
7859
7860               val = offset_in_range (val >> i.memshift, size);
7861               p = frag_more (size);
7862               md_number_to_chars (p, val, size);
7863             }
7864           else
7865             {
7866               enum bfd_reloc_code_real reloc_type;
7867               int size = disp_size (n);
7868               int sign = i.types[n].bitfield.disp32s;
7869               int pcrel = (i.flags[n] & Operand_PCrel) != 0;
7870               fixS *fixP;
7871
7872               /* We can't have 8 bit displacement here.  */
7873               gas_assert (!i.types[n].bitfield.disp8);
7874
7875               /* The PC relative address is computed relative
7876                  to the instruction boundary, so in case immediate
7877                  fields follows, we need to adjust the value.  */
7878               if (pcrel && i.imm_operands)
7879                 {
7880                   unsigned int n1;
7881                   int sz = 0;
7882
7883                   for (n1 = 0; n1 < i.operands; n1++)
7884                     if (operand_type_check (i.types[n1], imm))
7885                       {
7886                         /* Only one immediate is allowed for PC
7887                            relative address.  */
7888                         gas_assert (sz == 0);
7889                         sz = imm_size (n1);
7890                         i.op[n].disps->X_add_number -= sz;
7891                       }
7892                   /* We should find the immediate.  */
7893                   gas_assert (sz != 0);
7894                 }
7895
7896               p = frag_more (size);
7897               reloc_type = reloc (size, pcrel, sign, i.reloc[n]);
7898               if (GOT_symbol
7899                   && GOT_symbol == i.op[n].disps->X_add_symbol
7900                   && (((reloc_type == BFD_RELOC_32
7901                         || reloc_type == BFD_RELOC_X86_64_32S
7902                         || (reloc_type == BFD_RELOC_64
7903                             && object_64bit))
7904                        && (i.op[n].disps->X_op == O_symbol
7905                            || (i.op[n].disps->X_op == O_add
7906                                && ((symbol_get_value_expression
7907                                     (i.op[n].disps->X_op_symbol)->X_op)
7908                                    == O_subtract))))
7909                       || reloc_type == BFD_RELOC_32_PCREL))
7910                 {
7911                   offsetT add;
7912
7913                   if (insn_start_frag == frag_now)
7914                     add = (p - frag_now->fr_literal) - insn_start_off;
7915                   else
7916                     {
7917                       fragS *fr;
7918
7919                       add = insn_start_frag->fr_fix - insn_start_off;
7920                       for (fr = insn_start_frag->fr_next;
7921                            fr && fr != frag_now; fr = fr->fr_next)
7922                         add += fr->fr_fix;
7923                       add += p - frag_now->fr_literal;
7924                     }
7925
7926                   if (!object_64bit)
7927                     {
7928                       reloc_type = BFD_RELOC_386_GOTPC;
7929                       i.op[n].imms->X_add_number += add;
7930                     }
7931                   else if (reloc_type == BFD_RELOC_64)
7932                     reloc_type = BFD_RELOC_X86_64_GOTPC64;
7933                   else
7934                     /* Don't do the adjustment for x86-64, as there
7935                        the pcrel addressing is relative to the _next_
7936                        insn, and that is taken care of in other code.  */
7937                     reloc_type = BFD_RELOC_X86_64_GOTPC32;
7938                 }
7939               fixP = fix_new_exp (frag_now, p - frag_now->fr_literal,
7940                                   size, i.op[n].disps, pcrel,
7941                                   reloc_type);
7942               /* Check for "call/jmp *mem", "mov mem, %reg",
7943                  "test %reg, mem" and "binop mem, %reg" where binop
7944                  is one of adc, add, and, cmp, or, sbb, sub, xor
7945                  instructions.  Always generate R_386_GOT32X for
7946                  "sym*GOT" operand in 32-bit mode.  */
7947               if ((generate_relax_relocations
7948                    || (!object_64bit
7949                        && i.rm.mode == 0
7950                        && i.rm.regmem == 5))
7951                   && (i.rm.mode == 2
7952                       || (i.rm.mode == 0 && i.rm.regmem == 5))
7953                   && ((i.operands == 1
7954                        && i.tm.base_opcode == 0xff
7955                        && (i.rm.reg == 2 || i.rm.reg == 4))
7956                       || (i.operands == 2
7957                           && (i.tm.base_opcode == 0x8b
7958                               || i.tm.base_opcode == 0x85
7959                               || (i.tm.base_opcode & 0xc7) == 0x03))))
7960                 {
7961                   if (object_64bit)
7962                     {
7963                       fixP->fx_tcbit = i.rex != 0;
7964                       if (i.base_reg
7965                           && (i.base_reg->reg_num == RegRip
7966                               || i.base_reg->reg_num == RegEip))
7967                       fixP->fx_tcbit2 = 1;
7968                     }
7969                   else
7970                     fixP->fx_tcbit2 = 1;
7971                 }
7972             }
7973         }
7974     }
7975 }
7976
7977 static void
7978 output_imm (fragS *insn_start_frag, offsetT insn_start_off)
7979 {
7980   char *p;
7981   unsigned int n;
7982
7983   for (n = 0; n < i.operands; n++)
7984     {
7985       /* Skip SAE/RC Imm operand in EVEX.  They are already handled.  */
7986       if (i.rounding && (int) n == i.rounding->operand)
7987         continue;
7988
7989       if (operand_type_check (i.types[n], imm))
7990         {
7991           if (i.op[n].imms->X_op == O_constant)
7992             {
7993               int size = imm_size (n);
7994               offsetT val;
7995
7996               val = offset_in_range (i.op[n].imms->X_add_number,
7997                                      size);
7998               p = frag_more (size);
7999               md_number_to_chars (p, val, size);
8000             }
8001           else
8002             {
8003               /* Not absolute_section.
8004                  Need a 32-bit fixup (don't support 8bit
8005                  non-absolute imms).  Try to support other
8006                  sizes ...  */
8007               enum bfd_reloc_code_real reloc_type;
8008               int size = imm_size (n);
8009               int sign;
8010
8011               if (i.types[n].bitfield.imm32s
8012                   && (i.suffix == QWORD_MNEM_SUFFIX
8013                       || (!i.suffix && i.tm.opcode_modifier.no_lsuf)))
8014                 sign = 1;
8015               else
8016                 sign = 0;
8017
8018               p = frag_more (size);
8019               reloc_type = reloc (size, 0, sign, i.reloc[n]);
8020
8021               /*   This is tough to explain.  We end up with this one if we
8022                * have operands that look like
8023                * "_GLOBAL_OFFSET_TABLE_+[.-.L284]".  The goal here is to
8024                * obtain the absolute address of the GOT, and it is strongly
8025                * preferable from a performance point of view to avoid using
8026                * a runtime relocation for this.  The actual sequence of
8027                * instructions often look something like:
8028                *
8029                *        call    .L66
8030                * .L66:
8031                *        popl    %ebx
8032                *        addl    $_GLOBAL_OFFSET_TABLE_+[.-.L66],%ebx
8033                *
8034                *   The call and pop essentially return the absolute address
8035                * of the label .L66 and store it in %ebx.  The linker itself
8036                * will ultimately change the first operand of the addl so
8037                * that %ebx points to the GOT, but to keep things simple, the
8038                * .o file must have this operand set so that it generates not
8039                * the absolute address of .L66, but the absolute address of
8040                * itself.  This allows the linker itself simply treat a GOTPC
8041                * relocation as asking for a pcrel offset to the GOT to be
8042                * added in, and the addend of the relocation is stored in the
8043                * operand field for the instruction itself.
8044                *
8045                *   Our job here is to fix the operand so that it would add
8046                * the correct offset so that %ebx would point to itself.  The
8047                * thing that is tricky is that .-.L66 will point to the
8048                * beginning of the instruction, so we need to further modify
8049                * the operand so that it will point to itself.  There are
8050                * other cases where you have something like:
8051                *
8052                *        .long   $_GLOBAL_OFFSET_TABLE_+[.-.L66]
8053                *
8054                * and here no correction would be required.  Internally in
8055                * the assembler we treat operands of this form as not being
8056                * pcrel since the '.' is explicitly mentioned, and I wonder
8057                * whether it would simplify matters to do it this way.  Who
8058                * knows.  In earlier versions of the PIC patches, the
8059                * pcrel_adjust field was used to store the correction, but
8060                * since the expression is not pcrel, I felt it would be
8061                * confusing to do it this way.  */
8062
8063               if ((reloc_type == BFD_RELOC_32
8064                    || reloc_type == BFD_RELOC_X86_64_32S
8065                    || reloc_type == BFD_RELOC_64)
8066                   && GOT_symbol
8067                   && GOT_symbol == i.op[n].imms->X_add_symbol
8068                   && (i.op[n].imms->X_op == O_symbol
8069                       || (i.op[n].imms->X_op == O_add
8070                           && ((symbol_get_value_expression
8071                                (i.op[n].imms->X_op_symbol)->X_op)
8072                               == O_subtract))))
8073                 {
8074                   offsetT add;
8075
8076                   if (insn_start_frag == frag_now)
8077                     add = (p - frag_now->fr_literal) - insn_start_off;
8078                   else
8079                     {
8080                       fragS *fr;
8081
8082                       add = insn_start_frag->fr_fix - insn_start_off;
8083                       for (fr = insn_start_frag->fr_next;
8084                            fr && fr != frag_now; fr = fr->fr_next)
8085                         add += fr->fr_fix;
8086                       add += p - frag_now->fr_literal;
8087                     }
8088
8089                   if (!object_64bit)
8090                     reloc_type = BFD_RELOC_386_GOTPC;
8091                   else if (size == 4)
8092                     reloc_type = BFD_RELOC_X86_64_GOTPC32;
8093                   else if (size == 8)
8094                     reloc_type = BFD_RELOC_X86_64_GOTPC64;
8095                   i.op[n].imms->X_add_number += add;
8096                 }
8097               fix_new_exp (frag_now, p - frag_now->fr_literal, size,
8098                            i.op[n].imms, 0, reloc_type);
8099             }
8100         }
8101     }
8102 }
8103 \f
8104 /* x86_cons_fix_new is called via the expression parsing code when a
8105    reloc is needed.  We use this hook to get the correct .got reloc.  */
8106 static int cons_sign = -1;
8107
8108 void
8109 x86_cons_fix_new (fragS *frag, unsigned int off, unsigned int len,
8110                   expressionS *exp, bfd_reloc_code_real_type r)
8111 {
8112   r = reloc (len, 0, cons_sign, r);
8113
8114 #ifdef TE_PE
8115   if (exp->X_op == O_secrel)
8116     {
8117       exp->X_op = O_symbol;
8118       r = BFD_RELOC_32_SECREL;
8119     }
8120 #endif
8121
8122   fix_new_exp (frag, off, len, exp, 0, r);
8123 }
8124
8125 /* Export the ABI address size for use by TC_ADDRESS_BYTES for the
8126    purpose of the `.dc.a' internal pseudo-op.  */
8127
8128 int
8129 x86_address_bytes (void)
8130 {
8131   if ((stdoutput->arch_info->mach & bfd_mach_x64_32))
8132     return 4;
8133   return stdoutput->arch_info->bits_per_address / 8;
8134 }
8135
8136 #if !(defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) || defined (OBJ_MACH_O)) \
8137     || defined (LEX_AT)
8138 # define lex_got(reloc, adjust, types) NULL
8139 #else
8140 /* Parse operands of the form
8141    <symbol>@GOTOFF+<nnn>
8142    and similar .plt or .got references.
8143
8144    If we find one, set up the correct relocation in RELOC and copy the
8145    input string, minus the `@GOTOFF' into a malloc'd buffer for
8146    parsing by the calling routine.  Return this buffer, and if ADJUST
8147    is non-null set it to the length of the string we removed from the
8148    input line.  Otherwise return NULL.  */
8149 static char *
8150 lex_got (enum bfd_reloc_code_real *rel,
8151          int *adjust,
8152          i386_operand_type *types)
8153 {
8154   /* Some of the relocations depend on the size of what field is to
8155      be relocated.  But in our callers i386_immediate and i386_displacement
8156      we don't yet know the operand size (this will be set by insn
8157      matching).  Hence we record the word32 relocation here,
8158      and adjust the reloc according to the real size in reloc().  */
8159   static const struct {
8160     const char *str;
8161     int len;
8162     const enum bfd_reloc_code_real rel[2];
8163     const i386_operand_type types64;
8164   } gotrel[] = {
8165 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8166     { STRING_COMMA_LEN ("SIZE"),      { BFD_RELOC_SIZE32,
8167                                         BFD_RELOC_SIZE32 },
8168       OPERAND_TYPE_IMM32_64 },
8169 #endif
8170     { STRING_COMMA_LEN ("PLTOFF"),   { _dummy_first_bfd_reloc_code_real,
8171                                        BFD_RELOC_X86_64_PLTOFF64 },
8172       OPERAND_TYPE_IMM64 },
8173     { STRING_COMMA_LEN ("PLT"),      { BFD_RELOC_386_PLT32,
8174                                        BFD_RELOC_X86_64_PLT32    },
8175       OPERAND_TYPE_IMM32_32S_DISP32 },
8176     { STRING_COMMA_LEN ("GOTPLT"),   { _dummy_first_bfd_reloc_code_real,
8177                                        BFD_RELOC_X86_64_GOTPLT64 },
8178       OPERAND_TYPE_IMM64_DISP64 },
8179     { STRING_COMMA_LEN ("GOTOFF"),   { BFD_RELOC_386_GOTOFF,
8180                                        BFD_RELOC_X86_64_GOTOFF64 },
8181       OPERAND_TYPE_IMM64_DISP64 },
8182     { STRING_COMMA_LEN ("GOTPCREL"), { _dummy_first_bfd_reloc_code_real,
8183                                        BFD_RELOC_X86_64_GOTPCREL },
8184       OPERAND_TYPE_IMM32_32S_DISP32 },
8185     { STRING_COMMA_LEN ("TLSGD"),    { BFD_RELOC_386_TLS_GD,
8186                                        BFD_RELOC_X86_64_TLSGD    },
8187       OPERAND_TYPE_IMM32_32S_DISP32 },
8188     { STRING_COMMA_LEN ("TLSLDM"),   { BFD_RELOC_386_TLS_LDM,
8189                                        _dummy_first_bfd_reloc_code_real },
8190       OPERAND_TYPE_NONE },
8191     { STRING_COMMA_LEN ("TLSLD"),    { _dummy_first_bfd_reloc_code_real,
8192                                        BFD_RELOC_X86_64_TLSLD    },
8193       OPERAND_TYPE_IMM32_32S_DISP32 },
8194     { STRING_COMMA_LEN ("GOTTPOFF"), { BFD_RELOC_386_TLS_IE_32,
8195                                        BFD_RELOC_X86_64_GOTTPOFF },
8196       OPERAND_TYPE_IMM32_32S_DISP32 },
8197     { STRING_COMMA_LEN ("TPOFF"),    { BFD_RELOC_386_TLS_LE_32,
8198                                        BFD_RELOC_X86_64_TPOFF32  },
8199       OPERAND_TYPE_IMM32_32S_64_DISP32_64 },
8200     { STRING_COMMA_LEN ("NTPOFF"),   { BFD_RELOC_386_TLS_LE,
8201                                        _dummy_first_bfd_reloc_code_real },
8202       OPERAND_TYPE_NONE },
8203     { STRING_COMMA_LEN ("DTPOFF"),   { BFD_RELOC_386_TLS_LDO_32,
8204                                        BFD_RELOC_X86_64_DTPOFF32 },
8205       OPERAND_TYPE_IMM32_32S_64_DISP32_64 },
8206     { STRING_COMMA_LEN ("GOTNTPOFF"),{ BFD_RELOC_386_TLS_GOTIE,
8207                                        _dummy_first_bfd_reloc_code_real },
8208       OPERAND_TYPE_NONE },
8209     { STRING_COMMA_LEN ("INDNTPOFF"),{ BFD_RELOC_386_TLS_IE,
8210                                        _dummy_first_bfd_reloc_code_real },
8211       OPERAND_TYPE_NONE },
8212     { STRING_COMMA_LEN ("GOT"),      { BFD_RELOC_386_GOT32,
8213                                        BFD_RELOC_X86_64_GOT32    },
8214       OPERAND_TYPE_IMM32_32S_64_DISP32 },
8215     { STRING_COMMA_LEN ("TLSDESC"),  { BFD_RELOC_386_TLS_GOTDESC,
8216                                        BFD_RELOC_X86_64_GOTPC32_TLSDESC },
8217       OPERAND_TYPE_IMM32_32S_DISP32 },
8218     { STRING_COMMA_LEN ("TLSCALL"),  { BFD_RELOC_386_TLS_DESC_CALL,
8219                                        BFD_RELOC_X86_64_TLSDESC_CALL },
8220       OPERAND_TYPE_IMM32_32S_DISP32 },
8221   };
8222   char *cp;
8223   unsigned int j;
8224
8225 #if defined (OBJ_MAYBE_ELF)
8226   if (!IS_ELF)
8227     return NULL;
8228 #endif
8229
8230   for (cp = input_line_pointer; *cp != '@'; cp++)
8231     if (is_end_of_line[(unsigned char) *cp] || *cp == ',')
8232       return NULL;
8233
8234   for (j = 0; j < ARRAY_SIZE (gotrel); j++)
8235     {
8236       int len = gotrel[j].len;
8237       if (strncasecmp (cp + 1, gotrel[j].str, len) == 0)
8238         {
8239           if (gotrel[j].rel[object_64bit] != 0)
8240             {
8241               int first, second;
8242               char *tmpbuf, *past_reloc;
8243
8244               *rel = gotrel[j].rel[object_64bit];
8245
8246               if (types)
8247                 {
8248                   if (flag_code != CODE_64BIT)
8249                     {
8250                       types->bitfield.imm32 = 1;
8251                       types->bitfield.disp32 = 1;
8252                     }
8253                   else
8254                     *types = gotrel[j].types64;
8255                 }
8256
8257               if (j != 0 && GOT_symbol == NULL)
8258                 GOT_symbol = symbol_find_or_make (GLOBAL_OFFSET_TABLE_NAME);
8259
8260               /* The length of the first part of our input line.  */
8261               first = cp - input_line_pointer;
8262
8263               /* The second part goes from after the reloc token until
8264                  (and including) an end_of_line char or comma.  */
8265               past_reloc = cp + 1 + len;
8266               cp = past_reloc;
8267               while (!is_end_of_line[(unsigned char) *cp] && *cp != ',')
8268                 ++cp;
8269               second = cp + 1 - past_reloc;
8270
8271               /* Allocate and copy string.  The trailing NUL shouldn't
8272                  be necessary, but be safe.  */
8273               tmpbuf = XNEWVEC (char, first + second + 2);
8274               memcpy (tmpbuf, input_line_pointer, first);
8275               if (second != 0 && *past_reloc != ' ')
8276                 /* Replace the relocation token with ' ', so that
8277                    errors like foo@GOTOFF1 will be detected.  */
8278                 tmpbuf[first++] = ' ';
8279               else
8280                 /* Increment length by 1 if the relocation token is
8281                    removed.  */
8282                 len++;
8283               if (adjust)
8284                 *adjust = len;
8285               memcpy (tmpbuf + first, past_reloc, second);
8286               tmpbuf[first + second] = '\0';
8287               return tmpbuf;
8288             }
8289
8290           as_bad (_("@%s reloc is not supported with %d-bit output format"),
8291                   gotrel[j].str, 1 << (5 + object_64bit));
8292           return NULL;
8293         }
8294     }
8295
8296   /* Might be a symbol version string.  Don't as_bad here.  */
8297   return NULL;
8298 }
8299 #endif
8300
8301 #ifdef TE_PE
8302 #ifdef lex_got
8303 #undef lex_got
8304 #endif
8305 /* Parse operands of the form
8306    <symbol>@SECREL32+<nnn>
8307
8308    If we find one, set up the correct relocation in RELOC and copy the
8309    input string, minus the `@SECREL32' into a malloc'd buffer for
8310    parsing by the calling routine.  Return this buffer, and if ADJUST
8311    is non-null set it to the length of the string we removed from the
8312    input line.  Otherwise return NULL.
8313
8314    This function is copied from the ELF version above adjusted for PE targets.  */
8315
8316 static char *
8317 lex_got (enum bfd_reloc_code_real *rel ATTRIBUTE_UNUSED,
8318          int *adjust ATTRIBUTE_UNUSED,
8319          i386_operand_type *types)
8320 {
8321   static const struct
8322   {
8323     const char *str;
8324     int len;
8325     const enum bfd_reloc_code_real rel[2];
8326     const i386_operand_type types64;
8327   }
8328   gotrel[] =
8329   {
8330     { STRING_COMMA_LEN ("SECREL32"),    { BFD_RELOC_32_SECREL,
8331                                           BFD_RELOC_32_SECREL },
8332       OPERAND_TYPE_IMM32_32S_64_DISP32_64 },
8333   };
8334
8335   char *cp;
8336   unsigned j;
8337
8338   for (cp = input_line_pointer; *cp != '@'; cp++)
8339     if (is_end_of_line[(unsigned char) *cp] || *cp == ',')
8340       return NULL;
8341
8342   for (j = 0; j < ARRAY_SIZE (gotrel); j++)
8343     {
8344       int len = gotrel[j].len;
8345
8346       if (strncasecmp (cp + 1, gotrel[j].str, len) == 0)
8347         {
8348           if (gotrel[j].rel[object_64bit] != 0)
8349             {
8350               int first, second;
8351               char *tmpbuf, *past_reloc;
8352
8353               *rel = gotrel[j].rel[object_64bit];
8354               if (adjust)
8355                 *adjust = len;
8356
8357               if (types)
8358                 {
8359                   if (flag_code != CODE_64BIT)
8360                     {
8361                       types->bitfield.imm32 = 1;
8362                       types->bitfield.disp32 = 1;
8363                     }
8364                   else
8365                     *types = gotrel[j].types64;
8366                 }
8367
8368               /* The length of the first part of our input line.  */
8369               first = cp - input_line_pointer;
8370
8371               /* The second part goes from after the reloc token until
8372                  (and including) an end_of_line char or comma.  */
8373               past_reloc = cp + 1 + len;
8374               cp = past_reloc;
8375               while (!is_end_of_line[(unsigned char) *cp] && *cp != ',')
8376                 ++cp;
8377               second = cp + 1 - past_reloc;
8378
8379               /* Allocate and copy string.  The trailing NUL shouldn't
8380                  be necessary, but be safe.  */
8381               tmpbuf = XNEWVEC (char, first + second + 2);
8382               memcpy (tmpbuf, input_line_pointer, first);
8383               if (second != 0 && *past_reloc != ' ')
8384                 /* Replace the relocation token with ' ', so that
8385                    errors like foo@SECLREL321 will be detected.  */
8386                 tmpbuf[first++] = ' ';
8387               memcpy (tmpbuf + first, past_reloc, second);
8388               tmpbuf[first + second] = '\0';
8389               return tmpbuf;
8390             }
8391
8392           as_bad (_("@%s reloc is not supported with %d-bit output format"),
8393                   gotrel[j].str, 1 << (5 + object_64bit));
8394           return NULL;
8395         }
8396     }
8397
8398   /* Might be a symbol version string.  Don't as_bad here.  */
8399   return NULL;
8400 }
8401
8402 #endif /* TE_PE */
8403
8404 bfd_reloc_code_real_type
8405 x86_cons (expressionS *exp, int size)
8406 {
8407   bfd_reloc_code_real_type got_reloc = NO_RELOC;
8408
8409   intel_syntax = -intel_syntax;
8410
8411   exp->X_md = 0;
8412   if (size == 4 || (object_64bit && size == 8))
8413     {
8414       /* Handle @GOTOFF and the like in an expression.  */
8415       char *save;
8416       char *gotfree_input_line;
8417       int adjust = 0;
8418
8419       save = input_line_pointer;
8420       gotfree_input_line = lex_got (&got_reloc, &adjust, NULL);
8421       if (gotfree_input_line)
8422         input_line_pointer = gotfree_input_line;
8423
8424       expression (exp);
8425
8426       if (gotfree_input_line)
8427         {
8428           /* expression () has merrily parsed up to the end of line,
8429              or a comma - in the wrong buffer.  Transfer how far
8430              input_line_pointer has moved to the right buffer.  */
8431           input_line_pointer = (save
8432                                 + (input_line_pointer - gotfree_input_line)
8433                                 + adjust);
8434           free (gotfree_input_line);
8435           if (exp->X_op == O_constant
8436               || exp->X_op == O_absent
8437               || exp->X_op == O_illegal
8438               || exp->X_op == O_register
8439               || exp->X_op == O_big)
8440             {
8441               char c = *input_line_pointer;
8442               *input_line_pointer = 0;
8443               as_bad (_("missing or invalid expression `%s'"), save);
8444               *input_line_pointer = c;
8445             }
8446         }
8447     }
8448   else
8449     expression (exp);
8450
8451   intel_syntax = -intel_syntax;
8452
8453   if (intel_syntax)
8454     i386_intel_simplify (exp);
8455
8456   return got_reloc;
8457 }
8458
8459 static void
8460 signed_cons (int size)
8461 {
8462   if (flag_code == CODE_64BIT)
8463     cons_sign = 1;
8464   cons (size);
8465   cons_sign = -1;
8466 }
8467
8468 #ifdef TE_PE
8469 static void
8470 pe_directive_secrel (int dummy ATTRIBUTE_UNUSED)
8471 {
8472   expressionS exp;
8473
8474   do
8475     {
8476       expression (&exp);
8477       if (exp.X_op == O_symbol)
8478         exp.X_op = O_secrel;
8479
8480       emit_expr (&exp, 4);
8481     }
8482   while (*input_line_pointer++ == ',');
8483
8484   input_line_pointer--;
8485   demand_empty_rest_of_line ();
8486 }
8487 #endif
8488
8489 /* Handle Vector operations.  */
8490
8491 static char *
8492 check_VecOperations (char *op_string, char *op_end)
8493 {
8494   const reg_entry *mask;
8495   const char *saved;
8496   char *end_op;
8497
8498   while (*op_string
8499          && (op_end == NULL || op_string < op_end))
8500     {
8501       saved = op_string;
8502       if (*op_string == '{')
8503         {
8504           op_string++;
8505
8506           /* Check broadcasts.  */
8507           if (strncmp (op_string, "1to", 3) == 0)
8508             {
8509               int bcst_type;
8510
8511               if (i.broadcast)
8512                 goto duplicated_vec_op;
8513
8514               op_string += 3;
8515               if (*op_string == '8')
8516                 bcst_type = 8;
8517               else if (*op_string == '4')
8518                 bcst_type = 4;
8519               else if (*op_string == '2')
8520                 bcst_type = 2;
8521               else if (*op_string == '1'
8522                        && *(op_string+1) == '6')
8523                 {
8524                   bcst_type = 16;
8525                   op_string++;
8526                 }
8527               else
8528                 {
8529                   as_bad (_("Unsupported broadcast: `%s'"), saved);
8530                   return NULL;
8531                 }
8532               op_string++;
8533
8534               broadcast_op.type = bcst_type;
8535               broadcast_op.operand = this_operand;
8536               i.broadcast = &broadcast_op;
8537             }
8538           /* Check masking operation.  */
8539           else if ((mask = parse_register (op_string, &end_op)) != NULL)
8540             {
8541               /* k0 can't be used for write mask.  */
8542               if (!mask->reg_type.bitfield.regmask || mask->reg_num == 0)
8543                 {
8544                   as_bad (_("`%s%s' can't be used for write mask"),
8545                           register_prefix, mask->reg_name);
8546                   return NULL;
8547                 }
8548
8549               if (!i.mask)
8550                 {
8551                   mask_op.mask = mask;
8552                   mask_op.zeroing = 0;
8553                   mask_op.operand = this_operand;
8554                   i.mask = &mask_op;
8555                 }
8556               else
8557                 {
8558                   if (i.mask->mask)
8559                     goto duplicated_vec_op;
8560
8561                   i.mask->mask = mask;
8562
8563                   /* Only "{z}" is allowed here.  No need to check
8564                      zeroing mask explicitly.  */
8565                   if (i.mask->operand != this_operand)
8566                     {
8567                       as_bad (_("invalid write mask `%s'"), saved);
8568                       return NULL;
8569                     }
8570                 }
8571
8572               op_string = end_op;
8573             }
8574           /* Check zeroing-flag for masking operation.  */
8575           else if (*op_string == 'z')
8576             {
8577               if (!i.mask)
8578                 {
8579                   mask_op.mask = NULL;
8580                   mask_op.zeroing = 1;
8581                   mask_op.operand = this_operand;
8582                   i.mask = &mask_op;
8583                 }
8584               else
8585                 {
8586                   if (i.mask->zeroing)
8587                     {
8588                     duplicated_vec_op:
8589                       as_bad (_("duplicated `%s'"), saved);
8590                       return NULL;
8591                     }
8592
8593                   i.mask->zeroing = 1;
8594
8595                   /* Only "{%k}" is allowed here.  No need to check mask
8596                      register explicitly.  */
8597                   if (i.mask->operand != this_operand)
8598                     {
8599                       as_bad (_("invalid zeroing-masking `%s'"),
8600                               saved);
8601                       return NULL;
8602                     }
8603                 }
8604
8605               op_string++;
8606             }
8607           else
8608             goto unknown_vec_op;
8609
8610           if (*op_string != '}')
8611             {
8612               as_bad (_("missing `}' in `%s'"), saved);
8613               return NULL;
8614             }
8615           op_string++;
8616
8617           /* Strip whitespace since the addition of pseudo prefixes
8618              changed how the scrubber treats '{'.  */
8619           if (is_space_char (*op_string))
8620             ++op_string;
8621
8622           continue;
8623         }
8624     unknown_vec_op:
8625       /* We don't know this one.  */
8626       as_bad (_("unknown vector operation: `%s'"), saved);
8627       return NULL;
8628     }
8629
8630   if (i.mask && i.mask->zeroing && !i.mask->mask)
8631     {
8632       as_bad (_("zeroing-masking only allowed with write mask"));
8633       return NULL;
8634     }
8635
8636   return op_string;
8637 }
8638
8639 static int
8640 i386_immediate (char *imm_start)
8641 {
8642   char *save_input_line_pointer;
8643   char *gotfree_input_line;
8644   segT exp_seg = 0;
8645   expressionS *exp;
8646   i386_operand_type types;
8647
8648   operand_type_set (&types, ~0);
8649
8650   if (i.imm_operands == MAX_IMMEDIATE_OPERANDS)
8651     {
8652       as_bad (_("at most %d immediate operands are allowed"),
8653               MAX_IMMEDIATE_OPERANDS);
8654       return 0;
8655     }
8656
8657   exp = &im_expressions[i.imm_operands++];
8658   i.op[this_operand].imms = exp;
8659
8660   if (is_space_char (*imm_start))
8661     ++imm_start;
8662
8663   save_input_line_pointer = input_line_pointer;
8664   input_line_pointer = imm_start;
8665
8666   gotfree_input_line = lex_got (&i.reloc[this_operand], NULL, &types);
8667   if (gotfree_input_line)
8668     input_line_pointer = gotfree_input_line;
8669
8670   exp_seg = expression (exp);
8671
8672   SKIP_WHITESPACE ();
8673
8674   /* Handle vector operations.  */
8675   if (*input_line_pointer == '{')
8676     {
8677       input_line_pointer = check_VecOperations (input_line_pointer,
8678                                                 NULL);
8679       if (input_line_pointer == NULL)
8680         return 0;
8681     }
8682
8683   if (*input_line_pointer)
8684     as_bad (_("junk `%s' after expression"), input_line_pointer);
8685
8686   input_line_pointer = save_input_line_pointer;
8687   if (gotfree_input_line)
8688     {
8689       free (gotfree_input_line);
8690
8691       if (exp->X_op == O_constant || exp->X_op == O_register)
8692         exp->X_op = O_illegal;
8693     }
8694
8695   return i386_finalize_immediate (exp_seg, exp, types, imm_start);
8696 }
8697
8698 static int
8699 i386_finalize_immediate (segT exp_seg ATTRIBUTE_UNUSED, expressionS *exp,
8700                          i386_operand_type types, const char *imm_start)
8701 {
8702   if (exp->X_op == O_absent || exp->X_op == O_illegal || exp->X_op == O_big)
8703     {
8704       if (imm_start)
8705         as_bad (_("missing or invalid immediate expression `%s'"),
8706                 imm_start);
8707       return 0;
8708     }
8709   else if (exp->X_op == O_constant)
8710     {
8711       /* Size it properly later.  */
8712       i.types[this_operand].bitfield.imm64 = 1;
8713       /* If not 64bit, sign extend val.  */
8714       if (flag_code != CODE_64BIT
8715           && (exp->X_add_number & ~(((addressT) 2 << 31) - 1)) == 0)
8716         exp->X_add_number
8717           = (exp->X_add_number ^ ((addressT) 1 << 31)) - ((addressT) 1 << 31);
8718     }
8719 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
8720   else if (OUTPUT_FLAVOR == bfd_target_aout_flavour
8721            && exp_seg != absolute_section
8722            && exp_seg != text_section
8723            && exp_seg != data_section
8724            && exp_seg != bss_section
8725            && exp_seg != undefined_section
8726            && !bfd_is_com_section (exp_seg))
8727     {
8728       as_bad (_("unimplemented segment %s in operand"), exp_seg->name);
8729       return 0;
8730     }
8731 #endif
8732   else if (!intel_syntax && exp_seg == reg_section)
8733     {
8734       if (imm_start)
8735         as_bad (_("illegal immediate register operand %s"), imm_start);
8736       return 0;
8737     }
8738   else
8739     {
8740       /* This is an address.  The size of the address will be
8741          determined later, depending on destination register,
8742          suffix, or the default for the section.  */
8743       i.types[this_operand].bitfield.imm8 = 1;
8744       i.types[this_operand].bitfield.imm16 = 1;
8745       i.types[this_operand].bitfield.imm32 = 1;
8746       i.types[this_operand].bitfield.imm32s = 1;
8747       i.types[this_operand].bitfield.imm64 = 1;
8748       i.types[this_operand] = operand_type_and (i.types[this_operand],
8749                                                 types);
8750     }
8751
8752   return 1;
8753 }
8754
8755 static char *
8756 i386_scale (char *scale)
8757 {
8758   offsetT val;
8759   char *save = input_line_pointer;
8760
8761   input_line_pointer = scale;
8762   val = get_absolute_expression ();
8763
8764   switch (val)
8765     {
8766     case 1:
8767       i.log2_scale_factor = 0;
8768       break;
8769     case 2:
8770       i.log2_scale_factor = 1;
8771       break;
8772     case 4:
8773       i.log2_scale_factor = 2;
8774       break;
8775     case 8:
8776       i.log2_scale_factor = 3;
8777       break;
8778     default:
8779       {
8780         char sep = *input_line_pointer;
8781
8782         *input_line_pointer = '\0';
8783         as_bad (_("expecting scale factor of 1, 2, 4, or 8: got `%s'"),
8784                 scale);
8785         *input_line_pointer = sep;
8786         input_line_pointer = save;
8787         return NULL;
8788       }
8789     }
8790   if (i.log2_scale_factor != 0 && i.index_reg == 0)
8791     {
8792       as_warn (_("scale factor of %d without an index register"),
8793                1 << i.log2_scale_factor);
8794       i.log2_scale_factor = 0;
8795     }
8796   scale = input_line_pointer;
8797   input_line_pointer = save;
8798   return scale;
8799 }
8800
8801 static int
8802 i386_displacement (char *disp_start, char *disp_end)
8803 {
8804   expressionS *exp;
8805   segT exp_seg = 0;
8806   char *save_input_line_pointer;
8807   char *gotfree_input_line;
8808   int override;
8809   i386_operand_type bigdisp, types = anydisp;
8810   int ret;
8811
8812   if (i.disp_operands == MAX_MEMORY_OPERANDS)
8813     {
8814       as_bad (_("at most %d displacement operands are allowed"),
8815               MAX_MEMORY_OPERANDS);
8816       return 0;
8817     }
8818
8819   operand_type_set (&bigdisp, 0);
8820   if ((i.types[this_operand].bitfield.jumpabsolute)
8821       || (!current_templates->start->opcode_modifier.jump
8822           && !current_templates->start->opcode_modifier.jumpdword))
8823     {
8824       bigdisp.bitfield.disp32 = 1;
8825       override = (i.prefix[ADDR_PREFIX] != 0);
8826       if (flag_code == CODE_64BIT)
8827         {
8828           if (!override)
8829             {
8830               bigdisp.bitfield.disp32s = 1;
8831               bigdisp.bitfield.disp64 = 1;
8832             }
8833         }
8834       else if ((flag_code == CODE_16BIT) ^ override)
8835         {
8836           bigdisp.bitfield.disp32 = 0;
8837           bigdisp.bitfield.disp16 = 1;
8838         }
8839     }
8840   else
8841     {
8842       /* For PC-relative branches, the width of the displacement
8843          is dependent upon data size, not address size.  */
8844       override = (i.prefix[DATA_PREFIX] != 0);
8845       if (flag_code == CODE_64BIT)
8846         {
8847           if (override || i.suffix == WORD_MNEM_SUFFIX)
8848             bigdisp.bitfield.disp16 = 1;
8849           else
8850             {
8851               bigdisp.bitfield.disp32 = 1;
8852               bigdisp.bitfield.disp32s = 1;
8853             }
8854         }
8855       else
8856         {
8857           if (!override)
8858             override = (i.suffix == (flag_code != CODE_16BIT
8859                                      ? WORD_MNEM_SUFFIX
8860                                      : LONG_MNEM_SUFFIX));
8861           bigdisp.bitfield.disp32 = 1;
8862           if ((flag_code == CODE_16BIT) ^ override)
8863             {
8864               bigdisp.bitfield.disp32 = 0;
8865               bigdisp.bitfield.disp16 = 1;
8866             }
8867         }
8868     }
8869   i.types[this_operand] = operand_type_or (i.types[this_operand],
8870                                            bigdisp);
8871
8872   exp = &disp_expressions[i.disp_operands];
8873   i.op[this_operand].disps = exp;
8874   i.disp_operands++;
8875   save_input_line_pointer = input_line_pointer;
8876   input_line_pointer = disp_start;
8877   END_STRING_AND_SAVE (disp_end);
8878
8879 #ifndef GCC_ASM_O_HACK
8880 #define GCC_ASM_O_HACK 0
8881 #endif
8882 #if GCC_ASM_O_HACK
8883   END_STRING_AND_SAVE (disp_end + 1);
8884   if (i.types[this_operand].bitfield.baseIndex
8885       && displacement_string_end[-1] == '+')
8886     {
8887       /* This hack is to avoid a warning when using the "o"
8888          constraint within gcc asm statements.
8889          For instance:
8890
8891          #define _set_tssldt_desc(n,addr,limit,type) \
8892          __asm__ __volatile__ ( \
8893          "movw %w2,%0\n\t" \
8894          "movw %w1,2+%0\n\t" \
8895          "rorl $16,%1\n\t" \
8896          "movb %b1,4+%0\n\t" \
8897          "movb %4,5+%0\n\t" \
8898          "movb $0,6+%0\n\t" \
8899          "movb %h1,7+%0\n\t" \
8900          "rorl $16,%1" \
8901          : "=o"(*(n)) : "q" (addr), "ri"(limit), "i"(type))
8902
8903          This works great except that the output assembler ends
8904          up looking a bit weird if it turns out that there is
8905          no offset.  You end up producing code that looks like:
8906
8907          #APP
8908          movw $235,(%eax)
8909          movw %dx,2+(%eax)
8910          rorl $16,%edx
8911          movb %dl,4+(%eax)
8912          movb $137,5+(%eax)
8913          movb $0,6+(%eax)
8914          movb %dh,7+(%eax)
8915          rorl $16,%edx
8916          #NO_APP
8917
8918          So here we provide the missing zero.  */
8919
8920       *displacement_string_end = '0';
8921     }
8922 #endif
8923   gotfree_input_line = lex_got (&i.reloc[this_operand], NULL, &types);
8924   if (gotfree_input_line)
8925     input_line_pointer = gotfree_input_line;
8926
8927   exp_seg = expression (exp);
8928
8929   SKIP_WHITESPACE ();
8930   if (*input_line_pointer)
8931     as_bad (_("junk `%s' after expression"), input_line_pointer);
8932 #if GCC_ASM_O_HACK
8933   RESTORE_END_STRING (disp_end + 1);
8934 #endif
8935   input_line_pointer = save_input_line_pointer;
8936   if (gotfree_input_line)
8937     {
8938       free (gotfree_input_line);
8939
8940       if (exp->X_op == O_constant || exp->X_op == O_register)
8941         exp->X_op = O_illegal;
8942     }
8943
8944   ret = i386_finalize_displacement (exp_seg, exp, types, disp_start);
8945
8946   RESTORE_END_STRING (disp_end);
8947
8948   return ret;
8949 }
8950
8951 static int
8952 i386_finalize_displacement (segT exp_seg ATTRIBUTE_UNUSED, expressionS *exp,
8953                             i386_operand_type types, const char *disp_start)
8954 {
8955   i386_operand_type bigdisp;
8956   int ret = 1;
8957
8958   /* We do this to make sure that the section symbol is in
8959      the symbol table.  We will ultimately change the relocation
8960      to be relative to the beginning of the section.  */
8961   if (i.reloc[this_operand] == BFD_RELOC_386_GOTOFF
8962       || i.reloc[this_operand] == BFD_RELOC_X86_64_GOTPCREL
8963       || i.reloc[this_operand] == BFD_RELOC_X86_64_GOTOFF64)
8964     {
8965       if (exp->X_op != O_symbol)
8966         goto inv_disp;
8967
8968       if (S_IS_LOCAL (exp->X_add_symbol)
8969           && S_GET_SEGMENT (exp->X_add_symbol) != undefined_section
8970           && S_GET_SEGMENT (exp->X_add_symbol) != expr_section)
8971         section_symbol (S_GET_SEGMENT (exp->X_add_symbol));
8972       exp->X_op = O_subtract;
8973       exp->X_op_symbol = GOT_symbol;
8974       if (i.reloc[this_operand] == BFD_RELOC_X86_64_GOTPCREL)
8975         i.reloc[this_operand] = BFD_RELOC_32_PCREL;
8976       else if (i.reloc[this_operand] == BFD_RELOC_X86_64_GOTOFF64)
8977         i.reloc[this_operand] = BFD_RELOC_64;
8978       else
8979         i.reloc[this_operand] = BFD_RELOC_32;
8980     }
8981
8982   else if (exp->X_op == O_absent
8983            || exp->X_op == O_illegal
8984            || exp->X_op == O_big)
8985     {
8986     inv_disp:
8987       as_bad (_("missing or invalid displacement expression `%s'"),
8988               disp_start);
8989       ret = 0;
8990     }
8991
8992   else if (flag_code == CODE_64BIT
8993            && !i.prefix[ADDR_PREFIX]
8994            && exp->X_op == O_constant)
8995     {
8996       /* Since displacement is signed extended to 64bit, don't allow
8997          disp32 and turn off disp32s if they are out of range.  */
8998       i.types[this_operand].bitfield.disp32 = 0;
8999       if (!fits_in_signed_long (exp->X_add_number))
9000         {
9001           i.types[this_operand].bitfield.disp32s = 0;
9002           if (i.types[this_operand].bitfield.baseindex)
9003             {
9004               as_bad (_("0x%lx out range of signed 32bit displacement"),
9005                       (long) exp->X_add_number);
9006               ret = 0;
9007             }
9008         }
9009     }
9010
9011 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
9012   else if (exp->X_op != O_constant
9013            && OUTPUT_FLAVOR == bfd_target_aout_flavour
9014            && exp_seg != absolute_section
9015            && exp_seg != text_section
9016            && exp_seg != data_section
9017            && exp_seg != bss_section
9018            && exp_seg != undefined_section
9019            && !bfd_is_com_section (exp_seg))
9020     {
9021       as_bad (_("unimplemented segment %s in operand"), exp_seg->name);
9022       ret = 0;
9023     }
9024 #endif
9025
9026   /* Check if this is a displacement only operand.  */
9027   bigdisp = i.types[this_operand];
9028   bigdisp.bitfield.disp8 = 0;
9029   bigdisp.bitfield.disp16 = 0;
9030   bigdisp.bitfield.disp32 = 0;
9031   bigdisp.bitfield.disp32s = 0;
9032   bigdisp.bitfield.disp64 = 0;
9033   if (operand_type_all_zero (&bigdisp))
9034     i.types[this_operand] = operand_type_and (i.types[this_operand],
9035                                               types);
9036
9037   return ret;
9038 }
9039
9040 /* Return the active addressing mode, taking address override and
9041    registers forming the address into consideration.  Update the
9042    address override prefix if necessary.  */
9043
9044 static enum flag_code
9045 i386_addressing_mode (void)
9046 {
9047   enum flag_code addr_mode;
9048
9049   if (i.prefix[ADDR_PREFIX])
9050     addr_mode = flag_code == CODE_32BIT ? CODE_16BIT : CODE_32BIT;
9051   else
9052     {
9053       addr_mode = flag_code;
9054
9055 #if INFER_ADDR_PREFIX
9056       if (i.mem_operands == 0)
9057         {
9058           /* Infer address prefix from the first memory operand.  */
9059           const reg_entry *addr_reg = i.base_reg;
9060
9061           if (addr_reg == NULL)
9062             addr_reg = i.index_reg;
9063
9064           if (addr_reg)
9065             {
9066               if (addr_reg->reg_num == RegEip
9067                   || addr_reg->reg_num == RegEiz
9068                   || addr_reg->reg_type.bitfield.dword)
9069                 addr_mode = CODE_32BIT;
9070               else if (flag_code != CODE_64BIT
9071                        && addr_reg->reg_type.bitfield.word)
9072                 addr_mode = CODE_16BIT;
9073
9074               if (addr_mode != flag_code)
9075                 {
9076                   i.prefix[ADDR_PREFIX] = ADDR_PREFIX_OPCODE;
9077                   i.prefixes += 1;
9078                   /* Change the size of any displacement too.  At most one
9079                      of Disp16 or Disp32 is set.
9080                      FIXME.  There doesn't seem to be any real need for
9081                      separate Disp16 and Disp32 flags.  The same goes for
9082                      Imm16 and Imm32.  Removing them would probably clean
9083                      up the code quite a lot.  */
9084                   if (flag_code != CODE_64BIT
9085                       && (i.types[this_operand].bitfield.disp16
9086                           || i.types[this_operand].bitfield.disp32))
9087                     i.types[this_operand]
9088                       = operand_type_xor (i.types[this_operand], disp16_32);
9089                 }
9090             }
9091         }
9092 #endif
9093     }
9094
9095   return addr_mode;
9096 }
9097
9098 /* Make sure the memory operand we've been dealt is valid.
9099    Return 1 on success, 0 on a failure.  */
9100
9101 static int
9102 i386_index_check (const char *operand_string)
9103 {
9104   const char *kind = "base/index";
9105   enum flag_code addr_mode = i386_addressing_mode ();
9106
9107   if (current_templates->start->opcode_modifier.isstring
9108       && !current_templates->start->opcode_modifier.immext
9109       && (current_templates->end[-1].opcode_modifier.isstring
9110           || i.mem_operands))
9111     {
9112       /* Memory operands of string insns are special in that they only allow
9113          a single register (rDI, rSI, or rBX) as their memory address.  */
9114       const reg_entry *expected_reg;
9115       static const char *di_si[][2] =
9116         {
9117           { "esi", "edi" },
9118           { "si", "di" },
9119           { "rsi", "rdi" }
9120         };
9121       static const char *bx[] = { "ebx", "bx", "rbx" };
9122
9123       kind = "string address";
9124
9125       if (current_templates->start->opcode_modifier.repprefixok)
9126         {
9127           i386_operand_type type = current_templates->end[-1].operand_types[0];
9128
9129           if (!type.bitfield.baseindex
9130               || ((!i.mem_operands != !intel_syntax)
9131                   && current_templates->end[-1].operand_types[1]
9132                      .bitfield.baseindex))
9133             type = current_templates->end[-1].operand_types[1];
9134           expected_reg = hash_find (reg_hash,
9135                                     di_si[addr_mode][type.bitfield.esseg]);
9136
9137         }
9138       else
9139         expected_reg = hash_find (reg_hash, bx[addr_mode]);
9140
9141       if (i.base_reg != expected_reg
9142           || i.index_reg
9143           || operand_type_check (i.types[this_operand], disp))
9144         {
9145           /* The second memory operand must have the same size as
9146              the first one.  */
9147           if (i.mem_operands
9148               && i.base_reg
9149               && !((addr_mode == CODE_64BIT
9150                     && i.base_reg->reg_type.bitfield.qword)
9151                    || (addr_mode == CODE_32BIT
9152                        ? i.base_reg->reg_type.bitfield.dword
9153                        : i.base_reg->reg_type.bitfield.word)))
9154             goto bad_address;
9155
9156           as_warn (_("`%s' is not valid here (expected `%c%s%s%c')"),
9157                    operand_string,
9158                    intel_syntax ? '[' : '(',
9159                    register_prefix,
9160                    expected_reg->reg_name,
9161                    intel_syntax ? ']' : ')');
9162           return 1;
9163         }
9164       else
9165         return 1;
9166
9167 bad_address:
9168       as_bad (_("`%s' is not a valid %s expression"),
9169               operand_string, kind);
9170       return 0;
9171     }
9172   else
9173     {
9174       if (addr_mode != CODE_16BIT)
9175         {
9176           /* 32-bit/64-bit checks.  */
9177           if ((i.base_reg
9178                && (addr_mode == CODE_64BIT
9179                    ? !i.base_reg->reg_type.bitfield.qword
9180                    : !i.base_reg->reg_type.bitfield.dword)
9181                && (i.index_reg
9182                    || (i.base_reg->reg_num
9183                        != (addr_mode == CODE_64BIT ? RegRip : RegEip))))
9184               || (i.index_reg
9185                   && !i.index_reg->reg_type.bitfield.xmmword
9186                   && !i.index_reg->reg_type.bitfield.ymmword
9187                   && !i.index_reg->reg_type.bitfield.zmmword
9188                   && ((addr_mode == CODE_64BIT
9189                        ? !(i.index_reg->reg_type.bitfield.qword
9190                            || i.index_reg->reg_num == RegRiz)
9191                        : !(i.index_reg->reg_type.bitfield.dword
9192                            || i.index_reg->reg_num == RegEiz))
9193                       || !i.index_reg->reg_type.bitfield.baseindex)))
9194             goto bad_address;
9195
9196           /* bndmk, bndldx, and bndstx have special restrictions. */
9197           if (current_templates->start->base_opcode == 0xf30f1b
9198               || (current_templates->start->base_opcode & ~1) == 0x0f1a)
9199             {
9200               /* They cannot use RIP-relative addressing. */
9201               if (i.base_reg && i.base_reg->reg_num == RegRip)
9202                 {
9203                   as_bad (_("`%s' cannot be used here"), operand_string);
9204                   return 0;
9205                 }
9206
9207               /* bndldx and bndstx ignore their scale factor. */
9208               if (current_templates->start->base_opcode != 0xf30f1b
9209                   && i.log2_scale_factor)
9210                 as_warn (_("register scaling is being ignored here"));
9211             }
9212         }
9213       else
9214         {
9215           /* 16-bit checks.  */
9216           if ((i.base_reg
9217                && (!i.base_reg->reg_type.bitfield.word
9218                    || !i.base_reg->reg_type.bitfield.baseindex))
9219               || (i.index_reg
9220                   && (!i.index_reg->reg_type.bitfield.word
9221                       || !i.index_reg->reg_type.bitfield.baseindex
9222                       || !(i.base_reg
9223                            && i.base_reg->reg_num < 6
9224                            && i.index_reg->reg_num >= 6
9225                            && i.log2_scale_factor == 0))))
9226             goto bad_address;
9227         }
9228     }
9229   return 1;
9230 }
9231
9232 /* Handle vector immediates.  */
9233
9234 static int
9235 RC_SAE_immediate (const char *imm_start)
9236 {
9237   unsigned int match_found, j;
9238   const char *pstr = imm_start;
9239   expressionS *exp;
9240
9241   if (*pstr != '{')
9242     return 0;
9243
9244   pstr++;
9245   match_found = 0;
9246   for (j = 0; j < ARRAY_SIZE (RC_NamesTable); j++)
9247     {
9248       if (!strncmp (pstr, RC_NamesTable[j].name, RC_NamesTable[j].len))
9249         {
9250           if (!i.rounding)
9251             {
9252               rc_op.type = RC_NamesTable[j].type;
9253               rc_op.operand = this_operand;
9254               i.rounding = &rc_op;
9255             }
9256           else
9257             {
9258               as_bad (_("duplicated `%s'"), imm_start);
9259               return 0;
9260             }
9261           pstr += RC_NamesTable[j].len;
9262           match_found = 1;
9263           break;
9264         }
9265     }
9266   if (!match_found)
9267     return 0;
9268
9269   if (*pstr++ != '}')
9270     {
9271       as_bad (_("Missing '}': '%s'"), imm_start);
9272       return 0;
9273     }
9274   /* RC/SAE immediate string should contain nothing more.  */;
9275   if (*pstr != 0)
9276     {
9277       as_bad (_("Junk after '}': '%s'"), imm_start);
9278       return 0;
9279     }
9280
9281   exp = &im_expressions[i.imm_operands++];
9282   i.op[this_operand].imms = exp;
9283
9284   exp->X_op = O_constant;
9285   exp->X_add_number = 0;
9286   exp->X_add_symbol = (symbolS *) 0;
9287   exp->X_op_symbol = (symbolS *) 0;
9288
9289   i.types[this_operand].bitfield.imm8 = 1;
9290   return 1;
9291 }
9292
9293 /* Only string instructions can have a second memory operand, so
9294    reduce current_templates to just those if it contains any.  */
9295 static int
9296 maybe_adjust_templates (void)
9297 {
9298   const insn_template *t;
9299
9300   gas_assert (i.mem_operands == 1);
9301
9302   for (t = current_templates->start; t < current_templates->end; ++t)
9303     if (t->opcode_modifier.isstring)
9304       break;
9305
9306   if (t < current_templates->end)
9307     {
9308       static templates aux_templates;
9309       bfd_boolean recheck;
9310
9311       aux_templates.start = t;
9312       for (; t < current_templates->end; ++t)
9313         if (!t->opcode_modifier.isstring)
9314           break;
9315       aux_templates.end = t;
9316
9317       /* Determine whether to re-check the first memory operand.  */
9318       recheck = (aux_templates.start != current_templates->start
9319                  || t != current_templates->end);
9320
9321       current_templates = &aux_templates;
9322
9323       if (recheck)
9324         {
9325           i.mem_operands = 0;
9326           if (i.memop1_string != NULL
9327               && i386_index_check (i.memop1_string) == 0)
9328             return 0;
9329           i.mem_operands = 1;
9330         }
9331     }
9332
9333   return 1;
9334 }
9335
9336 /* Parse OPERAND_STRING into the i386_insn structure I.  Returns zero
9337    on error.  */
9338
9339 static int
9340 i386_att_operand (char *operand_string)
9341 {
9342   const reg_entry *r;
9343   char *end_op;
9344   char *op_string = operand_string;
9345
9346   if (is_space_char (*op_string))
9347     ++op_string;
9348
9349   /* We check for an absolute prefix (differentiating,
9350      for example, 'jmp pc_relative_label' from 'jmp *absolute_label'.  */
9351   if (*op_string == ABSOLUTE_PREFIX)
9352     {
9353       ++op_string;
9354       if (is_space_char (*op_string))
9355         ++op_string;
9356       i.types[this_operand].bitfield.jumpabsolute = 1;
9357     }
9358
9359   /* Check if operand is a register.  */
9360   if ((r = parse_register (op_string, &end_op)) != NULL)
9361     {
9362       i386_operand_type temp;
9363
9364       /* Check for a segment override by searching for ':' after a
9365          segment register.  */
9366       op_string = end_op;
9367       if (is_space_char (*op_string))
9368         ++op_string;
9369       if (*op_string == ':'
9370           && (r->reg_type.bitfield.sreg2
9371               || r->reg_type.bitfield.sreg3))
9372         {
9373           switch (r->reg_num)
9374             {
9375             case 0:
9376               i.seg[i.mem_operands] = &es;
9377               break;
9378             case 1:
9379               i.seg[i.mem_operands] = &cs;
9380               break;
9381             case 2:
9382               i.seg[i.mem_operands] = &ss;
9383               break;
9384             case 3:
9385               i.seg[i.mem_operands] = &ds;
9386               break;
9387             case 4:
9388               i.seg[i.mem_operands] = &fs;
9389               break;
9390             case 5:
9391               i.seg[i.mem_operands] = &gs;
9392               break;
9393             }
9394
9395           /* Skip the ':' and whitespace.  */
9396           ++op_string;
9397           if (is_space_char (*op_string))
9398             ++op_string;
9399
9400           if (!is_digit_char (*op_string)
9401               && !is_identifier_char (*op_string)
9402               && *op_string != '('
9403               && *op_string != ABSOLUTE_PREFIX)
9404             {
9405               as_bad (_("bad memory operand `%s'"), op_string);
9406               return 0;
9407             }
9408           /* Handle case of %es:*foo.  */
9409           if (*op_string == ABSOLUTE_PREFIX)
9410             {
9411               ++op_string;
9412               if (is_space_char (*op_string))
9413                 ++op_string;
9414               i.types[this_operand].bitfield.jumpabsolute = 1;
9415             }
9416           goto do_memory_reference;
9417         }
9418
9419       /* Handle vector operations.  */
9420       if (*op_string == '{')
9421         {
9422           op_string = check_VecOperations (op_string, NULL);
9423           if (op_string == NULL)
9424             return 0;
9425         }
9426
9427       if (*op_string)
9428         {
9429           as_bad (_("junk `%s' after register"), op_string);
9430           return 0;
9431         }
9432       temp = r->reg_type;
9433       temp.bitfield.baseindex = 0;
9434       i.types[this_operand] = operand_type_or (i.types[this_operand],
9435                                                temp);
9436       i.types[this_operand].bitfield.unspecified = 0;
9437       i.op[this_operand].regs = r;
9438       i.reg_operands++;
9439     }
9440   else if (*op_string == REGISTER_PREFIX)
9441     {
9442       as_bad (_("bad register name `%s'"), op_string);
9443       return 0;
9444     }
9445   else if (*op_string == IMMEDIATE_PREFIX)
9446     {
9447       ++op_string;
9448       if (i.types[this_operand].bitfield.jumpabsolute)
9449         {
9450           as_bad (_("immediate operand illegal with absolute jump"));
9451           return 0;
9452         }
9453       if (!i386_immediate (op_string))
9454         return 0;
9455     }
9456   else if (RC_SAE_immediate (operand_string))
9457     {
9458       /* If it is a RC or SAE immediate, do nothing.  */
9459       ;
9460     }
9461   else if (is_digit_char (*op_string)
9462            || is_identifier_char (*op_string)
9463            || *op_string == '"'
9464            || *op_string == '(')
9465     {
9466       /* This is a memory reference of some sort.  */
9467       char *base_string;
9468
9469       /* Start and end of displacement string expression (if found).  */
9470       char *displacement_string_start;
9471       char *displacement_string_end;
9472       char *vop_start;
9473
9474     do_memory_reference:
9475       if (i.mem_operands == 1 && !maybe_adjust_templates ())
9476         return 0;
9477       if ((i.mem_operands == 1
9478            && !current_templates->start->opcode_modifier.isstring)
9479           || i.mem_operands == 2)
9480         {
9481           as_bad (_("too many memory references for `%s'"),
9482                   current_templates->start->name);
9483           return 0;
9484         }
9485
9486       /* Check for base index form.  We detect the base index form by
9487          looking for an ')' at the end of the operand, searching
9488          for the '(' matching it, and finding a REGISTER_PREFIX or ','
9489          after the '('.  */
9490       base_string = op_string + strlen (op_string);
9491
9492       /* Handle vector operations.  */
9493       vop_start = strchr (op_string, '{');
9494       if (vop_start && vop_start < base_string)
9495         {
9496           if (check_VecOperations (vop_start, base_string) == NULL)
9497             return 0;
9498           base_string = vop_start;
9499         }
9500
9501       --base_string;
9502       if (is_space_char (*base_string))
9503         --base_string;
9504
9505       /* If we only have a displacement, set-up for it to be parsed later.  */
9506       displacement_string_start = op_string;
9507       displacement_string_end = base_string + 1;
9508
9509       if (*base_string == ')')
9510         {
9511           char *temp_string;
9512           unsigned int parens_balanced = 1;
9513           /* We've already checked that the number of left & right ()'s are
9514              equal, so this loop will not be infinite.  */
9515           do
9516             {
9517               base_string--;
9518               if (*base_string == ')')
9519                 parens_balanced++;
9520               if (*base_string == '(')
9521                 parens_balanced--;
9522             }
9523           while (parens_balanced);
9524
9525           temp_string = base_string;
9526
9527           /* Skip past '(' and whitespace.  */
9528           ++base_string;
9529           if (is_space_char (*base_string))
9530             ++base_string;
9531
9532           if (*base_string == ','
9533               || ((i.base_reg = parse_register (base_string, &end_op))
9534                   != NULL))
9535             {
9536               displacement_string_end = temp_string;
9537
9538               i.types[this_operand].bitfield.baseindex = 1;
9539
9540               if (i.base_reg)
9541                 {
9542                   base_string = end_op;
9543                   if (is_space_char (*base_string))
9544                     ++base_string;
9545                 }
9546
9547               /* There may be an index reg or scale factor here.  */
9548               if (*base_string == ',')
9549                 {
9550                   ++base_string;
9551                   if (is_space_char (*base_string))
9552                     ++base_string;
9553
9554                   if ((i.index_reg = parse_register (base_string, &end_op))
9555                       != NULL)
9556                     {
9557                       base_string = end_op;
9558                       if (is_space_char (*base_string))
9559                         ++base_string;
9560                       if (*base_string == ',')
9561                         {
9562                           ++base_string;
9563                           if (is_space_char (*base_string))
9564                             ++base_string;
9565                         }
9566                       else if (*base_string != ')')
9567                         {
9568                           as_bad (_("expecting `,' or `)' "
9569                                     "after index register in `%s'"),
9570                                   operand_string);
9571                           return 0;
9572                         }
9573                     }
9574                   else if (*base_string == REGISTER_PREFIX)
9575                     {
9576                       end_op = strchr (base_string, ',');
9577                       if (end_op)
9578                         *end_op = '\0';
9579                       as_bad (_("bad register name `%s'"), base_string);
9580                       return 0;
9581                     }
9582
9583                   /* Check for scale factor.  */
9584                   if (*base_string != ')')
9585                     {
9586                       char *end_scale = i386_scale (base_string);
9587
9588                       if (!end_scale)
9589                         return 0;
9590
9591                       base_string = end_scale;
9592                       if (is_space_char (*base_string))
9593                         ++base_string;
9594                       if (*base_string != ')')
9595                         {
9596                           as_bad (_("expecting `)' "
9597                                     "after scale factor in `%s'"),
9598                                   operand_string);
9599                           return 0;
9600                         }
9601                     }
9602                   else if (!i.index_reg)
9603                     {
9604                       as_bad (_("expecting index register or scale factor "
9605                                 "after `,'; got '%c'"),
9606                               *base_string);
9607                       return 0;
9608                     }
9609                 }
9610               else if (*base_string != ')')
9611                 {
9612                   as_bad (_("expecting `,' or `)' "
9613                             "after base register in `%s'"),
9614                           operand_string);
9615                   return 0;
9616                 }
9617             }
9618           else if (*base_string == REGISTER_PREFIX)
9619             {
9620               end_op = strchr (base_string, ',');
9621               if (end_op)
9622                 *end_op = '\0';
9623               as_bad (_("bad register name `%s'"), base_string);
9624               return 0;
9625             }
9626         }
9627
9628       /* If there's an expression beginning the operand, parse it,
9629          assuming displacement_string_start and
9630          displacement_string_end are meaningful.  */
9631       if (displacement_string_start != displacement_string_end)
9632         {
9633           if (!i386_displacement (displacement_string_start,
9634                                   displacement_string_end))
9635             return 0;
9636         }
9637
9638       /* Special case for (%dx) while doing input/output op.  */
9639       if (i.base_reg
9640           && operand_type_equal (&i.base_reg->reg_type,
9641                                  &reg16_inoutportreg)
9642           && i.index_reg == 0
9643           && i.log2_scale_factor == 0
9644           && i.seg[i.mem_operands] == 0
9645           && !operand_type_check (i.types[this_operand], disp))
9646         {
9647           i.types[this_operand] = inoutportreg;
9648           return 1;
9649         }
9650
9651       if (i386_index_check (operand_string) == 0)
9652         return 0;
9653       i.types[this_operand].bitfield.mem = 1;
9654       if (i.mem_operands == 0)
9655         i.memop1_string = xstrdup (operand_string);
9656       i.mem_operands++;
9657     }
9658   else
9659     {
9660       /* It's not a memory operand; argh!  */
9661       as_bad (_("invalid char %s beginning operand %d `%s'"),
9662               output_invalid (*op_string),
9663               this_operand + 1,
9664               op_string);
9665       return 0;
9666     }
9667   return 1;                     /* Normal return.  */
9668 }
9669 \f
9670 /* Calculate the maximum variable size (i.e., excluding fr_fix)
9671    that an rs_machine_dependent frag may reach.  */
9672
9673 unsigned int
9674 i386_frag_max_var (fragS *frag)
9675 {
9676   /* The only relaxable frags are for jumps.
9677      Unconditional jumps can grow by 4 bytes and others by 5 bytes.  */
9678   gas_assert (frag->fr_type == rs_machine_dependent);
9679   return TYPE_FROM_RELAX_STATE (frag->fr_subtype) == UNCOND_JUMP ? 4 : 5;
9680 }
9681
9682 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
9683 static int
9684 elf_symbol_resolved_in_segment_p (symbolS *fr_symbol, offsetT fr_var)
9685 {
9686   /* STT_GNU_IFUNC symbol must go through PLT.  */
9687   if ((symbol_get_bfdsym (fr_symbol)->flags
9688        & BSF_GNU_INDIRECT_FUNCTION) != 0)
9689     return 0;
9690
9691   if (!S_IS_EXTERNAL (fr_symbol))
9692     /* Symbol may be weak or local.  */
9693     return !S_IS_WEAK (fr_symbol);
9694
9695   /* Global symbols with non-default visibility can't be preempted. */
9696   if (ELF_ST_VISIBILITY (S_GET_OTHER (fr_symbol)) != STV_DEFAULT)
9697     return 1;
9698
9699   if (fr_var != NO_RELOC)
9700     switch ((enum bfd_reloc_code_real) fr_var)
9701       {
9702       case BFD_RELOC_386_PLT32:
9703       case BFD_RELOC_X86_64_PLT32:
9704         /* Symbol with PLT relocation may be preempted. */
9705         return 0;
9706       default:
9707         abort ();
9708       }
9709
9710   /* Global symbols with default visibility in a shared library may be
9711      preempted by another definition.  */
9712   return !shared;
9713 }
9714 #endif
9715
9716 /* md_estimate_size_before_relax()
9717
9718    Called just before relax() for rs_machine_dependent frags.  The x86
9719    assembler uses these frags to handle variable size jump
9720    instructions.
9721
9722    Any symbol that is now undefined will not become defined.
9723    Return the correct fr_subtype in the frag.
9724    Return the initial "guess for variable size of frag" to caller.
9725    The guess is actually the growth beyond the fixed part.  Whatever
9726    we do to grow the fixed or variable part contributes to our
9727    returned value.  */
9728
9729 int
9730 md_estimate_size_before_relax (fragS *fragP, segT segment)
9731 {
9732   /* We've already got fragP->fr_subtype right;  all we have to do is
9733      check for un-relaxable symbols.  On an ELF system, we can't relax
9734      an externally visible symbol, because it may be overridden by a
9735      shared library.  */
9736   if (S_GET_SEGMENT (fragP->fr_symbol) != segment
9737 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
9738       || (IS_ELF
9739           && !elf_symbol_resolved_in_segment_p (fragP->fr_symbol,
9740                                                 fragP->fr_var))
9741 #endif
9742 #if defined (OBJ_COFF) && defined (TE_PE)
9743       || (OUTPUT_FLAVOR == bfd_target_coff_flavour
9744           && S_IS_WEAK (fragP->fr_symbol))
9745 #endif
9746       )
9747     {
9748       /* Symbol is undefined in this segment, or we need to keep a
9749          reloc so that weak symbols can be overridden.  */
9750       int size = (fragP->fr_subtype & CODE16) ? 2 : 4;
9751       enum bfd_reloc_code_real reloc_type;
9752       unsigned char *opcode;
9753       int old_fr_fix;
9754
9755       if (fragP->fr_var != NO_RELOC)
9756         reloc_type = (enum bfd_reloc_code_real) fragP->fr_var;
9757       else if (size == 2)
9758         reloc_type = BFD_RELOC_16_PCREL;
9759 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
9760       else if (need_plt32_p (fragP->fr_symbol))
9761         reloc_type = BFD_RELOC_X86_64_PLT32;
9762 #endif
9763       else
9764         reloc_type = BFD_RELOC_32_PCREL;
9765
9766       old_fr_fix = fragP->fr_fix;
9767       opcode = (unsigned char *) fragP->fr_opcode;
9768
9769       switch (TYPE_FROM_RELAX_STATE (fragP->fr_subtype))
9770         {
9771         case UNCOND_JUMP:
9772           /* Make jmp (0xeb) a (d)word displacement jump.  */
9773           opcode[0] = 0xe9;
9774           fragP->fr_fix += size;
9775           fix_new (fragP, old_fr_fix, size,
9776                    fragP->fr_symbol,
9777                    fragP->fr_offset, 1,
9778                    reloc_type);
9779           break;
9780
9781         case COND_JUMP86:
9782           if (size == 2
9783               && (!no_cond_jump_promotion || fragP->fr_var != NO_RELOC))
9784             {
9785               /* Negate the condition, and branch past an
9786                  unconditional jump.  */
9787               opcode[0] ^= 1;
9788               opcode[1] = 3;
9789               /* Insert an unconditional jump.  */
9790               opcode[2] = 0xe9;
9791               /* We added two extra opcode bytes, and have a two byte
9792                  offset.  */
9793               fragP->fr_fix += 2 + 2;
9794               fix_new (fragP, old_fr_fix + 2, 2,
9795                        fragP->fr_symbol,
9796                        fragP->fr_offset, 1,
9797                        reloc_type);
9798               break;
9799             }
9800           /* Fall through.  */
9801
9802         case COND_JUMP:
9803           if (no_cond_jump_promotion && fragP->fr_var == NO_RELOC)
9804             {
9805               fixS *fixP;
9806
9807               fragP->fr_fix += 1;
9808               fixP = fix_new (fragP, old_fr_fix, 1,
9809                               fragP->fr_symbol,
9810                               fragP->fr_offset, 1,
9811                               BFD_RELOC_8_PCREL);
9812               fixP->fx_signed = 1;
9813               break;
9814             }
9815
9816           /* This changes the byte-displacement jump 0x7N
9817              to the (d)word-displacement jump 0x0f,0x8N.  */
9818           opcode[1] = opcode[0] + 0x10;
9819           opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
9820           /* We've added an opcode byte.  */
9821           fragP->fr_fix += 1 + size;
9822           fix_new (fragP, old_fr_fix + 1, size,
9823                    fragP->fr_symbol,
9824                    fragP->fr_offset, 1,
9825                    reloc_type);
9826           break;
9827
9828         default:
9829           BAD_CASE (fragP->fr_subtype);
9830           break;
9831         }
9832       frag_wane (fragP);
9833       return fragP->fr_fix - old_fr_fix;
9834     }
9835
9836   /* Guess size depending on current relax state.  Initially the relax
9837      state will correspond to a short jump and we return 1, because
9838      the variable part of the frag (the branch offset) is one byte
9839      long.  However, we can relax a section more than once and in that
9840      case we must either set fr_subtype back to the unrelaxed state,
9841      or return the value for the appropriate branch.  */
9842   return md_relax_table[fragP->fr_subtype].rlx_length;
9843 }
9844
9845 /* Called after relax() is finished.
9846
9847    In:  Address of frag.
9848         fr_type == rs_machine_dependent.
9849         fr_subtype is what the address relaxed to.
9850
9851    Out: Any fixSs and constants are set up.
9852         Caller will turn frag into a ".space 0".  */
9853
9854 void
9855 md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT sec ATTRIBUTE_UNUSED,
9856                  fragS *fragP)
9857 {
9858   unsigned char *opcode;
9859   unsigned char *where_to_put_displacement = NULL;
9860   offsetT target_address;
9861   offsetT opcode_address;
9862   unsigned int extension = 0;
9863   offsetT displacement_from_opcode_start;
9864
9865   opcode = (unsigned char *) fragP->fr_opcode;
9866
9867   /* Address we want to reach in file space.  */
9868   target_address = S_GET_VALUE (fragP->fr_symbol) + fragP->fr_offset;
9869
9870   /* Address opcode resides at in file space.  */
9871   opcode_address = fragP->fr_address + fragP->fr_fix;
9872
9873   /* Displacement from opcode start to fill into instruction.  */
9874   displacement_from_opcode_start = target_address - opcode_address;
9875
9876   if ((fragP->fr_subtype & BIG) == 0)
9877     {
9878       /* Don't have to change opcode.  */
9879       extension = 1;            /* 1 opcode + 1 displacement  */
9880       where_to_put_displacement = &opcode[1];
9881     }
9882   else
9883     {
9884       if (no_cond_jump_promotion
9885           && TYPE_FROM_RELAX_STATE (fragP->fr_subtype) != UNCOND_JUMP)
9886         as_warn_where (fragP->fr_file, fragP->fr_line,
9887                        _("long jump required"));
9888
9889       switch (fragP->fr_subtype)
9890         {
9891         case ENCODE_RELAX_STATE (UNCOND_JUMP, BIG):
9892           extension = 4;                /* 1 opcode + 4 displacement  */
9893           opcode[0] = 0xe9;
9894           where_to_put_displacement = &opcode[1];
9895           break;
9896
9897         case ENCODE_RELAX_STATE (UNCOND_JUMP, BIG16):
9898           extension = 2;                /* 1 opcode + 2 displacement  */
9899           opcode[0] = 0xe9;
9900           where_to_put_displacement = &opcode[1];
9901           break;
9902
9903         case ENCODE_RELAX_STATE (COND_JUMP, BIG):
9904         case ENCODE_RELAX_STATE (COND_JUMP86, BIG):
9905           extension = 5;                /* 2 opcode + 4 displacement  */
9906           opcode[1] = opcode[0] + 0x10;
9907           opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
9908           where_to_put_displacement = &opcode[2];
9909           break;
9910
9911         case ENCODE_RELAX_STATE (COND_JUMP, BIG16):
9912           extension = 3;                /* 2 opcode + 2 displacement  */
9913           opcode[1] = opcode[0] + 0x10;
9914           opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
9915           where_to_put_displacement = &opcode[2];
9916           break;
9917
9918         case ENCODE_RELAX_STATE (COND_JUMP86, BIG16):
9919           extension = 4;
9920           opcode[0] ^= 1;
9921           opcode[1] = 3;
9922           opcode[2] = 0xe9;
9923           where_to_put_displacement = &opcode[3];
9924           break;
9925
9926         default:
9927           BAD_CASE (fragP->fr_subtype);
9928           break;
9929         }
9930     }
9931
9932   /* If size if less then four we are sure that the operand fits,
9933      but if it's 4, then it could be that the displacement is larger
9934      then -/+ 2GB.  */
9935   if (DISP_SIZE_FROM_RELAX_STATE (fragP->fr_subtype) == 4
9936       && object_64bit
9937       && ((addressT) (displacement_from_opcode_start - extension
9938                       + ((addressT) 1 << 31))
9939           > (((addressT) 2 << 31) - 1)))
9940     {
9941       as_bad_where (fragP->fr_file, fragP->fr_line,
9942                     _("jump target out of range"));
9943       /* Make us emit 0.  */
9944       displacement_from_opcode_start = extension;
9945     }
9946   /* Now put displacement after opcode.  */
9947   md_number_to_chars ((char *) where_to_put_displacement,
9948                       (valueT) (displacement_from_opcode_start - extension),
9949                       DISP_SIZE_FROM_RELAX_STATE (fragP->fr_subtype));
9950   fragP->fr_fix += extension;
9951 }
9952 \f
9953 /* Apply a fixup (fixP) to segment data, once it has been determined
9954    by our caller that we have all the info we need to fix it up.
9955
9956    Parameter valP is the pointer to the value of the bits.
9957
9958    On the 386, immediates, displacements, and data pointers are all in
9959    the same (little-endian) format, so we don't need to care about which
9960    we are handling.  */
9961
9962 void
9963 md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
9964 {
9965   char *p = fixP->fx_where + fixP->fx_frag->fr_literal;
9966   valueT value = *valP;
9967
9968 #if !defined (TE_Mach)
9969   if (fixP->fx_pcrel)
9970     {
9971       switch (fixP->fx_r_type)
9972         {
9973         default:
9974           break;
9975
9976         case BFD_RELOC_64:
9977           fixP->fx_r_type = BFD_RELOC_64_PCREL;
9978           break;
9979         case BFD_RELOC_32:
9980         case BFD_RELOC_X86_64_32S:
9981           fixP->fx_r_type = BFD_RELOC_32_PCREL;
9982           break;
9983         case BFD_RELOC_16:
9984           fixP->fx_r_type = BFD_RELOC_16_PCREL;
9985           break;
9986         case BFD_RELOC_8:
9987           fixP->fx_r_type = BFD_RELOC_8_PCREL;
9988           break;
9989         }
9990     }
9991
9992   if (fixP->fx_addsy != NULL
9993       && (fixP->fx_r_type == BFD_RELOC_32_PCREL
9994           || fixP->fx_r_type == BFD_RELOC_64_PCREL
9995           || fixP->fx_r_type == BFD_RELOC_16_PCREL
9996           || fixP->fx_r_type == BFD_RELOC_8_PCREL)
9997       && !use_rela_relocations)
9998     {
9999       /* This is a hack.  There should be a better way to handle this.
10000          This covers for the fact that bfd_install_relocation will
10001          subtract the current location (for partial_inplace, PC relative
10002          relocations); see more below.  */
10003 #ifndef OBJ_AOUT
10004       if (IS_ELF
10005 #ifdef TE_PE
10006           || OUTPUT_FLAVOR == bfd_target_coff_flavour
10007 #endif
10008           )
10009         value += fixP->fx_where + fixP->fx_frag->fr_address;
10010 #endif
10011 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
10012       if (IS_ELF)
10013         {
10014           segT sym_seg = S_GET_SEGMENT (fixP->fx_addsy);
10015
10016           if ((sym_seg == seg
10017                || (symbol_section_p (fixP->fx_addsy)
10018                    && sym_seg != absolute_section))
10019               && !generic_force_reloc (fixP))
10020             {
10021               /* Yes, we add the values in twice.  This is because
10022                  bfd_install_relocation subtracts them out again.  I think
10023                  bfd_install_relocation is broken, but I don't dare change
10024                  it.  FIXME.  */
10025               value += fixP->fx_where + fixP->fx_frag->fr_address;
10026             }
10027         }
10028 #endif
10029 #if defined (OBJ_COFF) && defined (TE_PE)
10030       /* For some reason, the PE format does not store a
10031          section address offset for a PC relative symbol.  */
10032       if (S_GET_SEGMENT (fixP->fx_addsy) != seg
10033           || S_IS_WEAK (fixP->fx_addsy))
10034         value += md_pcrel_from (fixP);
10035 #endif
10036     }
10037 #if defined (OBJ_COFF) && defined (TE_PE)
10038   if (fixP->fx_addsy != NULL
10039       && S_IS_WEAK (fixP->fx_addsy)
10040       /* PR 16858: Do not modify weak function references.  */
10041       && ! fixP->fx_pcrel)
10042     {
10043 #if !defined (TE_PEP)
10044       /* For x86 PE weak function symbols are neither PC-relative
10045          nor do they set S_IS_FUNCTION.  So the only reliable way
10046          to detect them is to check the flags of their containing
10047          section.  */
10048       if (S_GET_SEGMENT (fixP->fx_addsy) != NULL
10049           && S_GET_SEGMENT (fixP->fx_addsy)->flags & SEC_CODE)
10050         ;
10051       else
10052 #endif
10053       value -= S_GET_VALUE (fixP->fx_addsy);
10054     }
10055 #endif
10056
10057   /* Fix a few things - the dynamic linker expects certain values here,
10058      and we must not disappoint it.  */
10059 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
10060   if (IS_ELF && fixP->fx_addsy)
10061     switch (fixP->fx_r_type)
10062       {
10063       case BFD_RELOC_386_PLT32:
10064       case BFD_RELOC_X86_64_PLT32:
10065         /* Make the jump instruction point to the address of the operand.  At
10066            runtime we merely add the offset to the actual PLT entry.  */
10067         value = -4;
10068         break;
10069
10070       case BFD_RELOC_386_TLS_GD:
10071       case BFD_RELOC_386_TLS_LDM:
10072       case BFD_RELOC_386_TLS_IE_32:
10073       case BFD_RELOC_386_TLS_IE:
10074       case BFD_RELOC_386_TLS_GOTIE:
10075       case BFD_RELOC_386_TLS_GOTDESC:
10076       case BFD_RELOC_X86_64_TLSGD:
10077       case BFD_RELOC_X86_64_TLSLD:
10078       case BFD_RELOC_X86_64_GOTTPOFF:
10079       case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
10080         value = 0; /* Fully resolved at runtime.  No addend.  */
10081         /* Fallthrough */
10082       case BFD_RELOC_386_TLS_LE:
10083       case BFD_RELOC_386_TLS_LDO_32:
10084       case BFD_RELOC_386_TLS_LE_32:
10085       case BFD_RELOC_X86_64_DTPOFF32:
10086       case BFD_RELOC_X86_64_DTPOFF64:
10087       case BFD_RELOC_X86_64_TPOFF32:
10088       case BFD_RELOC_X86_64_TPOFF64:
10089         S_SET_THREAD_LOCAL (fixP->fx_addsy);
10090         break;
10091
10092       case BFD_RELOC_386_TLS_DESC_CALL:
10093       case BFD_RELOC_X86_64_TLSDESC_CALL:
10094         value = 0; /* Fully resolved at runtime.  No addend.  */
10095         S_SET_THREAD_LOCAL (fixP->fx_addsy);
10096         fixP->fx_done = 0;
10097         return;
10098
10099       case BFD_RELOC_VTABLE_INHERIT:
10100       case BFD_RELOC_VTABLE_ENTRY:
10101         fixP->fx_done = 0;
10102         return;
10103
10104       default:
10105         break;
10106       }
10107 #endif /* defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)  */
10108   *valP = value;
10109 #endif /* !defined (TE_Mach)  */
10110
10111   /* Are we finished with this relocation now?  */
10112   if (fixP->fx_addsy == NULL)
10113     fixP->fx_done = 1;
10114 #if defined (OBJ_COFF) && defined (TE_PE)
10115   else if (fixP->fx_addsy != NULL && S_IS_WEAK (fixP->fx_addsy))
10116     {
10117       fixP->fx_done = 0;
10118       /* Remember value for tc_gen_reloc.  */
10119       fixP->fx_addnumber = value;
10120       /* Clear out the frag for now.  */
10121       value = 0;
10122     }
10123 #endif
10124   else if (use_rela_relocations)
10125     {
10126       fixP->fx_no_overflow = 1;
10127       /* Remember value for tc_gen_reloc.  */
10128       fixP->fx_addnumber = value;
10129       value = 0;
10130     }
10131
10132   md_number_to_chars (p, value, fixP->fx_size);
10133 }
10134 \f
10135 const char *
10136 md_atof (int type, char *litP, int *sizeP)
10137 {
10138   /* This outputs the LITTLENUMs in REVERSE order;
10139      in accord with the bigendian 386.  */
10140   return ieee_md_atof (type, litP, sizeP, FALSE);
10141 }
10142 \f
10143 static char output_invalid_buf[sizeof (unsigned char) * 2 + 6];
10144
10145 static char *
10146 output_invalid (int c)
10147 {
10148   if (ISPRINT (c))
10149     snprintf (output_invalid_buf, sizeof (output_invalid_buf),
10150               "'%c'", c);
10151   else
10152     snprintf (output_invalid_buf, sizeof (output_invalid_buf),
10153               "(0x%x)", (unsigned char) c);
10154   return output_invalid_buf;
10155 }
10156
10157 /* REG_STRING starts *before* REGISTER_PREFIX.  */
10158
10159 static const reg_entry *
10160 parse_real_register (char *reg_string, char **end_op)
10161 {
10162   char *s = reg_string;
10163   char *p;
10164   char reg_name_given[MAX_REG_NAME_SIZE + 1];
10165   const reg_entry *r;
10166
10167   /* Skip possible REGISTER_PREFIX and possible whitespace.  */
10168   if (*s == REGISTER_PREFIX)
10169     ++s;
10170
10171   if (is_space_char (*s))
10172     ++s;
10173
10174   p = reg_name_given;
10175   while ((*p++ = register_chars[(unsigned char) *s]) != '\0')
10176     {
10177       if (p >= reg_name_given + MAX_REG_NAME_SIZE)
10178         return (const reg_entry *) NULL;
10179       s++;
10180     }
10181
10182   /* For naked regs, make sure that we are not dealing with an identifier.
10183      This prevents confusing an identifier like `eax_var' with register
10184      `eax'.  */
10185   if (allow_naked_reg && identifier_chars[(unsigned char) *s])
10186     return (const reg_entry *) NULL;
10187
10188   *end_op = s;
10189
10190   r = (const reg_entry *) hash_find (reg_hash, reg_name_given);
10191
10192   /* Handle floating point regs, allowing spaces in the (i) part.  */
10193   if (r == i386_regtab /* %st is first entry of table  */)
10194     {
10195       if (!cpu_arch_flags.bitfield.cpu8087
10196           && !cpu_arch_flags.bitfield.cpu287
10197           && !cpu_arch_flags.bitfield.cpu387)
10198         return (const reg_entry *) NULL;
10199
10200       if (is_space_char (*s))
10201         ++s;
10202       if (*s == '(')
10203         {
10204           ++s;
10205           if (is_space_char (*s))
10206             ++s;
10207           if (*s >= '0' && *s <= '7')
10208             {
10209               int fpr = *s - '0';
10210               ++s;
10211               if (is_space_char (*s))
10212                 ++s;
10213               if (*s == ')')
10214                 {
10215                   *end_op = s + 1;
10216                   r = (const reg_entry *) hash_find (reg_hash, "st(0)");
10217                   know (r);
10218                   return r + fpr;
10219                 }
10220             }
10221           /* We have "%st(" then garbage.  */
10222           return (const reg_entry *) NULL;
10223         }
10224     }
10225
10226   if (r == NULL || allow_pseudo_reg)
10227     return r;
10228
10229   if (operand_type_all_zero (&r->reg_type))
10230     return (const reg_entry *) NULL;
10231
10232   if ((r->reg_type.bitfield.dword
10233        || r->reg_type.bitfield.sreg3
10234        || r->reg_type.bitfield.control
10235        || r->reg_type.bitfield.debug
10236        || r->reg_type.bitfield.test)
10237       && !cpu_arch_flags.bitfield.cpui386)
10238     return (const reg_entry *) NULL;
10239
10240   if (r->reg_type.bitfield.regmmx && !cpu_arch_flags.bitfield.cpummx)
10241     return (const reg_entry *) NULL;
10242
10243   if (!cpu_arch_flags.bitfield.cpuavx512f)
10244     {
10245       if (r->reg_type.bitfield.zmmword || r->reg_type.bitfield.regmask)
10246         return (const reg_entry *) NULL;
10247
10248       if (!cpu_arch_flags.bitfield.cpuavx)
10249         {
10250           if (r->reg_type.bitfield.ymmword)
10251             return (const reg_entry *) NULL;
10252
10253           if (!cpu_arch_flags.bitfield.cpusse && r->reg_type.bitfield.xmmword)
10254             return (const reg_entry *) NULL;
10255         }
10256     }
10257
10258   if (r->reg_type.bitfield.regbnd && !cpu_arch_flags.bitfield.cpumpx)
10259     return (const reg_entry *) NULL;
10260
10261   /* Don't allow fake index register unless allow_index_reg isn't 0. */
10262   if (!allow_index_reg
10263       && (r->reg_num == RegEiz || r->reg_num == RegRiz))
10264     return (const reg_entry *) NULL;
10265
10266   /* Upper 16 vector registers are only available with VREX in 64bit
10267      mode, and require EVEX encoding.  */
10268   if (r->reg_flags & RegVRex)
10269     {
10270       if (!cpu_arch_flags.bitfield.cpuvrex
10271           || flag_code != CODE_64BIT)
10272         return (const reg_entry *) NULL;
10273
10274       i.vec_encoding = vex_encoding_evex;
10275     }
10276
10277   if (((r->reg_flags & (RegRex64 | RegRex)) || r->reg_type.bitfield.qword)
10278       && (!cpu_arch_flags.bitfield.cpulm || !r->reg_type.bitfield.control)
10279       && flag_code != CODE_64BIT)
10280     return (const reg_entry *) NULL;
10281
10282   if (r->reg_type.bitfield.sreg3 && r->reg_num == RegFlat && !intel_syntax)
10283     return (const reg_entry *) NULL;
10284
10285   return r;
10286 }
10287
10288 /* REG_STRING starts *before* REGISTER_PREFIX.  */
10289
10290 static const reg_entry *
10291 parse_register (char *reg_string, char **end_op)
10292 {
10293   const reg_entry *r;
10294
10295   if (*reg_string == REGISTER_PREFIX || allow_naked_reg)
10296     r = parse_real_register (reg_string, end_op);
10297   else
10298     r = NULL;
10299   if (!r)
10300     {
10301       char *save = input_line_pointer;
10302       char c;
10303       symbolS *symbolP;
10304
10305       input_line_pointer = reg_string;
10306       c = get_symbol_name (&reg_string);
10307       symbolP = symbol_find (reg_string);
10308       if (symbolP && S_GET_SEGMENT (symbolP) == reg_section)
10309         {
10310           const expressionS *e = symbol_get_value_expression (symbolP);
10311
10312           know (e->X_op == O_register);
10313           know (e->X_add_number >= 0
10314                 && (valueT) e->X_add_number < i386_regtab_size);
10315           r = i386_regtab + e->X_add_number;
10316           if ((r->reg_flags & RegVRex))
10317             i.vec_encoding = vex_encoding_evex;
10318           *end_op = input_line_pointer;
10319         }
10320       *input_line_pointer = c;
10321       input_line_pointer = save;
10322     }
10323   return r;
10324 }
10325
10326 int
10327 i386_parse_name (char *name, expressionS *e, char *nextcharP)
10328 {
10329   const reg_entry *r;
10330   char *end = input_line_pointer;
10331
10332   *end = *nextcharP;
10333   r = parse_register (name, &input_line_pointer);
10334   if (r && end <= input_line_pointer)
10335     {
10336       *nextcharP = *input_line_pointer;
10337       *input_line_pointer = 0;
10338       e->X_op = O_register;
10339       e->X_add_number = r - i386_regtab;
10340       return 1;
10341     }
10342   input_line_pointer = end;
10343   *end = 0;
10344   return intel_syntax ? i386_intel_parse_name (name, e) : 0;
10345 }
10346
10347 void
10348 md_operand (expressionS *e)
10349 {
10350   char *end;
10351   const reg_entry *r;
10352
10353   switch (*input_line_pointer)
10354     {
10355     case REGISTER_PREFIX:
10356       r = parse_real_register (input_line_pointer, &end);
10357       if (r)
10358         {
10359           e->X_op = O_register;
10360           e->X_add_number = r - i386_regtab;
10361           input_line_pointer = end;
10362         }
10363       break;
10364
10365     case '[':
10366       gas_assert (intel_syntax);
10367       end = input_line_pointer++;
10368       expression (e);
10369       if (*input_line_pointer == ']')
10370         {
10371           ++input_line_pointer;
10372           e->X_op_symbol = make_expr_symbol (e);
10373           e->X_add_symbol = NULL;
10374           e->X_add_number = 0;
10375           e->X_op = O_index;
10376         }
10377       else
10378         {
10379           e->X_op = O_absent;
10380           input_line_pointer = end;
10381         }
10382       break;
10383     }
10384 }
10385
10386 \f
10387 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
10388 const char *md_shortopts = "kVQ:sqnO::";
10389 #else
10390 const char *md_shortopts = "qnO::";
10391 #endif
10392
10393 #define OPTION_32 (OPTION_MD_BASE + 0)
10394 #define OPTION_64 (OPTION_MD_BASE + 1)
10395 #define OPTION_DIVIDE (OPTION_MD_BASE + 2)
10396 #define OPTION_MARCH (OPTION_MD_BASE + 3)
10397 #define OPTION_MTUNE (OPTION_MD_BASE + 4)
10398 #define OPTION_MMNEMONIC (OPTION_MD_BASE + 5)
10399 #define OPTION_MSYNTAX (OPTION_MD_BASE + 6)
10400 #define OPTION_MINDEX_REG (OPTION_MD_BASE + 7)
10401 #define OPTION_MNAKED_REG (OPTION_MD_BASE + 8)
10402 #define OPTION_MRELAX_RELOCATIONS (OPTION_MD_BASE + 9)
10403 #define OPTION_MSSE2AVX (OPTION_MD_BASE + 10)
10404 #define OPTION_MSSE_CHECK (OPTION_MD_BASE + 11)
10405 #define OPTION_MOPERAND_CHECK (OPTION_MD_BASE + 12)
10406 #define OPTION_MAVXSCALAR (OPTION_MD_BASE + 13)
10407 #define OPTION_X32 (OPTION_MD_BASE + 14)
10408 #define OPTION_MADD_BND_PREFIX (OPTION_MD_BASE + 15)
10409 #define OPTION_MEVEXLIG (OPTION_MD_BASE + 16)
10410 #define OPTION_MEVEXWIG (OPTION_MD_BASE + 17)
10411 #define OPTION_MBIG_OBJ (OPTION_MD_BASE + 18)
10412 #define OPTION_MOMIT_LOCK_PREFIX (OPTION_MD_BASE + 19)
10413 #define OPTION_MEVEXRCIG (OPTION_MD_BASE + 20)
10414 #define OPTION_MSHARED (OPTION_MD_BASE + 21)
10415 #define OPTION_MAMD64 (OPTION_MD_BASE + 22)
10416 #define OPTION_MINTEL64 (OPTION_MD_BASE + 23)
10417 #define OPTION_MFENCE_AS_LOCK_ADD (OPTION_MD_BASE + 24)
10418
10419 struct option md_longopts[] =
10420 {
10421   {"32", no_argument, NULL, OPTION_32},
10422 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
10423      || defined (TE_PE) || defined (TE_PEP) || defined (OBJ_MACH_O))
10424   {"64", no_argument, NULL, OPTION_64},
10425 #endif
10426 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
10427   {"x32", no_argument, NULL, OPTION_X32},
10428   {"mshared", no_argument, NULL, OPTION_MSHARED},
10429 #endif
10430   {"divide", no_argument, NULL, OPTION_DIVIDE},
10431   {"march", required_argument, NULL, OPTION_MARCH},
10432   {"mtune", required_argument, NULL, OPTION_MTUNE},
10433   {"mmnemonic", required_argument, NULL, OPTION_MMNEMONIC},
10434   {"msyntax", required_argument, NULL, OPTION_MSYNTAX},
10435   {"mindex-reg", no_argument, NULL, OPTION_MINDEX_REG},
10436   {"mnaked-reg", no_argument, NULL, OPTION_MNAKED_REG},
10437   {"msse2avx", no_argument, NULL, OPTION_MSSE2AVX},
10438   {"msse-check", required_argument, NULL, OPTION_MSSE_CHECK},
10439   {"moperand-check", required_argument, NULL, OPTION_MOPERAND_CHECK},
10440   {"mavxscalar", required_argument, NULL, OPTION_MAVXSCALAR},
10441   {"madd-bnd-prefix", no_argument, NULL, OPTION_MADD_BND_PREFIX},
10442   {"mevexlig", required_argument, NULL, OPTION_MEVEXLIG},
10443   {"mevexwig", required_argument, NULL, OPTION_MEVEXWIG},
10444 # if defined (TE_PE) || defined (TE_PEP)
10445   {"mbig-obj", no_argument, NULL, OPTION_MBIG_OBJ},
10446 #endif
10447   {"momit-lock-prefix", required_argument, NULL, OPTION_MOMIT_LOCK_PREFIX},
10448   {"mfence-as-lock-add", required_argument, NULL, OPTION_MFENCE_AS_LOCK_ADD},
10449   {"mrelax-relocations", required_argument, NULL, OPTION_MRELAX_RELOCATIONS},
10450   {"mevexrcig", required_argument, NULL, OPTION_MEVEXRCIG},
10451   {"mamd64", no_argument, NULL, OPTION_MAMD64},
10452   {"mintel64", no_argument, NULL, OPTION_MINTEL64},
10453   {NULL, no_argument, NULL, 0}
10454 };
10455 size_t md_longopts_size = sizeof (md_longopts);
10456
10457 int
10458 md_parse_option (int c, const char *arg)
10459 {
10460   unsigned int j;
10461   char *arch, *next, *saved;
10462
10463   switch (c)
10464     {
10465     case 'n':
10466       optimize_align_code = 0;
10467       break;
10468
10469     case 'q':
10470       quiet_warnings = 1;
10471       break;
10472
10473 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
10474       /* -Qy, -Qn: SVR4 arguments controlling whether a .comment section
10475          should be emitted or not.  FIXME: Not implemented.  */
10476     case 'Q':
10477       break;
10478
10479       /* -V: SVR4 argument to print version ID.  */
10480     case 'V':
10481       print_version_id ();
10482       break;
10483
10484       /* -k: Ignore for FreeBSD compatibility.  */
10485     case 'k':
10486       break;
10487
10488     case 's':
10489       /* -s: On i386 Solaris, this tells the native assembler to use
10490          .stab instead of .stab.excl.  We always use .stab anyhow.  */
10491       break;
10492
10493     case OPTION_MSHARED:
10494       shared = 1;
10495       break;
10496 #endif
10497 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
10498      || defined (TE_PE) || defined (TE_PEP) || defined (OBJ_MACH_O))
10499     case OPTION_64:
10500       {
10501         const char **list, **l;
10502
10503         list = bfd_target_list ();
10504         for (l = list; *l != NULL; l++)
10505           if (CONST_STRNEQ (*l, "elf64-x86-64")
10506               || strcmp (*l, "coff-x86-64") == 0
10507               || strcmp (*l, "pe-x86-64") == 0
10508               || strcmp (*l, "pei-x86-64") == 0
10509               || strcmp (*l, "mach-o-x86-64") == 0)
10510             {
10511               default_arch = "x86_64";
10512               break;
10513             }
10514         if (*l == NULL)
10515           as_fatal (_("no compiled in support for x86_64"));
10516         free (list);
10517       }
10518       break;
10519 #endif
10520
10521 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
10522     case OPTION_X32:
10523       if (IS_ELF)
10524         {
10525           const char **list, **l;
10526
10527           list = bfd_target_list ();
10528           for (l = list; *l != NULL; l++)
10529             if (CONST_STRNEQ (*l, "elf32-x86-64"))
10530               {
10531                 default_arch = "x86_64:32";
10532                 break;
10533               }
10534           if (*l == NULL)
10535             as_fatal (_("no compiled in support for 32bit x86_64"));
10536           free (list);
10537         }
10538       else
10539         as_fatal (_("32bit x86_64 is only supported for ELF"));
10540       break;
10541 #endif
10542
10543     case OPTION_32:
10544       default_arch = "i386";
10545       break;
10546
10547     case OPTION_DIVIDE:
10548 #ifdef SVR4_COMMENT_CHARS
10549       {
10550         char *n, *t;
10551         const char *s;
10552
10553         n = XNEWVEC (char, strlen (i386_comment_chars) + 1);
10554         t = n;
10555         for (s = i386_comment_chars; *s != '\0'; s++)
10556           if (*s != '/')
10557             *t++ = *s;
10558         *t = '\0';
10559         i386_comment_chars = n;
10560       }
10561 #endif
10562       break;
10563
10564     case OPTION_MARCH:
10565       saved = xstrdup (arg);
10566       arch = saved;
10567       /* Allow -march=+nosse.  */
10568       if (*arch == '+')
10569         arch++;
10570       do
10571         {
10572           if (*arch == '.')
10573             as_fatal (_("invalid -march= option: `%s'"), arg);
10574           next = strchr (arch, '+');
10575           if (next)
10576             *next++ = '\0';
10577           for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
10578             {
10579               if (strcmp (arch, cpu_arch [j].name) == 0)
10580                 {
10581                   /* Processor.  */
10582                   if (! cpu_arch[j].flags.bitfield.cpui386)
10583                     continue;
10584
10585                   cpu_arch_name = cpu_arch[j].name;
10586                   cpu_sub_arch_name = NULL;
10587                   cpu_arch_flags = cpu_arch[j].flags;
10588                   cpu_arch_isa = cpu_arch[j].type;
10589                   cpu_arch_isa_flags = cpu_arch[j].flags;
10590                   if (!cpu_arch_tune_set)
10591                     {
10592                       cpu_arch_tune = cpu_arch_isa;
10593                       cpu_arch_tune_flags = cpu_arch_isa_flags;
10594                     }
10595                   break;
10596                 }
10597               else if (*cpu_arch [j].name == '.'
10598                        && strcmp (arch, cpu_arch [j].name + 1) == 0)
10599                 {
10600                   /* ISA extension.  */
10601                   i386_cpu_flags flags;
10602
10603                   flags = cpu_flags_or (cpu_arch_flags,
10604                                         cpu_arch[j].flags);
10605
10606                   if (!cpu_flags_equal (&flags, &cpu_arch_flags))
10607                     {
10608                       if (cpu_sub_arch_name)
10609                         {
10610                           char *name = cpu_sub_arch_name;
10611                           cpu_sub_arch_name = concat (name,
10612                                                       cpu_arch[j].name,
10613                                                       (const char *) NULL);
10614                           free (name);
10615                         }
10616                       else
10617                         cpu_sub_arch_name = xstrdup (cpu_arch[j].name);
10618                       cpu_arch_flags = flags;
10619                       cpu_arch_isa_flags = flags;
10620                     }
10621                   else
10622                     cpu_arch_isa_flags
10623                       = cpu_flags_or (cpu_arch_isa_flags,
10624                                       cpu_arch[j].flags);
10625                   break;
10626                 }
10627             }
10628
10629           if (j >= ARRAY_SIZE (cpu_arch))
10630             {
10631               /* Disable an ISA extension.  */
10632               for (j = 0; j < ARRAY_SIZE (cpu_noarch); j++)
10633                 if (strcmp (arch, cpu_noarch [j].name) == 0)
10634                   {
10635                     i386_cpu_flags flags;
10636
10637                     flags = cpu_flags_and_not (cpu_arch_flags,
10638                                                cpu_noarch[j].flags);
10639                     if (!cpu_flags_equal (&flags, &cpu_arch_flags))
10640                       {
10641                         if (cpu_sub_arch_name)
10642                           {
10643                             char *name = cpu_sub_arch_name;
10644                             cpu_sub_arch_name = concat (arch,
10645                                                         (const char *) NULL);
10646                             free (name);
10647                           }
10648                         else
10649                           cpu_sub_arch_name = xstrdup (arch);
10650                         cpu_arch_flags = flags;
10651                         cpu_arch_isa_flags = flags;
10652                       }
10653                     break;
10654                   }
10655
10656               if (j >= ARRAY_SIZE (cpu_noarch))
10657                 j = ARRAY_SIZE (cpu_arch);
10658             }
10659
10660           if (j >= ARRAY_SIZE (cpu_arch))
10661             as_fatal (_("invalid -march= option: `%s'"), arg);
10662
10663           arch = next;
10664         }
10665       while (next != NULL);
10666       free (saved);
10667       break;
10668
10669     case OPTION_MTUNE:
10670       if (*arg == '.')
10671         as_fatal (_("invalid -mtune= option: `%s'"), arg);
10672       for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
10673         {
10674           if (strcmp (arg, cpu_arch [j].name) == 0)
10675             {
10676               cpu_arch_tune_set = 1;
10677               cpu_arch_tune = cpu_arch [j].type;
10678               cpu_arch_tune_flags = cpu_arch[j].flags;
10679               break;
10680             }
10681         }
10682       if (j >= ARRAY_SIZE (cpu_arch))
10683         as_fatal (_("invalid -mtune= option: `%s'"), arg);
10684       break;
10685
10686     case OPTION_MMNEMONIC:
10687       if (strcasecmp (arg, "att") == 0)
10688         intel_mnemonic = 0;
10689       else if (strcasecmp (arg, "intel") == 0)
10690         intel_mnemonic = 1;
10691       else
10692         as_fatal (_("invalid -mmnemonic= option: `%s'"), arg);
10693       break;
10694
10695     case OPTION_MSYNTAX:
10696       if (strcasecmp (arg, "att") == 0)
10697         intel_syntax = 0;
10698       else if (strcasecmp (arg, "intel") == 0)
10699         intel_syntax = 1;
10700       else
10701         as_fatal (_("invalid -msyntax= option: `%s'"), arg);
10702       break;
10703
10704     case OPTION_MINDEX_REG:
10705       allow_index_reg = 1;
10706       break;
10707
10708     case OPTION_MNAKED_REG:
10709       allow_naked_reg = 1;
10710       break;
10711
10712     case OPTION_MSSE2AVX:
10713       sse2avx = 1;
10714       break;
10715
10716     case OPTION_MSSE_CHECK:
10717       if (strcasecmp (arg, "error") == 0)
10718         sse_check = check_error;
10719       else if (strcasecmp (arg, "warning") == 0)
10720         sse_check = check_warning;
10721       else if (strcasecmp (arg, "none") == 0)
10722         sse_check = check_none;
10723       else
10724         as_fatal (_("invalid -msse-check= option: `%s'"), arg);
10725       break;
10726
10727     case OPTION_MOPERAND_CHECK:
10728       if (strcasecmp (arg, "error") == 0)
10729         operand_check = check_error;
10730       else if (strcasecmp (arg, "warning") == 0)
10731         operand_check = check_warning;
10732       else if (strcasecmp (arg, "none") == 0)
10733         operand_check = check_none;
10734       else
10735         as_fatal (_("invalid -moperand-check= option: `%s'"), arg);
10736       break;
10737
10738     case OPTION_MAVXSCALAR:
10739       if (strcasecmp (arg, "128") == 0)
10740         avxscalar = vex128;
10741       else if (strcasecmp (arg, "256") == 0)
10742         avxscalar = vex256;
10743       else
10744         as_fatal (_("invalid -mavxscalar= option: `%s'"), arg);
10745       break;
10746
10747     case OPTION_MADD_BND_PREFIX:
10748       add_bnd_prefix = 1;
10749       break;
10750
10751     case OPTION_MEVEXLIG:
10752       if (strcmp (arg, "128") == 0)
10753         evexlig = evexl128;
10754       else if (strcmp (arg, "256") == 0)
10755         evexlig = evexl256;
10756       else  if (strcmp (arg, "512") == 0)
10757         evexlig = evexl512;
10758       else
10759         as_fatal (_("invalid -mevexlig= option: `%s'"), arg);
10760       break;
10761
10762     case OPTION_MEVEXRCIG:
10763       if (strcmp (arg, "rne") == 0)
10764         evexrcig = rne;
10765       else if (strcmp (arg, "rd") == 0)
10766         evexrcig = rd;
10767       else if (strcmp (arg, "ru") == 0)
10768         evexrcig = ru;
10769       else if (strcmp (arg, "rz") == 0)
10770         evexrcig = rz;
10771       else
10772         as_fatal (_("invalid -mevexrcig= option: `%s'"), arg);
10773       break;
10774
10775     case OPTION_MEVEXWIG:
10776       if (strcmp (arg, "0") == 0)
10777         evexwig = evexw0;
10778       else if (strcmp (arg, "1") == 0)
10779         evexwig = evexw1;
10780       else
10781         as_fatal (_("invalid -mevexwig= option: `%s'"), arg);
10782       break;
10783
10784 # if defined (TE_PE) || defined (TE_PEP)
10785     case OPTION_MBIG_OBJ:
10786       use_big_obj = 1;
10787       break;
10788 #endif
10789
10790     case OPTION_MOMIT_LOCK_PREFIX:
10791       if (strcasecmp (arg, "yes") == 0)
10792         omit_lock_prefix = 1;
10793       else if (strcasecmp (arg, "no") == 0)
10794         omit_lock_prefix = 0;
10795       else
10796         as_fatal (_("invalid -momit-lock-prefix= option: `%s'"), arg);
10797       break;
10798
10799     case OPTION_MFENCE_AS_LOCK_ADD:
10800       if (strcasecmp (arg, "yes") == 0)
10801         avoid_fence = 1;
10802       else if (strcasecmp (arg, "no") == 0)
10803         avoid_fence = 0;
10804       else
10805         as_fatal (_("invalid -mfence-as-lock-add= option: `%s'"), arg);
10806       break;
10807
10808     case OPTION_MRELAX_RELOCATIONS:
10809       if (strcasecmp (arg, "yes") == 0)
10810         generate_relax_relocations = 1;
10811       else if (strcasecmp (arg, "no") == 0)
10812         generate_relax_relocations = 0;
10813       else
10814         as_fatal (_("invalid -mrelax-relocations= option: `%s'"), arg);
10815       break;
10816
10817     case OPTION_MAMD64:
10818       intel64 = 0;
10819       break;
10820
10821     case OPTION_MINTEL64:
10822       intel64 = 1;
10823       break;
10824
10825     case 'O':
10826       if (arg == NULL)
10827         {
10828           optimize = 1;
10829           /* Turn off -Os.  */
10830           optimize_for_space = 0;
10831         }
10832       else if (*arg == 's')
10833         {
10834           optimize_for_space = 1;
10835           /* Turn on all encoding optimizations.  */
10836           optimize = -1;
10837         }
10838       else
10839         {
10840           optimize = atoi (arg);
10841           /* Turn off -Os.  */
10842           optimize_for_space = 0;
10843         }
10844       break;
10845
10846     default:
10847       return 0;
10848     }
10849   return 1;
10850 }
10851
10852 #define MESSAGE_TEMPLATE \
10853 "                                                                                "
10854
10855 static char *
10856 output_message (FILE *stream, char *p, char *message, char *start,
10857                 int *left_p, const char *name, int len)
10858 {
10859   int size = sizeof (MESSAGE_TEMPLATE);
10860   int left = *left_p;
10861
10862   /* Reserve 2 spaces for ", " or ",\0" */
10863   left -= len + 2;
10864
10865   /* Check if there is any room.  */
10866   if (left >= 0)
10867     {
10868       if (p != start)
10869         {
10870           *p++ = ',';
10871           *p++ = ' ';
10872         }
10873       p = mempcpy (p, name, len);
10874     }
10875   else
10876     {
10877       /* Output the current message now and start a new one.  */
10878       *p++ = ',';
10879       *p = '\0';
10880       fprintf (stream, "%s\n", message);
10881       p = start;
10882       left = size - (start - message) - len - 2;
10883
10884       gas_assert (left >= 0);
10885
10886       p = mempcpy (p, name, len);
10887     }
10888
10889   *left_p = left;
10890   return p;
10891 }
10892
10893 static void
10894 show_arch (FILE *stream, int ext, int check)
10895 {
10896   static char message[] = MESSAGE_TEMPLATE;
10897   char *start = message + 27;
10898   char *p;
10899   int size = sizeof (MESSAGE_TEMPLATE);
10900   int left;
10901   const char *name;
10902   int len;
10903   unsigned int j;
10904
10905   p = start;
10906   left = size - (start - message);
10907   for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
10908     {
10909       /* Should it be skipped?  */
10910       if (cpu_arch [j].skip)
10911         continue;
10912
10913       name = cpu_arch [j].name;
10914       len = cpu_arch [j].len;
10915       if (*name == '.')
10916         {
10917           /* It is an extension.  Skip if we aren't asked to show it.  */
10918           if (ext)
10919             {
10920               name++;
10921               len--;
10922             }
10923           else
10924             continue;
10925         }
10926       else if (ext)
10927         {
10928           /* It is an processor.  Skip if we show only extension.  */
10929           continue;
10930         }
10931       else if (check && ! cpu_arch[j].flags.bitfield.cpui386)
10932         {
10933           /* It is an impossible processor - skip.  */
10934           continue;
10935         }
10936
10937       p = output_message (stream, p, message, start, &left, name, len);
10938     }
10939
10940   /* Display disabled extensions.  */
10941   if (ext)
10942     for (j = 0; j < ARRAY_SIZE (cpu_noarch); j++)
10943       {
10944         name = cpu_noarch [j].name;
10945         len = cpu_noarch [j].len;
10946         p = output_message (stream, p, message, start, &left, name,
10947                             len);
10948       }
10949
10950   *p = '\0';
10951   fprintf (stream, "%s\n", message);
10952 }
10953
10954 void
10955 md_show_usage (FILE *stream)
10956 {
10957 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
10958   fprintf (stream, _("\
10959   -Q                      ignored\n\
10960   -V                      print assembler version number\n\
10961   -k                      ignored\n"));
10962 #endif
10963   fprintf (stream, _("\
10964   -n                      Do not optimize code alignment\n\
10965   -q                      quieten some warnings\n"));
10966 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
10967   fprintf (stream, _("\
10968   -s                      ignored\n"));
10969 #endif
10970 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
10971      || defined (TE_PE) || defined (TE_PEP))
10972   fprintf (stream, _("\
10973   --32/--64/--x32         generate 32bit/64bit/x32 code\n"));
10974 #endif
10975 #ifdef SVR4_COMMENT_CHARS
10976   fprintf (stream, _("\
10977   --divide                do not treat `/' as a comment character\n"));
10978 #else
10979   fprintf (stream, _("\
10980   --divide                ignored\n"));
10981 #endif
10982   fprintf (stream, _("\
10983   -march=CPU[,+EXTENSION...]\n\
10984                           generate code for CPU and EXTENSION, CPU is one of:\n"));
10985   show_arch (stream, 0, 1);
10986   fprintf (stream, _("\
10987                           EXTENSION is combination of:\n"));
10988   show_arch (stream, 1, 0);
10989   fprintf (stream, _("\
10990   -mtune=CPU              optimize for CPU, CPU is one of:\n"));
10991   show_arch (stream, 0, 0);
10992   fprintf (stream, _("\
10993   -msse2avx               encode SSE instructions with VEX prefix\n"));
10994   fprintf (stream, _("\
10995   -msse-check=[none|error|warning]\n\
10996                           check SSE instructions\n"));
10997   fprintf (stream, _("\
10998   -moperand-check=[none|error|warning]\n\
10999                           check operand combinations for validity\n"));
11000   fprintf (stream, _("\
11001   -mavxscalar=[128|256]   encode scalar AVX instructions with specific vector\n\
11002                            length\n"));
11003   fprintf (stream, _("\
11004   -mevexlig=[128|256|512] encode scalar EVEX instructions with specific vector\n\
11005                            length\n"));
11006   fprintf (stream, _("\
11007   -mevexwig=[0|1]         encode EVEX instructions with specific EVEX.W value\n\
11008                            for EVEX.W bit ignored instructions\n"));
11009   fprintf (stream, _("\
11010   -mevexrcig=[rne|rd|ru|rz]\n\
11011                           encode EVEX instructions with specific EVEX.RC value\n\
11012                            for SAE-only ignored instructions\n"));
11013   fprintf (stream, _("\
11014   -mmnemonic=[att|intel]  use AT&T/Intel mnemonic\n"));
11015   fprintf (stream, _("\
11016   -msyntax=[att|intel]    use AT&T/Intel syntax\n"));
11017   fprintf (stream, _("\
11018   -mindex-reg             support pseudo index registers\n"));
11019   fprintf (stream, _("\
11020   -mnaked-reg             don't require `%%' prefix for registers\n"));
11021   fprintf (stream, _("\
11022   -madd-bnd-prefix        add BND prefix for all valid branches\n"));
11023   fprintf (stream, _("\
11024   -mshared                disable branch optimization for shared code\n"));
11025 # if defined (TE_PE) || defined (TE_PEP)
11026   fprintf (stream, _("\
11027   -mbig-obj               generate big object files\n"));
11028 #endif
11029   fprintf (stream, _("\
11030   -momit-lock-prefix=[no|yes]\n\
11031                           strip all lock prefixes\n"));
11032   fprintf (stream, _("\
11033   -mfence-as-lock-add=[no|yes]\n\
11034                           encode lfence, mfence and sfence as\n\
11035                            lock addl $0x0, (%%{re}sp)\n"));
11036   fprintf (stream, _("\
11037   -mrelax-relocations=[no|yes]\n\
11038                           generate relax relocations\n"));
11039   fprintf (stream, _("\
11040   -mamd64                 accept only AMD64 ISA\n"));
11041   fprintf (stream, _("\
11042   -mintel64               accept only Intel64 ISA\n"));
11043 }
11044
11045 #if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \
11046      || defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
11047      || defined (TE_PE) || defined (TE_PEP) || defined (OBJ_MACH_O))
11048
11049 /* Pick the target format to use.  */
11050
11051 const char *
11052 i386_target_format (void)
11053 {
11054   if (!strncmp (default_arch, "x86_64", 6))
11055     {
11056       update_code_flag (CODE_64BIT, 1);
11057       if (default_arch[6] == '\0')
11058         x86_elf_abi = X86_64_ABI;
11059       else
11060         x86_elf_abi = X86_64_X32_ABI;
11061     }
11062   else if (!strcmp (default_arch, "i386"))
11063     update_code_flag (CODE_32BIT, 1);
11064   else if (!strcmp (default_arch, "iamcu"))
11065     {
11066       update_code_flag (CODE_32BIT, 1);
11067       if (cpu_arch_isa == PROCESSOR_UNKNOWN)
11068         {
11069           static const i386_cpu_flags iamcu_flags = CPU_IAMCU_FLAGS;
11070           cpu_arch_name = "iamcu";
11071           cpu_sub_arch_name = NULL;
11072           cpu_arch_flags = iamcu_flags;
11073           cpu_arch_isa = PROCESSOR_IAMCU;
11074           cpu_arch_isa_flags = iamcu_flags;
11075           if (!cpu_arch_tune_set)
11076             {
11077               cpu_arch_tune = cpu_arch_isa;
11078               cpu_arch_tune_flags = cpu_arch_isa_flags;
11079             }
11080         }
11081       else if (cpu_arch_isa != PROCESSOR_IAMCU)
11082         as_fatal (_("Intel MCU doesn't support `%s' architecture"),
11083                   cpu_arch_name);
11084     }
11085   else
11086     as_fatal (_("unknown architecture"));
11087
11088   if (cpu_flags_all_zero (&cpu_arch_isa_flags))
11089     cpu_arch_isa_flags = cpu_arch[flag_code == CODE_64BIT].flags;
11090   if (cpu_flags_all_zero (&cpu_arch_tune_flags))
11091     cpu_arch_tune_flags = cpu_arch[flag_code == CODE_64BIT].flags;
11092
11093   switch (OUTPUT_FLAVOR)
11094     {
11095 #if defined (OBJ_MAYBE_AOUT) || defined (OBJ_AOUT)
11096     case bfd_target_aout_flavour:
11097       return AOUT_TARGET_FORMAT;
11098 #endif
11099 #if defined (OBJ_MAYBE_COFF) || defined (OBJ_COFF)
11100 # if defined (TE_PE) || defined (TE_PEP)
11101     case bfd_target_coff_flavour:
11102       if (flag_code == CODE_64BIT)
11103         return use_big_obj ? "pe-bigobj-x86-64" : "pe-x86-64";
11104       else
11105         return "pe-i386";
11106 # elif defined (TE_GO32)
11107     case bfd_target_coff_flavour:
11108       return "coff-go32";
11109 # else
11110     case bfd_target_coff_flavour:
11111       return "coff-i386";
11112 # endif
11113 #endif
11114 #if defined (OBJ_MAYBE_ELF) || defined (OBJ_ELF)
11115     case bfd_target_elf_flavour:
11116       {
11117         const char *format;
11118
11119         switch (x86_elf_abi)
11120           {
11121           default:
11122             format = ELF_TARGET_FORMAT;
11123             break;
11124           case X86_64_ABI:
11125             use_rela_relocations = 1;
11126             object_64bit = 1;
11127             format = ELF_TARGET_FORMAT64;
11128             break;
11129           case X86_64_X32_ABI:
11130             use_rela_relocations = 1;
11131             object_64bit = 1;
11132             disallow_64bit_reloc = 1;
11133             format = ELF_TARGET_FORMAT32;
11134             break;
11135           }
11136         if (cpu_arch_isa == PROCESSOR_L1OM)
11137           {
11138             if (x86_elf_abi != X86_64_ABI)
11139               as_fatal (_("Intel L1OM is 64bit only"));
11140             return ELF_TARGET_L1OM_FORMAT;
11141           }
11142         else if (cpu_arch_isa == PROCESSOR_K1OM)
11143           {
11144             if (x86_elf_abi != X86_64_ABI)
11145               as_fatal (_("Intel K1OM is 64bit only"));
11146             return ELF_TARGET_K1OM_FORMAT;
11147           }
11148         else if (cpu_arch_isa == PROCESSOR_IAMCU)
11149           {
11150             if (x86_elf_abi != I386_ABI)
11151               as_fatal (_("Intel MCU is 32bit only"));
11152             return ELF_TARGET_IAMCU_FORMAT;
11153           }
11154         else
11155           return format;
11156       }
11157 #endif
11158 #if defined (OBJ_MACH_O)
11159     case bfd_target_mach_o_flavour:
11160       if (flag_code == CODE_64BIT)
11161         {
11162           use_rela_relocations = 1;
11163           object_64bit = 1;
11164           return "mach-o-x86-64";
11165         }
11166       else
11167         return "mach-o-i386";
11168 #endif
11169     default:
11170       abort ();
11171       return NULL;
11172     }
11173 }
11174
11175 #endif /* OBJ_MAYBE_ more than one  */
11176 \f
11177 symbolS *
11178 md_undefined_symbol (char *name)
11179 {
11180   if (name[0] == GLOBAL_OFFSET_TABLE_NAME[0]
11181       && name[1] == GLOBAL_OFFSET_TABLE_NAME[1]
11182       && name[2] == GLOBAL_OFFSET_TABLE_NAME[2]
11183       && strcmp (name, GLOBAL_OFFSET_TABLE_NAME) == 0)
11184     {
11185       if (!GOT_symbol)
11186         {
11187           if (symbol_find (name))
11188             as_bad (_("GOT already in symbol table"));
11189           GOT_symbol = symbol_new (name, undefined_section,
11190                                    (valueT) 0, &zero_address_frag);
11191         };
11192       return GOT_symbol;
11193     }
11194   return 0;
11195 }
11196
11197 /* Round up a section size to the appropriate boundary.  */
11198
11199 valueT
11200 md_section_align (segT segment ATTRIBUTE_UNUSED, valueT size)
11201 {
11202 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
11203   if (OUTPUT_FLAVOR == bfd_target_aout_flavour)
11204     {
11205       /* For a.out, force the section size to be aligned.  If we don't do
11206          this, BFD will align it for us, but it will not write out the
11207          final bytes of the section.  This may be a bug in BFD, but it is
11208          easier to fix it here since that is how the other a.out targets
11209          work.  */
11210       int align;
11211
11212       align = bfd_get_section_alignment (stdoutput, segment);
11213       size = ((size + (1 << align) - 1) & (-((valueT) 1 << align)));
11214     }
11215 #endif
11216
11217   return size;
11218 }
11219
11220 /* On the i386, PC-relative offsets are relative to the start of the
11221    next instruction.  That is, the address of the offset, plus its
11222    size, since the offset is always the last part of the insn.  */
11223
11224 long
11225 md_pcrel_from (fixS *fixP)
11226 {
11227   return fixP->fx_size + fixP->fx_where + fixP->fx_frag->fr_address;
11228 }
11229
11230 #ifndef I386COFF
11231
11232 static void
11233 s_bss (int ignore ATTRIBUTE_UNUSED)
11234 {
11235   int temp;
11236
11237 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
11238   if (IS_ELF)
11239     obj_elf_section_change_hook ();
11240 #endif
11241   temp = get_absolute_expression ();
11242   subseg_set (bss_section, (subsegT) temp);
11243   demand_empty_rest_of_line ();
11244 }
11245
11246 #endif
11247
11248 void
11249 i386_validate_fix (fixS *fixp)
11250 {
11251   if (fixp->fx_subsy)
11252     {
11253       if (fixp->fx_subsy == GOT_symbol)
11254         {
11255           if (fixp->fx_r_type == BFD_RELOC_32_PCREL)
11256             {
11257               if (!object_64bit)
11258                 abort ();
11259 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
11260               if (fixp->fx_tcbit2)
11261                 fixp->fx_r_type = (fixp->fx_tcbit
11262                                    ? BFD_RELOC_X86_64_REX_GOTPCRELX
11263                                    : BFD_RELOC_X86_64_GOTPCRELX);
11264               else
11265 #endif
11266                 fixp->fx_r_type = BFD_RELOC_X86_64_GOTPCREL;
11267             }
11268           else
11269             {
11270               if (!object_64bit)
11271                 fixp->fx_r_type = BFD_RELOC_386_GOTOFF;
11272               else
11273                 fixp->fx_r_type = BFD_RELOC_X86_64_GOTOFF64;
11274             }
11275           fixp->fx_subsy = 0;
11276         }
11277     }
11278 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
11279   else if (!object_64bit)
11280     {
11281       if (fixp->fx_r_type == BFD_RELOC_386_GOT32
11282           && fixp->fx_tcbit2)
11283         fixp->fx_r_type = BFD_RELOC_386_GOT32X;
11284     }
11285 #endif
11286 }
11287
11288 arelent *
11289 tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixp)
11290 {
11291   arelent *rel;
11292   bfd_reloc_code_real_type code;
11293
11294   switch (fixp->fx_r_type)
11295     {
11296 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
11297     case BFD_RELOC_SIZE32:
11298     case BFD_RELOC_SIZE64:
11299       if (S_IS_DEFINED (fixp->fx_addsy)
11300           && !S_IS_EXTERNAL (fixp->fx_addsy))
11301         {
11302           /* Resolve size relocation against local symbol to size of
11303              the symbol plus addend.  */
11304           valueT value = S_GET_SIZE (fixp->fx_addsy) + fixp->fx_offset;
11305           if (fixp->fx_r_type == BFD_RELOC_SIZE32
11306               && !fits_in_unsigned_long (value))
11307             as_bad_where (fixp->fx_file, fixp->fx_line,
11308                           _("symbol size computation overflow"));
11309           fixp->fx_addsy = NULL;
11310           fixp->fx_subsy = NULL;
11311           md_apply_fix (fixp, (valueT *) &value, NULL);
11312           return NULL;
11313         }
11314 #endif
11315       /* Fall through.  */
11316
11317     case BFD_RELOC_X86_64_PLT32:
11318     case BFD_RELOC_X86_64_GOT32:
11319     case BFD_RELOC_X86_64_GOTPCREL:
11320     case BFD_RELOC_X86_64_GOTPCRELX:
11321     case BFD_RELOC_X86_64_REX_GOTPCRELX:
11322     case BFD_RELOC_386_PLT32:
11323     case BFD_RELOC_386_GOT32:
11324     case BFD_RELOC_386_GOT32X:
11325     case BFD_RELOC_386_GOTOFF:
11326     case BFD_RELOC_386_GOTPC:
11327     case BFD_RELOC_386_TLS_GD:
11328     case BFD_RELOC_386_TLS_LDM:
11329     case BFD_RELOC_386_TLS_LDO_32:
11330     case BFD_RELOC_386_TLS_IE_32:
11331     case BFD_RELOC_386_TLS_IE:
11332     case BFD_RELOC_386_TLS_GOTIE:
11333     case BFD_RELOC_386_TLS_LE_32:
11334     case BFD_RELOC_386_TLS_LE:
11335     case BFD_RELOC_386_TLS_GOTDESC:
11336     case BFD_RELOC_386_TLS_DESC_CALL:
11337     case BFD_RELOC_X86_64_TLSGD:
11338     case BFD_RELOC_X86_64_TLSLD:
11339     case BFD_RELOC_X86_64_DTPOFF32:
11340     case BFD_RELOC_X86_64_DTPOFF64:
11341     case BFD_RELOC_X86_64_GOTTPOFF:
11342     case BFD_RELOC_X86_64_TPOFF32:
11343     case BFD_RELOC_X86_64_TPOFF64:
11344     case BFD_RELOC_X86_64_GOTOFF64:
11345     case BFD_RELOC_X86_64_GOTPC32:
11346     case BFD_RELOC_X86_64_GOT64:
11347     case BFD_RELOC_X86_64_GOTPCREL64:
11348     case BFD_RELOC_X86_64_GOTPC64:
11349     case BFD_RELOC_X86_64_GOTPLT64:
11350     case BFD_RELOC_X86_64_PLTOFF64:
11351     case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
11352     case BFD_RELOC_X86_64_TLSDESC_CALL:
11353     case BFD_RELOC_RVA:
11354     case BFD_RELOC_VTABLE_ENTRY:
11355     case BFD_RELOC_VTABLE_INHERIT:
11356 #ifdef TE_PE
11357     case BFD_RELOC_32_SECREL:
11358 #endif
11359       code = fixp->fx_r_type;
11360       break;
11361     case BFD_RELOC_X86_64_32S:
11362       if (!fixp->fx_pcrel)
11363         {
11364           /* Don't turn BFD_RELOC_X86_64_32S into BFD_RELOC_32.  */
11365           code = fixp->fx_r_type;
11366           break;
11367         }
11368       /* Fall through.  */
11369     default:
11370       if (fixp->fx_pcrel)
11371         {
11372           switch (fixp->fx_size)
11373             {
11374             default:
11375               as_bad_where (fixp->fx_file, fixp->fx_line,
11376                             _("can not do %d byte pc-relative relocation"),
11377                             fixp->fx_size);
11378               code = BFD_RELOC_32_PCREL;
11379               break;
11380             case 1: code = BFD_RELOC_8_PCREL;  break;
11381             case 2: code = BFD_RELOC_16_PCREL; break;
11382             case 4: code = BFD_RELOC_32_PCREL; break;
11383 #ifdef BFD64
11384             case 8: code = BFD_RELOC_64_PCREL; break;
11385 #endif
11386             }
11387         }
11388       else
11389         {
11390           switch (fixp->fx_size)
11391             {
11392             default:
11393               as_bad_where (fixp->fx_file, fixp->fx_line,
11394                             _("can not do %d byte relocation"),
11395                             fixp->fx_size);
11396               code = BFD_RELOC_32;
11397               break;
11398             case 1: code = BFD_RELOC_8;  break;
11399             case 2: code = BFD_RELOC_16; break;
11400             case 4: code = BFD_RELOC_32; break;
11401 #ifdef BFD64
11402             case 8: code = BFD_RELOC_64; break;
11403 #endif
11404             }
11405         }
11406       break;
11407     }
11408
11409   if ((code == BFD_RELOC_32
11410        || code == BFD_RELOC_32_PCREL
11411        || code == BFD_RELOC_X86_64_32S)
11412       && GOT_symbol
11413       && fixp->fx_addsy == GOT_symbol)
11414     {
11415       if (!object_64bit)
11416         code = BFD_RELOC_386_GOTPC;
11417       else
11418         code = BFD_RELOC_X86_64_GOTPC32;
11419     }
11420   if ((code == BFD_RELOC_64 || code == BFD_RELOC_64_PCREL)
11421       && GOT_symbol
11422       && fixp->fx_addsy == GOT_symbol)
11423     {
11424       code = BFD_RELOC_X86_64_GOTPC64;
11425     }
11426
11427   rel = XNEW (arelent);
11428   rel->sym_ptr_ptr = XNEW (asymbol *);
11429   *rel->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
11430
11431   rel->address = fixp->fx_frag->fr_address + fixp->fx_where;
11432
11433   if (!use_rela_relocations)
11434     {
11435       /* HACK: Since i386 ELF uses Rel instead of Rela, encode the
11436          vtable entry to be used in the relocation's section offset.  */
11437       if (fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
11438         rel->address = fixp->fx_offset;
11439 #if defined (OBJ_COFF) && defined (TE_PE)
11440       else if (fixp->fx_addsy && S_IS_WEAK (fixp->fx_addsy))
11441         rel->addend = fixp->fx_addnumber - (S_GET_VALUE (fixp->fx_addsy) * 2);
11442       else
11443 #endif
11444       rel->addend = 0;
11445     }
11446   /* Use the rela in 64bit mode.  */
11447   else
11448     {
11449       if (disallow_64bit_reloc)
11450         switch (code)
11451           {
11452           case BFD_RELOC_X86_64_DTPOFF64:
11453           case BFD_RELOC_X86_64_TPOFF64:
11454           case BFD_RELOC_64_PCREL:
11455           case BFD_RELOC_X86_64_GOTOFF64:
11456           case BFD_RELOC_X86_64_GOT64:
11457           case BFD_RELOC_X86_64_GOTPCREL64:
11458           case BFD_RELOC_X86_64_GOTPC64:
11459           case BFD_RELOC_X86_64_GOTPLT64:
11460           case BFD_RELOC_X86_64_PLTOFF64:
11461             as_bad_where (fixp->fx_file, fixp->fx_line,
11462                           _("cannot represent relocation type %s in x32 mode"),
11463                           bfd_get_reloc_code_name (code));
11464             break;
11465           default:
11466             break;
11467           }
11468
11469       if (!fixp->fx_pcrel)
11470         rel->addend = fixp->fx_offset;
11471       else
11472         switch (code)
11473           {
11474           case BFD_RELOC_X86_64_PLT32:
11475           case BFD_RELOC_X86_64_GOT32:
11476           case BFD_RELOC_X86_64_GOTPCREL:
11477           case BFD_RELOC_X86_64_GOTPCRELX:
11478           case BFD_RELOC_X86_64_REX_GOTPCRELX:
11479           case BFD_RELOC_X86_64_TLSGD:
11480           case BFD_RELOC_X86_64_TLSLD:
11481           case BFD_RELOC_X86_64_GOTTPOFF:
11482           case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
11483           case BFD_RELOC_X86_64_TLSDESC_CALL:
11484             rel->addend = fixp->fx_offset - fixp->fx_size;
11485             break;
11486           default:
11487             rel->addend = (section->vma
11488                            - fixp->fx_size
11489                            + fixp->fx_addnumber
11490                            + md_pcrel_from (fixp));
11491             break;
11492           }
11493     }
11494
11495   rel->howto = bfd_reloc_type_lookup (stdoutput, code);
11496   if (rel->howto == NULL)
11497     {
11498       as_bad_where (fixp->fx_file, fixp->fx_line,
11499                     _("cannot represent relocation type %s"),
11500                     bfd_get_reloc_code_name (code));
11501       /* Set howto to a garbage value so that we can keep going.  */
11502       rel->howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_32);
11503       gas_assert (rel->howto != NULL);
11504     }
11505
11506   return rel;
11507 }
11508
11509 #include "tc-i386-intel.c"
11510
11511 void
11512 tc_x86_parse_to_dw2regnum (expressionS *exp)
11513 {
11514   int saved_naked_reg;
11515   char saved_register_dot;
11516
11517   saved_naked_reg = allow_naked_reg;
11518   allow_naked_reg = 1;
11519   saved_register_dot = register_chars['.'];
11520   register_chars['.'] = '.';
11521   allow_pseudo_reg = 1;
11522   expression_and_evaluate (exp);
11523   allow_pseudo_reg = 0;
11524   register_chars['.'] = saved_register_dot;
11525   allow_naked_reg = saved_naked_reg;
11526
11527   if (exp->X_op == O_register && exp->X_add_number >= 0)
11528     {
11529       if ((addressT) exp->X_add_number < i386_regtab_size)
11530         {
11531           exp->X_op = O_constant;
11532           exp->X_add_number = i386_regtab[exp->X_add_number]
11533                               .dw2_regnum[flag_code >> 1];
11534         }
11535       else
11536         exp->X_op = O_illegal;
11537     }
11538 }
11539
11540 void
11541 tc_x86_frame_initial_instructions (void)
11542 {
11543   static unsigned int sp_regno[2];
11544
11545   if (!sp_regno[flag_code >> 1])
11546     {
11547       char *saved_input = input_line_pointer;
11548       char sp[][4] = {"esp", "rsp"};
11549       expressionS exp;
11550
11551       input_line_pointer = sp[flag_code >> 1];
11552       tc_x86_parse_to_dw2regnum (&exp);
11553       gas_assert (exp.X_op == O_constant);
11554       sp_regno[flag_code >> 1] = exp.X_add_number;
11555       input_line_pointer = saved_input;
11556     }
11557
11558   cfi_add_CFA_def_cfa (sp_regno[flag_code >> 1], -x86_cie_data_alignment);
11559   cfi_add_CFA_offset (x86_dwarf2_return_column, x86_cie_data_alignment);
11560 }
11561
11562 int
11563 x86_dwarf2_addr_size (void)
11564 {
11565 #if defined (OBJ_MAYBE_ELF) || defined (OBJ_ELF)
11566   if (x86_elf_abi == X86_64_X32_ABI)
11567     return 4;
11568 #endif
11569   return bfd_arch_bits_per_address (stdoutput) / 8;
11570 }
11571
11572 int
11573 i386_elf_section_type (const char *str, size_t len)
11574 {
11575   if (flag_code == CODE_64BIT
11576       && len == sizeof ("unwind") - 1
11577       && strncmp (str, "unwind", 6) == 0)
11578     return SHT_X86_64_UNWIND;
11579
11580   return -1;
11581 }
11582
11583 #ifdef TE_SOLARIS
11584 void
11585 i386_solaris_fix_up_eh_frame (segT sec)
11586 {
11587   if (flag_code == CODE_64BIT)
11588     elf_section_type (sec) = SHT_X86_64_UNWIND;
11589 }
11590 #endif
11591
11592 #ifdef TE_PE
11593 void
11594 tc_pe_dwarf2_emit_offset (symbolS *symbol, unsigned int size)
11595 {
11596   expressionS exp;
11597
11598   exp.X_op = O_secrel;
11599   exp.X_add_symbol = symbol;
11600   exp.X_add_number = 0;
11601   emit_expr (&exp, size);
11602 }
11603 #endif
11604
11605 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
11606 /* For ELF on x86-64, add support for SHF_X86_64_LARGE.  */
11607
11608 bfd_vma
11609 x86_64_section_letter (int letter, const char **ptr_msg)
11610 {
11611   if (flag_code == CODE_64BIT)
11612     {
11613       if (letter == 'l')
11614         return SHF_X86_64_LARGE;
11615
11616       *ptr_msg = _("bad .section directive: want a,l,w,x,M,S,G,T in string");
11617     }
11618   else
11619     *ptr_msg = _("bad .section directive: want a,w,x,M,S,G,T in string");
11620   return -1;
11621 }
11622
11623 bfd_vma
11624 x86_64_section_word (char *str, size_t len)
11625 {
11626   if (len == 5 && flag_code == CODE_64BIT && CONST_STRNEQ (str, "large"))
11627     return SHF_X86_64_LARGE;
11628
11629   return -1;
11630 }
11631
11632 static void
11633 handle_large_common (int small ATTRIBUTE_UNUSED)
11634 {
11635   if (flag_code != CODE_64BIT)
11636     {
11637       s_comm_internal (0, elf_common_parse);
11638       as_warn (_(".largecomm supported only in 64bit mode, producing .comm"));
11639     }
11640   else
11641     {
11642       static segT lbss_section;
11643       asection *saved_com_section_ptr = elf_com_section_ptr;
11644       asection *saved_bss_section = bss_section;
11645
11646       if (lbss_section == NULL)
11647         {
11648           flagword applicable;
11649           segT seg = now_seg;
11650           subsegT subseg = now_subseg;
11651
11652           /* The .lbss section is for local .largecomm symbols.  */
11653           lbss_section = subseg_new (".lbss", 0);
11654           applicable = bfd_applicable_section_flags (stdoutput);
11655           bfd_set_section_flags (stdoutput, lbss_section,
11656                                  applicable & SEC_ALLOC);
11657           seg_info (lbss_section)->bss = 1;
11658
11659           subseg_set (seg, subseg);
11660         }
11661
11662       elf_com_section_ptr = &_bfd_elf_large_com_section;
11663       bss_section = lbss_section;
11664
11665       s_comm_internal (0, elf_common_parse);
11666
11667       elf_com_section_ptr = saved_com_section_ptr;
11668       bss_section = saved_bss_section;
11669     }
11670 }
11671 #endif /* OBJ_ELF || OBJ_MAYBE_ELF */