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