6f30dda133b5b1f4e69970b47c0bc7d7f7bbf4fb
[platform/upstream/binutils.git] / gas / config / tc-i386.c
1 /* tc-i386.c -- Assemble code for the Intel 80386
2    Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
3    2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
4    Free Software Foundation, Inc.
5
6    This file is part of GAS, the GNU Assembler.
7
8    GAS is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3, or (at your option)
11    any later version.
12
13    GAS is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with GAS; see the file COPYING.  If not, write to the Free
20    Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
21    02110-1301, USA.  */
22
23 /* Intel 80386 machine specific gas.
24    Written by Eliot Dresselhaus (eliot@mgm.mit.edu).
25    x86_64 support by Jan Hubicka (jh@suse.cz)
26    VIA PadLock support by Michal Ludvig (mludvig@suse.cz)
27    Bugs & suggestions are completely welcome.  This is free software.
28    Please help us make it better.  */
29
30 #include "as.h"
31 #include "safe-ctype.h"
32 #include "subsegs.h"
33 #include "dwarf2dbg.h"
34 #include "dw2gencfi.h"
35 #include "elf/x86-64.h"
36 #include "opcodes/i386-init.h"
37
38 #ifndef REGISTER_WARNINGS
39 #define REGISTER_WARNINGS 1
40 #endif
41
42 #ifndef INFER_ADDR_PREFIX
43 #define INFER_ADDR_PREFIX 1
44 #endif
45
46 #ifndef DEFAULT_ARCH
47 #define DEFAULT_ARCH "i386"
48 #endif
49
50 #ifndef INLINE
51 #if __GNUC__ >= 2
52 #define INLINE __inline__
53 #else
54 #define INLINE
55 #endif
56 #endif
57
58 /* Prefixes will be emitted in the order defined below.
59    WAIT_PREFIX must be the first prefix since FWAIT is really is an
60    instruction, and so must come before any prefixes.
61    The preferred prefix order is SEG_PREFIX, ADDR_PREFIX, DATA_PREFIX,
62    REP_PREFIX, LOCK_PREFIX.  */
63 #define WAIT_PREFIX     0
64 #define SEG_PREFIX      1
65 #define ADDR_PREFIX     2
66 #define DATA_PREFIX     3
67 #define REP_PREFIX      4
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 #define XMMWORD_MNEM_SUFFIX  'x'
85 #define YMMWORD_MNEM_SUFFIX 'y'
86 /* Intel Syntax.  Use a non-ascii letter since since it never appears
87    in instructions.  */
88 #define LONG_DOUBLE_MNEM_SUFFIX '\1'
89
90 #define END_OF_INSN '\0'
91
92 /*
93   'templates' is for grouping together 'template' structures for opcodes
94   of the same name.  This is only used for storing the insns in the grand
95   ole hash table of insns.
96   The templates themselves start at START and range up to (but not including)
97   END.
98   */
99 typedef struct
100 {
101   const insn_template *start;
102   const insn_template *end;
103 }
104 templates;
105
106 /* 386 operand encoding bytes:  see 386 book for details of this.  */
107 typedef struct
108 {
109   unsigned int regmem;  /* codes register or memory operand */
110   unsigned int reg;     /* codes register operand (or extended opcode) */
111   unsigned int mode;    /* how to interpret regmem & reg */
112 }
113 modrm_byte;
114
115 /* x86-64 extension prefix.  */
116 typedef int rex_byte;
117
118 /* 386 opcode byte to code indirect addressing.  */
119 typedef struct
120 {
121   unsigned base;
122   unsigned index;
123   unsigned scale;
124 }
125 sib_byte;
126
127 /* x86 arch names, types and features */
128 typedef struct
129 {
130   const char *name;             /* arch name */
131   unsigned int len;             /* arch string length */
132   enum processor_type type;     /* arch type */
133   i386_cpu_flags flags;         /* cpu feature flags */
134   unsigned int skip;            /* show_arch should skip this. */
135   unsigned int negated;         /* turn off indicated flags.  */
136 }
137 arch_entry;
138
139 static void update_code_flag (int, int);
140 static void set_code_flag (int);
141 static void set_16bit_gcc_code_flag (int);
142 static void set_intel_syntax (int);
143 static void set_intel_mnemonic (int);
144 static void set_allow_index_reg (int);
145 static void set_sse_check (int);
146 static void set_cpu_arch (int);
147 #ifdef TE_PE
148 static void pe_directive_secrel (int);
149 #endif
150 static void signed_cons (int);
151 static char *output_invalid (int c);
152 static int i386_finalize_immediate (segT, expressionS *, i386_operand_type,
153                                     const char *);
154 static int i386_finalize_displacement (segT, expressionS *, i386_operand_type,
155                                        const char *);
156 static int i386_att_operand (char *);
157 static int i386_intel_operand (char *, int);
158 static int i386_intel_simplify (expressionS *);
159 static int i386_intel_parse_name (const char *, expressionS *);
160 static const reg_entry *parse_register (char *, char **);
161 static char *parse_insn (char *, char *);
162 static char *parse_operands (char *, const char *);
163 static void swap_operands (void);
164 static void swap_2_operands (int, int);
165 static void optimize_imm (void);
166 static void optimize_disp (void);
167 static const insn_template *match_template (void);
168 static int check_string (void);
169 static int process_suffix (void);
170 static int check_byte_reg (void);
171 static int check_long_reg (void);
172 static int check_qword_reg (void);
173 static int check_word_reg (void);
174 static int finalize_imm (void);
175 static int process_operands (void);
176 static const seg_entry *build_modrm_byte (void);
177 static void output_insn (void);
178 static void output_imm (fragS *, offsetT);
179 static void output_disp (fragS *, offsetT);
180 #ifndef I386COFF
181 static void s_bss (int);
182 #endif
183 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
184 static void handle_large_common (int small ATTRIBUTE_UNUSED);
185 #endif
186
187 static const char *default_arch = DEFAULT_ARCH;
188
189 /* VEX prefix.  */
190 typedef struct
191 {
192   /* VEX prefix is either 2 byte or 3 byte.  */
193   unsigned char bytes[3];
194   unsigned int length;
195   /* Destination or source register specifier.  */
196   const reg_entry *register_specifier;
197 } vex_prefix;
198
199 /* 'md_assemble ()' gathers together information and puts it into a
200    i386_insn.  */
201
202 union i386_op
203   {
204     expressionS *disps;
205     expressionS *imms;
206     const reg_entry *regs;
207   };
208
209 enum i386_error
210   {
211     operand_size_mismatch,
212     operand_type_mismatch,
213     register_type_mismatch,
214     number_of_operands_mismatch,
215     invalid_instruction_suffix,
216     bad_imm4,
217     old_gcc_only,
218     unsupported_with_intel_mnemonic,
219     unsupported_syntax,
220     unsupported
221   };
222
223 struct _i386_insn
224   {
225     /* TM holds the template for the insn were currently assembling.  */
226     insn_template tm;
227
228     /* SUFFIX holds the instruction size suffix for byte, word, dword
229        or qword, if given.  */
230     char suffix;
231
232     /* OPERANDS gives the number of given operands.  */
233     unsigned int operands;
234
235     /* REG_OPERANDS, DISP_OPERANDS, MEM_OPERANDS, IMM_OPERANDS give the number
236        of given register, displacement, memory operands and immediate
237        operands.  */
238     unsigned int reg_operands, disp_operands, mem_operands, imm_operands;
239
240     /* TYPES [i] is the type (see above #defines) which tells us how to
241        use OP[i] for the corresponding operand.  */
242     i386_operand_type types[MAX_OPERANDS];
243
244     /* Displacement expression, immediate expression, or register for each
245        operand.  */
246     union i386_op op[MAX_OPERANDS];
247
248     /* Flags for operands.  */
249     unsigned int flags[MAX_OPERANDS];
250 #define Operand_PCrel 1
251
252     /* Relocation type for operand */
253     enum bfd_reloc_code_real reloc[MAX_OPERANDS];
254
255     /* BASE_REG, INDEX_REG, and LOG2_SCALE_FACTOR are used to encode
256        the base index byte below.  */
257     const reg_entry *base_reg;
258     const reg_entry *index_reg;
259     unsigned int log2_scale_factor;
260
261     /* SEG gives the seg_entries of this insn.  They are zero unless
262        explicit segment overrides are given.  */
263     const seg_entry *seg[2];
264
265     /* PREFIX holds all the given prefix opcodes (usually null).
266        PREFIXES is the number of prefix opcodes.  */
267     unsigned int prefixes;
268     unsigned char prefix[MAX_PREFIXES];
269
270     /* RM and SIB are the modrm byte and the sib byte where the
271        addressing modes of this insn are encoded.  */
272     modrm_byte rm;
273     rex_byte rex;
274     sib_byte sib;
275     vex_prefix vex;
276
277     /* Swap operand in encoding.  */
278     unsigned int swap_operand;
279
280     /* Force 32bit displacement in encoding.  */
281     unsigned int disp32_encoding;
282
283     /* Error message.  */
284     enum i386_error error;
285   };
286
287 typedef struct _i386_insn i386_insn;
288
289 /* List of chars besides those in app.c:symbol_chars that can start an
290    operand.  Used to prevent the scrubber eating vital white-space.  */
291 const char extra_symbol_chars[] = "*%-(["
292 #ifdef LEX_AT
293         "@"
294 #endif
295 #ifdef LEX_QM
296         "?"
297 #endif
298         ;
299
300 #if (defined (TE_I386AIX)                               \
301      || ((defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)) \
302          && !defined (TE_GNU)                           \
303          && !defined (TE_LINUX)                         \
304          && !defined (TE_NETWARE)                       \
305          && !defined (TE_FreeBSD)                       \
306          && !defined (TE_NetBSD)))
307 /* This array holds the chars that always start a comment.  If the
308    pre-processor is disabled, these aren't very useful.  The option
309    --divide will remove '/' from this list.  */
310 const char *i386_comment_chars = "#/";
311 #define SVR4_COMMENT_CHARS 1
312 #define PREFIX_SEPARATOR '\\'
313
314 #else
315 const char *i386_comment_chars = "#";
316 #define PREFIX_SEPARATOR '/'
317 #endif
318
319 /* This array holds the chars that only start a comment at the beginning of
320    a line.  If the line seems to have the form '# 123 filename'
321    .line and .file directives will appear in the pre-processed output.
322    Note that input_file.c hand checks for '#' at the beginning of the
323    first line of the input file.  This is because the compiler outputs
324    #NO_APP at the beginning of its output.
325    Also note that comments started like this one will always work if
326    '/' isn't otherwise defined.  */
327 const char line_comment_chars[] = "#/";
328
329 const char line_separator_chars[] = ";";
330
331 /* Chars that can be used to separate mant from exp in floating point
332    nums.  */
333 const char EXP_CHARS[] = "eE";
334
335 /* Chars that mean this number is a floating point constant
336    As in 0f12.456
337    or    0d1.2345e12.  */
338 const char FLT_CHARS[] = "fFdDxX";
339
340 /* Tables for lexical analysis.  */
341 static char mnemonic_chars[256];
342 static char register_chars[256];
343 static char operand_chars[256];
344 static char identifier_chars[256];
345 static char digit_chars[256];
346
347 /* Lexical macros.  */
348 #define is_mnemonic_char(x) (mnemonic_chars[(unsigned char) x])
349 #define is_operand_char(x) (operand_chars[(unsigned char) x])
350 #define is_register_char(x) (register_chars[(unsigned char) x])
351 #define is_space_char(x) ((x) == ' ')
352 #define is_identifier_char(x) (identifier_chars[(unsigned char) x])
353 #define is_digit_char(x) (digit_chars[(unsigned char) x])
354
355 /* All non-digit non-letter characters that may occur in an operand.  */
356 static char operand_special_chars[] = "%$-+(,)*._~/<>|&^!:[@]";
357
358 /* md_assemble() always leaves the strings it's passed unaltered.  To
359    effect this we maintain a stack of saved characters that we've smashed
360    with '\0's (indicating end of strings for various sub-fields of the
361    assembler instruction).  */
362 static char save_stack[32];
363 static char *save_stack_p;
364 #define END_STRING_AND_SAVE(s) \
365         do { *save_stack_p++ = *(s); *(s) = '\0'; } while (0)
366 #define RESTORE_END_STRING(s) \
367         do { *(s) = *--save_stack_p; } while (0)
368
369 /* The instruction we're assembling.  */
370 static i386_insn i;
371
372 /* Possible templates for current insn.  */
373 static const templates *current_templates;
374
375 /* Per instruction expressionS buffers: max displacements & immediates.  */
376 static expressionS disp_expressions[MAX_MEMORY_OPERANDS];
377 static expressionS im_expressions[MAX_IMMEDIATE_OPERANDS];
378
379 /* Current operand we are working on.  */
380 static int this_operand = -1;
381
382 /* We support four different modes.  FLAG_CODE variable is used to distinguish
383    these.  */
384
385 enum flag_code {
386         CODE_32BIT,
387         CODE_16BIT,
388         CODE_64BIT };
389
390 static enum flag_code flag_code;
391 static unsigned int object_64bit;
392 static int use_rela_relocations = 0;
393
394 /* The ELF ABI to use.  */
395 enum x86_elf_abi
396 {
397   I386_ABI,
398   X86_64_LP64_ABI,
399   X86_64_ILP32_ABI
400 };
401
402 static enum x86_elf_abi x86_elf_abi = I386_ABI;
403
404 /* The names used to print error messages.  */
405 static const char *flag_code_names[] =
406   {
407     "32",
408     "16",
409     "64"
410   };
411
412 /* 1 for intel syntax,
413    0 if att syntax.  */
414 static int intel_syntax = 0;
415
416 /* 1 for intel mnemonic,
417    0 if att mnemonic.  */
418 static int intel_mnemonic = !SYSV386_COMPAT;
419
420 /* 1 if support old (<= 2.8.1) versions of gcc.  */
421 static int old_gcc = OLDGCC_COMPAT;
422
423 /* 1 if pseudo registers are permitted.  */
424 static int allow_pseudo_reg = 0;
425
426 /* 1 if register prefix % not required.  */
427 static int allow_naked_reg = 0;
428
429 /* 1 if pseudo index register, eiz/riz, is allowed .  */
430 static int allow_index_reg = 0;
431
432 static enum
433   {
434     sse_check_none = 0,
435     sse_check_warning,
436     sse_check_error
437   }
438 sse_check;
439
440 /* Register prefix used for error message.  */
441 static const char *register_prefix = "%";
442
443 /* Used in 16 bit gcc mode to add an l suffix to call, ret, enter,
444    leave, push, and pop instructions so that gcc has the same stack
445    frame as in 32 bit mode.  */
446 static char stackop_size = '\0';
447
448 /* Non-zero to optimize code alignment.  */
449 int optimize_align_code = 1;
450
451 /* Non-zero to quieten some warnings.  */
452 static int quiet_warnings = 0;
453
454 /* CPU name.  */
455 static const char *cpu_arch_name = NULL;
456 static char *cpu_sub_arch_name = NULL;
457
458 /* CPU feature flags.  */
459 static i386_cpu_flags cpu_arch_flags = CPU_UNKNOWN_FLAGS;
460
461 /* If we have selected a cpu we are generating instructions for.  */
462 static int cpu_arch_tune_set = 0;
463
464 /* Cpu we are generating instructions for.  */
465 enum processor_type cpu_arch_tune = PROCESSOR_UNKNOWN;
466
467 /* CPU feature flags of cpu we are generating instructions for.  */
468 static i386_cpu_flags cpu_arch_tune_flags;
469
470 /* CPU instruction set architecture used.  */
471 enum processor_type cpu_arch_isa = PROCESSOR_UNKNOWN;
472
473 /* CPU feature flags of instruction set architecture used.  */
474 i386_cpu_flags cpu_arch_isa_flags;
475
476 /* If set, conditional jumps are not automatically promoted to handle
477    larger than a byte offset.  */
478 static unsigned int no_cond_jump_promotion = 0;
479
480 /* Encode SSE instructions with VEX prefix.  */
481 static unsigned int sse2avx;
482
483 /* Encode scalar AVX instructions with specific vector length.  */
484 static enum
485   {
486     vex128 = 0,
487     vex256
488   } avxscalar;
489
490 /* Pre-defined "_GLOBAL_OFFSET_TABLE_".  */
491 static symbolS *GOT_symbol;
492
493 /* The dwarf2 return column, adjusted for 32 or 64 bit.  */
494 unsigned int x86_dwarf2_return_column;
495
496 /* The dwarf2 data alignment, adjusted for 32 or 64 bit.  */
497 int x86_cie_data_alignment;
498
499 /* Interface to relax_segment.
500    There are 3 major relax states for 386 jump insns because the
501    different types of jumps add different sizes to frags when we're
502    figuring out what sort of jump to choose to reach a given label.  */
503
504 /* Types.  */
505 #define UNCOND_JUMP 0
506 #define COND_JUMP 1
507 #define COND_JUMP86 2
508
509 /* Sizes.  */
510 #define CODE16  1
511 #define SMALL   0
512 #define SMALL16 (SMALL | CODE16)
513 #define BIG     2
514 #define BIG16   (BIG | CODE16)
515
516 #ifndef INLINE
517 #ifdef __GNUC__
518 #define INLINE __inline__
519 #else
520 #define INLINE
521 #endif
522 #endif
523
524 #define ENCODE_RELAX_STATE(type, size) \
525   ((relax_substateT) (((type) << 2) | (size)))
526 #define TYPE_FROM_RELAX_STATE(s) \
527   ((s) >> 2)
528 #define DISP_SIZE_FROM_RELAX_STATE(s) \
529     ((((s) & 3) == BIG ? 4 : (((s) & 3) == BIG16 ? 2 : 1)))
530
531 /* This table is used by relax_frag to promote short jumps to long
532    ones where necessary.  SMALL (short) jumps may be promoted to BIG
533    (32 bit long) ones, and SMALL16 jumps to BIG16 (16 bit long).  We
534    don't allow a short jump in a 32 bit code segment to be promoted to
535    a 16 bit offset jump because it's slower (requires data size
536    prefix), and doesn't work, unless the destination is in the bottom
537    64k of the code segment (The top 16 bits of eip are zeroed).  */
538
539 const relax_typeS md_relax_table[] =
540 {
541   /* The fields are:
542      1) most positive reach of this state,
543      2) most negative reach of this state,
544      3) how many bytes this mode will have in the variable part of the frag
545      4) which index into the table to try if we can't fit into this one.  */
546
547   /* UNCOND_JUMP states.  */
548   {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (UNCOND_JUMP, BIG)},
549   {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (UNCOND_JUMP, BIG16)},
550   /* dword jmp adds 4 bytes to frag:
551      0 extra opcode bytes, 4 displacement bytes.  */
552   {0, 0, 4, 0},
553   /* word jmp adds 2 byte2 to frag:
554      0 extra opcode bytes, 2 displacement bytes.  */
555   {0, 0, 2, 0},
556
557   /* COND_JUMP states.  */
558   {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP, BIG)},
559   {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP, BIG16)},
560   /* dword conditionals adds 5 bytes to frag:
561      1 extra opcode byte, 4 displacement bytes.  */
562   {0, 0, 5, 0},
563   /* word conditionals add 3 bytes to frag:
564      1 extra opcode byte, 2 displacement bytes.  */
565   {0, 0, 3, 0},
566
567   /* COND_JUMP86 states.  */
568   {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP86, BIG)},
569   {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP86, BIG16)},
570   /* dword conditionals adds 5 bytes to frag:
571      1 extra opcode byte, 4 displacement bytes.  */
572   {0, 0, 5, 0},
573   /* word conditionals add 4 bytes to frag:
574      1 displacement byte and a 3 byte long branch insn.  */
575   {0, 0, 4, 0}
576 };
577
578 static const arch_entry cpu_arch[] =
579 {
580   /* Do not replace the first two entries - i386_target_format()
581      relies on them being there in this order.  */
582   { STRING_COMMA_LEN ("generic32"), PROCESSOR_GENERIC32,
583     CPU_GENERIC32_FLAGS, 0, 0 },
584   { STRING_COMMA_LEN ("generic64"), PROCESSOR_GENERIC64,
585     CPU_GENERIC64_FLAGS, 0, 0 },
586   { STRING_COMMA_LEN ("i8086"), PROCESSOR_UNKNOWN,
587     CPU_NONE_FLAGS, 0, 0 },
588   { STRING_COMMA_LEN ("i186"), PROCESSOR_UNKNOWN,
589     CPU_I186_FLAGS, 0, 0 },
590   { STRING_COMMA_LEN ("i286"), PROCESSOR_UNKNOWN,
591     CPU_I286_FLAGS, 0, 0 },
592   { STRING_COMMA_LEN ("i386"), PROCESSOR_I386,
593     CPU_I386_FLAGS, 0, 0 },
594   { STRING_COMMA_LEN ("i486"), PROCESSOR_I486,
595     CPU_I486_FLAGS, 0, 0 },
596   { STRING_COMMA_LEN ("i586"), PROCESSOR_PENTIUM,
597     CPU_I586_FLAGS, 0, 0 },
598   { STRING_COMMA_LEN ("i686"), PROCESSOR_PENTIUMPRO,
599     CPU_I686_FLAGS, 0, 0 },
600   { STRING_COMMA_LEN ("pentium"), PROCESSOR_PENTIUM,
601     CPU_I586_FLAGS, 0, 0 },
602   { STRING_COMMA_LEN ("pentiumpro"), PROCESSOR_PENTIUMPRO,
603     CPU_PENTIUMPRO_FLAGS, 0, 0 },
604   { STRING_COMMA_LEN ("pentiumii"), PROCESSOR_PENTIUMPRO,
605     CPU_P2_FLAGS, 0, 0 },
606   { STRING_COMMA_LEN ("pentiumiii"),PROCESSOR_PENTIUMPRO,
607     CPU_P3_FLAGS, 0, 0 },
608   { STRING_COMMA_LEN ("pentium4"), PROCESSOR_PENTIUM4,
609     CPU_P4_FLAGS, 0, 0 },
610   { STRING_COMMA_LEN ("prescott"), PROCESSOR_NOCONA,
611     CPU_CORE_FLAGS, 0, 0 },
612   { STRING_COMMA_LEN ("nocona"), PROCESSOR_NOCONA,
613     CPU_NOCONA_FLAGS, 0, 0 },
614   { STRING_COMMA_LEN ("yonah"), PROCESSOR_CORE,
615     CPU_CORE_FLAGS, 1, 0 },
616   { STRING_COMMA_LEN ("core"), PROCESSOR_CORE,
617     CPU_CORE_FLAGS, 0, 0 },
618   { STRING_COMMA_LEN ("merom"), PROCESSOR_CORE2,
619     CPU_CORE2_FLAGS, 1, 0 },
620   { STRING_COMMA_LEN ("core2"), PROCESSOR_CORE2,
621     CPU_CORE2_FLAGS, 0, 0 },
622   { STRING_COMMA_LEN ("corei7"), PROCESSOR_COREI7,
623     CPU_COREI7_FLAGS, 0, 0 },
624   { STRING_COMMA_LEN ("l1om"), PROCESSOR_L1OM,
625     CPU_L1OM_FLAGS, 0, 0 },
626   { STRING_COMMA_LEN ("k6"), PROCESSOR_K6,
627     CPU_K6_FLAGS, 0, 0 },
628   { STRING_COMMA_LEN ("k6_2"), PROCESSOR_K6,
629     CPU_K6_2_FLAGS, 0, 0 },
630   { STRING_COMMA_LEN ("athlon"), PROCESSOR_ATHLON,
631     CPU_ATHLON_FLAGS, 0, 0 },
632   { STRING_COMMA_LEN ("sledgehammer"), PROCESSOR_K8,
633     CPU_K8_FLAGS, 1, 0 },
634   { STRING_COMMA_LEN ("opteron"), PROCESSOR_K8,
635     CPU_K8_FLAGS, 0, 0 },
636   { STRING_COMMA_LEN ("k8"), PROCESSOR_K8,
637     CPU_K8_FLAGS, 0, 0 },
638   { STRING_COMMA_LEN ("amdfam10"), PROCESSOR_AMDFAM10,
639     CPU_AMDFAM10_FLAGS, 0, 0 },
640   { STRING_COMMA_LEN ("bdver1"), PROCESSOR_BDVER1,
641     CPU_BDVER1_FLAGS, 0, 0 },
642   { STRING_COMMA_LEN (".8087"), PROCESSOR_UNKNOWN,
643     CPU_8087_FLAGS, 0, 0 },
644   { STRING_COMMA_LEN (".287"), PROCESSOR_UNKNOWN,
645     CPU_287_FLAGS, 0, 0 },
646   { STRING_COMMA_LEN (".387"), PROCESSOR_UNKNOWN,
647     CPU_387_FLAGS, 0, 0 },
648   { STRING_COMMA_LEN (".no87"), PROCESSOR_UNKNOWN,
649     CPU_ANY87_FLAGS, 0, 1 },
650   { STRING_COMMA_LEN (".mmx"), PROCESSOR_UNKNOWN,
651     CPU_MMX_FLAGS, 0, 0 },
652   { STRING_COMMA_LEN (".nommx"), PROCESSOR_UNKNOWN,
653     CPU_3DNOWA_FLAGS, 0, 1 },
654   { STRING_COMMA_LEN (".sse"), PROCESSOR_UNKNOWN,
655     CPU_SSE_FLAGS, 0, 0 },
656   { STRING_COMMA_LEN (".sse2"), PROCESSOR_UNKNOWN,
657     CPU_SSE2_FLAGS, 0, 0 },
658   { STRING_COMMA_LEN (".sse3"), PROCESSOR_UNKNOWN,
659     CPU_SSE3_FLAGS, 0, 0 },
660   { STRING_COMMA_LEN (".ssse3"), PROCESSOR_UNKNOWN,
661     CPU_SSSE3_FLAGS, 0, 0 },
662   { STRING_COMMA_LEN (".sse4.1"), PROCESSOR_UNKNOWN,
663     CPU_SSE4_1_FLAGS, 0, 0 },
664   { STRING_COMMA_LEN (".sse4.2"), PROCESSOR_UNKNOWN,
665     CPU_SSE4_2_FLAGS, 0, 0 },
666   { STRING_COMMA_LEN (".sse4"), PROCESSOR_UNKNOWN,
667     CPU_SSE4_2_FLAGS, 0, 0 },
668   { STRING_COMMA_LEN (".nosse"), PROCESSOR_UNKNOWN,
669     CPU_ANY_SSE_FLAGS, 0, 1 },
670   { STRING_COMMA_LEN (".avx"), PROCESSOR_UNKNOWN,
671     CPU_AVX_FLAGS, 0, 0 },
672   { STRING_COMMA_LEN (".noavx"), PROCESSOR_UNKNOWN,
673     CPU_ANY_AVX_FLAGS, 0, 1 },
674   { STRING_COMMA_LEN (".vmx"), PROCESSOR_UNKNOWN,
675     CPU_VMX_FLAGS, 0, 0 },
676   { STRING_COMMA_LEN (".smx"), PROCESSOR_UNKNOWN,
677     CPU_SMX_FLAGS, 0, 0 },
678   { STRING_COMMA_LEN (".xsave"), PROCESSOR_UNKNOWN,
679     CPU_XSAVE_FLAGS, 0, 0 },
680   { STRING_COMMA_LEN (".xsaveopt"), PROCESSOR_UNKNOWN,
681     CPU_XSAVEOPT_FLAGS, 0, 0 },
682   { STRING_COMMA_LEN (".aes"), PROCESSOR_UNKNOWN,
683     CPU_AES_FLAGS, 0, 0 },
684   { STRING_COMMA_LEN (".pclmul"), PROCESSOR_UNKNOWN,
685     CPU_PCLMUL_FLAGS, 0, 0 },
686   { STRING_COMMA_LEN (".clmul"), PROCESSOR_UNKNOWN,
687     CPU_PCLMUL_FLAGS, 1, 0 },
688   { STRING_COMMA_LEN (".fsgsbase"), PROCESSOR_UNKNOWN,
689     CPU_FSGSBASE_FLAGS, 0, 0 },
690   { STRING_COMMA_LEN (".rdrnd"), PROCESSOR_UNKNOWN,
691     CPU_RDRND_FLAGS, 0, 0 },
692   { STRING_COMMA_LEN (".f16c"), PROCESSOR_UNKNOWN,
693     CPU_F16C_FLAGS, 0, 0 },
694   { STRING_COMMA_LEN (".fma"), PROCESSOR_UNKNOWN,
695     CPU_FMA_FLAGS, 0, 0 },
696   { STRING_COMMA_LEN (".fma4"), PROCESSOR_UNKNOWN,
697     CPU_FMA4_FLAGS, 0, 0 },
698   { STRING_COMMA_LEN (".xop"), PROCESSOR_UNKNOWN,
699     CPU_XOP_FLAGS, 0, 0 },
700   { STRING_COMMA_LEN (".lwp"), PROCESSOR_UNKNOWN,
701     CPU_LWP_FLAGS, 0, 0 },
702   { STRING_COMMA_LEN (".movbe"), PROCESSOR_UNKNOWN,
703     CPU_MOVBE_FLAGS, 0, 0 },
704   { STRING_COMMA_LEN (".ept"), PROCESSOR_UNKNOWN,
705     CPU_EPT_FLAGS, 0, 0 },
706   { STRING_COMMA_LEN (".clflush"), PROCESSOR_UNKNOWN,
707     CPU_CLFLUSH_FLAGS, 0, 0 },
708   { STRING_COMMA_LEN (".nop"), PROCESSOR_UNKNOWN,
709     CPU_NOP_FLAGS, 0, 0 },
710   { STRING_COMMA_LEN (".syscall"), PROCESSOR_UNKNOWN,
711     CPU_SYSCALL_FLAGS, 0, 0 },
712   { STRING_COMMA_LEN (".rdtscp"), PROCESSOR_UNKNOWN,
713     CPU_RDTSCP_FLAGS, 0, 0 },
714   { STRING_COMMA_LEN (".3dnow"), PROCESSOR_UNKNOWN,
715     CPU_3DNOW_FLAGS, 0, 0 },
716   { STRING_COMMA_LEN (".3dnowa"), PROCESSOR_UNKNOWN,
717     CPU_3DNOWA_FLAGS, 0, 0 },
718   { STRING_COMMA_LEN (".padlock"), PROCESSOR_UNKNOWN,
719     CPU_PADLOCK_FLAGS, 0, 0 },
720   { STRING_COMMA_LEN (".pacifica"), PROCESSOR_UNKNOWN,
721     CPU_SVME_FLAGS, 1, 0 },
722   { STRING_COMMA_LEN (".svme"), PROCESSOR_UNKNOWN,
723     CPU_SVME_FLAGS, 0, 0 },
724   { STRING_COMMA_LEN (".sse4a"), PROCESSOR_UNKNOWN,
725     CPU_SSE4A_FLAGS, 0, 0 },
726   { STRING_COMMA_LEN (".abm"), PROCESSOR_UNKNOWN,
727     CPU_ABM_FLAGS, 0, 0 },
728   { STRING_COMMA_LEN (".bmi"), PROCESSOR_UNKNOWN,
729     CPU_BMI_FLAGS, 0, 0 },
730 };
731
732 #ifdef I386COFF
733 /* Like s_lcomm_internal in gas/read.c but the alignment string
734    is allowed to be optional.  */
735
736 static symbolS *
737 pe_lcomm_internal (int needs_align, symbolS *symbolP, addressT size)
738 {
739   addressT align = 0;
740
741   SKIP_WHITESPACE ();
742
743   if (needs_align
744       && *input_line_pointer == ',')
745     {
746       align = parse_align (needs_align - 1);
747
748       if (align == (addressT) -1)
749         return NULL;
750     }
751   else
752     {
753       if (size >= 8)
754         align = 3;
755       else if (size >= 4)
756         align = 2;
757       else if (size >= 2)
758         align = 1;
759       else
760         align = 0;
761     }
762
763   bss_alloc (symbolP, size, align);
764   return symbolP;
765 }
766
767 static void
768 pe_lcomm (int needs_align)
769 {
770   s_comm_internal (needs_align * 2, pe_lcomm_internal);
771 }
772 #endif
773
774 const pseudo_typeS md_pseudo_table[] =
775 {
776 #if !defined(OBJ_AOUT) && !defined(USE_ALIGN_PTWO)
777   {"align", s_align_bytes, 0},
778 #else
779   {"align", s_align_ptwo, 0},
780 #endif
781   {"arch", set_cpu_arch, 0},
782 #ifndef I386COFF
783   {"bss", s_bss, 0},
784 #else
785   {"lcomm", pe_lcomm, 1},
786 #endif
787   {"ffloat", float_cons, 'f'},
788   {"dfloat", float_cons, 'd'},
789   {"tfloat", float_cons, 'x'},
790   {"value", cons, 2},
791   {"slong", signed_cons, 4},
792   {"noopt", s_ignore, 0},
793   {"optim", s_ignore, 0},
794   {"code16gcc", set_16bit_gcc_code_flag, CODE_16BIT},
795   {"code16", set_code_flag, CODE_16BIT},
796   {"code32", set_code_flag, CODE_32BIT},
797   {"code64", set_code_flag, CODE_64BIT},
798   {"intel_syntax", set_intel_syntax, 1},
799   {"att_syntax", set_intel_syntax, 0},
800   {"intel_mnemonic", set_intel_mnemonic, 1},
801   {"att_mnemonic", set_intel_mnemonic, 0},
802   {"allow_index_reg", set_allow_index_reg, 1},
803   {"disallow_index_reg", set_allow_index_reg, 0},
804   {"sse_check", set_sse_check, 0},
805 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
806   {"largecomm", handle_large_common, 0},
807 #else
808   {"file", (void (*) (int)) dwarf2_directive_file, 0},
809   {"loc", dwarf2_directive_loc, 0},
810   {"loc_mark_labels", dwarf2_directive_loc_mark_labels, 0},
811 #endif
812 #ifdef TE_PE
813   {"secrel32", pe_directive_secrel, 0},
814 #endif
815   {0, 0, 0}
816 };
817
818 /* For interface with expression ().  */
819 extern char *input_line_pointer;
820
821 /* Hash table for instruction mnemonic lookup.  */
822 static struct hash_control *op_hash;
823
824 /* Hash table for register lookup.  */
825 static struct hash_control *reg_hash;
826 \f
827 void
828 i386_align_code (fragS *fragP, int count)
829 {
830   /* Various efficient no-op patterns for aligning code labels.
831      Note: Don't try to assemble the instructions in the comments.
832      0L and 0w are not legal.  */
833   static const char f32_1[] =
834     {0x90};                                     /* nop                  */
835   static const char f32_2[] =
836     {0x66,0x90};                                /* xchg %ax,%ax */
837   static const char f32_3[] =
838     {0x8d,0x76,0x00};                           /* leal 0(%esi),%esi    */
839   static const char f32_4[] =
840     {0x8d,0x74,0x26,0x00};                      /* leal 0(%esi,1),%esi  */
841   static const char f32_5[] =
842     {0x90,                                      /* nop                  */
843      0x8d,0x74,0x26,0x00};                      /* leal 0(%esi,1),%esi  */
844   static const char f32_6[] =
845     {0x8d,0xb6,0x00,0x00,0x00,0x00};            /* leal 0L(%esi),%esi   */
846   static const char f32_7[] =
847     {0x8d,0xb4,0x26,0x00,0x00,0x00,0x00};       /* leal 0L(%esi,1),%esi */
848   static const char f32_8[] =
849     {0x90,                                      /* nop                  */
850      0x8d,0xb4,0x26,0x00,0x00,0x00,0x00};       /* leal 0L(%esi,1),%esi */
851   static const char f32_9[] =
852     {0x89,0xf6,                                 /* movl %esi,%esi       */
853      0x8d,0xbc,0x27,0x00,0x00,0x00,0x00};       /* leal 0L(%edi,1),%edi */
854   static const char f32_10[] =
855     {0x8d,0x76,0x00,                            /* leal 0(%esi),%esi    */
856      0x8d,0xbc,0x27,0x00,0x00,0x00,0x00};       /* leal 0L(%edi,1),%edi */
857   static const char f32_11[] =
858     {0x8d,0x74,0x26,0x00,                       /* leal 0(%esi,1),%esi  */
859      0x8d,0xbc,0x27,0x00,0x00,0x00,0x00};       /* leal 0L(%edi,1),%edi */
860   static const char f32_12[] =
861     {0x8d,0xb6,0x00,0x00,0x00,0x00,             /* leal 0L(%esi),%esi   */
862      0x8d,0xbf,0x00,0x00,0x00,0x00};            /* leal 0L(%edi),%edi   */
863   static const char f32_13[] =
864     {0x8d,0xb6,0x00,0x00,0x00,0x00,             /* leal 0L(%esi),%esi   */
865      0x8d,0xbc,0x27,0x00,0x00,0x00,0x00};       /* leal 0L(%edi,1),%edi */
866   static const char f32_14[] =
867     {0x8d,0xb4,0x26,0x00,0x00,0x00,0x00,        /* leal 0L(%esi,1),%esi */
868      0x8d,0xbc,0x27,0x00,0x00,0x00,0x00};       /* leal 0L(%edi,1),%edi */
869   static const char f16_3[] =
870     {0x8d,0x74,0x00};                           /* lea 0(%esi),%esi     */
871   static const char f16_4[] =
872     {0x8d,0xb4,0x00,0x00};                      /* lea 0w(%si),%si      */
873   static const char f16_5[] =
874     {0x90,                                      /* nop                  */
875      0x8d,0xb4,0x00,0x00};                      /* lea 0w(%si),%si      */
876   static const char f16_6[] =
877     {0x89,0xf6,                                 /* mov %si,%si          */
878      0x8d,0xbd,0x00,0x00};                      /* lea 0w(%di),%di      */
879   static const char f16_7[] =
880     {0x8d,0x74,0x00,                            /* lea 0(%si),%si       */
881      0x8d,0xbd,0x00,0x00};                      /* lea 0w(%di),%di      */
882   static const char f16_8[] =
883     {0x8d,0xb4,0x00,0x00,                       /* lea 0w(%si),%si      */
884      0x8d,0xbd,0x00,0x00};                      /* lea 0w(%di),%di      */
885   static const char jump_31[] =
886     {0xeb,0x1d,0x90,0x90,0x90,0x90,0x90,        /* jmp .+31; lotsa nops */
887      0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
888      0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
889      0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90};
890   static const char *const f32_patt[] = {
891     f32_1, f32_2, f32_3, f32_4, f32_5, f32_6, f32_7, f32_8,
892     f32_9, f32_10, f32_11, f32_12, f32_13, f32_14
893   };
894   static const char *const f16_patt[] = {
895     f32_1, f32_2, f16_3, f16_4, f16_5, f16_6, f16_7, f16_8
896   };
897   /* nopl (%[re]ax) */
898   static const char alt_3[] =
899     {0x0f,0x1f,0x00};
900   /* nopl 0(%[re]ax) */
901   static const char alt_4[] =
902     {0x0f,0x1f,0x40,0x00};
903   /* nopl 0(%[re]ax,%[re]ax,1) */
904   static const char alt_5[] =
905     {0x0f,0x1f,0x44,0x00,0x00};
906   /* nopw 0(%[re]ax,%[re]ax,1) */
907   static const char alt_6[] =
908     {0x66,0x0f,0x1f,0x44,0x00,0x00};
909   /* nopl 0L(%[re]ax) */
910   static const char alt_7[] =
911     {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
912   /* nopl 0L(%[re]ax,%[re]ax,1) */
913   static const char alt_8[] =
914     {0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
915   /* nopw 0L(%[re]ax,%[re]ax,1) */
916   static const char alt_9[] =
917     {0x66,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
918   /* nopw %cs:0L(%[re]ax,%[re]ax,1) */
919   static const char alt_10[] =
920     {0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
921   /* data16
922      nopw %cs:0L(%[re]ax,%[re]ax,1) */
923   static const char alt_long_11[] =
924     {0x66,
925      0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
926   /* data16
927      data16
928      nopw %cs:0L(%[re]ax,%[re]ax,1) */
929   static const char alt_long_12[] =
930     {0x66,
931      0x66,
932      0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
933   /* data16
934      data16
935      data16
936      nopw %cs:0L(%[re]ax,%[re]ax,1) */
937   static const char alt_long_13[] =
938     {0x66,
939      0x66,
940      0x66,
941      0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
942   /* data16
943      data16
944      data16
945      data16
946      nopw %cs:0L(%[re]ax,%[re]ax,1) */
947   static const char alt_long_14[] =
948     {0x66,
949      0x66,
950      0x66,
951      0x66,
952      0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
953   /* data16
954      data16
955      data16
956      data16
957      data16
958      nopw %cs:0L(%[re]ax,%[re]ax,1) */
959   static const char alt_long_15[] =
960     {0x66,
961      0x66,
962      0x66,
963      0x66,
964      0x66,
965      0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
966   /* nopl 0(%[re]ax,%[re]ax,1)
967      nopw 0(%[re]ax,%[re]ax,1) */
968   static const char alt_short_11[] =
969     {0x0f,0x1f,0x44,0x00,0x00,
970      0x66,0x0f,0x1f,0x44,0x00,0x00};
971   /* nopw 0(%[re]ax,%[re]ax,1)
972      nopw 0(%[re]ax,%[re]ax,1) */
973   static const char alt_short_12[] =
974     {0x66,0x0f,0x1f,0x44,0x00,0x00,
975      0x66,0x0f,0x1f,0x44,0x00,0x00};
976   /* nopw 0(%[re]ax,%[re]ax,1)
977      nopl 0L(%[re]ax) */
978   static const char alt_short_13[] =
979     {0x66,0x0f,0x1f,0x44,0x00,0x00,
980      0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
981   /* nopl 0L(%[re]ax)
982      nopl 0L(%[re]ax) */
983   static const char alt_short_14[] =
984     {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00,
985      0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
986   /* nopl 0L(%[re]ax)
987      nopl 0L(%[re]ax,%[re]ax,1) */
988   static const char alt_short_15[] =
989     {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00,
990      0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
991   static const char *const alt_short_patt[] = {
992     f32_1, f32_2, alt_3, alt_4, alt_5, alt_6, alt_7, alt_8,
993     alt_9, alt_10, alt_short_11, alt_short_12, alt_short_13,
994     alt_short_14, alt_short_15
995   };
996   static const char *const alt_long_patt[] = {
997     f32_1, f32_2, alt_3, alt_4, alt_5, alt_6, alt_7, alt_8,
998     alt_9, alt_10, alt_long_11, alt_long_12, alt_long_13,
999     alt_long_14, alt_long_15
1000   };
1001
1002   /* Only align for at least a positive non-zero boundary. */
1003   if (count <= 0 || count > MAX_MEM_FOR_RS_ALIGN_CODE)
1004     return;
1005
1006   /* We need to decide which NOP sequence to use for 32bit and
1007      64bit. When -mtune= is used:
1008
1009      1. For PROCESSOR_I386, PROCESSOR_I486, PROCESSOR_PENTIUM and
1010      PROCESSOR_GENERIC32, f32_patt will be used.
1011      2. For PROCESSOR_PENTIUMPRO, PROCESSOR_PENTIUM4, PROCESSOR_NOCONA,
1012      PROCESSOR_CORE, PROCESSOR_CORE2, PROCESSOR_COREI7, and
1013      PROCESSOR_GENERIC64, alt_long_patt will be used.
1014      3. For PROCESSOR_ATHLON, PROCESSOR_K6, PROCESSOR_K8 and
1015      PROCESSOR_AMDFAM10, and PROCESSOR_BDVER1, alt_short_patt
1016      will be used.
1017
1018      When -mtune= isn't used, alt_long_patt will be used if
1019      cpu_arch_isa_flags has CpuNop.  Otherwise, f32_patt will
1020      be used.
1021
1022      When -march= or .arch is used, we can't use anything beyond
1023      cpu_arch_isa_flags.   */
1024
1025   if (flag_code == CODE_16BIT)
1026     {
1027       if (count > 8)
1028         {
1029           memcpy (fragP->fr_literal + fragP->fr_fix,
1030                   jump_31, count);
1031           /* Adjust jump offset.  */
1032           fragP->fr_literal[fragP->fr_fix + 1] = count - 2;
1033         }
1034       else
1035         memcpy (fragP->fr_literal + fragP->fr_fix,
1036                 f16_patt[count - 1], count);
1037     }
1038   else
1039     {
1040       const char *const *patt = NULL;
1041
1042       if (fragP->tc_frag_data.isa == PROCESSOR_UNKNOWN)
1043         {
1044           /* PROCESSOR_UNKNOWN means that all ISAs may be used.  */
1045           switch (cpu_arch_tune)
1046             {
1047             case PROCESSOR_UNKNOWN:
1048               /* We use cpu_arch_isa_flags to check if we SHOULD
1049                  optimize with nops.  */
1050               if (fragP->tc_frag_data.isa_flags.bitfield.cpunop)
1051                 patt = alt_long_patt;
1052               else
1053                 patt = f32_patt;
1054               break;
1055             case PROCESSOR_PENTIUMPRO:
1056             case PROCESSOR_PENTIUM4:
1057             case PROCESSOR_NOCONA:
1058             case PROCESSOR_CORE:
1059             case PROCESSOR_CORE2:
1060             case PROCESSOR_COREI7:
1061             case PROCESSOR_L1OM:
1062             case PROCESSOR_GENERIC64:
1063               patt = alt_long_patt;
1064               break;
1065             case PROCESSOR_K6:
1066             case PROCESSOR_ATHLON:
1067             case PROCESSOR_K8:
1068             case PROCESSOR_AMDFAM10:
1069             case PROCESSOR_BDVER1:
1070               patt = alt_short_patt;
1071               break;
1072             case PROCESSOR_I386:
1073             case PROCESSOR_I486:
1074             case PROCESSOR_PENTIUM:
1075             case PROCESSOR_GENERIC32:
1076               patt = f32_patt;
1077               break;
1078             }
1079         }
1080       else
1081         {
1082           switch (fragP->tc_frag_data.tune)
1083             {
1084             case PROCESSOR_UNKNOWN:
1085               /* When cpu_arch_isa is set, cpu_arch_tune shouldn't be
1086                  PROCESSOR_UNKNOWN.  */
1087               abort ();
1088               break;
1089
1090             case PROCESSOR_I386:
1091             case PROCESSOR_I486:
1092             case PROCESSOR_PENTIUM:
1093             case PROCESSOR_K6:
1094             case PROCESSOR_ATHLON:
1095             case PROCESSOR_K8:
1096             case PROCESSOR_AMDFAM10:
1097             case PROCESSOR_BDVER1:
1098             case PROCESSOR_GENERIC32:
1099               /* We use cpu_arch_isa_flags to check if we CAN optimize
1100                  with nops.  */
1101               if (fragP->tc_frag_data.isa_flags.bitfield.cpunop)
1102                 patt = alt_short_patt;
1103               else
1104                 patt = f32_patt;
1105               break;
1106             case PROCESSOR_PENTIUMPRO:
1107             case PROCESSOR_PENTIUM4:
1108             case PROCESSOR_NOCONA:
1109             case PROCESSOR_CORE:
1110             case PROCESSOR_CORE2:
1111             case PROCESSOR_COREI7:
1112             case PROCESSOR_L1OM:
1113               if (fragP->tc_frag_data.isa_flags.bitfield.cpunop)
1114                 patt = alt_long_patt;
1115               else
1116                 patt = f32_patt;
1117               break;
1118             case PROCESSOR_GENERIC64:
1119               patt = alt_long_patt;
1120               break;
1121             }
1122         }
1123
1124       if (patt == f32_patt)
1125         {
1126           /* If the padding is less than 15 bytes, we use the normal
1127              ones.  Otherwise, we use a jump instruction and adjust
1128              its offset.   */
1129           int limit;
1130
1131           /* For 64bit, the limit is 3 bytes.  */
1132           if (flag_code == CODE_64BIT
1133               && fragP->tc_frag_data.isa_flags.bitfield.cpulm)
1134             limit = 3;
1135           else
1136             limit = 15;
1137           if (count < limit)
1138             memcpy (fragP->fr_literal + fragP->fr_fix,
1139                     patt[count - 1], count);
1140           else
1141             {
1142               memcpy (fragP->fr_literal + fragP->fr_fix,
1143                       jump_31, count);
1144               /* Adjust jump offset.  */
1145               fragP->fr_literal[fragP->fr_fix + 1] = count - 2;
1146             }
1147         }
1148       else
1149         {
1150           /* Maximum length of an instruction is 15 byte.  If the
1151              padding is greater than 15 bytes and we don't use jump,
1152              we have to break it into smaller pieces.  */
1153           int padding = count;
1154           while (padding > 15)
1155             {
1156               padding -= 15;
1157               memcpy (fragP->fr_literal + fragP->fr_fix + padding,
1158                       patt [14], 15);
1159             }
1160
1161           if (padding)
1162             memcpy (fragP->fr_literal + fragP->fr_fix,
1163                     patt [padding - 1], padding);
1164         }
1165     }
1166   fragP->fr_var = count;
1167 }
1168
1169 static INLINE int
1170 operand_type_all_zero (const union i386_operand_type *x)
1171 {
1172   switch (ARRAY_SIZE(x->array))
1173     {
1174     case 3:
1175       if (x->array[2])
1176         return 0;
1177     case 2:
1178       if (x->array[1])
1179         return 0;
1180     case 1:
1181       return !x->array[0];
1182     default:
1183       abort ();
1184     }
1185 }
1186
1187 static INLINE void
1188 operand_type_set (union i386_operand_type *x, unsigned int v)
1189 {
1190   switch (ARRAY_SIZE(x->array))
1191     {
1192     case 3:
1193       x->array[2] = v;
1194     case 2:
1195       x->array[1] = v;
1196     case 1:
1197       x->array[0] = v;
1198       break;
1199     default:
1200       abort ();
1201     }
1202 }
1203
1204 static INLINE int
1205 operand_type_equal (const union i386_operand_type *x,
1206                     const union i386_operand_type *y)
1207 {
1208   switch (ARRAY_SIZE(x->array))
1209     {
1210     case 3:
1211       if (x->array[2] != y->array[2])
1212         return 0;
1213     case 2:
1214       if (x->array[1] != y->array[1])
1215         return 0;
1216     case 1:
1217       return x->array[0] == y->array[0];
1218       break;
1219     default:
1220       abort ();
1221     }
1222 }
1223
1224 static INLINE int
1225 cpu_flags_all_zero (const union i386_cpu_flags *x)
1226 {
1227   switch (ARRAY_SIZE(x->array))
1228     {
1229     case 3:
1230       if (x->array[2])
1231         return 0;
1232     case 2:
1233       if (x->array[1])
1234         return 0;
1235     case 1:
1236       return !x->array[0];
1237     default:
1238       abort ();
1239     }
1240 }
1241
1242 static INLINE void
1243 cpu_flags_set (union i386_cpu_flags *x, unsigned int v)
1244 {
1245   switch (ARRAY_SIZE(x->array))
1246     {
1247     case 3:
1248       x->array[2] = v;
1249     case 2:
1250       x->array[1] = v;
1251     case 1:
1252       x->array[0] = v;
1253       break;
1254     default:
1255       abort ();
1256     }
1257 }
1258
1259 static INLINE int
1260 cpu_flags_equal (const union i386_cpu_flags *x,
1261                  const union i386_cpu_flags *y)
1262 {
1263   switch (ARRAY_SIZE(x->array))
1264     {
1265     case 3:
1266       if (x->array[2] != y->array[2])
1267         return 0;
1268     case 2:
1269       if (x->array[1] != y->array[1])
1270         return 0;
1271     case 1:
1272       return x->array[0] == y->array[0];
1273       break;
1274     default:
1275       abort ();
1276     }
1277 }
1278
1279 static INLINE int
1280 cpu_flags_check_cpu64 (i386_cpu_flags f)
1281 {
1282   return !((flag_code == CODE_64BIT && f.bitfield.cpuno64)
1283            || (flag_code != CODE_64BIT && f.bitfield.cpu64));
1284 }
1285
1286 static INLINE i386_cpu_flags
1287 cpu_flags_and (i386_cpu_flags x, i386_cpu_flags y)
1288 {
1289   switch (ARRAY_SIZE (x.array))
1290     {
1291     case 3:
1292       x.array [2] &= y.array [2];
1293     case 2:
1294       x.array [1] &= y.array [1];
1295     case 1:
1296       x.array [0] &= y.array [0];
1297       break;
1298     default:
1299       abort ();
1300     }
1301   return x;
1302 }
1303
1304 static INLINE i386_cpu_flags
1305 cpu_flags_or (i386_cpu_flags x, i386_cpu_flags y)
1306 {
1307   switch (ARRAY_SIZE (x.array))
1308     {
1309     case 3:
1310       x.array [2] |= y.array [2];
1311     case 2:
1312       x.array [1] |= y.array [1];
1313     case 1:
1314       x.array [0] |= y.array [0];
1315       break;
1316     default:
1317       abort ();
1318     }
1319   return x;
1320 }
1321
1322 static INLINE i386_cpu_flags
1323 cpu_flags_and_not (i386_cpu_flags x, i386_cpu_flags y)
1324 {
1325   switch (ARRAY_SIZE (x.array))
1326     {
1327     case 3:
1328       x.array [2] &= ~y.array [2];
1329     case 2:
1330       x.array [1] &= ~y.array [1];
1331     case 1:
1332       x.array [0] &= ~y.array [0];
1333       break;
1334     default:
1335       abort ();
1336     }
1337   return x;
1338 }
1339
1340 #define CPU_FLAGS_ARCH_MATCH            0x1
1341 #define CPU_FLAGS_64BIT_MATCH           0x2
1342 #define CPU_FLAGS_AES_MATCH             0x4
1343 #define CPU_FLAGS_PCLMUL_MATCH          0x8
1344 #define CPU_FLAGS_AVX_MATCH            0x10
1345
1346 #define CPU_FLAGS_32BIT_MATCH \
1347   (CPU_FLAGS_ARCH_MATCH | CPU_FLAGS_AES_MATCH \
1348    | CPU_FLAGS_PCLMUL_MATCH | CPU_FLAGS_AVX_MATCH)
1349 #define CPU_FLAGS_PERFECT_MATCH \
1350   (CPU_FLAGS_32BIT_MATCH | CPU_FLAGS_64BIT_MATCH)
1351
1352 /* Return CPU flags match bits. */
1353
1354 static int
1355 cpu_flags_match (const insn_template *t)
1356 {
1357   i386_cpu_flags x = t->cpu_flags;
1358   int match = cpu_flags_check_cpu64 (x) ? CPU_FLAGS_64BIT_MATCH : 0;
1359
1360   x.bitfield.cpu64 = 0;
1361   x.bitfield.cpuno64 = 0;
1362
1363   if (cpu_flags_all_zero (&x))
1364     {
1365       /* This instruction is available on all archs.  */
1366       match |= CPU_FLAGS_32BIT_MATCH;
1367     }
1368   else
1369     {
1370       /* This instruction is available only on some archs.  */
1371       i386_cpu_flags cpu = cpu_arch_flags;
1372
1373       cpu.bitfield.cpu64 = 0;
1374       cpu.bitfield.cpuno64 = 0;
1375       cpu = cpu_flags_and (x, cpu);
1376       if (!cpu_flags_all_zero (&cpu))
1377         {
1378           if (x.bitfield.cpuavx)
1379             {
1380               /* We only need to check AES/PCLMUL/SSE2AVX with AVX.  */
1381               if (cpu.bitfield.cpuavx)
1382                 {
1383                   /* Check SSE2AVX.  */
1384                   if (!t->opcode_modifier.sse2avx|| sse2avx)
1385                     {
1386                       match |= (CPU_FLAGS_ARCH_MATCH
1387                                 | CPU_FLAGS_AVX_MATCH);
1388                       /* Check AES.  */
1389                       if (!x.bitfield.cpuaes || cpu.bitfield.cpuaes)
1390                         match |= CPU_FLAGS_AES_MATCH;
1391                       /* Check PCLMUL.  */
1392                       if (!x.bitfield.cpupclmul
1393                           || cpu.bitfield.cpupclmul)
1394                         match |= CPU_FLAGS_PCLMUL_MATCH;
1395                     }
1396                 }
1397               else
1398                 match |= CPU_FLAGS_ARCH_MATCH;
1399             }
1400           else
1401             match |= CPU_FLAGS_32BIT_MATCH;
1402         }
1403     }
1404   return match;
1405 }
1406
1407 static INLINE i386_operand_type
1408 operand_type_and (i386_operand_type x, i386_operand_type y)
1409 {
1410   switch (ARRAY_SIZE (x.array))
1411     {
1412     case 3:
1413       x.array [2] &= y.array [2];
1414     case 2:
1415       x.array [1] &= y.array [1];
1416     case 1:
1417       x.array [0] &= y.array [0];
1418       break;
1419     default:
1420       abort ();
1421     }
1422   return x;
1423 }
1424
1425 static INLINE i386_operand_type
1426 operand_type_or (i386_operand_type x, i386_operand_type y)
1427 {
1428   switch (ARRAY_SIZE (x.array))
1429     {
1430     case 3:
1431       x.array [2] |= y.array [2];
1432     case 2:
1433       x.array [1] |= y.array [1];
1434     case 1:
1435       x.array [0] |= y.array [0];
1436       break;
1437     default:
1438       abort ();
1439     }
1440   return x;
1441 }
1442
1443 static INLINE i386_operand_type
1444 operand_type_xor (i386_operand_type x, i386_operand_type y)
1445 {
1446   switch (ARRAY_SIZE (x.array))
1447     {
1448     case 3:
1449       x.array [2] ^= y.array [2];
1450     case 2:
1451       x.array [1] ^= y.array [1];
1452     case 1:
1453       x.array [0] ^= y.array [0];
1454       break;
1455     default:
1456       abort ();
1457     }
1458   return x;
1459 }
1460
1461 static const i386_operand_type acc32 = OPERAND_TYPE_ACC32;
1462 static const i386_operand_type acc64 = OPERAND_TYPE_ACC64;
1463 static const i386_operand_type control = OPERAND_TYPE_CONTROL;
1464 static const i386_operand_type inoutportreg
1465   = OPERAND_TYPE_INOUTPORTREG;
1466 static const i386_operand_type reg16_inoutportreg
1467   = OPERAND_TYPE_REG16_INOUTPORTREG;
1468 static const i386_operand_type disp16 = OPERAND_TYPE_DISP16;
1469 static const i386_operand_type disp32 = OPERAND_TYPE_DISP32;
1470 static const i386_operand_type disp32s = OPERAND_TYPE_DISP32S;
1471 static const i386_operand_type disp16_32 = OPERAND_TYPE_DISP16_32;
1472 static const i386_operand_type anydisp
1473   = OPERAND_TYPE_ANYDISP;
1474 static const i386_operand_type regxmm = OPERAND_TYPE_REGXMM;
1475 static const i386_operand_type regymm = OPERAND_TYPE_REGYMM;
1476 static const i386_operand_type imm8 = OPERAND_TYPE_IMM8;
1477 static const i386_operand_type imm8s = OPERAND_TYPE_IMM8S;
1478 static const i386_operand_type imm16 = OPERAND_TYPE_IMM16;
1479 static const i386_operand_type imm32 = OPERAND_TYPE_IMM32;
1480 static const i386_operand_type imm32s = OPERAND_TYPE_IMM32S;
1481 static const i386_operand_type imm64 = OPERAND_TYPE_IMM64;
1482 static const i386_operand_type imm16_32 = OPERAND_TYPE_IMM16_32;
1483 static const i386_operand_type imm16_32s = OPERAND_TYPE_IMM16_32S;
1484 static const i386_operand_type imm16_32_32s = OPERAND_TYPE_IMM16_32_32S;
1485 static const i386_operand_type vec_imm4 = OPERAND_TYPE_VEC_IMM4;
1486
1487 enum operand_type
1488 {
1489   reg,
1490   imm,
1491   disp,
1492   anymem
1493 };
1494
1495 static INLINE int
1496 operand_type_check (i386_operand_type t, enum operand_type c)
1497 {
1498   switch (c)
1499     {
1500     case reg:
1501       return (t.bitfield.reg8
1502               || t.bitfield.reg16
1503               || t.bitfield.reg32
1504               || t.bitfield.reg64);
1505
1506     case imm:
1507       return (t.bitfield.imm8
1508               || t.bitfield.imm8s
1509               || t.bitfield.imm16
1510               || t.bitfield.imm32
1511               || t.bitfield.imm32s
1512               || t.bitfield.imm64);
1513
1514     case disp:
1515       return (t.bitfield.disp8
1516               || t.bitfield.disp16
1517               || t.bitfield.disp32
1518               || t.bitfield.disp32s
1519               || t.bitfield.disp64);
1520
1521     case anymem:
1522       return (t.bitfield.disp8
1523               || t.bitfield.disp16
1524               || t.bitfield.disp32
1525               || t.bitfield.disp32s
1526               || t.bitfield.disp64
1527               || t.bitfield.baseindex);
1528
1529     default:
1530       abort ();
1531     }
1532
1533   return 0;
1534 }
1535
1536 /* Return 1 if there is no conflict in 8bit/16bit/32bit/64bit on
1537    operand J for instruction template T.  */
1538
1539 static INLINE int
1540 match_reg_size (const insn_template *t, unsigned int j)
1541 {
1542   return !((i.types[j].bitfield.byte
1543             && !t->operand_types[j].bitfield.byte)
1544            || (i.types[j].bitfield.word
1545                && !t->operand_types[j].bitfield.word)
1546            || (i.types[j].bitfield.dword
1547                && !t->operand_types[j].bitfield.dword)
1548            || (i.types[j].bitfield.qword
1549                && !t->operand_types[j].bitfield.qword));
1550 }
1551
1552 /* Return 1 if there is no conflict in any size on operand J for
1553    instruction template T.  */
1554
1555 static INLINE int
1556 match_mem_size (const insn_template *t, unsigned int j)
1557 {
1558   return (match_reg_size (t, j)
1559           && !((i.types[j].bitfield.unspecified
1560                 && !t->operand_types[j].bitfield.unspecified)
1561                || (i.types[j].bitfield.fword
1562                    && !t->operand_types[j].bitfield.fword)
1563                || (i.types[j].bitfield.tbyte
1564                    && !t->operand_types[j].bitfield.tbyte)
1565                || (i.types[j].bitfield.xmmword
1566                    && !t->operand_types[j].bitfield.xmmword)
1567                || (i.types[j].bitfield.ymmword
1568                    && !t->operand_types[j].bitfield.ymmword)));
1569 }
1570
1571 /* Return 1 if there is no size conflict on any operands for
1572    instruction template T.  */
1573
1574 static INLINE int
1575 operand_size_match (const insn_template *t)
1576 {
1577   unsigned int j;
1578   int match = 1;
1579
1580   /* Don't check jump instructions.  */
1581   if (t->opcode_modifier.jump
1582       || t->opcode_modifier.jumpbyte
1583       || t->opcode_modifier.jumpdword
1584       || t->opcode_modifier.jumpintersegment)
1585     return match;
1586
1587   /* Check memory and accumulator operand size.  */
1588   for (j = 0; j < i.operands; j++)
1589     {
1590       if (t->operand_types[j].bitfield.anysize)
1591         continue;
1592
1593       if (t->operand_types[j].bitfield.acc && !match_reg_size (t, j))
1594         {
1595           match = 0;
1596           break;
1597         }
1598
1599       if (i.types[j].bitfield.mem && !match_mem_size (t, j))
1600         {
1601           match = 0;
1602           break;
1603         }
1604     }
1605
1606   if (match)
1607     return match;
1608   else if (!t->opcode_modifier.d && !t->opcode_modifier.floatd)
1609     {
1610 mismatch:
1611       i.error = operand_size_mismatch;
1612       return 0;
1613     }
1614
1615   /* Check reverse.  */
1616   gas_assert (i.operands == 2);
1617
1618   match = 1;
1619   for (j = 0; j < 2; j++)
1620     {
1621       if (t->operand_types[j].bitfield.acc
1622           && !match_reg_size (t, j ? 0 : 1))
1623         goto mismatch;
1624
1625       if (i.types[j].bitfield.mem
1626           && !match_mem_size (t, j ? 0 : 1))
1627         goto mismatch;
1628     }
1629
1630   return match;
1631 }
1632
1633 static INLINE int
1634 operand_type_match (i386_operand_type overlap,
1635                     i386_operand_type given)
1636 {
1637   i386_operand_type temp = overlap;
1638
1639   temp.bitfield.jumpabsolute = 0;
1640   temp.bitfield.unspecified = 0;
1641   temp.bitfield.byte = 0;
1642   temp.bitfield.word = 0;
1643   temp.bitfield.dword = 0;
1644   temp.bitfield.fword = 0;
1645   temp.bitfield.qword = 0;
1646   temp.bitfield.tbyte = 0;
1647   temp.bitfield.xmmword = 0;
1648   temp.bitfield.ymmword = 0;
1649   if (operand_type_all_zero (&temp))
1650     goto mismatch;
1651
1652   if (given.bitfield.baseindex == overlap.bitfield.baseindex
1653       && given.bitfield.jumpabsolute == overlap.bitfield.jumpabsolute)
1654     return 1;
1655
1656 mismatch:
1657   i.error = operand_type_mismatch;
1658   return 0;
1659 }
1660
1661 /* If given types g0 and g1 are registers they must be of the same type
1662    unless the expected operand type register overlap is null.
1663    Note that Acc in a template matches every size of reg.  */
1664
1665 static INLINE int
1666 operand_type_register_match (i386_operand_type m0,
1667                              i386_operand_type g0,
1668                              i386_operand_type t0,
1669                              i386_operand_type m1,
1670                              i386_operand_type g1,
1671                              i386_operand_type t1)
1672 {
1673   if (!operand_type_check (g0, reg))
1674     return 1;
1675
1676   if (!operand_type_check (g1, reg))
1677     return 1;
1678
1679   if (g0.bitfield.reg8 == g1.bitfield.reg8
1680       && g0.bitfield.reg16 == g1.bitfield.reg16
1681       && g0.bitfield.reg32 == g1.bitfield.reg32
1682       && g0.bitfield.reg64 == g1.bitfield.reg64)
1683     return 1;
1684
1685   if (m0.bitfield.acc)
1686     {
1687       t0.bitfield.reg8 = 1;
1688       t0.bitfield.reg16 = 1;
1689       t0.bitfield.reg32 = 1;
1690       t0.bitfield.reg64 = 1;
1691     }
1692
1693   if (m1.bitfield.acc)
1694     {
1695       t1.bitfield.reg8 = 1;
1696       t1.bitfield.reg16 = 1;
1697       t1.bitfield.reg32 = 1;
1698       t1.bitfield.reg64 = 1;
1699     }
1700
1701   if (!(t0.bitfield.reg8 & t1.bitfield.reg8)
1702       && !(t0.bitfield.reg16 & t1.bitfield.reg16)
1703       && !(t0.bitfield.reg32 & t1.bitfield.reg32)
1704       && !(t0.bitfield.reg64 & t1.bitfield.reg64))
1705     return 1;
1706
1707   i.error = register_type_mismatch;
1708
1709   return 0;
1710 }
1711
1712 static INLINE unsigned int
1713 mode_from_disp_size (i386_operand_type t)
1714 {
1715   if (t.bitfield.disp8)
1716     return 1;
1717   else if (t.bitfield.disp16
1718            || t.bitfield.disp32
1719            || t.bitfield.disp32s)
1720     return 2;
1721   else
1722     return 0;
1723 }
1724
1725 static INLINE int
1726 fits_in_signed_byte (offsetT num)
1727 {
1728   return (num >= -128) && (num <= 127);
1729 }
1730
1731 static INLINE int
1732 fits_in_unsigned_byte (offsetT num)
1733 {
1734   return (num & 0xff) == num;
1735 }
1736
1737 static INLINE int
1738 fits_in_unsigned_word (offsetT num)
1739 {
1740   return (num & 0xffff) == num;
1741 }
1742
1743 static INLINE int
1744 fits_in_signed_word (offsetT num)
1745 {
1746   return (-32768 <= num) && (num <= 32767);
1747 }
1748
1749 static INLINE int
1750 fits_in_signed_long (offsetT num ATTRIBUTE_UNUSED)
1751 {
1752 #ifndef BFD64
1753   return 1;
1754 #else
1755   return (!(((offsetT) -1 << 31) & num)
1756           || (((offsetT) -1 << 31) & num) == ((offsetT) -1 << 31));
1757 #endif
1758 }                               /* fits_in_signed_long() */
1759
1760 static INLINE int
1761 fits_in_unsigned_long (offsetT num ATTRIBUTE_UNUSED)
1762 {
1763 #ifndef BFD64
1764   return 1;
1765 #else
1766   return (num & (((offsetT) 2 << 31) - 1)) == num;
1767 #endif
1768 }                               /* fits_in_unsigned_long() */
1769
1770 static INLINE int
1771 fits_in_imm4 (offsetT num)
1772 {
1773   return (num & 0xf) == num;
1774 }
1775
1776 static i386_operand_type
1777 smallest_imm_type (offsetT num)
1778 {
1779   i386_operand_type t;
1780
1781   operand_type_set (&t, 0);
1782   t.bitfield.imm64 = 1;
1783
1784   if (cpu_arch_tune != PROCESSOR_I486 && num == 1)
1785     {
1786       /* This code is disabled on the 486 because all the Imm1 forms
1787          in the opcode table are slower on the i486.  They're the
1788          versions with the implicitly specified single-position
1789          displacement, which has another syntax if you really want to
1790          use that form.  */
1791       t.bitfield.imm1 = 1;
1792       t.bitfield.imm8 = 1;
1793       t.bitfield.imm8s = 1;
1794       t.bitfield.imm16 = 1;
1795       t.bitfield.imm32 = 1;
1796       t.bitfield.imm32s = 1;
1797     }
1798   else if (fits_in_signed_byte (num))
1799     {
1800       t.bitfield.imm8 = 1;
1801       t.bitfield.imm8s = 1;
1802       t.bitfield.imm16 = 1;
1803       t.bitfield.imm32 = 1;
1804       t.bitfield.imm32s = 1;
1805     }
1806   else if (fits_in_unsigned_byte (num))
1807     {
1808       t.bitfield.imm8 = 1;
1809       t.bitfield.imm16 = 1;
1810       t.bitfield.imm32 = 1;
1811       t.bitfield.imm32s = 1;
1812     }
1813   else if (fits_in_signed_word (num) || fits_in_unsigned_word (num))
1814     {
1815       t.bitfield.imm16 = 1;
1816       t.bitfield.imm32 = 1;
1817       t.bitfield.imm32s = 1;
1818     }
1819   else if (fits_in_signed_long (num))
1820     {
1821       t.bitfield.imm32 = 1;
1822       t.bitfield.imm32s = 1;
1823     }
1824   else if (fits_in_unsigned_long (num))
1825     t.bitfield.imm32 = 1;
1826
1827   return t;
1828 }
1829
1830 static offsetT
1831 offset_in_range (offsetT val, int size)
1832 {
1833   addressT mask;
1834
1835   switch (size)
1836     {
1837     case 1: mask = ((addressT) 1 <<  8) - 1; break;
1838     case 2: mask = ((addressT) 1 << 16) - 1; break;
1839     case 4: mask = ((addressT) 2 << 31) - 1; break;
1840 #ifdef BFD64
1841     case 8: mask = ((addressT) 2 << 63) - 1; break;
1842 #endif
1843     default: abort ();
1844     }
1845
1846 #ifdef BFD64
1847   /* If BFD64, sign extend val for 32bit address mode.  */
1848   if (flag_code != CODE_64BIT
1849       || i.prefix[ADDR_PREFIX])
1850     if ((val & ~(((addressT) 2 << 31) - 1)) == 0)
1851       val = (val ^ ((addressT) 1 << 31)) - ((addressT) 1 << 31);
1852 #endif
1853
1854   if ((val & ~mask) != 0 && (val & ~mask) != ~mask)
1855     {
1856       char buf1[40], buf2[40];
1857
1858       sprint_value (buf1, val);
1859       sprint_value (buf2, val & mask);
1860       as_warn (_("%s shortened to %s"), buf1, buf2);
1861     }
1862   return val & mask;
1863 }
1864
1865 enum PREFIX_GROUP
1866 {
1867   PREFIX_EXIST = 0,
1868   PREFIX_LOCK,
1869   PREFIX_REP,
1870   PREFIX_OTHER
1871 };
1872
1873 /* Returns
1874    a. PREFIX_EXIST if attempting to add a prefix where one from the
1875    same class already exists.
1876    b. PREFIX_LOCK if lock prefix is added.
1877    c. PREFIX_REP if rep/repne prefix is added.
1878    d. PREFIX_OTHER if other prefix is added.
1879  */
1880
1881 static enum PREFIX_GROUP
1882 add_prefix (unsigned int prefix)
1883 {
1884   enum PREFIX_GROUP ret = PREFIX_OTHER;
1885   unsigned int q;
1886
1887   if (prefix >= REX_OPCODE && prefix < REX_OPCODE + 16
1888       && flag_code == CODE_64BIT)
1889     {
1890       if ((i.prefix[REX_PREFIX] & prefix & REX_W)
1891           || ((i.prefix[REX_PREFIX] & (REX_R | REX_X | REX_B))
1892               && (prefix & (REX_R | REX_X | REX_B))))
1893         ret = PREFIX_EXIST;
1894       q = REX_PREFIX;
1895     }
1896   else
1897     {
1898       switch (prefix)
1899         {
1900         default:
1901           abort ();
1902
1903         case CS_PREFIX_OPCODE:
1904         case DS_PREFIX_OPCODE:
1905         case ES_PREFIX_OPCODE:
1906         case FS_PREFIX_OPCODE:
1907         case GS_PREFIX_OPCODE:
1908         case SS_PREFIX_OPCODE:
1909           q = SEG_PREFIX;
1910           break;
1911
1912         case REPNE_PREFIX_OPCODE:
1913         case REPE_PREFIX_OPCODE:
1914           q = REP_PREFIX;
1915           ret = PREFIX_REP;
1916           break;
1917
1918         case LOCK_PREFIX_OPCODE:
1919           q = LOCK_PREFIX;
1920           ret = PREFIX_LOCK;
1921           break;
1922
1923         case FWAIT_OPCODE:
1924           q = WAIT_PREFIX;
1925           break;
1926
1927         case ADDR_PREFIX_OPCODE:
1928           q = ADDR_PREFIX;
1929           break;
1930
1931         case DATA_PREFIX_OPCODE:
1932           q = DATA_PREFIX;
1933           break;
1934         }
1935       if (i.prefix[q] != 0)
1936         ret = PREFIX_EXIST;
1937     }
1938
1939   if (ret)
1940     {
1941       if (!i.prefix[q])
1942         ++i.prefixes;
1943       i.prefix[q] |= prefix;
1944     }
1945   else
1946     as_bad (_("same type of prefix used twice"));
1947
1948   return ret;
1949 }
1950
1951 static void
1952 update_code_flag (int value, int check)
1953 {
1954   PRINTF_LIKE ((*as_error));
1955
1956   flag_code = (enum flag_code) value;
1957   if (flag_code == CODE_64BIT)
1958     {
1959       cpu_arch_flags.bitfield.cpu64 = 1;
1960       cpu_arch_flags.bitfield.cpuno64 = 0;
1961     }
1962   else
1963     {
1964       cpu_arch_flags.bitfield.cpu64 = 0;
1965       cpu_arch_flags.bitfield.cpuno64 = 1;
1966     }
1967   if (value == CODE_64BIT && !cpu_arch_flags.bitfield.cpulm )
1968     {
1969       if (check)
1970         as_error = as_fatal;
1971       else
1972         as_error = as_bad;
1973       (*as_error) (_("64bit mode not supported on `%s'."),
1974                    cpu_arch_name ? cpu_arch_name : default_arch);
1975     }
1976   if (value == CODE_32BIT && !cpu_arch_flags.bitfield.cpui386)
1977     {
1978       if (check)
1979         as_error = as_fatal;
1980       else
1981         as_error = as_bad;
1982       (*as_error) (_("32bit mode not supported on `%s'."),
1983                    cpu_arch_name ? cpu_arch_name : default_arch);
1984     }
1985   stackop_size = '\0';
1986 }
1987
1988 static void
1989 set_code_flag (int value)
1990 {
1991   update_code_flag (value, 0);
1992 }
1993
1994 static void
1995 set_16bit_gcc_code_flag (int new_code_flag)
1996 {
1997   flag_code = (enum flag_code) new_code_flag;
1998   if (flag_code != CODE_16BIT)
1999     abort ();
2000   cpu_arch_flags.bitfield.cpu64 = 0;
2001   cpu_arch_flags.bitfield.cpuno64 = 1;
2002   stackop_size = LONG_MNEM_SUFFIX;
2003 }
2004
2005 static void
2006 set_intel_syntax (int syntax_flag)
2007 {
2008   /* Find out if register prefixing is specified.  */
2009   int ask_naked_reg = 0;
2010
2011   SKIP_WHITESPACE ();
2012   if (!is_end_of_line[(unsigned char) *input_line_pointer])
2013     {
2014       char *string = input_line_pointer;
2015       int e = get_symbol_end ();
2016
2017       if (strcmp (string, "prefix") == 0)
2018         ask_naked_reg = 1;
2019       else if (strcmp (string, "noprefix") == 0)
2020         ask_naked_reg = -1;
2021       else
2022         as_bad (_("bad argument to syntax directive."));
2023       *input_line_pointer = e;
2024     }
2025   demand_empty_rest_of_line ();
2026
2027   intel_syntax = syntax_flag;
2028
2029   if (ask_naked_reg == 0)
2030     allow_naked_reg = (intel_syntax
2031                        && (bfd_get_symbol_leading_char (stdoutput) != '\0'));
2032   else
2033     allow_naked_reg = (ask_naked_reg < 0);
2034
2035   expr_set_rank (O_full_ptr, syntax_flag ? 10 : 0);
2036
2037   identifier_chars['%'] = intel_syntax && allow_naked_reg ? '%' : 0;
2038   identifier_chars['$'] = intel_syntax ? '$' : 0;
2039   register_prefix = allow_naked_reg ? "" : "%";
2040 }
2041
2042 static void
2043 set_intel_mnemonic (int mnemonic_flag)
2044 {
2045   intel_mnemonic = mnemonic_flag;
2046 }
2047
2048 static void
2049 set_allow_index_reg (int flag)
2050 {
2051   allow_index_reg = flag;
2052 }
2053
2054 static void
2055 set_sse_check (int dummy ATTRIBUTE_UNUSED)
2056 {
2057   SKIP_WHITESPACE ();
2058
2059   if (!is_end_of_line[(unsigned char) *input_line_pointer])
2060     {
2061       char *string = input_line_pointer;
2062       int e = get_symbol_end ();
2063
2064       if (strcmp (string, "none") == 0)
2065         sse_check = sse_check_none;
2066       else if (strcmp (string, "warning") == 0)
2067         sse_check = sse_check_warning;
2068       else if (strcmp (string, "error") == 0)
2069         sse_check = sse_check_error;
2070       else
2071         as_bad (_("bad argument to sse_check directive."));
2072       *input_line_pointer = e;
2073     }
2074   else
2075     as_bad (_("missing argument for sse_check directive"));
2076
2077   demand_empty_rest_of_line ();
2078 }
2079
2080 static void
2081 check_cpu_arch_compatible (const char *name ATTRIBUTE_UNUSED,
2082                            i386_cpu_flags new_flag ATTRIBUTE_UNUSED)
2083 {
2084 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
2085   static const char *arch;
2086
2087   /* Intel LIOM is only supported on ELF.  */
2088   if (!IS_ELF)
2089     return;
2090
2091   if (!arch)
2092     {
2093       /* Use cpu_arch_name if it is set in md_parse_option.  Otherwise
2094          use default_arch.  */
2095       arch = cpu_arch_name;
2096       if (!arch)
2097         arch = default_arch;
2098     }
2099
2100   /* If we are targeting Intel L1OM, we must enable it.  */
2101   if (get_elf_backend_data (stdoutput)->elf_machine_code != EM_L1OM
2102       || new_flag.bitfield.cpul1om)
2103     return;
2104
2105   as_bad (_("`%s' is not supported on `%s'"), name, arch);
2106 #endif
2107 }
2108
2109 static void
2110 set_cpu_arch (int dummy ATTRIBUTE_UNUSED)
2111 {
2112   SKIP_WHITESPACE ();
2113
2114   if (!is_end_of_line[(unsigned char) *input_line_pointer])
2115     {
2116       char *string = input_line_pointer;
2117       int e = get_symbol_end ();
2118       unsigned int j;
2119       i386_cpu_flags flags;
2120
2121       for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
2122         {
2123           if (strcmp (string, cpu_arch[j].name) == 0)
2124             {
2125               check_cpu_arch_compatible (string, cpu_arch[j].flags);
2126
2127               if (*string != '.')
2128                 {
2129                   cpu_arch_name = cpu_arch[j].name;
2130                   cpu_sub_arch_name = NULL;
2131                   cpu_arch_flags = cpu_arch[j].flags;
2132                   if (flag_code == CODE_64BIT)
2133                     {
2134                       cpu_arch_flags.bitfield.cpu64 = 1;
2135                       cpu_arch_flags.bitfield.cpuno64 = 0;
2136                     }
2137                   else
2138                     {
2139                       cpu_arch_flags.bitfield.cpu64 = 0;
2140                       cpu_arch_flags.bitfield.cpuno64 = 1;
2141                     }
2142                   cpu_arch_isa = cpu_arch[j].type;
2143                   cpu_arch_isa_flags = cpu_arch[j].flags;
2144                   if (!cpu_arch_tune_set)
2145                     {
2146                       cpu_arch_tune = cpu_arch_isa;
2147                       cpu_arch_tune_flags = cpu_arch_isa_flags;
2148                     }
2149                   break;
2150                 }
2151
2152               if (!cpu_arch[j].negated)
2153                 flags = cpu_flags_or (cpu_arch_flags,
2154                                       cpu_arch[j].flags);
2155               else
2156                 flags = cpu_flags_and_not (cpu_arch_flags,
2157                                            cpu_arch[j].flags);
2158               if (!cpu_flags_equal (&flags, &cpu_arch_flags))
2159                 {
2160                   if (cpu_sub_arch_name)
2161                     {
2162                       char *name = cpu_sub_arch_name;
2163                       cpu_sub_arch_name = concat (name,
2164                                                   cpu_arch[j].name,
2165                                                   (const char *) NULL);
2166                       free (name);
2167                     }
2168                   else
2169                     cpu_sub_arch_name = xstrdup (cpu_arch[j].name);
2170                   cpu_arch_flags = flags;
2171                 }
2172               *input_line_pointer = e;
2173               demand_empty_rest_of_line ();
2174               return;
2175             }
2176         }
2177       if (j >= ARRAY_SIZE (cpu_arch))
2178         as_bad (_("no such architecture: `%s'"), string);
2179
2180       *input_line_pointer = e;
2181     }
2182   else
2183     as_bad (_("missing cpu architecture"));
2184
2185   no_cond_jump_promotion = 0;
2186   if (*input_line_pointer == ','
2187       && !is_end_of_line[(unsigned char) input_line_pointer[1]])
2188     {
2189       char *string = ++input_line_pointer;
2190       int e = get_symbol_end ();
2191
2192       if (strcmp (string, "nojumps") == 0)
2193         no_cond_jump_promotion = 1;
2194       else if (strcmp (string, "jumps") == 0)
2195         ;
2196       else
2197         as_bad (_("no such architecture modifier: `%s'"), string);
2198
2199       *input_line_pointer = e;
2200     }
2201
2202   demand_empty_rest_of_line ();
2203 }
2204
2205 enum bfd_architecture
2206 i386_arch (void)
2207 {
2208   if (cpu_arch_isa == PROCESSOR_L1OM)
2209     {
2210       if (OUTPUT_FLAVOR != bfd_target_elf_flavour
2211           || flag_code != CODE_64BIT)
2212         as_fatal (_("Intel L1OM is 64bit ELF only"));
2213       return bfd_arch_l1om;
2214     }
2215   else
2216     return bfd_arch_i386;
2217 }
2218
2219 unsigned long
2220 i386_mach ()
2221 {
2222   if (!strncmp (default_arch, "x86_64", 6))
2223     {
2224       if (cpu_arch_isa == PROCESSOR_L1OM)
2225         {
2226           if (OUTPUT_FLAVOR != bfd_target_elf_flavour
2227               || default_arch[6] != '\0')
2228             as_fatal (_("Intel L1OM is 64bit ELF only"));
2229           return bfd_mach_l1om;
2230         }
2231       else if (default_arch[6] == '\0')
2232         return bfd_mach_x86_64;
2233       else
2234         return bfd_mach_x64_32;
2235     }
2236   else if (!strcmp (default_arch, "i386"))
2237     return bfd_mach_i386_i386;
2238   else
2239     as_fatal (_("Unknown architecture"));
2240 }
2241 \f
2242 void
2243 md_begin ()
2244 {
2245   const char *hash_err;
2246
2247   /* Initialize op_hash hash table.  */
2248   op_hash = hash_new ();
2249
2250   {
2251     const insn_template *optab;
2252     templates *core_optab;
2253
2254     /* Setup for loop.  */
2255     optab = i386_optab;
2256     core_optab = (templates *) xmalloc (sizeof (templates));
2257     core_optab->start = optab;
2258
2259     while (1)
2260       {
2261         ++optab;
2262         if (optab->name == NULL
2263             || strcmp (optab->name, (optab - 1)->name) != 0)
2264           {
2265             /* different name --> ship out current template list;
2266                add to hash table; & begin anew.  */
2267             core_optab->end = optab;
2268             hash_err = hash_insert (op_hash,
2269                                     (optab - 1)->name,
2270                                     (void *) core_optab);
2271             if (hash_err)
2272               {
2273                 as_fatal (_("Internal Error:  Can't hash %s: %s"),
2274                           (optab - 1)->name,
2275                           hash_err);
2276               }
2277             if (optab->name == NULL)
2278               break;
2279             core_optab = (templates *) xmalloc (sizeof (templates));
2280             core_optab->start = optab;
2281           }
2282       }
2283   }
2284
2285   /* Initialize reg_hash hash table.  */
2286   reg_hash = hash_new ();
2287   {
2288     const reg_entry *regtab;
2289     unsigned int regtab_size = i386_regtab_size;
2290
2291     for (regtab = i386_regtab; regtab_size--; regtab++)
2292       {
2293         hash_err = hash_insert (reg_hash, regtab->reg_name, (void *) regtab);
2294         if (hash_err)
2295           as_fatal (_("Internal Error:  Can't hash %s: %s"),
2296                     regtab->reg_name,
2297                     hash_err);
2298       }
2299   }
2300
2301   /* Fill in lexical tables:  mnemonic_chars, operand_chars.  */
2302   {
2303     int c;
2304     char *p;
2305
2306     for (c = 0; c < 256; c++)
2307       {
2308         if (ISDIGIT (c))
2309           {
2310             digit_chars[c] = c;
2311             mnemonic_chars[c] = c;
2312             register_chars[c] = c;
2313             operand_chars[c] = c;
2314           }
2315         else if (ISLOWER (c))
2316           {
2317             mnemonic_chars[c] = c;
2318             register_chars[c] = c;
2319             operand_chars[c] = c;
2320           }
2321         else if (ISUPPER (c))
2322           {
2323             mnemonic_chars[c] = TOLOWER (c);
2324             register_chars[c] = mnemonic_chars[c];
2325             operand_chars[c] = c;
2326           }
2327
2328         if (ISALPHA (c) || ISDIGIT (c))
2329           identifier_chars[c] = c;
2330         else if (c >= 128)
2331           {
2332             identifier_chars[c] = c;
2333             operand_chars[c] = c;
2334           }
2335       }
2336
2337 #ifdef LEX_AT
2338     identifier_chars['@'] = '@';
2339 #endif
2340 #ifdef LEX_QM
2341     identifier_chars['?'] = '?';
2342     operand_chars['?'] = '?';
2343 #endif
2344     digit_chars['-'] = '-';
2345     mnemonic_chars['_'] = '_';
2346     mnemonic_chars['-'] = '-';
2347     mnemonic_chars['.'] = '.';
2348     identifier_chars['_'] = '_';
2349     identifier_chars['.'] = '.';
2350
2351     for (p = operand_special_chars; *p != '\0'; p++)
2352       operand_chars[(unsigned char) *p] = *p;
2353   }
2354
2355 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
2356   if (IS_ELF)
2357     {
2358       record_alignment (text_section, 2);
2359       record_alignment (data_section, 2);
2360       record_alignment (bss_section, 2);
2361     }
2362 #endif
2363
2364   if (flag_code == CODE_64BIT)
2365     {
2366       x86_dwarf2_return_column = 16;
2367       x86_cie_data_alignment = -8;
2368     }
2369   else
2370     {
2371       x86_dwarf2_return_column = 8;
2372       x86_cie_data_alignment = -4;
2373     }
2374 }
2375
2376 void
2377 i386_print_statistics (FILE *file)
2378 {
2379   hash_print_statistics (file, "i386 opcode", op_hash);
2380   hash_print_statistics (file, "i386 register", reg_hash);
2381 }
2382 \f
2383 #ifdef DEBUG386
2384
2385 /* Debugging routines for md_assemble.  */
2386 static void pte (insn_template *);
2387 static void pt (i386_operand_type);
2388 static void pe (expressionS *);
2389 static void ps (symbolS *);
2390
2391 static void
2392 pi (char *line, i386_insn *x)
2393 {
2394   unsigned int j;
2395
2396   fprintf (stdout, "%s: template ", line);
2397   pte (&x->tm);
2398   fprintf (stdout, "  address: base %s  index %s  scale %x\n",
2399            x->base_reg ? x->base_reg->reg_name : "none",
2400            x->index_reg ? x->index_reg->reg_name : "none",
2401            x->log2_scale_factor);
2402   fprintf (stdout, "  modrm:  mode %x  reg %x  reg/mem %x\n",
2403            x->rm.mode, x->rm.reg, x->rm.regmem);
2404   fprintf (stdout, "  sib:  base %x  index %x  scale %x\n",
2405            x->sib.base, x->sib.index, x->sib.scale);
2406   fprintf (stdout, "  rex: 64bit %x  extX %x  extY %x  extZ %x\n",
2407            (x->rex & REX_W) != 0,
2408            (x->rex & REX_R) != 0,
2409            (x->rex & REX_X) != 0,
2410            (x->rex & REX_B) != 0);
2411   for (j = 0; j < x->operands; j++)
2412     {
2413       fprintf (stdout, "    #%d:  ", j + 1);
2414       pt (x->types[j]);
2415       fprintf (stdout, "\n");
2416       if (x->types[j].bitfield.reg8
2417           || x->types[j].bitfield.reg16
2418           || x->types[j].bitfield.reg32
2419           || x->types[j].bitfield.reg64
2420           || x->types[j].bitfield.regmmx
2421           || x->types[j].bitfield.regxmm
2422           || x->types[j].bitfield.regymm
2423           || x->types[j].bitfield.sreg2
2424           || x->types[j].bitfield.sreg3
2425           || x->types[j].bitfield.control
2426           || x->types[j].bitfield.debug
2427           || x->types[j].bitfield.test)
2428         fprintf (stdout, "%s\n", x->op[j].regs->reg_name);
2429       if (operand_type_check (x->types[j], imm))
2430         pe (x->op[j].imms);
2431       if (operand_type_check (x->types[j], disp))
2432         pe (x->op[j].disps);
2433     }
2434 }
2435
2436 static void
2437 pte (insn_template *t)
2438 {
2439   unsigned int j;
2440   fprintf (stdout, " %d operands ", t->operands);
2441   fprintf (stdout, "opcode %x ", t->base_opcode);
2442   if (t->extension_opcode != None)
2443     fprintf (stdout, "ext %x ", t->extension_opcode);
2444   if (t->opcode_modifier.d)
2445     fprintf (stdout, "D");
2446   if (t->opcode_modifier.w)
2447     fprintf (stdout, "W");
2448   fprintf (stdout, "\n");
2449   for (j = 0; j < t->operands; j++)
2450     {
2451       fprintf (stdout, "    #%d type ", j + 1);
2452       pt (t->operand_types[j]);
2453       fprintf (stdout, "\n");
2454     }
2455 }
2456
2457 static void
2458 pe (expressionS *e)
2459 {
2460   fprintf (stdout, "    operation     %d\n", e->X_op);
2461   fprintf (stdout, "    add_number    %ld (%lx)\n",
2462            (long) e->X_add_number, (long) e->X_add_number);
2463   if (e->X_add_symbol)
2464     {
2465       fprintf (stdout, "    add_symbol    ");
2466       ps (e->X_add_symbol);
2467       fprintf (stdout, "\n");
2468     }
2469   if (e->X_op_symbol)
2470     {
2471       fprintf (stdout, "    op_symbol    ");
2472       ps (e->X_op_symbol);
2473       fprintf (stdout, "\n");
2474     }
2475 }
2476
2477 static void
2478 ps (symbolS *s)
2479 {
2480   fprintf (stdout, "%s type %s%s",
2481            S_GET_NAME (s),
2482            S_IS_EXTERNAL (s) ? "EXTERNAL " : "",
2483            segment_name (S_GET_SEGMENT (s)));
2484 }
2485
2486 static struct type_name
2487   {
2488     i386_operand_type mask;
2489     const char *name;
2490   }
2491 const type_names[] =
2492 {
2493   { OPERAND_TYPE_REG8, "r8" },
2494   { OPERAND_TYPE_REG16, "r16" },
2495   { OPERAND_TYPE_REG32, "r32" },
2496   { OPERAND_TYPE_REG64, "r64" },
2497   { OPERAND_TYPE_IMM8, "i8" },
2498   { OPERAND_TYPE_IMM8, "i8s" },
2499   { OPERAND_TYPE_IMM16, "i16" },
2500   { OPERAND_TYPE_IMM32, "i32" },
2501   { OPERAND_TYPE_IMM32S, "i32s" },
2502   { OPERAND_TYPE_IMM64, "i64" },
2503   { OPERAND_TYPE_IMM1, "i1" },
2504   { OPERAND_TYPE_BASEINDEX, "BaseIndex" },
2505   { OPERAND_TYPE_DISP8, "d8" },
2506   { OPERAND_TYPE_DISP16, "d16" },
2507   { OPERAND_TYPE_DISP32, "d32" },
2508   { OPERAND_TYPE_DISP32S, "d32s" },
2509   { OPERAND_TYPE_DISP64, "d64" },
2510   { OPERAND_TYPE_INOUTPORTREG, "InOutPortReg" },
2511   { OPERAND_TYPE_SHIFTCOUNT, "ShiftCount" },
2512   { OPERAND_TYPE_CONTROL, "control reg" },
2513   { OPERAND_TYPE_TEST, "test reg" },
2514   { OPERAND_TYPE_DEBUG, "debug reg" },
2515   { OPERAND_TYPE_FLOATREG, "FReg" },
2516   { OPERAND_TYPE_FLOATACC, "FAcc" },
2517   { OPERAND_TYPE_SREG2, "SReg2" },
2518   { OPERAND_TYPE_SREG3, "SReg3" },
2519   { OPERAND_TYPE_ACC, "Acc" },
2520   { OPERAND_TYPE_JUMPABSOLUTE, "Jump Absolute" },
2521   { OPERAND_TYPE_REGMMX, "rMMX" },
2522   { OPERAND_TYPE_REGXMM, "rXMM" },
2523   { OPERAND_TYPE_REGYMM, "rYMM" },
2524   { OPERAND_TYPE_ESSEG, "es" },
2525 };
2526
2527 static void
2528 pt (i386_operand_type t)
2529 {
2530   unsigned int j;
2531   i386_operand_type a;
2532
2533   for (j = 0; j < ARRAY_SIZE (type_names); j++)
2534     {
2535       a = operand_type_and (t, type_names[j].mask);
2536       if (!operand_type_all_zero (&a))
2537         fprintf (stdout, "%s, ",  type_names[j].name);
2538     }
2539   fflush (stdout);
2540 }
2541
2542 #endif /* DEBUG386 */
2543 \f
2544 static bfd_reloc_code_real_type
2545 reloc (unsigned int size,
2546        int pcrel,
2547        int sign,
2548        bfd_reloc_code_real_type other)
2549 {
2550   if (other != NO_RELOC)
2551     {
2552       reloc_howto_type *rel;
2553
2554       if (size == 8)
2555         switch (other)
2556           {
2557           case BFD_RELOC_X86_64_GOT32:
2558             return BFD_RELOC_X86_64_GOT64;
2559             break;
2560           case BFD_RELOC_X86_64_PLTOFF64:
2561             return BFD_RELOC_X86_64_PLTOFF64;
2562             break;
2563           case BFD_RELOC_X86_64_GOTPC32:
2564             other = BFD_RELOC_X86_64_GOTPC64;
2565             break;
2566           case BFD_RELOC_X86_64_GOTPCREL:
2567             other = BFD_RELOC_X86_64_GOTPCREL64;
2568             break;
2569           case BFD_RELOC_X86_64_TPOFF32:
2570             other = BFD_RELOC_X86_64_TPOFF64;
2571             break;
2572           case BFD_RELOC_X86_64_DTPOFF32:
2573             other = BFD_RELOC_X86_64_DTPOFF64;
2574             break;
2575           default:
2576             break;
2577           }
2578
2579       /* Sign-checking 4-byte relocations in 16-/32-bit code is pointless.  */
2580       if (size == 4 && flag_code != CODE_64BIT)
2581         sign = -1;
2582
2583       rel = bfd_reloc_type_lookup (stdoutput, other);
2584       if (!rel)
2585         as_bad (_("unknown relocation (%u)"), other);
2586       else if (size != bfd_get_reloc_size (rel))
2587         as_bad (_("%u-byte relocation cannot be applied to %u-byte field"),
2588                 bfd_get_reloc_size (rel),
2589                 size);
2590       else if (pcrel && !rel->pc_relative)
2591         as_bad (_("non-pc-relative relocation for pc-relative field"));
2592       else if ((rel->complain_on_overflow == complain_overflow_signed
2593                 && !sign)
2594                || (rel->complain_on_overflow == complain_overflow_unsigned
2595                    && sign > 0))
2596         as_bad (_("relocated field and relocation type differ in signedness"));
2597       else
2598         return other;
2599       return NO_RELOC;
2600     }
2601
2602   if (pcrel)
2603     {
2604       if (!sign)
2605         as_bad (_("there are no unsigned pc-relative relocations"));
2606       switch (size)
2607         {
2608         case 1: return BFD_RELOC_8_PCREL;
2609         case 2: return BFD_RELOC_16_PCREL;
2610         case 4: return BFD_RELOC_32_PCREL;
2611         case 8: return BFD_RELOC_64_PCREL;
2612         }
2613       as_bad (_("cannot do %u byte pc-relative relocation"), size);
2614     }
2615   else
2616     {
2617       if (sign > 0)
2618         switch (size)
2619           {
2620           case 4: return BFD_RELOC_X86_64_32S;
2621           }
2622       else
2623         switch (size)
2624           {
2625           case 1: return BFD_RELOC_8;
2626           case 2: return BFD_RELOC_16;
2627           case 4: return BFD_RELOC_32;
2628           case 8: return BFD_RELOC_64;
2629           }
2630       as_bad (_("cannot do %s %u byte relocation"),
2631               sign > 0 ? "signed" : "unsigned", size);
2632     }
2633
2634   return NO_RELOC;
2635 }
2636
2637 /* Here we decide which fixups can be adjusted to make them relative to
2638    the beginning of the section instead of the symbol.  Basically we need
2639    to make sure that the dynamic relocations are done correctly, so in
2640    some cases we force the original symbol to be used.  */
2641
2642 int
2643 tc_i386_fix_adjustable (fixS *fixP ATTRIBUTE_UNUSED)
2644 {
2645 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
2646   if (!IS_ELF)
2647     return 1;
2648
2649   /* Don't adjust pc-relative references to merge sections in 64-bit
2650      mode.  */
2651   if (use_rela_relocations
2652       && (S_GET_SEGMENT (fixP->fx_addsy)->flags & SEC_MERGE) != 0
2653       && fixP->fx_pcrel)
2654     return 0;
2655
2656   /* The x86_64 GOTPCREL are represented as 32bit PCrel relocations
2657      and changed later by validate_fix.  */
2658   if (GOT_symbol && fixP->fx_subsy == GOT_symbol
2659       && fixP->fx_r_type == BFD_RELOC_32_PCREL)
2660     return 0;
2661
2662   /* adjust_reloc_syms doesn't know about the GOT.  */
2663   if (fixP->fx_r_type == BFD_RELOC_386_GOTOFF
2664       || fixP->fx_r_type == BFD_RELOC_386_PLT32
2665       || fixP->fx_r_type == BFD_RELOC_386_GOT32
2666       || fixP->fx_r_type == BFD_RELOC_386_TLS_GD
2667       || fixP->fx_r_type == BFD_RELOC_386_TLS_LDM
2668       || fixP->fx_r_type == BFD_RELOC_386_TLS_LDO_32
2669       || fixP->fx_r_type == BFD_RELOC_386_TLS_IE_32
2670       || fixP->fx_r_type == BFD_RELOC_386_TLS_IE
2671       || fixP->fx_r_type == BFD_RELOC_386_TLS_GOTIE
2672       || fixP->fx_r_type == BFD_RELOC_386_TLS_LE_32
2673       || fixP->fx_r_type == BFD_RELOC_386_TLS_LE
2674       || fixP->fx_r_type == BFD_RELOC_386_TLS_GOTDESC
2675       || fixP->fx_r_type == BFD_RELOC_386_TLS_DESC_CALL
2676       || fixP->fx_r_type == BFD_RELOC_X86_64_PLT32
2677       || fixP->fx_r_type == BFD_RELOC_X86_64_GOT32
2678       || fixP->fx_r_type == BFD_RELOC_X86_64_GOTPCREL
2679       || fixP->fx_r_type == BFD_RELOC_X86_64_TLSGD
2680       || fixP->fx_r_type == BFD_RELOC_X86_64_TLSLD
2681       || fixP->fx_r_type == BFD_RELOC_X86_64_DTPOFF32
2682       || fixP->fx_r_type == BFD_RELOC_X86_64_DTPOFF64
2683       || fixP->fx_r_type == BFD_RELOC_X86_64_GOTTPOFF
2684       || fixP->fx_r_type == BFD_RELOC_X86_64_TPOFF32
2685       || fixP->fx_r_type == BFD_RELOC_X86_64_TPOFF64
2686       || fixP->fx_r_type == BFD_RELOC_X86_64_GOTOFF64
2687       || fixP->fx_r_type == BFD_RELOC_X86_64_GOTPC32_TLSDESC
2688       || fixP->fx_r_type == BFD_RELOC_X86_64_TLSDESC_CALL
2689       || fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
2690       || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
2691     return 0;
2692 #endif
2693   return 1;
2694 }
2695
2696 static int
2697 intel_float_operand (const char *mnemonic)
2698 {
2699   /* Note that the value returned is meaningful only for opcodes with (memory)
2700      operands, hence the code here is free to improperly handle opcodes that
2701      have no operands (for better performance and smaller code). */
2702
2703   if (mnemonic[0] != 'f')
2704     return 0; /* non-math */
2705
2706   switch (mnemonic[1])
2707     {
2708     /* fclex, fdecstp, fdisi, femms, feni, fincstp, finit, fsetpm, and
2709        the fs segment override prefix not currently handled because no
2710        call path can make opcodes without operands get here */
2711     case 'i':
2712       return 2 /* integer op */;
2713     case 'l':
2714       if (mnemonic[2] == 'd' && (mnemonic[3] == 'c' || mnemonic[3] == 'e'))
2715         return 3; /* fldcw/fldenv */
2716       break;
2717     case 'n':
2718       if (mnemonic[2] != 'o' /* fnop */)
2719         return 3; /* non-waiting control op */
2720       break;
2721     case 'r':
2722       if (mnemonic[2] == 's')
2723         return 3; /* frstor/frstpm */
2724       break;
2725     case 's':
2726       if (mnemonic[2] == 'a')
2727         return 3; /* fsave */
2728       if (mnemonic[2] == 't')
2729         {
2730           switch (mnemonic[3])
2731             {
2732             case 'c': /* fstcw */
2733             case 'd': /* fstdw */
2734             case 'e': /* fstenv */
2735             case 's': /* fsts[gw] */
2736               return 3;
2737             }
2738         }
2739       break;
2740     case 'x':
2741       if (mnemonic[2] == 'r' || mnemonic[2] == 's')
2742         return 0; /* fxsave/fxrstor are not really math ops */
2743       break;
2744     }
2745
2746   return 1;
2747 }
2748
2749 /* Build the VEX prefix.  */
2750
2751 static void
2752 build_vex_prefix (const insn_template *t)
2753 {
2754   unsigned int register_specifier;
2755   unsigned int implied_prefix;
2756   unsigned int vector_length;
2757
2758   /* Check register specifier.  */
2759   if (i.vex.register_specifier)
2760     {
2761       register_specifier = i.vex.register_specifier->reg_num;
2762       if ((i.vex.register_specifier->reg_flags & RegRex))
2763         register_specifier += 8;
2764       register_specifier = ~register_specifier & 0xf;
2765     }
2766   else
2767     register_specifier = 0xf;
2768
2769   /* Use 2-byte VEX prefix by swappping destination and source
2770      operand.  */
2771   if (!i.swap_operand
2772       && i.operands == i.reg_operands
2773       && i.tm.opcode_modifier.vexopcode == VEX0F
2774       && i.tm.opcode_modifier.s
2775       && i.rex == REX_B)
2776     {
2777       unsigned int xchg = i.operands - 1;
2778       union i386_op temp_op;
2779       i386_operand_type temp_type;
2780
2781       temp_type = i.types[xchg];
2782       i.types[xchg] = i.types[0];
2783       i.types[0] = temp_type;
2784       temp_op = i.op[xchg];
2785       i.op[xchg] = i.op[0];
2786       i.op[0] = temp_op;
2787
2788       gas_assert (i.rm.mode == 3);
2789
2790       i.rex = REX_R;
2791       xchg = i.rm.regmem;
2792       i.rm.regmem = i.rm.reg;
2793       i.rm.reg = xchg;
2794
2795       /* Use the next insn.  */
2796       i.tm = t[1];
2797     }
2798
2799   if (i.tm.opcode_modifier.vex == VEXScalar)
2800     vector_length = avxscalar;
2801   else
2802     vector_length = i.tm.opcode_modifier.vex == VEX256 ? 1 : 0;
2803
2804   switch ((i.tm.base_opcode >> 8) & 0xff)
2805     {
2806     case 0:
2807       implied_prefix = 0;
2808       break;
2809     case DATA_PREFIX_OPCODE:
2810       implied_prefix = 1;
2811       break;
2812     case REPE_PREFIX_OPCODE:
2813       implied_prefix = 2;
2814       break;
2815     case REPNE_PREFIX_OPCODE:
2816       implied_prefix = 3;
2817       break;
2818     default:
2819       abort ();
2820     }
2821
2822   /* Use 2-byte VEX prefix if possible.  */
2823   if (i.tm.opcode_modifier.vexopcode == VEX0F
2824       && i.tm.opcode_modifier.vexw != VEXW1
2825       && (i.rex & (REX_W | REX_X | REX_B)) == 0)
2826     {
2827       /* 2-byte VEX prefix.  */
2828       unsigned int r;
2829
2830       i.vex.length = 2;
2831       i.vex.bytes[0] = 0xc5;
2832
2833       /* Check the REX.R bit.  */
2834       r = (i.rex & REX_R) ? 0 : 1;
2835       i.vex.bytes[1] = (r << 7
2836                         | register_specifier << 3
2837                         | vector_length << 2
2838                         | implied_prefix);
2839     }
2840   else
2841     {
2842       /* 3-byte VEX prefix.  */
2843       unsigned int m, w;
2844
2845       i.vex.length = 3;
2846
2847       switch (i.tm.opcode_modifier.vexopcode)
2848         {
2849         case VEX0F:
2850           m = 0x1;
2851           i.vex.bytes[0] = 0xc4;
2852           break;
2853         case VEX0F38:
2854           m = 0x2;
2855           i.vex.bytes[0] = 0xc4;
2856           break;
2857         case VEX0F3A:
2858           m = 0x3;
2859           i.vex.bytes[0] = 0xc4;
2860           break;
2861         case XOP08:
2862           m = 0x8;
2863           i.vex.bytes[0] = 0x8f;
2864           break;
2865         case XOP09:
2866           m = 0x9;
2867           i.vex.bytes[0] = 0x8f;
2868           break;
2869         case XOP0A:
2870           m = 0xa;
2871           i.vex.bytes[0] = 0x8f;
2872           break;
2873         default:
2874           abort ();
2875         }
2876
2877       /* The high 3 bits of the second VEX byte are 1's compliment
2878          of RXB bits from REX.  */
2879       i.vex.bytes[1] = (~i.rex & 0x7) << 5 | m;
2880
2881       /* Check the REX.W bit.  */
2882       w = (i.rex & REX_W) ? 1 : 0;
2883       if (i.tm.opcode_modifier.vexw)
2884         {
2885           if (w)
2886             abort ();
2887
2888           if (i.tm.opcode_modifier.vexw == VEXW1)
2889             w = 1;
2890         }
2891
2892       i.vex.bytes[2] = (w << 7
2893                         | register_specifier << 3
2894                         | vector_length << 2
2895                         | implied_prefix);
2896     }
2897 }
2898
2899 static void
2900 process_immext (void)
2901 {
2902   expressionS *exp;
2903
2904   if (i.tm.cpu_flags.bitfield.cpusse3 && i.operands > 0)
2905     {
2906       /* SSE3 Instructions have the fixed operands with an opcode
2907          suffix which is coded in the same place as an 8-bit immediate
2908          field would be.  Here we check those operands and remove them
2909          afterwards.  */
2910       unsigned int x;
2911
2912       for (x = 0; x < i.operands; x++)
2913         if (i.op[x].regs->reg_num != x)
2914           as_bad (_("can't use register '%s%s' as operand %d in '%s'."),
2915                   register_prefix, i.op[x].regs->reg_name, x + 1,
2916                   i.tm.name);
2917
2918       i.operands = 0;
2919     }
2920
2921   /* These AMD 3DNow! and SSE2 instructions have an opcode suffix
2922      which is coded in the same place as an 8-bit immediate field
2923      would be.  Here we fake an 8-bit immediate operand from the
2924      opcode suffix stored in tm.extension_opcode.
2925
2926      AVX instructions also use this encoding, for some of
2927      3 argument instructions.  */
2928
2929   gas_assert (i.imm_operands == 0
2930               && (i.operands <= 2
2931                   || (i.tm.opcode_modifier.vex
2932                       && i.operands <= 4)));
2933
2934   exp = &im_expressions[i.imm_operands++];
2935   i.op[i.operands].imms = exp;
2936   i.types[i.operands] = imm8;
2937   i.operands++;
2938   exp->X_op = O_constant;
2939   exp->X_add_number = i.tm.extension_opcode;
2940   i.tm.extension_opcode = None;
2941 }
2942
2943 /* This is the guts of the machine-dependent assembler.  LINE points to a
2944    machine dependent instruction.  This function is supposed to emit
2945    the frags/bytes it assembles to.  */
2946
2947 void
2948 md_assemble (char *line)
2949 {
2950   unsigned int j;
2951   char mnemonic[MAX_MNEM_SIZE];
2952   const insn_template *t;
2953
2954   /* Initialize globals.  */
2955   memset (&i, '\0', sizeof (i));
2956   for (j = 0; j < MAX_OPERANDS; j++)
2957     i.reloc[j] = NO_RELOC;
2958   memset (disp_expressions, '\0', sizeof (disp_expressions));
2959   memset (im_expressions, '\0', sizeof (im_expressions));
2960   save_stack_p = save_stack;
2961
2962   /* First parse an instruction mnemonic & call i386_operand for the operands.
2963      We assume that the scrubber has arranged it so that line[0] is the valid
2964      start of a (possibly prefixed) mnemonic.  */
2965
2966   line = parse_insn (line, mnemonic);
2967   if (line == NULL)
2968     return;
2969
2970   line = parse_operands (line, mnemonic);
2971   this_operand = -1;
2972   if (line == NULL)
2973     return;
2974
2975   /* Now we've parsed the mnemonic into a set of templates, and have the
2976      operands at hand.  */
2977
2978   /* All intel opcodes have reversed operands except for "bound" and
2979      "enter".  We also don't reverse intersegment "jmp" and "call"
2980      instructions with 2 immediate operands so that the immediate segment
2981      precedes the offset, as it does when in AT&T mode. */
2982   if (intel_syntax
2983       && i.operands > 1
2984       && (strcmp (mnemonic, "bound") != 0)
2985       && (strcmp (mnemonic, "invlpga") != 0)
2986       && !(operand_type_check (i.types[0], imm)
2987            && operand_type_check (i.types[1], imm)))
2988     swap_operands ();
2989
2990   /* The order of the immediates should be reversed
2991      for 2 immediates extrq and insertq instructions */
2992   if (i.imm_operands == 2
2993       && (strcmp (mnemonic, "extrq") == 0
2994           || strcmp (mnemonic, "insertq") == 0))
2995       swap_2_operands (0, 1);
2996
2997   if (i.imm_operands)
2998     optimize_imm ();
2999
3000   /* Don't optimize displacement for movabs since it only takes 64bit
3001      displacement.  */
3002   if (i.disp_operands
3003       && !i.disp32_encoding
3004       && (flag_code != CODE_64BIT
3005           || strcmp (mnemonic, "movabs") != 0))
3006     optimize_disp ();
3007
3008   /* Next, we find a template that matches the given insn,
3009      making sure the overlap of the given operands types is consistent
3010      with the template operand types.  */
3011
3012   if (!(t = match_template ()))
3013     return;
3014
3015   if (sse_check != sse_check_none
3016       && !i.tm.opcode_modifier.noavx
3017       && (i.tm.cpu_flags.bitfield.cpusse
3018           || i.tm.cpu_flags.bitfield.cpusse2
3019           || i.tm.cpu_flags.bitfield.cpusse3
3020           || i.tm.cpu_flags.bitfield.cpussse3
3021           || i.tm.cpu_flags.bitfield.cpusse4_1
3022           || i.tm.cpu_flags.bitfield.cpusse4_2))
3023     {
3024       (sse_check == sse_check_warning
3025        ? as_warn
3026        : as_bad) (_("SSE instruction `%s' is used"), i.tm.name);
3027     }
3028
3029   /* Zap movzx and movsx suffix.  The suffix has been set from
3030      "word ptr" or "byte ptr" on the source operand in Intel syntax
3031      or extracted from mnemonic in AT&T syntax.  But we'll use
3032      the destination register to choose the suffix for encoding.  */
3033   if ((i.tm.base_opcode & ~9) == 0x0fb6)
3034     {
3035       /* In Intel syntax, there must be a suffix.  In AT&T syntax, if
3036          there is no suffix, the default will be byte extension.  */
3037       if (i.reg_operands != 2
3038           && !i.suffix
3039           && intel_syntax)
3040         as_bad (_("ambiguous operand size for `%s'"), i.tm.name);
3041
3042       i.suffix = 0;
3043     }
3044
3045   if (i.tm.opcode_modifier.fwait)
3046     if (!add_prefix (FWAIT_OPCODE))
3047       return;
3048
3049   /* Check for lock without a lockable instruction.  Destination operand
3050      must be memory unless it is xchg (0x86).  */
3051   if (i.prefix[LOCK_PREFIX]
3052       && (!i.tm.opcode_modifier.islockable
3053           || i.mem_operands == 0
3054           || (i.tm.base_opcode != 0x86
3055               && !operand_type_check (i.types[i.operands - 1], anymem))))
3056     {
3057       as_bad (_("expecting lockable instruction after `lock'"));
3058       return;
3059     }
3060
3061   /* Check string instruction segment overrides.  */
3062   if (i.tm.opcode_modifier.isstring && i.mem_operands != 0)
3063     {
3064       if (!check_string ())
3065         return;
3066       i.disp_operands = 0;
3067     }
3068
3069   if (!process_suffix ())
3070     return;
3071
3072   /* Update operand types.  */
3073   for (j = 0; j < i.operands; j++)
3074     i.types[j] = operand_type_and (i.types[j], i.tm.operand_types[j]);
3075
3076   /* Make still unresolved immediate matches conform to size of immediate
3077      given in i.suffix.  */
3078   if (!finalize_imm ())
3079     return;
3080
3081   if (i.types[0].bitfield.imm1)
3082     i.imm_operands = 0; /* kludge for shift insns.  */
3083
3084   /* We only need to check those implicit registers for instructions
3085      with 3 operands or less.  */
3086   if (i.operands <= 3)
3087     for (j = 0; j < i.operands; j++)
3088       if (i.types[j].bitfield.inoutportreg
3089           || i.types[j].bitfield.shiftcount
3090           || i.types[j].bitfield.acc
3091           || i.types[j].bitfield.floatacc)
3092         i.reg_operands--;
3093
3094   /* ImmExt should be processed after SSE2AVX.  */
3095   if (!i.tm.opcode_modifier.sse2avx
3096       && i.tm.opcode_modifier.immext)
3097     process_immext ();
3098
3099   /* For insns with operands there are more diddles to do to the opcode.  */
3100   if (i.operands)
3101     {
3102       if (!process_operands ())
3103         return;
3104     }
3105   else if (!quiet_warnings && i.tm.opcode_modifier.ugh)
3106     {
3107       /* UnixWare fsub no args is alias for fsubp, fadd -> faddp, etc.  */
3108       as_warn (_("translating to `%sp'"), i.tm.name);
3109     }
3110
3111   if (i.tm.opcode_modifier.vex)
3112     build_vex_prefix (t);
3113
3114   /* Handle conversion of 'int $3' --> special int3 insn.  XOP or FMA4
3115      instructions may define INT_OPCODE as well, so avoid this corner
3116      case for those instructions that use MODRM.  */
3117   if (i.tm.base_opcode == INT_OPCODE
3118       && !i.tm.opcode_modifier.modrm
3119       && i.op[0].imms->X_add_number == 3)
3120     {
3121       i.tm.base_opcode = INT3_OPCODE;
3122       i.imm_operands = 0;
3123     }
3124
3125   if ((i.tm.opcode_modifier.jump
3126        || i.tm.opcode_modifier.jumpbyte
3127        || i.tm.opcode_modifier.jumpdword)
3128       && i.op[0].disps->X_op == O_constant)
3129     {
3130       /* Convert "jmp constant" (and "call constant") to a jump (call) to
3131          the absolute address given by the constant.  Since ix86 jumps and
3132          calls are pc relative, we need to generate a reloc.  */
3133       i.op[0].disps->X_add_symbol = &abs_symbol;
3134       i.op[0].disps->X_op = O_symbol;
3135     }
3136
3137   if (i.tm.opcode_modifier.rex64)
3138     i.rex |= REX_W;
3139
3140   /* For 8 bit registers we need an empty rex prefix.  Also if the
3141      instruction already has a prefix, we need to convert old
3142      registers to new ones.  */
3143
3144   if ((i.types[0].bitfield.reg8
3145        && (i.op[0].regs->reg_flags & RegRex64) != 0)
3146       || (i.types[1].bitfield.reg8
3147           && (i.op[1].regs->reg_flags & RegRex64) != 0)
3148       || ((i.types[0].bitfield.reg8
3149            || i.types[1].bitfield.reg8)
3150           && i.rex != 0))
3151     {
3152       int x;
3153
3154       i.rex |= REX_OPCODE;
3155       for (x = 0; x < 2; x++)
3156         {
3157           /* Look for 8 bit operand that uses old registers.  */
3158           if (i.types[x].bitfield.reg8
3159               && (i.op[x].regs->reg_flags & RegRex64) == 0)
3160             {
3161               /* In case it is "hi" register, give up.  */
3162               if (i.op[x].regs->reg_num > 3)
3163                 as_bad (_("can't encode register '%s%s' in an "
3164                           "instruction requiring REX prefix."),
3165                         register_prefix, i.op[x].regs->reg_name);
3166
3167               /* Otherwise it is equivalent to the extended register.
3168                  Since the encoding doesn't change this is merely
3169                  cosmetic cleanup for debug output.  */
3170
3171               i.op[x].regs = i.op[x].regs + 8;
3172             }
3173         }
3174     }
3175
3176   if (i.rex != 0)
3177     add_prefix (REX_OPCODE | i.rex);
3178
3179   /* We are ready to output the insn.  */
3180   output_insn ();
3181 }
3182
3183 static char *
3184 parse_insn (char *line, char *mnemonic)
3185 {
3186   char *l = line;
3187   char *token_start = l;
3188   char *mnem_p;
3189   int supported;
3190   const insn_template *t;
3191   char *dot_p = NULL;
3192
3193   /* Non-zero if we found a prefix only acceptable with string insns.  */
3194   const char *expecting_string_instruction = NULL;
3195
3196   while (1)
3197     {
3198       mnem_p = mnemonic;
3199       while ((*mnem_p = mnemonic_chars[(unsigned char) *l]) != 0)
3200         {
3201           if (*mnem_p == '.')
3202             dot_p = mnem_p;
3203           mnem_p++;
3204           if (mnem_p >= mnemonic + MAX_MNEM_SIZE)
3205             {
3206               as_bad (_("no such instruction: `%s'"), token_start);
3207               return NULL;
3208             }
3209           l++;
3210         }
3211       if (!is_space_char (*l)
3212           && *l != END_OF_INSN
3213           && (intel_syntax
3214               || (*l != PREFIX_SEPARATOR
3215                   && *l != ',')))
3216         {
3217           as_bad (_("invalid character %s in mnemonic"),
3218                   output_invalid (*l));
3219           return NULL;
3220         }
3221       if (token_start == l)
3222         {
3223           if (!intel_syntax && *l == PREFIX_SEPARATOR)
3224             as_bad (_("expecting prefix; got nothing"));
3225           else
3226             as_bad (_("expecting mnemonic; got nothing"));
3227           return NULL;
3228         }
3229
3230       /* Look up instruction (or prefix) via hash table.  */
3231       current_templates = (const templates *) hash_find (op_hash, mnemonic);
3232
3233       if (*l != END_OF_INSN
3234           && (!is_space_char (*l) || l[1] != END_OF_INSN)
3235           && current_templates
3236           && current_templates->start->opcode_modifier.isprefix)
3237         {
3238           if (!cpu_flags_check_cpu64 (current_templates->start->cpu_flags))
3239             {
3240               as_bad ((flag_code != CODE_64BIT
3241                        ? _("`%s' is only supported in 64-bit mode")
3242                        : _("`%s' is not supported in 64-bit mode")),
3243                       current_templates->start->name);
3244               return NULL;
3245             }
3246           /* If we are in 16-bit mode, do not allow addr16 or data16.
3247              Similarly, in 32-bit mode, do not allow addr32 or data32.  */
3248           if ((current_templates->start->opcode_modifier.size16
3249                || current_templates->start->opcode_modifier.size32)
3250               && flag_code != CODE_64BIT
3251               && (current_templates->start->opcode_modifier.size32
3252                   ^ (flag_code == CODE_16BIT)))
3253             {
3254               as_bad (_("redundant %s prefix"),
3255                       current_templates->start->name);
3256               return NULL;
3257             }
3258           /* Add prefix, checking for repeated prefixes.  */
3259           switch (add_prefix (current_templates->start->base_opcode))
3260             {
3261             case PREFIX_EXIST:
3262               return NULL;
3263             case PREFIX_REP:
3264               expecting_string_instruction = current_templates->start->name;
3265               break;
3266             default:
3267               break;
3268             }
3269           /* Skip past PREFIX_SEPARATOR and reset token_start.  */
3270           token_start = ++l;
3271         }
3272       else
3273         break;
3274     }
3275
3276   if (!current_templates)
3277     {
3278       /* Check if we should swap operand or force 32bit displacement in
3279          encoding.  */
3280       if (mnem_p - 2 == dot_p && dot_p[1] == 's')
3281         i.swap_operand = 1;
3282       else if (mnem_p - 4 == dot_p 
3283                && dot_p[1] == 'd'
3284                && dot_p[2] == '3'
3285                && dot_p[3] == '2')
3286         i.disp32_encoding = 1;
3287       else
3288         goto check_suffix;
3289       mnem_p = dot_p;
3290       *dot_p = '\0';
3291       current_templates = (const templates *) hash_find (op_hash, mnemonic);
3292     }
3293
3294   if (!current_templates)
3295     {
3296 check_suffix:
3297       /* See if we can get a match by trimming off a suffix.  */
3298       switch (mnem_p[-1])
3299         {
3300         case WORD_MNEM_SUFFIX:
3301           if (intel_syntax && (intel_float_operand (mnemonic) & 2))
3302             i.suffix = SHORT_MNEM_SUFFIX;
3303           else
3304         case BYTE_MNEM_SUFFIX:
3305         case QWORD_MNEM_SUFFIX:
3306           i.suffix = mnem_p[-1];
3307           mnem_p[-1] = '\0';
3308           current_templates = (const templates *) hash_find (op_hash,
3309                                                              mnemonic);
3310           break;
3311         case SHORT_MNEM_SUFFIX:
3312         case LONG_MNEM_SUFFIX:
3313           if (!intel_syntax)
3314             {
3315               i.suffix = mnem_p[-1];
3316               mnem_p[-1] = '\0';
3317               current_templates = (const templates *) hash_find (op_hash,
3318                                                                  mnemonic);
3319             }
3320           break;
3321
3322           /* Intel Syntax.  */
3323         case 'd':
3324           if (intel_syntax)
3325             {
3326               if (intel_float_operand (mnemonic) == 1)
3327                 i.suffix = SHORT_MNEM_SUFFIX;
3328               else
3329                 i.suffix = LONG_MNEM_SUFFIX;
3330               mnem_p[-1] = '\0';
3331               current_templates = (const templates *) hash_find (op_hash,
3332                                                                  mnemonic);
3333             }
3334           break;
3335         }
3336       if (!current_templates)
3337         {
3338           as_bad (_("no such instruction: `%s'"), token_start);
3339           return NULL;
3340         }
3341     }
3342
3343   if (current_templates->start->opcode_modifier.jump
3344       || current_templates->start->opcode_modifier.jumpbyte)
3345     {
3346       /* Check for a branch hint.  We allow ",pt" and ",pn" for
3347          predict taken and predict not taken respectively.
3348          I'm not sure that branch hints actually do anything on loop
3349          and jcxz insns (JumpByte) for current Pentium4 chips.  They
3350          may work in the future and it doesn't hurt to accept them
3351          now.  */
3352       if (l[0] == ',' && l[1] == 'p')
3353         {
3354           if (l[2] == 't')
3355             {
3356               if (!add_prefix (DS_PREFIX_OPCODE))
3357                 return NULL;
3358               l += 3;
3359             }
3360           else if (l[2] == 'n')
3361             {
3362               if (!add_prefix (CS_PREFIX_OPCODE))
3363                 return NULL;
3364               l += 3;
3365             }
3366         }
3367     }
3368   /* Any other comma loses.  */
3369   if (*l == ',')
3370     {
3371       as_bad (_("invalid character %s in mnemonic"),
3372               output_invalid (*l));
3373       return NULL;
3374     }
3375
3376   /* Check if instruction is supported on specified architecture.  */
3377   supported = 0;
3378   for (t = current_templates->start; t < current_templates->end; ++t)
3379     {
3380       supported |= cpu_flags_match (t);
3381       if (supported == CPU_FLAGS_PERFECT_MATCH)
3382         goto skip;
3383     }
3384
3385   if (!(supported & CPU_FLAGS_64BIT_MATCH))
3386     {
3387       as_bad (flag_code == CODE_64BIT
3388               ? _("`%s' is not supported in 64-bit mode")
3389               : _("`%s' is only supported in 64-bit mode"),
3390               current_templates->start->name);
3391       return NULL;
3392     }
3393   if (supported != CPU_FLAGS_PERFECT_MATCH)
3394     {
3395       as_bad (_("`%s' is not supported on `%s%s'"),
3396               current_templates->start->name,
3397               cpu_arch_name ? cpu_arch_name : default_arch,
3398               cpu_sub_arch_name ? cpu_sub_arch_name : "");
3399       return NULL;
3400     }
3401
3402 skip:
3403   if (!cpu_arch_flags.bitfield.cpui386
3404            && (flag_code != CODE_16BIT))
3405     {
3406       as_warn (_("use .code16 to ensure correct addressing mode"));
3407     }
3408
3409   /* Check for rep/repne without a string instruction.  */
3410   if (expecting_string_instruction)
3411     {
3412       static templates override;
3413
3414       for (t = current_templates->start; t < current_templates->end; ++t)
3415         if (t->opcode_modifier.isstring)
3416           break;
3417       if (t >= current_templates->end)
3418         {
3419           as_bad (_("expecting string instruction after `%s'"),
3420                   expecting_string_instruction);
3421           return NULL;
3422         }
3423       for (override.start = t; t < current_templates->end; ++t)
3424         if (!t->opcode_modifier.isstring)
3425           break;
3426       override.end = t;
3427       current_templates = &override;
3428     }
3429
3430   return l;
3431 }
3432
3433 static char *
3434 parse_operands (char *l, const char *mnemonic)
3435 {
3436   char *token_start;
3437
3438   /* 1 if operand is pending after ','.  */
3439   unsigned int expecting_operand = 0;
3440
3441   /* Non-zero if operand parens not balanced.  */
3442   unsigned int paren_not_balanced;
3443
3444   while (*l != END_OF_INSN)
3445     {
3446       /* Skip optional white space before operand.  */
3447       if (is_space_char (*l))
3448         ++l;
3449       if (!is_operand_char (*l) && *l != END_OF_INSN)
3450         {
3451           as_bad (_("invalid character %s before operand %d"),
3452                   output_invalid (*l),
3453                   i.operands + 1);
3454           return NULL;
3455         }
3456       token_start = l;  /* after white space */
3457       paren_not_balanced = 0;
3458       while (paren_not_balanced || *l != ',')
3459         {
3460           if (*l == END_OF_INSN)
3461             {
3462               if (paren_not_balanced)
3463                 {
3464                   if (!intel_syntax)
3465                     as_bad (_("unbalanced parenthesis in operand %d."),
3466                             i.operands + 1);
3467                   else
3468                     as_bad (_("unbalanced brackets in operand %d."),
3469                             i.operands + 1);
3470                   return NULL;
3471                 }
3472               else
3473                 break;  /* we are done */
3474             }
3475           else if (!is_operand_char (*l) && !is_space_char (*l))
3476             {
3477               as_bad (_("invalid character %s in operand %d"),
3478                       output_invalid (*l),
3479                       i.operands + 1);
3480               return NULL;
3481             }
3482           if (!intel_syntax)
3483             {
3484               if (*l == '(')
3485                 ++paren_not_balanced;
3486               if (*l == ')')
3487                 --paren_not_balanced;
3488             }
3489           else
3490             {
3491               if (*l == '[')
3492                 ++paren_not_balanced;
3493               if (*l == ']')
3494                 --paren_not_balanced;
3495             }
3496           l++;
3497         }
3498       if (l != token_start)
3499         {                       /* Yes, we've read in another operand.  */
3500           unsigned int operand_ok;
3501           this_operand = i.operands++;
3502           i.types[this_operand].bitfield.unspecified = 1;
3503           if (i.operands > MAX_OPERANDS)
3504             {
3505               as_bad (_("spurious operands; (%d operands/instruction max)"),
3506                       MAX_OPERANDS);
3507               return NULL;
3508             }
3509           /* Now parse operand adding info to 'i' as we go along.  */
3510           END_STRING_AND_SAVE (l);
3511
3512           if (intel_syntax)
3513             operand_ok =
3514               i386_intel_operand (token_start,
3515                                   intel_float_operand (mnemonic));
3516           else
3517             operand_ok = i386_att_operand (token_start);
3518
3519           RESTORE_END_STRING (l);
3520           if (!operand_ok)
3521             return NULL;
3522         }
3523       else
3524         {
3525           if (expecting_operand)
3526             {
3527             expecting_operand_after_comma:
3528               as_bad (_("expecting operand after ','; got nothing"));
3529               return NULL;
3530             }
3531           if (*l == ',')
3532             {
3533               as_bad (_("expecting operand before ','; got nothing"));
3534               return NULL;
3535             }
3536         }
3537
3538       /* Now *l must be either ',' or END_OF_INSN.  */
3539       if (*l == ',')
3540         {
3541           if (*++l == END_OF_INSN)
3542             {
3543               /* Just skip it, if it's \n complain.  */
3544               goto expecting_operand_after_comma;
3545             }
3546           expecting_operand = 1;
3547         }
3548     }
3549   return l;
3550 }
3551
3552 static void
3553 swap_2_operands (int xchg1, int xchg2)
3554 {
3555   union i386_op temp_op;
3556   i386_operand_type temp_type;
3557   enum bfd_reloc_code_real temp_reloc;
3558
3559   temp_type = i.types[xchg2];
3560   i.types[xchg2] = i.types[xchg1];
3561   i.types[xchg1] = temp_type;
3562   temp_op = i.op[xchg2];
3563   i.op[xchg2] = i.op[xchg1];
3564   i.op[xchg1] = temp_op;
3565   temp_reloc = i.reloc[xchg2];
3566   i.reloc[xchg2] = i.reloc[xchg1];
3567   i.reloc[xchg1] = temp_reloc;
3568 }
3569
3570 static void
3571 swap_operands (void)
3572 {
3573   switch (i.operands)
3574     {
3575     case 5:
3576     case 4:
3577       swap_2_operands (1, i.operands - 2);
3578     case 3:
3579     case 2:
3580       swap_2_operands (0, i.operands - 1);
3581       break;
3582     default:
3583       abort ();
3584     }
3585
3586   if (i.mem_operands == 2)
3587     {
3588       const seg_entry *temp_seg;
3589       temp_seg = i.seg[0];
3590       i.seg[0] = i.seg[1];
3591       i.seg[1] = temp_seg;
3592     }
3593 }
3594
3595 /* Try to ensure constant immediates are represented in the smallest
3596    opcode possible.  */
3597 static void
3598 optimize_imm (void)
3599 {
3600   char guess_suffix = 0;
3601   int op;
3602
3603   if (i.suffix)
3604     guess_suffix = i.suffix;
3605   else if (i.reg_operands)
3606     {
3607       /* Figure out a suffix from the last register operand specified.
3608          We can't do this properly yet, ie. excluding InOutPortReg,
3609          but the following works for instructions with immediates.
3610          In any case, we can't set i.suffix yet.  */
3611       for (op = i.operands; --op >= 0;)
3612         if (i.types[op].bitfield.reg8)
3613           {
3614             guess_suffix = BYTE_MNEM_SUFFIX;
3615             break;
3616           }
3617         else if (i.types[op].bitfield.reg16)
3618           {
3619             guess_suffix = WORD_MNEM_SUFFIX;
3620             break;
3621           }
3622         else if (i.types[op].bitfield.reg32)
3623           {
3624             guess_suffix = LONG_MNEM_SUFFIX;
3625             break;
3626           }
3627         else if (i.types[op].bitfield.reg64)
3628           {
3629             guess_suffix = QWORD_MNEM_SUFFIX;
3630             break;
3631           }
3632     }
3633   else if ((flag_code == CODE_16BIT) ^ (i.prefix[DATA_PREFIX] != 0))
3634     guess_suffix = WORD_MNEM_SUFFIX;
3635
3636   for (op = i.operands; --op >= 0;)
3637     if (operand_type_check (i.types[op], imm))
3638       {
3639         switch (i.op[op].imms->X_op)
3640           {
3641           case O_constant:
3642             /* If a suffix is given, this operand may be shortened.  */
3643             switch (guess_suffix)
3644               {
3645               case LONG_MNEM_SUFFIX:
3646                 i.types[op].bitfield.imm32 = 1;
3647                 i.types[op].bitfield.imm64 = 1;
3648                 break;
3649               case WORD_MNEM_SUFFIX:
3650                 i.types[op].bitfield.imm16 = 1;
3651                 i.types[op].bitfield.imm32 = 1;
3652                 i.types[op].bitfield.imm32s = 1;
3653                 i.types[op].bitfield.imm64 = 1;
3654                 break;
3655               case BYTE_MNEM_SUFFIX:
3656                 i.types[op].bitfield.imm8 = 1;
3657                 i.types[op].bitfield.imm8s = 1;
3658                 i.types[op].bitfield.imm16 = 1;
3659                 i.types[op].bitfield.imm32 = 1;
3660                 i.types[op].bitfield.imm32s = 1;
3661                 i.types[op].bitfield.imm64 = 1;
3662                 break;
3663               }
3664
3665             /* If this operand is at most 16 bits, convert it
3666                to a signed 16 bit number before trying to see
3667                whether it will fit in an even smaller size.
3668                This allows a 16-bit operand such as $0xffe0 to
3669                be recognised as within Imm8S range.  */
3670             if ((i.types[op].bitfield.imm16)
3671                 && (i.op[op].imms->X_add_number & ~(offsetT) 0xffff) == 0)
3672               {
3673                 i.op[op].imms->X_add_number =
3674                   (((i.op[op].imms->X_add_number & 0xffff) ^ 0x8000) - 0x8000);
3675               }
3676             if ((i.types[op].bitfield.imm32)
3677                 && ((i.op[op].imms->X_add_number & ~(((offsetT) 2 << 31) - 1))
3678                     == 0))
3679               {
3680                 i.op[op].imms->X_add_number = ((i.op[op].imms->X_add_number
3681                                                 ^ ((offsetT) 1 << 31))
3682                                                - ((offsetT) 1 << 31));
3683               }
3684             i.types[op]
3685               = operand_type_or (i.types[op],
3686                                  smallest_imm_type (i.op[op].imms->X_add_number));
3687
3688             /* We must avoid matching of Imm32 templates when 64bit
3689                only immediate is available.  */
3690             if (guess_suffix == QWORD_MNEM_SUFFIX)
3691               i.types[op].bitfield.imm32 = 0;
3692             break;
3693
3694           case O_absent:
3695           case O_register:
3696             abort ();
3697
3698             /* Symbols and expressions.  */
3699           default:
3700             /* Convert symbolic operand to proper sizes for matching, but don't
3701                prevent matching a set of insns that only supports sizes other
3702                than those matching the insn suffix.  */
3703             {
3704               i386_operand_type mask, allowed;
3705               const insn_template *t;
3706
3707               operand_type_set (&mask, 0);
3708               operand_type_set (&allowed, 0);
3709
3710               for (t = current_templates->start;
3711                    t < current_templates->end;
3712                    ++t)
3713                 allowed = operand_type_or (allowed,
3714                                            t->operand_types[op]);
3715               switch (guess_suffix)
3716                 {
3717                 case QWORD_MNEM_SUFFIX:
3718                   mask.bitfield.imm64 = 1;
3719                   mask.bitfield.imm32s = 1;
3720                   break;
3721                 case LONG_MNEM_SUFFIX:
3722                   mask.bitfield.imm32 = 1;
3723                   break;
3724                 case WORD_MNEM_SUFFIX:
3725                   mask.bitfield.imm16 = 1;
3726                   break;
3727                 case BYTE_MNEM_SUFFIX:
3728                   mask.bitfield.imm8 = 1;
3729                   break;
3730                 default:
3731                   break;
3732                 }
3733               allowed = operand_type_and (mask, allowed);
3734               if (!operand_type_all_zero (&allowed))
3735                 i.types[op] = operand_type_and (i.types[op], mask);
3736             }
3737             break;
3738           }
3739       }
3740 }
3741
3742 /* Try to use the smallest displacement type too.  */
3743 static void
3744 optimize_disp (void)
3745 {
3746   int op;
3747
3748   for (op = i.operands; --op >= 0;)
3749     if (operand_type_check (i.types[op], disp))
3750       {
3751         if (i.op[op].disps->X_op == O_constant)
3752           {
3753             offsetT op_disp = i.op[op].disps->X_add_number;
3754
3755             if (i.types[op].bitfield.disp16
3756                 && (op_disp & ~(offsetT) 0xffff) == 0)
3757               {
3758                 /* If this operand is at most 16 bits, convert
3759                    to a signed 16 bit number and don't use 64bit
3760                    displacement.  */
3761                 op_disp = (((op_disp & 0xffff) ^ 0x8000) - 0x8000);
3762                 i.types[op].bitfield.disp64 = 0;
3763               }
3764             if (i.types[op].bitfield.disp32
3765                 && (op_disp & ~(((offsetT) 2 << 31) - 1)) == 0)
3766               {
3767                 /* If this operand is at most 32 bits, convert
3768                    to a signed 32 bit number and don't use 64bit
3769                    displacement.  */
3770                 op_disp &= (((offsetT) 2 << 31) - 1);
3771                 op_disp = (op_disp ^ ((offsetT) 1 << 31)) - ((addressT) 1 << 31);
3772                 i.types[op].bitfield.disp64 = 0;
3773               }
3774             if (!op_disp && i.types[op].bitfield.baseindex)
3775               {
3776                 i.types[op].bitfield.disp8 = 0;
3777                 i.types[op].bitfield.disp16 = 0;
3778                 i.types[op].bitfield.disp32 = 0;
3779                 i.types[op].bitfield.disp32s = 0;
3780                 i.types[op].bitfield.disp64 = 0;
3781                 i.op[op].disps = 0;
3782                 i.disp_operands--;
3783               }
3784             else if (flag_code == CODE_64BIT)
3785               {
3786                 if (fits_in_signed_long (op_disp))
3787                   {
3788                     i.types[op].bitfield.disp64 = 0;
3789                     i.types[op].bitfield.disp32s = 1;
3790                   }
3791                 if (i.prefix[ADDR_PREFIX]
3792                     && fits_in_unsigned_long (op_disp))
3793                   i.types[op].bitfield.disp32 = 1;
3794               }
3795             if ((i.types[op].bitfield.disp32
3796                  || i.types[op].bitfield.disp32s
3797                  || i.types[op].bitfield.disp16)
3798                 && fits_in_signed_byte (op_disp))
3799               i.types[op].bitfield.disp8 = 1;
3800           }
3801         else if (i.reloc[op] == BFD_RELOC_386_TLS_DESC_CALL
3802                  || i.reloc[op] == BFD_RELOC_X86_64_TLSDESC_CALL)
3803           {
3804             fix_new_exp (frag_now, frag_more (0) - frag_now->fr_literal, 0,
3805                          i.op[op].disps, 0, i.reloc[op]);
3806             i.types[op].bitfield.disp8 = 0;
3807             i.types[op].bitfield.disp16 = 0;
3808             i.types[op].bitfield.disp32 = 0;
3809             i.types[op].bitfield.disp32s = 0;
3810             i.types[op].bitfield.disp64 = 0;
3811           }
3812         else
3813           /* We only support 64bit displacement on constants.  */
3814           i.types[op].bitfield.disp64 = 0;
3815       }
3816 }
3817
3818 /* Check if operands are valid for the instruction.  Update VEX
3819    operand types.  */
3820
3821 static int
3822 VEX_check_operands (const insn_template *t)
3823 {
3824   if (!t->opcode_modifier.vex)
3825     return 0;
3826
3827   /* Only check VEX_Imm4, which must be the first operand.  */
3828   if (t->operand_types[0].bitfield.vec_imm4)
3829     {
3830       if (i.op[0].imms->X_op != O_constant
3831           || !fits_in_imm4 (i.op[0].imms->X_add_number))
3832         {
3833           i.error = bad_imm4;
3834           return 1;
3835         }
3836
3837       /* Turn off Imm8 so that update_imm won't complain.  */
3838       i.types[0] = vec_imm4;
3839     }
3840
3841   return 0;
3842 }
3843
3844 static const insn_template *
3845 match_template (void)
3846 {
3847   /* Points to template once we've found it.  */
3848   const insn_template *t;
3849   i386_operand_type overlap0, overlap1, overlap2, overlap3;
3850   i386_operand_type overlap4;
3851   unsigned int found_reverse_match;
3852   i386_opcode_modifier suffix_check;
3853   i386_operand_type operand_types [MAX_OPERANDS];
3854   int addr_prefix_disp;
3855   unsigned int j;
3856   unsigned int found_cpu_match;
3857   unsigned int check_register;
3858
3859 #if MAX_OPERANDS != 5
3860 # error "MAX_OPERANDS must be 5."
3861 #endif
3862
3863   found_reverse_match = 0;
3864   addr_prefix_disp = -1;
3865
3866   memset (&suffix_check, 0, sizeof (suffix_check));
3867   if (i.suffix == BYTE_MNEM_SUFFIX)
3868     suffix_check.no_bsuf = 1;
3869   else if (i.suffix == WORD_MNEM_SUFFIX)
3870     suffix_check.no_wsuf = 1;
3871   else if (i.suffix == SHORT_MNEM_SUFFIX)
3872     suffix_check.no_ssuf = 1;
3873   else if (i.suffix == LONG_MNEM_SUFFIX)
3874     suffix_check.no_lsuf = 1;
3875   else if (i.suffix == QWORD_MNEM_SUFFIX)
3876     suffix_check.no_qsuf = 1;
3877   else if (i.suffix == LONG_DOUBLE_MNEM_SUFFIX)
3878     suffix_check.no_ldsuf = 1;
3879
3880   /* Must have right number of operands.  */
3881   i.error = number_of_operands_mismatch;
3882
3883   for (t = current_templates->start; t < current_templates->end; t++)
3884     {
3885       addr_prefix_disp = -1;
3886
3887       if (i.operands != t->operands)
3888         continue;
3889
3890       /* Check processor support.  */
3891       i.error = unsupported;
3892       found_cpu_match = (cpu_flags_match (t)
3893                          == CPU_FLAGS_PERFECT_MATCH);
3894       if (!found_cpu_match)
3895         continue;
3896
3897       /* Check old gcc support. */
3898       i.error = old_gcc_only;
3899       if (!old_gcc && t->opcode_modifier.oldgcc)
3900         continue;
3901
3902       /* Check AT&T mnemonic.   */
3903       i.error = unsupported_with_intel_mnemonic;
3904       if (intel_mnemonic && t->opcode_modifier.attmnemonic)
3905         continue;
3906
3907       /* Check AT&T/Intel syntax.   */
3908       i.error = unsupported_syntax;
3909       if ((intel_syntax && t->opcode_modifier.attsyntax)
3910           || (!intel_syntax && t->opcode_modifier.intelsyntax))
3911         continue;
3912
3913       /* Check the suffix, except for some instructions in intel mode.  */
3914       i.error = invalid_instruction_suffix;
3915       if ((!intel_syntax || !t->opcode_modifier.ignoresize)
3916           && ((t->opcode_modifier.no_bsuf && suffix_check.no_bsuf)
3917               || (t->opcode_modifier.no_wsuf && suffix_check.no_wsuf)
3918               || (t->opcode_modifier.no_lsuf && suffix_check.no_lsuf)
3919               || (t->opcode_modifier.no_ssuf && suffix_check.no_ssuf)
3920               || (t->opcode_modifier.no_qsuf && suffix_check.no_qsuf)
3921               || (t->opcode_modifier.no_ldsuf && suffix_check.no_ldsuf)))
3922         continue;
3923
3924       if (!operand_size_match (t))
3925         continue;
3926
3927       for (j = 0; j < MAX_OPERANDS; j++)
3928         operand_types[j] = t->operand_types[j];
3929
3930       /* In general, don't allow 64-bit operands in 32-bit mode.  */
3931       if (i.suffix == QWORD_MNEM_SUFFIX
3932           && flag_code != CODE_64BIT
3933           && (intel_syntax
3934               ? (!t->opcode_modifier.ignoresize
3935                  && !intel_float_operand (t->name))
3936               : intel_float_operand (t->name) != 2)
3937           && ((!operand_types[0].bitfield.regmmx
3938                && !operand_types[0].bitfield.regxmm
3939                && !operand_types[0].bitfield.regymm)
3940               || (!operand_types[t->operands > 1].bitfield.regmmx
3941                   && !!operand_types[t->operands > 1].bitfield.regxmm
3942                   && !!operand_types[t->operands > 1].bitfield.regymm))
3943           && (t->base_opcode != 0x0fc7
3944               || t->extension_opcode != 1 /* cmpxchg8b */))
3945         continue;
3946
3947       /* In general, don't allow 32-bit operands on pre-386.  */
3948       else if (i.suffix == LONG_MNEM_SUFFIX
3949                && !cpu_arch_flags.bitfield.cpui386
3950                && (intel_syntax
3951                    ? (!t->opcode_modifier.ignoresize
3952                       && !intel_float_operand (t->name))
3953                    : intel_float_operand (t->name) != 2)
3954                && ((!operand_types[0].bitfield.regmmx
3955                     && !operand_types[0].bitfield.regxmm)
3956                    || (!operand_types[t->operands > 1].bitfield.regmmx
3957                        && !!operand_types[t->operands > 1].bitfield.regxmm)))
3958         continue;
3959
3960       /* Do not verify operands when there are none.  */
3961       else
3962         {
3963           if (!t->operands)
3964             /* We've found a match; break out of loop.  */
3965             break;
3966         }
3967
3968       /* Address size prefix will turn Disp64/Disp32/Disp16 operand
3969          into Disp32/Disp16/Disp32 operand.  */
3970       if (i.prefix[ADDR_PREFIX] != 0)
3971           {
3972             /* There should be only one Disp operand.  */
3973             switch (flag_code)
3974             {
3975             case CODE_16BIT:
3976               for (j = 0; j < MAX_OPERANDS; j++)
3977                 {
3978                   if (operand_types[j].bitfield.disp16)
3979                     {
3980                       addr_prefix_disp = j;
3981                       operand_types[j].bitfield.disp32 = 1;
3982                       operand_types[j].bitfield.disp16 = 0;
3983                       break;
3984                     }
3985                 }
3986               break;
3987             case CODE_32BIT:
3988               for (j = 0; j < MAX_OPERANDS; j++)
3989                 {
3990                   if (operand_types[j].bitfield.disp32)
3991                     {
3992                       addr_prefix_disp = j;
3993                       operand_types[j].bitfield.disp32 = 0;
3994                       operand_types[j].bitfield.disp16 = 1;
3995                       break;
3996                     }
3997                 }
3998               break;
3999             case CODE_64BIT:
4000               for (j = 0; j < MAX_OPERANDS; j++)
4001                 {
4002                   if (operand_types[j].bitfield.disp64)
4003                     {
4004                       addr_prefix_disp = j;
4005                       operand_types[j].bitfield.disp64 = 0;
4006                       operand_types[j].bitfield.disp32 = 1;
4007                       break;
4008                     }
4009                 }
4010               break;
4011             }
4012           }
4013
4014       /* We check register size if needed.  */
4015       check_register = t->opcode_modifier.checkregsize;
4016       overlap0 = operand_type_and (i.types[0], operand_types[0]);
4017       switch (t->operands)
4018         {
4019         case 1:
4020           if (!operand_type_match (overlap0, i.types[0]))
4021             continue;
4022           break;
4023         case 2:
4024           /* xchg %eax, %eax is a special case. It is an aliase for nop
4025              only in 32bit mode and we can use opcode 0x90.  In 64bit
4026              mode, we can't use 0x90 for xchg %eax, %eax since it should
4027              zero-extend %eax to %rax.  */
4028           if (flag_code == CODE_64BIT
4029               && t->base_opcode == 0x90
4030               && operand_type_equal (&i.types [0], &acc32)
4031               && operand_type_equal (&i.types [1], &acc32))
4032             continue;
4033           if (i.swap_operand)
4034             {
4035               /* If we swap operand in encoding, we either match
4036                  the next one or reverse direction of operands.  */
4037               if (t->opcode_modifier.s)
4038                 continue;
4039               else if (t->opcode_modifier.d)
4040                 goto check_reverse;
4041             }
4042
4043         case 3:
4044           /* If we swap operand in encoding, we match the next one.  */
4045           if (i.swap_operand && t->opcode_modifier.s)
4046             continue;
4047         case 4:
4048         case 5:
4049           overlap1 = operand_type_and (i.types[1], operand_types[1]);
4050           if (!operand_type_match (overlap0, i.types[0])
4051               || !operand_type_match (overlap1, i.types[1])
4052               || (check_register
4053                   && !operand_type_register_match (overlap0, i.types[0],
4054                                                    operand_types[0],
4055                                                    overlap1, i.types[1],
4056                                                    operand_types[1])))
4057             {
4058               /* Check if other direction is valid ...  */
4059               if (!t->opcode_modifier.d && !t->opcode_modifier.floatd)
4060                 continue;
4061
4062 check_reverse:
4063               /* Try reversing direction of operands.  */
4064               overlap0 = operand_type_and (i.types[0], operand_types[1]);
4065               overlap1 = operand_type_and (i.types[1], operand_types[0]);
4066               if (!operand_type_match (overlap0, i.types[0])
4067                   || !operand_type_match (overlap1, i.types[1])
4068                   || (check_register
4069                       && !operand_type_register_match (overlap0,
4070                                                        i.types[0],
4071                                                        operand_types[1],
4072                                                        overlap1,
4073                                                        i.types[1],
4074                                                        operand_types[0])))
4075                 {
4076                   /* Does not match either direction.  */
4077                   continue;
4078                 }
4079               /* found_reverse_match holds which of D or FloatDR
4080                  we've found.  */
4081               if (t->opcode_modifier.d)
4082                 found_reverse_match = Opcode_D;
4083               else if (t->opcode_modifier.floatd)
4084                 found_reverse_match = Opcode_FloatD;
4085               else
4086                 found_reverse_match = 0;
4087               if (t->opcode_modifier.floatr)
4088                 found_reverse_match |= Opcode_FloatR;
4089             }
4090           else
4091             {
4092               /* Found a forward 2 operand match here.  */
4093               switch (t->operands)
4094                 {
4095                 case 5:
4096                   overlap4 = operand_type_and (i.types[4],
4097                                                operand_types[4]);
4098                 case 4:
4099                   overlap3 = operand_type_and (i.types[3],
4100                                                operand_types[3]);
4101                 case 3:
4102                   overlap2 = operand_type_and (i.types[2],
4103                                                operand_types[2]);
4104                   break;
4105                 }
4106
4107               switch (t->operands)
4108                 {
4109                 case 5:
4110                   if (!operand_type_match (overlap4, i.types[4])
4111                       || !operand_type_register_match (overlap3,
4112                                                        i.types[3],
4113                                                        operand_types[3],
4114                                                        overlap4,
4115                                                        i.types[4],
4116                                                        operand_types[4]))
4117                     continue;
4118                 case 4:
4119                   if (!operand_type_match (overlap3, i.types[3])
4120                       || (check_register
4121                           && !operand_type_register_match (overlap2,
4122                                                            i.types[2],
4123                                                            operand_types[2],
4124                                                            overlap3,
4125                                                            i.types[3],
4126                                                            operand_types[3])))
4127                     continue;
4128                 case 3:
4129                   /* Here we make use of the fact that there are no
4130                      reverse match 3 operand instructions, and all 3
4131                      operand instructions only need to be checked for
4132                      register consistency between operands 2 and 3.  */
4133                   if (!operand_type_match (overlap2, i.types[2])
4134                       || (check_register
4135                           && !operand_type_register_match (overlap1,
4136                                                            i.types[1],
4137                                                            operand_types[1],
4138                                                            overlap2,
4139                                                            i.types[2],
4140                                                            operand_types[2])))
4141                     continue;
4142                   break;
4143                 }
4144             }
4145           /* Found either forward/reverse 2, 3 or 4 operand match here:
4146              slip through to break.  */
4147         }
4148       if (!found_cpu_match)
4149         {
4150           found_reverse_match = 0;
4151           continue;
4152         }
4153
4154       /* Check if VEX operands are valid.  */
4155       if (VEX_check_operands (t))
4156         continue;
4157
4158       /* We've found a match; break out of loop.  */
4159       break;
4160     }
4161
4162   if (t == current_templates->end)
4163     {
4164       /* We found no match.  */
4165       const char *err_msg;
4166       switch (i.error)
4167         {
4168         default:
4169           abort ();
4170         case operand_size_mismatch:
4171           err_msg = _("operand size mismatch");
4172           break;
4173         case operand_type_mismatch:
4174           err_msg = _("operand type mismatch");
4175           break;
4176         case register_type_mismatch:
4177           err_msg = _("register type mismatch");
4178           break;
4179         case number_of_operands_mismatch:
4180           err_msg = _("number of operands mismatch");
4181           break;
4182         case invalid_instruction_suffix:
4183           err_msg = _("invalid instruction suffix");
4184           break;
4185         case bad_imm4:
4186           err_msg = _("Imm4 isn't the first operand");
4187           break;
4188         case old_gcc_only:
4189           err_msg = _("only supported with old gcc");
4190           break;
4191         case unsupported_with_intel_mnemonic:
4192           err_msg = _("unsupported with Intel mnemonic");
4193           break;
4194         case unsupported_syntax:
4195           err_msg = _("unsupported syntax");
4196           break;
4197         case unsupported:
4198           err_msg = _("unsupported");
4199           break;
4200         }
4201       as_bad (_("%s for `%s'"), err_msg,
4202               current_templates->start->name);
4203       return NULL;
4204     }
4205
4206   if (!quiet_warnings)
4207     {
4208       if (!intel_syntax
4209           && (i.types[0].bitfield.jumpabsolute
4210               != operand_types[0].bitfield.jumpabsolute))
4211         {
4212           as_warn (_("indirect %s without `*'"), t->name);
4213         }
4214
4215       if (t->opcode_modifier.isprefix
4216           && t->opcode_modifier.ignoresize)
4217         {
4218           /* Warn them that a data or address size prefix doesn't
4219              affect assembly of the next line of code.  */
4220           as_warn (_("stand-alone `%s' prefix"), t->name);
4221         }
4222     }
4223
4224   /* Copy the template we found.  */
4225   i.tm = *t;
4226
4227   if (addr_prefix_disp != -1)
4228     i.tm.operand_types[addr_prefix_disp]
4229       = operand_types[addr_prefix_disp];
4230
4231   if (found_reverse_match)
4232     {
4233       /* If we found a reverse match we must alter the opcode
4234          direction bit.  found_reverse_match holds bits to change
4235          (different for int & float insns).  */
4236
4237       i.tm.base_opcode ^= found_reverse_match;
4238
4239       i.tm.operand_types[0] = operand_types[1];
4240       i.tm.operand_types[1] = operand_types[0];
4241     }
4242
4243   return t;
4244 }
4245
4246 static int
4247 check_string (void)
4248 {
4249   int mem_op = operand_type_check (i.types[0], anymem) ? 0 : 1;
4250   if (i.tm.operand_types[mem_op].bitfield.esseg)
4251     {
4252       if (i.seg[0] != NULL && i.seg[0] != &es)
4253         {
4254           as_bad (_("`%s' operand %d must use `%ses' segment"),
4255                   i.tm.name,
4256                   mem_op + 1,
4257                   register_prefix);
4258           return 0;
4259         }
4260       /* There's only ever one segment override allowed per instruction.
4261          This instruction possibly has a legal segment override on the
4262          second operand, so copy the segment to where non-string
4263          instructions store it, allowing common code.  */
4264       i.seg[0] = i.seg[1];
4265     }
4266   else if (i.tm.operand_types[mem_op + 1].bitfield.esseg)
4267     {
4268       if (i.seg[1] != NULL && i.seg[1] != &es)
4269         {
4270           as_bad (_("`%s' operand %d must use `%ses' segment"),
4271                   i.tm.name,
4272                   mem_op + 2,
4273                   register_prefix);
4274           return 0;
4275         }
4276     }
4277   return 1;
4278 }
4279
4280 static int
4281 process_suffix (void)
4282 {
4283   /* If matched instruction specifies an explicit instruction mnemonic
4284      suffix, use it.  */
4285   if (i.tm.opcode_modifier.size16)
4286     i.suffix = WORD_MNEM_SUFFIX;
4287   else if (i.tm.opcode_modifier.size32)
4288     i.suffix = LONG_MNEM_SUFFIX;
4289   else if (i.tm.opcode_modifier.size64)
4290     i.suffix = QWORD_MNEM_SUFFIX;
4291   else if (i.reg_operands)
4292     {
4293       /* If there's no instruction mnemonic suffix we try to invent one
4294          based on register operands.  */
4295       if (!i.suffix)
4296         {
4297           /* We take i.suffix from the last register operand specified,
4298              Destination register type is more significant than source
4299              register type.  crc32 in SSE4.2 prefers source register
4300              type. */
4301           if (i.tm.base_opcode == 0xf20f38f1)
4302             {
4303               if (i.types[0].bitfield.reg16)
4304                 i.suffix = WORD_MNEM_SUFFIX;
4305               else if (i.types[0].bitfield.reg32)
4306                 i.suffix = LONG_MNEM_SUFFIX;
4307               else if (i.types[0].bitfield.reg64)
4308                 i.suffix = QWORD_MNEM_SUFFIX;
4309             }
4310           else if (i.tm.base_opcode == 0xf20f38f0)
4311             {
4312               if (i.types[0].bitfield.reg8)
4313                 i.suffix = BYTE_MNEM_SUFFIX;
4314             }
4315
4316           if (!i.suffix)
4317             {
4318               int op;
4319
4320               if (i.tm.base_opcode == 0xf20f38f1
4321                   || i.tm.base_opcode == 0xf20f38f0)
4322                 {
4323                   /* We have to know the operand size for crc32.  */
4324                   as_bad (_("ambiguous memory operand size for `%s`"),
4325                           i.tm.name);
4326                   return 0;
4327                 }
4328
4329               for (op = i.operands; --op >= 0;)
4330                 if (!i.tm.operand_types[op].bitfield.inoutportreg)
4331                   {
4332                     if (i.types[op].bitfield.reg8)
4333                       {
4334                         i.suffix = BYTE_MNEM_SUFFIX;
4335                         break;
4336                       }
4337                     else if (i.types[op].bitfield.reg16)
4338                       {
4339                         i.suffix = WORD_MNEM_SUFFIX;
4340                         break;
4341                       }
4342                     else if (i.types[op].bitfield.reg32)
4343                       {
4344                         i.suffix = LONG_MNEM_SUFFIX;
4345                         break;
4346                       }
4347                     else if (i.types[op].bitfield.reg64)
4348                       {
4349                         i.suffix = QWORD_MNEM_SUFFIX;
4350                         break;
4351                       }
4352                   }
4353             }
4354         }
4355       else if (i.suffix == BYTE_MNEM_SUFFIX)
4356         {
4357           if (intel_syntax
4358               && i.tm.opcode_modifier.ignoresize
4359               && i.tm.opcode_modifier.no_bsuf)
4360             i.suffix = 0;
4361           else if (!check_byte_reg ())
4362             return 0;
4363         }
4364       else if (i.suffix == LONG_MNEM_SUFFIX)
4365         {
4366           if (intel_syntax
4367               && i.tm.opcode_modifier.ignoresize
4368               && i.tm.opcode_modifier.no_lsuf)
4369             i.suffix = 0;
4370           else if (!check_long_reg ())
4371             return 0;
4372         }
4373       else if (i.suffix == QWORD_MNEM_SUFFIX)
4374         {
4375           if (intel_syntax
4376               && i.tm.opcode_modifier.ignoresize
4377               && i.tm.opcode_modifier.no_qsuf)
4378             i.suffix = 0;
4379           else if (!check_qword_reg ())
4380             return 0;
4381         }
4382       else if (i.suffix == WORD_MNEM_SUFFIX)
4383         {
4384           if (intel_syntax
4385               && i.tm.opcode_modifier.ignoresize
4386               && i.tm.opcode_modifier.no_wsuf)
4387             i.suffix = 0;
4388           else if (!check_word_reg ())
4389             return 0;
4390         }
4391       else if (i.suffix == XMMWORD_MNEM_SUFFIX
4392                || i.suffix == YMMWORD_MNEM_SUFFIX)
4393         {
4394           /* Skip if the instruction has x/y suffix.  match_template
4395              should check if it is a valid suffix.  */
4396         }
4397       else if (intel_syntax && i.tm.opcode_modifier.ignoresize)
4398         /* Do nothing if the instruction is going to ignore the prefix.  */
4399         ;
4400       else
4401         abort ();
4402     }
4403   else if (i.tm.opcode_modifier.defaultsize
4404            && !i.suffix
4405            /* exclude fldenv/frstor/fsave/fstenv */
4406            && i.tm.opcode_modifier.no_ssuf)
4407     {
4408       i.suffix = stackop_size;
4409     }
4410   else if (intel_syntax
4411            && !i.suffix
4412            && (i.tm.operand_types[0].bitfield.jumpabsolute
4413                || i.tm.opcode_modifier.jumpbyte
4414                || i.tm.opcode_modifier.jumpintersegment
4415                || (i.tm.base_opcode == 0x0f01 /* [ls][gi]dt */
4416                    && i.tm.extension_opcode <= 3)))
4417     {
4418       switch (flag_code)
4419         {
4420         case CODE_64BIT:
4421           if (!i.tm.opcode_modifier.no_qsuf)
4422             {
4423               i.suffix = QWORD_MNEM_SUFFIX;
4424               break;
4425             }
4426         case CODE_32BIT:
4427           if (!i.tm.opcode_modifier.no_lsuf)
4428             i.suffix = LONG_MNEM_SUFFIX;
4429           break;
4430         case CODE_16BIT:
4431           if (!i.tm.opcode_modifier.no_wsuf)
4432             i.suffix = WORD_MNEM_SUFFIX;
4433           break;
4434         }
4435     }
4436
4437   if (!i.suffix)
4438     {
4439       if (!intel_syntax)
4440         {
4441           if (i.tm.opcode_modifier.w)
4442             {
4443               as_bad (_("no instruction mnemonic suffix given and "
4444                         "no register operands; can't size instruction"));
4445               return 0;
4446             }
4447         }
4448       else
4449         {
4450           unsigned int suffixes;
4451
4452           suffixes = !i.tm.opcode_modifier.no_bsuf;
4453           if (!i.tm.opcode_modifier.no_wsuf)
4454             suffixes |= 1 << 1;
4455           if (!i.tm.opcode_modifier.no_lsuf)
4456             suffixes |= 1 << 2;
4457           if (!i.tm.opcode_modifier.no_ldsuf)
4458             suffixes |= 1 << 3;
4459           if (!i.tm.opcode_modifier.no_ssuf)
4460             suffixes |= 1 << 4;
4461           if (!i.tm.opcode_modifier.no_qsuf)
4462             suffixes |= 1 << 5;
4463
4464           /* There are more than suffix matches.  */
4465           if (i.tm.opcode_modifier.w
4466               || ((suffixes & (suffixes - 1))
4467                   && !i.tm.opcode_modifier.defaultsize
4468                   && !i.tm.opcode_modifier.ignoresize))
4469             {
4470               as_bad (_("ambiguous operand size for `%s'"), i.tm.name);
4471               return 0;
4472             }
4473         }
4474     }
4475
4476   /* Change the opcode based on the operand size given by i.suffix;
4477      We don't need to change things for byte insns.  */
4478
4479   if (i.suffix
4480       && i.suffix != BYTE_MNEM_SUFFIX
4481       && i.suffix != XMMWORD_MNEM_SUFFIX
4482       && i.suffix != YMMWORD_MNEM_SUFFIX)
4483     {
4484       /* It's not a byte, select word/dword operation.  */
4485       if (i.tm.opcode_modifier.w)
4486         {
4487           if (i.tm.opcode_modifier.shortform)
4488             i.tm.base_opcode |= 8;
4489           else
4490             i.tm.base_opcode |= 1;
4491         }
4492
4493       /* Now select between word & dword operations via the operand
4494          size prefix, except for instructions that will ignore this
4495          prefix anyway.  */
4496       if (i.tm.opcode_modifier.addrprefixop0)
4497         {
4498           /* The address size override prefix changes the size of the
4499              first operand.  */
4500           if ((flag_code == CODE_32BIT
4501                && i.op->regs[0].reg_type.bitfield.reg16)
4502               || (flag_code != CODE_32BIT
4503                   && i.op->regs[0].reg_type.bitfield.reg32))
4504             if (!add_prefix (ADDR_PREFIX_OPCODE))
4505               return 0;
4506         }
4507       else if (i.suffix != QWORD_MNEM_SUFFIX
4508                && i.suffix != LONG_DOUBLE_MNEM_SUFFIX
4509                && !i.tm.opcode_modifier.ignoresize
4510                && !i.tm.opcode_modifier.floatmf
4511                && ((i.suffix == LONG_MNEM_SUFFIX) == (flag_code == CODE_16BIT)
4512                    || (flag_code == CODE_64BIT
4513                        && i.tm.opcode_modifier.jumpbyte)))
4514         {
4515           unsigned int prefix = DATA_PREFIX_OPCODE;
4516
4517           if (i.tm.opcode_modifier.jumpbyte) /* jcxz, loop */
4518             prefix = ADDR_PREFIX_OPCODE;
4519
4520           if (!add_prefix (prefix))
4521             return 0;
4522         }
4523
4524       /* Set mode64 for an operand.  */
4525       if (i.suffix == QWORD_MNEM_SUFFIX
4526           && flag_code == CODE_64BIT
4527           && !i.tm.opcode_modifier.norex64)
4528         {
4529           /* Special case for xchg %rax,%rax.  It is NOP and doesn't
4530              need rex64.  cmpxchg8b is also a special case. */
4531           if (! (i.operands == 2
4532                  && i.tm.base_opcode == 0x90
4533                  && i.tm.extension_opcode == None
4534                  && operand_type_equal (&i.types [0], &acc64)
4535                  && operand_type_equal (&i.types [1], &acc64))
4536               && ! (i.operands == 1
4537                     && i.tm.base_opcode == 0xfc7
4538                     && i.tm.extension_opcode == 1
4539                     && !operand_type_check (i.types [0], reg)
4540                     && operand_type_check (i.types [0], anymem)))
4541             i.rex |= REX_W;
4542         }
4543
4544       /* Size floating point instruction.  */
4545       if (i.suffix == LONG_MNEM_SUFFIX)
4546         if (i.tm.opcode_modifier.floatmf)
4547           i.tm.base_opcode ^= 4;
4548     }
4549
4550   return 1;
4551 }
4552
4553 static int
4554 check_byte_reg (void)
4555 {
4556   int op;
4557
4558   for (op = i.operands; --op >= 0;)
4559     {
4560       /* If this is an eight bit register, it's OK.  If it's the 16 or
4561          32 bit version of an eight bit register, we will just use the
4562          low portion, and that's OK too.  */
4563       if (i.types[op].bitfield.reg8)
4564         continue;
4565
4566       /* crc32 doesn't generate this warning.  */
4567       if (i.tm.base_opcode == 0xf20f38f0)
4568         continue;
4569
4570       if ((i.types[op].bitfield.reg16
4571            || i.types[op].bitfield.reg32
4572            || i.types[op].bitfield.reg64)
4573           && i.op[op].regs->reg_num < 4)
4574         {
4575           /* Prohibit these changes in the 64bit mode, since the
4576              lowering is more complicated.  */
4577           if (flag_code == CODE_64BIT
4578               && !i.tm.operand_types[op].bitfield.inoutportreg)
4579             {
4580               as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4581                       register_prefix, i.op[op].regs->reg_name,
4582                       i.suffix);
4583               return 0;
4584             }
4585 #if REGISTER_WARNINGS
4586           if (!quiet_warnings
4587               && !i.tm.operand_types[op].bitfield.inoutportreg)
4588             as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
4589                      register_prefix,
4590                      (i.op[op].regs + (i.types[op].bitfield.reg16
4591                                        ? REGNAM_AL - REGNAM_AX
4592                                        : REGNAM_AL - REGNAM_EAX))->reg_name,
4593                      register_prefix,
4594                      i.op[op].regs->reg_name,
4595                      i.suffix);
4596 #endif
4597           continue;
4598         }
4599       /* Any other register is bad.  */
4600       if (i.types[op].bitfield.reg16
4601           || i.types[op].bitfield.reg32
4602           || i.types[op].bitfield.reg64
4603           || i.types[op].bitfield.regmmx
4604           || i.types[op].bitfield.regxmm
4605           || i.types[op].bitfield.regymm
4606           || i.types[op].bitfield.sreg2
4607           || i.types[op].bitfield.sreg3
4608           || i.types[op].bitfield.control
4609           || i.types[op].bitfield.debug
4610           || i.types[op].bitfield.test
4611           || i.types[op].bitfield.floatreg
4612           || i.types[op].bitfield.floatacc)
4613         {
4614           as_bad (_("`%s%s' not allowed with `%s%c'"),
4615                   register_prefix,
4616                   i.op[op].regs->reg_name,
4617                   i.tm.name,
4618                   i.suffix);
4619           return 0;
4620         }
4621     }
4622   return 1;
4623 }
4624
4625 static int
4626 check_long_reg (void)
4627 {
4628   int op;
4629
4630   for (op = i.operands; --op >= 0;)
4631     /* Reject eight bit registers, except where the template requires
4632        them. (eg. movzb)  */
4633     if (i.types[op].bitfield.reg8
4634         && (i.tm.operand_types[op].bitfield.reg16
4635             || i.tm.operand_types[op].bitfield.reg32
4636             || i.tm.operand_types[op].bitfield.acc))
4637       {
4638         as_bad (_("`%s%s' not allowed with `%s%c'"),
4639                 register_prefix,
4640                 i.op[op].regs->reg_name,
4641                 i.tm.name,
4642                 i.suffix);
4643         return 0;
4644       }
4645   /* Warn if the e prefix on a general reg is missing.  */
4646     else if ((!quiet_warnings || flag_code == CODE_64BIT)
4647              && i.types[op].bitfield.reg16
4648              && (i.tm.operand_types[op].bitfield.reg32
4649                  || i.tm.operand_types[op].bitfield.acc))
4650       {
4651         /* Prohibit these changes in the 64bit mode, since the
4652            lowering is more complicated.  */
4653         if (flag_code == CODE_64BIT)
4654           {
4655             as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4656                     register_prefix, i.op[op].regs->reg_name,
4657                     i.suffix);
4658             return 0;
4659           }
4660 #if REGISTER_WARNINGS
4661         else
4662           as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
4663                    register_prefix,
4664                    (i.op[op].regs + REGNAM_EAX - REGNAM_AX)->reg_name,
4665                    register_prefix,
4666                    i.op[op].regs->reg_name,
4667                    i.suffix);
4668 #endif
4669       }
4670   /* Warn if the r prefix on a general reg is missing.  */
4671     else if (i.types[op].bitfield.reg64
4672              && (i.tm.operand_types[op].bitfield.reg32
4673                  || i.tm.operand_types[op].bitfield.acc))
4674       {
4675         if (intel_syntax
4676             && i.tm.opcode_modifier.toqword
4677             && !i.types[0].bitfield.regxmm)
4678           {
4679             /* Convert to QWORD.  We want REX byte. */
4680             i.suffix = QWORD_MNEM_SUFFIX;
4681           }
4682         else
4683           {
4684             as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4685                     register_prefix, i.op[op].regs->reg_name,
4686                     i.suffix);
4687             return 0;
4688           }
4689       }
4690   return 1;
4691 }
4692
4693 static int
4694 check_qword_reg (void)
4695 {
4696   int op;
4697
4698   for (op = i.operands; --op >= 0; )
4699     /* Reject eight bit registers, except where the template requires
4700        them. (eg. movzb)  */
4701     if (i.types[op].bitfield.reg8
4702         && (i.tm.operand_types[op].bitfield.reg16
4703             || i.tm.operand_types[op].bitfield.reg32
4704             || i.tm.operand_types[op].bitfield.acc))
4705       {
4706         as_bad (_("`%s%s' not allowed with `%s%c'"),
4707                 register_prefix,
4708                 i.op[op].regs->reg_name,
4709                 i.tm.name,
4710                 i.suffix);
4711         return 0;
4712       }
4713   /* Warn if the e prefix on a general reg is missing.  */
4714     else if ((i.types[op].bitfield.reg16
4715               || i.types[op].bitfield.reg32)
4716              && (i.tm.operand_types[op].bitfield.reg32
4717                  || i.tm.operand_types[op].bitfield.acc))
4718       {
4719         /* Prohibit these changes in the 64bit mode, since the
4720            lowering is more complicated.  */
4721         if (intel_syntax
4722             && i.tm.opcode_modifier.todword
4723             && !i.types[0].bitfield.regxmm)
4724           {
4725             /* Convert to DWORD.  We don't want REX byte. */
4726             i.suffix = LONG_MNEM_SUFFIX;
4727           }
4728         else
4729           {
4730             as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4731                     register_prefix, i.op[op].regs->reg_name,
4732                     i.suffix);
4733             return 0;
4734           }
4735       }
4736   return 1;
4737 }
4738
4739 static int
4740 check_word_reg (void)
4741 {
4742   int op;
4743   for (op = i.operands; --op >= 0;)
4744     /* Reject eight bit registers, except where the template requires
4745        them. (eg. movzb)  */
4746     if (i.types[op].bitfield.reg8
4747         && (i.tm.operand_types[op].bitfield.reg16
4748             || i.tm.operand_types[op].bitfield.reg32
4749             || i.tm.operand_types[op].bitfield.acc))
4750       {
4751         as_bad (_("`%s%s' not allowed with `%s%c'"),
4752                 register_prefix,
4753                 i.op[op].regs->reg_name,
4754                 i.tm.name,
4755                 i.suffix);
4756         return 0;
4757       }
4758   /* Warn if the e prefix on a general reg is present.  */
4759     else if ((!quiet_warnings || flag_code == CODE_64BIT)
4760              && i.types[op].bitfield.reg32
4761              && (i.tm.operand_types[op].bitfield.reg16
4762                  || i.tm.operand_types[op].bitfield.acc))
4763       {
4764         /* Prohibit these changes in the 64bit mode, since the
4765            lowering is more complicated.  */
4766         if (flag_code == CODE_64BIT)
4767           {
4768             as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4769                     register_prefix, i.op[op].regs->reg_name,
4770                     i.suffix);
4771             return 0;
4772           }
4773         else
4774 #if REGISTER_WARNINGS
4775           as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
4776                    register_prefix,
4777                    (i.op[op].regs + REGNAM_AX - REGNAM_EAX)->reg_name,
4778                    register_prefix,
4779                    i.op[op].regs->reg_name,
4780                    i.suffix);
4781 #endif
4782       }
4783   return 1;
4784 }
4785
4786 static int
4787 update_imm (unsigned int j)
4788 {
4789   i386_operand_type overlap = i.types[j];
4790   if ((overlap.bitfield.imm8
4791        || overlap.bitfield.imm8s
4792        || overlap.bitfield.imm16
4793        || overlap.bitfield.imm32
4794        || overlap.bitfield.imm32s
4795        || overlap.bitfield.imm64)
4796       && !operand_type_equal (&overlap, &imm8)
4797       && !operand_type_equal (&overlap, &imm8s)
4798       && !operand_type_equal (&overlap, &imm16)
4799       && !operand_type_equal (&overlap, &imm32)
4800       && !operand_type_equal (&overlap, &imm32s)
4801       && !operand_type_equal (&overlap, &imm64))
4802     {
4803       if (i.suffix)
4804         {
4805           i386_operand_type temp;
4806
4807           operand_type_set (&temp, 0);
4808           if (i.suffix == BYTE_MNEM_SUFFIX)
4809             {
4810               temp.bitfield.imm8 = overlap.bitfield.imm8;
4811               temp.bitfield.imm8s = overlap.bitfield.imm8s;
4812             }
4813           else if (i.suffix == WORD_MNEM_SUFFIX)
4814             temp.bitfield.imm16 = overlap.bitfield.imm16;
4815           else if (i.suffix == QWORD_MNEM_SUFFIX)
4816             {
4817               temp.bitfield.imm64 = overlap.bitfield.imm64;
4818               temp.bitfield.imm32s = overlap.bitfield.imm32s;
4819             }
4820           else
4821             temp.bitfield.imm32 = overlap.bitfield.imm32;
4822           overlap = temp;
4823         }
4824       else if (operand_type_equal (&overlap, &imm16_32_32s)
4825                || operand_type_equal (&overlap, &imm16_32)
4826                || operand_type_equal (&overlap, &imm16_32s))
4827         {
4828           if ((flag_code == CODE_16BIT) ^ (i.prefix[DATA_PREFIX] != 0))
4829             overlap = imm16;
4830           else
4831             overlap = imm32s;
4832         }
4833       if (!operand_type_equal (&overlap, &imm8)
4834           && !operand_type_equal (&overlap, &imm8s)
4835           && !operand_type_equal (&overlap, &imm16)
4836           && !operand_type_equal (&overlap, &imm32)
4837           && !operand_type_equal (&overlap, &imm32s)
4838           && !operand_type_equal (&overlap, &imm64))
4839         {
4840           as_bad (_("no instruction mnemonic suffix given; "
4841                     "can't determine immediate size"));
4842           return 0;
4843         }
4844     }
4845   i.types[j] = overlap;
4846
4847   return 1;
4848 }
4849
4850 static int
4851 finalize_imm (void)
4852 {
4853   unsigned int j, n;
4854
4855   /* Update the first 2 immediate operands.  */
4856   n = i.operands > 2 ? 2 : i.operands;
4857   if (n)
4858     {
4859       for (j = 0; j < n; j++)
4860         if (update_imm (j) == 0)
4861           return 0;
4862
4863       /* The 3rd operand can't be immediate operand.  */
4864       gas_assert (operand_type_check (i.types[2], imm) == 0);
4865     }
4866
4867   return 1;
4868 }
4869
4870 static int
4871 bad_implicit_operand (int xmm)
4872 {
4873   const char *ireg = xmm ? "xmm0" : "ymm0";
4874
4875   if (intel_syntax)
4876     as_bad (_("the last operand of `%s' must be `%s%s'"),
4877             i.tm.name, register_prefix, ireg);
4878   else
4879     as_bad (_("the first operand of `%s' must be `%s%s'"),
4880             i.tm.name, register_prefix, ireg);
4881   return 0;
4882 }
4883
4884 static int
4885 process_operands (void)
4886 {
4887   /* Default segment register this instruction will use for memory
4888      accesses.  0 means unknown.  This is only for optimizing out
4889      unnecessary segment overrides.  */
4890   const seg_entry *default_seg = 0;
4891
4892   if (i.tm.opcode_modifier.sse2avx && i.tm.opcode_modifier.vexvvvv)
4893     {
4894       unsigned int dupl = i.operands;
4895       unsigned int dest = dupl - 1;
4896       unsigned int j;
4897
4898       /* The destination must be an xmm register.  */
4899       gas_assert (i.reg_operands
4900                   && MAX_OPERANDS > dupl
4901                   && operand_type_equal (&i.types[dest], &regxmm));
4902
4903       if (i.tm.opcode_modifier.firstxmm0)
4904         {
4905           /* The first operand is implicit and must be xmm0.  */
4906           gas_assert (operand_type_equal (&i.types[0], &regxmm));
4907           if (i.op[0].regs->reg_num != 0)
4908             return bad_implicit_operand (1);
4909
4910           if (i.tm.opcode_modifier.vexsources == VEX3SOURCES)
4911             {
4912               /* Keep xmm0 for instructions with VEX prefix and 3
4913                  sources.  */
4914               goto duplicate;
4915             }
4916           else
4917             {
4918               /* We remove the first xmm0 and keep the number of
4919                  operands unchanged, which in fact duplicates the
4920                  destination.  */
4921               for (j = 1; j < i.operands; j++)
4922                 {
4923                   i.op[j - 1] = i.op[j];
4924                   i.types[j - 1] = i.types[j];
4925                   i.tm.operand_types[j - 1] = i.tm.operand_types[j];
4926                 }
4927             }
4928         }
4929       else if (i.tm.opcode_modifier.implicit1stxmm0)
4930         {
4931           gas_assert ((MAX_OPERANDS - 1) > dupl
4932                       && (i.tm.opcode_modifier.vexsources
4933                           == VEX3SOURCES));
4934
4935           /* Add the implicit xmm0 for instructions with VEX prefix
4936              and 3 sources.  */
4937           for (j = i.operands; j > 0; j--)
4938             {
4939               i.op[j] = i.op[j - 1];
4940               i.types[j] = i.types[j - 1];
4941               i.tm.operand_types[j] = i.tm.operand_types[j - 1];
4942             }
4943           i.op[0].regs
4944             = (const reg_entry *) hash_find (reg_hash, "xmm0");
4945           i.types[0] = regxmm;
4946           i.tm.operand_types[0] = regxmm;
4947
4948           i.operands += 2;
4949           i.reg_operands += 2;
4950           i.tm.operands += 2;
4951
4952           dupl++;
4953           dest++;
4954           i.op[dupl] = i.op[dest];
4955           i.types[dupl] = i.types[dest];
4956           i.tm.operand_types[dupl] = i.tm.operand_types[dest];
4957         }
4958       else
4959         {
4960 duplicate:
4961           i.operands++;
4962           i.reg_operands++;
4963           i.tm.operands++;
4964
4965           i.op[dupl] = i.op[dest];
4966           i.types[dupl] = i.types[dest];
4967           i.tm.operand_types[dupl] = i.tm.operand_types[dest];
4968         }
4969
4970        if (i.tm.opcode_modifier.immext)
4971          process_immext ();
4972     }
4973   else if (i.tm.opcode_modifier.firstxmm0)
4974     {
4975       unsigned int j;
4976
4977       /* The first operand is implicit and must be xmm0/ymm0.  */
4978       gas_assert (i.reg_operands
4979                   && (operand_type_equal (&i.types[0], &regxmm)
4980                       || operand_type_equal (&i.types[0], &regymm)));
4981       if (i.op[0].regs->reg_num != 0)
4982         return bad_implicit_operand (i.types[0].bitfield.regxmm);
4983
4984       for (j = 1; j < i.operands; j++)
4985         {
4986           i.op[j - 1] = i.op[j];
4987           i.types[j - 1] = i.types[j];
4988
4989           /* We need to adjust fields in i.tm since they are used by
4990              build_modrm_byte.  */
4991           i.tm.operand_types [j - 1] = i.tm.operand_types [j];
4992         }
4993
4994       i.operands--;
4995       i.reg_operands--;
4996       i.tm.operands--;
4997     }
4998   else if (i.tm.opcode_modifier.regkludge)
4999     {
5000       /* The imul $imm, %reg instruction is converted into
5001          imul $imm, %reg, %reg, and the clr %reg instruction
5002          is converted into xor %reg, %reg.  */
5003
5004       unsigned int first_reg_op;
5005
5006       if (operand_type_check (i.types[0], reg))
5007         first_reg_op = 0;
5008       else
5009         first_reg_op = 1;
5010       /* Pretend we saw the extra register operand.  */
5011       gas_assert (i.reg_operands == 1
5012                   && i.op[first_reg_op + 1].regs == 0);
5013       i.op[first_reg_op + 1].regs = i.op[first_reg_op].regs;
5014       i.types[first_reg_op + 1] = i.types[first_reg_op];
5015       i.operands++;
5016       i.reg_operands++;
5017     }
5018
5019   if (i.tm.opcode_modifier.shortform)
5020     {
5021       if (i.types[0].bitfield.sreg2
5022           || i.types[0].bitfield.sreg3)
5023         {
5024           if (i.tm.base_opcode == POP_SEG_SHORT
5025               && i.op[0].regs->reg_num == 1)
5026             {
5027               as_bad (_("you can't `pop %scs'"), register_prefix);
5028               return 0;
5029             }
5030           i.tm.base_opcode |= (i.op[0].regs->reg_num << 3);
5031           if ((i.op[0].regs->reg_flags & RegRex) != 0)
5032             i.rex |= REX_B;
5033         }
5034       else
5035         {
5036           /* The register or float register operand is in operand
5037              0 or 1.  */
5038           unsigned int op;
5039
5040           if (i.types[0].bitfield.floatreg
5041               || operand_type_check (i.types[0], reg))
5042             op = 0;
5043           else
5044             op = 1;
5045           /* Register goes in low 3 bits of opcode.  */
5046           i.tm.base_opcode |= i.op[op].regs->reg_num;
5047           if ((i.op[op].regs->reg_flags & RegRex) != 0)
5048             i.rex |= REX_B;
5049           if (!quiet_warnings && i.tm.opcode_modifier.ugh)
5050             {
5051               /* Warn about some common errors, but press on regardless.
5052                  The first case can be generated by gcc (<= 2.8.1).  */
5053               if (i.operands == 2)
5054                 {
5055                   /* Reversed arguments on faddp, fsubp, etc.  */
5056                   as_warn (_("translating to `%s %s%s,%s%s'"), i.tm.name,
5057                            register_prefix, i.op[!intel_syntax].regs->reg_name,
5058                            register_prefix, i.op[intel_syntax].regs->reg_name);
5059                 }
5060               else
5061                 {
5062                   /* Extraneous `l' suffix on fp insn.  */
5063                   as_warn (_("translating to `%s %s%s'"), i.tm.name,
5064                            register_prefix, i.op[0].regs->reg_name);
5065                 }
5066             }
5067         }
5068     }
5069   else if (i.tm.opcode_modifier.modrm)
5070     {
5071       /* The opcode is completed (modulo i.tm.extension_opcode which
5072          must be put into the modrm byte).  Now, we make the modrm and
5073          index base bytes based on all the info we've collected.  */
5074
5075       default_seg = build_modrm_byte ();
5076     }
5077   else if ((i.tm.base_opcode & ~0x3) == MOV_AX_DISP32)
5078     {
5079       default_seg = &ds;
5080     }
5081   else if (i.tm.opcode_modifier.isstring)
5082     {
5083       /* For the string instructions that allow a segment override
5084          on one of their operands, the default segment is ds.  */
5085       default_seg = &ds;
5086     }
5087
5088   if (i.tm.base_opcode == 0x8d /* lea */
5089       && i.seg[0]
5090       && !quiet_warnings)
5091     as_warn (_("segment override on `%s' is ineffectual"), i.tm.name);
5092
5093   /* If a segment was explicitly specified, and the specified segment
5094      is not the default, use an opcode prefix to select it.  If we
5095      never figured out what the default segment is, then default_seg
5096      will be zero at this point, and the specified segment prefix will
5097      always be used.  */
5098   if ((i.seg[0]) && (i.seg[0] != default_seg))
5099     {
5100       if (!add_prefix (i.seg[0]->seg_prefix))
5101         return 0;
5102     }
5103   return 1;
5104 }
5105
5106 static const seg_entry *
5107 build_modrm_byte (void)
5108 {
5109   const seg_entry *default_seg = 0;
5110   unsigned int source, dest;
5111   int vex_3_sources;
5112
5113   /* The first operand of instructions with VEX prefix and 3 sources
5114      must be VEX_Imm4.  */
5115   vex_3_sources = i.tm.opcode_modifier.vexsources == VEX3SOURCES;
5116   if (vex_3_sources)
5117     {
5118       unsigned int nds, reg_slot;
5119       expressionS *exp;
5120
5121       if (i.tm.opcode_modifier.veximmext
5122           && i.tm.opcode_modifier.immext)
5123         {
5124           dest = i.operands - 2;
5125           gas_assert (dest == 3);
5126         }
5127       else
5128         dest = i.operands - 1;
5129       nds = dest - 1;
5130
5131       /* There are 2 kinds of instructions:
5132          1. 5 operands: 4 register operands or 3 register operands
5133          plus 1 memory operand plus one Vec_Imm4 operand, VexXDS, and
5134          VexW0 or VexW1.  The destination must be either XMM or YMM
5135          register.
5136          2. 4 operands: 4 register operands or 3 register operands
5137          plus 1 memory operand, VexXDS, and VexImmExt  */
5138       gas_assert ((i.reg_operands == 4
5139                    || (i.reg_operands == 3 && i.mem_operands == 1))
5140                   && i.tm.opcode_modifier.vexvvvv == VEXXDS
5141                   && (i.tm.opcode_modifier.veximmext
5142                       || (i.imm_operands == 1
5143                           && i.types[0].bitfield.vec_imm4
5144                           && (i.tm.opcode_modifier.vexw == VEXW0
5145                               || i.tm.opcode_modifier.vexw == VEXW1)
5146                           && (operand_type_equal (&i.tm.operand_types[dest], &regxmm)
5147                               || operand_type_equal (&i.tm.operand_types[dest], &regymm)))));
5148
5149       if (i.imm_operands == 0)
5150         {
5151           /* When there is no immediate operand, generate an 8bit
5152              immediate operand to encode the first operand.  */
5153           exp = &im_expressions[i.imm_operands++];
5154           i.op[i.operands].imms = exp;
5155           i.types[i.operands] = imm8;
5156           i.operands++;
5157           /* If VexW1 is set, the first operand is the source and
5158              the second operand is encoded in the immediate operand.  */
5159           if (i.tm.opcode_modifier.vexw == VEXW1)
5160             {
5161               source = 0;
5162               reg_slot = 1;
5163             }
5164           else
5165             {
5166               source = 1;
5167               reg_slot = 0;
5168             }
5169
5170           /* FMA swaps REG and NDS.  */
5171           if (i.tm.cpu_flags.bitfield.cpufma)
5172             {
5173               unsigned int tmp;
5174               tmp = reg_slot;
5175               reg_slot = nds;
5176               nds = tmp;
5177             }
5178
5179           gas_assert (operand_type_equal (&i.tm.operand_types[reg_slot],
5180                                           &regxmm)
5181                       || operand_type_equal (&i.tm.operand_types[reg_slot],
5182                                              &regymm));
5183           exp->X_op = O_constant;
5184           exp->X_add_number
5185               = ((i.op[reg_slot].regs->reg_num
5186                   + ((i.op[reg_slot].regs->reg_flags & RegRex) ? 8 : 0))
5187                  << 4);
5188         }
5189       else
5190         {
5191           unsigned int imm_slot;
5192
5193           if (i.tm.opcode_modifier.vexw == VEXW0)
5194             {
5195               /* If VexW0 is set, the third operand is the source and
5196                  the second operand is encoded in the immediate
5197                  operand.  */
5198               source = 2;
5199               reg_slot = 1;
5200             }
5201           else
5202             {
5203               /* VexW1 is set, the second operand is the source and
5204                  the third operand is encoded in the immediate
5205                  operand.  */
5206               source = 1;
5207               reg_slot = 2;
5208             }
5209
5210           if (i.tm.opcode_modifier.immext)
5211             {
5212               /* When ImmExt is set, the immdiate byte is the last
5213                  operand.  */
5214               imm_slot = i.operands - 1;
5215               source--;
5216               reg_slot--;
5217             }
5218           else
5219             {
5220               imm_slot = 0;
5221
5222               /* Turn on Imm8 so that output_imm will generate it.  */
5223               i.types[imm_slot].bitfield.imm8 = 1;
5224             }
5225
5226           gas_assert (operand_type_equal (&i.tm.operand_types[reg_slot],
5227                                           &regxmm)
5228                       || operand_type_equal (&i.tm.operand_types[reg_slot],
5229                                              &regymm));
5230           i.op[imm_slot].imms->X_add_number
5231               |= ((i.op[reg_slot].regs->reg_num
5232                    + ((i.op[reg_slot].regs->reg_flags & RegRex) ? 8 : 0))
5233                   << 4);
5234         }
5235
5236       gas_assert (operand_type_equal (&i.tm.operand_types[nds], &regxmm)
5237                   || operand_type_equal (&i.tm.operand_types[nds],
5238                                          &regymm));
5239       i.vex.register_specifier = i.op[nds].regs;
5240     }
5241   else
5242     source = dest = 0;
5243
5244   /* i.reg_operands MUST be the number of real register operands;
5245      implicit registers do not count.  If there are 3 register
5246      operands, it must be a instruction with VexNDS.  For a
5247      instruction with VexNDD, the destination register is encoded
5248      in VEX prefix.  If there are 4 register operands, it must be
5249      a instruction with VEX prefix and 3 sources.  */
5250   if (i.mem_operands == 0
5251       && ((i.reg_operands == 2
5252            && i.tm.opcode_modifier.vexvvvv <= VEXXDS)
5253           || (i.reg_operands == 3
5254               && i.tm.opcode_modifier.vexvvvv == VEXXDS)
5255           || (i.reg_operands == 4 && vex_3_sources)))
5256     {
5257       switch (i.operands)
5258         {
5259         case 2:
5260           source = 0;
5261           break;
5262         case 3:
5263           /* When there are 3 operands, one of them may be immediate,
5264              which may be the first or the last operand.  Otherwise,
5265              the first operand must be shift count register (cl) or it
5266              is an instruction with VexNDS. */
5267           gas_assert (i.imm_operands == 1
5268                       || (i.imm_operands == 0
5269                           && (i.tm.opcode_modifier.vexvvvv == VEXXDS
5270                               || i.types[0].bitfield.shiftcount)));
5271           if (operand_type_check (i.types[0], imm)
5272               || i.types[0].bitfield.shiftcount)
5273             source = 1;
5274           else
5275             source = 0;
5276           break;
5277         case 4:
5278           /* When there are 4 operands, the first two must be 8bit
5279              immediate operands. The source operand will be the 3rd
5280              one.
5281
5282              For instructions with VexNDS, if the first operand
5283              an imm8, the source operand is the 2nd one.  If the last
5284              operand is imm8, the source operand is the first one.  */
5285           gas_assert ((i.imm_operands == 2
5286                        && i.types[0].bitfield.imm8
5287                        && i.types[1].bitfield.imm8)
5288                       || (i.tm.opcode_modifier.vexvvvv == VEXXDS
5289                           && i.imm_operands == 1
5290                           && (i.types[0].bitfield.imm8
5291                               || i.types[i.operands - 1].bitfield.imm8)));
5292           if (i.imm_operands == 2)
5293             source = 2;
5294           else
5295             {
5296               if (i.types[0].bitfield.imm8)
5297                 source = 1;
5298               else
5299                 source = 0;
5300             }
5301           break;
5302         case 5:
5303           break;
5304         default:
5305           abort ();
5306         }
5307
5308       if (!vex_3_sources)
5309         {
5310           dest = source + 1;
5311
5312           if (i.tm.opcode_modifier.vexvvvv == VEXXDS)
5313             {
5314               /* For instructions with VexNDS, the register-only
5315                  source operand must be 32/64bit integer, XMM or
5316                  YMM register.  It is encoded in VEX prefix.  We
5317                  need to clear RegMem bit before calling
5318                  operand_type_equal.  */
5319
5320               i386_operand_type op;
5321               unsigned int vvvv;
5322
5323               /* Check register-only source operand when two source
5324                  operands are swapped.  */
5325               if (!i.tm.operand_types[source].bitfield.baseindex
5326                   && i.tm.operand_types[dest].bitfield.baseindex)
5327                 {
5328                   vvvv = source;
5329                   source = dest;
5330                 }
5331               else
5332                 vvvv = dest;
5333
5334               op = i.tm.operand_types[vvvv];
5335               op.bitfield.regmem = 0;
5336               if ((dest + 1) >= i.operands
5337                   || (op.bitfield.reg32 != 1
5338                       && !op.bitfield.reg64 != 1
5339                       && !operand_type_equal (&op, &regxmm)
5340                       && !operand_type_equal (&op, &regymm)))
5341                 abort ();
5342               i.vex.register_specifier = i.op[vvvv].regs;
5343               dest++;
5344             }
5345         }
5346
5347       i.rm.mode = 3;
5348       /* One of the register operands will be encoded in the i.tm.reg
5349          field, the other in the combined i.tm.mode and i.tm.regmem
5350          fields.  If no form of this instruction supports a memory
5351          destination operand, then we assume the source operand may
5352          sometimes be a memory operand and so we need to store the
5353          destination in the i.rm.reg field.  */
5354       if (!i.tm.operand_types[dest].bitfield.regmem
5355           && operand_type_check (i.tm.operand_types[dest], anymem) == 0)
5356         {
5357           i.rm.reg = i.op[dest].regs->reg_num;
5358           i.rm.regmem = i.op[source].regs->reg_num;
5359           if ((i.op[dest].regs->reg_flags & RegRex) != 0)
5360             i.rex |= REX_R;
5361           if ((i.op[source].regs->reg_flags & RegRex) != 0)
5362             i.rex |= REX_B;
5363         }
5364       else
5365         {
5366           i.rm.reg = i.op[source].regs->reg_num;
5367           i.rm.regmem = i.op[dest].regs->reg_num;
5368           if ((i.op[dest].regs->reg_flags & RegRex) != 0)
5369             i.rex |= REX_B;
5370           if ((i.op[source].regs->reg_flags & RegRex) != 0)
5371             i.rex |= REX_R;
5372         }
5373       if (flag_code != CODE_64BIT && (i.rex & (REX_R | REX_B)))
5374         {
5375           if (!i.types[0].bitfield.control
5376               && !i.types[1].bitfield.control)
5377             abort ();
5378           i.rex &= ~(REX_R | REX_B);
5379           add_prefix (LOCK_PREFIX_OPCODE);
5380         }
5381     }
5382   else
5383     {                   /* If it's not 2 reg operands...  */
5384       unsigned int mem;
5385
5386       if (i.mem_operands)
5387         {
5388           unsigned int fake_zero_displacement = 0;
5389           unsigned int op;
5390
5391           for (op = 0; op < i.operands; op++)
5392             if (operand_type_check (i.types[op], anymem))
5393               break;
5394           gas_assert (op < i.operands);
5395
5396           default_seg = &ds;
5397
5398           if (i.base_reg == 0)
5399             {
5400               i.rm.mode = 0;
5401               if (!i.disp_operands)
5402                 fake_zero_displacement = 1;
5403               if (i.index_reg == 0)
5404                 {
5405                   /* Operand is just <disp>  */
5406                   if (flag_code == CODE_64BIT)
5407                     {
5408                       /* 64bit mode overwrites the 32bit absolute
5409                          addressing by RIP relative addressing and
5410                          absolute addressing is encoded by one of the
5411                          redundant SIB forms.  */
5412                       i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
5413                       i.sib.base = NO_BASE_REGISTER;
5414                       i.sib.index = NO_INDEX_REGISTER;
5415                       i.types[op] = ((i.prefix[ADDR_PREFIX] == 0)
5416                                      ? disp32s : disp32);
5417                     }
5418                   else if ((flag_code == CODE_16BIT)
5419                            ^ (i.prefix[ADDR_PREFIX] != 0))
5420                     {
5421                       i.rm.regmem = NO_BASE_REGISTER_16;
5422                       i.types[op] = disp16;
5423                     }
5424                   else
5425                     {
5426                       i.rm.regmem = NO_BASE_REGISTER;
5427                       i.types[op] = disp32;
5428                     }
5429                 }
5430               else /* !i.base_reg && i.index_reg  */
5431                 {
5432                   if (i.index_reg->reg_num == RegEiz
5433                       || i.index_reg->reg_num == RegRiz)
5434                     i.sib.index = NO_INDEX_REGISTER;
5435                   else
5436                     i.sib.index = i.index_reg->reg_num;
5437                   i.sib.base = NO_BASE_REGISTER;
5438                   i.sib.scale = i.log2_scale_factor;
5439                   i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
5440                   i.types[op].bitfield.disp8 = 0;
5441                   i.types[op].bitfield.disp16 = 0;
5442                   i.types[op].bitfield.disp64 = 0;
5443                   if (flag_code != CODE_64BIT)
5444                     {
5445                       /* Must be 32 bit */
5446                       i.types[op].bitfield.disp32 = 1;
5447                       i.types[op].bitfield.disp32s = 0;
5448                     }
5449                   else
5450                     {
5451                       i.types[op].bitfield.disp32 = 0;
5452                       i.types[op].bitfield.disp32s = 1;
5453                     }
5454                   if ((i.index_reg->reg_flags & RegRex) != 0)
5455                     i.rex |= REX_X;
5456                 }
5457             }
5458           /* RIP addressing for 64bit mode.  */
5459           else if (i.base_reg->reg_num == RegRip ||
5460                    i.base_reg->reg_num == RegEip)
5461             {
5462               i.rm.regmem = NO_BASE_REGISTER;
5463               i.types[op].bitfield.disp8 = 0;
5464               i.types[op].bitfield.disp16 = 0;
5465               i.types[op].bitfield.disp32 = 0;
5466               i.types[op].bitfield.disp32s = 1;
5467               i.types[op].bitfield.disp64 = 0;
5468               i.flags[op] |= Operand_PCrel;
5469               if (! i.disp_operands)
5470                 fake_zero_displacement = 1;
5471             }
5472           else if (i.base_reg->reg_type.bitfield.reg16)
5473             {
5474               switch (i.base_reg->reg_num)
5475                 {
5476                 case 3: /* (%bx)  */
5477                   if (i.index_reg == 0)
5478                     i.rm.regmem = 7;
5479                   else /* (%bx,%si) -> 0, or (%bx,%di) -> 1  */
5480                     i.rm.regmem = i.index_reg->reg_num - 6;
5481                   break;
5482                 case 5: /* (%bp)  */
5483                   default_seg = &ss;
5484                   if (i.index_reg == 0)
5485                     {
5486                       i.rm.regmem = 6;
5487                       if (operand_type_check (i.types[op], disp) == 0)
5488                         {
5489                           /* fake (%bp) into 0(%bp)  */
5490                           i.types[op].bitfield.disp8 = 1;
5491                           fake_zero_displacement = 1;
5492                         }
5493                     }
5494                   else /* (%bp,%si) -> 2, or (%bp,%di) -> 3  */
5495                     i.rm.regmem = i.index_reg->reg_num - 6 + 2;
5496                   break;
5497                 default: /* (%si) -> 4 or (%di) -> 5  */
5498                   i.rm.regmem = i.base_reg->reg_num - 6 + 4;
5499                 }
5500               i.rm.mode = mode_from_disp_size (i.types[op]);
5501             }
5502           else /* i.base_reg and 32/64 bit mode  */
5503             {
5504               if (flag_code == CODE_64BIT
5505                   && operand_type_check (i.types[op], disp))
5506                 {
5507                   i386_operand_type temp;
5508                   operand_type_set (&temp, 0);
5509                   temp.bitfield.disp8 = i.types[op].bitfield.disp8;
5510                   i.types[op] = temp;
5511                   if (i.prefix[ADDR_PREFIX] == 0)
5512                     i.types[op].bitfield.disp32s = 1;
5513                   else
5514                     i.types[op].bitfield.disp32 = 1;
5515                 }
5516
5517               i.rm.regmem = i.base_reg->reg_num;
5518               if ((i.base_reg->reg_flags & RegRex) != 0)
5519                 i.rex |= REX_B;
5520               i.sib.base = i.base_reg->reg_num;
5521               /* x86-64 ignores REX prefix bit here to avoid decoder
5522                  complications.  */
5523               if ((i.base_reg->reg_num & 7) == EBP_REG_NUM)
5524                 {
5525                   default_seg = &ss;
5526                   if (i.disp_operands == 0)
5527                     {
5528                       fake_zero_displacement = 1;
5529                       i.types[op].bitfield.disp8 = 1;
5530                     }
5531                 }
5532               else if (i.base_reg->reg_num == ESP_REG_NUM)
5533                 {
5534                   default_seg = &ss;
5535                 }
5536               i.sib.scale = i.log2_scale_factor;
5537               if (i.index_reg == 0)
5538                 {
5539                   /* <disp>(%esp) becomes two byte modrm with no index
5540                      register.  We've already stored the code for esp
5541                      in i.rm.regmem ie. ESCAPE_TO_TWO_BYTE_ADDRESSING.
5542                      Any base register besides %esp will not use the
5543                      extra modrm byte.  */
5544                   i.sib.index = NO_INDEX_REGISTER;
5545                 }
5546               else
5547                 {
5548                   if (i.index_reg->reg_num == RegEiz
5549                       || i.index_reg->reg_num == RegRiz)
5550                     i.sib.index = NO_INDEX_REGISTER;
5551                   else
5552                     i.sib.index = i.index_reg->reg_num;
5553                   i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
5554                   if ((i.index_reg->reg_flags & RegRex) != 0)
5555                     i.rex |= REX_X;
5556                 }
5557
5558               if (i.disp_operands
5559                   && (i.reloc[op] == BFD_RELOC_386_TLS_DESC_CALL
5560                       || i.reloc[op] == BFD_RELOC_X86_64_TLSDESC_CALL))
5561                 i.rm.mode = 0;
5562               else
5563                 i.rm.mode = mode_from_disp_size (i.types[op]);
5564             }
5565
5566           if (fake_zero_displacement)
5567             {
5568               /* Fakes a zero displacement assuming that i.types[op]
5569                  holds the correct displacement size.  */
5570               expressionS *exp;
5571
5572               gas_assert (i.op[op].disps == 0);
5573               exp = &disp_expressions[i.disp_operands++];
5574               i.op[op].disps = exp;
5575               exp->X_op = O_constant;
5576               exp->X_add_number = 0;
5577               exp->X_add_symbol = (symbolS *) 0;
5578               exp->X_op_symbol = (symbolS *) 0;
5579             }
5580
5581           mem = op;
5582         }
5583       else
5584         mem = ~0;
5585
5586       if (i.tm.opcode_modifier.vexsources == XOP2SOURCES)
5587         {
5588           if (operand_type_check (i.types[0], imm))
5589             i.vex.register_specifier = NULL;
5590           else
5591             {
5592               /* VEX.vvvv encodes one of the sources when the first
5593                  operand is not an immediate.  */
5594               if (i.tm.opcode_modifier.vexw == VEXW0)
5595                 i.vex.register_specifier = i.op[0].regs;
5596               else
5597                 i.vex.register_specifier = i.op[1].regs;
5598             }
5599
5600           /* Destination is a XMM register encoded in the ModRM.reg
5601              and VEX.R bit.  */
5602           i.rm.reg = i.op[2].regs->reg_num;
5603           if ((i.op[2].regs->reg_flags & RegRex) != 0)
5604             i.rex |= REX_R;
5605
5606           /* ModRM.rm and VEX.B encodes the other source.  */
5607           if (!i.mem_operands)
5608             {
5609               i.rm.mode = 3;
5610
5611               if (i.tm.opcode_modifier.vexw == VEXW0)
5612                 i.rm.regmem = i.op[1].regs->reg_num;
5613               else
5614                 i.rm.regmem = i.op[0].regs->reg_num;
5615
5616               if ((i.op[1].regs->reg_flags & RegRex) != 0)
5617                 i.rex |= REX_B;
5618             }
5619         }
5620       else if (i.tm.opcode_modifier.vexvvvv == VEXLWP)
5621         {
5622           i.vex.register_specifier = i.op[2].regs;
5623           if (!i.mem_operands)
5624             {
5625               i.rm.mode = 3;
5626               i.rm.regmem = i.op[1].regs->reg_num;
5627               if ((i.op[1].regs->reg_flags & RegRex) != 0)
5628                 i.rex |= REX_B;
5629             }
5630         }
5631       /* Fill in i.rm.reg or i.rm.regmem field with register operand
5632          (if any) based on i.tm.extension_opcode.  Again, we must be
5633          careful to make sure that segment/control/debug/test/MMX
5634          registers are coded into the i.rm.reg field.  */
5635       else if (i.reg_operands)
5636         {
5637           unsigned int op;
5638           unsigned int vex_reg = ~0;
5639
5640           for (op = 0; op < i.operands; op++)
5641             if (i.types[op].bitfield.reg8
5642                 || i.types[op].bitfield.reg16
5643                 || i.types[op].bitfield.reg32
5644                 || i.types[op].bitfield.reg64
5645                 || i.types[op].bitfield.regmmx
5646                 || i.types[op].bitfield.regxmm
5647                 || i.types[op].bitfield.regymm
5648                 || i.types[op].bitfield.sreg2
5649                 || i.types[op].bitfield.sreg3
5650                 || i.types[op].bitfield.control
5651                 || i.types[op].bitfield.debug
5652                 || i.types[op].bitfield.test)
5653               break;
5654
5655           if (vex_3_sources)
5656             op = dest;
5657           else if (i.tm.opcode_modifier.vexvvvv == VEXXDS)
5658             {
5659               /* For instructions with VexNDS, the register-only
5660                  source operand is encoded in VEX prefix. */
5661               gas_assert (mem != (unsigned int) ~0);
5662
5663               if (op > mem)
5664                 {
5665                   vex_reg = op++;
5666                   gas_assert (op < i.operands);
5667                 }
5668               else
5669                 {
5670                   /* Check register-only source operand when two source
5671                      operands are swapped.  */
5672                   if (!i.tm.operand_types[op].bitfield.baseindex
5673                       && i.tm.operand_types[op + 1].bitfield.baseindex)
5674                     {
5675                       vex_reg = op;
5676                       op += 2;
5677                       gas_assert (mem == (vex_reg + 1)
5678                                   && op < i.operands);
5679                     }
5680                   else
5681                     {
5682                       vex_reg = op + 1;
5683                       gas_assert (vex_reg < i.operands);
5684                     }
5685                 }
5686             }
5687           else if (i.tm.opcode_modifier.vexvvvv == VEXNDD)
5688             {
5689               /* For instructions with VexNDD, the register destination
5690                  is encoded in VEX prefix.  */
5691               if (i.mem_operands == 0)
5692                 {
5693                   /* There is no memory operand.  */
5694                   gas_assert ((op + 2) == i.operands);
5695                   vex_reg = op + 1;
5696                 }
5697               else
5698                 { 
5699                   /* There are only 2 operands.  */
5700                   gas_assert (op < 2 && i.operands == 2);
5701                   vex_reg = 1;
5702                 }
5703             }
5704           else
5705             gas_assert (op < i.operands);
5706
5707           if (vex_reg != (unsigned int) ~0)
5708             {
5709               i386_operand_type *type = &i.tm.operand_types[vex_reg];
5710
5711               if (type->bitfield.reg32 != 1
5712                   && type->bitfield.reg64 != 1
5713                   && !operand_type_equal (type, &regxmm)
5714                   && !operand_type_equal (type, &regymm))
5715                 abort ();
5716
5717               i.vex.register_specifier = i.op[vex_reg].regs;
5718             }
5719
5720           /* Don't set OP operand twice.  */
5721           if (vex_reg != op)
5722             {
5723               /* If there is an extension opcode to put here, the
5724                  register number must be put into the regmem field.  */
5725               if (i.tm.extension_opcode != None)
5726                 {
5727                   i.rm.regmem = i.op[op].regs->reg_num;
5728                   if ((i.op[op].regs->reg_flags & RegRex) != 0)
5729                     i.rex |= REX_B;
5730                 }
5731               else
5732                 {
5733                   i.rm.reg = i.op[op].regs->reg_num;
5734                   if ((i.op[op].regs->reg_flags & RegRex) != 0)
5735                     i.rex |= REX_R;
5736                 }
5737             }
5738
5739           /* Now, if no memory operand has set i.rm.mode = 0, 1, 2 we
5740              must set it to 3 to indicate this is a register operand
5741              in the regmem field.  */
5742           if (!i.mem_operands)
5743             i.rm.mode = 3;
5744         }
5745
5746       /* Fill in i.rm.reg field with extension opcode (if any).  */
5747       if (i.tm.extension_opcode != None)
5748         i.rm.reg = i.tm.extension_opcode;
5749     }
5750   return default_seg;
5751 }
5752
5753 static void
5754 output_branch (void)
5755 {
5756   char *p;
5757   int size;
5758   int code16;
5759   int prefix;
5760   relax_substateT subtype;
5761   symbolS *sym;
5762   offsetT off;
5763
5764   code16 = flag_code == CODE_16BIT ? CODE16 : 0;
5765   size = i.disp32_encoding ? BIG : SMALL;
5766
5767   prefix = 0;
5768   if (i.prefix[DATA_PREFIX] != 0)
5769     {
5770       prefix = 1;
5771       i.prefixes -= 1;
5772       code16 ^= CODE16;
5773     }
5774   /* Pentium4 branch hints.  */
5775   if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE /* not taken */
5776       || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE /* taken */)
5777     {
5778       prefix++;
5779       i.prefixes--;
5780     }
5781   if (i.prefix[REX_PREFIX] != 0)
5782     {
5783       prefix++;
5784       i.prefixes--;
5785     }
5786
5787   if (i.prefixes != 0 && !intel_syntax)
5788     as_warn (_("skipping prefixes on this instruction"));
5789
5790   /* It's always a symbol;  End frag & setup for relax.
5791      Make sure there is enough room in this frag for the largest
5792      instruction we may generate in md_convert_frag.  This is 2
5793      bytes for the opcode and room for the prefix and largest
5794      displacement.  */
5795   frag_grow (prefix + 2 + 4);
5796   /* Prefix and 1 opcode byte go in fr_fix.  */
5797   p = frag_more (prefix + 1);
5798   if (i.prefix[DATA_PREFIX] != 0)
5799     *p++ = DATA_PREFIX_OPCODE;
5800   if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE
5801       || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE)
5802     *p++ = i.prefix[SEG_PREFIX];
5803   if (i.prefix[REX_PREFIX] != 0)
5804     *p++ = i.prefix[REX_PREFIX];
5805   *p = i.tm.base_opcode;
5806
5807   if ((unsigned char) *p == JUMP_PC_RELATIVE)
5808     subtype = ENCODE_RELAX_STATE (UNCOND_JUMP, size);
5809   else if (cpu_arch_flags.bitfield.cpui386)
5810     subtype = ENCODE_RELAX_STATE (COND_JUMP, size);
5811   else
5812     subtype = ENCODE_RELAX_STATE (COND_JUMP86, size);
5813   subtype |= code16;
5814
5815   sym = i.op[0].disps->X_add_symbol;
5816   off = i.op[0].disps->X_add_number;
5817
5818   if (i.op[0].disps->X_op != O_constant
5819       && i.op[0].disps->X_op != O_symbol)
5820     {
5821       /* Handle complex expressions.  */
5822       sym = make_expr_symbol (i.op[0].disps);
5823       off = 0;
5824     }
5825
5826   /* 1 possible extra opcode + 4 byte displacement go in var part.
5827      Pass reloc in fr_var.  */
5828   frag_var (rs_machine_dependent, 5, i.reloc[0], subtype, sym, off, p);
5829 }
5830
5831 static void
5832 output_jump (void)
5833 {
5834   char *p;
5835   int size;
5836   fixS *fixP;
5837
5838   if (i.tm.opcode_modifier.jumpbyte)
5839     {
5840       /* This is a loop or jecxz type instruction.  */
5841       size = 1;
5842       if (i.prefix[ADDR_PREFIX] != 0)
5843         {
5844           FRAG_APPEND_1_CHAR (ADDR_PREFIX_OPCODE);
5845           i.prefixes -= 1;
5846         }
5847       /* Pentium4 branch hints.  */
5848       if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE /* not taken */
5849           || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE /* taken */)
5850         {
5851           FRAG_APPEND_1_CHAR (i.prefix[SEG_PREFIX]);
5852           i.prefixes--;
5853         }
5854     }
5855   else
5856     {
5857       int code16;
5858
5859       code16 = 0;
5860       if (flag_code == CODE_16BIT)
5861         code16 = CODE16;
5862
5863       if (i.prefix[DATA_PREFIX] != 0)
5864         {
5865           FRAG_APPEND_1_CHAR (DATA_PREFIX_OPCODE);
5866           i.prefixes -= 1;
5867           code16 ^= CODE16;
5868         }
5869
5870       size = 4;
5871       if (code16)
5872         size = 2;
5873     }
5874
5875   if (i.prefix[REX_PREFIX] != 0)
5876     {
5877       FRAG_APPEND_1_CHAR (i.prefix[REX_PREFIX]);
5878       i.prefixes -= 1;
5879     }
5880
5881   if (i.prefixes != 0 && !intel_syntax)
5882     as_warn (_("skipping prefixes on this instruction"));
5883
5884   p = frag_more (1 + size);
5885   *p++ = i.tm.base_opcode;
5886
5887   fixP = fix_new_exp (frag_now, p - frag_now->fr_literal, size,
5888                       i.op[0].disps, 1, reloc (size, 1, 1, i.reloc[0]));
5889
5890   /* All jumps handled here are signed, but don't use a signed limit
5891      check for 32 and 16 bit jumps as we want to allow wrap around at
5892      4G and 64k respectively.  */
5893   if (size == 1)
5894     fixP->fx_signed = 1;
5895 }
5896
5897 static void
5898 output_interseg_jump (void)
5899 {
5900   char *p;
5901   int size;
5902   int prefix;
5903   int code16;
5904
5905   code16 = 0;
5906   if (flag_code == CODE_16BIT)
5907     code16 = CODE16;
5908
5909   prefix = 0;
5910   if (i.prefix[DATA_PREFIX] != 0)
5911     {
5912       prefix = 1;
5913       i.prefixes -= 1;
5914       code16 ^= CODE16;
5915     }
5916   if (i.prefix[REX_PREFIX] != 0)
5917     {
5918       prefix++;
5919       i.prefixes -= 1;
5920     }
5921
5922   size = 4;
5923   if (code16)
5924     size = 2;
5925
5926   if (i.prefixes != 0 && !intel_syntax)
5927     as_warn (_("skipping prefixes on this instruction"));
5928
5929   /* 1 opcode; 2 segment; offset  */
5930   p = frag_more (prefix + 1 + 2 + size);
5931
5932   if (i.prefix[DATA_PREFIX] != 0)
5933     *p++ = DATA_PREFIX_OPCODE;
5934
5935   if (i.prefix[REX_PREFIX] != 0)
5936     *p++ = i.prefix[REX_PREFIX];
5937
5938   *p++ = i.tm.base_opcode;
5939   if (i.op[1].imms->X_op == O_constant)
5940     {
5941       offsetT n = i.op[1].imms->X_add_number;
5942
5943       if (size == 2
5944           && !fits_in_unsigned_word (n)
5945           && !fits_in_signed_word (n))
5946         {
5947           as_bad (_("16-bit jump out of range"));
5948           return;
5949         }
5950       md_number_to_chars (p, n, size);
5951     }
5952   else
5953     fix_new_exp (frag_now, p - frag_now->fr_literal, size,
5954                  i.op[1].imms, 0, reloc (size, 0, 0, i.reloc[1]));
5955   if (i.op[0].imms->X_op != O_constant)
5956     as_bad (_("can't handle non absolute segment in `%s'"),
5957             i.tm.name);
5958   md_number_to_chars (p + size, (valueT) i.op[0].imms->X_add_number, 2);
5959 }
5960
5961 static void
5962 output_insn (void)
5963 {
5964   fragS *insn_start_frag;
5965   offsetT insn_start_off;
5966
5967   /* Tie dwarf2 debug info to the address at the start of the insn.
5968      We can't do this after the insn has been output as the current
5969      frag may have been closed off.  eg. by frag_var.  */
5970   dwarf2_emit_insn (0);
5971
5972   insn_start_frag = frag_now;
5973   insn_start_off = frag_now_fix ();
5974
5975   /* Output jumps.  */
5976   if (i.tm.opcode_modifier.jump)
5977     output_branch ();
5978   else if (i.tm.opcode_modifier.jumpbyte
5979            || i.tm.opcode_modifier.jumpdword)
5980     output_jump ();
5981   else if (i.tm.opcode_modifier.jumpintersegment)
5982     output_interseg_jump ();
5983   else
5984     {
5985       /* Output normal instructions here.  */
5986       char *p;
5987       unsigned char *q;
5988       unsigned int j;
5989       unsigned int prefix;
5990
5991       /* Since the VEX prefix contains the implicit prefix, we don't
5992           need the explicit prefix.  */
5993       if (!i.tm.opcode_modifier.vex)
5994         {
5995           switch (i.tm.opcode_length)
5996             {
5997             case 3:
5998               if (i.tm.base_opcode & 0xff000000)
5999                 {
6000                   prefix = (i.tm.base_opcode >> 24) & 0xff;
6001                   goto check_prefix;
6002                 }
6003               break;
6004             case 2:
6005               if ((i.tm.base_opcode & 0xff0000) != 0)
6006                 {
6007                   prefix = (i.tm.base_opcode >> 16) & 0xff;
6008                   if (i.tm.cpu_flags.bitfield.cpupadlock)
6009                     {
6010 check_prefix:
6011                       if (prefix != REPE_PREFIX_OPCODE
6012                           || (i.prefix[REP_PREFIX]
6013                               != REPE_PREFIX_OPCODE))
6014                         add_prefix (prefix);
6015                     }
6016                   else
6017                     add_prefix (prefix);
6018                 }
6019               break;
6020             case 1:
6021               break;
6022             default:
6023               abort ();
6024             }
6025
6026           /* The prefix bytes.  */
6027           for (j = ARRAY_SIZE (i.prefix), q = i.prefix; j > 0; j--, q++)
6028             if (*q)
6029               FRAG_APPEND_1_CHAR (*q);
6030         }
6031
6032       if (i.tm.opcode_modifier.vex)
6033         {
6034           for (j = 0, q = i.prefix; j < ARRAY_SIZE (i.prefix); j++, q++)
6035             if (*q)
6036               switch (j)
6037                 {
6038                 case REX_PREFIX:
6039                   /* REX byte is encoded in VEX prefix.  */
6040                   break;
6041                 case SEG_PREFIX:
6042                 case ADDR_PREFIX:
6043                   FRAG_APPEND_1_CHAR (*q);
6044                   break;
6045                 default:
6046                   /* There should be no other prefixes for instructions
6047                      with VEX prefix.  */
6048                   abort ();
6049                 }
6050
6051           /* Now the VEX prefix.  */
6052           p = frag_more (i.vex.length);
6053           for (j = 0; j < i.vex.length; j++)
6054             p[j] = i.vex.bytes[j];
6055         }
6056
6057       /* Now the opcode; be careful about word order here!  */
6058       if (i.tm.opcode_length == 1)
6059         {
6060           FRAG_APPEND_1_CHAR (i.tm.base_opcode);
6061         }
6062       else
6063         {
6064           switch (i.tm.opcode_length)
6065             {
6066             case 3:
6067               p = frag_more (3);
6068               *p++ = (i.tm.base_opcode >> 16) & 0xff;
6069               break;
6070             case 2:
6071               p = frag_more (2);
6072               break;
6073             default:
6074               abort ();
6075               break;
6076             }
6077
6078           /* Put out high byte first: can't use md_number_to_chars!  */
6079           *p++ = (i.tm.base_opcode >> 8) & 0xff;
6080           *p = i.tm.base_opcode & 0xff;
6081         }
6082
6083       /* Now the modrm byte and sib byte (if present).  */
6084       if (i.tm.opcode_modifier.modrm)
6085         {
6086           FRAG_APPEND_1_CHAR ((i.rm.regmem << 0
6087                                | i.rm.reg << 3
6088                                | i.rm.mode << 6));
6089           /* If i.rm.regmem == ESP (4)
6090              && i.rm.mode != (Register mode)
6091              && not 16 bit
6092              ==> need second modrm byte.  */
6093           if (i.rm.regmem == ESCAPE_TO_TWO_BYTE_ADDRESSING
6094               && i.rm.mode != 3
6095               && !(i.base_reg && i.base_reg->reg_type.bitfield.reg16))
6096             FRAG_APPEND_1_CHAR ((i.sib.base << 0
6097                                  | i.sib.index << 3
6098                                  | i.sib.scale << 6));
6099         }
6100
6101       if (i.disp_operands)
6102         output_disp (insn_start_frag, insn_start_off);
6103
6104       if (i.imm_operands)
6105         output_imm (insn_start_frag, insn_start_off);
6106     }
6107
6108 #ifdef DEBUG386
6109   if (flag_debug)
6110     {
6111       pi ("" /*line*/, &i);
6112     }
6113 #endif /* DEBUG386  */
6114 }
6115
6116 /* Return the size of the displacement operand N.  */
6117
6118 static int
6119 disp_size (unsigned int n)
6120 {
6121   int size = 4;
6122   if (i.types[n].bitfield.disp64)
6123     size = 8;
6124   else if (i.types[n].bitfield.disp8)
6125     size = 1;
6126   else if (i.types[n].bitfield.disp16)
6127     size = 2;
6128   return size;
6129 }
6130
6131 /* Return the size of the immediate operand N.  */
6132
6133 static int
6134 imm_size (unsigned int n)
6135 {
6136   int size = 4;
6137   if (i.types[n].bitfield.imm64)
6138     size = 8;
6139   else if (i.types[n].bitfield.imm8 || i.types[n].bitfield.imm8s)
6140     size = 1;
6141   else if (i.types[n].bitfield.imm16)
6142     size = 2;
6143   return size;
6144 }
6145
6146 static void
6147 output_disp (fragS *insn_start_frag, offsetT insn_start_off)
6148 {
6149   char *p;
6150   unsigned int n;
6151
6152   for (n = 0; n < i.operands; n++)
6153     {
6154       if (operand_type_check (i.types[n], disp))
6155         {
6156           if (i.op[n].disps->X_op == O_constant)
6157             {
6158               int size = disp_size (n);
6159               offsetT val;
6160
6161               val = offset_in_range (i.op[n].disps->X_add_number,
6162                                      size);
6163               p = frag_more (size);
6164               md_number_to_chars (p, val, size);
6165             }
6166           else
6167             {
6168               enum bfd_reloc_code_real reloc_type;
6169               int size = disp_size (n);
6170               int sign = i.types[n].bitfield.disp32s;
6171               int pcrel = (i.flags[n] & Operand_PCrel) != 0;
6172
6173               /* We can't have 8 bit displacement here.  */
6174               gas_assert (!i.types[n].bitfield.disp8);
6175
6176               /* The PC relative address is computed relative
6177                  to the instruction boundary, so in case immediate
6178                  fields follows, we need to adjust the value.  */
6179               if (pcrel && i.imm_operands)
6180                 {
6181                   unsigned int n1;
6182                   int sz = 0;
6183
6184                   for (n1 = 0; n1 < i.operands; n1++)
6185                     if (operand_type_check (i.types[n1], imm))
6186                       {
6187                         /* Only one immediate is allowed for PC
6188                            relative address.  */
6189                         gas_assert (sz == 0);
6190                         sz = imm_size (n1);
6191                         i.op[n].disps->X_add_number -= sz;
6192                       }
6193                   /* We should find the immediate.  */
6194                   gas_assert (sz != 0);
6195                 }
6196
6197               p = frag_more (size);
6198               reloc_type = reloc (size, pcrel, sign, i.reloc[n]);
6199               if (GOT_symbol
6200                   && GOT_symbol == i.op[n].disps->X_add_symbol
6201                   && (((reloc_type == BFD_RELOC_32
6202                         || reloc_type == BFD_RELOC_X86_64_32S
6203                         || (reloc_type == BFD_RELOC_64
6204                             && object_64bit))
6205                        && (i.op[n].disps->X_op == O_symbol
6206                            || (i.op[n].disps->X_op == O_add
6207                                && ((symbol_get_value_expression
6208                                     (i.op[n].disps->X_op_symbol)->X_op)
6209                                    == O_subtract))))
6210                       || reloc_type == BFD_RELOC_32_PCREL))
6211                 {
6212                   offsetT add;
6213
6214                   if (insn_start_frag == frag_now)
6215                     add = (p - frag_now->fr_literal) - insn_start_off;
6216                   else
6217                     {
6218                       fragS *fr;
6219
6220                       add = insn_start_frag->fr_fix - insn_start_off;
6221                       for (fr = insn_start_frag->fr_next;
6222                            fr && fr != frag_now; fr = fr->fr_next)
6223                         add += fr->fr_fix;
6224                       add += p - frag_now->fr_literal;
6225                     }
6226
6227                   if (!object_64bit)
6228                     {
6229                       reloc_type = BFD_RELOC_386_GOTPC;
6230                       i.op[n].imms->X_add_number += add;
6231                     }
6232                   else if (reloc_type == BFD_RELOC_64)
6233                     reloc_type = BFD_RELOC_X86_64_GOTPC64;
6234                   else
6235                     /* Don't do the adjustment for x86-64, as there
6236                        the pcrel addressing is relative to the _next_
6237                        insn, and that is taken care of in other code.  */
6238                     reloc_type = BFD_RELOC_X86_64_GOTPC32;
6239                 }
6240               fix_new_exp (frag_now, p - frag_now->fr_literal, size,
6241                            i.op[n].disps, pcrel, reloc_type);
6242             }
6243         }
6244     }
6245 }
6246
6247 static void
6248 output_imm (fragS *insn_start_frag, offsetT insn_start_off)
6249 {
6250   char *p;
6251   unsigned int n;
6252
6253   for (n = 0; n < i.operands; n++)
6254     {
6255       if (operand_type_check (i.types[n], imm))
6256         {
6257           if (i.op[n].imms->X_op == O_constant)
6258             {
6259               int size = imm_size (n);
6260               offsetT val;
6261
6262               val = offset_in_range (i.op[n].imms->X_add_number,
6263                                      size);
6264               p = frag_more (size);
6265               md_number_to_chars (p, val, size);
6266             }
6267           else
6268             {
6269               /* Not absolute_section.
6270                  Need a 32-bit fixup (don't support 8bit
6271                  non-absolute imms).  Try to support other
6272                  sizes ...  */
6273               enum bfd_reloc_code_real reloc_type;
6274               int size = imm_size (n);
6275               int sign;
6276
6277               if (i.types[n].bitfield.imm32s
6278                   && (i.suffix == QWORD_MNEM_SUFFIX
6279                       || (!i.suffix && i.tm.opcode_modifier.no_lsuf)))
6280                 sign = 1;
6281               else
6282                 sign = 0;
6283
6284               p = frag_more (size);
6285               reloc_type = reloc (size, 0, sign, i.reloc[n]);
6286
6287               /*   This is tough to explain.  We end up with this one if we
6288                * have operands that look like
6289                * "_GLOBAL_OFFSET_TABLE_+[.-.L284]".  The goal here is to
6290                * obtain the absolute address of the GOT, and it is strongly
6291                * preferable from a performance point of view to avoid using
6292                * a runtime relocation for this.  The actual sequence of
6293                * instructions often look something like:
6294                *
6295                *        call    .L66
6296                * .L66:
6297                *        popl    %ebx
6298                *        addl    $_GLOBAL_OFFSET_TABLE_+[.-.L66],%ebx
6299                *
6300                *   The call and pop essentially return the absolute address
6301                * of the label .L66 and store it in %ebx.  The linker itself
6302                * will ultimately change the first operand of the addl so
6303                * that %ebx points to the GOT, but to keep things simple, the
6304                * .o file must have this operand set so that it generates not
6305                * the absolute address of .L66, but the absolute address of
6306                * itself.  This allows the linker itself simply treat a GOTPC
6307                * relocation as asking for a pcrel offset to the GOT to be
6308                * added in, and the addend of the relocation is stored in the
6309                * operand field for the instruction itself.
6310                *
6311                *   Our job here is to fix the operand so that it would add
6312                * the correct offset so that %ebx would point to itself.  The
6313                * thing that is tricky is that .-.L66 will point to the
6314                * beginning of the instruction, so we need to further modify
6315                * the operand so that it will point to itself.  There are
6316                * other cases where you have something like:
6317                *
6318                *        .long   $_GLOBAL_OFFSET_TABLE_+[.-.L66]
6319                *
6320                * and here no correction would be required.  Internally in
6321                * the assembler we treat operands of this form as not being
6322                * pcrel since the '.' is explicitly mentioned, and I wonder
6323                * whether it would simplify matters to do it this way.  Who
6324                * knows.  In earlier versions of the PIC patches, the
6325                * pcrel_adjust field was used to store the correction, but
6326                * since the expression is not pcrel, I felt it would be
6327                * confusing to do it this way.  */
6328
6329               if ((reloc_type == BFD_RELOC_32
6330                    || reloc_type == BFD_RELOC_X86_64_32S
6331                    || reloc_type == BFD_RELOC_64)
6332                   && GOT_symbol
6333                   && GOT_symbol == i.op[n].imms->X_add_symbol
6334                   && (i.op[n].imms->X_op == O_symbol
6335                       || (i.op[n].imms->X_op == O_add
6336                           && ((symbol_get_value_expression
6337                                (i.op[n].imms->X_op_symbol)->X_op)
6338                               == O_subtract))))
6339                 {
6340                   offsetT add;
6341
6342                   if (insn_start_frag == frag_now)
6343                     add = (p - frag_now->fr_literal) - insn_start_off;
6344                   else
6345                     {
6346                       fragS *fr;
6347
6348                       add = insn_start_frag->fr_fix - insn_start_off;
6349                       for (fr = insn_start_frag->fr_next;
6350                            fr && fr != frag_now; fr = fr->fr_next)
6351                         add += fr->fr_fix;
6352                       add += p - frag_now->fr_literal;
6353                     }
6354
6355                   if (!object_64bit)
6356                     reloc_type = BFD_RELOC_386_GOTPC;
6357                   else if (size == 4)
6358                     reloc_type = BFD_RELOC_X86_64_GOTPC32;
6359                   else if (size == 8)
6360                     reloc_type = BFD_RELOC_X86_64_GOTPC64;
6361                   i.op[n].imms->X_add_number += add;
6362                 }
6363               fix_new_exp (frag_now, p - frag_now->fr_literal, size,
6364                            i.op[n].imms, 0, reloc_type);
6365             }
6366         }
6367     }
6368 }
6369 \f
6370 /* x86_cons_fix_new is called via the expression parsing code when a
6371    reloc is needed.  We use this hook to get the correct .got reloc.  */
6372 static enum bfd_reloc_code_real got_reloc = NO_RELOC;
6373 static int cons_sign = -1;
6374
6375 void
6376 x86_cons_fix_new (fragS *frag, unsigned int off, unsigned int len,
6377                   expressionS *exp)
6378 {
6379   enum bfd_reloc_code_real r = reloc (len, 0, cons_sign, got_reloc);
6380
6381   got_reloc = NO_RELOC;
6382
6383 #ifdef TE_PE
6384   if (exp->X_op == O_secrel)
6385     {
6386       exp->X_op = O_symbol;
6387       r = BFD_RELOC_32_SECREL;
6388     }
6389 #endif
6390
6391   fix_new_exp (frag, off, len, exp, 0, r);
6392 }
6393
6394 #if (!defined (OBJ_ELF) && !defined (OBJ_MAYBE_ELF)) || defined (LEX_AT)
6395 # define lex_got(reloc, adjust, types) NULL
6396 #else
6397 /* Parse operands of the form
6398    <symbol>@GOTOFF+<nnn>
6399    and similar .plt or .got references.
6400
6401    If we find one, set up the correct relocation in RELOC and copy the
6402    input string, minus the `@GOTOFF' into a malloc'd buffer for
6403    parsing by the calling routine.  Return this buffer, and if ADJUST
6404    is non-null set it to the length of the string we removed from the
6405    input line.  Otherwise return NULL.  */
6406 static char *
6407 lex_got (enum bfd_reloc_code_real *rel,
6408          int *adjust,
6409          i386_operand_type *types)
6410 {
6411   /* Some of the relocations depend on the size of what field is to
6412      be relocated.  But in our callers i386_immediate and i386_displacement
6413      we don't yet know the operand size (this will be set by insn
6414      matching).  Hence we record the word32 relocation here,
6415      and adjust the reloc according to the real size in reloc().  */
6416   static const struct {
6417     const char *str;
6418     int len;
6419     const enum bfd_reloc_code_real rel[2];
6420     const i386_operand_type types64;
6421   } gotrel[] = {
6422     { STRING_COMMA_LEN ("PLTOFF"),   { _dummy_first_bfd_reloc_code_real,
6423                                        BFD_RELOC_X86_64_PLTOFF64 },
6424       OPERAND_TYPE_IMM64 },
6425     { STRING_COMMA_LEN ("PLT"),      { BFD_RELOC_386_PLT32,
6426                                        BFD_RELOC_X86_64_PLT32    },
6427       OPERAND_TYPE_IMM32_32S_DISP32 },
6428     { STRING_COMMA_LEN ("GOTPLT"),   { _dummy_first_bfd_reloc_code_real,
6429                                        BFD_RELOC_X86_64_GOTPLT64 },
6430       OPERAND_TYPE_IMM64_DISP64 },
6431     { STRING_COMMA_LEN ("GOTOFF"),   { BFD_RELOC_386_GOTOFF,
6432                                        BFD_RELOC_X86_64_GOTOFF64 },
6433       OPERAND_TYPE_IMM64_DISP64 },
6434     { STRING_COMMA_LEN ("GOTPCREL"), { _dummy_first_bfd_reloc_code_real,
6435                                        BFD_RELOC_X86_64_GOTPCREL },
6436       OPERAND_TYPE_IMM32_32S_DISP32 },
6437     { STRING_COMMA_LEN ("TLSGD"),    { BFD_RELOC_386_TLS_GD,
6438                                        BFD_RELOC_X86_64_TLSGD    },
6439       OPERAND_TYPE_IMM32_32S_DISP32 },
6440     { STRING_COMMA_LEN ("TLSLDM"),   { BFD_RELOC_386_TLS_LDM,
6441                                        _dummy_first_bfd_reloc_code_real },
6442       OPERAND_TYPE_NONE },
6443     { STRING_COMMA_LEN ("TLSLD"),    { _dummy_first_bfd_reloc_code_real,
6444                                        BFD_RELOC_X86_64_TLSLD    },
6445       OPERAND_TYPE_IMM32_32S_DISP32 },
6446     { STRING_COMMA_LEN ("GOTTPOFF"), { BFD_RELOC_386_TLS_IE_32,
6447                                        BFD_RELOC_X86_64_GOTTPOFF },
6448       OPERAND_TYPE_IMM32_32S_DISP32 },
6449     { STRING_COMMA_LEN ("TPOFF"),    { BFD_RELOC_386_TLS_LE_32,
6450                                        BFD_RELOC_X86_64_TPOFF32  },
6451       OPERAND_TYPE_IMM32_32S_64_DISP32_64 },
6452     { STRING_COMMA_LEN ("NTPOFF"),   { BFD_RELOC_386_TLS_LE,
6453                                        _dummy_first_bfd_reloc_code_real },
6454       OPERAND_TYPE_NONE },
6455     { STRING_COMMA_LEN ("DTPOFF"),   { BFD_RELOC_386_TLS_LDO_32,
6456                                        BFD_RELOC_X86_64_DTPOFF32 },
6457       OPERAND_TYPE_IMM32_32S_64_DISP32_64 },
6458     { STRING_COMMA_LEN ("GOTNTPOFF"),{ BFD_RELOC_386_TLS_GOTIE,
6459                                        _dummy_first_bfd_reloc_code_real },
6460       OPERAND_TYPE_NONE },
6461     { STRING_COMMA_LEN ("INDNTPOFF"),{ BFD_RELOC_386_TLS_IE,
6462                                        _dummy_first_bfd_reloc_code_real },
6463       OPERAND_TYPE_NONE },
6464     { STRING_COMMA_LEN ("GOT"),      { BFD_RELOC_386_GOT32,
6465                                        BFD_RELOC_X86_64_GOT32    },
6466       OPERAND_TYPE_IMM32_32S_64_DISP32 },
6467     { STRING_COMMA_LEN ("TLSDESC"),  { BFD_RELOC_386_TLS_GOTDESC,
6468                                        BFD_RELOC_X86_64_GOTPC32_TLSDESC },
6469       OPERAND_TYPE_IMM32_32S_DISP32 },
6470     { STRING_COMMA_LEN ("TLSCALL"),  { BFD_RELOC_386_TLS_DESC_CALL,
6471                                        BFD_RELOC_X86_64_TLSDESC_CALL },
6472       OPERAND_TYPE_IMM32_32S_DISP32 },
6473   };
6474   char *cp;
6475   unsigned int j;
6476
6477   if (!IS_ELF)
6478     return NULL;
6479
6480   for (cp = input_line_pointer; *cp != '@'; cp++)
6481     if (is_end_of_line[(unsigned char) *cp] || *cp == ',')
6482       return NULL;
6483
6484   for (j = 0; j < ARRAY_SIZE (gotrel); j++)
6485     {
6486       int len = gotrel[j].len;
6487       if (strncasecmp (cp + 1, gotrel[j].str, len) == 0)
6488         {
6489           if (gotrel[j].rel[object_64bit] != 0)
6490             {
6491               int first, second;
6492               char *tmpbuf, *past_reloc;
6493
6494               *rel = gotrel[j].rel[object_64bit];
6495               if (adjust)
6496                 *adjust = len;
6497
6498               if (types)
6499                 {
6500                   if (flag_code != CODE_64BIT)
6501                     {
6502                       types->bitfield.imm32 = 1;
6503                       types->bitfield.disp32 = 1;
6504                     }
6505                   else
6506                     *types = gotrel[j].types64;
6507                 }
6508
6509               if (GOT_symbol == NULL)
6510                 GOT_symbol = symbol_find_or_make (GLOBAL_OFFSET_TABLE_NAME);
6511
6512               /* The length of the first part of our input line.  */
6513               first = cp - input_line_pointer;
6514
6515               /* The second part goes from after the reloc token until
6516                  (and including) an end_of_line char or comma.  */
6517               past_reloc = cp + 1 + len;
6518               cp = past_reloc;
6519               while (!is_end_of_line[(unsigned char) *cp] && *cp != ',')
6520                 ++cp;
6521               second = cp + 1 - past_reloc;
6522
6523               /* Allocate and copy string.  The trailing NUL shouldn't
6524                  be necessary, but be safe.  */
6525               tmpbuf = (char *) xmalloc (first + second + 2);
6526               memcpy (tmpbuf, input_line_pointer, first);
6527               if (second != 0 && *past_reloc != ' ')
6528                 /* Replace the relocation token with ' ', so that
6529                    errors like foo@GOTOFF1 will be detected.  */
6530                 tmpbuf[first++] = ' ';
6531               memcpy (tmpbuf + first, past_reloc, second);
6532               tmpbuf[first + second] = '\0';
6533               return tmpbuf;
6534             }
6535
6536           as_bad (_("@%s reloc is not supported with %d-bit output format"),
6537                   gotrel[j].str, 1 << (5 + object_64bit));
6538           return NULL;
6539         }
6540     }
6541
6542   /* Might be a symbol version string.  Don't as_bad here.  */
6543   return NULL;
6544 }
6545
6546 void
6547 x86_cons (expressionS *exp, int size)
6548 {
6549   intel_syntax = -intel_syntax;
6550
6551   exp->X_md = 0;
6552   if (size == 4 || (object_64bit && size == 8))
6553     {
6554       /* Handle @GOTOFF and the like in an expression.  */
6555       char *save;
6556       char *gotfree_input_line;
6557       int adjust;
6558
6559       save = input_line_pointer;
6560       gotfree_input_line = lex_got (&got_reloc, &adjust, NULL);
6561       if (gotfree_input_line)
6562         input_line_pointer = gotfree_input_line;
6563
6564       expression (exp);
6565
6566       if (gotfree_input_line)
6567         {
6568           /* expression () has merrily parsed up to the end of line,
6569              or a comma - in the wrong buffer.  Transfer how far
6570              input_line_pointer has moved to the right buffer.  */
6571           input_line_pointer = (save
6572                                 + (input_line_pointer - gotfree_input_line)
6573                                 + adjust);
6574           free (gotfree_input_line);
6575           if (exp->X_op == O_constant
6576               || exp->X_op == O_absent
6577               || exp->X_op == O_illegal
6578               || exp->X_op == O_register
6579               || exp->X_op == O_big)
6580             {
6581               char c = *input_line_pointer;
6582               *input_line_pointer = 0;
6583               as_bad (_("missing or invalid expression `%s'"), save);
6584               *input_line_pointer = c;
6585             }
6586         }
6587     }
6588   else
6589     expression (exp);
6590
6591   intel_syntax = -intel_syntax;
6592
6593   if (intel_syntax)
6594     i386_intel_simplify (exp);
6595 }
6596 #endif
6597
6598 static void
6599 signed_cons (int size)
6600 {
6601   if (flag_code == CODE_64BIT)
6602     cons_sign = 1;
6603   cons (size);
6604   cons_sign = -1;
6605 }
6606
6607 #ifdef TE_PE
6608 static void
6609 pe_directive_secrel (dummy)
6610      int dummy ATTRIBUTE_UNUSED;
6611 {
6612   expressionS exp;
6613
6614   do
6615     {
6616       expression (&exp);
6617       if (exp.X_op == O_symbol)
6618         exp.X_op = O_secrel;
6619
6620       emit_expr (&exp, 4);
6621     }
6622   while (*input_line_pointer++ == ',');
6623
6624   input_line_pointer--;
6625   demand_empty_rest_of_line ();
6626 }
6627 #endif
6628
6629 static int
6630 i386_immediate (char *imm_start)
6631 {
6632   char *save_input_line_pointer;
6633   char *gotfree_input_line;
6634   segT exp_seg = 0;
6635   expressionS *exp;
6636   i386_operand_type types;
6637
6638   operand_type_set (&types, ~0);
6639
6640   if (i.imm_operands == MAX_IMMEDIATE_OPERANDS)
6641     {
6642       as_bad (_("at most %d immediate operands are allowed"),
6643               MAX_IMMEDIATE_OPERANDS);
6644       return 0;
6645     }
6646
6647   exp = &im_expressions[i.imm_operands++];
6648   i.op[this_operand].imms = exp;
6649
6650   if (is_space_char (*imm_start))
6651     ++imm_start;
6652
6653   save_input_line_pointer = input_line_pointer;
6654   input_line_pointer = imm_start;
6655
6656   gotfree_input_line = lex_got (&i.reloc[this_operand], NULL, &types);
6657   if (gotfree_input_line)
6658     input_line_pointer = gotfree_input_line;
6659
6660   exp_seg = expression (exp);
6661
6662   SKIP_WHITESPACE ();
6663   if (*input_line_pointer)
6664     as_bad (_("junk `%s' after expression"), input_line_pointer);
6665
6666   input_line_pointer = save_input_line_pointer;
6667   if (gotfree_input_line)
6668     {
6669       free (gotfree_input_line);
6670
6671       if (exp->X_op == O_constant || exp->X_op == O_register)
6672         exp->X_op = O_illegal;
6673     }
6674
6675   return i386_finalize_immediate (exp_seg, exp, types, imm_start);
6676 }
6677
6678 static int
6679 i386_finalize_immediate (segT exp_seg ATTRIBUTE_UNUSED, expressionS *exp,
6680                          i386_operand_type types, const char *imm_start)
6681 {
6682   if (exp->X_op == O_absent || exp->X_op == O_illegal || exp->X_op == O_big)
6683     {
6684       if (imm_start)
6685         as_bad (_("missing or invalid immediate expression `%s'"),
6686                 imm_start);
6687       return 0;
6688     }
6689   else if (exp->X_op == O_constant)
6690     {
6691       /* Size it properly later.  */
6692       i.types[this_operand].bitfield.imm64 = 1;
6693       /* If not 64bit, sign extend val.  */
6694       if (flag_code != CODE_64BIT
6695           && (exp->X_add_number & ~(((addressT) 2 << 31) - 1)) == 0)
6696         exp->X_add_number
6697           = (exp->X_add_number ^ ((addressT) 1 << 31)) - ((addressT) 1 << 31);
6698     }
6699 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
6700   else if (OUTPUT_FLAVOR == bfd_target_aout_flavour
6701            && exp_seg != absolute_section
6702            && exp_seg != text_section
6703            && exp_seg != data_section
6704            && exp_seg != bss_section
6705            && exp_seg != undefined_section
6706            && !bfd_is_com_section (exp_seg))
6707     {
6708       as_bad (_("unimplemented segment %s in operand"), exp_seg->name);
6709       return 0;
6710     }
6711 #endif
6712   else if (!intel_syntax && exp->X_op == O_register)
6713     {
6714       if (imm_start)
6715         as_bad (_("illegal immediate register operand %s"), imm_start);
6716       return 0;
6717     }
6718   else
6719     {
6720       /* This is an address.  The size of the address will be
6721          determined later, depending on destination register,
6722          suffix, or the default for the section.  */
6723       i.types[this_operand].bitfield.imm8 = 1;
6724       i.types[this_operand].bitfield.imm16 = 1;
6725       i.types[this_operand].bitfield.imm32 = 1;
6726       i.types[this_operand].bitfield.imm32s = 1;
6727       i.types[this_operand].bitfield.imm64 = 1;
6728       i.types[this_operand] = operand_type_and (i.types[this_operand],
6729                                                 types);
6730     }
6731
6732   return 1;
6733 }
6734
6735 static char *
6736 i386_scale (char *scale)
6737 {
6738   offsetT val;
6739   char *save = input_line_pointer;
6740
6741   input_line_pointer = scale;
6742   val = get_absolute_expression ();
6743
6744   switch (val)
6745     {
6746     case 1:
6747       i.log2_scale_factor = 0;
6748       break;
6749     case 2:
6750       i.log2_scale_factor = 1;
6751       break;
6752     case 4:
6753       i.log2_scale_factor = 2;
6754       break;
6755     case 8:
6756       i.log2_scale_factor = 3;
6757       break;
6758     default:
6759       {
6760         char sep = *input_line_pointer;
6761
6762         *input_line_pointer = '\0';
6763         as_bad (_("expecting scale factor of 1, 2, 4, or 8: got `%s'"),
6764                 scale);
6765         *input_line_pointer = sep;
6766         input_line_pointer = save;
6767         return NULL;
6768       }
6769     }
6770   if (i.log2_scale_factor != 0 && i.index_reg == 0)
6771     {
6772       as_warn (_("scale factor of %d without an index register"),
6773                1 << i.log2_scale_factor);
6774       i.log2_scale_factor = 0;
6775     }
6776   scale = input_line_pointer;
6777   input_line_pointer = save;
6778   return scale;
6779 }
6780
6781 static int
6782 i386_displacement (char *disp_start, char *disp_end)
6783 {
6784   expressionS *exp;
6785   segT exp_seg = 0;
6786   char *save_input_line_pointer;
6787   char *gotfree_input_line;
6788   int override;
6789   i386_operand_type bigdisp, types = anydisp;
6790   int ret;
6791
6792   if (i.disp_operands == MAX_MEMORY_OPERANDS)
6793     {
6794       as_bad (_("at most %d displacement operands are allowed"),
6795               MAX_MEMORY_OPERANDS);
6796       return 0;
6797     }
6798
6799   operand_type_set (&bigdisp, 0);
6800   if ((i.types[this_operand].bitfield.jumpabsolute)
6801       || (!current_templates->start->opcode_modifier.jump
6802           && !current_templates->start->opcode_modifier.jumpdword))
6803     {
6804       bigdisp.bitfield.disp32 = 1;
6805       override = (i.prefix[ADDR_PREFIX] != 0);
6806       if (flag_code == CODE_64BIT)
6807         {
6808           if (!override)
6809             {
6810               bigdisp.bitfield.disp32s = 1;
6811               bigdisp.bitfield.disp64 = 1;
6812             }
6813         }
6814       else if ((flag_code == CODE_16BIT) ^ override)
6815         {
6816           bigdisp.bitfield.disp32 = 0;
6817           bigdisp.bitfield.disp16 = 1;
6818         }
6819     }
6820   else
6821     {
6822       /* For PC-relative branches, the width of the displacement
6823          is dependent upon data size, not address size.  */
6824       override = (i.prefix[DATA_PREFIX] != 0);
6825       if (flag_code == CODE_64BIT)
6826         {
6827           if (override || i.suffix == WORD_MNEM_SUFFIX)
6828             bigdisp.bitfield.disp16 = 1;
6829           else
6830             {
6831               bigdisp.bitfield.disp32 = 1;
6832               bigdisp.bitfield.disp32s = 1;
6833             }
6834         }
6835       else
6836         {
6837           if (!override)
6838             override = (i.suffix == (flag_code != CODE_16BIT
6839                                      ? WORD_MNEM_SUFFIX
6840                                      : LONG_MNEM_SUFFIX));
6841           bigdisp.bitfield.disp32 = 1;
6842           if ((flag_code == CODE_16BIT) ^ override)
6843             {
6844               bigdisp.bitfield.disp32 = 0;
6845               bigdisp.bitfield.disp16 = 1;
6846             }
6847         }
6848     }
6849   i.types[this_operand] = operand_type_or (i.types[this_operand],
6850                                            bigdisp);
6851
6852   exp = &disp_expressions[i.disp_operands];
6853   i.op[this_operand].disps = exp;
6854   i.disp_operands++;
6855   save_input_line_pointer = input_line_pointer;
6856   input_line_pointer = disp_start;
6857   END_STRING_AND_SAVE (disp_end);
6858
6859 #ifndef GCC_ASM_O_HACK
6860 #define GCC_ASM_O_HACK 0
6861 #endif
6862 #if GCC_ASM_O_HACK
6863   END_STRING_AND_SAVE (disp_end + 1);
6864   if (i.types[this_operand].bitfield.baseIndex
6865       && displacement_string_end[-1] == '+')
6866     {
6867       /* This hack is to avoid a warning when using the "o"
6868          constraint within gcc asm statements.
6869          For instance:
6870
6871          #define _set_tssldt_desc(n,addr,limit,type) \
6872          __asm__ __volatile__ ( \
6873          "movw %w2,%0\n\t" \
6874          "movw %w1,2+%0\n\t" \
6875          "rorl $16,%1\n\t" \
6876          "movb %b1,4+%0\n\t" \
6877          "movb %4,5+%0\n\t" \
6878          "movb $0,6+%0\n\t" \
6879          "movb %h1,7+%0\n\t" \
6880          "rorl $16,%1" \
6881          : "=o"(*(n)) : "q" (addr), "ri"(limit), "i"(type))
6882
6883          This works great except that the output assembler ends
6884          up looking a bit weird if it turns out that there is
6885          no offset.  You end up producing code that looks like:
6886
6887          #APP
6888          movw $235,(%eax)
6889          movw %dx,2+(%eax)
6890          rorl $16,%edx
6891          movb %dl,4+(%eax)
6892          movb $137,5+(%eax)
6893          movb $0,6+(%eax)
6894          movb %dh,7+(%eax)
6895          rorl $16,%edx
6896          #NO_APP
6897
6898          So here we provide the missing zero.  */
6899
6900       *displacement_string_end = '0';
6901     }
6902 #endif
6903   gotfree_input_line = lex_got (&i.reloc[this_operand], NULL, &types);
6904   if (gotfree_input_line)
6905     input_line_pointer = gotfree_input_line;
6906
6907   exp_seg = expression (exp);
6908
6909   SKIP_WHITESPACE ();
6910   if (*input_line_pointer)
6911     as_bad (_("junk `%s' after expression"), input_line_pointer);
6912 #if GCC_ASM_O_HACK
6913   RESTORE_END_STRING (disp_end + 1);
6914 #endif
6915   input_line_pointer = save_input_line_pointer;
6916   if (gotfree_input_line)
6917     {
6918       free (gotfree_input_line);
6919
6920       if (exp->X_op == O_constant || exp->X_op == O_register)
6921         exp->X_op = O_illegal;
6922     }
6923
6924   ret = i386_finalize_displacement (exp_seg, exp, types, disp_start);
6925
6926   RESTORE_END_STRING (disp_end);
6927
6928   return ret;
6929 }
6930
6931 static int
6932 i386_finalize_displacement (segT exp_seg ATTRIBUTE_UNUSED, expressionS *exp,
6933                             i386_operand_type types, const char *disp_start)
6934 {
6935   i386_operand_type bigdisp;
6936   int ret = 1;
6937
6938   /* We do this to make sure that the section symbol is in
6939      the symbol table.  We will ultimately change the relocation
6940      to be relative to the beginning of the section.  */
6941   if (i.reloc[this_operand] == BFD_RELOC_386_GOTOFF
6942       || i.reloc[this_operand] == BFD_RELOC_X86_64_GOTPCREL
6943       || i.reloc[this_operand] == BFD_RELOC_X86_64_GOTOFF64)
6944     {
6945       if (exp->X_op != O_symbol)
6946         goto inv_disp;
6947
6948       if (S_IS_LOCAL (exp->X_add_symbol)
6949           && S_GET_SEGMENT (exp->X_add_symbol) != undefined_section
6950           && S_GET_SEGMENT (exp->X_add_symbol) != expr_section)
6951         section_symbol (S_GET_SEGMENT (exp->X_add_symbol));
6952       exp->X_op = O_subtract;
6953       exp->X_op_symbol = GOT_symbol;
6954       if (i.reloc[this_operand] == BFD_RELOC_X86_64_GOTPCREL)
6955         i.reloc[this_operand] = BFD_RELOC_32_PCREL;
6956       else if (i.reloc[this_operand] == BFD_RELOC_X86_64_GOTOFF64)
6957         i.reloc[this_operand] = BFD_RELOC_64;
6958       else
6959         i.reloc[this_operand] = BFD_RELOC_32;
6960     }
6961
6962   else if (exp->X_op == O_absent
6963            || exp->X_op == O_illegal
6964            || exp->X_op == O_big)
6965     {
6966     inv_disp:
6967       as_bad (_("missing or invalid displacement expression `%s'"),
6968               disp_start);
6969       ret = 0;
6970     }
6971
6972   else if (flag_code == CODE_64BIT
6973            && !i.prefix[ADDR_PREFIX]
6974            && exp->X_op == O_constant)
6975     {
6976       /* Since displacement is signed extended to 64bit, don't allow
6977          disp32 and turn off disp32s if they are out of range.  */
6978       i.types[this_operand].bitfield.disp32 = 0;
6979       if (!fits_in_signed_long (exp->X_add_number))
6980         {
6981           i.types[this_operand].bitfield.disp32s = 0;
6982           if (i.types[this_operand].bitfield.baseindex)
6983             {
6984               as_bad (_("0x%lx out range of signed 32bit displacement"),
6985                       (long) exp->X_add_number);
6986               ret = 0;
6987             }
6988         }
6989     }
6990
6991 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
6992   else if (exp->X_op != O_constant
6993            && OUTPUT_FLAVOR == bfd_target_aout_flavour
6994            && exp_seg != absolute_section
6995            && exp_seg != text_section
6996            && exp_seg != data_section
6997            && exp_seg != bss_section
6998            && exp_seg != undefined_section
6999            && !bfd_is_com_section (exp_seg))
7000     {
7001       as_bad (_("unimplemented segment %s in operand"), exp_seg->name);
7002       ret = 0;
7003     }
7004 #endif
7005
7006   /* Check if this is a displacement only operand.  */
7007   bigdisp = i.types[this_operand];
7008   bigdisp.bitfield.disp8 = 0;
7009   bigdisp.bitfield.disp16 = 0;
7010   bigdisp.bitfield.disp32 = 0;
7011   bigdisp.bitfield.disp32s = 0;
7012   bigdisp.bitfield.disp64 = 0;
7013   if (operand_type_all_zero (&bigdisp))
7014     i.types[this_operand] = operand_type_and (i.types[this_operand],
7015                                               types);
7016
7017   return ret;
7018 }
7019
7020 /* Make sure the memory operand we've been dealt is valid.
7021    Return 1 on success, 0 on a failure.  */
7022
7023 static int
7024 i386_index_check (const char *operand_string)
7025 {
7026   int ok;
7027   const char *kind = "base/index";
7028 #if INFER_ADDR_PREFIX
7029   int fudged = 0;
7030
7031  tryprefix:
7032 #endif
7033   ok = 1;
7034   if (current_templates->start->opcode_modifier.isstring
7035       && !current_templates->start->opcode_modifier.immext
7036       && (current_templates->end[-1].opcode_modifier.isstring
7037           || i.mem_operands))
7038     {
7039       /* Memory operands of string insns are special in that they only allow
7040          a single register (rDI, rSI, or rBX) as their memory address.  */
7041       unsigned int expected;
7042
7043       kind = "string address";
7044
7045       if (current_templates->start->opcode_modifier.w)
7046         {
7047           i386_operand_type type = current_templates->end[-1].operand_types[0];
7048
7049           if (!type.bitfield.baseindex
7050               || ((!i.mem_operands != !intel_syntax)
7051                   && current_templates->end[-1].operand_types[1]
7052                      .bitfield.baseindex))
7053             type = current_templates->end[-1].operand_types[1];
7054           expected = type.bitfield.esseg ? 7 /* rDI */ : 6 /* rSI */;
7055         }
7056       else
7057         expected = 3 /* rBX */;
7058
7059       if (!i.base_reg || i.index_reg
7060           || operand_type_check (i.types[this_operand], disp))
7061         ok = -1;
7062       else if (!(flag_code == CODE_64BIT
7063                  ? i.prefix[ADDR_PREFIX]
7064                    ? i.base_reg->reg_type.bitfield.reg32
7065                    : i.base_reg->reg_type.bitfield.reg64
7066                  : (flag_code == CODE_16BIT) ^ !i.prefix[ADDR_PREFIX]
7067                    ? i.base_reg->reg_type.bitfield.reg32
7068                    : i.base_reg->reg_type.bitfield.reg16))
7069         ok = 0;
7070       else if (i.base_reg->reg_num != expected)
7071         ok = -1;
7072
7073       if (ok < 0)
7074         {
7075           unsigned int j;
7076
7077           for (j = 0; j < i386_regtab_size; ++j)
7078             if ((flag_code == CODE_64BIT
7079                  ? i.prefix[ADDR_PREFIX]
7080                    ? i386_regtab[j].reg_type.bitfield.reg32
7081                    : i386_regtab[j].reg_type.bitfield.reg64
7082                  : (flag_code == CODE_16BIT) ^ !i.prefix[ADDR_PREFIX]
7083                    ? i386_regtab[j].reg_type.bitfield.reg32
7084                    : i386_regtab[j].reg_type.bitfield.reg16)
7085                 && i386_regtab[j].reg_num == expected)
7086               break;
7087           gas_assert (j < i386_regtab_size);
7088           as_warn (_("`%s' is not valid here (expected `%c%s%s%c')"),
7089                    operand_string,
7090                    intel_syntax ? '[' : '(',
7091                    register_prefix,
7092                    i386_regtab[j].reg_name,
7093                    intel_syntax ? ']' : ')');
7094           ok = 1;
7095         }
7096     }
7097   else if (flag_code == CODE_64BIT)
7098     {
7099       if ((i.base_reg
7100            && ((i.prefix[ADDR_PREFIX] == 0
7101                 && !i.base_reg->reg_type.bitfield.reg64)
7102                || (i.prefix[ADDR_PREFIX]
7103                    && !i.base_reg->reg_type.bitfield.reg32))
7104            && (i.index_reg
7105                || i.base_reg->reg_num !=
7106                   (i.prefix[ADDR_PREFIX] == 0 ? RegRip : RegEip)))
7107           || (i.index_reg
7108               && (!i.index_reg->reg_type.bitfield.baseindex
7109                   || (i.prefix[ADDR_PREFIX] == 0
7110                       && i.index_reg->reg_num != RegRiz
7111                       && !i.index_reg->reg_type.bitfield.reg64
7112                       )
7113                   || (i.prefix[ADDR_PREFIX]
7114                       && i.index_reg->reg_num != RegEiz
7115                       && !i.index_reg->reg_type.bitfield.reg32))))
7116         ok = 0;
7117     }
7118   else
7119     {
7120       if ((flag_code == CODE_16BIT) ^ (i.prefix[ADDR_PREFIX] != 0))
7121         {
7122           /* 16bit checks.  */
7123           if ((i.base_reg
7124                && (!i.base_reg->reg_type.bitfield.reg16
7125                    || !i.base_reg->reg_type.bitfield.baseindex))
7126               || (i.index_reg
7127                   && (!i.index_reg->reg_type.bitfield.reg16
7128                       || !i.index_reg->reg_type.bitfield.baseindex
7129                       || !(i.base_reg
7130                            && i.base_reg->reg_num < 6
7131                            && i.index_reg->reg_num >= 6
7132                            && i.log2_scale_factor == 0))))
7133             ok = 0;
7134         }
7135       else
7136         {
7137           /* 32bit checks.  */
7138           if ((i.base_reg
7139                && !i.base_reg->reg_type.bitfield.reg32)
7140               || (i.index_reg
7141                   && ((!i.index_reg->reg_type.bitfield.reg32
7142                        && i.index_reg->reg_num != RegEiz)
7143                       || !i.index_reg->reg_type.bitfield.baseindex)))
7144             ok = 0;
7145         }
7146     }
7147   if (!ok)
7148     {
7149 #if INFER_ADDR_PREFIX
7150       if (!i.mem_operands && !i.prefix[ADDR_PREFIX])
7151         {
7152           i.prefix[ADDR_PREFIX] = ADDR_PREFIX_OPCODE;
7153           i.prefixes += 1;
7154           /* Change the size of any displacement too.  At most one of
7155              Disp16 or Disp32 is set.
7156              FIXME.  There doesn't seem to be any real need for separate
7157              Disp16 and Disp32 flags.  The same goes for Imm16 and Imm32.
7158              Removing them would probably clean up the code quite a lot.  */
7159           if (flag_code != CODE_64BIT
7160               && (i.types[this_operand].bitfield.disp16
7161                   || i.types[this_operand].bitfield.disp32))
7162             i.types[this_operand]
7163               = operand_type_xor (i.types[this_operand], disp16_32);
7164           fudged = 1;
7165           goto tryprefix;
7166         }
7167       if (fudged)
7168         as_bad (_("`%s' is not a valid %s expression"),
7169                 operand_string,
7170                 kind);
7171       else
7172 #endif
7173         as_bad (_("`%s' is not a valid %s-bit %s expression"),
7174                 operand_string,
7175                 flag_code_names[i.prefix[ADDR_PREFIX]
7176                                          ? flag_code == CODE_32BIT
7177                                            ? CODE_16BIT
7178                                            : CODE_32BIT
7179                                          : flag_code],
7180                 kind);
7181     }
7182   return ok;
7183 }
7184
7185 /* Parse OPERAND_STRING into the i386_insn structure I.  Returns zero
7186    on error.  */
7187
7188 static int
7189 i386_att_operand (char *operand_string)
7190 {
7191   const reg_entry *r;
7192   char *end_op;
7193   char *op_string = operand_string;
7194
7195   if (is_space_char (*op_string))
7196     ++op_string;
7197
7198   /* We check for an absolute prefix (differentiating,
7199      for example, 'jmp pc_relative_label' from 'jmp *absolute_label'.  */
7200   if (*op_string == ABSOLUTE_PREFIX)
7201     {
7202       ++op_string;
7203       if (is_space_char (*op_string))
7204         ++op_string;
7205       i.types[this_operand].bitfield.jumpabsolute = 1;
7206     }
7207
7208   /* Check if operand is a register.  */
7209   if ((r = parse_register (op_string, &end_op)) != NULL)
7210     {
7211       i386_operand_type temp;
7212
7213       /* Check for a segment override by searching for ':' after a
7214          segment register.  */
7215       op_string = end_op;
7216       if (is_space_char (*op_string))
7217         ++op_string;
7218       if (*op_string == ':'
7219           && (r->reg_type.bitfield.sreg2
7220               || r->reg_type.bitfield.sreg3))
7221         {
7222           switch (r->reg_num)
7223             {
7224             case 0:
7225               i.seg[i.mem_operands] = &es;
7226               break;
7227             case 1:
7228               i.seg[i.mem_operands] = &cs;
7229               break;
7230             case 2:
7231               i.seg[i.mem_operands] = &ss;
7232               break;
7233             case 3:
7234               i.seg[i.mem_operands] = &ds;
7235               break;
7236             case 4:
7237               i.seg[i.mem_operands] = &fs;
7238               break;
7239             case 5:
7240               i.seg[i.mem_operands] = &gs;
7241               break;
7242             }
7243
7244           /* Skip the ':' and whitespace.  */
7245           ++op_string;
7246           if (is_space_char (*op_string))
7247             ++op_string;
7248
7249           if (!is_digit_char (*op_string)
7250               && !is_identifier_char (*op_string)
7251               && *op_string != '('
7252               && *op_string != ABSOLUTE_PREFIX)
7253             {
7254               as_bad (_("bad memory operand `%s'"), op_string);
7255               return 0;
7256             }
7257           /* Handle case of %es:*foo.  */
7258           if (*op_string == ABSOLUTE_PREFIX)
7259             {
7260               ++op_string;
7261               if (is_space_char (*op_string))
7262                 ++op_string;
7263               i.types[this_operand].bitfield.jumpabsolute = 1;
7264             }
7265           goto do_memory_reference;
7266         }
7267       if (*op_string)
7268         {
7269           as_bad (_("junk `%s' after register"), op_string);
7270           return 0;
7271         }
7272       temp = r->reg_type;
7273       temp.bitfield.baseindex = 0;
7274       i.types[this_operand] = operand_type_or (i.types[this_operand],
7275                                                temp);
7276       i.types[this_operand].bitfield.unspecified = 0;
7277       i.op[this_operand].regs = r;
7278       i.reg_operands++;
7279     }
7280   else if (*op_string == REGISTER_PREFIX)
7281     {
7282       as_bad (_("bad register name `%s'"), op_string);
7283       return 0;
7284     }
7285   else if (*op_string == IMMEDIATE_PREFIX)
7286     {
7287       ++op_string;
7288       if (i.types[this_operand].bitfield.jumpabsolute)
7289         {
7290           as_bad (_("immediate operand illegal with absolute jump"));
7291           return 0;
7292         }
7293       if (!i386_immediate (op_string))
7294         return 0;
7295     }
7296   else if (is_digit_char (*op_string)
7297            || is_identifier_char (*op_string)
7298            || *op_string == '(')
7299     {
7300       /* This is a memory reference of some sort.  */
7301       char *base_string;
7302
7303       /* Start and end of displacement string expression (if found).  */
7304       char *displacement_string_start;
7305       char *displacement_string_end;
7306
7307     do_memory_reference:
7308       if ((i.mem_operands == 1
7309            && !current_templates->start->opcode_modifier.isstring)
7310           || i.mem_operands == 2)
7311         {
7312           as_bad (_("too many memory references for `%s'"),
7313                   current_templates->start->name);
7314           return 0;
7315         }
7316
7317       /* Check for base index form.  We detect the base index form by
7318          looking for an ')' at the end of the operand, searching
7319          for the '(' matching it, and finding a REGISTER_PREFIX or ','
7320          after the '('.  */
7321       base_string = op_string + strlen (op_string);
7322
7323       --base_string;
7324       if (is_space_char (*base_string))
7325         --base_string;
7326
7327       /* If we only have a displacement, set-up for it to be parsed later.  */
7328       displacement_string_start = op_string;
7329       displacement_string_end = base_string + 1;
7330
7331       if (*base_string == ')')
7332         {
7333           char *temp_string;
7334           unsigned int parens_balanced = 1;
7335           /* We've already checked that the number of left & right ()'s are
7336              equal, so this loop will not be infinite.  */
7337           do
7338             {
7339               base_string--;
7340               if (*base_string == ')')
7341                 parens_balanced++;
7342               if (*base_string == '(')
7343                 parens_balanced--;
7344             }
7345           while (parens_balanced);
7346
7347           temp_string = base_string;
7348
7349           /* Skip past '(' and whitespace.  */
7350           ++base_string;
7351           if (is_space_char (*base_string))
7352             ++base_string;
7353
7354           if (*base_string == ','
7355               || ((i.base_reg = parse_register (base_string, &end_op))
7356                   != NULL))
7357             {
7358               displacement_string_end = temp_string;
7359
7360               i.types[this_operand].bitfield.baseindex = 1;
7361
7362               if (i.base_reg)
7363                 {
7364                   base_string = end_op;
7365                   if (is_space_char (*base_string))
7366                     ++base_string;
7367                 }
7368
7369               /* There may be an index reg or scale factor here.  */
7370               if (*base_string == ',')
7371                 {
7372                   ++base_string;
7373                   if (is_space_char (*base_string))
7374                     ++base_string;
7375
7376                   if ((i.index_reg = parse_register (base_string, &end_op))
7377                       != NULL)
7378                     {
7379                       base_string = end_op;
7380                       if (is_space_char (*base_string))
7381                         ++base_string;
7382                       if (*base_string == ',')
7383                         {
7384                           ++base_string;
7385                           if (is_space_char (*base_string))
7386                             ++base_string;
7387                         }
7388                       else if (*base_string != ')')
7389                         {
7390                           as_bad (_("expecting `,' or `)' "
7391                                     "after index register in `%s'"),
7392                                   operand_string);
7393                           return 0;
7394                         }
7395                     }
7396                   else if (*base_string == REGISTER_PREFIX)
7397                     {
7398                       as_bad (_("bad register name `%s'"), base_string);
7399                       return 0;
7400                     }
7401
7402                   /* Check for scale factor.  */
7403                   if (*base_string != ')')
7404                     {
7405                       char *end_scale = i386_scale (base_string);
7406
7407                       if (!end_scale)
7408                         return 0;
7409
7410                       base_string = end_scale;
7411                       if (is_space_char (*base_string))
7412                         ++base_string;
7413                       if (*base_string != ')')
7414                         {
7415                           as_bad (_("expecting `)' "
7416                                     "after scale factor in `%s'"),
7417                                   operand_string);
7418                           return 0;
7419                         }
7420                     }
7421                   else if (!i.index_reg)
7422                     {
7423                       as_bad (_("expecting index register or scale factor "
7424                                 "after `,'; got '%c'"),
7425                               *base_string);
7426                       return 0;
7427                     }
7428                 }
7429               else if (*base_string != ')')
7430                 {
7431                   as_bad (_("expecting `,' or `)' "
7432                             "after base register in `%s'"),
7433                           operand_string);
7434                   return 0;
7435                 }
7436             }
7437           else if (*base_string == REGISTER_PREFIX)
7438             {
7439               as_bad (_("bad register name `%s'"), base_string);
7440               return 0;
7441             }
7442         }
7443
7444       /* If there's an expression beginning the operand, parse it,
7445          assuming displacement_string_start and
7446          displacement_string_end are meaningful.  */
7447       if (displacement_string_start != displacement_string_end)
7448         {
7449           if (!i386_displacement (displacement_string_start,
7450                                   displacement_string_end))
7451             return 0;
7452         }
7453
7454       /* Special case for (%dx) while doing input/output op.  */
7455       if (i.base_reg
7456           && operand_type_equal (&i.base_reg->reg_type,
7457                                  &reg16_inoutportreg)
7458           && i.index_reg == 0
7459           && i.log2_scale_factor == 0
7460           && i.seg[i.mem_operands] == 0
7461           && !operand_type_check (i.types[this_operand], disp))
7462         {
7463           i.types[this_operand] = inoutportreg;
7464           return 1;
7465         }
7466
7467       if (i386_index_check (operand_string) == 0)
7468         return 0;
7469       i.types[this_operand].bitfield.mem = 1;
7470       i.mem_operands++;
7471     }
7472   else
7473     {
7474       /* It's not a memory operand; argh!  */
7475       as_bad (_("invalid char %s beginning operand %d `%s'"),
7476               output_invalid (*op_string),
7477               this_operand + 1,
7478               op_string);
7479       return 0;
7480     }
7481   return 1;                     /* Normal return.  */
7482 }
7483 \f
7484 /* md_estimate_size_before_relax()
7485
7486    Called just before relax() for rs_machine_dependent frags.  The x86
7487    assembler uses these frags to handle variable size jump
7488    instructions.
7489
7490    Any symbol that is now undefined will not become defined.
7491    Return the correct fr_subtype in the frag.
7492    Return the initial "guess for variable size of frag" to caller.
7493    The guess is actually the growth beyond the fixed part.  Whatever
7494    we do to grow the fixed or variable part contributes to our
7495    returned value.  */
7496
7497 int
7498 md_estimate_size_before_relax (fragP, segment)
7499      fragS *fragP;
7500      segT segment;
7501 {
7502   /* We've already got fragP->fr_subtype right;  all we have to do is
7503      check for un-relaxable symbols.  On an ELF system, we can't relax
7504      an externally visible symbol, because it may be overridden by a
7505      shared library.  */
7506   if (S_GET_SEGMENT (fragP->fr_symbol) != segment
7507 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7508       || (IS_ELF
7509           && (S_IS_EXTERNAL (fragP->fr_symbol)
7510               || S_IS_WEAK (fragP->fr_symbol)
7511               || ((symbol_get_bfdsym (fragP->fr_symbol)->flags
7512                    & BSF_GNU_INDIRECT_FUNCTION))))
7513 #endif
7514 #if defined (OBJ_COFF) && defined (TE_PE)
7515       || (OUTPUT_FLAVOR == bfd_target_coff_flavour
7516           && S_IS_WEAK (fragP->fr_symbol))
7517 #endif
7518       )
7519     {
7520       /* Symbol is undefined in this segment, or we need to keep a
7521          reloc so that weak symbols can be overridden.  */
7522       int size = (fragP->fr_subtype & CODE16) ? 2 : 4;
7523       enum bfd_reloc_code_real reloc_type;
7524       unsigned char *opcode;
7525       int old_fr_fix;
7526
7527       if (fragP->fr_var != NO_RELOC)
7528         reloc_type = (enum bfd_reloc_code_real) fragP->fr_var;
7529       else if (size == 2)
7530         reloc_type = BFD_RELOC_16_PCREL;
7531       else
7532         reloc_type = BFD_RELOC_32_PCREL;
7533
7534       old_fr_fix = fragP->fr_fix;
7535       opcode = (unsigned char *) fragP->fr_opcode;
7536
7537       switch (TYPE_FROM_RELAX_STATE (fragP->fr_subtype))
7538         {
7539         case UNCOND_JUMP:
7540           /* Make jmp (0xeb) a (d)word displacement jump.  */
7541           opcode[0] = 0xe9;
7542           fragP->fr_fix += size;
7543           fix_new (fragP, old_fr_fix, size,
7544                    fragP->fr_symbol,
7545                    fragP->fr_offset, 1,
7546                    reloc_type);
7547           break;
7548
7549         case COND_JUMP86:
7550           if (size == 2
7551               && (!no_cond_jump_promotion || fragP->fr_var != NO_RELOC))
7552             {
7553               /* Negate the condition, and branch past an
7554                  unconditional jump.  */
7555               opcode[0] ^= 1;
7556               opcode[1] = 3;
7557               /* Insert an unconditional jump.  */
7558               opcode[2] = 0xe9;
7559               /* We added two extra opcode bytes, and have a two byte
7560                  offset.  */
7561               fragP->fr_fix += 2 + 2;
7562               fix_new (fragP, old_fr_fix + 2, 2,
7563                        fragP->fr_symbol,
7564                        fragP->fr_offset, 1,
7565                        reloc_type);
7566               break;
7567             }
7568           /* Fall through.  */
7569
7570         case COND_JUMP:
7571           if (no_cond_jump_promotion && fragP->fr_var == NO_RELOC)
7572             {
7573               fixS *fixP;
7574
7575               fragP->fr_fix += 1;
7576               fixP = fix_new (fragP, old_fr_fix, 1,
7577                               fragP->fr_symbol,
7578                               fragP->fr_offset, 1,
7579                               BFD_RELOC_8_PCREL);
7580               fixP->fx_signed = 1;
7581               break;
7582             }
7583
7584           /* This changes the byte-displacement jump 0x7N
7585              to the (d)word-displacement jump 0x0f,0x8N.  */
7586           opcode[1] = opcode[0] + 0x10;
7587           opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
7588           /* We've added an opcode byte.  */
7589           fragP->fr_fix += 1 + size;
7590           fix_new (fragP, old_fr_fix + 1, size,
7591                    fragP->fr_symbol,
7592                    fragP->fr_offset, 1,
7593                    reloc_type);
7594           break;
7595
7596         default:
7597           BAD_CASE (fragP->fr_subtype);
7598           break;
7599         }
7600       frag_wane (fragP);
7601       return fragP->fr_fix - old_fr_fix;
7602     }
7603
7604   /* Guess size depending on current relax state.  Initially the relax
7605      state will correspond to a short jump and we return 1, because
7606      the variable part of the frag (the branch offset) is one byte
7607      long.  However, we can relax a section more than once and in that
7608      case we must either set fr_subtype back to the unrelaxed state,
7609      or return the value for the appropriate branch.  */
7610   return md_relax_table[fragP->fr_subtype].rlx_length;
7611 }
7612
7613 /* Called after relax() is finished.
7614
7615    In:  Address of frag.
7616         fr_type == rs_machine_dependent.
7617         fr_subtype is what the address relaxed to.
7618
7619    Out: Any fixSs and constants are set up.
7620         Caller will turn frag into a ".space 0".  */
7621
7622 void
7623 md_convert_frag (abfd, sec, fragP)
7624      bfd *abfd ATTRIBUTE_UNUSED;
7625      segT sec ATTRIBUTE_UNUSED;
7626      fragS *fragP;
7627 {
7628   unsigned char *opcode;
7629   unsigned char *where_to_put_displacement = NULL;
7630   offsetT target_address;
7631   offsetT opcode_address;
7632   unsigned int extension = 0;
7633   offsetT displacement_from_opcode_start;
7634
7635   opcode = (unsigned char *) fragP->fr_opcode;
7636
7637   /* Address we want to reach in file space.  */
7638   target_address = S_GET_VALUE (fragP->fr_symbol) + fragP->fr_offset;
7639
7640   /* Address opcode resides at in file space.  */
7641   opcode_address = fragP->fr_address + fragP->fr_fix;
7642
7643   /* Displacement from opcode start to fill into instruction.  */
7644   displacement_from_opcode_start = target_address - opcode_address;
7645
7646   if ((fragP->fr_subtype & BIG) == 0)
7647     {
7648       /* Don't have to change opcode.  */
7649       extension = 1;            /* 1 opcode + 1 displacement  */
7650       where_to_put_displacement = &opcode[1];
7651     }
7652   else
7653     {
7654       if (no_cond_jump_promotion
7655           && TYPE_FROM_RELAX_STATE (fragP->fr_subtype) != UNCOND_JUMP)
7656         as_warn_where (fragP->fr_file, fragP->fr_line,
7657                        _("long jump required"));
7658
7659       switch (fragP->fr_subtype)
7660         {
7661         case ENCODE_RELAX_STATE (UNCOND_JUMP, BIG):
7662           extension = 4;                /* 1 opcode + 4 displacement  */
7663           opcode[0] = 0xe9;
7664           where_to_put_displacement = &opcode[1];
7665           break;
7666
7667         case ENCODE_RELAX_STATE (UNCOND_JUMP, BIG16):
7668           extension = 2;                /* 1 opcode + 2 displacement  */
7669           opcode[0] = 0xe9;
7670           where_to_put_displacement = &opcode[1];
7671           break;
7672
7673         case ENCODE_RELAX_STATE (COND_JUMP, BIG):
7674         case ENCODE_RELAX_STATE (COND_JUMP86, BIG):
7675           extension = 5;                /* 2 opcode + 4 displacement  */
7676           opcode[1] = opcode[0] + 0x10;
7677           opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
7678           where_to_put_displacement = &opcode[2];
7679           break;
7680
7681         case ENCODE_RELAX_STATE (COND_JUMP, BIG16):
7682           extension = 3;                /* 2 opcode + 2 displacement  */
7683           opcode[1] = opcode[0] + 0x10;
7684           opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
7685           where_to_put_displacement = &opcode[2];
7686           break;
7687
7688         case ENCODE_RELAX_STATE (COND_JUMP86, BIG16):
7689           extension = 4;
7690           opcode[0] ^= 1;
7691           opcode[1] = 3;
7692           opcode[2] = 0xe9;
7693           where_to_put_displacement = &opcode[3];
7694           break;
7695
7696         default:
7697           BAD_CASE (fragP->fr_subtype);
7698           break;
7699         }
7700     }
7701
7702   /* If size if less then four we are sure that the operand fits,
7703      but if it's 4, then it could be that the displacement is larger
7704      then -/+ 2GB.  */
7705   if (DISP_SIZE_FROM_RELAX_STATE (fragP->fr_subtype) == 4
7706       && object_64bit
7707       && ((addressT) (displacement_from_opcode_start - extension
7708                       + ((addressT) 1 << 31))
7709           > (((addressT) 2 << 31) - 1)))
7710     {
7711       as_bad_where (fragP->fr_file, fragP->fr_line,
7712                     _("jump target out of range"));
7713       /* Make us emit 0.  */
7714       displacement_from_opcode_start = extension;
7715     }
7716   /* Now put displacement after opcode.  */
7717   md_number_to_chars ((char *) where_to_put_displacement,
7718                       (valueT) (displacement_from_opcode_start - extension),
7719                       DISP_SIZE_FROM_RELAX_STATE (fragP->fr_subtype));
7720   fragP->fr_fix += extension;
7721 }
7722 \f
7723 /* Apply a fixup (fixS) to segment data, once it has been determined
7724    by our caller that we have all the info we need to fix it up.
7725
7726    On the 386, immediates, displacements, and data pointers are all in
7727    the same (little-endian) format, so we don't need to care about which
7728    we are handling.  */
7729
7730 void
7731 md_apply_fix (fixP, valP, seg)
7732      /* The fix we're to put in.  */
7733      fixS *fixP;
7734      /* Pointer to the value of the bits.  */
7735      valueT *valP;
7736      /* Segment fix is from.  */
7737      segT seg ATTRIBUTE_UNUSED;
7738 {
7739   char *p = fixP->fx_where + fixP->fx_frag->fr_literal;
7740   valueT value = *valP;
7741
7742 #if !defined (TE_Mach)
7743   if (fixP->fx_pcrel)
7744     {
7745       switch (fixP->fx_r_type)
7746         {
7747         default:
7748           break;
7749
7750         case BFD_RELOC_64:
7751           fixP->fx_r_type = BFD_RELOC_64_PCREL;
7752           break;
7753         case BFD_RELOC_32:
7754         case BFD_RELOC_X86_64_32S:
7755           fixP->fx_r_type = BFD_RELOC_32_PCREL;
7756           break;
7757         case BFD_RELOC_16:
7758           fixP->fx_r_type = BFD_RELOC_16_PCREL;
7759           break;
7760         case BFD_RELOC_8:
7761           fixP->fx_r_type = BFD_RELOC_8_PCREL;
7762           break;
7763         }
7764     }
7765
7766   if (fixP->fx_addsy != NULL
7767       && (fixP->fx_r_type == BFD_RELOC_32_PCREL
7768           || fixP->fx_r_type == BFD_RELOC_64_PCREL
7769           || fixP->fx_r_type == BFD_RELOC_16_PCREL
7770           || fixP->fx_r_type == BFD_RELOC_8_PCREL)
7771       && !use_rela_relocations)
7772     {
7773       /* This is a hack.  There should be a better way to handle this.
7774          This covers for the fact that bfd_install_relocation will
7775          subtract the current location (for partial_inplace, PC relative
7776          relocations); see more below.  */
7777 #ifndef OBJ_AOUT
7778       if (IS_ELF
7779 #ifdef TE_PE
7780           || OUTPUT_FLAVOR == bfd_target_coff_flavour
7781 #endif
7782           )
7783         value += fixP->fx_where + fixP->fx_frag->fr_address;
7784 #endif
7785 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7786       if (IS_ELF)
7787         {
7788           segT sym_seg = S_GET_SEGMENT (fixP->fx_addsy);
7789
7790           if ((sym_seg == seg
7791                || (symbol_section_p (fixP->fx_addsy)
7792                    && sym_seg != absolute_section))
7793               && !generic_force_reloc (fixP))
7794             {
7795               /* Yes, we add the values in twice.  This is because
7796                  bfd_install_relocation subtracts them out again.  I think
7797                  bfd_install_relocation is broken, but I don't dare change
7798                  it.  FIXME.  */
7799               value += fixP->fx_where + fixP->fx_frag->fr_address;
7800             }
7801         }
7802 #endif
7803 #if defined (OBJ_COFF) && defined (TE_PE)
7804       /* For some reason, the PE format does not store a
7805          section address offset for a PC relative symbol.  */
7806       if (S_GET_SEGMENT (fixP->fx_addsy) != seg
7807           || S_IS_WEAK (fixP->fx_addsy))
7808         value += md_pcrel_from (fixP);
7809 #endif
7810     }
7811 #if defined (OBJ_COFF) && defined (TE_PE)
7812   if (fixP->fx_addsy != NULL && S_IS_WEAK (fixP->fx_addsy))
7813     {
7814       value -= S_GET_VALUE (fixP->fx_addsy);
7815     }
7816 #endif
7817
7818   /* Fix a few things - the dynamic linker expects certain values here,
7819      and we must not disappoint it.  */
7820 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7821   if (IS_ELF && fixP->fx_addsy)
7822     switch (fixP->fx_r_type)
7823       {
7824       case BFD_RELOC_386_PLT32:
7825       case BFD_RELOC_X86_64_PLT32:
7826         /* Make the jump instruction point to the address of the operand.  At
7827            runtime we merely add the offset to the actual PLT entry.  */
7828         value = -4;
7829         break;
7830
7831       case BFD_RELOC_386_TLS_GD:
7832       case BFD_RELOC_386_TLS_LDM:
7833       case BFD_RELOC_386_TLS_IE_32:
7834       case BFD_RELOC_386_TLS_IE:
7835       case BFD_RELOC_386_TLS_GOTIE:
7836       case BFD_RELOC_386_TLS_GOTDESC:
7837       case BFD_RELOC_X86_64_TLSGD:
7838       case BFD_RELOC_X86_64_TLSLD:
7839       case BFD_RELOC_X86_64_GOTTPOFF:
7840       case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
7841         value = 0; /* Fully resolved at runtime.  No addend.  */
7842         /* Fallthrough */
7843       case BFD_RELOC_386_TLS_LE:
7844       case BFD_RELOC_386_TLS_LDO_32:
7845       case BFD_RELOC_386_TLS_LE_32:
7846       case BFD_RELOC_X86_64_DTPOFF32:
7847       case BFD_RELOC_X86_64_DTPOFF64:
7848       case BFD_RELOC_X86_64_TPOFF32:
7849       case BFD_RELOC_X86_64_TPOFF64:
7850         S_SET_THREAD_LOCAL (fixP->fx_addsy);
7851         break;
7852
7853       case BFD_RELOC_386_TLS_DESC_CALL:
7854       case BFD_RELOC_X86_64_TLSDESC_CALL:
7855         value = 0; /* Fully resolved at runtime.  No addend.  */
7856         S_SET_THREAD_LOCAL (fixP->fx_addsy);
7857         fixP->fx_done = 0;
7858         return;
7859
7860       case BFD_RELOC_386_GOT32:
7861       case BFD_RELOC_X86_64_GOT32:
7862         value = 0; /* Fully resolved at runtime.  No addend.  */
7863         break;
7864
7865       case BFD_RELOC_VTABLE_INHERIT:
7866       case BFD_RELOC_VTABLE_ENTRY:
7867         fixP->fx_done = 0;
7868         return;
7869
7870       default:
7871         break;
7872       }
7873 #endif /* defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)  */
7874   *valP = value;
7875 #endif /* !defined (TE_Mach)  */
7876
7877   /* Are we finished with this relocation now?  */
7878   if (fixP->fx_addsy == NULL)
7879     fixP->fx_done = 1;
7880 #if defined (OBJ_COFF) && defined (TE_PE)
7881   else if (fixP->fx_addsy != NULL && S_IS_WEAK (fixP->fx_addsy))
7882     {
7883       fixP->fx_done = 0;
7884       /* Remember value for tc_gen_reloc.  */
7885       fixP->fx_addnumber = value;
7886       /* Clear out the frag for now.  */
7887       value = 0;
7888     }
7889 #endif
7890   else if (use_rela_relocations)
7891     {
7892       fixP->fx_no_overflow = 1;
7893       /* Remember value for tc_gen_reloc.  */
7894       fixP->fx_addnumber = value;
7895       value = 0;
7896     }
7897
7898   md_number_to_chars (p, value, fixP->fx_size);
7899 }
7900 \f
7901 char *
7902 md_atof (int type, char *litP, int *sizeP)
7903 {
7904   /* This outputs the LITTLENUMs in REVERSE order;
7905      in accord with the bigendian 386.  */
7906   return ieee_md_atof (type, litP, sizeP, FALSE);
7907 }
7908 \f
7909 static char output_invalid_buf[sizeof (unsigned char) * 2 + 6];
7910
7911 static char *
7912 output_invalid (int c)
7913 {
7914   if (ISPRINT (c))
7915     snprintf (output_invalid_buf, sizeof (output_invalid_buf),
7916               "'%c'", c);
7917   else
7918     snprintf (output_invalid_buf, sizeof (output_invalid_buf),
7919               "(0x%x)", (unsigned char) c);
7920   return output_invalid_buf;
7921 }
7922
7923 /* REG_STRING starts *before* REGISTER_PREFIX.  */
7924
7925 static const reg_entry *
7926 parse_real_register (char *reg_string, char **end_op)
7927 {
7928   char *s = reg_string;
7929   char *p;
7930   char reg_name_given[MAX_REG_NAME_SIZE + 1];
7931   const reg_entry *r;
7932
7933   /* Skip possible REGISTER_PREFIX and possible whitespace.  */
7934   if (*s == REGISTER_PREFIX)
7935     ++s;
7936
7937   if (is_space_char (*s))
7938     ++s;
7939
7940   p = reg_name_given;
7941   while ((*p++ = register_chars[(unsigned char) *s]) != '\0')
7942     {
7943       if (p >= reg_name_given + MAX_REG_NAME_SIZE)
7944         return (const reg_entry *) NULL;
7945       s++;
7946     }
7947
7948   /* For naked regs, make sure that we are not dealing with an identifier.
7949      This prevents confusing an identifier like `eax_var' with register
7950      `eax'.  */
7951   if (allow_naked_reg && identifier_chars[(unsigned char) *s])
7952     return (const reg_entry *) NULL;
7953
7954   *end_op = s;
7955
7956   r = (const reg_entry *) hash_find (reg_hash, reg_name_given);
7957
7958   /* Handle floating point regs, allowing spaces in the (i) part.  */
7959   if (r == i386_regtab /* %st is first entry of table  */)
7960     {
7961       if (is_space_char (*s))
7962         ++s;
7963       if (*s == '(')
7964         {
7965           ++s;
7966           if (is_space_char (*s))
7967             ++s;
7968           if (*s >= '0' && *s <= '7')
7969             {
7970               int fpr = *s - '0';
7971               ++s;
7972               if (is_space_char (*s))
7973                 ++s;
7974               if (*s == ')')
7975                 {
7976                   *end_op = s + 1;
7977                   r = (const reg_entry *) hash_find (reg_hash, "st(0)");
7978                   know (r);
7979                   return r + fpr;
7980                 }
7981             }
7982           /* We have "%st(" then garbage.  */
7983           return (const reg_entry *) NULL;
7984         }
7985     }
7986
7987   if (r == NULL || allow_pseudo_reg)
7988     return r;
7989
7990   if (operand_type_all_zero (&r->reg_type))
7991     return (const reg_entry *) NULL;
7992
7993   if ((r->reg_type.bitfield.reg32
7994        || r->reg_type.bitfield.sreg3
7995        || r->reg_type.bitfield.control
7996        || r->reg_type.bitfield.debug
7997        || r->reg_type.bitfield.test)
7998       && !cpu_arch_flags.bitfield.cpui386)
7999     return (const reg_entry *) NULL;
8000
8001   if (r->reg_type.bitfield.floatreg
8002       && !cpu_arch_flags.bitfield.cpu8087
8003       && !cpu_arch_flags.bitfield.cpu287
8004       && !cpu_arch_flags.bitfield.cpu387)
8005     return (const reg_entry *) NULL;
8006
8007   if (r->reg_type.bitfield.regmmx && !cpu_arch_flags.bitfield.cpummx)
8008     return (const reg_entry *) NULL;
8009
8010   if (r->reg_type.bitfield.regxmm && !cpu_arch_flags.bitfield.cpusse)
8011     return (const reg_entry *) NULL;
8012
8013   if (r->reg_type.bitfield.regymm && !cpu_arch_flags.bitfield.cpuavx)
8014     return (const reg_entry *) NULL;
8015
8016   /* Don't allow fake index register unless allow_index_reg isn't 0. */
8017   if (!allow_index_reg
8018       && (r->reg_num == RegEiz || r->reg_num == RegRiz))
8019     return (const reg_entry *) NULL;
8020
8021   if (((r->reg_flags & (RegRex64 | RegRex))
8022        || r->reg_type.bitfield.reg64)
8023       && (!cpu_arch_flags.bitfield.cpulm
8024           || !operand_type_equal (&r->reg_type, &control))
8025       && flag_code != CODE_64BIT)
8026     return (const reg_entry *) NULL;
8027
8028   if (r->reg_type.bitfield.sreg3 && r->reg_num == RegFlat && !intel_syntax)
8029     return (const reg_entry *) NULL;
8030
8031   return r;
8032 }
8033
8034 /* REG_STRING starts *before* REGISTER_PREFIX.  */
8035
8036 static const reg_entry *
8037 parse_register (char *reg_string, char **end_op)
8038 {
8039   const reg_entry *r;
8040
8041   if (*reg_string == REGISTER_PREFIX || allow_naked_reg)
8042     r = parse_real_register (reg_string, end_op);
8043   else
8044     r = NULL;
8045   if (!r)
8046     {
8047       char *save = input_line_pointer;
8048       char c;
8049       symbolS *symbolP;
8050
8051       input_line_pointer = reg_string;
8052       c = get_symbol_end ();
8053       symbolP = symbol_find (reg_string);
8054       if (symbolP && S_GET_SEGMENT (symbolP) == reg_section)
8055         {
8056           const expressionS *e = symbol_get_value_expression (symbolP);
8057
8058           know (e->X_op == O_register);
8059           know (e->X_add_number >= 0
8060                 && (valueT) e->X_add_number < i386_regtab_size);
8061           r = i386_regtab + e->X_add_number;
8062           *end_op = input_line_pointer;
8063         }
8064       *input_line_pointer = c;
8065       input_line_pointer = save;
8066     }
8067   return r;
8068 }
8069
8070 int
8071 i386_parse_name (char *name, expressionS *e, char *nextcharP)
8072 {
8073   const reg_entry *r;
8074   char *end = input_line_pointer;
8075
8076   *end = *nextcharP;
8077   r = parse_register (name, &input_line_pointer);
8078   if (r && end <= input_line_pointer)
8079     {
8080       *nextcharP = *input_line_pointer;
8081       *input_line_pointer = 0;
8082       e->X_op = O_register;
8083       e->X_add_number = r - i386_regtab;
8084       return 1;
8085     }
8086   input_line_pointer = end;
8087   *end = 0;
8088   return intel_syntax ? i386_intel_parse_name (name, e) : 0;
8089 }
8090
8091 void
8092 md_operand (expressionS *e)
8093 {
8094   char *end;
8095   const reg_entry *r;
8096
8097   switch (*input_line_pointer)
8098     {
8099     case REGISTER_PREFIX:
8100       r = parse_real_register (input_line_pointer, &end);
8101       if (r)
8102         {
8103           e->X_op = O_register;
8104           e->X_add_number = r - i386_regtab;
8105           input_line_pointer = end;
8106         }
8107       break;
8108
8109     case '[':
8110       gas_assert (intel_syntax);
8111       end = input_line_pointer++;
8112       expression (e);
8113       if (*input_line_pointer == ']')
8114         {
8115           ++input_line_pointer;
8116           e->X_op_symbol = make_expr_symbol (e);
8117           e->X_add_symbol = NULL;
8118           e->X_add_number = 0;
8119           e->X_op = O_index;
8120         }
8121       else
8122         {
8123           e->X_op = O_absent;
8124           input_line_pointer = end;
8125         }
8126       break;
8127     }
8128 }
8129
8130 \f
8131 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8132 const char *md_shortopts = "kVQ:sqn";
8133 #else
8134 const char *md_shortopts = "qn";
8135 #endif
8136
8137 #define OPTION_32 (OPTION_MD_BASE + 0)
8138 #define OPTION_64 (OPTION_MD_BASE + 1)
8139 #define OPTION_DIVIDE (OPTION_MD_BASE + 2)
8140 #define OPTION_MARCH (OPTION_MD_BASE + 3)
8141 #define OPTION_MTUNE (OPTION_MD_BASE + 4)
8142 #define OPTION_MMNEMONIC (OPTION_MD_BASE + 5)
8143 #define OPTION_MSYNTAX (OPTION_MD_BASE + 6)
8144 #define OPTION_MINDEX_REG (OPTION_MD_BASE + 7)
8145 #define OPTION_MNAKED_REG (OPTION_MD_BASE + 8)
8146 #define OPTION_MOLD_GCC (OPTION_MD_BASE + 9)
8147 #define OPTION_MSSE2AVX (OPTION_MD_BASE + 10)
8148 #define OPTION_MSSE_CHECK (OPTION_MD_BASE + 11)
8149 #define OPTION_MAVXSCALAR (OPTION_MD_BASE + 12)
8150 #define OPTION_N32 (OPTION_MD_BASE + 13)
8151
8152 struct option md_longopts[] =
8153 {
8154   {"32", no_argument, NULL, OPTION_32},
8155 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
8156      || defined (TE_PE) || defined (TE_PEP))
8157   {"64", no_argument, NULL, OPTION_64},
8158 #endif
8159 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8160   {"n32", no_argument, NULL, OPTION_N32},
8161 #endif
8162   {"divide", no_argument, NULL, OPTION_DIVIDE},
8163   {"march", required_argument, NULL, OPTION_MARCH},
8164   {"mtune", required_argument, NULL, OPTION_MTUNE},
8165   {"mmnemonic", required_argument, NULL, OPTION_MMNEMONIC},
8166   {"msyntax", required_argument, NULL, OPTION_MSYNTAX},
8167   {"mindex-reg", no_argument, NULL, OPTION_MINDEX_REG},
8168   {"mnaked-reg", no_argument, NULL, OPTION_MNAKED_REG},
8169   {"mold-gcc", no_argument, NULL, OPTION_MOLD_GCC},
8170   {"msse2avx", no_argument, NULL, OPTION_MSSE2AVX},
8171   {"msse-check", required_argument, NULL, OPTION_MSSE_CHECK},
8172   {"mavxscalar", required_argument, NULL, OPTION_MAVXSCALAR},
8173   {NULL, no_argument, NULL, 0}
8174 };
8175 size_t md_longopts_size = sizeof (md_longopts);
8176
8177 int
8178 md_parse_option (int c, char *arg)
8179 {
8180   unsigned int j;
8181   char *arch, *next;
8182
8183   switch (c)
8184     {
8185     case 'n':
8186       optimize_align_code = 0;
8187       break;
8188
8189     case 'q':
8190       quiet_warnings = 1;
8191       break;
8192
8193 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8194       /* -Qy, -Qn: SVR4 arguments controlling whether a .comment section
8195          should be emitted or not.  FIXME: Not implemented.  */
8196     case 'Q':
8197       break;
8198
8199       /* -V: SVR4 argument to print version ID.  */
8200     case 'V':
8201       print_version_id ();
8202       break;
8203
8204       /* -k: Ignore for FreeBSD compatibility.  */
8205     case 'k':
8206       break;
8207
8208     case 's':
8209       /* -s: On i386 Solaris, this tells the native assembler to use
8210          .stab instead of .stab.excl.  We always use .stab anyhow.  */
8211       break;
8212 #endif
8213 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
8214      || defined (TE_PE) || defined (TE_PEP))
8215     case OPTION_64:
8216       {
8217         const char **list, **l;
8218
8219         list = bfd_target_list ();
8220         for (l = list; *l != NULL; l++)
8221           if (CONST_STRNEQ (*l, "elf64-x86-64")
8222               || strcmp (*l, "coff-x86-64") == 0
8223               || strcmp (*l, "pe-x86-64") == 0
8224               || strcmp (*l, "pei-x86-64") == 0)
8225             {
8226               default_arch = "x86_64";
8227               break;
8228             }
8229         if (*l == NULL)
8230           as_fatal (_("No compiled in support for x86_64"));
8231         free (list);
8232       }
8233       break;
8234 #endif
8235
8236 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8237     case OPTION_N32:
8238       if (IS_ELF)
8239         {
8240           const char **list, **l;
8241
8242           list = bfd_target_list ();
8243           for (l = list; *l != NULL; l++)
8244             if (CONST_STRNEQ (*l, "elf32-x86-64"))
8245               {
8246                 default_arch = "x86_64:32";
8247                 break;
8248               }
8249           if (*l == NULL)
8250             as_fatal (_("No compiled in support for 32bit x86_64"));
8251           free (list);
8252         }
8253       else
8254         as_fatal (_("32bit x86_64 is only supported for ELF"));
8255       break;
8256 #endif
8257
8258     case OPTION_32:
8259       default_arch = "i386";
8260       break;
8261
8262     case OPTION_DIVIDE:
8263 #ifdef SVR4_COMMENT_CHARS
8264       {
8265         char *n, *t;
8266         const char *s;
8267
8268         n = (char *) xmalloc (strlen (i386_comment_chars) + 1);
8269         t = n;
8270         for (s = i386_comment_chars; *s != '\0'; s++)
8271           if (*s != '/')
8272             *t++ = *s;
8273         *t = '\0';
8274         i386_comment_chars = n;
8275       }
8276 #endif
8277       break;
8278
8279     case OPTION_MARCH:
8280       arch = xstrdup (arg);
8281       do
8282         {
8283           if (*arch == '.')
8284             as_fatal (_("Invalid -march= option: `%s'"), arg);
8285           next = strchr (arch, '+');
8286           if (next)
8287             *next++ = '\0';
8288           for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
8289             {
8290               if (strcmp (arch, cpu_arch [j].name) == 0)
8291                 {
8292                   /* Processor.  */
8293                   if (! cpu_arch[j].flags.bitfield.cpui386)
8294                     continue;
8295
8296                   cpu_arch_name = cpu_arch[j].name;
8297                   cpu_sub_arch_name = NULL;
8298                   cpu_arch_flags = cpu_arch[j].flags;
8299                   cpu_arch_isa = cpu_arch[j].type;
8300                   cpu_arch_isa_flags = cpu_arch[j].flags;
8301                   if (!cpu_arch_tune_set)
8302                     {
8303                       cpu_arch_tune = cpu_arch_isa;
8304                       cpu_arch_tune_flags = cpu_arch_isa_flags;
8305                     }
8306                   break;
8307                 }
8308               else if (*cpu_arch [j].name == '.'
8309                        && strcmp (arch, cpu_arch [j].name + 1) == 0)
8310                 {
8311                   /* ISA entension.  */
8312                   i386_cpu_flags flags;
8313
8314                   if (!cpu_arch[j].negated)
8315                     flags = cpu_flags_or (cpu_arch_flags,
8316                                           cpu_arch[j].flags);
8317                   else
8318                     flags = cpu_flags_and_not (cpu_arch_flags,
8319                                                cpu_arch[j].flags);
8320                   if (!cpu_flags_equal (&flags, &cpu_arch_flags))
8321                     {
8322                       if (cpu_sub_arch_name)
8323                         {
8324                           char *name = cpu_sub_arch_name;
8325                           cpu_sub_arch_name = concat (name,
8326                                                       cpu_arch[j].name,
8327                                                       (const char *) NULL);
8328                           free (name);
8329                         }
8330                       else
8331                         cpu_sub_arch_name = xstrdup (cpu_arch[j].name);
8332                       cpu_arch_flags = flags;
8333                     }
8334                   break;
8335                 }
8336             }
8337
8338           if (j >= ARRAY_SIZE (cpu_arch))
8339             as_fatal (_("Invalid -march= option: `%s'"), arg);
8340
8341           arch = next;
8342         }
8343       while (next != NULL );
8344       break;
8345
8346     case OPTION_MTUNE:
8347       if (*arg == '.')
8348         as_fatal (_("Invalid -mtune= option: `%s'"), arg);
8349       for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
8350         {
8351           if (strcmp (arg, cpu_arch [j].name) == 0)
8352             {
8353               cpu_arch_tune_set = 1;
8354               cpu_arch_tune = cpu_arch [j].type;
8355               cpu_arch_tune_flags = cpu_arch[j].flags;
8356               break;
8357             }
8358         }
8359       if (j >= ARRAY_SIZE (cpu_arch))
8360         as_fatal (_("Invalid -mtune= option: `%s'"), arg);
8361       break;
8362
8363     case OPTION_MMNEMONIC:
8364       if (strcasecmp (arg, "att") == 0)
8365         intel_mnemonic = 0;
8366       else if (strcasecmp (arg, "intel") == 0)
8367         intel_mnemonic = 1;
8368       else
8369         as_fatal (_("Invalid -mmnemonic= option: `%s'"), arg);
8370       break;
8371
8372     case OPTION_MSYNTAX:
8373       if (strcasecmp (arg, "att") == 0)
8374         intel_syntax = 0;
8375       else if (strcasecmp (arg, "intel") == 0)
8376         intel_syntax = 1;
8377       else
8378         as_fatal (_("Invalid -msyntax= option: `%s'"), arg);
8379       break;
8380
8381     case OPTION_MINDEX_REG:
8382       allow_index_reg = 1;
8383       break;
8384
8385     case OPTION_MNAKED_REG:
8386       allow_naked_reg = 1;
8387       break;
8388
8389     case OPTION_MOLD_GCC:
8390       old_gcc = 1;
8391       break;
8392
8393     case OPTION_MSSE2AVX:
8394       sse2avx = 1;
8395       break;
8396
8397     case OPTION_MSSE_CHECK:
8398       if (strcasecmp (arg, "error") == 0)
8399         sse_check = sse_check_error;
8400       else if (strcasecmp (arg, "warning") == 0)
8401         sse_check = sse_check_warning;
8402       else if (strcasecmp (arg, "none") == 0)
8403         sse_check = sse_check_none;
8404       else
8405         as_fatal (_("Invalid -msse-check= option: `%s'"), arg);
8406       break;
8407
8408     case OPTION_MAVXSCALAR:
8409       if (strcasecmp (arg, "128") == 0)
8410         avxscalar = vex128;
8411       else if (strcasecmp (arg, "256") == 0)
8412         avxscalar = vex256;
8413       else
8414         as_fatal (_("Invalid -mavxscalar= option: `%s'"), arg);
8415       break;
8416
8417     default:
8418       return 0;
8419     }
8420   return 1;
8421 }
8422
8423 #define MESSAGE_TEMPLATE \
8424 "                                                                                "
8425
8426 static void
8427 show_arch (FILE *stream, int ext, int check)
8428 {
8429   static char message[] = MESSAGE_TEMPLATE;
8430   char *start = message + 27;
8431   char *p;
8432   int size = sizeof (MESSAGE_TEMPLATE);
8433   int left;
8434   const char *name;
8435   int len;
8436   unsigned int j;
8437
8438   p = start;
8439   left = size - (start - message);
8440   for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
8441     {
8442       /* Should it be skipped?  */
8443       if (cpu_arch [j].skip)
8444         continue;
8445
8446       name = cpu_arch [j].name;
8447       len = cpu_arch [j].len;
8448       if (*name == '.')
8449         {
8450           /* It is an extension.  Skip if we aren't asked to show it.  */
8451           if (ext)
8452             {
8453               name++;
8454               len--;
8455             }
8456           else
8457             continue;
8458         }
8459       else if (ext)
8460         {
8461           /* It is an processor.  Skip if we show only extension.  */
8462           continue;
8463         }
8464       else if (check && ! cpu_arch[j].flags.bitfield.cpui386)
8465         {
8466           /* It is an impossible processor - skip.  */
8467           continue;
8468         }
8469
8470       /* Reserve 2 spaces for ", " or ",\0" */
8471       left -= len + 2;
8472
8473       /* Check if there is any room.  */
8474       if (left >= 0)
8475         {
8476           if (p != start)
8477             {
8478               *p++ = ',';
8479               *p++ = ' ';
8480             }
8481           p = mempcpy (p, name, len);
8482         }
8483       else
8484         {
8485           /* Output the current message now and start a new one.  */
8486           *p++ = ',';
8487           *p = '\0';
8488           fprintf (stream, "%s\n", message);
8489           p = start;
8490           left = size - (start - message) - len - 2;
8491           
8492           gas_assert (left >= 0);
8493
8494           p = mempcpy (p, name, len);
8495         }
8496     }
8497
8498   *p = '\0';
8499   fprintf (stream, "%s\n", message);
8500 }
8501
8502 void
8503 md_show_usage (FILE *stream)
8504 {
8505 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8506   fprintf (stream, _("\
8507   -Q                      ignored\n\
8508   -V                      print assembler version number\n\
8509   -k                      ignored\n"));
8510 #endif
8511   fprintf (stream, _("\
8512   -n                      Do not optimize code alignment\n\
8513   -q                      quieten some warnings\n"));
8514 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8515   fprintf (stream, _("\
8516   -s                      ignored\n"));
8517 #endif
8518 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
8519      || defined (TE_PE) || defined (TE_PEP))
8520   fprintf (stream, _("\
8521   --32/--64/--n32         generate 32bit/64bit/n32bit code\n"));
8522 #endif
8523 #ifdef SVR4_COMMENT_CHARS
8524   fprintf (stream, _("\
8525   --divide                do not treat `/' as a comment character\n"));
8526 #else
8527   fprintf (stream, _("\
8528   --divide                ignored\n"));
8529 #endif
8530   fprintf (stream, _("\
8531   -march=CPU[,+EXTENSION...]\n\
8532                           generate code for CPU and EXTENSION, CPU is one of:\n"));
8533   show_arch (stream, 0, 1);
8534   fprintf (stream, _("\
8535                           EXTENSION is combination of:\n"));
8536   show_arch (stream, 1, 0);
8537   fprintf (stream, _("\
8538   -mtune=CPU              optimize for CPU, CPU is one of:\n"));
8539   show_arch (stream, 0, 0);
8540   fprintf (stream, _("\
8541   -msse2avx               encode SSE instructions with VEX prefix\n"));
8542   fprintf (stream, _("\
8543   -msse-check=[none|error|warning]\n\
8544                           check SSE instructions\n"));
8545   fprintf (stream, _("\
8546   -mavxscalar=[128|256]   encode scalar AVX instructions with specific vector\n\
8547                            length\n"));
8548   fprintf (stream, _("\
8549   -mmnemonic=[att|intel]  use AT&T/Intel mnemonic\n"));
8550   fprintf (stream, _("\
8551   -msyntax=[att|intel]    use AT&T/Intel syntax\n"));
8552   fprintf (stream, _("\
8553   -mindex-reg             support pseudo index registers\n"));
8554   fprintf (stream, _("\
8555   -mnaked-reg             don't require `%%' prefix for registers\n"));
8556   fprintf (stream, _("\
8557   -mold-gcc               support old (<= 2.8.1) versions of gcc\n"));
8558 }
8559
8560 #if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \
8561      || defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
8562      || defined (TE_PE) || defined (TE_PEP) || defined (OBJ_MACH_O))
8563
8564 /* Pick the target format to use.  */
8565
8566 const char *
8567 i386_target_format (void)
8568 {
8569   if (!strncmp (default_arch, "x86_64", 6))
8570     {
8571       update_code_flag (CODE_64BIT, 1);
8572       if (default_arch[6] == '\0')
8573         x86_elf_abi = X86_64_LP64_ABI;
8574       else
8575         x86_elf_abi = X86_64_ILP32_ABI;
8576     }
8577   else if (!strcmp (default_arch, "i386"))
8578     update_code_flag (CODE_32BIT, 1);
8579   else
8580     as_fatal (_("Unknown architecture"));
8581
8582   if (cpu_flags_all_zero (&cpu_arch_isa_flags))
8583     cpu_arch_isa_flags = cpu_arch[flag_code == CODE_64BIT].flags;
8584   if (cpu_flags_all_zero (&cpu_arch_tune_flags))
8585     cpu_arch_tune_flags = cpu_arch[flag_code == CODE_64BIT].flags;
8586
8587   switch (OUTPUT_FLAVOR)
8588     {
8589 #if defined (OBJ_MAYBE_AOUT) || defined (OBJ_AOUT)
8590     case bfd_target_aout_flavour:
8591       return AOUT_TARGET_FORMAT;
8592 #endif
8593 #if defined (OBJ_MAYBE_COFF) || defined (OBJ_COFF)
8594 # if defined (TE_PE) || defined (TE_PEP)
8595     case bfd_target_coff_flavour:
8596       return flag_code == CODE_64BIT ? "pe-x86-64" : "pe-i386";
8597 # elif defined (TE_GO32)
8598     case bfd_target_coff_flavour:
8599       return "coff-go32";
8600 # else
8601     case bfd_target_coff_flavour:
8602       return "coff-i386";
8603 # endif
8604 #endif
8605 #if defined (OBJ_MAYBE_ELF) || defined (OBJ_ELF)
8606     case bfd_target_elf_flavour:
8607       {
8608         const char *format;
8609
8610         switch (x86_elf_abi)
8611           {
8612           default:
8613             format = ELF_TARGET_FORMAT;
8614             break;
8615           case X86_64_LP64_ABI:
8616             use_rela_relocations = 1;
8617             object_64bit = 1;
8618             format = ELF_TARGET_FORMAT64;
8619             break;
8620           case X86_64_ILP32_ABI:
8621             use_rela_relocations = 1;
8622             object_64bit = 1;
8623             format = ELF_TARGET_FORMAT32;
8624             break;
8625           }
8626         if (cpu_arch_isa == PROCESSOR_L1OM)
8627           {
8628             if (x86_elf_abi != X86_64_LP64_ABI)
8629               as_fatal (_("Intel L1OM is 64bit only"));
8630             return ELF_TARGET_L1OM_FORMAT;
8631           }
8632         else
8633           return format;
8634       }
8635 #endif
8636 #if defined (OBJ_MACH_O)
8637     case bfd_target_mach_o_flavour:
8638       return flag_code == CODE_64BIT ? "mach-o-x86-64" : "mach-o-i386";
8639 #endif
8640     default:
8641       abort ();
8642       return NULL;
8643     }
8644 }
8645
8646 #endif /* OBJ_MAYBE_ more than one  */
8647
8648 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF))
8649 void
8650 i386_elf_emit_arch_note (void)
8651 {
8652   if (IS_ELF && cpu_arch_name != NULL)
8653     {
8654       char *p;
8655       asection *seg = now_seg;
8656       subsegT subseg = now_subseg;
8657       Elf_Internal_Note i_note;
8658       Elf_External_Note e_note;
8659       asection *note_secp;
8660       int len;
8661
8662       /* Create the .note section.  */
8663       note_secp = subseg_new (".note", 0);
8664       bfd_set_section_flags (stdoutput,
8665                              note_secp,
8666                              SEC_HAS_CONTENTS | SEC_READONLY);
8667
8668       /* Process the arch string.  */
8669       len = strlen (cpu_arch_name);
8670
8671       i_note.namesz = len + 1;
8672       i_note.descsz = 0;
8673       i_note.type = NT_ARCH;
8674       p = frag_more (sizeof (e_note.namesz));
8675       md_number_to_chars (p, (valueT) i_note.namesz, sizeof (e_note.namesz));
8676       p = frag_more (sizeof (e_note.descsz));
8677       md_number_to_chars (p, (valueT) i_note.descsz, sizeof (e_note.descsz));
8678       p = frag_more (sizeof (e_note.type));
8679       md_number_to_chars (p, (valueT) i_note.type, sizeof (e_note.type));
8680       p = frag_more (len + 1);
8681       strcpy (p, cpu_arch_name);
8682
8683       frag_align (2, 0, 0);
8684
8685       subseg_set (seg, subseg);
8686     }
8687 }
8688 #endif
8689 \f
8690 symbolS *
8691 md_undefined_symbol (name)
8692      char *name;
8693 {
8694   if (name[0] == GLOBAL_OFFSET_TABLE_NAME[0]
8695       && name[1] == GLOBAL_OFFSET_TABLE_NAME[1]
8696       && name[2] == GLOBAL_OFFSET_TABLE_NAME[2]
8697       && strcmp (name, GLOBAL_OFFSET_TABLE_NAME) == 0)
8698     {
8699       if (!GOT_symbol)
8700         {
8701           if (symbol_find (name))
8702             as_bad (_("GOT already in symbol table"));
8703           GOT_symbol = symbol_new (name, undefined_section,
8704                                    (valueT) 0, &zero_address_frag);
8705         };
8706       return GOT_symbol;
8707     }
8708   return 0;
8709 }
8710
8711 /* Round up a section size to the appropriate boundary.  */
8712
8713 valueT
8714 md_section_align (segment, size)
8715      segT segment ATTRIBUTE_UNUSED;
8716      valueT size;
8717 {
8718 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
8719   if (OUTPUT_FLAVOR == bfd_target_aout_flavour)
8720     {
8721       /* For a.out, force the section size to be aligned.  If we don't do
8722          this, BFD will align it for us, but it will not write out the
8723          final bytes of the section.  This may be a bug in BFD, but it is
8724          easier to fix it here since that is how the other a.out targets
8725          work.  */
8726       int align;
8727
8728       align = bfd_get_section_alignment (stdoutput, segment);
8729       size = ((size + (1 << align) - 1) & ((valueT) -1 << align));
8730     }
8731 #endif
8732
8733   return size;
8734 }
8735
8736 /* On the i386, PC-relative offsets are relative to the start of the
8737    next instruction.  That is, the address of the offset, plus its
8738    size, since the offset is always the last part of the insn.  */
8739
8740 long
8741 md_pcrel_from (fixS *fixP)
8742 {
8743   return fixP->fx_size + fixP->fx_where + fixP->fx_frag->fr_address;
8744 }
8745
8746 #ifndef I386COFF
8747
8748 static void
8749 s_bss (int ignore ATTRIBUTE_UNUSED)
8750 {
8751   int temp;
8752
8753 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8754   if (IS_ELF)
8755     obj_elf_section_change_hook ();
8756 #endif
8757   temp = get_absolute_expression ();
8758   subseg_set (bss_section, (subsegT) temp);
8759   demand_empty_rest_of_line ();
8760 }
8761
8762 #endif
8763
8764 void
8765 i386_validate_fix (fixS *fixp)
8766 {
8767   if (fixp->fx_subsy && fixp->fx_subsy == GOT_symbol)
8768     {
8769       if (fixp->fx_r_type == BFD_RELOC_32_PCREL)
8770         {
8771           if (!object_64bit)
8772             abort ();
8773           fixp->fx_r_type = BFD_RELOC_X86_64_GOTPCREL;
8774         }
8775       else
8776         {
8777           if (!object_64bit)
8778             fixp->fx_r_type = BFD_RELOC_386_GOTOFF;
8779           else
8780             fixp->fx_r_type = BFD_RELOC_X86_64_GOTOFF64;
8781         }
8782       fixp->fx_subsy = 0;
8783     }
8784 }
8785
8786 arelent *
8787 tc_gen_reloc (section, fixp)
8788      asection *section ATTRIBUTE_UNUSED;
8789      fixS *fixp;
8790 {
8791   arelent *rel;
8792   bfd_reloc_code_real_type code;
8793
8794   switch (fixp->fx_r_type)
8795     {
8796     case BFD_RELOC_X86_64_PLT32:
8797     case BFD_RELOC_X86_64_GOT32:
8798     case BFD_RELOC_X86_64_GOTPCREL:
8799     case BFD_RELOC_386_PLT32:
8800     case BFD_RELOC_386_GOT32:
8801     case BFD_RELOC_386_GOTOFF:
8802     case BFD_RELOC_386_GOTPC:
8803     case BFD_RELOC_386_TLS_GD:
8804     case BFD_RELOC_386_TLS_LDM:
8805     case BFD_RELOC_386_TLS_LDO_32:
8806     case BFD_RELOC_386_TLS_IE_32:
8807     case BFD_RELOC_386_TLS_IE:
8808     case BFD_RELOC_386_TLS_GOTIE:
8809     case BFD_RELOC_386_TLS_LE_32:
8810     case BFD_RELOC_386_TLS_LE:
8811     case BFD_RELOC_386_TLS_GOTDESC:
8812     case BFD_RELOC_386_TLS_DESC_CALL:
8813     case BFD_RELOC_X86_64_TLSGD:
8814     case BFD_RELOC_X86_64_TLSLD:
8815     case BFD_RELOC_X86_64_DTPOFF32:
8816     case BFD_RELOC_X86_64_DTPOFF64:
8817     case BFD_RELOC_X86_64_GOTTPOFF:
8818     case BFD_RELOC_X86_64_TPOFF32:
8819     case BFD_RELOC_X86_64_TPOFF64:
8820     case BFD_RELOC_X86_64_GOTOFF64:
8821     case BFD_RELOC_X86_64_GOTPC32:
8822     case BFD_RELOC_X86_64_GOT64:
8823     case BFD_RELOC_X86_64_GOTPCREL64:
8824     case BFD_RELOC_X86_64_GOTPC64:
8825     case BFD_RELOC_X86_64_GOTPLT64:
8826     case BFD_RELOC_X86_64_PLTOFF64:
8827     case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
8828     case BFD_RELOC_X86_64_TLSDESC_CALL:
8829     case BFD_RELOC_RVA:
8830     case BFD_RELOC_VTABLE_ENTRY:
8831     case BFD_RELOC_VTABLE_INHERIT:
8832 #ifdef TE_PE
8833     case BFD_RELOC_32_SECREL:
8834 #endif
8835       code = fixp->fx_r_type;
8836       break;
8837     case BFD_RELOC_X86_64_32S:
8838       if (!fixp->fx_pcrel)
8839         {
8840           /* Don't turn BFD_RELOC_X86_64_32S into BFD_RELOC_32.  */
8841           code = fixp->fx_r_type;
8842           break;
8843         }
8844     default:
8845       if (fixp->fx_pcrel)
8846         {
8847           switch (fixp->fx_size)
8848             {
8849             default:
8850               as_bad_where (fixp->fx_file, fixp->fx_line,
8851                             _("can not do %d byte pc-relative relocation"),
8852                             fixp->fx_size);
8853               code = BFD_RELOC_32_PCREL;
8854               break;
8855             case 1: code = BFD_RELOC_8_PCREL;  break;
8856             case 2: code = BFD_RELOC_16_PCREL; break;
8857             case 4: code = BFD_RELOC_32_PCREL; break;
8858 #ifdef BFD64
8859             case 8: code = BFD_RELOC_64_PCREL; break;
8860 #endif
8861             }
8862         }
8863       else
8864         {
8865           switch (fixp->fx_size)
8866             {
8867             default:
8868               as_bad_where (fixp->fx_file, fixp->fx_line,
8869                             _("can not do %d byte relocation"),
8870                             fixp->fx_size);
8871               code = BFD_RELOC_32;
8872               break;
8873             case 1: code = BFD_RELOC_8;  break;
8874             case 2: code = BFD_RELOC_16; break;
8875             case 4: code = BFD_RELOC_32; break;
8876 #ifdef BFD64
8877             case 8: code = BFD_RELOC_64; break;
8878 #endif
8879             }
8880         }
8881       break;
8882     }
8883
8884   if ((code == BFD_RELOC_32
8885        || code == BFD_RELOC_32_PCREL
8886        || code == BFD_RELOC_X86_64_32S)
8887       && GOT_symbol
8888       && fixp->fx_addsy == GOT_symbol)
8889     {
8890       if (!object_64bit)
8891         code = BFD_RELOC_386_GOTPC;
8892       else
8893         code = BFD_RELOC_X86_64_GOTPC32;
8894     }
8895   if ((code == BFD_RELOC_64 || code == BFD_RELOC_64_PCREL)
8896       && GOT_symbol
8897       && fixp->fx_addsy == GOT_symbol)
8898     {
8899       code = BFD_RELOC_X86_64_GOTPC64;
8900     }
8901
8902   rel = (arelent *) xmalloc (sizeof (arelent));
8903   rel->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
8904   *rel->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
8905
8906   rel->address = fixp->fx_frag->fr_address + fixp->fx_where;
8907
8908   if (!use_rela_relocations)
8909     {
8910       /* HACK: Since i386 ELF uses Rel instead of Rela, encode the
8911          vtable entry to be used in the relocation's section offset.  */
8912       if (fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
8913         rel->address = fixp->fx_offset;
8914 #if defined (OBJ_COFF) && defined (TE_PE)
8915       else if (fixp->fx_addsy && S_IS_WEAK (fixp->fx_addsy))
8916         rel->addend = fixp->fx_addnumber - (S_GET_VALUE (fixp->fx_addsy) * 2);
8917       else
8918 #endif
8919       rel->addend = 0;
8920     }
8921   /* Use the rela in 64bit mode.  */
8922   else
8923     {
8924       if (!fixp->fx_pcrel)
8925         rel->addend = fixp->fx_offset;
8926       else
8927         switch (code)
8928           {
8929           case BFD_RELOC_X86_64_PLT32:
8930           case BFD_RELOC_X86_64_GOT32:
8931           case BFD_RELOC_X86_64_GOTPCREL:
8932           case BFD_RELOC_X86_64_TLSGD:
8933           case BFD_RELOC_X86_64_TLSLD:
8934           case BFD_RELOC_X86_64_GOTTPOFF:
8935           case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
8936           case BFD_RELOC_X86_64_TLSDESC_CALL:
8937             rel->addend = fixp->fx_offset - fixp->fx_size;
8938             break;
8939           default:
8940             rel->addend = (section->vma
8941                            - fixp->fx_size
8942                            + fixp->fx_addnumber
8943                            + md_pcrel_from (fixp));
8944             break;
8945           }
8946     }
8947
8948   rel->howto = bfd_reloc_type_lookup (stdoutput, code);
8949   if (rel->howto == NULL)
8950     {
8951       as_bad_where (fixp->fx_file, fixp->fx_line,
8952                     _("cannot represent relocation type %s"),
8953                     bfd_get_reloc_code_name (code));
8954       /* Set howto to a garbage value so that we can keep going.  */
8955       rel->howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_32);
8956       gas_assert (rel->howto != NULL);
8957     }
8958
8959   return rel;
8960 }
8961
8962 #include "tc-i386-intel.c"
8963
8964 void
8965 tc_x86_parse_to_dw2regnum (expressionS *exp)
8966 {
8967   int saved_naked_reg;
8968   char saved_register_dot;
8969
8970   saved_naked_reg = allow_naked_reg;
8971   allow_naked_reg = 1;
8972   saved_register_dot = register_chars['.'];
8973   register_chars['.'] = '.';
8974   allow_pseudo_reg = 1;
8975   expression_and_evaluate (exp);
8976   allow_pseudo_reg = 0;
8977   register_chars['.'] = saved_register_dot;
8978   allow_naked_reg = saved_naked_reg;
8979
8980   if (exp->X_op == O_register && exp->X_add_number >= 0)
8981     {
8982       if ((addressT) exp->X_add_number < i386_regtab_size)
8983         {
8984           exp->X_op = O_constant;
8985           exp->X_add_number = i386_regtab[exp->X_add_number]
8986                               .dw2_regnum[flag_code >> 1];
8987         }
8988       else
8989         exp->X_op = O_illegal;
8990     }
8991 }
8992
8993 void
8994 tc_x86_frame_initial_instructions (void)
8995 {
8996   static unsigned int sp_regno[2];
8997
8998   if (!sp_regno[flag_code >> 1])
8999     {
9000       char *saved_input = input_line_pointer;
9001       char sp[][4] = {"esp", "rsp"};
9002       expressionS exp;
9003
9004       input_line_pointer = sp[flag_code >> 1];
9005       tc_x86_parse_to_dw2regnum (&exp);
9006       gas_assert (exp.X_op == O_constant);
9007       sp_regno[flag_code >> 1] = exp.X_add_number;
9008       input_line_pointer = saved_input;
9009     }
9010
9011   cfi_add_CFA_def_cfa (sp_regno[flag_code >> 1], -x86_cie_data_alignment);
9012   cfi_add_CFA_offset (x86_dwarf2_return_column, x86_cie_data_alignment);
9013 }
9014
9015 int
9016 i386_elf_section_type (const char *str, size_t len)
9017 {
9018   if (flag_code == CODE_64BIT
9019       && len == sizeof ("unwind") - 1
9020       && strncmp (str, "unwind", 6) == 0)
9021     return SHT_X86_64_UNWIND;
9022
9023   return -1;
9024 }
9025
9026 #ifdef TE_SOLARIS
9027 void
9028 i386_solaris_fix_up_eh_frame (segT sec)
9029 {
9030   if (flag_code == CODE_64BIT)
9031     elf_section_type (sec) = SHT_X86_64_UNWIND;
9032 }
9033 #endif
9034
9035 #ifdef TE_PE
9036 void
9037 tc_pe_dwarf2_emit_offset (symbolS *symbol, unsigned int size)
9038 {
9039   expressionS exp;
9040
9041   exp.X_op = O_secrel;
9042   exp.X_add_symbol = symbol;
9043   exp.X_add_number = 0;
9044   emit_expr (&exp, size);
9045 }
9046 #endif
9047
9048 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
9049 /* For ELF on x86-64, add support for SHF_X86_64_LARGE.  */
9050
9051 bfd_vma
9052 x86_64_section_letter (int letter, char **ptr_msg)
9053 {
9054   if (flag_code == CODE_64BIT)
9055     {
9056       if (letter == 'l')
9057         return SHF_X86_64_LARGE;
9058
9059       *ptr_msg = _("bad .section directive: want a,l,w,x,M,S,G,T in string");
9060     }
9061   else
9062     *ptr_msg = _("bad .section directive: want a,w,x,M,S,G,T in string");
9063   return -1;
9064 }
9065
9066 bfd_vma
9067 x86_64_section_word (char *str, size_t len)
9068 {
9069   if (len == 5 && flag_code == CODE_64BIT && CONST_STRNEQ (str, "large"))
9070     return SHF_X86_64_LARGE;
9071
9072   return -1;
9073 }
9074
9075 static void
9076 handle_large_common (int small ATTRIBUTE_UNUSED)
9077 {
9078   if (flag_code != CODE_64BIT)
9079     {
9080       s_comm_internal (0, elf_common_parse);
9081       as_warn (_(".largecomm supported only in 64bit mode, producing .comm"));
9082     }
9083   else
9084     {
9085       static segT lbss_section;
9086       asection *saved_com_section_ptr = elf_com_section_ptr;
9087       asection *saved_bss_section = bss_section;
9088
9089       if (lbss_section == NULL)
9090         {
9091           flagword applicable;
9092           segT seg = now_seg;
9093           subsegT subseg = now_subseg;
9094
9095           /* The .lbss section is for local .largecomm symbols.  */
9096           lbss_section = subseg_new (".lbss", 0);
9097           applicable = bfd_applicable_section_flags (stdoutput);
9098           bfd_set_section_flags (stdoutput, lbss_section,
9099                                  applicable & SEC_ALLOC);
9100           seg_info (lbss_section)->bss = 1;
9101
9102           subseg_set (seg, subseg);
9103         }
9104
9105       elf_com_section_ptr = &_bfd_elf_large_com_section;
9106       bss_section = lbss_section;
9107
9108       s_comm_internal (0, elf_common_parse);
9109
9110       elf_com_section_ptr = saved_com_section_ptr;
9111       bss_section = saved_bss_section;
9112     }
9113 }
9114 #endif /* OBJ_ELF || OBJ_MAYBE_ELF */