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