gas/
[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 ^= 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               found_reverse_match = t->opcode_modifier & (D | FloatDR);
2661             }
2662           else
2663             {
2664               /* Found a forward 2 operand match here.  */
2665               switch (t->operands)
2666                 {
2667                 case 4:
2668                   overlap3 = i.types[3] & operand_types[3];
2669                 case 3:
2670                   overlap2 = i.types[2] & operand_types[2];
2671                   break;
2672                 }
2673
2674               switch (t->operands)
2675                 {
2676                 case 4:
2677                   if (!MATCH (overlap3, i.types[3], operand_types[3])
2678                       || !CONSISTENT_REGISTER_MATCH (overlap2,
2679                                                      i.types[2],
2680                                                      operand_types[2],
2681                                                      overlap3,
2682                                                      i.types[3],
2683                                                      operand_types[3]))
2684                     continue;
2685                 case 3:
2686                   /* Here we make use of the fact that there are no
2687                      reverse match 3 operand instructions, and all 3
2688                      operand instructions only need to be checked for
2689                      register consistency between operands 2 and 3.  */
2690                   if (!MATCH (overlap2, i.types[2], operand_types[2])
2691                       || !CONSISTENT_REGISTER_MATCH (overlap1,
2692                                                      i.types[1],
2693                                                      operand_types[1],
2694                                                      overlap2,
2695                                                      i.types[2],
2696                                                      operand_types[2]))
2697                     continue;
2698                   break;
2699                 }
2700             }
2701           /* Found either forward/reverse 2, 3 or 4 operand match here:
2702              slip through to break.  */
2703         }
2704       if (t->cpu_flags & ~cpu_arch_flags)
2705         {
2706           found_reverse_match = 0;
2707           continue;
2708         }
2709       /* We've found a match; break out of loop.  */
2710       break;
2711     }
2712
2713   if (t == current_templates->end)
2714     {
2715       /* We found no match.  */
2716       as_bad (_("suffix or operands invalid for `%s'"),
2717               current_templates->start->name);
2718       return 0;
2719     }
2720
2721   if (!quiet_warnings)
2722     {
2723       if (!intel_syntax
2724           && ((i.types[0] & JumpAbsolute)
2725               != (operand_types[0] & JumpAbsolute)))
2726         {
2727           as_warn (_("indirect %s without `*'"), t->name);
2728         }
2729
2730       if ((t->opcode_modifier & (IsPrefix | IgnoreSize))
2731           == (IsPrefix | IgnoreSize))
2732         {
2733           /* Warn them that a data or address size prefix doesn't
2734              affect assembly of the next line of code.  */
2735           as_warn (_("stand-alone `%s' prefix"), t->name);
2736         }
2737     }
2738
2739   /* Copy the template we found.  */
2740   i.tm = *t;
2741
2742   if (addr_prefix_disp != -1)
2743     i.tm.operand_types[addr_prefix_disp]
2744       = operand_types[addr_prefix_disp];
2745
2746   if (found_reverse_match)
2747     {
2748       /* If we found a reverse match we must alter the opcode
2749          direction bit.  found_reverse_match holds bits to change
2750          (different for int & float insns).  */
2751
2752       i.tm.base_opcode ^= found_reverse_match;
2753
2754       i.tm.operand_types[0] = operand_types[1];
2755       i.tm.operand_types[1] = operand_types[0];
2756     }
2757
2758   return 1;
2759 }
2760
2761 static int
2762 check_string (void)
2763 {
2764   int mem_op = (i.types[0] & AnyMem) ? 0 : 1;
2765   if ((i.tm.operand_types[mem_op] & EsSeg) != 0)
2766     {
2767       if (i.seg[0] != NULL && i.seg[0] != &es)
2768         {
2769           as_bad (_("`%s' operand %d must use `%%es' segment"),
2770                   i.tm.name,
2771                   mem_op + 1);
2772           return 0;
2773         }
2774       /* There's only ever one segment override allowed per instruction.
2775          This instruction possibly has a legal segment override on the
2776          second operand, so copy the segment to where non-string
2777          instructions store it, allowing common code.  */
2778       i.seg[0] = i.seg[1];
2779     }
2780   else if ((i.tm.operand_types[mem_op + 1] & EsSeg) != 0)
2781     {
2782       if (i.seg[1] != NULL && i.seg[1] != &es)
2783         {
2784           as_bad (_("`%s' operand %d must use `%%es' segment"),
2785                   i.tm.name,
2786                   mem_op + 2);
2787           return 0;
2788         }
2789     }
2790   return 1;
2791 }
2792
2793 static int
2794 process_suffix (void)
2795 {
2796   /* If matched instruction specifies an explicit instruction mnemonic
2797      suffix, use it.  */
2798   if (i.tm.opcode_modifier & (Size16 | Size32 | Size64))
2799     {
2800       if (i.tm.opcode_modifier & Size16)
2801         i.suffix = WORD_MNEM_SUFFIX;
2802       else if (i.tm.opcode_modifier & Size64)
2803         i.suffix = QWORD_MNEM_SUFFIX;
2804       else
2805         i.suffix = LONG_MNEM_SUFFIX;
2806     }
2807   else if (i.reg_operands)
2808     {
2809       /* If there's no instruction mnemonic suffix we try to invent one
2810          based on register operands.  */
2811       if (!i.suffix)
2812         {
2813           /* We take i.suffix from the last register operand specified,
2814              Destination register type is more significant than source
2815              register type.  */
2816           int op;
2817
2818           for (op = i.operands; --op >= 0;)
2819             if ((i.types[op] & Reg)
2820                 && !(i.tm.operand_types[op] & InOutPortReg))
2821               {
2822                 i.suffix = ((i.types[op] & Reg8) ? BYTE_MNEM_SUFFIX :
2823                             (i.types[op] & Reg16) ? WORD_MNEM_SUFFIX :
2824                             (i.types[op] & Reg64) ? QWORD_MNEM_SUFFIX :
2825                             LONG_MNEM_SUFFIX);
2826                 break;
2827               }
2828         }
2829       else if (i.suffix == BYTE_MNEM_SUFFIX)
2830         {
2831           if (!check_byte_reg ())
2832             return 0;
2833         }
2834       else if (i.suffix == LONG_MNEM_SUFFIX)
2835         {
2836           if (!check_long_reg ())
2837             return 0;
2838         }
2839       else if (i.suffix == QWORD_MNEM_SUFFIX)
2840         {
2841           if (!check_qword_reg ())
2842             return 0;
2843         }
2844       else if (i.suffix == WORD_MNEM_SUFFIX)
2845         {
2846           if (!check_word_reg ())
2847             return 0;
2848         }
2849       else if (intel_syntax && (i.tm.opcode_modifier & IgnoreSize))
2850         /* Do nothing if the instruction is going to ignore the prefix.  */
2851         ;
2852       else
2853         abort ();
2854     }
2855   else if ((i.tm.opcode_modifier & DefaultSize)
2856            && !i.suffix
2857            /* exclude fldenv/frstor/fsave/fstenv */
2858            && (i.tm.opcode_modifier & No_sSuf))
2859     {
2860       i.suffix = stackop_size;
2861     }
2862   else if (intel_syntax
2863            && !i.suffix
2864            && ((i.tm.operand_types[0] & JumpAbsolute)
2865                || (i.tm.opcode_modifier & (JumpByte|JumpInterSegment))
2866                || (i.tm.base_opcode == 0x0f01 /* [ls][gi]dt */
2867                    && i.tm.extension_opcode <= 3)))
2868     {
2869       switch (flag_code)
2870         {
2871         case CODE_64BIT:
2872           if (!(i.tm.opcode_modifier & No_qSuf))
2873             {
2874               i.suffix = QWORD_MNEM_SUFFIX;
2875               break;
2876             }
2877         case CODE_32BIT:
2878           if (!(i.tm.opcode_modifier & No_lSuf))
2879             i.suffix = LONG_MNEM_SUFFIX;
2880           break;
2881         case CODE_16BIT:
2882           if (!(i.tm.opcode_modifier & No_wSuf))
2883             i.suffix = WORD_MNEM_SUFFIX;
2884           break;
2885         }
2886     }
2887
2888   if (!i.suffix)
2889     {
2890       if (!intel_syntax)
2891         {
2892           if (i.tm.opcode_modifier & W)
2893             {
2894               as_bad (_("no instruction mnemonic suffix given and "
2895                         "no register operands; can't size instruction"));
2896               return 0;
2897             }
2898         }
2899       else
2900         {
2901           unsigned int suffixes = (~i.tm.opcode_modifier
2902                                    & (No_bSuf
2903                                       | No_wSuf
2904                                       | No_lSuf
2905                                       | No_sSuf
2906                                       | No_xSuf
2907                                       | No_qSuf));
2908
2909           if ((i.tm.opcode_modifier & W)
2910               || ((suffixes & (suffixes - 1))
2911                   && !(i.tm.opcode_modifier & (DefaultSize | IgnoreSize))))
2912             {
2913               as_bad (_("ambiguous operand size for `%s'"), i.tm.name);
2914               return 0;
2915             }
2916         }
2917     }
2918
2919   /* Change the opcode based on the operand size given by i.suffix;
2920      We don't need to change things for byte insns.  */
2921
2922   if (i.suffix && i.suffix != BYTE_MNEM_SUFFIX)
2923     {
2924       /* It's not a byte, select word/dword operation.  */
2925       if (i.tm.opcode_modifier & W)
2926         {
2927           if (i.tm.opcode_modifier & ShortForm)
2928             i.tm.base_opcode |= 8;
2929           else
2930             i.tm.base_opcode |= 1;
2931         }
2932
2933       /* Now select between word & dword operations via the operand
2934          size prefix, except for instructions that will ignore this
2935          prefix anyway.  */
2936       if (i.tm.base_opcode == 0x0f01 && i.tm.extension_opcode == 0xc8)
2937         {
2938           /* monitor in SSE3 is a very special case. The default size
2939              of AX is the size of mode. The address size override
2940              prefix will change the size of AX.  */
2941           if (i.op->regs[0].reg_type &
2942               (flag_code == CODE_32BIT ? Reg16 : Reg32))
2943             if (!add_prefix (ADDR_PREFIX_OPCODE))
2944               return 0;
2945         }
2946       else if (i.suffix != QWORD_MNEM_SUFFIX
2947                && i.suffix != LONG_DOUBLE_MNEM_SUFFIX
2948                && !(i.tm.opcode_modifier & (IgnoreSize | FloatMF))
2949                && ((i.suffix == LONG_MNEM_SUFFIX) == (flag_code == CODE_16BIT)
2950                    || (flag_code == CODE_64BIT
2951                        && (i.tm.opcode_modifier & JumpByte))))
2952         {
2953           unsigned int prefix = DATA_PREFIX_OPCODE;
2954
2955           if (i.tm.opcode_modifier & JumpByte) /* jcxz, loop */
2956             prefix = ADDR_PREFIX_OPCODE;
2957
2958           if (!add_prefix (prefix))
2959             return 0;
2960         }
2961
2962       /* Set mode64 for an operand.  */
2963       if (i.suffix == QWORD_MNEM_SUFFIX
2964           && flag_code == CODE_64BIT
2965           && (i.tm.opcode_modifier & NoRex64) == 0)
2966         {
2967           /* Special case for xchg %rax,%rax.  It is NOP and doesn't
2968              need rex64.  */
2969           if (i.operands != 2
2970               || i.types [0] != (Acc | Reg64)
2971               || i.types [1] != (Acc | Reg64)
2972               || strcmp (i.tm.name, "xchg") != 0)
2973           i.rex |= REX_MODE64;
2974         }
2975
2976       /* Size floating point instruction.  */
2977       if (i.suffix == LONG_MNEM_SUFFIX)
2978         if (i.tm.opcode_modifier & FloatMF)
2979           i.tm.base_opcode ^= 4;
2980     }
2981
2982   return 1;
2983 }
2984
2985 static int
2986 check_byte_reg (void)
2987 {
2988   int op;
2989
2990   for (op = i.operands; --op >= 0;)
2991     {
2992       /* If this is an eight bit register, it's OK.  If it's the 16 or
2993          32 bit version of an eight bit register, we will just use the
2994          low portion, and that's OK too.  */
2995       if (i.types[op] & Reg8)
2996         continue;
2997
2998       /* movzx and movsx should not generate this warning.  */
2999       if (intel_syntax
3000           && (i.tm.base_opcode == 0xfb7
3001               || i.tm.base_opcode == 0xfb6
3002               || i.tm.base_opcode == 0x63
3003               || i.tm.base_opcode == 0xfbe
3004               || i.tm.base_opcode == 0xfbf))
3005         continue;
3006
3007       if ((i.types[op] & WordReg) && i.op[op].regs->reg_num < 4)
3008         {
3009           /* Prohibit these changes in the 64bit mode, since the
3010              lowering is more complicated.  */
3011           if (flag_code == CODE_64BIT
3012               && (i.tm.operand_types[op] & InOutPortReg) == 0)
3013             {
3014               as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
3015                       register_prefix, i.op[op].regs->reg_name,
3016                       i.suffix);
3017               return 0;
3018             }
3019 #if REGISTER_WARNINGS
3020           if (!quiet_warnings
3021               && (i.tm.operand_types[op] & InOutPortReg) == 0)
3022             as_warn (_("using `%%%s' instead of `%%%s' due to `%c' suffix"),
3023                      (i.op[op].regs + (i.types[op] & Reg16
3024                                        ? REGNAM_AL - REGNAM_AX
3025                                        : REGNAM_AL - REGNAM_EAX))->reg_name,
3026                      i.op[op].regs->reg_name,
3027                      i.suffix);
3028 #endif
3029           continue;
3030         }
3031       /* Any other register is bad.  */
3032       if (i.types[op] & (Reg | RegMMX | RegXMM
3033                          | SReg2 | SReg3
3034                          | Control | Debug | Test
3035                          | FloatReg | FloatAcc))
3036         {
3037           as_bad (_("`%%%s' not allowed with `%s%c'"),
3038                   i.op[op].regs->reg_name,
3039                   i.tm.name,
3040                   i.suffix);
3041           return 0;
3042         }
3043     }
3044   return 1;
3045 }
3046
3047 static int
3048 check_long_reg (void)
3049 {
3050   int op;
3051
3052   for (op = i.operands; --op >= 0;)
3053     /* Reject eight bit registers, except where the template requires
3054        them. (eg. movzb)  */
3055     if ((i.types[op] & Reg8) != 0
3056         && (i.tm.operand_types[op] & (Reg16 | Reg32 | Acc)) != 0)
3057       {
3058         as_bad (_("`%%%s' not allowed with `%s%c'"),
3059                 i.op[op].regs->reg_name,
3060                 i.tm.name,
3061                 i.suffix);
3062         return 0;
3063       }
3064   /* Warn if the e prefix on a general reg is missing.  */
3065     else if ((!quiet_warnings || flag_code == CODE_64BIT)
3066              && (i.types[op] & Reg16) != 0
3067              && (i.tm.operand_types[op] & (Reg32 | Acc)) != 0)
3068       {
3069         /* Prohibit these changes in the 64bit mode, since the
3070            lowering is more complicated.  */
3071         if (flag_code == CODE_64BIT)
3072           {
3073             as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
3074                     register_prefix, i.op[op].regs->reg_name,
3075                     i.suffix);
3076             return 0;
3077           }
3078 #if REGISTER_WARNINGS
3079         else
3080           as_warn (_("using `%%%s' instead of `%%%s' due to `%c' suffix"),
3081                    (i.op[op].regs + REGNAM_EAX - REGNAM_AX)->reg_name,
3082                    i.op[op].regs->reg_name,
3083                    i.suffix);
3084 #endif
3085       }
3086   /* Warn if the r prefix on a general reg is missing.  */
3087     else if ((i.types[op] & Reg64) != 0
3088              && (i.tm.operand_types[op] & (Reg32 | Acc)) != 0)
3089       {
3090         as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
3091                 register_prefix, i.op[op].regs->reg_name,
3092                 i.suffix);
3093         return 0;
3094       }
3095   return 1;
3096 }
3097
3098 static int
3099 check_qword_reg (void)
3100 {
3101   int op;
3102
3103   for (op = i.operands; --op >= 0; )
3104     /* Reject eight bit registers, except where the template requires
3105        them. (eg. movzb)  */
3106     if ((i.types[op] & Reg8) != 0
3107         && (i.tm.operand_types[op] & (Reg16 | Reg32 | Acc)) != 0)
3108       {
3109         as_bad (_("`%%%s' not allowed with `%s%c'"),
3110                 i.op[op].regs->reg_name,
3111                 i.tm.name,
3112                 i.suffix);
3113         return 0;
3114       }
3115   /* Warn if the e prefix on a general reg is missing.  */
3116     else if (((i.types[op] & Reg16) != 0
3117               || (i.types[op] & Reg32) != 0)
3118              && (i.tm.operand_types[op] & (Reg32 | Acc)) != 0)
3119       {
3120         /* Prohibit these changes in the 64bit mode, since the
3121            lowering is more complicated.  */
3122         as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
3123                 register_prefix, i.op[op].regs->reg_name,
3124                 i.suffix);
3125         return 0;
3126       }
3127   return 1;
3128 }
3129
3130 static int
3131 check_word_reg (void)
3132 {
3133   int op;
3134   for (op = i.operands; --op >= 0;)
3135     /* Reject eight bit registers, except where the template requires
3136        them. (eg. movzb)  */
3137     if ((i.types[op] & Reg8) != 0
3138         && (i.tm.operand_types[op] & (Reg16 | Reg32 | Acc)) != 0)
3139       {
3140         as_bad (_("`%%%s' not allowed with `%s%c'"),
3141                 i.op[op].regs->reg_name,
3142                 i.tm.name,
3143                 i.suffix);
3144         return 0;
3145       }
3146   /* Warn if the e prefix on a general reg is present.  */
3147     else if ((!quiet_warnings || flag_code == CODE_64BIT)
3148              && (i.types[op] & Reg32) != 0
3149              && (i.tm.operand_types[op] & (Reg16 | Acc)) != 0)
3150       {
3151         /* Prohibit these changes in the 64bit mode, since the
3152            lowering is more complicated.  */
3153         if (flag_code == CODE_64BIT)
3154           {
3155             as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
3156                     register_prefix, i.op[op].regs->reg_name,
3157                     i.suffix);
3158             return 0;
3159           }
3160         else
3161 #if REGISTER_WARNINGS
3162           as_warn (_("using `%%%s' instead of `%%%s' due to `%c' suffix"),
3163                    (i.op[op].regs + REGNAM_AX - REGNAM_EAX)->reg_name,
3164                    i.op[op].regs->reg_name,
3165                    i.suffix);
3166 #endif
3167       }
3168   return 1;
3169 }
3170
3171 static int
3172 finalize_imm (void)
3173 {
3174   unsigned int overlap0, overlap1, overlap2;
3175
3176   overlap0 = i.types[0] & i.tm.operand_types[0];
3177   if ((overlap0 & (Imm8 | Imm8S | Imm16 | Imm32 | Imm32S | Imm64))
3178       && overlap0 != Imm8 && overlap0 != Imm8S
3179       && overlap0 != Imm16 && overlap0 != Imm32S
3180       && overlap0 != Imm32 && overlap0 != Imm64)
3181     {
3182       if (i.suffix)
3183         {
3184           overlap0 &= (i.suffix == BYTE_MNEM_SUFFIX
3185                        ? Imm8 | Imm8S
3186                        : (i.suffix == WORD_MNEM_SUFFIX
3187                           ? Imm16
3188                           : (i.suffix == QWORD_MNEM_SUFFIX
3189                              ? Imm64 | Imm32S
3190                              : Imm32)));
3191         }
3192       else if (overlap0 == (Imm16 | Imm32S | Imm32)
3193                || overlap0 == (Imm16 | Imm32)
3194                || overlap0 == (Imm16 | Imm32S))
3195         {
3196           overlap0 = ((flag_code == CODE_16BIT) ^ (i.prefix[DATA_PREFIX] != 0)
3197                       ? Imm16 : Imm32S);
3198         }
3199       if (overlap0 != Imm8 && overlap0 != Imm8S
3200           && overlap0 != Imm16 && overlap0 != Imm32S
3201           && overlap0 != Imm32 && overlap0 != Imm64)
3202         {
3203           as_bad (_("no instruction mnemonic suffix given; "
3204                     "can't determine immediate size"));
3205           return 0;
3206         }
3207     }
3208   i.types[0] = overlap0;
3209
3210   overlap1 = i.types[1] & i.tm.operand_types[1];
3211   if ((overlap1 & (Imm8 | Imm8S | Imm16 | Imm32S | Imm32 | Imm64))
3212       && overlap1 != Imm8 && overlap1 != Imm8S
3213       && overlap1 != Imm16 && overlap1 != Imm32S
3214       && overlap1 != Imm32 && overlap1 != Imm64)
3215     {
3216       if (i.suffix)
3217         {
3218           overlap1 &= (i.suffix == BYTE_MNEM_SUFFIX
3219                        ? Imm8 | Imm8S
3220                        : (i.suffix == WORD_MNEM_SUFFIX
3221                           ? Imm16
3222                           : (i.suffix == QWORD_MNEM_SUFFIX
3223                              ? Imm64 | Imm32S
3224                              : Imm32)));
3225         }
3226       else if (overlap1 == (Imm16 | Imm32 | Imm32S)
3227                || overlap1 == (Imm16 | Imm32)
3228                || overlap1 == (Imm16 | Imm32S))
3229         {
3230           overlap1 = ((flag_code == CODE_16BIT) ^ (i.prefix[DATA_PREFIX] != 0)
3231                       ? Imm16 : Imm32S);
3232         }
3233       if (overlap1 != Imm8 && overlap1 != Imm8S
3234           && overlap1 != Imm16 && overlap1 != Imm32S
3235           && overlap1 != Imm32 && overlap1 != Imm64)
3236         {
3237           as_bad (_("no instruction mnemonic suffix given; "
3238                     "can't determine immediate size %x %c"),
3239                   overlap1, i.suffix);
3240           return 0;
3241         }
3242     }
3243   i.types[1] = overlap1;
3244
3245   overlap2 = i.types[2] & i.tm.operand_types[2];
3246   assert ((overlap2 & Imm) == 0);
3247   i.types[2] = overlap2;
3248
3249   return 1;
3250 }
3251
3252 static int
3253 process_operands (void)
3254 {
3255   /* Default segment register this instruction will use for memory
3256      accesses.  0 means unknown.  This is only for optimizing out
3257      unnecessary segment overrides.  */
3258   const seg_entry *default_seg = 0;
3259
3260   /* The imul $imm, %reg instruction is converted into
3261      imul $imm, %reg, %reg, and the clr %reg instruction
3262      is converted into xor %reg, %reg.  */
3263   if (i.tm.opcode_modifier & regKludge)
3264     {
3265       unsigned int first_reg_op = (i.types[0] & Reg) ? 0 : 1;
3266       /* Pretend we saw the extra register operand.  */
3267       assert (i.reg_operands == 1
3268               && i.op[first_reg_op + 1].regs == 0);
3269       i.op[first_reg_op + 1].regs = i.op[first_reg_op].regs;
3270       i.types[first_reg_op + 1] = i.types[first_reg_op];
3271       i.operands++;
3272       i.reg_operands++;
3273     }
3274
3275   if (i.tm.opcode_modifier & ShortForm)
3276     {
3277       if (i.types[0] & (SReg2 | SReg3))
3278         {
3279           if (i.tm.base_opcode == POP_SEG_SHORT
3280               && i.op[0].regs->reg_num == 1)
3281             {
3282               as_bad (_("you can't `pop %%cs'"));
3283               return 0;
3284             }
3285           i.tm.base_opcode |= (i.op[0].regs->reg_num << 3);
3286           if ((i.op[0].regs->reg_flags & RegRex) != 0)
3287             i.rex |= REX_EXTZ;
3288         }
3289       else
3290         {
3291           /* The register or float register operand is in operand 0 or 1.  */
3292           unsigned int op = (i.types[0] & (Reg | FloatReg)) ? 0 : 1;
3293           /* Register goes in low 3 bits of opcode.  */
3294           i.tm.base_opcode |= i.op[op].regs->reg_num;
3295           if ((i.op[op].regs->reg_flags & RegRex) != 0)
3296             i.rex |= REX_EXTZ;
3297           if (!quiet_warnings && (i.tm.opcode_modifier & Ugh) != 0)
3298             {
3299               /* Warn about some common errors, but press on regardless.
3300                  The first case can be generated by gcc (<= 2.8.1).  */
3301               if (i.operands == 2)
3302                 {
3303                   /* Reversed arguments on faddp, fsubp, etc.  */
3304                   as_warn (_("translating to `%s %%%s,%%%s'"), i.tm.name,
3305                            i.op[1].regs->reg_name,
3306                            i.op[0].regs->reg_name);
3307                 }
3308               else
3309                 {
3310                   /* Extraneous `l' suffix on fp insn.  */
3311                   as_warn (_("translating to `%s %%%s'"), i.tm.name,
3312                            i.op[0].regs->reg_name);
3313                 }
3314             }
3315         }
3316     }
3317   else if (i.tm.opcode_modifier & Modrm)
3318     {
3319       /* The opcode is completed (modulo i.tm.extension_opcode which
3320          must be put into the modrm byte).  Now, we make the modrm and
3321          index base bytes based on all the info we've collected.  */
3322
3323       default_seg = build_modrm_byte ();
3324     }
3325   else if ((i.tm.base_opcode & ~(D | W)) == MOV_AX_DISP32)
3326     {
3327       default_seg = &ds;
3328     }
3329   else if ((i.tm.opcode_modifier & IsString) != 0)
3330     {
3331       /* For the string instructions that allow a segment override
3332          on one of their operands, the default segment is ds.  */
3333       default_seg = &ds;
3334     }
3335
3336   if ((i.tm.base_opcode == 0x8d /* lea */
3337        || (i.tm.cpu_flags & CpuSVME))
3338       && i.seg[0] && !quiet_warnings)
3339     as_warn (_("segment override on `%s' is ineffectual"), i.tm.name);
3340
3341   /* If a segment was explicitly specified, and the specified segment
3342      is not the default, use an opcode prefix to select it.  If we
3343      never figured out what the default segment is, then default_seg
3344      will be zero at this point, and the specified segment prefix will
3345      always be used.  */
3346   if ((i.seg[0]) && (i.seg[0] != default_seg))
3347     {
3348       if (!add_prefix (i.seg[0]->seg_prefix))
3349         return 0;
3350     }
3351   return 1;
3352 }
3353
3354 static const seg_entry *
3355 build_modrm_byte (void)
3356 {
3357   const seg_entry *default_seg = 0;
3358
3359   /* i.reg_operands MUST be the number of real register operands;
3360      implicit registers do not count.  */
3361   if (i.reg_operands == 2)
3362     {
3363       unsigned int source, dest;
3364
3365       switch (i.operands)
3366         {
3367         case 2:
3368           source = 0;
3369           break;
3370         case 3:
3371           /* When there are 3 operands, one of them may be immediate,
3372              which may be the first or the last operand.  Otherwise,
3373              the first operand must be shift count register (cl). */
3374           assert (i.imm_operands == 1
3375                   || (i.imm_operands == 0
3376                       && (i.types[0] & ShiftCount)));
3377           source = (i.types[0] & (Imm | ShiftCount)) ? 1 : 0;
3378           break;
3379         case 4:
3380           /* When there are 4 operands, the first two must be immediate
3381              operands. The source operand will be the 3rd one.  */
3382           assert (i.imm_operands == 2
3383                   && (i.types[0] & Imm)
3384                   && (i.types[1] & Imm));
3385           source = 2;
3386           break;
3387         default:
3388           abort ();
3389         }
3390
3391       dest = source + 1;
3392
3393       i.rm.mode = 3;
3394       /* One of the register operands will be encoded in the i.tm.reg
3395          field, the other in the combined i.tm.mode and i.tm.regmem
3396          fields.  If no form of this instruction supports a memory
3397          destination operand, then we assume the source operand may
3398          sometimes be a memory operand and so we need to store the
3399          destination in the i.rm.reg field.  */
3400       if ((i.tm.operand_types[dest] & AnyMem) == 0)
3401         {
3402           i.rm.reg = i.op[dest].regs->reg_num;
3403           i.rm.regmem = i.op[source].regs->reg_num;
3404           if ((i.op[dest].regs->reg_flags & RegRex) != 0)
3405             i.rex |= REX_EXTX;
3406           if ((i.op[source].regs->reg_flags & RegRex) != 0)
3407             i.rex |= REX_EXTZ;
3408         }
3409       else
3410         {
3411           i.rm.reg = i.op[source].regs->reg_num;
3412           i.rm.regmem = i.op[dest].regs->reg_num;
3413           if ((i.op[dest].regs->reg_flags & RegRex) != 0)
3414             i.rex |= REX_EXTZ;
3415           if ((i.op[source].regs->reg_flags & RegRex) != 0)
3416             i.rex |= REX_EXTX;
3417         }
3418       if (flag_code != CODE_64BIT && (i.rex & (REX_EXTX | REX_EXTZ)))
3419         {
3420           if (!((i.types[0] | i.types[1]) & Control))
3421             abort ();
3422           i.rex &= ~(REX_EXTX | REX_EXTZ);
3423           add_prefix (LOCK_PREFIX_OPCODE);
3424         }
3425     }
3426   else
3427     {                   /* If it's not 2 reg operands...  */
3428       if (i.mem_operands)
3429         {
3430           unsigned int fake_zero_displacement = 0;
3431           unsigned int op;
3432
3433           for (op = 0; op < i.operands; op++)
3434             if ((i.types[op] & AnyMem))
3435               break;
3436           assert (op < i.operands);
3437
3438           default_seg = &ds;
3439
3440           if (i.base_reg == 0)
3441             {
3442               i.rm.mode = 0;
3443               if (!i.disp_operands)
3444                 fake_zero_displacement = 1;
3445               if (i.index_reg == 0)
3446                 {
3447                   /* Operand is just <disp>  */
3448                   if (flag_code == CODE_64BIT)
3449                     {
3450                       /* 64bit mode overwrites the 32bit absolute
3451                          addressing by RIP relative addressing and
3452                          absolute addressing is encoded by one of the
3453                          redundant SIB forms.  */
3454                       i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
3455                       i.sib.base = NO_BASE_REGISTER;
3456                       i.sib.index = NO_INDEX_REGISTER;
3457                       i.types[op] = ((i.prefix[ADDR_PREFIX] == 0)
3458                                      ? Disp32S : Disp32);
3459                     }
3460                   else if ((flag_code == CODE_16BIT)
3461                            ^ (i.prefix[ADDR_PREFIX] != 0))
3462                     {
3463                       i.rm.regmem = NO_BASE_REGISTER_16;
3464                       i.types[op] = Disp16;
3465                     }
3466                   else
3467                     {
3468                       i.rm.regmem = NO_BASE_REGISTER;
3469                       i.types[op] = Disp32;
3470                     }
3471                 }
3472               else /* !i.base_reg && i.index_reg  */
3473                 {
3474                   i.sib.index = i.index_reg->reg_num;
3475                   i.sib.base = NO_BASE_REGISTER;
3476                   i.sib.scale = i.log2_scale_factor;
3477                   i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
3478                   i.types[op] &= ~Disp;
3479                   if (flag_code != CODE_64BIT)
3480                     i.types[op] |= Disp32;      /* Must be 32 bit */
3481                   else
3482                     i.types[op] |= Disp32S;
3483                   if ((i.index_reg->reg_flags & RegRex) != 0)
3484                     i.rex |= REX_EXTY;
3485                 }
3486             }
3487           /* RIP addressing for 64bit mode.  */
3488           else if (i.base_reg->reg_type == BaseIndex)
3489             {
3490               i.rm.regmem = NO_BASE_REGISTER;
3491               i.types[op] &= ~ Disp;
3492               i.types[op] |= Disp32S;
3493               i.flags[op] |= Operand_PCrel;
3494               if (! i.disp_operands)
3495                 fake_zero_displacement = 1;
3496             }
3497           else if (i.base_reg->reg_type & Reg16)
3498             {
3499               switch (i.base_reg->reg_num)
3500                 {
3501                 case 3: /* (%bx)  */
3502                   if (i.index_reg == 0)
3503                     i.rm.regmem = 7;
3504                   else /* (%bx,%si) -> 0, or (%bx,%di) -> 1  */
3505                     i.rm.regmem = i.index_reg->reg_num - 6;
3506                   break;
3507                 case 5: /* (%bp)  */
3508                   default_seg = &ss;
3509                   if (i.index_reg == 0)
3510                     {
3511                       i.rm.regmem = 6;
3512                       if ((i.types[op] & Disp) == 0)
3513                         {
3514                           /* fake (%bp) into 0(%bp)  */
3515                           i.types[op] |= Disp8;
3516                           fake_zero_displacement = 1;
3517                         }
3518                     }
3519                   else /* (%bp,%si) -> 2, or (%bp,%di) -> 3  */
3520                     i.rm.regmem = i.index_reg->reg_num - 6 + 2;
3521                   break;
3522                 default: /* (%si) -> 4 or (%di) -> 5  */
3523                   i.rm.regmem = i.base_reg->reg_num - 6 + 4;
3524                 }
3525               i.rm.mode = mode_from_disp_size (i.types[op]);
3526             }
3527           else /* i.base_reg and 32/64 bit mode  */
3528             {
3529               if (flag_code == CODE_64BIT
3530                   && (i.types[op] & Disp))
3531                 i.types[op] = ((i.types[op] & Disp8)
3532                                | (i.prefix[ADDR_PREFIX] == 0
3533                                   ? Disp32S : Disp32));
3534
3535               i.rm.regmem = i.base_reg->reg_num;
3536               if ((i.base_reg->reg_flags & RegRex) != 0)
3537                 i.rex |= REX_EXTZ;
3538               i.sib.base = i.base_reg->reg_num;
3539               /* x86-64 ignores REX prefix bit here to avoid decoder
3540                  complications.  */
3541               if ((i.base_reg->reg_num & 7) == EBP_REG_NUM)
3542                 {
3543                   default_seg = &ss;
3544                   if (i.disp_operands == 0)
3545                     {
3546                       fake_zero_displacement = 1;
3547                       i.types[op] |= Disp8;
3548                     }
3549                 }
3550               else if (i.base_reg->reg_num == ESP_REG_NUM)
3551                 {
3552                   default_seg = &ss;
3553                 }
3554               i.sib.scale = i.log2_scale_factor;
3555               if (i.index_reg == 0)
3556                 {
3557                   /* <disp>(%esp) becomes two byte modrm with no index
3558                      register.  We've already stored the code for esp
3559                      in i.rm.regmem ie. ESCAPE_TO_TWO_BYTE_ADDRESSING.
3560                      Any base register besides %esp will not use the
3561                      extra modrm byte.  */
3562                   i.sib.index = NO_INDEX_REGISTER;
3563 #if !SCALE1_WHEN_NO_INDEX
3564                   /* Another case where we force the second modrm byte.  */
3565                   if (i.log2_scale_factor)
3566                     i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
3567 #endif
3568                 }
3569               else
3570                 {
3571                   i.sib.index = i.index_reg->reg_num;
3572                   i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
3573                   if ((i.index_reg->reg_flags & RegRex) != 0)
3574                     i.rex |= REX_EXTY;
3575                 }
3576
3577               if (i.disp_operands
3578                   && (i.reloc[op] == BFD_RELOC_386_TLS_DESC_CALL
3579                       || i.reloc[op] == BFD_RELOC_X86_64_TLSDESC_CALL))
3580                 i.rm.mode = 0;
3581               else
3582                 i.rm.mode = mode_from_disp_size (i.types[op]);
3583             }
3584
3585           if (fake_zero_displacement)
3586             {
3587               /* Fakes a zero displacement assuming that i.types[op]
3588                  holds the correct displacement size.  */
3589               expressionS *exp;
3590
3591               assert (i.op[op].disps == 0);
3592               exp = &disp_expressions[i.disp_operands++];
3593               i.op[op].disps = exp;
3594               exp->X_op = O_constant;
3595               exp->X_add_number = 0;
3596               exp->X_add_symbol = (symbolS *) 0;
3597               exp->X_op_symbol = (symbolS *) 0;
3598             }
3599         }
3600
3601       /* Fill in i.rm.reg or i.rm.regmem field with register operand
3602          (if any) based on i.tm.extension_opcode.  Again, we must be
3603          careful to make sure that segment/control/debug/test/MMX
3604          registers are coded into the i.rm.reg field.  */
3605       if (i.reg_operands)
3606         {
3607           unsigned int op;
3608
3609           for (op = 0; op < i.operands; op++)
3610             if ((i.types[op] & (Reg | RegMMX | RegXMM
3611                                 | SReg2 | SReg3
3612                                 | Control | Debug | Test)))
3613               break;
3614           assert (op < i.operands);
3615
3616           /* If there is an extension opcode to put here, the register
3617              number must be put into the regmem field.  */
3618           if (i.tm.extension_opcode != None)
3619             {
3620               i.rm.regmem = i.op[op].regs->reg_num;
3621               if ((i.op[op].regs->reg_flags & RegRex) != 0)
3622                 i.rex |= REX_EXTZ;
3623             }
3624           else
3625             {
3626               i.rm.reg = i.op[op].regs->reg_num;
3627               if ((i.op[op].regs->reg_flags & RegRex) != 0)
3628                 i.rex |= REX_EXTX;
3629             }
3630
3631           /* Now, if no memory operand has set i.rm.mode = 0, 1, 2 we
3632              must set it to 3 to indicate this is a register operand
3633              in the regmem field.  */
3634           if (!i.mem_operands)
3635             i.rm.mode = 3;
3636         }
3637
3638       /* Fill in i.rm.reg field with extension opcode (if any).  */
3639       if (i.tm.extension_opcode != None)
3640         i.rm.reg = i.tm.extension_opcode;
3641     }
3642   return default_seg;
3643 }
3644
3645 static void
3646 output_branch (void)
3647 {
3648   char *p;
3649   int code16;
3650   int prefix;
3651   relax_substateT subtype;
3652   symbolS *sym;
3653   offsetT off;
3654
3655   code16 = 0;
3656   if (flag_code == CODE_16BIT)
3657     code16 = CODE16;
3658
3659   prefix = 0;
3660   if (i.prefix[DATA_PREFIX] != 0)
3661     {
3662       prefix = 1;
3663       i.prefixes -= 1;
3664       code16 ^= CODE16;
3665     }
3666   /* Pentium4 branch hints.  */
3667   if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE /* not taken */
3668       || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE /* taken */)
3669     {
3670       prefix++;
3671       i.prefixes--;
3672     }
3673   if (i.prefix[REX_PREFIX] != 0)
3674     {
3675       prefix++;
3676       i.prefixes--;
3677     }
3678
3679   if (i.prefixes != 0 && !intel_syntax)
3680     as_warn (_("skipping prefixes on this instruction"));
3681
3682   /* It's always a symbol;  End frag & setup for relax.
3683      Make sure there is enough room in this frag for the largest
3684      instruction we may generate in md_convert_frag.  This is 2
3685      bytes for the opcode and room for the prefix and largest
3686      displacement.  */
3687   frag_grow (prefix + 2 + 4);
3688   /* Prefix and 1 opcode byte go in fr_fix.  */
3689   p = frag_more (prefix + 1);
3690   if (i.prefix[DATA_PREFIX] != 0)
3691     *p++ = DATA_PREFIX_OPCODE;
3692   if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE
3693       || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE)
3694     *p++ = i.prefix[SEG_PREFIX];
3695   if (i.prefix[REX_PREFIX] != 0)
3696     *p++ = i.prefix[REX_PREFIX];
3697   *p = i.tm.base_opcode;
3698
3699   if ((unsigned char) *p == JUMP_PC_RELATIVE)
3700     subtype = ENCODE_RELAX_STATE (UNCOND_JUMP, SMALL);
3701   else if ((cpu_arch_flags & Cpu386) != 0)
3702     subtype = ENCODE_RELAX_STATE (COND_JUMP, SMALL);
3703   else
3704     subtype = ENCODE_RELAX_STATE (COND_JUMP86, SMALL);
3705   subtype |= code16;
3706
3707   sym = i.op[0].disps->X_add_symbol;
3708   off = i.op[0].disps->X_add_number;
3709
3710   if (i.op[0].disps->X_op != O_constant
3711       && i.op[0].disps->X_op != O_symbol)
3712     {
3713       /* Handle complex expressions.  */
3714       sym = make_expr_symbol (i.op[0].disps);
3715       off = 0;
3716     }
3717
3718   /* 1 possible extra opcode + 4 byte displacement go in var part.
3719      Pass reloc in fr_var.  */
3720   frag_var (rs_machine_dependent, 5, i.reloc[0], subtype, sym, off, p);
3721 }
3722
3723 static void
3724 output_jump (void)
3725 {
3726   char *p;
3727   int size;
3728   fixS *fixP;
3729
3730   if (i.tm.opcode_modifier & JumpByte)
3731     {
3732       /* This is a loop or jecxz type instruction.  */
3733       size = 1;
3734       if (i.prefix[ADDR_PREFIX] != 0)
3735         {
3736           FRAG_APPEND_1_CHAR (ADDR_PREFIX_OPCODE);
3737           i.prefixes -= 1;
3738         }
3739       /* Pentium4 branch hints.  */
3740       if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE /* not taken */
3741           || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE /* taken */)
3742         {
3743           FRAG_APPEND_1_CHAR (i.prefix[SEG_PREFIX]);
3744           i.prefixes--;
3745         }
3746     }
3747   else
3748     {
3749       int code16;
3750
3751       code16 = 0;
3752       if (flag_code == CODE_16BIT)
3753         code16 = CODE16;
3754
3755       if (i.prefix[DATA_PREFIX] != 0)
3756         {
3757           FRAG_APPEND_1_CHAR (DATA_PREFIX_OPCODE);
3758           i.prefixes -= 1;
3759           code16 ^= CODE16;
3760         }
3761
3762       size = 4;
3763       if (code16)
3764         size = 2;
3765     }
3766
3767   if (i.prefix[REX_PREFIX] != 0)
3768     {
3769       FRAG_APPEND_1_CHAR (i.prefix[REX_PREFIX]);
3770       i.prefixes -= 1;
3771     }
3772
3773   if (i.prefixes != 0 && !intel_syntax)
3774     as_warn (_("skipping prefixes on this instruction"));
3775
3776   p = frag_more (1 + size);
3777   *p++ = i.tm.base_opcode;
3778
3779   fixP = fix_new_exp (frag_now, p - frag_now->fr_literal, size,
3780                       i.op[0].disps, 1, reloc (size, 1, 1, i.reloc[0]));
3781
3782   /* All jumps handled here are signed, but don't use a signed limit
3783      check for 32 and 16 bit jumps as we want to allow wrap around at
3784      4G and 64k respectively.  */
3785   if (size == 1)
3786     fixP->fx_signed = 1;
3787 }
3788
3789 static void
3790 output_interseg_jump (void)
3791 {
3792   char *p;
3793   int size;
3794   int prefix;
3795   int code16;
3796
3797   code16 = 0;
3798   if (flag_code == CODE_16BIT)
3799     code16 = CODE16;
3800
3801   prefix = 0;
3802   if (i.prefix[DATA_PREFIX] != 0)
3803     {
3804       prefix = 1;
3805       i.prefixes -= 1;
3806       code16 ^= CODE16;
3807     }
3808   if (i.prefix[REX_PREFIX] != 0)
3809     {
3810       prefix++;
3811       i.prefixes -= 1;
3812     }
3813
3814   size = 4;
3815   if (code16)
3816     size = 2;
3817
3818   if (i.prefixes != 0 && !intel_syntax)
3819     as_warn (_("skipping prefixes on this instruction"));
3820
3821   /* 1 opcode; 2 segment; offset  */
3822   p = frag_more (prefix + 1 + 2 + size);
3823
3824   if (i.prefix[DATA_PREFIX] != 0)
3825     *p++ = DATA_PREFIX_OPCODE;
3826
3827   if (i.prefix[REX_PREFIX] != 0)
3828     *p++ = i.prefix[REX_PREFIX];
3829
3830   *p++ = i.tm.base_opcode;
3831   if (i.op[1].imms->X_op == O_constant)
3832     {
3833       offsetT n = i.op[1].imms->X_add_number;
3834
3835       if (size == 2
3836           && !fits_in_unsigned_word (n)
3837           && !fits_in_signed_word (n))
3838         {
3839           as_bad (_("16-bit jump out of range"));
3840           return;
3841         }
3842       md_number_to_chars (p, n, size);
3843     }
3844   else
3845     fix_new_exp (frag_now, p - frag_now->fr_literal, size,
3846                  i.op[1].imms, 0, reloc (size, 0, 0, i.reloc[1]));
3847   if (i.op[0].imms->X_op != O_constant)
3848     as_bad (_("can't handle non absolute segment in `%s'"),
3849             i.tm.name);
3850   md_number_to_chars (p + size, (valueT) i.op[0].imms->X_add_number, 2);
3851 }
3852
3853 static void
3854 output_insn (void)
3855 {
3856   fragS *insn_start_frag;
3857   offsetT insn_start_off;
3858
3859   /* Tie dwarf2 debug info to the address at the start of the insn.
3860      We can't do this after the insn has been output as the current
3861      frag may have been closed off.  eg. by frag_var.  */
3862   dwarf2_emit_insn (0);
3863
3864   insn_start_frag = frag_now;
3865   insn_start_off = frag_now_fix ();
3866
3867   /* Output jumps.  */
3868   if (i.tm.opcode_modifier & Jump)
3869     output_branch ();
3870   else if (i.tm.opcode_modifier & (JumpByte | JumpDword))
3871     output_jump ();
3872   else if (i.tm.opcode_modifier & JumpInterSegment)
3873     output_interseg_jump ();
3874   else
3875     {
3876       /* Output normal instructions here.  */
3877       char *p;
3878       unsigned char *q;
3879       unsigned int prefix;
3880
3881       /* All opcodes on i386 have either 1 or 2 bytes.  Supplemental
3882          Streaming SIMD extensions 3 Instructions have 3 bytes.  We may
3883          use one more higher byte to specify a prefix the instruction
3884          requires.  */
3885       if ((i.tm.cpu_flags & CpuSSSE3) != 0)
3886         {
3887           if (i.tm.base_opcode & 0xff000000)
3888             {
3889               prefix = (i.tm.base_opcode >> 24) & 0xff;
3890               goto check_prefix;
3891             }
3892         }
3893       else if ((i.tm.base_opcode & 0xff0000) != 0)
3894         {
3895           prefix = (i.tm.base_opcode >> 16) & 0xff;
3896           if ((i.tm.cpu_flags & CpuPadLock) != 0)
3897             {
3898             check_prefix:
3899               if (prefix != REPE_PREFIX_OPCODE
3900                   || i.prefix[LOCKREP_PREFIX] != REPE_PREFIX_OPCODE)
3901                 add_prefix (prefix);
3902             }
3903           else
3904             add_prefix (prefix);
3905         }
3906
3907       /* The prefix bytes.  */
3908       for (q = i.prefix;
3909            q < i.prefix + sizeof (i.prefix) / sizeof (i.prefix[0]);
3910            q++)
3911         {
3912           if (*q)
3913             {
3914               p = frag_more (1);
3915               md_number_to_chars (p, (valueT) *q, 1);
3916             }
3917         }
3918
3919       /* Now the opcode; be careful about word order here!  */
3920       if (fits_in_unsigned_byte (i.tm.base_opcode))
3921         {
3922           FRAG_APPEND_1_CHAR (i.tm.base_opcode);
3923         }
3924       else
3925         {
3926           if ((i.tm.cpu_flags & CpuSSSE3) != 0)
3927             {
3928               p = frag_more (3);
3929               *p++ = (i.tm.base_opcode >> 16) & 0xff;
3930             }
3931           else
3932             p = frag_more (2);
3933
3934           /* Put out high byte first: can't use md_number_to_chars!  */
3935           *p++ = (i.tm.base_opcode >> 8) & 0xff;
3936           *p = i.tm.base_opcode & 0xff;
3937         }
3938
3939       /* Now the modrm byte and sib byte (if present).  */
3940       if (i.tm.opcode_modifier & Modrm)
3941         {
3942           p = frag_more (1);
3943           md_number_to_chars (p,
3944                               (valueT) (i.rm.regmem << 0
3945                                         | i.rm.reg << 3
3946                                         | i.rm.mode << 6),
3947                               1);
3948           /* If i.rm.regmem == ESP (4)
3949              && i.rm.mode != (Register mode)
3950              && not 16 bit
3951              ==> need second modrm byte.  */
3952           if (i.rm.regmem == ESCAPE_TO_TWO_BYTE_ADDRESSING
3953               && i.rm.mode != 3
3954               && !(i.base_reg && (i.base_reg->reg_type & Reg16) != 0))
3955             {
3956               p = frag_more (1);
3957               md_number_to_chars (p,
3958                                   (valueT) (i.sib.base << 0
3959                                             | i.sib.index << 3
3960                                             | i.sib.scale << 6),
3961                                   1);
3962             }
3963         }
3964
3965       if (i.disp_operands)
3966         output_disp (insn_start_frag, insn_start_off);
3967
3968       if (i.imm_operands)
3969         output_imm (insn_start_frag, insn_start_off);
3970     }
3971
3972 #ifdef DEBUG386
3973   if (flag_debug)
3974     {
3975       pi ("" /*line*/, &i);
3976     }
3977 #endif /* DEBUG386  */
3978 }
3979
3980 static void
3981 output_disp (fragS *insn_start_frag, offsetT insn_start_off)
3982 {
3983   char *p;
3984   unsigned int n;
3985
3986   for (n = 0; n < i.operands; n++)
3987     {
3988       if (i.types[n] & Disp)
3989         {
3990           if (i.op[n].disps->X_op == O_constant)
3991             {
3992               int size;
3993               offsetT val;
3994
3995               size = 4;
3996               if (i.types[n] & (Disp8 | Disp16 | Disp64))
3997                 {
3998                   size = 2;
3999                   if (i.types[n] & Disp8)
4000                     size = 1;
4001                   if (i.types[n] & Disp64)
4002                     size = 8;
4003                 }
4004               val = offset_in_range (i.op[n].disps->X_add_number,
4005                                      size);
4006               p = frag_more (size);
4007               md_number_to_chars (p, val, size);
4008             }
4009           else
4010             {
4011               enum bfd_reloc_code_real reloc_type;
4012               int size = 4;
4013               int sign = 0;
4014               int pcrel = (i.flags[n] & Operand_PCrel) != 0;
4015
4016               /* The PC relative address is computed relative
4017                  to the instruction boundary, so in case immediate
4018                  fields follows, we need to adjust the value.  */
4019               if (pcrel && i.imm_operands)
4020                 {
4021                   int imm_size = 4;
4022                   unsigned int n1;
4023
4024                   for (n1 = 0; n1 < i.operands; n1++)
4025                     if (i.types[n1] & Imm)
4026                       {
4027                         if (i.types[n1] & (Imm8 | Imm8S | Imm16 | Imm64))
4028                           {
4029                             imm_size = 2;
4030                             if (i.types[n1] & (Imm8 | Imm8S))
4031                               imm_size = 1;
4032                             if (i.types[n1] & Imm64)
4033                               imm_size = 8;
4034                           }
4035                         break;
4036                       }
4037                   /* We should find the immediate.  */
4038                   if (n1 == i.operands)
4039                     abort ();
4040                   i.op[n].disps->X_add_number -= imm_size;
4041                 }
4042
4043               if (i.types[n] & Disp32S)
4044                 sign = 1;
4045
4046               if (i.types[n] & (Disp16 | Disp64))
4047                 {
4048                   size = 2;
4049                   if (i.types[n] & Disp64)
4050                     size = 8;
4051                 }
4052
4053               p = frag_more (size);
4054               reloc_type = reloc (size, pcrel, sign, i.reloc[n]);
4055               if (GOT_symbol
4056                   && GOT_symbol == i.op[n].disps->X_add_symbol
4057                   && (((reloc_type == BFD_RELOC_32
4058                         || reloc_type == BFD_RELOC_X86_64_32S
4059                         || (reloc_type == BFD_RELOC_64
4060                             && object_64bit))
4061                        && (i.op[n].disps->X_op == O_symbol
4062                            || (i.op[n].disps->X_op == O_add
4063                                && ((symbol_get_value_expression
4064                                     (i.op[n].disps->X_op_symbol)->X_op)
4065                                    == O_subtract))))
4066                       || reloc_type == BFD_RELOC_32_PCREL))
4067                 {
4068                   offsetT add;
4069
4070                   if (insn_start_frag == frag_now)
4071                     add = (p - frag_now->fr_literal) - insn_start_off;
4072                   else
4073                     {
4074                       fragS *fr;
4075
4076                       add = insn_start_frag->fr_fix - insn_start_off;
4077                       for (fr = insn_start_frag->fr_next;
4078                            fr && fr != frag_now; fr = fr->fr_next)
4079                         add += fr->fr_fix;
4080                       add += p - frag_now->fr_literal;
4081                     }
4082
4083                   if (!object_64bit)
4084                     {
4085                       reloc_type = BFD_RELOC_386_GOTPC;
4086                       i.op[n].imms->X_add_number += add;
4087                     }
4088                   else if (reloc_type == BFD_RELOC_64)
4089                     reloc_type = BFD_RELOC_X86_64_GOTPC64;
4090                   else
4091                     /* Don't do the adjustment for x86-64, as there
4092                        the pcrel addressing is relative to the _next_
4093                        insn, and that is taken care of in other code.  */
4094                     reloc_type = BFD_RELOC_X86_64_GOTPC32;
4095                 }
4096               fix_new_exp (frag_now, p - frag_now->fr_literal, size,
4097                            i.op[n].disps, pcrel, reloc_type);
4098             }
4099         }
4100     }
4101 }
4102
4103 static void
4104 output_imm (fragS *insn_start_frag, offsetT insn_start_off)
4105 {
4106   char *p;
4107   unsigned int n;
4108
4109   for (n = 0; n < i.operands; n++)
4110     {
4111       if (i.types[n] & Imm)
4112         {
4113           if (i.op[n].imms->X_op == O_constant)
4114             {
4115               int size;
4116               offsetT val;
4117
4118               size = 4;
4119               if (i.types[n] & (Imm8 | Imm8S | Imm16 | Imm64))
4120                 {
4121                   size = 2;
4122                   if (i.types[n] & (Imm8 | Imm8S))
4123                     size = 1;
4124                   else if (i.types[n] & Imm64)
4125                     size = 8;
4126                 }
4127               val = offset_in_range (i.op[n].imms->X_add_number,
4128                                      size);
4129               p = frag_more (size);
4130               md_number_to_chars (p, val, size);
4131             }
4132           else
4133             {
4134               /* Not absolute_section.
4135                  Need a 32-bit fixup (don't support 8bit
4136                  non-absolute imms).  Try to support other
4137                  sizes ...  */
4138               enum bfd_reloc_code_real reloc_type;
4139               int size = 4;
4140               int sign = 0;
4141
4142               if ((i.types[n] & (Imm32S))
4143                   && (i.suffix == QWORD_MNEM_SUFFIX
4144                       || (!i.suffix && (i.tm.opcode_modifier & No_lSuf))))
4145                 sign = 1;
4146               if (i.types[n] & (Imm8 | Imm8S | Imm16 | Imm64))
4147                 {
4148                   size = 2;
4149                   if (i.types[n] & (Imm8 | Imm8S))
4150                     size = 1;
4151                   if (i.types[n] & Imm64)
4152                     size = 8;
4153                 }
4154
4155               p = frag_more (size);
4156               reloc_type = reloc (size, 0, sign, i.reloc[n]);
4157
4158               /*   This is tough to explain.  We end up with this one if we
4159                * have operands that look like
4160                * "_GLOBAL_OFFSET_TABLE_+[.-.L284]".  The goal here is to
4161                * obtain the absolute address of the GOT, and it is strongly
4162                * preferable from a performance point of view to avoid using
4163                * a runtime relocation for this.  The actual sequence of
4164                * instructions often look something like:
4165                *
4166                *        call    .L66
4167                * .L66:
4168                *        popl    %ebx
4169                *        addl    $_GLOBAL_OFFSET_TABLE_+[.-.L66],%ebx
4170                *
4171                *   The call and pop essentially return the absolute address
4172                * of the label .L66 and store it in %ebx.  The linker itself
4173                * will ultimately change the first operand of the addl so
4174                * that %ebx points to the GOT, but to keep things simple, the
4175                * .o file must have this operand set so that it generates not
4176                * the absolute address of .L66, but the absolute address of
4177                * itself.  This allows the linker itself simply treat a GOTPC
4178                * relocation as asking for a pcrel offset to the GOT to be
4179                * added in, and the addend of the relocation is stored in the
4180                * operand field for the instruction itself.
4181                *
4182                *   Our job here is to fix the operand so that it would add
4183                * the correct offset so that %ebx would point to itself.  The
4184                * thing that is tricky is that .-.L66 will point to the
4185                * beginning of the instruction, so we need to further modify
4186                * the operand so that it will point to itself.  There are
4187                * other cases where you have something like:
4188                *
4189                *        .long   $_GLOBAL_OFFSET_TABLE_+[.-.L66]
4190                *
4191                * and here no correction would be required.  Internally in
4192                * the assembler we treat operands of this form as not being
4193                * pcrel since the '.' is explicitly mentioned, and I wonder
4194                * whether it would simplify matters to do it this way.  Who
4195                * knows.  In earlier versions of the PIC patches, the
4196                * pcrel_adjust field was used to store the correction, but
4197                * since the expression is not pcrel, I felt it would be
4198                * confusing to do it this way.  */
4199
4200               if ((reloc_type == BFD_RELOC_32
4201                    || reloc_type == BFD_RELOC_X86_64_32S
4202                    || reloc_type == BFD_RELOC_64)
4203                   && GOT_symbol
4204                   && GOT_symbol == i.op[n].imms->X_add_symbol
4205                   && (i.op[n].imms->X_op == O_symbol
4206                       || (i.op[n].imms->X_op == O_add
4207                           && ((symbol_get_value_expression
4208                                (i.op[n].imms->X_op_symbol)->X_op)
4209                               == O_subtract))))
4210                 {
4211                   offsetT add;
4212
4213                   if (insn_start_frag == frag_now)
4214                     add = (p - frag_now->fr_literal) - insn_start_off;
4215                   else
4216                     {
4217                       fragS *fr;
4218
4219                       add = insn_start_frag->fr_fix - insn_start_off;
4220                       for (fr = insn_start_frag->fr_next;
4221                            fr && fr != frag_now; fr = fr->fr_next)
4222                         add += fr->fr_fix;
4223                       add += p - frag_now->fr_literal;
4224                     }
4225
4226                   if (!object_64bit)
4227                     reloc_type = BFD_RELOC_386_GOTPC;
4228                   else if (size == 4)
4229                     reloc_type = BFD_RELOC_X86_64_GOTPC32;
4230                   else if (size == 8)
4231                     reloc_type = BFD_RELOC_X86_64_GOTPC64;
4232                   i.op[n].imms->X_add_number += add;
4233                 }
4234               fix_new_exp (frag_now, p - frag_now->fr_literal, size,
4235                            i.op[n].imms, 0, reloc_type);
4236             }
4237         }
4238     }
4239 }
4240 \f
4241 /* x86_cons_fix_new is called via the expression parsing code when a
4242    reloc is needed.  We use this hook to get the correct .got reloc.  */
4243 static enum bfd_reloc_code_real got_reloc = NO_RELOC;
4244 static int cons_sign = -1;
4245
4246 void
4247 x86_cons_fix_new (fragS *frag, unsigned int off, unsigned int len,
4248                   expressionS *exp)
4249 {
4250   enum bfd_reloc_code_real r = reloc (len, 0, cons_sign, got_reloc);
4251
4252   got_reloc = NO_RELOC;
4253
4254 #ifdef TE_PE
4255   if (exp->X_op == O_secrel)
4256     {
4257       exp->X_op = O_symbol;
4258       r = BFD_RELOC_32_SECREL;
4259     }
4260 #endif
4261
4262   fix_new_exp (frag, off, len, exp, 0, r);
4263 }
4264
4265 #if (!defined (OBJ_ELF) && !defined (OBJ_MAYBE_ELF)) || defined (LEX_AT)
4266 # define lex_got(reloc, adjust, types) NULL
4267 #else
4268 /* Parse operands of the form
4269    <symbol>@GOTOFF+<nnn>
4270    and similar .plt or .got references.
4271
4272    If we find one, set up the correct relocation in RELOC and copy the
4273    input string, minus the `@GOTOFF' into a malloc'd buffer for
4274    parsing by the calling routine.  Return this buffer, and if ADJUST
4275    is non-null set it to the length of the string we removed from the
4276    input line.  Otherwise return NULL.  */
4277 static char *
4278 lex_got (enum bfd_reloc_code_real *reloc,
4279          int *adjust,
4280          unsigned int *types)
4281 {
4282   /* Some of the relocations depend on the size of what field is to
4283      be relocated.  But in our callers i386_immediate and i386_displacement
4284      we don't yet know the operand size (this will be set by insn
4285      matching).  Hence we record the word32 relocation here,
4286      and adjust the reloc according to the real size in reloc().  */
4287   static const struct {
4288     const char *str;
4289     const enum bfd_reloc_code_real rel[2];
4290     const unsigned int types64;
4291   } gotrel[] = {
4292     { "PLTOFF",   { 0,
4293                     BFD_RELOC_X86_64_PLTOFF64 },
4294       Imm64 },
4295     { "PLT",      { BFD_RELOC_386_PLT32,
4296                     BFD_RELOC_X86_64_PLT32    },
4297       Imm32 | Imm32S | Disp32 },
4298     { "GOTPLT",   { 0,
4299                     BFD_RELOC_X86_64_GOTPLT64 },
4300       Imm64 | Disp64 },
4301     { "GOTOFF",   { BFD_RELOC_386_GOTOFF,
4302                     BFD_RELOC_X86_64_GOTOFF64 },
4303       Imm64 | Disp64 },
4304     { "GOTPCREL", { 0,
4305                     BFD_RELOC_X86_64_GOTPCREL },
4306       Imm32 | Imm32S | Disp32 },
4307     { "TLSGD",    { BFD_RELOC_386_TLS_GD,
4308                     BFD_RELOC_X86_64_TLSGD    },
4309       Imm32 | Imm32S | Disp32 },
4310     { "TLSLDM",   { BFD_RELOC_386_TLS_LDM,
4311                     0                         },
4312       0 },
4313     { "TLSLD",    { 0,
4314                     BFD_RELOC_X86_64_TLSLD    },
4315       Imm32 | Imm32S | Disp32 },
4316     { "GOTTPOFF", { BFD_RELOC_386_TLS_IE_32,
4317                     BFD_RELOC_X86_64_GOTTPOFF },
4318       Imm32 | Imm32S | Disp32 },
4319     { "TPOFF",    { BFD_RELOC_386_TLS_LE_32,
4320                     BFD_RELOC_X86_64_TPOFF32  },
4321       Imm32 | Imm32S | Imm64 | Disp32 | Disp64 },
4322     { "NTPOFF",   { BFD_RELOC_386_TLS_LE,
4323                     0                         },
4324       0 },
4325     { "DTPOFF",   { BFD_RELOC_386_TLS_LDO_32,
4326                     BFD_RELOC_X86_64_DTPOFF32 },
4327       Imm32 | Imm32S | Imm64 | Disp32 | Disp64 },
4328     { "GOTNTPOFF",{ BFD_RELOC_386_TLS_GOTIE,
4329                     0                         },
4330       0 },
4331     { "INDNTPOFF",{ BFD_RELOC_386_TLS_IE,
4332                     0                         },
4333       0 },
4334     { "GOT",      { BFD_RELOC_386_GOT32,
4335                     BFD_RELOC_X86_64_GOT32    },
4336       Imm32 | Imm32S | Disp32 | Imm64 },
4337     { "TLSDESC",  { BFD_RELOC_386_TLS_GOTDESC,
4338                     BFD_RELOC_X86_64_GOTPC32_TLSDESC },
4339       Imm32 | Imm32S | Disp32 },
4340     { "TLSCALL",  { BFD_RELOC_386_TLS_DESC_CALL,
4341                     BFD_RELOC_X86_64_TLSDESC_CALL },
4342       Imm32 | Imm32S | Disp32 }
4343   };
4344   char *cp;
4345   unsigned int j;
4346
4347   if (!IS_ELF)
4348     return NULL;
4349
4350   for (cp = input_line_pointer; *cp != '@'; cp++)
4351     if (is_end_of_line[(unsigned char) *cp])
4352       return NULL;
4353
4354   for (j = 0; j < sizeof (gotrel) / sizeof (gotrel[0]); j++)
4355     {
4356       int len;
4357
4358       len = strlen (gotrel[j].str);
4359       if (strncasecmp (cp + 1, gotrel[j].str, len) == 0)
4360         {
4361           if (gotrel[j].rel[object_64bit] != 0)
4362             {
4363               int first, second;
4364               char *tmpbuf, *past_reloc;
4365
4366               *reloc = gotrel[j].rel[object_64bit];
4367               if (adjust)
4368                 *adjust = len;
4369
4370               if (types)
4371                 {
4372                   if (flag_code != CODE_64BIT)
4373                     *types = Imm32 | Disp32;
4374                   else
4375                     *types = gotrel[j].types64;
4376                 }
4377
4378               if (GOT_symbol == NULL)
4379                 GOT_symbol = symbol_find_or_make (GLOBAL_OFFSET_TABLE_NAME);
4380
4381               /* Replace the relocation token with ' ', so that
4382                  errors like foo@GOTOFF1 will be detected.  */
4383
4384               /* The length of the first part of our input line.  */
4385               first = cp - input_line_pointer;
4386
4387               /* The second part goes from after the reloc token until
4388                  (and including) an end_of_line char.  Don't use strlen
4389                  here as the end_of_line char may not be a NUL.  */
4390               past_reloc = cp + 1 + len;
4391               for (cp = past_reloc; !is_end_of_line[(unsigned char) *cp++]; )
4392                 ;
4393               second = cp - past_reloc;
4394
4395               /* Allocate and copy string.  The trailing NUL shouldn't
4396                  be necessary, but be safe.  */
4397               tmpbuf = xmalloc (first + second + 2);
4398               memcpy (tmpbuf, input_line_pointer, first);
4399               tmpbuf[first] = ' ';
4400               memcpy (tmpbuf + first + 1, past_reloc, second);
4401               tmpbuf[first + second + 1] = '\0';
4402               return tmpbuf;
4403             }
4404
4405           as_bad (_("@%s reloc is not supported with %d-bit output format"),
4406                   gotrel[j].str, 1 << (5 + object_64bit));
4407           return NULL;
4408         }
4409     }
4410
4411   /* Might be a symbol version string.  Don't as_bad here.  */
4412   return NULL;
4413 }
4414
4415 void
4416 x86_cons (expressionS *exp, int size)
4417 {
4418   if (size == 4 || (object_64bit && size == 8))
4419     {
4420       /* Handle @GOTOFF and the like in an expression.  */
4421       char *save;
4422       char *gotfree_input_line;
4423       int adjust;
4424
4425       save = input_line_pointer;
4426       gotfree_input_line = lex_got (&got_reloc, &adjust, NULL);
4427       if (gotfree_input_line)
4428         input_line_pointer = gotfree_input_line;
4429
4430       expression (exp);
4431
4432       if (gotfree_input_line)
4433         {
4434           /* expression () has merrily parsed up to the end of line,
4435              or a comma - in the wrong buffer.  Transfer how far
4436              input_line_pointer has moved to the right buffer.  */
4437           input_line_pointer = (save
4438                                 + (input_line_pointer - gotfree_input_line)
4439                                 + adjust);
4440           free (gotfree_input_line);
4441         }
4442     }
4443   else
4444     expression (exp);
4445 }
4446 #endif
4447
4448 static void signed_cons (int size)
4449 {
4450   if (flag_code == CODE_64BIT)
4451     cons_sign = 1;
4452   cons (size);
4453   cons_sign = -1;
4454 }
4455
4456 #ifdef TE_PE
4457 static void
4458 pe_directive_secrel (dummy)
4459      int dummy ATTRIBUTE_UNUSED;
4460 {
4461   expressionS exp;
4462
4463   do
4464     {
4465       expression (&exp);
4466       if (exp.X_op == O_symbol)
4467         exp.X_op = O_secrel;
4468
4469       emit_expr (&exp, 4);
4470     }
4471   while (*input_line_pointer++ == ',');
4472
4473   input_line_pointer--;
4474   demand_empty_rest_of_line ();
4475 }
4476 #endif
4477
4478 static int
4479 i386_immediate (char *imm_start)
4480 {
4481   char *save_input_line_pointer;
4482   char *gotfree_input_line;
4483   segT exp_seg = 0;
4484   expressionS *exp;
4485   unsigned int types = ~0U;
4486
4487   if (i.imm_operands == MAX_IMMEDIATE_OPERANDS)
4488     {
4489       as_bad (_("at most %d immediate operands are allowed"),
4490               MAX_IMMEDIATE_OPERANDS);
4491       return 0;
4492     }
4493
4494   exp = &im_expressions[i.imm_operands++];
4495   i.op[this_operand].imms = exp;
4496
4497   if (is_space_char (*imm_start))
4498     ++imm_start;
4499
4500   save_input_line_pointer = input_line_pointer;
4501   input_line_pointer = imm_start;
4502
4503   gotfree_input_line = lex_got (&i.reloc[this_operand], NULL, &types);
4504   if (gotfree_input_line)
4505     input_line_pointer = gotfree_input_line;
4506
4507   exp_seg = expression (exp);
4508
4509   SKIP_WHITESPACE ();
4510   if (*input_line_pointer)
4511     as_bad (_("junk `%s' after expression"), input_line_pointer);
4512
4513   input_line_pointer = save_input_line_pointer;
4514   if (gotfree_input_line)
4515     free (gotfree_input_line);
4516
4517   if (exp->X_op == O_absent || exp->X_op == O_big)
4518     {
4519       /* Missing or bad expr becomes absolute 0.  */
4520       as_bad (_("missing or invalid immediate expression `%s' taken as 0"),
4521               imm_start);
4522       exp->X_op = O_constant;
4523       exp->X_add_number = 0;
4524       exp->X_add_symbol = (symbolS *) 0;
4525       exp->X_op_symbol = (symbolS *) 0;
4526     }
4527   else if (exp->X_op == O_constant)
4528     {
4529       /* Size it properly later.  */
4530       i.types[this_operand] |= Imm64;
4531       /* If BFD64, sign extend val.  */
4532       if (!use_rela_relocations
4533           && (exp->X_add_number & ~(((addressT) 2 << 31) - 1)) == 0)
4534         exp->X_add_number
4535           = (exp->X_add_number ^ ((addressT) 1 << 31)) - ((addressT) 1 << 31);
4536     }
4537 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
4538   else if (OUTPUT_FLAVOR == bfd_target_aout_flavour
4539            && exp_seg != absolute_section
4540            && exp_seg != text_section
4541            && exp_seg != data_section
4542            && exp_seg != bss_section
4543            && exp_seg != undefined_section
4544            && !bfd_is_com_section (exp_seg))
4545     {
4546       as_bad (_("unimplemented segment %s in operand"), exp_seg->name);
4547       return 0;
4548     }
4549 #endif
4550   else if (!intel_syntax && exp->X_op == O_register)
4551     {
4552       as_bad (_("illegal immediate register operand %s"), imm_start);
4553       return 0;
4554     }
4555   else
4556     {
4557       /* This is an address.  The size of the address will be
4558          determined later, depending on destination register,
4559          suffix, or the default for the section.  */
4560       i.types[this_operand] |= Imm8 | Imm16 | Imm32 | Imm32S | Imm64;
4561       i.types[this_operand] &= types;
4562     }
4563
4564   return 1;
4565 }
4566
4567 static char *
4568 i386_scale (char *scale)
4569 {
4570   offsetT val;
4571   char *save = input_line_pointer;
4572
4573   input_line_pointer = scale;
4574   val = get_absolute_expression ();
4575
4576   switch (val)
4577     {
4578     case 1:
4579       i.log2_scale_factor = 0;
4580       break;
4581     case 2:
4582       i.log2_scale_factor = 1;
4583       break;
4584     case 4:
4585       i.log2_scale_factor = 2;
4586       break;
4587     case 8:
4588       i.log2_scale_factor = 3;
4589       break;
4590     default:
4591       {
4592         char sep = *input_line_pointer;
4593
4594         *input_line_pointer = '\0';
4595         as_bad (_("expecting scale factor of 1, 2, 4, or 8: got `%s'"),
4596                 scale);
4597         *input_line_pointer = sep;
4598         input_line_pointer = save;
4599         return NULL;
4600       }
4601     }
4602   if (i.log2_scale_factor != 0 && i.index_reg == 0)
4603     {
4604       as_warn (_("scale factor of %d without an index register"),
4605                1 << i.log2_scale_factor);
4606 #if SCALE1_WHEN_NO_INDEX
4607       i.log2_scale_factor = 0;
4608 #endif
4609     }
4610   scale = input_line_pointer;
4611   input_line_pointer = save;
4612   return scale;
4613 }
4614
4615 static int
4616 i386_displacement (char *disp_start, char *disp_end)
4617 {
4618   expressionS *exp;
4619   segT exp_seg = 0;
4620   char *save_input_line_pointer;
4621   char *gotfree_input_line;
4622   int bigdisp, override;
4623   unsigned int types = Disp;
4624
4625   if (i.disp_operands == MAX_MEMORY_OPERANDS)
4626     {
4627       as_bad (_("at most %d displacement operands are allowed"),
4628               MAX_MEMORY_OPERANDS);
4629       return 0;
4630     }
4631
4632   if ((i.types[this_operand] & JumpAbsolute)
4633       || !(current_templates->start->opcode_modifier & (Jump | JumpDword)))
4634     {
4635       bigdisp = Disp32;
4636       override = (i.prefix[ADDR_PREFIX] != 0);
4637     }
4638   else
4639     {
4640       /* For PC-relative branches, the width of the displacement
4641          is dependent upon data size, not address size.  */
4642       bigdisp = 0;
4643       override = (i.prefix[DATA_PREFIX] != 0);
4644     }
4645   if (flag_code == CODE_64BIT)
4646     {
4647       if (!bigdisp)
4648         bigdisp = ((override || i.suffix == WORD_MNEM_SUFFIX)
4649                    ? Disp16
4650                    : Disp32S | Disp32);
4651       else if (!override)
4652         bigdisp = Disp64 | Disp32S | Disp32;
4653     }
4654   else
4655     {
4656       if (!bigdisp)
4657         {
4658           if (!override)
4659             override = (i.suffix == (flag_code != CODE_16BIT
4660                                      ? WORD_MNEM_SUFFIX
4661                                      : LONG_MNEM_SUFFIX));
4662           bigdisp = Disp32;
4663         }
4664       if ((flag_code == CODE_16BIT) ^ override)
4665         bigdisp = Disp16;
4666     }
4667   i.types[this_operand] |= bigdisp;
4668
4669   exp = &disp_expressions[i.disp_operands];
4670   i.op[this_operand].disps = exp;
4671   i.disp_operands++;
4672   save_input_line_pointer = input_line_pointer;
4673   input_line_pointer = disp_start;
4674   END_STRING_AND_SAVE (disp_end);
4675
4676 #ifndef GCC_ASM_O_HACK
4677 #define GCC_ASM_O_HACK 0
4678 #endif
4679 #if GCC_ASM_O_HACK
4680   END_STRING_AND_SAVE (disp_end + 1);
4681   if ((i.types[this_operand] & BaseIndex) != 0
4682       && displacement_string_end[-1] == '+')
4683     {
4684       /* This hack is to avoid a warning when using the "o"
4685          constraint within gcc asm statements.
4686          For instance:
4687
4688          #define _set_tssldt_desc(n,addr,limit,type) \
4689          __asm__ __volatile__ ( \
4690          "movw %w2,%0\n\t" \
4691          "movw %w1,2+%0\n\t" \
4692          "rorl $16,%1\n\t" \
4693          "movb %b1,4+%0\n\t" \
4694          "movb %4,5+%0\n\t" \
4695          "movb $0,6+%0\n\t" \
4696          "movb %h1,7+%0\n\t" \
4697          "rorl $16,%1" \
4698          : "=o"(*(n)) : "q" (addr), "ri"(limit), "i"(type))
4699
4700          This works great except that the output assembler ends
4701          up looking a bit weird if it turns out that there is
4702          no offset.  You end up producing code that looks like:
4703
4704          #APP
4705          movw $235,(%eax)
4706          movw %dx,2+(%eax)
4707          rorl $16,%edx
4708          movb %dl,4+(%eax)
4709          movb $137,5+(%eax)
4710          movb $0,6+(%eax)
4711          movb %dh,7+(%eax)
4712          rorl $16,%edx
4713          #NO_APP
4714
4715          So here we provide the missing zero.  */
4716
4717       *displacement_string_end = '0';
4718     }
4719 #endif
4720   gotfree_input_line = lex_got (&i.reloc[this_operand], NULL, &types);
4721   if (gotfree_input_line)
4722     input_line_pointer = gotfree_input_line;
4723
4724   exp_seg = expression (exp);
4725
4726   SKIP_WHITESPACE ();
4727   if (*input_line_pointer)
4728     as_bad (_("junk `%s' after expression"), input_line_pointer);
4729 #if GCC_ASM_O_HACK
4730   RESTORE_END_STRING (disp_end + 1);
4731 #endif
4732   RESTORE_END_STRING (disp_end);
4733   input_line_pointer = save_input_line_pointer;
4734   if (gotfree_input_line)
4735     free (gotfree_input_line);
4736
4737   /* We do this to make sure that the section symbol is in
4738      the symbol table.  We will ultimately change the relocation
4739      to be relative to the beginning of the section.  */
4740   if (i.reloc[this_operand] == BFD_RELOC_386_GOTOFF
4741       || i.reloc[this_operand] == BFD_RELOC_X86_64_GOTPCREL
4742       || i.reloc[this_operand] == BFD_RELOC_X86_64_GOTOFF64)
4743     {
4744       if (exp->X_op != O_symbol)
4745         {
4746           as_bad (_("bad expression used with @%s"),
4747                   (i.reloc[this_operand] == BFD_RELOC_X86_64_GOTPCREL
4748                    ? "GOTPCREL"
4749                    : "GOTOFF"));
4750           return 0;
4751         }
4752
4753       if (S_IS_LOCAL (exp->X_add_symbol)
4754           && S_GET_SEGMENT (exp->X_add_symbol) != undefined_section)
4755         section_symbol (S_GET_SEGMENT (exp->X_add_symbol));
4756       exp->X_op = O_subtract;
4757       exp->X_op_symbol = GOT_symbol;
4758       if (i.reloc[this_operand] == BFD_RELOC_X86_64_GOTPCREL)
4759         i.reloc[this_operand] = BFD_RELOC_32_PCREL;
4760       else if (i.reloc[this_operand] == BFD_RELOC_X86_64_GOTOFF64)
4761         i.reloc[this_operand] = BFD_RELOC_64;
4762       else
4763         i.reloc[this_operand] = BFD_RELOC_32;
4764     }
4765
4766   if (exp->X_op == O_absent || exp->X_op == O_big)
4767     {
4768       /* Missing or bad expr becomes absolute 0.  */
4769       as_bad (_("missing or invalid displacement expression `%s' taken as 0"),
4770               disp_start);
4771       exp->X_op = O_constant;
4772       exp->X_add_number = 0;
4773       exp->X_add_symbol = (symbolS *) 0;
4774       exp->X_op_symbol = (symbolS *) 0;
4775     }
4776
4777 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
4778   if (exp->X_op != O_constant
4779       && OUTPUT_FLAVOR == bfd_target_aout_flavour
4780       && exp_seg != absolute_section
4781       && exp_seg != text_section
4782       && exp_seg != data_section
4783       && exp_seg != bss_section
4784       && exp_seg != undefined_section
4785       && !bfd_is_com_section (exp_seg))
4786     {
4787       as_bad (_("unimplemented segment %s in operand"), exp_seg->name);
4788       return 0;
4789     }
4790 #endif
4791
4792   if (!(i.types[this_operand] & ~Disp))
4793     i.types[this_operand] &= types;
4794
4795   return 1;
4796 }
4797
4798 /* Make sure the memory operand we've been dealt is valid.
4799    Return 1 on success, 0 on a failure.  */
4800
4801 static int
4802 i386_index_check (const char *operand_string)
4803 {
4804   int ok;
4805 #if INFER_ADDR_PREFIX
4806   int fudged = 0;
4807
4808  tryprefix:
4809 #endif
4810   ok = 1;
4811   if ((current_templates->start->cpu_flags & CpuSVME)
4812       && current_templates->end[-1].operand_types[0] == AnyMem)
4813     {
4814       /* Memory operands of SVME insns are special in that they only allow
4815          rAX as their memory address and ignore any segment override.  */
4816       unsigned RegXX;
4817
4818       /* SKINIT is even more restrictive: it always requires EAX.  */
4819       if (strcmp (current_templates->start->name, "skinit") == 0)
4820         RegXX = Reg32;
4821       else if (flag_code == CODE_64BIT)
4822         RegXX = i.prefix[ADDR_PREFIX] == 0 ? Reg64 : Reg32;
4823       else
4824         RegXX = ((flag_code == CODE_16BIT) ^ (i.prefix[ADDR_PREFIX] != 0)
4825                  ? Reg16
4826                  : Reg32);
4827       if (!i.base_reg
4828           || !(i.base_reg->reg_type & Acc)
4829           || !(i.base_reg->reg_type & RegXX)
4830           || i.index_reg
4831           || (i.types[0] & Disp))
4832         ok = 0;
4833     }
4834   else if (flag_code == CODE_64BIT)
4835     {
4836       unsigned RegXX = (i.prefix[ADDR_PREFIX] == 0 ? Reg64 : Reg32);
4837
4838       if ((i.base_reg
4839            && ((i.base_reg->reg_type & RegXX) == 0)
4840            && (i.base_reg->reg_type != BaseIndex
4841                || i.index_reg))
4842           || (i.index_reg
4843               && ((i.index_reg->reg_type & (RegXX | BaseIndex))
4844                   != (RegXX | BaseIndex))))
4845         ok = 0;
4846     }
4847   else
4848     {
4849       if ((flag_code == CODE_16BIT) ^ (i.prefix[ADDR_PREFIX] != 0))
4850         {
4851           /* 16bit checks.  */
4852           if ((i.base_reg
4853                && ((i.base_reg->reg_type & (Reg16 | BaseIndex | RegRex))
4854                    != (Reg16 | BaseIndex)))
4855               || (i.index_reg
4856                   && (((i.index_reg->reg_type & (Reg16 | BaseIndex))
4857                        != (Reg16 | BaseIndex))
4858                       || !(i.base_reg
4859                            && i.base_reg->reg_num < 6
4860                            && i.index_reg->reg_num >= 6
4861                            && i.log2_scale_factor == 0))))
4862             ok = 0;
4863         }
4864       else
4865         {
4866           /* 32bit checks.  */
4867           if ((i.base_reg
4868                && (i.base_reg->reg_type & (Reg32 | RegRex)) != Reg32)
4869               || (i.index_reg
4870                   && ((i.index_reg->reg_type & (Reg32 | BaseIndex | RegRex))
4871                       != (Reg32 | BaseIndex))))
4872             ok = 0;
4873         }
4874     }
4875   if (!ok)
4876     {
4877 #if INFER_ADDR_PREFIX
4878       if (i.prefix[ADDR_PREFIX] == 0)
4879         {
4880           i.prefix[ADDR_PREFIX] = ADDR_PREFIX_OPCODE;
4881           i.prefixes += 1;
4882           /* Change the size of any displacement too.  At most one of
4883              Disp16 or Disp32 is set.
4884              FIXME.  There doesn't seem to be any real need for separate
4885              Disp16 and Disp32 flags.  The same goes for Imm16 and Imm32.
4886              Removing them would probably clean up the code quite a lot.  */
4887           if (flag_code != CODE_64BIT
4888               && (i.types[this_operand] & (Disp16 | Disp32)))
4889             i.types[this_operand] ^= (Disp16 | Disp32);
4890           fudged = 1;
4891           goto tryprefix;
4892         }
4893       if (fudged)
4894         as_bad (_("`%s' is not a valid base/index expression"),
4895                 operand_string);
4896       else
4897 #endif
4898         as_bad (_("`%s' is not a valid %s bit base/index expression"),
4899                 operand_string,
4900                 flag_code_names[flag_code]);
4901     }
4902   return ok;
4903 }
4904
4905 /* Parse OPERAND_STRING into the i386_insn structure I.  Returns non-zero
4906    on error.  */
4907
4908 static int
4909 i386_operand (char *operand_string)
4910 {
4911   const reg_entry *r;
4912   char *end_op;
4913   char *op_string = operand_string;
4914
4915   if (is_space_char (*op_string))
4916     ++op_string;
4917
4918   /* We check for an absolute prefix (differentiating,
4919      for example, 'jmp pc_relative_label' from 'jmp *absolute_label'.  */
4920   if (*op_string == ABSOLUTE_PREFIX)
4921     {
4922       ++op_string;
4923       if (is_space_char (*op_string))
4924         ++op_string;
4925       i.types[this_operand] |= JumpAbsolute;
4926     }
4927
4928   /* Check if operand is a register.  */
4929   if ((r = parse_register (op_string, &end_op)) != NULL)
4930     {
4931       /* Check for a segment override by searching for ':' after a
4932          segment register.  */
4933       op_string = end_op;
4934       if (is_space_char (*op_string))
4935         ++op_string;
4936       if (*op_string == ':' && (r->reg_type & (SReg2 | SReg3)))
4937         {
4938           switch (r->reg_num)
4939             {
4940             case 0:
4941               i.seg[i.mem_operands] = &es;
4942               break;
4943             case 1:
4944               i.seg[i.mem_operands] = &cs;
4945               break;
4946             case 2:
4947               i.seg[i.mem_operands] = &ss;
4948               break;
4949             case 3:
4950               i.seg[i.mem_operands] = &ds;
4951               break;
4952             case 4:
4953               i.seg[i.mem_operands] = &fs;
4954               break;
4955             case 5:
4956               i.seg[i.mem_operands] = &gs;
4957               break;
4958             }
4959
4960           /* Skip the ':' and whitespace.  */
4961           ++op_string;
4962           if (is_space_char (*op_string))
4963             ++op_string;
4964
4965           if (!is_digit_char (*op_string)
4966               && !is_identifier_char (*op_string)
4967               && *op_string != '('
4968               && *op_string != ABSOLUTE_PREFIX)
4969             {
4970               as_bad (_("bad memory operand `%s'"), op_string);
4971               return 0;
4972             }
4973           /* Handle case of %es:*foo.  */
4974           if (*op_string == ABSOLUTE_PREFIX)
4975             {
4976               ++op_string;
4977               if (is_space_char (*op_string))
4978                 ++op_string;
4979               i.types[this_operand] |= JumpAbsolute;
4980             }
4981           goto do_memory_reference;
4982         }
4983       if (*op_string)
4984         {
4985           as_bad (_("junk `%s' after register"), op_string);
4986           return 0;
4987         }
4988       i.types[this_operand] |= r->reg_type & ~BaseIndex;
4989       i.op[this_operand].regs = r;
4990       i.reg_operands++;
4991     }
4992   else if (*op_string == REGISTER_PREFIX)
4993     {
4994       as_bad (_("bad register name `%s'"), op_string);
4995       return 0;
4996     }
4997   else if (*op_string == IMMEDIATE_PREFIX)
4998     {
4999       ++op_string;
5000       if (i.types[this_operand] & JumpAbsolute)
5001         {
5002           as_bad (_("immediate operand illegal with absolute jump"));
5003           return 0;
5004         }
5005       if (!i386_immediate (op_string))
5006         return 0;
5007     }
5008   else if (is_digit_char (*op_string)
5009            || is_identifier_char (*op_string)
5010            || *op_string == '(')
5011     {
5012       /* This is a memory reference of some sort.  */
5013       char *base_string;
5014
5015       /* Start and end of displacement string expression (if found).  */
5016       char *displacement_string_start;
5017       char *displacement_string_end;
5018
5019     do_memory_reference:
5020       if ((i.mem_operands == 1
5021            && (current_templates->start->opcode_modifier & IsString) == 0)
5022           || i.mem_operands == 2)
5023         {
5024           as_bad (_("too many memory references for `%s'"),
5025                   current_templates->start->name);
5026           return 0;
5027         }
5028
5029       /* Check for base index form.  We detect the base index form by
5030          looking for an ')' at the end of the operand, searching
5031          for the '(' matching it, and finding a REGISTER_PREFIX or ','
5032          after the '('.  */
5033       base_string = op_string + strlen (op_string);
5034
5035       --base_string;
5036       if (is_space_char (*base_string))
5037         --base_string;
5038
5039       /* If we only have a displacement, set-up for it to be parsed later.  */
5040       displacement_string_start = op_string;
5041       displacement_string_end = base_string + 1;
5042
5043       if (*base_string == ')')
5044         {
5045           char *temp_string;
5046           unsigned int parens_balanced = 1;
5047           /* We've already checked that the number of left & right ()'s are
5048              equal, so this loop will not be infinite.  */
5049           do
5050             {
5051               base_string--;
5052               if (*base_string == ')')
5053                 parens_balanced++;
5054               if (*base_string == '(')
5055                 parens_balanced--;
5056             }
5057           while (parens_balanced);
5058
5059           temp_string = base_string;
5060
5061           /* Skip past '(' and whitespace.  */
5062           ++base_string;
5063           if (is_space_char (*base_string))
5064             ++base_string;
5065
5066           if (*base_string == ','
5067               || ((i.base_reg = parse_register (base_string, &end_op))
5068                   != NULL))
5069             {
5070               displacement_string_end = temp_string;
5071
5072               i.types[this_operand] |= BaseIndex;
5073
5074               if (i.base_reg)
5075                 {
5076                   base_string = end_op;
5077                   if (is_space_char (*base_string))
5078                     ++base_string;
5079                 }
5080
5081               /* There may be an index reg or scale factor here.  */
5082               if (*base_string == ',')
5083                 {
5084                   ++base_string;
5085                   if (is_space_char (*base_string))
5086                     ++base_string;
5087
5088                   if ((i.index_reg = parse_register (base_string, &end_op))
5089                       != NULL)
5090                     {
5091                       base_string = end_op;
5092                       if (is_space_char (*base_string))
5093                         ++base_string;
5094                       if (*base_string == ',')
5095                         {
5096                           ++base_string;
5097                           if (is_space_char (*base_string))
5098                             ++base_string;
5099                         }
5100                       else if (*base_string != ')')
5101                         {
5102                           as_bad (_("expecting `,' or `)' "
5103                                     "after index register in `%s'"),
5104                                   operand_string);
5105                           return 0;
5106                         }
5107                     }
5108                   else if (*base_string == REGISTER_PREFIX)
5109                     {
5110                       as_bad (_("bad register name `%s'"), base_string);
5111                       return 0;
5112                     }
5113
5114                   /* Check for scale factor.  */
5115                   if (*base_string != ')')
5116                     {
5117                       char *end_scale = i386_scale (base_string);
5118
5119                       if (!end_scale)
5120                         return 0;
5121
5122                       base_string = end_scale;
5123                       if (is_space_char (*base_string))
5124                         ++base_string;
5125                       if (*base_string != ')')
5126                         {
5127                           as_bad (_("expecting `)' "
5128                                     "after scale factor in `%s'"),
5129                                   operand_string);
5130                           return 0;
5131                         }
5132                     }
5133                   else if (!i.index_reg)
5134                     {
5135                       as_bad (_("expecting index register or scale factor "
5136                                 "after `,'; got '%c'"),
5137                               *base_string);
5138                       return 0;
5139                     }
5140                 }
5141               else if (*base_string != ')')
5142                 {
5143                   as_bad (_("expecting `,' or `)' "
5144                             "after base register in `%s'"),
5145                           operand_string);
5146                   return 0;
5147                 }
5148             }
5149           else if (*base_string == REGISTER_PREFIX)
5150             {
5151               as_bad (_("bad register name `%s'"), base_string);
5152               return 0;
5153             }
5154         }
5155
5156       /* If there's an expression beginning the operand, parse it,
5157          assuming displacement_string_start and
5158          displacement_string_end are meaningful.  */
5159       if (displacement_string_start != displacement_string_end)
5160         {
5161           if (!i386_displacement (displacement_string_start,
5162                                   displacement_string_end))
5163             return 0;
5164         }
5165
5166       /* Special case for (%dx) while doing input/output op.  */
5167       if (i.base_reg
5168           && i.base_reg->reg_type == (Reg16 | InOutPortReg)
5169           && i.index_reg == 0
5170           && i.log2_scale_factor == 0
5171           && i.seg[i.mem_operands] == 0
5172           && (i.types[this_operand] & Disp) == 0)
5173         {
5174           i.types[this_operand] = InOutPortReg;
5175           return 1;
5176         }
5177
5178       if (i386_index_check (operand_string) == 0)
5179         return 0;
5180       i.mem_operands++;
5181     }
5182   else
5183     {
5184       /* It's not a memory operand; argh!  */
5185       as_bad (_("invalid char %s beginning operand %d `%s'"),
5186               output_invalid (*op_string),
5187               this_operand + 1,
5188               op_string);
5189       return 0;
5190     }
5191   return 1;                     /* Normal return.  */
5192 }
5193 \f
5194 /* md_estimate_size_before_relax()
5195
5196    Called just before relax() for rs_machine_dependent frags.  The x86
5197    assembler uses these frags to handle variable size jump
5198    instructions.
5199
5200    Any symbol that is now undefined will not become defined.
5201    Return the correct fr_subtype in the frag.
5202    Return the initial "guess for variable size of frag" to caller.
5203    The guess is actually the growth beyond the fixed part.  Whatever
5204    we do to grow the fixed or variable part contributes to our
5205    returned value.  */
5206
5207 int
5208 md_estimate_size_before_relax (fragP, segment)
5209      fragS *fragP;
5210      segT segment;
5211 {
5212   /* We've already got fragP->fr_subtype right;  all we have to do is
5213      check for un-relaxable symbols.  On an ELF system, we can't relax
5214      an externally visible symbol, because it may be overridden by a
5215      shared library.  */
5216   if (S_GET_SEGMENT (fragP->fr_symbol) != segment
5217 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
5218       || (IS_ELF
5219           && (S_IS_EXTERNAL (fragP->fr_symbol)
5220               || S_IS_WEAK (fragP->fr_symbol)))
5221 #endif
5222       )
5223     {
5224       /* Symbol is undefined in this segment, or we need to keep a
5225          reloc so that weak symbols can be overridden.  */
5226       int size = (fragP->fr_subtype & CODE16) ? 2 : 4;
5227       enum bfd_reloc_code_real reloc_type;
5228       unsigned char *opcode;
5229       int old_fr_fix;
5230
5231       if (fragP->fr_var != NO_RELOC)
5232         reloc_type = fragP->fr_var;
5233       else if (size == 2)
5234         reloc_type = BFD_RELOC_16_PCREL;
5235       else
5236         reloc_type = BFD_RELOC_32_PCREL;
5237
5238       old_fr_fix = fragP->fr_fix;
5239       opcode = (unsigned char *) fragP->fr_opcode;
5240
5241       switch (TYPE_FROM_RELAX_STATE (fragP->fr_subtype))
5242         {
5243         case UNCOND_JUMP:
5244           /* Make jmp (0xeb) a (d)word displacement jump.  */
5245           opcode[0] = 0xe9;
5246           fragP->fr_fix += size;
5247           fix_new (fragP, old_fr_fix, size,
5248                    fragP->fr_symbol,
5249                    fragP->fr_offset, 1,
5250                    reloc_type);
5251           break;
5252
5253         case COND_JUMP86:
5254           if (size == 2
5255               && (!no_cond_jump_promotion || fragP->fr_var != NO_RELOC))
5256             {
5257               /* Negate the condition, and branch past an
5258                  unconditional jump.  */
5259               opcode[0] ^= 1;
5260               opcode[1] = 3;
5261               /* Insert an unconditional jump.  */
5262               opcode[2] = 0xe9;
5263               /* We added two extra opcode bytes, and have a two byte
5264                  offset.  */
5265               fragP->fr_fix += 2 + 2;
5266               fix_new (fragP, old_fr_fix + 2, 2,
5267                        fragP->fr_symbol,
5268                        fragP->fr_offset, 1,
5269                        reloc_type);
5270               break;
5271             }
5272           /* Fall through.  */
5273
5274         case COND_JUMP:
5275           if (no_cond_jump_promotion && fragP->fr_var == NO_RELOC)
5276             {
5277               fixS *fixP;
5278
5279               fragP->fr_fix += 1;
5280               fixP = fix_new (fragP, old_fr_fix, 1,
5281                               fragP->fr_symbol,
5282                               fragP->fr_offset, 1,
5283                               BFD_RELOC_8_PCREL);
5284               fixP->fx_signed = 1;
5285               break;
5286             }
5287
5288           /* This changes the byte-displacement jump 0x7N
5289              to the (d)word-displacement jump 0x0f,0x8N.  */
5290           opcode[1] = opcode[0] + 0x10;
5291           opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
5292           /* We've added an opcode byte.  */
5293           fragP->fr_fix += 1 + size;
5294           fix_new (fragP, old_fr_fix + 1, size,
5295                    fragP->fr_symbol,
5296                    fragP->fr_offset, 1,
5297                    reloc_type);
5298           break;
5299
5300         default:
5301           BAD_CASE (fragP->fr_subtype);
5302           break;
5303         }
5304       frag_wane (fragP);
5305       return fragP->fr_fix - old_fr_fix;
5306     }
5307
5308   /* Guess size depending on current relax state.  Initially the relax
5309      state will correspond to a short jump and we return 1, because
5310      the variable part of the frag (the branch offset) is one byte
5311      long.  However, we can relax a section more than once and in that
5312      case we must either set fr_subtype back to the unrelaxed state,
5313      or return the value for the appropriate branch.  */
5314   return md_relax_table[fragP->fr_subtype].rlx_length;
5315 }
5316
5317 /* Called after relax() is finished.
5318
5319    In:  Address of frag.
5320         fr_type == rs_machine_dependent.
5321         fr_subtype is what the address relaxed to.
5322
5323    Out: Any fixSs and constants are set up.
5324         Caller will turn frag into a ".space 0".  */
5325
5326 void
5327 md_convert_frag (abfd, sec, fragP)
5328      bfd *abfd ATTRIBUTE_UNUSED;
5329      segT sec ATTRIBUTE_UNUSED;
5330      fragS *fragP;
5331 {
5332   unsigned char *opcode;
5333   unsigned char *where_to_put_displacement = NULL;
5334   offsetT target_address;
5335   offsetT opcode_address;
5336   unsigned int extension = 0;
5337   offsetT displacement_from_opcode_start;
5338
5339   opcode = (unsigned char *) fragP->fr_opcode;
5340
5341   /* Address we want to reach in file space.  */
5342   target_address = S_GET_VALUE (fragP->fr_symbol) + fragP->fr_offset;
5343
5344   /* Address opcode resides at in file space.  */
5345   opcode_address = fragP->fr_address + fragP->fr_fix;
5346
5347   /* Displacement from opcode start to fill into instruction.  */
5348   displacement_from_opcode_start = target_address - opcode_address;
5349
5350   if ((fragP->fr_subtype & BIG) == 0)
5351     {
5352       /* Don't have to change opcode.  */
5353       extension = 1;            /* 1 opcode + 1 displacement  */
5354       where_to_put_displacement = &opcode[1];
5355     }
5356   else
5357     {
5358       if (no_cond_jump_promotion
5359           && TYPE_FROM_RELAX_STATE (fragP->fr_subtype) != UNCOND_JUMP)
5360         as_warn_where (fragP->fr_file, fragP->fr_line,
5361                        _("long jump required"));
5362
5363       switch (fragP->fr_subtype)
5364         {
5365         case ENCODE_RELAX_STATE (UNCOND_JUMP, BIG):
5366           extension = 4;                /* 1 opcode + 4 displacement  */
5367           opcode[0] = 0xe9;
5368           where_to_put_displacement = &opcode[1];
5369           break;
5370
5371         case ENCODE_RELAX_STATE (UNCOND_JUMP, BIG16):
5372           extension = 2;                /* 1 opcode + 2 displacement  */
5373           opcode[0] = 0xe9;
5374           where_to_put_displacement = &opcode[1];
5375           break;
5376
5377         case ENCODE_RELAX_STATE (COND_JUMP, BIG):
5378         case ENCODE_RELAX_STATE (COND_JUMP86, BIG):
5379           extension = 5;                /* 2 opcode + 4 displacement  */
5380           opcode[1] = opcode[0] + 0x10;
5381           opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
5382           where_to_put_displacement = &opcode[2];
5383           break;
5384
5385         case ENCODE_RELAX_STATE (COND_JUMP, BIG16):
5386           extension = 3;                /* 2 opcode + 2 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_JUMP86, BIG16):
5393           extension = 4;
5394           opcode[0] ^= 1;
5395           opcode[1] = 3;
5396           opcode[2] = 0xe9;
5397           where_to_put_displacement = &opcode[3];
5398           break;
5399
5400         default:
5401           BAD_CASE (fragP->fr_subtype);
5402           break;
5403         }
5404     }
5405
5406   /* If size if less then four we are sure that the operand fits,
5407      but if it's 4, then it could be that the displacement is larger
5408      then -/+ 2GB.  */
5409   if (DISP_SIZE_FROM_RELAX_STATE (fragP->fr_subtype) == 4
5410       && object_64bit
5411       && ((addressT) (displacement_from_opcode_start - extension
5412                       + ((addressT) 1 << 31))
5413           > (((addressT) 2 << 31) - 1)))
5414     {
5415       as_bad_where (fragP->fr_file, fragP->fr_line,
5416                     _("jump target out of range"));
5417       /* Make us emit 0.  */
5418       displacement_from_opcode_start = extension;
5419     }
5420   /* Now put displacement after opcode.  */
5421   md_number_to_chars ((char *) where_to_put_displacement,
5422                       (valueT) (displacement_from_opcode_start - extension),
5423                       DISP_SIZE_FROM_RELAX_STATE (fragP->fr_subtype));
5424   fragP->fr_fix += extension;
5425 }
5426 \f
5427 /* Size of byte displacement jmp.  */
5428 int md_short_jump_size = 2;
5429
5430 /* Size of dword displacement jmp.  */
5431 int md_long_jump_size = 5;
5432
5433 void
5434 md_create_short_jump (ptr, from_addr, to_addr, frag, to_symbol)
5435      char *ptr;
5436      addressT from_addr, to_addr;
5437      fragS *frag ATTRIBUTE_UNUSED;
5438      symbolS *to_symbol ATTRIBUTE_UNUSED;
5439 {
5440   offsetT offset;
5441
5442   offset = to_addr - (from_addr + 2);
5443   /* Opcode for byte-disp jump.  */
5444   md_number_to_chars (ptr, (valueT) 0xeb, 1);
5445   md_number_to_chars (ptr + 1, (valueT) offset, 1);
5446 }
5447
5448 void
5449 md_create_long_jump (ptr, from_addr, to_addr, frag, to_symbol)
5450      char *ptr;
5451      addressT from_addr, to_addr;
5452      fragS *frag ATTRIBUTE_UNUSED;
5453      symbolS *to_symbol ATTRIBUTE_UNUSED;
5454 {
5455   offsetT offset;
5456
5457   offset = to_addr - (from_addr + 5);
5458   md_number_to_chars (ptr, (valueT) 0xe9, 1);
5459   md_number_to_chars (ptr + 1, (valueT) offset, 4);
5460 }
5461 \f
5462 /* Apply a fixup (fixS) to segment data, once it has been determined
5463    by our caller that we have all the info we need to fix it up.
5464
5465    On the 386, immediates, displacements, and data pointers are all in
5466    the same (little-endian) format, so we don't need to care about which
5467    we are handling.  */
5468
5469 void
5470 md_apply_fix (fixP, valP, seg)
5471      /* The fix we're to put in.  */
5472      fixS *fixP;
5473      /* Pointer to the value of the bits.  */
5474      valueT *valP;
5475      /* Segment fix is from.  */
5476      segT seg ATTRIBUTE_UNUSED;
5477 {
5478   char *p = fixP->fx_where + fixP->fx_frag->fr_literal;
5479   valueT value = *valP;
5480
5481 #if !defined (TE_Mach)
5482   if (fixP->fx_pcrel)
5483     {
5484       switch (fixP->fx_r_type)
5485         {
5486         default:
5487           break;
5488
5489         case BFD_RELOC_64:
5490           fixP->fx_r_type = BFD_RELOC_64_PCREL;
5491           break;
5492         case BFD_RELOC_32:
5493         case BFD_RELOC_X86_64_32S:
5494           fixP->fx_r_type = BFD_RELOC_32_PCREL;
5495           break;
5496         case BFD_RELOC_16:
5497           fixP->fx_r_type = BFD_RELOC_16_PCREL;
5498           break;
5499         case BFD_RELOC_8:
5500           fixP->fx_r_type = BFD_RELOC_8_PCREL;
5501           break;
5502         }
5503     }
5504
5505   if (fixP->fx_addsy != NULL
5506       && (fixP->fx_r_type == BFD_RELOC_32_PCREL
5507           || fixP->fx_r_type == BFD_RELOC_64_PCREL
5508           || fixP->fx_r_type == BFD_RELOC_16_PCREL
5509           || fixP->fx_r_type == BFD_RELOC_8_PCREL)
5510       && !use_rela_relocations)
5511     {
5512       /* This is a hack.  There should be a better way to handle this.
5513          This covers for the fact that bfd_install_relocation will
5514          subtract the current location (for partial_inplace, PC relative
5515          relocations); see more below.  */
5516 #ifndef OBJ_AOUT
5517       if (IS_ELF
5518 #ifdef TE_PE
5519           || OUTPUT_FLAVOR == bfd_target_coff_flavour
5520 #endif
5521           )
5522         value += fixP->fx_where + fixP->fx_frag->fr_address;
5523 #endif
5524 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
5525       if (IS_ELF)
5526         {
5527           segT sym_seg = S_GET_SEGMENT (fixP->fx_addsy);
5528
5529           if ((sym_seg == seg
5530                || (symbol_section_p (fixP->fx_addsy)
5531                    && sym_seg != absolute_section))
5532               && !generic_force_reloc (fixP))
5533             {
5534               /* Yes, we add the values in twice.  This is because
5535                  bfd_install_relocation subtracts them out again.  I think
5536                  bfd_install_relocation is broken, but I don't dare change
5537                  it.  FIXME.  */
5538               value += fixP->fx_where + fixP->fx_frag->fr_address;
5539             }
5540         }
5541 #endif
5542 #if defined (OBJ_COFF) && defined (TE_PE)
5543       /* For some reason, the PE format does not store a
5544          section address offset for a PC relative symbol.  */
5545       if (S_GET_SEGMENT (fixP->fx_addsy) != seg
5546           || S_IS_WEAK (fixP->fx_addsy))
5547         value += md_pcrel_from (fixP);
5548 #endif
5549     }
5550
5551   /* Fix a few things - the dynamic linker expects certain values here,
5552      and we must not disappoint it.  */
5553 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
5554   if (IS_ELF && fixP->fx_addsy)
5555     switch (fixP->fx_r_type)
5556       {
5557       case BFD_RELOC_386_PLT32:
5558       case BFD_RELOC_X86_64_PLT32:
5559         /* Make the jump instruction point to the address of the operand.  At
5560            runtime we merely add the offset to the actual PLT entry.  */
5561         value = -4;
5562         break;
5563
5564       case BFD_RELOC_386_TLS_GD:
5565       case BFD_RELOC_386_TLS_LDM:
5566       case BFD_RELOC_386_TLS_IE_32:
5567       case BFD_RELOC_386_TLS_IE:
5568       case BFD_RELOC_386_TLS_GOTIE:
5569       case BFD_RELOC_386_TLS_GOTDESC:
5570       case BFD_RELOC_X86_64_TLSGD:
5571       case BFD_RELOC_X86_64_TLSLD:
5572       case BFD_RELOC_X86_64_GOTTPOFF:
5573       case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
5574         value = 0; /* Fully resolved at runtime.  No addend.  */
5575         /* Fallthrough */
5576       case BFD_RELOC_386_TLS_LE:
5577       case BFD_RELOC_386_TLS_LDO_32:
5578       case BFD_RELOC_386_TLS_LE_32:
5579       case BFD_RELOC_X86_64_DTPOFF32:
5580       case BFD_RELOC_X86_64_DTPOFF64:
5581       case BFD_RELOC_X86_64_TPOFF32:
5582       case BFD_RELOC_X86_64_TPOFF64:
5583         S_SET_THREAD_LOCAL (fixP->fx_addsy);
5584         break;
5585
5586       case BFD_RELOC_386_TLS_DESC_CALL:
5587       case BFD_RELOC_X86_64_TLSDESC_CALL:
5588         value = 0; /* Fully resolved at runtime.  No addend.  */
5589         S_SET_THREAD_LOCAL (fixP->fx_addsy);
5590         fixP->fx_done = 0;
5591         return;
5592
5593       case BFD_RELOC_386_GOT32:
5594       case BFD_RELOC_X86_64_GOT32:
5595         value = 0; /* Fully resolved at runtime.  No addend.  */
5596         break;
5597
5598       case BFD_RELOC_VTABLE_INHERIT:
5599       case BFD_RELOC_VTABLE_ENTRY:
5600         fixP->fx_done = 0;
5601         return;
5602
5603       default:
5604         break;
5605       }
5606 #endif /* defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)  */
5607   *valP = value;
5608 #endif /* !defined (TE_Mach)  */
5609
5610   /* Are we finished with this relocation now?  */
5611   if (fixP->fx_addsy == NULL)
5612     fixP->fx_done = 1;
5613   else if (use_rela_relocations)
5614     {
5615       fixP->fx_no_overflow = 1;
5616       /* Remember value for tc_gen_reloc.  */
5617       fixP->fx_addnumber = value;
5618       value = 0;
5619     }
5620
5621   md_number_to_chars (p, value, fixP->fx_size);
5622 }
5623 \f
5624 #define MAX_LITTLENUMS 6
5625
5626 /* Turn the string pointed to by litP into a floating point constant
5627    of type TYPE, and emit the appropriate bytes.  The number of
5628    LITTLENUMS emitted is stored in *SIZEP.  An error message is
5629    returned, or NULL on OK.  */
5630
5631 char *
5632 md_atof (type, litP, sizeP)
5633      int type;
5634      char *litP;
5635      int *sizeP;
5636 {
5637   int prec;
5638   LITTLENUM_TYPE words[MAX_LITTLENUMS];
5639   LITTLENUM_TYPE *wordP;
5640   char *t;
5641
5642   switch (type)
5643     {
5644     case 'f':
5645     case 'F':
5646       prec = 2;
5647       break;
5648
5649     case 'd':
5650     case 'D':
5651       prec = 4;
5652       break;
5653
5654     case 'x':
5655     case 'X':
5656       prec = 5;
5657       break;
5658
5659     default:
5660       *sizeP = 0;
5661       return _("Bad call to md_atof ()");
5662     }
5663   t = atof_ieee (input_line_pointer, type, words);
5664   if (t)
5665     input_line_pointer = t;
5666
5667   *sizeP = prec * sizeof (LITTLENUM_TYPE);
5668   /* This loops outputs the LITTLENUMs in REVERSE order; in accord with
5669      the bigendian 386.  */
5670   for (wordP = words + prec - 1; prec--;)
5671     {
5672       md_number_to_chars (litP, (valueT) (*wordP--), sizeof (LITTLENUM_TYPE));
5673       litP += sizeof (LITTLENUM_TYPE);
5674     }
5675   return 0;
5676 }
5677 \f
5678 static char output_invalid_buf[sizeof (unsigned char) * 2 + 6];
5679
5680 static char *
5681 output_invalid (int c)
5682 {
5683   if (ISPRINT (c))
5684     snprintf (output_invalid_buf, sizeof (output_invalid_buf),
5685               "'%c'", c);
5686   else
5687     snprintf (output_invalid_buf, sizeof (output_invalid_buf),
5688               "(0x%x)", (unsigned char) c);
5689   return output_invalid_buf;
5690 }
5691
5692 /* REG_STRING starts *before* REGISTER_PREFIX.  */
5693
5694 static const reg_entry *
5695 parse_real_register (char *reg_string, char **end_op)
5696 {
5697   char *s = reg_string;
5698   char *p;
5699   char reg_name_given[MAX_REG_NAME_SIZE + 1];
5700   const reg_entry *r;
5701
5702   /* Skip possible REGISTER_PREFIX and possible whitespace.  */
5703   if (*s == REGISTER_PREFIX)
5704     ++s;
5705
5706   if (is_space_char (*s))
5707     ++s;
5708
5709   p = reg_name_given;
5710   while ((*p++ = register_chars[(unsigned char) *s]) != '\0')
5711     {
5712       if (p >= reg_name_given + MAX_REG_NAME_SIZE)
5713         return (const reg_entry *) NULL;
5714       s++;
5715     }
5716
5717   /* For naked regs, make sure that we are not dealing with an identifier.
5718      This prevents confusing an identifier like `eax_var' with register
5719      `eax'.  */
5720   if (allow_naked_reg && identifier_chars[(unsigned char) *s])
5721     return (const reg_entry *) NULL;
5722
5723   *end_op = s;
5724
5725   r = (const reg_entry *) hash_find (reg_hash, reg_name_given);
5726
5727   /* Handle floating point regs, allowing spaces in the (i) part.  */
5728   if (r == i386_regtab /* %st is first entry of table  */)
5729     {
5730       if (is_space_char (*s))
5731         ++s;
5732       if (*s == '(')
5733         {
5734           ++s;
5735           if (is_space_char (*s))
5736             ++s;
5737           if (*s >= '0' && *s <= '7')
5738             {
5739               r = &i386_float_regtab[*s - '0'];
5740               ++s;
5741               if (is_space_char (*s))
5742                 ++s;
5743               if (*s == ')')
5744                 {
5745                   *end_op = s + 1;
5746                   return r;
5747                 }
5748             }
5749           /* We have "%st(" then garbage.  */
5750           return (const reg_entry *) NULL;
5751         }
5752     }
5753
5754   if (r != NULL
5755       && ((r->reg_flags & (RegRex64 | RegRex)) | (r->reg_type & Reg64)) != 0
5756       && (r->reg_type != Control || !(cpu_arch_flags & CpuSledgehammer))
5757       && flag_code != CODE_64BIT)
5758     return (const reg_entry *) NULL;
5759
5760   return r;
5761 }
5762
5763 /* REG_STRING starts *before* REGISTER_PREFIX.  */
5764
5765 static const reg_entry *
5766 parse_register (char *reg_string, char **end_op)
5767 {
5768   const reg_entry *r;
5769
5770   if (*reg_string == REGISTER_PREFIX || allow_naked_reg)
5771     r = parse_real_register (reg_string, end_op);
5772   else
5773     r = NULL;
5774   if (!r)
5775     {
5776       char *save = input_line_pointer;
5777       char c;
5778       symbolS *symbolP;
5779
5780       input_line_pointer = reg_string;
5781       c = get_symbol_end ();
5782       symbolP = symbol_find (reg_string);
5783       if (symbolP && S_GET_SEGMENT (symbolP) == reg_section)
5784         {
5785           const expressionS *e = symbol_get_value_expression (symbolP);
5786
5787           know (e->X_op == O_register);
5788           know (e->X_add_number >= 0
5789                 && (valueT) e->X_add_number < ARRAY_SIZE (i386_regtab));
5790           r = i386_regtab + e->X_add_number;
5791           *end_op = input_line_pointer;
5792         }
5793       *input_line_pointer = c;
5794       input_line_pointer = save;
5795     }
5796   return r;
5797 }
5798
5799 int
5800 i386_parse_name (char *name, expressionS *e, char *nextcharP)
5801 {
5802   const reg_entry *r;
5803   char *end = input_line_pointer;
5804
5805   *end = *nextcharP;
5806   r = parse_register (name, &input_line_pointer);
5807   if (r && end <= input_line_pointer)
5808     {
5809       *nextcharP = *input_line_pointer;
5810       *input_line_pointer = 0;
5811       e->X_op = O_register;
5812       e->X_add_number = r - i386_regtab;
5813       return 1;
5814     }
5815   input_line_pointer = end;
5816   *end = 0;
5817   return 0;
5818 }
5819
5820 void
5821 md_operand (expressionS *e)
5822 {
5823   if (*input_line_pointer == REGISTER_PREFIX)
5824     {
5825       char *end;
5826       const reg_entry *r = parse_real_register (input_line_pointer, &end);
5827
5828       if (r)
5829         {
5830           e->X_op = O_register;
5831           e->X_add_number = r - i386_regtab;
5832           input_line_pointer = end;
5833         }
5834     }
5835 }
5836
5837 \f
5838 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
5839 const char *md_shortopts = "kVQ:sqn";
5840 #else
5841 const char *md_shortopts = "qn";
5842 #endif
5843
5844 #define OPTION_32 (OPTION_MD_BASE + 0)
5845 #define OPTION_64 (OPTION_MD_BASE + 1)
5846 #define OPTION_DIVIDE (OPTION_MD_BASE + 2)
5847 #define OPTION_MARCH (OPTION_MD_BASE + 3)
5848 #define OPTION_MTUNE (OPTION_MD_BASE + 4)
5849
5850 struct option md_longopts[] =
5851 {
5852   {"32", no_argument, NULL, OPTION_32},
5853 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) || defined(TE_PEP)
5854   {"64", no_argument, NULL, OPTION_64},
5855 #endif
5856   {"divide", no_argument, NULL, OPTION_DIVIDE},
5857   {"march", required_argument, NULL, OPTION_MARCH},
5858   {"mtune", required_argument, NULL, OPTION_MTUNE},
5859   {NULL, no_argument, NULL, 0}
5860 };
5861 size_t md_longopts_size = sizeof (md_longopts);
5862
5863 int
5864 md_parse_option (int c, char *arg)
5865 {
5866   unsigned int i;
5867
5868   switch (c)
5869     {
5870     case 'n':
5871       optimize_align_code = 0;
5872       break;
5873
5874     case 'q':
5875       quiet_warnings = 1;
5876       break;
5877
5878 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
5879       /* -Qy, -Qn: SVR4 arguments controlling whether a .comment section
5880          should be emitted or not.  FIXME: Not implemented.  */
5881     case 'Q':
5882       break;
5883
5884       /* -V: SVR4 argument to print version ID.  */
5885     case 'V':
5886       print_version_id ();
5887       break;
5888
5889       /* -k: Ignore for FreeBSD compatibility.  */
5890     case 'k':
5891       break;
5892
5893     case 's':
5894       /* -s: On i386 Solaris, this tells the native assembler to use
5895          .stab instead of .stab.excl.  We always use .stab anyhow.  */
5896       break;
5897 #endif
5898 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) || defined(TE_PEP)
5899     case OPTION_64:
5900       {
5901         const char **list, **l;
5902
5903         list = bfd_target_list ();
5904         for (l = list; *l != NULL; l++)
5905           if (CONST_STRNEQ (*l, "elf64-x86-64")
5906               || strcmp (*l, "coff-x86-64") == 0
5907               || strcmp (*l, "pe-x86-64") == 0
5908               || strcmp (*l, "pei-x86-64") == 0)
5909             {
5910               default_arch = "x86_64";
5911               break;
5912             }
5913         if (*l == NULL)
5914           as_fatal (_("No compiled in support for x86_64"));
5915         free (list);
5916       }
5917       break;
5918 #endif
5919
5920     case OPTION_32:
5921       default_arch = "i386";
5922       break;
5923
5924     case OPTION_DIVIDE:
5925 #ifdef SVR4_COMMENT_CHARS
5926       {
5927         char *n, *t;
5928         const char *s;
5929
5930         n = (char *) xmalloc (strlen (i386_comment_chars) + 1);
5931         t = n;
5932         for (s = i386_comment_chars; *s != '\0'; s++)
5933           if (*s != '/')
5934             *t++ = *s;
5935         *t = '\0';
5936         i386_comment_chars = n;
5937       }
5938 #endif
5939       break;
5940
5941     case OPTION_MARCH:
5942       if (*arg == '.')
5943         as_fatal (_("Invalid -march= option: `%s'"), arg);
5944       for (i = 0; i < ARRAY_SIZE (cpu_arch); i++)
5945         {
5946           if (strcmp (arg, cpu_arch [i].name) == 0)
5947             {
5948               cpu_arch_isa = cpu_arch[i].type;
5949               cpu_arch_isa_flags = cpu_arch[i].flags;
5950               if (!cpu_arch_tune_set)
5951                 {
5952                   cpu_arch_tune = cpu_arch_isa;
5953                   cpu_arch_tune_flags = cpu_arch_isa_flags;
5954                 }
5955               break;
5956             }
5957         }
5958       if (i >= ARRAY_SIZE (cpu_arch))
5959         as_fatal (_("Invalid -march= option: `%s'"), arg);
5960       break;
5961
5962     case OPTION_MTUNE:
5963       if (*arg == '.')
5964         as_fatal (_("Invalid -mtune= option: `%s'"), arg);
5965       for (i = 0; i < ARRAY_SIZE (cpu_arch); i++)
5966         {
5967           if (strcmp (arg, cpu_arch [i].name) == 0)
5968             {
5969               cpu_arch_tune_set = 1;
5970               cpu_arch_tune = cpu_arch [i].type;
5971               cpu_arch_tune_flags = cpu_arch[i].flags;
5972               break;
5973             }
5974         }
5975       if (i >= ARRAY_SIZE (cpu_arch))
5976         as_fatal (_("Invalid -mtune= option: `%s'"), arg);
5977       break;
5978
5979     default:
5980       return 0;
5981     }
5982   return 1;
5983 }
5984
5985 void
5986 md_show_usage (stream)
5987      FILE *stream;
5988 {
5989 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
5990   fprintf (stream, _("\
5991   -Q                      ignored\n\
5992   -V                      print assembler version number\n\
5993   -k                      ignored\n"));
5994 #endif
5995   fprintf (stream, _("\
5996   -n                      Do not optimize code alignment\n\
5997   -q                      quieten some warnings\n"));
5998 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
5999   fprintf (stream, _("\
6000   -s                      ignored\n"));
6001 #endif
6002 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) || defined(TE_PEP)
6003   fprintf (stream, _("\
6004   --32/--64               generate 32bit/64bit code\n"));
6005 #endif
6006 #ifdef SVR4_COMMENT_CHARS
6007   fprintf (stream, _("\
6008   --divide                do not treat `/' as a comment character\n"));
6009 #else
6010   fprintf (stream, _("\
6011   --divide                ignored\n"));
6012 #endif
6013   fprintf (stream, _("\
6014   -march=CPU/-mtune=CPU   generate code/optimize for CPU, where CPU is one of:\n\
6015                            i386, i486, pentium, pentiumpro, pentium4, nocona,\n\
6016                            core, core2, k6, athlon, k8, generic32, generic64\n"));
6017
6018 }
6019
6020 #if defined(TE_PEP)
6021 const char *
6022 x86_64_target_format (void)
6023 {
6024   if (strcmp (default_arch, "x86_64") == 0)
6025     {
6026       set_code_flag (CODE_64BIT);
6027       return COFF_TARGET_FORMAT;
6028     }
6029   else if (strcmp (default_arch, "i386") == 0)
6030     {
6031       set_code_flag (CODE_32BIT);
6032       return "coff-i386";
6033     }
6034
6035   as_fatal (_("Unknown architecture"));
6036   return NULL;
6037 }
6038 #endif
6039
6040 #if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \
6041      || defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF))
6042
6043 /* Pick the target format to use.  */
6044
6045 const char *
6046 i386_target_format (void)
6047 {
6048   if (!strcmp (default_arch, "x86_64"))
6049     {
6050       set_code_flag (CODE_64BIT);
6051       if (cpu_arch_isa_flags == 0)
6052         cpu_arch_isa_flags = Cpu186|Cpu286|Cpu386|Cpu486
6053                              |Cpu586|Cpu686|CpuP4|CpuMMX|CpuMMX2
6054                              |CpuSSE|CpuSSE2;
6055       if (cpu_arch_tune_flags == 0)
6056         cpu_arch_tune_flags = Cpu186|Cpu286|Cpu386|Cpu486
6057                               |Cpu586|Cpu686|CpuP4|CpuMMX|CpuMMX2
6058                               |CpuSSE|CpuSSE2;
6059     }
6060   else if (!strcmp (default_arch, "i386"))
6061     {
6062       set_code_flag (CODE_32BIT);
6063       if (cpu_arch_isa_flags == 0)
6064         cpu_arch_isa_flags = Cpu186|Cpu286|Cpu386;
6065       if (cpu_arch_tune_flags == 0)
6066         cpu_arch_tune_flags = Cpu186|Cpu286|Cpu386;
6067     }
6068   else
6069     as_fatal (_("Unknown architecture"));
6070   switch (OUTPUT_FLAVOR)
6071     {
6072 #ifdef OBJ_MAYBE_AOUT
6073     case bfd_target_aout_flavour:
6074       return AOUT_TARGET_FORMAT;
6075 #endif
6076 #ifdef OBJ_MAYBE_COFF
6077     case bfd_target_coff_flavour:
6078       return "coff-i386";
6079 #endif
6080 #if defined (OBJ_MAYBE_ELF) || defined (OBJ_ELF)
6081     case bfd_target_elf_flavour:
6082       {
6083         if (flag_code == CODE_64BIT)
6084           {
6085             object_64bit = 1;
6086             use_rela_relocations = 1;
6087           }
6088         return flag_code == CODE_64BIT ? ELF_TARGET_FORMAT64 : ELF_TARGET_FORMAT;
6089       }
6090 #endif
6091     default:
6092       abort ();
6093       return NULL;
6094     }
6095 }
6096
6097 #endif /* OBJ_MAYBE_ more than one  */
6098
6099 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF))
6100 void
6101 i386_elf_emit_arch_note (void)
6102 {
6103   if (IS_ELF && cpu_arch_name != NULL)
6104     {
6105       char *p;
6106       asection *seg = now_seg;
6107       subsegT subseg = now_subseg;
6108       Elf_Internal_Note i_note;
6109       Elf_External_Note e_note;
6110       asection *note_secp;
6111       int len;
6112
6113       /* Create the .note section.  */
6114       note_secp = subseg_new (".note", 0);
6115       bfd_set_section_flags (stdoutput,
6116                              note_secp,
6117                              SEC_HAS_CONTENTS | SEC_READONLY);
6118
6119       /* Process the arch string.  */
6120       len = strlen (cpu_arch_name);
6121
6122       i_note.namesz = len + 1;
6123       i_note.descsz = 0;
6124       i_note.type = NT_ARCH;
6125       p = frag_more (sizeof (e_note.namesz));
6126       md_number_to_chars (p, (valueT) i_note.namesz, sizeof (e_note.namesz));
6127       p = frag_more (sizeof (e_note.descsz));
6128       md_number_to_chars (p, (valueT) i_note.descsz, sizeof (e_note.descsz));
6129       p = frag_more (sizeof (e_note.type));
6130       md_number_to_chars (p, (valueT) i_note.type, sizeof (e_note.type));
6131       p = frag_more (len + 1);
6132       strcpy (p, cpu_arch_name);
6133
6134       frag_align (2, 0, 0);
6135
6136       subseg_set (seg, subseg);
6137     }
6138 }
6139 #endif
6140 \f
6141 symbolS *
6142 md_undefined_symbol (name)
6143      char *name;
6144 {
6145   if (name[0] == GLOBAL_OFFSET_TABLE_NAME[0]
6146       && name[1] == GLOBAL_OFFSET_TABLE_NAME[1]
6147       && name[2] == GLOBAL_OFFSET_TABLE_NAME[2]
6148       && strcmp (name, GLOBAL_OFFSET_TABLE_NAME) == 0)
6149     {
6150       if (!GOT_symbol)
6151         {
6152           if (symbol_find (name))
6153             as_bad (_("GOT already in symbol table"));
6154           GOT_symbol = symbol_new (name, undefined_section,
6155                                    (valueT) 0, &zero_address_frag);
6156         };
6157       return GOT_symbol;
6158     }
6159   return 0;
6160 }
6161
6162 /* Round up a section size to the appropriate boundary.  */
6163
6164 valueT
6165 md_section_align (segment, size)
6166      segT segment ATTRIBUTE_UNUSED;
6167      valueT size;
6168 {
6169 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
6170   if (OUTPUT_FLAVOR == bfd_target_aout_flavour)
6171     {
6172       /* For a.out, force the section size to be aligned.  If we don't do
6173          this, BFD will align it for us, but it will not write out the
6174          final bytes of the section.  This may be a bug in BFD, but it is
6175          easier to fix it here since that is how the other a.out targets
6176          work.  */
6177       int align;
6178
6179       align = bfd_get_section_alignment (stdoutput, segment);
6180       size = ((size + (1 << align) - 1) & ((valueT) -1 << align));
6181     }
6182 #endif
6183
6184   return size;
6185 }
6186
6187 /* On the i386, PC-relative offsets are relative to the start of the
6188    next instruction.  That is, the address of the offset, plus its
6189    size, since the offset is always the last part of the insn.  */
6190
6191 long
6192 md_pcrel_from (fixS *fixP)
6193 {
6194   return fixP->fx_size + fixP->fx_where + fixP->fx_frag->fr_address;
6195 }
6196
6197 #ifndef I386COFF
6198
6199 static void
6200 s_bss (int ignore ATTRIBUTE_UNUSED)
6201 {
6202   int temp;
6203
6204 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
6205   if (IS_ELF)
6206     obj_elf_section_change_hook ();
6207 #endif
6208   temp = get_absolute_expression ();
6209   subseg_set (bss_section, (subsegT) temp);
6210   demand_empty_rest_of_line ();
6211 }
6212
6213 #endif
6214
6215 void
6216 i386_validate_fix (fixS *fixp)
6217 {
6218   if (fixp->fx_subsy && fixp->fx_subsy == GOT_symbol)
6219     {
6220       if (fixp->fx_r_type == BFD_RELOC_32_PCREL)
6221         {
6222           if (!object_64bit)
6223             abort ();
6224           fixp->fx_r_type = BFD_RELOC_X86_64_GOTPCREL;
6225         }
6226       else
6227         {
6228           if (!object_64bit)
6229             fixp->fx_r_type = BFD_RELOC_386_GOTOFF;
6230           else
6231             fixp->fx_r_type = BFD_RELOC_X86_64_GOTOFF64;
6232         }
6233       fixp->fx_subsy = 0;
6234     }
6235 }
6236
6237 arelent *
6238 tc_gen_reloc (section, fixp)
6239      asection *section ATTRIBUTE_UNUSED;
6240      fixS *fixp;
6241 {
6242   arelent *rel;
6243   bfd_reloc_code_real_type code;
6244
6245   switch (fixp->fx_r_type)
6246     {
6247     case BFD_RELOC_X86_64_PLT32:
6248     case BFD_RELOC_X86_64_GOT32:
6249     case BFD_RELOC_X86_64_GOTPCREL:
6250     case BFD_RELOC_386_PLT32:
6251     case BFD_RELOC_386_GOT32:
6252     case BFD_RELOC_386_GOTOFF:
6253     case BFD_RELOC_386_GOTPC:
6254     case BFD_RELOC_386_TLS_GD:
6255     case BFD_RELOC_386_TLS_LDM:
6256     case BFD_RELOC_386_TLS_LDO_32:
6257     case BFD_RELOC_386_TLS_IE_32:
6258     case BFD_RELOC_386_TLS_IE:
6259     case BFD_RELOC_386_TLS_GOTIE:
6260     case BFD_RELOC_386_TLS_LE_32:
6261     case BFD_RELOC_386_TLS_LE:
6262     case BFD_RELOC_386_TLS_GOTDESC:
6263     case BFD_RELOC_386_TLS_DESC_CALL:
6264     case BFD_RELOC_X86_64_TLSGD:
6265     case BFD_RELOC_X86_64_TLSLD:
6266     case BFD_RELOC_X86_64_DTPOFF32:
6267     case BFD_RELOC_X86_64_DTPOFF64:
6268     case BFD_RELOC_X86_64_GOTTPOFF:
6269     case BFD_RELOC_X86_64_TPOFF32:
6270     case BFD_RELOC_X86_64_TPOFF64:
6271     case BFD_RELOC_X86_64_GOTOFF64:
6272     case BFD_RELOC_X86_64_GOTPC32:
6273     case BFD_RELOC_X86_64_GOT64:
6274     case BFD_RELOC_X86_64_GOTPCREL64:
6275     case BFD_RELOC_X86_64_GOTPC64:
6276     case BFD_RELOC_X86_64_GOTPLT64:
6277     case BFD_RELOC_X86_64_PLTOFF64:
6278     case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
6279     case BFD_RELOC_X86_64_TLSDESC_CALL:
6280     case BFD_RELOC_RVA:
6281     case BFD_RELOC_VTABLE_ENTRY:
6282     case BFD_RELOC_VTABLE_INHERIT:
6283 #ifdef TE_PE
6284     case BFD_RELOC_32_SECREL:
6285 #endif
6286       code = fixp->fx_r_type;
6287       break;
6288     case BFD_RELOC_X86_64_32S:
6289       if (!fixp->fx_pcrel)
6290         {
6291           /* Don't turn BFD_RELOC_X86_64_32S into BFD_RELOC_32.  */
6292           code = fixp->fx_r_type;
6293           break;
6294         }
6295     default:
6296       if (fixp->fx_pcrel)
6297         {
6298           switch (fixp->fx_size)
6299             {
6300             default:
6301               as_bad_where (fixp->fx_file, fixp->fx_line,
6302                             _("can not do %d byte pc-relative relocation"),
6303                             fixp->fx_size);
6304               code = BFD_RELOC_32_PCREL;
6305               break;
6306             case 1: code = BFD_RELOC_8_PCREL;  break;
6307             case 2: code = BFD_RELOC_16_PCREL; break;
6308             case 4: code = BFD_RELOC_32_PCREL; break;
6309 #ifdef BFD64
6310             case 8: code = BFD_RELOC_64_PCREL; break;
6311 #endif
6312             }
6313         }
6314       else
6315         {
6316           switch (fixp->fx_size)
6317             {
6318             default:
6319               as_bad_where (fixp->fx_file, fixp->fx_line,
6320                             _("can not do %d byte relocation"),
6321                             fixp->fx_size);
6322               code = BFD_RELOC_32;
6323               break;
6324             case 1: code = BFD_RELOC_8;  break;
6325             case 2: code = BFD_RELOC_16; break;
6326             case 4: code = BFD_RELOC_32; break;
6327 #ifdef BFD64
6328             case 8: code = BFD_RELOC_64; break;
6329 #endif
6330             }
6331         }
6332       break;
6333     }
6334
6335   if ((code == BFD_RELOC_32
6336        || code == BFD_RELOC_32_PCREL
6337        || code == BFD_RELOC_X86_64_32S)
6338       && GOT_symbol
6339       && fixp->fx_addsy == GOT_symbol)
6340     {
6341       if (!object_64bit)
6342         code = BFD_RELOC_386_GOTPC;
6343       else
6344         code = BFD_RELOC_X86_64_GOTPC32;
6345     }
6346   if ((code == BFD_RELOC_64 || code == BFD_RELOC_64_PCREL)
6347       && GOT_symbol
6348       && fixp->fx_addsy == GOT_symbol)
6349     {
6350       code = BFD_RELOC_X86_64_GOTPC64;
6351     }
6352
6353   rel = (arelent *) xmalloc (sizeof (arelent));
6354   rel->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
6355   *rel->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
6356
6357   rel->address = fixp->fx_frag->fr_address + fixp->fx_where;
6358
6359   if (!use_rela_relocations)
6360     {
6361       /* HACK: Since i386 ELF uses Rel instead of Rela, encode the
6362          vtable entry to be used in the relocation's section offset.  */
6363       if (fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
6364         rel->address = fixp->fx_offset;
6365
6366       rel->addend = 0;
6367     }
6368   /* Use the rela in 64bit mode.  */
6369   else
6370     {
6371       if (!fixp->fx_pcrel)
6372         rel->addend = fixp->fx_offset;
6373       else
6374         switch (code)
6375           {
6376           case BFD_RELOC_X86_64_PLT32:
6377           case BFD_RELOC_X86_64_GOT32:
6378           case BFD_RELOC_X86_64_GOTPCREL:
6379           case BFD_RELOC_X86_64_TLSGD:
6380           case BFD_RELOC_X86_64_TLSLD:
6381           case BFD_RELOC_X86_64_GOTTPOFF:
6382           case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
6383           case BFD_RELOC_X86_64_TLSDESC_CALL:
6384             rel->addend = fixp->fx_offset - fixp->fx_size;
6385             break;
6386           default:
6387             rel->addend = (section->vma
6388                            - fixp->fx_size
6389                            + fixp->fx_addnumber
6390                            + md_pcrel_from (fixp));
6391             break;
6392           }
6393     }
6394
6395   rel->howto = bfd_reloc_type_lookup (stdoutput, code);
6396   if (rel->howto == NULL)
6397     {
6398       as_bad_where (fixp->fx_file, fixp->fx_line,
6399                     _("cannot represent relocation type %s"),
6400                     bfd_get_reloc_code_name (code));
6401       /* Set howto to a garbage value so that we can keep going.  */
6402       rel->howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_32);
6403       assert (rel->howto != NULL);
6404     }
6405
6406   return rel;
6407 }
6408
6409 \f
6410 /* Parse operands using Intel syntax. This implements a recursive descent
6411    parser based on the BNF grammar published in Appendix B of the MASM 6.1
6412    Programmer's Guide.
6413
6414    FIXME: We do not recognize the full operand grammar defined in the MASM
6415           documentation.  In particular, all the structure/union and
6416           high-level macro operands are missing.
6417
6418    Uppercase words are terminals, lower case words are non-terminals.
6419    Objects surrounded by double brackets '[[' ']]' are optional. Vertical
6420    bars '|' denote choices. Most grammar productions are implemented in
6421    functions called 'intel_<production>'.
6422
6423    Initial production is 'expr'.
6424
6425     addOp               + | -
6426
6427     alpha               [a-zA-Z]
6428
6429     binOp               & | AND | \| | OR | ^ | XOR
6430
6431     byteRegister        AL | AH | BL | BH | CL | CH | DL | DH
6432
6433     constant            digits [[ radixOverride ]]
6434
6435     dataType            BYTE | WORD | DWORD | FWORD | QWORD | TBYTE | OWORD | XMMWORD
6436
6437     digits              decdigit
6438                         | digits decdigit
6439                         | digits hexdigit
6440
6441     decdigit            [0-9]
6442
6443     e04                 e04 addOp e05
6444                         | e05
6445
6446     e05                 e05 binOp e06
6447                         | e06
6448
6449     e06                 e06 mulOp e09
6450                         | e09
6451
6452     e09                 OFFSET e10
6453                         | SHORT e10
6454                         | + e10
6455                         | - e10
6456                         | ~ e10
6457                         | NOT e10
6458                         | e09 PTR e10
6459                         | e09 : e10
6460                         | e10
6461
6462     e10                 e10 [ expr ]
6463                         | e11
6464
6465     e11                 ( expr )
6466                         | [ expr ]
6467                         | constant
6468                         | dataType
6469                         | id
6470                         | $
6471                         | register
6472
6473  => expr                expr cmpOp e04
6474                         | e04
6475
6476     gpRegister          AX | EAX | BX | EBX | CX | ECX | DX | EDX
6477                         | BP | EBP | SP | ESP | DI | EDI | SI | ESI
6478
6479     hexdigit            a | b | c | d | e | f
6480                         | A | B | C | D | E | F
6481
6482     id                  alpha
6483                         | id alpha
6484                         | id decdigit
6485
6486     mulOp               * | / | % | MOD | << | SHL | >> | SHR
6487
6488     quote               " | '
6489
6490     register            specialRegister
6491                         | gpRegister
6492                         | byteRegister
6493
6494     segmentRegister     CS | DS | ES | FS | GS | SS
6495
6496     specialRegister     CR0 | CR2 | CR3 | CR4
6497                         | DR0 | DR1 | DR2 | DR3 | DR6 | DR7
6498                         | TR3 | TR4 | TR5 | TR6 | TR7
6499
6500     We simplify the grammar in obvious places (e.g., register parsing is
6501     done by calling parse_register) and eliminate immediate left recursion
6502     to implement a recursive-descent parser.
6503
6504     expr        e04 expr'
6505
6506     expr'       cmpOp e04 expr'
6507                 | Empty
6508
6509     e04         e05 e04'
6510
6511     e04'        addOp e05 e04'
6512                 | Empty
6513
6514     e05         e06 e05'
6515
6516     e05'        binOp e06 e05'
6517                 | Empty
6518
6519     e06         e09 e06'
6520
6521     e06'        mulOp e09 e06'
6522                 | Empty
6523
6524     e09         OFFSET e10 e09'
6525                 | SHORT e10'
6526                 | + e10'
6527                 | - e10'
6528                 | ~ e10'
6529                 | NOT e10'
6530                 | e10 e09'
6531
6532     e09'        PTR e10 e09'
6533                 | : e10 e09'
6534                 | Empty
6535
6536     e10         e11 e10'
6537
6538     e10'        [ expr ] e10'
6539                 | Empty
6540
6541     e11         ( expr )
6542                 | [ expr ]
6543                 | BYTE
6544                 | WORD
6545                 | DWORD
6546                 | FWORD
6547                 | QWORD
6548                 | TBYTE
6549                 | OWORD
6550                 | XMMWORD
6551                 | .
6552                 | $
6553                 | register
6554                 | id
6555                 | constant  */
6556
6557 /* Parsing structure for the intel syntax parser. Used to implement the
6558    semantic actions for the operand grammar.  */
6559 struct intel_parser_s
6560   {
6561     char *op_string;            /* The string being parsed.  */
6562     int got_a_float;            /* Whether the operand is a float.  */
6563     int op_modifier;            /* Operand modifier.  */
6564     int is_mem;                 /* 1 if operand is memory reference.  */
6565     int in_offset;              /* >=1 if parsing operand of offset.  */
6566     int in_bracket;             /* >=1 if parsing operand in brackets.  */
6567     const reg_entry *reg;       /* Last register reference found.  */
6568     char *disp;                 /* Displacement string being built.  */
6569     char *next_operand;         /* Resume point when splitting operands.  */
6570   };
6571
6572 static struct intel_parser_s intel_parser;
6573
6574 /* Token structure for parsing intel syntax.  */
6575 struct intel_token
6576   {
6577     int code;                   /* Token code.  */
6578     const reg_entry *reg;       /* Register entry for register tokens.  */
6579     char *str;                  /* String representation.  */
6580   };
6581
6582 static struct intel_token cur_token, prev_token;
6583
6584 /* Token codes for the intel parser. Since T_SHORT is already used
6585    by COFF, undefine it first to prevent a warning.  */
6586 #define T_NIL           -1
6587 #define T_CONST         1
6588 #define T_REG           2
6589 #define T_BYTE          3
6590 #define T_WORD          4
6591 #define T_DWORD         5
6592 #define T_FWORD         6
6593 #define T_QWORD         7
6594 #define T_TBYTE         8
6595 #define T_XMMWORD       9
6596 #undef  T_SHORT
6597 #define T_SHORT         10
6598 #define T_OFFSET        11
6599 #define T_PTR           12
6600 #define T_ID            13
6601 #define T_SHL           14
6602 #define T_SHR           15
6603
6604 /* Prototypes for intel parser functions.  */
6605 static int intel_match_token (int);
6606 static void intel_putback_token (void);
6607 static void intel_get_token (void);
6608 static int intel_expr (void);
6609 static int intel_e04 (void);
6610 static int intel_e05 (void);
6611 static int intel_e06 (void);
6612 static int intel_e09 (void);
6613 static int intel_e10 (void);
6614 static int intel_e11 (void);
6615
6616 static int
6617 i386_intel_operand (char *operand_string, int got_a_float)
6618 {
6619   int ret;
6620   char *p;
6621
6622   p = intel_parser.op_string = xstrdup (operand_string);
6623   intel_parser.disp = (char *) xmalloc (strlen (operand_string) + 1);
6624
6625   for (;;)
6626     {
6627       /* Initialize token holders.  */
6628       cur_token.code = prev_token.code = T_NIL;
6629       cur_token.reg = prev_token.reg = NULL;
6630       cur_token.str = prev_token.str = NULL;
6631
6632       /* Initialize parser structure.  */
6633       intel_parser.got_a_float = got_a_float;
6634       intel_parser.op_modifier = 0;
6635       intel_parser.is_mem = 0;
6636       intel_parser.in_offset = 0;
6637       intel_parser.in_bracket = 0;
6638       intel_parser.reg = NULL;
6639       intel_parser.disp[0] = '\0';
6640       intel_parser.next_operand = NULL;
6641
6642       /* Read the first token and start the parser.  */
6643       intel_get_token ();
6644       ret = intel_expr ();
6645
6646       if (!ret)
6647         break;
6648
6649       if (cur_token.code != T_NIL)
6650         {
6651           as_bad (_("invalid operand for '%s' ('%s' unexpected)"),
6652                   current_templates->start->name, cur_token.str);
6653           ret = 0;
6654         }
6655       /* If we found a memory reference, hand it over to i386_displacement
6656          to fill in the rest of the operand fields.  */
6657       else if (intel_parser.is_mem)
6658         {
6659           if ((i.mem_operands == 1
6660                && (current_templates->start->opcode_modifier & IsString) == 0)
6661               || i.mem_operands == 2)
6662             {
6663               as_bad (_("too many memory references for '%s'"),
6664                       current_templates->start->name);
6665               ret = 0;
6666             }
6667           else
6668             {
6669               char *s = intel_parser.disp;
6670               i.mem_operands++;
6671
6672               if (!quiet_warnings && intel_parser.is_mem < 0)
6673                 /* See the comments in intel_bracket_expr.  */
6674                 as_warn (_("Treating `%s' as memory reference"), operand_string);
6675
6676               /* Add the displacement expression.  */
6677               if (*s != '\0')
6678                 ret = i386_displacement (s, s + strlen (s));
6679               if (ret)
6680                 {
6681                   /* Swap base and index in 16-bit memory operands like
6682                      [si+bx]. Since i386_index_check is also used in AT&T
6683                      mode we have to do that here.  */
6684                   if (i.base_reg
6685                       && i.index_reg
6686                       && (i.base_reg->reg_type & Reg16)
6687                       && (i.index_reg->reg_type & Reg16)
6688                       && i.base_reg->reg_num >= 6
6689                       && i.index_reg->reg_num < 6)
6690                     {
6691                       const reg_entry *base = i.index_reg;
6692
6693                       i.index_reg = i.base_reg;
6694                       i.base_reg = base;
6695                     }
6696                   ret = i386_index_check (operand_string);
6697                 }
6698             }
6699         }
6700
6701       /* Constant and OFFSET expressions are handled by i386_immediate.  */
6702       else if ((intel_parser.op_modifier & (1 << T_OFFSET))
6703                || intel_parser.reg == NULL)
6704         ret = i386_immediate (intel_parser.disp);
6705
6706       if (intel_parser.next_operand && this_operand >= MAX_OPERANDS - 1)
6707         ret = 0;
6708       if (!ret || !intel_parser.next_operand)
6709         break;
6710       intel_parser.op_string = intel_parser.next_operand;
6711       this_operand = i.operands++;
6712     }
6713
6714   free (p);
6715   free (intel_parser.disp);
6716
6717   return ret;
6718 }
6719
6720 #define NUM_ADDRESS_REGS (!!i.base_reg + !!i.index_reg)
6721
6722 /* expr e04 expr'
6723
6724    expr'  cmpOp e04 expr'
6725         | Empty  */
6726 static int
6727 intel_expr (void)
6728 {
6729   /* XXX Implement the comparison operators.  */
6730   return intel_e04 ();
6731 }
6732
6733 /* e04  e05 e04'
6734
6735    e04' addOp e05 e04'
6736         | Empty  */
6737 static int
6738 intel_e04 (void)
6739 {
6740   int nregs = -1;
6741
6742   for (;;)
6743     {
6744       if (!intel_e05())
6745         return 0;
6746
6747       if (nregs >= 0 && NUM_ADDRESS_REGS > nregs)
6748         i.base_reg = i386_regtab + REGNAM_AL; /* al is invalid as base */
6749
6750       if (cur_token.code == '+')
6751         nregs = -1;
6752       else if (cur_token.code == '-')
6753         nregs = NUM_ADDRESS_REGS;
6754       else
6755         return 1;
6756
6757       strcat (intel_parser.disp, cur_token.str);
6758       intel_match_token (cur_token.code);
6759     }
6760 }
6761
6762 /* e05  e06 e05'
6763
6764    e05' binOp e06 e05'
6765         | Empty  */
6766 static int
6767 intel_e05 (void)
6768 {
6769   int nregs = ~NUM_ADDRESS_REGS;
6770
6771   for (;;)
6772     {
6773       if (!intel_e06())
6774         return 0;
6775
6776       if (cur_token.code == '&'
6777           || cur_token.code == '|'
6778           || cur_token.code == '^')
6779         {
6780           char str[2];
6781
6782           str[0] = cur_token.code;
6783           str[1] = 0;
6784           strcat (intel_parser.disp, str);
6785         }
6786       else
6787         break;
6788
6789       intel_match_token (cur_token.code);
6790
6791       if (nregs < 0)
6792         nregs = ~nregs;
6793     }
6794   if (nregs >= 0 && NUM_ADDRESS_REGS > nregs)
6795     i.base_reg = i386_regtab + REGNAM_AL + 1; /* cl is invalid as base */
6796   return 1;
6797 }
6798
6799 /* e06  e09 e06'
6800
6801    e06' mulOp e09 e06'
6802         | Empty  */
6803 static int
6804 intel_e06 (void)
6805 {
6806   int nregs = ~NUM_ADDRESS_REGS;
6807
6808   for (;;)
6809     {
6810       if (!intel_e09())
6811         return 0;
6812
6813       if (cur_token.code == '*'
6814           || cur_token.code == '/'
6815           || cur_token.code == '%')
6816         {
6817           char str[2];
6818
6819           str[0] = cur_token.code;
6820           str[1] = 0;
6821           strcat (intel_parser.disp, str);
6822         }
6823       else if (cur_token.code == T_SHL)
6824         strcat (intel_parser.disp, "<<");
6825       else if (cur_token.code == T_SHR)
6826         strcat (intel_parser.disp, ">>");
6827       else
6828         break;
6829
6830       intel_match_token (cur_token.code);
6831
6832       if (nregs < 0)
6833         nregs = ~nregs;
6834     }
6835   if (nregs >= 0 && NUM_ADDRESS_REGS > nregs)
6836     i.base_reg = i386_regtab + REGNAM_AL + 2; /* dl is invalid as base */
6837   return 1;
6838 }
6839
6840 /* e09  OFFSET e09
6841         | SHORT e09
6842         | + e09
6843         | - e09
6844         | ~ e09
6845         | NOT e09
6846         | e10 e09'
6847
6848    e09' PTR e10 e09'
6849         | : e10 e09'
6850         | Empty */
6851 static int
6852 intel_e09 (void)
6853 {
6854   int nregs = ~NUM_ADDRESS_REGS;
6855   int in_offset = 0;
6856
6857   for (;;)
6858     {
6859       /* Don't consume constants here.  */
6860       if (cur_token.code == '+' || cur_token.code == '-')
6861         {
6862           /* Need to look one token ahead - if the next token
6863              is a constant, the current token is its sign.  */
6864           int next_code;
6865
6866           intel_match_token (cur_token.code);
6867           next_code = cur_token.code;
6868           intel_putback_token ();
6869           if (next_code == T_CONST)
6870             break;
6871         }
6872
6873       /* e09  OFFSET e09  */
6874       if (cur_token.code == T_OFFSET)
6875         {
6876           if (!in_offset++)
6877             ++intel_parser.in_offset;
6878         }
6879
6880       /* e09  SHORT e09  */
6881       else if (cur_token.code == T_SHORT)
6882         intel_parser.op_modifier |= 1 << T_SHORT;
6883
6884       /* e09  + e09  */
6885       else if (cur_token.code == '+')
6886         strcat (intel_parser.disp, "+");
6887
6888       /* e09  - e09
6889               | ~ e09
6890               | NOT e09  */
6891       else if (cur_token.code == '-' || cur_token.code == '~')
6892         {
6893           char str[2];
6894
6895           if (nregs < 0)
6896             nregs = ~nregs;
6897           str[0] = cur_token.code;
6898           str[1] = 0;
6899           strcat (intel_parser.disp, str);
6900         }
6901
6902       /* e09  e10 e09'  */
6903       else
6904         break;
6905
6906       intel_match_token (cur_token.code);
6907     }
6908
6909   for (;;)
6910     {
6911       if (!intel_e10 ())
6912         return 0;
6913
6914       /* e09'  PTR e10 e09' */
6915       if (cur_token.code == T_PTR)
6916         {
6917           char suffix;
6918
6919           if (prev_token.code == T_BYTE)
6920             suffix = BYTE_MNEM_SUFFIX;
6921
6922           else if (prev_token.code == T_WORD)
6923             {
6924               if (current_templates->start->name[0] == 'l'
6925                   && current_templates->start->name[2] == 's'
6926                   && current_templates->start->name[3] == 0)
6927                 suffix = BYTE_MNEM_SUFFIX; /* so it will cause an error */
6928               else if (intel_parser.got_a_float == 2)   /* "fi..." */
6929                 suffix = SHORT_MNEM_SUFFIX;
6930               else
6931                 suffix = WORD_MNEM_SUFFIX;
6932             }
6933
6934           else if (prev_token.code == T_DWORD)
6935             {
6936               if (current_templates->start->name[0] == 'l'
6937                   && current_templates->start->name[2] == 's'
6938                   && current_templates->start->name[3] == 0)
6939                 suffix = WORD_MNEM_SUFFIX;
6940               else if (flag_code == CODE_16BIT
6941                        && (current_templates->start->opcode_modifier
6942                            & (Jump | JumpDword)))
6943                 suffix = LONG_DOUBLE_MNEM_SUFFIX;
6944               else if (intel_parser.got_a_float == 1)   /* "f..." */
6945                 suffix = SHORT_MNEM_SUFFIX;
6946               else
6947                 suffix = LONG_MNEM_SUFFIX;
6948             }
6949
6950           else if (prev_token.code == T_FWORD)
6951             {
6952               if (current_templates->start->name[0] == 'l'
6953                   && current_templates->start->name[2] == 's'
6954                   && current_templates->start->name[3] == 0)
6955                 suffix = LONG_MNEM_SUFFIX;
6956               else if (!intel_parser.got_a_float)
6957                 {
6958                   if (flag_code == CODE_16BIT)
6959                     add_prefix (DATA_PREFIX_OPCODE);
6960                   suffix = LONG_DOUBLE_MNEM_SUFFIX;
6961                 }
6962               else
6963                 suffix = BYTE_MNEM_SUFFIX; /* so it will cause an error */
6964             }
6965
6966           else if (prev_token.code == T_QWORD)
6967             {
6968               if (intel_parser.got_a_float == 1)        /* "f..." */
6969                 suffix = LONG_MNEM_SUFFIX;
6970               else
6971                 suffix = QWORD_MNEM_SUFFIX;
6972             }
6973
6974           else if (prev_token.code == T_TBYTE)
6975             {
6976               if (intel_parser.got_a_float == 1)
6977                 suffix = LONG_DOUBLE_MNEM_SUFFIX;
6978               else
6979                 suffix = BYTE_MNEM_SUFFIX; /* so it will cause an error */
6980             }
6981
6982           else if (prev_token.code == T_XMMWORD)
6983             {
6984               /* XXX ignored for now, but accepted since gcc uses it */
6985               suffix = 0;
6986             }
6987
6988           else
6989             {
6990               as_bad (_("Unknown operand modifier `%s'"), prev_token.str);
6991               return 0;
6992             }
6993
6994           /* Operands for jump/call using 'ptr' notation denote absolute
6995              addresses.  */
6996           if (current_templates->start->opcode_modifier & (Jump | JumpDword))
6997             i.types[this_operand] |= JumpAbsolute;
6998
6999           if (current_templates->start->base_opcode == 0x8d /* lea */)
7000             ;
7001           else if (!i.suffix)
7002             i.suffix = suffix;
7003           else if (i.suffix != suffix)
7004             {
7005               as_bad (_("Conflicting operand modifiers"));
7006               return 0;
7007             }
7008
7009         }
7010
7011       /* e09'  : e10 e09'  */
7012       else if (cur_token.code == ':')
7013         {
7014           if (prev_token.code != T_REG)
7015             {
7016               /* While {call,jmp} SSSS:OOOO is MASM syntax only when SSSS is a
7017                  segment/group identifier (which we don't have), using comma
7018                  as the operand separator there is even less consistent, since
7019                  there all branches only have a single operand.  */
7020               if (this_operand != 0
7021                   || intel_parser.in_offset
7022                   || intel_parser.in_bracket
7023                   || (!(current_templates->start->opcode_modifier
7024                         & (Jump|JumpDword|JumpInterSegment))
7025                       && !(current_templates->start->operand_types[0]
7026                            & JumpAbsolute)))
7027                 return intel_match_token (T_NIL);
7028               /* Remember the start of the 2nd operand and terminate 1st
7029                  operand here.
7030                  XXX This isn't right, yet (when SSSS:OOOO is right operand of
7031                  another expression), but it gets at least the simplest case
7032                  (a plain number or symbol on the left side) right.  */
7033               intel_parser.next_operand = intel_parser.op_string;
7034               *--intel_parser.op_string = '\0';
7035               return intel_match_token (':');
7036             }
7037         }
7038
7039       /* e09'  Empty  */
7040       else
7041         break;
7042
7043       intel_match_token (cur_token.code);
7044
7045     }
7046
7047   if (in_offset)
7048     {
7049       --intel_parser.in_offset;
7050       if (nregs < 0)
7051         nregs = ~nregs;
7052       if (NUM_ADDRESS_REGS > nregs)
7053         {
7054           as_bad (_("Invalid operand to `OFFSET'"));
7055           return 0;
7056         }
7057       intel_parser.op_modifier |= 1 << T_OFFSET;
7058     }
7059
7060   if (nregs >= 0 && NUM_ADDRESS_REGS > nregs)
7061     i.base_reg = i386_regtab + REGNAM_AL + 3; /* bl is invalid as base */
7062   return 1;
7063 }
7064
7065 static int
7066 intel_bracket_expr (void)
7067 {
7068   int was_offset = intel_parser.op_modifier & (1 << T_OFFSET);
7069   const char *start = intel_parser.op_string;
7070   int len;
7071
7072   if (i.op[this_operand].regs)
7073     return intel_match_token (T_NIL);
7074
7075   intel_match_token ('[');
7076
7077   /* Mark as a memory operand only if it's not already known to be an
7078      offset expression.  If it's an offset expression, we need to keep
7079      the brace in.  */
7080   if (!intel_parser.in_offset)
7081     {
7082       ++intel_parser.in_bracket;
7083
7084       /* Operands for jump/call inside brackets denote absolute addresses.  */
7085       if (current_templates->start->opcode_modifier & (Jump | JumpDword))
7086         i.types[this_operand] |= JumpAbsolute;
7087
7088       /* Unfortunately gas always diverged from MASM in a respect that can't
7089          be easily fixed without risking to break code sequences likely to be
7090          encountered (the testsuite even check for this): MASM doesn't consider
7091          an expression inside brackets unconditionally as a memory reference.
7092          When that is e.g. a constant, an offset expression, or the sum of the
7093          two, this is still taken as a constant load. gas, however, always
7094          treated these as memory references. As a compromise, we'll try to make
7095          offset expressions inside brackets work the MASM way (since that's
7096          less likely to be found in real world code), but make constants alone
7097          continue to work the traditional gas way. In either case, issue a
7098          warning.  */
7099       intel_parser.op_modifier &= ~was_offset;
7100     }
7101   else
7102     strcat (intel_parser.disp, "[");
7103
7104   /* Add a '+' to the displacement string if necessary.  */
7105   if (*intel_parser.disp != '\0'
7106       && *(intel_parser.disp + strlen (intel_parser.disp) - 1) != '+')
7107     strcat (intel_parser.disp, "+");
7108
7109   if (intel_expr ()
7110       && (len = intel_parser.op_string - start - 1,
7111           intel_match_token (']')))
7112     {
7113       /* Preserve brackets when the operand is an offset expression.  */
7114       if (intel_parser.in_offset)
7115         strcat (intel_parser.disp, "]");
7116       else
7117         {
7118           --intel_parser.in_bracket;
7119           if (i.base_reg || i.index_reg)
7120             intel_parser.is_mem = 1;
7121           if (!intel_parser.is_mem)
7122             {
7123               if (!(intel_parser.op_modifier & (1 << T_OFFSET)))
7124                 /* Defer the warning until all of the operand was parsed.  */
7125                 intel_parser.is_mem = -1;
7126               else if (!quiet_warnings)
7127                 as_warn (_("`[%.*s]' taken to mean just `%.*s'"),
7128                          len, start, len, start);
7129             }
7130         }
7131       intel_parser.op_modifier |= was_offset;
7132
7133       return 1;
7134     }
7135   return 0;
7136 }
7137
7138 /* e10  e11 e10'
7139
7140    e10' [ expr ] e10'
7141         | Empty  */
7142 static int
7143 intel_e10 (void)
7144 {
7145   if (!intel_e11 ())
7146     return 0;
7147
7148   while (cur_token.code == '[')
7149     {
7150       if (!intel_bracket_expr ())
7151         return 0;
7152     }
7153
7154   return 1;
7155 }
7156
7157 /* e11  ( expr )
7158         | [ expr ]
7159         | BYTE
7160         | WORD
7161         | DWORD
7162         | FWORD
7163         | QWORD
7164         | TBYTE
7165         | OWORD
7166         | XMMWORD
7167         | $
7168         | .
7169         | register
7170         | id
7171         | constant  */
7172 static int
7173 intel_e11 (void)
7174 {
7175   switch (cur_token.code)
7176     {
7177     /* e11  ( expr ) */
7178     case '(':
7179       intel_match_token ('(');
7180       strcat (intel_parser.disp, "(");
7181
7182       if (intel_expr () && intel_match_token (')'))
7183         {
7184           strcat (intel_parser.disp, ")");
7185           return 1;
7186         }
7187       return 0;
7188
7189     /* e11  [ expr ] */
7190     case '[':
7191       return intel_bracket_expr ();
7192
7193     /* e11  $
7194             | .  */
7195     case '.':
7196       strcat (intel_parser.disp, cur_token.str);
7197       intel_match_token (cur_token.code);
7198
7199       /* Mark as a memory operand only if it's not already known to be an
7200          offset expression.  */
7201       if (!intel_parser.in_offset)
7202         intel_parser.is_mem = 1;
7203
7204       return 1;
7205
7206     /* e11  register  */
7207     case T_REG:
7208       {
7209         const reg_entry *reg = intel_parser.reg = cur_token.reg;
7210
7211         intel_match_token (T_REG);
7212
7213         /* Check for segment change.  */
7214         if (cur_token.code == ':')
7215           {
7216             if (!(reg->reg_type & (SReg2 | SReg3)))
7217               {
7218                 as_bad (_("`%s' is not a valid segment register"),
7219                         reg->reg_name);
7220                 return 0;
7221               }
7222             else if (i.seg[i.mem_operands])
7223               as_warn (_("Extra segment override ignored"));
7224             else
7225               {
7226                 if (!intel_parser.in_offset)
7227                   intel_parser.is_mem = 1;
7228                 switch (reg->reg_num)
7229                   {
7230                   case 0:
7231                     i.seg[i.mem_operands] = &es;
7232                     break;
7233                   case 1:
7234                     i.seg[i.mem_operands] = &cs;
7235                     break;
7236                   case 2:
7237                     i.seg[i.mem_operands] = &ss;
7238                     break;
7239                   case 3:
7240                     i.seg[i.mem_operands] = &ds;
7241                     break;
7242                   case 4:
7243                     i.seg[i.mem_operands] = &fs;
7244                     break;
7245                   case 5:
7246                     i.seg[i.mem_operands] = &gs;
7247                     break;
7248                   }
7249               }
7250           }
7251
7252         /* Not a segment register. Check for register scaling.  */
7253         else if (cur_token.code == '*')
7254           {
7255             if (!intel_parser.in_bracket)
7256               {
7257                 as_bad (_("Register scaling only allowed in memory operands"));
7258                 return 0;
7259               }
7260
7261             if (reg->reg_type & Reg16) /* Disallow things like [si*1]. */
7262               reg = i386_regtab + REGNAM_AX + 4; /* sp is invalid as index */
7263             else if (i.index_reg)
7264               reg = i386_regtab + REGNAM_EAX + 4; /* esp is invalid as index */
7265
7266             /* What follows must be a valid scale.  */
7267             intel_match_token ('*');
7268             i.index_reg = reg;
7269             i.types[this_operand] |= BaseIndex;
7270
7271             /* Set the scale after setting the register (otherwise,
7272                i386_scale will complain)  */
7273             if (cur_token.code == '+' || cur_token.code == '-')
7274               {
7275                 char *str, sign = cur_token.code;
7276                 intel_match_token (cur_token.code);
7277                 if (cur_token.code != T_CONST)
7278                   {
7279                     as_bad (_("Syntax error: Expecting a constant, got `%s'"),
7280                             cur_token.str);
7281                     return 0;
7282                   }
7283                 str = (char *) xmalloc (strlen (cur_token.str) + 2);
7284                 strcpy (str + 1, cur_token.str);
7285                 *str = sign;
7286                 if (!i386_scale (str))
7287                   return 0;
7288                 free (str);
7289               }
7290             else if (!i386_scale (cur_token.str))
7291               return 0;
7292             intel_match_token (cur_token.code);
7293           }
7294
7295         /* No scaling. If this is a memory operand, the register is either a
7296            base register (first occurrence) or an index register (second
7297            occurrence).  */
7298         else if (intel_parser.in_bracket)
7299           {
7300
7301             if (!i.base_reg)
7302               i.base_reg = reg;
7303             else if (!i.index_reg)
7304               i.index_reg = reg;
7305             else
7306               {
7307                 as_bad (_("Too many register references in memory operand"));
7308                 return 0;
7309               }
7310
7311             i.types[this_operand] |= BaseIndex;
7312           }
7313
7314         /* It's neither base nor index.  */
7315         else if (!intel_parser.in_offset && !intel_parser.is_mem)
7316           {
7317             i.types[this_operand] |= reg->reg_type & ~BaseIndex;
7318             i.op[this_operand].regs = reg;
7319             i.reg_operands++;
7320           }
7321         else
7322           {
7323             as_bad (_("Invalid use of register"));
7324             return 0;
7325           }
7326
7327         /* Since registers are not part of the displacement string (except
7328            when we're parsing offset operands), we may need to remove any
7329            preceding '+' from the displacement string.  */
7330         if (*intel_parser.disp != '\0'
7331             && !intel_parser.in_offset)
7332           {
7333             char *s = intel_parser.disp;
7334             s += strlen (s) - 1;
7335             if (*s == '+')
7336               *s = '\0';
7337           }
7338
7339         return 1;
7340       }
7341
7342     /* e11  BYTE
7343             | WORD
7344             | DWORD
7345             | FWORD
7346             | QWORD
7347             | TBYTE
7348             | OWORD
7349             | XMMWORD  */
7350     case T_BYTE:
7351     case T_WORD:
7352     case T_DWORD:
7353     case T_FWORD:
7354     case T_QWORD:
7355     case T_TBYTE:
7356     case T_XMMWORD:
7357       intel_match_token (cur_token.code);
7358
7359       if (cur_token.code == T_PTR)
7360         return 1;
7361
7362       /* It must have been an identifier.  */
7363       intel_putback_token ();
7364       cur_token.code = T_ID;
7365       /* FALLTHRU */
7366
7367     /* e11  id
7368             | constant  */
7369     case T_ID:
7370       if (!intel_parser.in_offset && intel_parser.is_mem <= 0)
7371         {
7372           symbolS *symbolP;
7373
7374           /* The identifier represents a memory reference only if it's not
7375              preceded by an offset modifier and if it's not an equate.  */
7376           symbolP = symbol_find(cur_token.str);
7377           if (!symbolP || S_GET_SEGMENT(symbolP) != absolute_section)
7378             intel_parser.is_mem = 1;
7379         }
7380         /* FALLTHRU */
7381
7382     case T_CONST:
7383     case '-':
7384     case '+':
7385       {
7386         char *save_str, sign = 0;
7387
7388         /* Allow constants that start with `+' or `-'.  */
7389         if (cur_token.code == '-' || cur_token.code == '+')
7390           {
7391             sign = cur_token.code;
7392             intel_match_token (cur_token.code);
7393             if (cur_token.code != T_CONST)
7394               {
7395                 as_bad (_("Syntax error: Expecting a constant, got `%s'"),
7396                         cur_token.str);
7397                 return 0;
7398               }
7399           }
7400
7401         save_str = (char *) xmalloc (strlen (cur_token.str) + 2);
7402         strcpy (save_str + !!sign, cur_token.str);
7403         if (sign)
7404           *save_str = sign;
7405
7406         /* Get the next token to check for register scaling.  */
7407         intel_match_token (cur_token.code);
7408
7409         /* Check if this constant is a scaling factor for an
7410            index register.  */
7411         if (cur_token.code == '*')
7412           {
7413             if (intel_match_token ('*') && cur_token.code == T_REG)
7414               {
7415                 const reg_entry *reg = cur_token.reg;
7416
7417                 if (!intel_parser.in_bracket)
7418                   {
7419                     as_bad (_("Register scaling only allowed "
7420                               "in memory operands"));
7421                     return 0;
7422                   }
7423
7424                  /* Disallow things like [1*si].
7425                     sp and esp are invalid as index.  */
7426                 if (reg->reg_type & Reg16)
7427                   reg = i386_regtab + REGNAM_AX + 4;
7428                 else if (i.index_reg)
7429                   reg = i386_regtab + REGNAM_EAX + 4;
7430
7431                 /* The constant is followed by `* reg', so it must be
7432                    a valid scale.  */
7433                 i.index_reg = reg;
7434                 i.types[this_operand] |= BaseIndex;
7435
7436                 /* Set the scale after setting the register (otherwise,
7437                    i386_scale will complain)  */
7438                 if (!i386_scale (save_str))
7439                   return 0;
7440                 intel_match_token (T_REG);
7441
7442                 /* Since registers are not part of the displacement
7443                    string, we may need to remove any preceding '+' from
7444                    the displacement string.  */
7445                 if (*intel_parser.disp != '\0')
7446                   {
7447                     char *s = intel_parser.disp;
7448                     s += strlen (s) - 1;
7449                     if (*s == '+')
7450                       *s = '\0';
7451                   }
7452
7453                 free (save_str);
7454
7455                 return 1;
7456               }
7457
7458             /* The constant was not used for register scaling. Since we have
7459                already consumed the token following `*' we now need to put it
7460                back in the stream.  */
7461             intel_putback_token ();
7462           }
7463
7464         /* Add the constant to the displacement string.  */
7465         strcat (intel_parser.disp, save_str);
7466         free (save_str);
7467
7468         return 1;
7469       }
7470     }
7471
7472   as_bad (_("Unrecognized token '%s'"), cur_token.str);
7473   return 0;
7474 }
7475
7476 /* Match the given token against cur_token. If they match, read the next
7477    token from the operand string.  */
7478 static int
7479 intel_match_token (int code)
7480 {
7481   if (cur_token.code == code)
7482     {
7483       intel_get_token ();
7484       return 1;
7485     }
7486   else
7487     {
7488       as_bad (_("Unexpected token `%s'"), cur_token.str);
7489       return 0;
7490     }
7491 }
7492
7493 /* Read a new token from intel_parser.op_string and store it in cur_token.  */
7494 static void
7495 intel_get_token (void)
7496 {
7497   char *end_op;
7498   const reg_entry *reg;
7499   struct intel_token new_token;
7500
7501   new_token.code = T_NIL;
7502   new_token.reg = NULL;
7503   new_token.str = NULL;
7504
7505   /* Free the memory allocated to the previous token and move
7506      cur_token to prev_token.  */
7507   if (prev_token.str)
7508     free (prev_token.str);
7509
7510   prev_token = cur_token;
7511
7512   /* Skip whitespace.  */
7513   while (is_space_char (*intel_parser.op_string))
7514     intel_parser.op_string++;
7515
7516   /* Return an empty token if we find nothing else on the line.  */
7517   if (*intel_parser.op_string == '\0')
7518     {
7519       cur_token = new_token;
7520       return;
7521     }
7522
7523   /* The new token cannot be larger than the remainder of the operand
7524      string.  */
7525   new_token.str = (char *) xmalloc (strlen (intel_parser.op_string) + 1);
7526   new_token.str[0] = '\0';
7527
7528   if (strchr ("0123456789", *intel_parser.op_string))
7529     {
7530       char *p = new_token.str;
7531       char *q = intel_parser.op_string;
7532       new_token.code = T_CONST;
7533
7534       /* Allow any kind of identifier char to encompass floating point and
7535          hexadecimal numbers.  */
7536       while (is_identifier_char (*q))
7537         *p++ = *q++;
7538       *p = '\0';
7539
7540       /* Recognize special symbol names [0-9][bf].  */
7541       if (strlen (intel_parser.op_string) == 2
7542           && (intel_parser.op_string[1] == 'b'
7543               || intel_parser.op_string[1] == 'f'))
7544         new_token.code = T_ID;
7545     }
7546
7547   else if ((reg = parse_register (intel_parser.op_string, &end_op)) != NULL)
7548     {
7549       size_t len = end_op - intel_parser.op_string;
7550
7551       new_token.code = T_REG;
7552       new_token.reg = reg;
7553
7554       memcpy (new_token.str, intel_parser.op_string, len);
7555       new_token.str[len] = '\0';
7556     }
7557
7558   else if (is_identifier_char (*intel_parser.op_string))
7559     {
7560       char *p = new_token.str;
7561       char *q = intel_parser.op_string;
7562
7563       /* A '.' or '$' followed by an identifier char is an identifier.
7564          Otherwise, it's operator '.' followed by an expression.  */
7565       if ((*q == '.' || *q == '$') && !is_identifier_char (*(q + 1)))
7566         {
7567           new_token.code = '.';
7568           new_token.str[0] = '.';
7569           new_token.str[1] = '\0';
7570         }
7571       else
7572         {
7573           while (is_identifier_char (*q) || *q == '@')
7574             *p++ = *q++;
7575           *p = '\0';
7576
7577           if (strcasecmp (new_token.str, "NOT") == 0)
7578             new_token.code = '~';
7579
7580           else if (strcasecmp (new_token.str, "MOD") == 0)
7581             new_token.code = '%';
7582
7583           else if (strcasecmp (new_token.str, "AND") == 0)
7584             new_token.code = '&';
7585
7586           else if (strcasecmp (new_token.str, "OR") == 0)
7587             new_token.code = '|';
7588
7589           else if (strcasecmp (new_token.str, "XOR") == 0)
7590             new_token.code = '^';
7591
7592           else if (strcasecmp (new_token.str, "SHL") == 0)
7593             new_token.code = T_SHL;
7594
7595           else if (strcasecmp (new_token.str, "SHR") == 0)
7596             new_token.code = T_SHR;
7597
7598           else if (strcasecmp (new_token.str, "BYTE") == 0)
7599             new_token.code = T_BYTE;
7600
7601           else if (strcasecmp (new_token.str, "WORD") == 0)
7602             new_token.code = T_WORD;
7603
7604           else if (strcasecmp (new_token.str, "DWORD") == 0)
7605             new_token.code = T_DWORD;
7606
7607           else if (strcasecmp (new_token.str, "FWORD") == 0)
7608             new_token.code = T_FWORD;
7609
7610           else if (strcasecmp (new_token.str, "QWORD") == 0)
7611             new_token.code = T_QWORD;
7612
7613           else if (strcasecmp (new_token.str, "TBYTE") == 0
7614                    /* XXX remove (gcc still uses it) */
7615                    || strcasecmp (new_token.str, "XWORD") == 0)
7616             new_token.code = T_TBYTE;
7617
7618           else if (strcasecmp (new_token.str, "XMMWORD") == 0
7619                    || strcasecmp (new_token.str, "OWORD") == 0)
7620             new_token.code = T_XMMWORD;
7621
7622           else if (strcasecmp (new_token.str, "PTR") == 0)
7623             new_token.code = T_PTR;
7624
7625           else if (strcasecmp (new_token.str, "SHORT") == 0)
7626             new_token.code = T_SHORT;
7627
7628           else if (strcasecmp (new_token.str, "OFFSET") == 0)
7629             {
7630               new_token.code = T_OFFSET;
7631
7632               /* ??? This is not mentioned in the MASM grammar but gcc
7633                      makes use of it with -mintel-syntax.  OFFSET may be
7634                      followed by FLAT:  */
7635               if (strncasecmp (q, " FLAT:", 6) == 0)
7636                 strcat (new_token.str, " FLAT:");
7637             }
7638
7639           /* ??? This is not mentioned in the MASM grammar.  */
7640           else if (strcasecmp (new_token.str, "FLAT") == 0)
7641             {
7642               new_token.code = T_OFFSET;
7643               if (*q == ':')
7644                 strcat (new_token.str, ":");
7645               else
7646                 as_bad (_("`:' expected"));
7647             }
7648
7649           else
7650             new_token.code = T_ID;
7651         }
7652     }
7653
7654   else if (strchr ("+-/*%|&^:[]()~", *intel_parser.op_string))
7655     {
7656       new_token.code = *intel_parser.op_string;
7657       new_token.str[0] = *intel_parser.op_string;
7658       new_token.str[1] = '\0';
7659     }
7660
7661   else if (strchr ("<>", *intel_parser.op_string)
7662            && *intel_parser.op_string == *(intel_parser.op_string + 1))
7663     {
7664       new_token.code = *intel_parser.op_string == '<' ? T_SHL : T_SHR;
7665       new_token.str[0] = *intel_parser.op_string;
7666       new_token.str[1] = *intel_parser.op_string;
7667       new_token.str[2] = '\0';
7668     }
7669
7670   else
7671     as_bad (_("Unrecognized token `%s'"), intel_parser.op_string);
7672
7673   intel_parser.op_string += strlen (new_token.str);
7674   cur_token = new_token;
7675 }
7676
7677 /* Put cur_token back into the token stream and make cur_token point to
7678    prev_token.  */
7679 static void
7680 intel_putback_token (void)
7681 {
7682   if (cur_token.code != T_NIL)
7683     {
7684       intel_parser.op_string -= strlen (cur_token.str);
7685       free (cur_token.str);
7686     }
7687   cur_token = prev_token;
7688
7689   /* Forget prev_token.  */
7690   prev_token.code = T_NIL;
7691   prev_token.reg = NULL;
7692   prev_token.str = NULL;
7693 }
7694
7695 int
7696 tc_x86_regname_to_dw2regnum (char *regname)
7697 {
7698   unsigned int regnum;
7699   unsigned int regnames_count;
7700   static const char *const regnames_32[] =
7701     {
7702       "eax", "ecx", "edx", "ebx",
7703       "esp", "ebp", "esi", "edi",
7704       "eip", "eflags", NULL,
7705       "st0", "st1", "st2", "st3",
7706       "st4", "st5", "st6", "st7",
7707       NULL, NULL,
7708       "xmm0", "xmm1", "xmm2", "xmm3",
7709       "xmm4", "xmm5", "xmm6", "xmm7",
7710       "mm0", "mm1", "mm2", "mm3",
7711       "mm4", "mm5", "mm6", "mm7",
7712       "fcw", "fsw", "mxcsr",
7713       "es", "cs", "ss", "ds", "fs", "gs", NULL, NULL,
7714       "tr", "ldtr"
7715     };
7716   static const char *const regnames_64[] =
7717     {
7718       "rax", "rdx", "rcx", "rbx",
7719       "rsi", "rdi", "rbp", "rsp",
7720       "r8",  "r9",  "r10", "r11",
7721       "r12", "r13", "r14", "r15",
7722       "rip",
7723       "xmm0",  "xmm1",  "xmm2",  "xmm3",
7724       "xmm4",  "xmm5",  "xmm6",  "xmm7",
7725       "xmm8",  "xmm9",  "xmm10", "xmm11",
7726       "xmm12", "xmm13", "xmm14", "xmm15",
7727       "st0", "st1", "st2", "st3",
7728       "st4", "st5", "st6", "st7",
7729       "mm0", "mm1", "mm2", "mm3",
7730       "mm4", "mm5", "mm6", "mm7",
7731       "rflags",
7732       "es", "cs", "ss", "ds", "fs", "gs", NULL, NULL,
7733       "fs.base", "gs.base", NULL, NULL,
7734       "tr", "ldtr",
7735       "mxcsr", "fcw", "fsw"
7736     };
7737   const char *const *regnames;
7738
7739   if (flag_code == CODE_64BIT)
7740     {
7741       regnames = regnames_64;
7742       regnames_count = ARRAY_SIZE (regnames_64);
7743     }
7744   else
7745     {
7746       regnames = regnames_32;
7747       regnames_count = ARRAY_SIZE (regnames_32);
7748     }
7749
7750   for (regnum = 0; regnum < regnames_count; regnum++)
7751     if (regnames[regnum] != NULL
7752         && strcmp (regname, regnames[regnum]) == 0)
7753       return regnum;
7754
7755   return -1;
7756 }
7757
7758 void
7759 tc_x86_frame_initial_instructions (void)
7760 {
7761   static unsigned int sp_regno;
7762
7763   if (!sp_regno)
7764     sp_regno = tc_x86_regname_to_dw2regnum (flag_code == CODE_64BIT
7765                                             ? "rsp" : "esp");
7766
7767   cfi_add_CFA_def_cfa (sp_regno, -x86_cie_data_alignment);
7768   cfi_add_CFA_offset (x86_dwarf2_return_column, x86_cie_data_alignment);
7769 }
7770
7771 int
7772 i386_elf_section_type (const char *str, size_t len)
7773 {
7774   if (flag_code == CODE_64BIT
7775       && len == sizeof ("unwind") - 1
7776       && strncmp (str, "unwind", 6) == 0)
7777     return SHT_X86_64_UNWIND;
7778
7779   return -1;
7780 }
7781
7782 #ifdef TE_PE
7783 void
7784 tc_pe_dwarf2_emit_offset (symbolS *symbol, unsigned int size)
7785 {
7786   expressionS expr;
7787
7788   expr.X_op = O_secrel;
7789   expr.X_add_symbol = symbol;
7790   expr.X_add_number = 0;
7791   emit_expr (&expr, size);
7792 }
7793 #endif
7794
7795 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7796 /* For ELF on x86-64, add support for SHF_X86_64_LARGE.  */
7797
7798 int
7799 x86_64_section_letter (int letter, char **ptr_msg)
7800 {
7801   if (flag_code == CODE_64BIT)
7802     {
7803       if (letter == 'l')
7804         return SHF_X86_64_LARGE;
7805
7806       *ptr_msg = _("Bad .section directive: want a,l,w,x,M,S,G,T in string");
7807     }
7808   else
7809     *ptr_msg = _("Bad .section directive: want a,w,x,M,S,G,T in string");
7810   return -1;
7811 }
7812
7813 int
7814 x86_64_section_word (char *str, size_t len)
7815 {
7816   if (len == 5 && flag_code == CODE_64BIT && CONST_STRNEQ (str, "large"))
7817     return SHF_X86_64_LARGE;
7818
7819   return -1;
7820 }
7821
7822 static void
7823 handle_large_common (int small ATTRIBUTE_UNUSED)
7824 {
7825   if (flag_code != CODE_64BIT)
7826     {
7827       s_comm_internal (0, elf_common_parse);
7828       as_warn (_(".largecomm supported only in 64bit mode, producing .comm"));
7829     }
7830   else
7831     {
7832       static segT lbss_section;
7833       asection *saved_com_section_ptr = elf_com_section_ptr;
7834       asection *saved_bss_section = bss_section;
7835
7836       if (lbss_section == NULL)
7837         {
7838           flagword applicable;
7839           segT seg = now_seg;
7840           subsegT subseg = now_subseg;
7841
7842           /* The .lbss section is for local .largecomm symbols.  */
7843           lbss_section = subseg_new (".lbss", 0);
7844           applicable = bfd_applicable_section_flags (stdoutput);
7845           bfd_set_section_flags (stdoutput, lbss_section,
7846                                  applicable & SEC_ALLOC);
7847           seg_info (lbss_section)->bss = 1;
7848
7849           subseg_set (seg, subseg);
7850         }
7851
7852       elf_com_section_ptr = &_bfd_elf_large_com_section;
7853       bss_section = lbss_section;
7854
7855       s_comm_internal (0, elf_common_parse);
7856
7857       elf_com_section_ptr = saved_com_section_ptr;
7858       bss_section = saved_bss_section;
7859     }
7860 }
7861 #endif /* OBJ_ELF || OBJ_MAYBE_ELF */