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