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