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