OSDN Git Service

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