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