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