1 /* tc-i386.c -- Assemble code for the Intel 80386
2 Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
3 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
4 Free Software Foundation, Inc.
6 This file is part of GAS, the GNU Assembler.
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)
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.
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
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. */
31 #include "safe-ctype.h"
33 #include "dwarf2dbg.h"
34 #include "dw2gencfi.h"
35 #include "elf/x86-64.h"
36 #include "opcodes/i386-init.h"
38 #ifndef REGISTER_WARNINGS
39 #define REGISTER_WARNINGS 1
42 #ifndef INFER_ADDR_PREFIX
43 #define INFER_ADDR_PREFIX 1
47 #define DEFAULT_ARCH "i386"
52 #define INLINE __inline__
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_intel_mnemonic (int);
62 static void set_allow_index_reg (int);
63 static void set_cpu_arch (int);
65 static void pe_directive_secrel (int);
67 static void signed_cons (int);
68 static char *output_invalid (int c);
69 static int i386_operand (char *);
70 static int i386_intel_operand (char *, int);
71 static const reg_entry *parse_register (char *, char **);
72 static char *parse_insn (char *, char *);
73 static char *parse_operands (char *, const char *);
74 static void swap_operands (void);
75 static void swap_2_operands (int, int);
76 static void optimize_imm (void);
77 static void optimize_disp (void);
78 static int match_template (void);
79 static int check_string (void);
80 static int process_suffix (void);
81 static int check_byte_reg (void);
82 static int check_long_reg (void);
83 static int check_qword_reg (void);
84 static int check_word_reg (void);
85 static int finalize_imm (void);
86 static void process_drex (void);
87 static int process_operands (void);
88 static const seg_entry *build_modrm_byte (void);
89 static void output_insn (void);
90 static void output_imm (fragS *, offsetT);
91 static void output_disp (fragS *, offsetT);
93 static void s_bss (int);
95 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
96 static void handle_large_common (int small ATTRIBUTE_UNUSED);
99 static const char *default_arch = DEFAULT_ARCH;
101 /* 'md_assemble ()' gathers together information and puts it into a
108 const reg_entry *regs;
113 /* TM holds the template for the insn were currently assembling. */
116 /* SUFFIX holds the instruction mnemonic suffix if given.
117 (e.g. 'l' for 'movl') */
120 /* OPERANDS gives the number of given operands. */
121 unsigned int operands;
123 /* REG_OPERANDS, DISP_OPERANDS, MEM_OPERANDS, IMM_OPERANDS give the number
124 of given register, displacement, memory operands and immediate
126 unsigned int reg_operands, disp_operands, mem_operands, imm_operands;
128 /* TYPES [i] is the type (see above #defines) which tells us how to
129 use OP[i] for the corresponding operand. */
130 i386_operand_type types[MAX_OPERANDS];
132 /* Displacement expression, immediate expression, or register for each
134 union i386_op op[MAX_OPERANDS];
136 /* Flags for operands. */
137 unsigned int flags[MAX_OPERANDS];
138 #define Operand_PCrel 1
140 /* Relocation type for operand */
141 enum bfd_reloc_code_real reloc[MAX_OPERANDS];
143 /* BASE_REG, INDEX_REG, and LOG2_SCALE_FACTOR are used to encode
144 the base index byte below. */
145 const reg_entry *base_reg;
146 const reg_entry *index_reg;
147 unsigned int log2_scale_factor;
149 /* SEG gives the seg_entries of this insn. They are zero unless
150 explicit segment overrides are given. */
151 const seg_entry *seg[2];
153 /* PREFIX holds all the given prefix opcodes (usually null).
154 PREFIXES is the number of prefix opcodes. */
155 unsigned int prefixes;
156 unsigned char prefix[MAX_PREFIXES];
158 /* RM and SIB are the modrm byte and the sib byte where the
159 addressing modes of this insn are encoded. DREX is the byte
160 added by the SSE5 instructions. */
168 typedef struct _i386_insn i386_insn;
170 /* List of chars besides those in app.c:symbol_chars that can start an
171 operand. Used to prevent the scrubber eating vital white-space. */
172 const char extra_symbol_chars[] = "*%-(["
181 #if (defined (TE_I386AIX) \
182 || ((defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)) \
183 && !defined (TE_GNU) \
184 && !defined (TE_LINUX) \
185 && !defined (TE_NETWARE) \
186 && !defined (TE_FreeBSD) \
187 && !defined (TE_NetBSD)))
188 /* This array holds the chars that always start a comment. If the
189 pre-processor is disabled, these aren't very useful. The option
190 --divide will remove '/' from this list. */
191 const char *i386_comment_chars = "#/";
192 #define SVR4_COMMENT_CHARS 1
193 #define PREFIX_SEPARATOR '\\'
196 const char *i386_comment_chars = "#";
197 #define PREFIX_SEPARATOR '/'
200 /* This array holds the chars that only start a comment at the beginning of
201 a line. If the line seems to have the form '# 123 filename'
202 .line and .file directives will appear in the pre-processed output.
203 Note that input_file.c hand checks for '#' at the beginning of the
204 first line of the input file. This is because the compiler outputs
205 #NO_APP at the beginning of its output.
206 Also note that comments started like this one will always work if
207 '/' isn't otherwise defined. */
208 const char line_comment_chars[] = "#/";
210 const char line_separator_chars[] = ";";
212 /* Chars that can be used to separate mant from exp in floating point
214 const char EXP_CHARS[] = "eE";
216 /* Chars that mean this number is a floating point constant
219 const char FLT_CHARS[] = "fFdDxX";
221 /* Tables for lexical analysis. */
222 static char mnemonic_chars[256];
223 static char register_chars[256];
224 static char operand_chars[256];
225 static char identifier_chars[256];
226 static char digit_chars[256];
228 /* Lexical macros. */
229 #define is_mnemonic_char(x) (mnemonic_chars[(unsigned char) x])
230 #define is_operand_char(x) (operand_chars[(unsigned char) x])
231 #define is_register_char(x) (register_chars[(unsigned char) x])
232 #define is_space_char(x) ((x) == ' ')
233 #define is_identifier_char(x) (identifier_chars[(unsigned char) x])
234 #define is_digit_char(x) (digit_chars[(unsigned char) x])
236 /* All non-digit non-letter characters that may occur in an operand. */
237 static char operand_special_chars[] = "%$-+(,)*._~/<>|&^!:[@]";
239 /* md_assemble() always leaves the strings it's passed unaltered. To
240 effect this we maintain a stack of saved characters that we've smashed
241 with '\0's (indicating end of strings for various sub-fields of the
242 assembler instruction). */
243 static char save_stack[32];
244 static char *save_stack_p;
245 #define END_STRING_AND_SAVE(s) \
246 do { *save_stack_p++ = *(s); *(s) = '\0'; } while (0)
247 #define RESTORE_END_STRING(s) \
248 do { *(s) = *--save_stack_p; } while (0)
250 /* The instruction we're assembling. */
253 /* Possible templates for current insn. */
254 static const templates *current_templates;
256 /* Per instruction expressionS buffers: max displacements & immediates. */
257 static expressionS disp_expressions[MAX_MEMORY_OPERANDS];
258 static expressionS im_expressions[MAX_IMMEDIATE_OPERANDS];
260 /* Current operand we are working on. */
261 static int this_operand;
263 /* We support four different modes. FLAG_CODE variable is used to distinguish
271 static enum flag_code flag_code;
272 static unsigned int object_64bit;
273 static int use_rela_relocations = 0;
275 /* The names used to print error messages. */
276 static const char *flag_code_names[] =
283 /* 1 for intel syntax,
285 static int intel_syntax = 0;
287 /* 1 for intel mnemonic,
288 0 if att mnemonic. */
289 static int intel_mnemonic = !SYSV386_COMPAT;
291 /* 1 if support old (<= 2.8.1) versions of gcc. */
292 static int old_gcc = OLDGCC_COMPAT;
294 /* 1 if register prefix % not required. */
295 static int allow_naked_reg = 0;
297 /* 1 if pseudo index register, eiz/riz, is allowed . */
298 static int allow_index_reg = 0;
300 /* Register prefix used for error message. */
301 static const char *register_prefix = "%";
303 /* Used in 16 bit gcc mode to add an l suffix to call, ret, enter,
304 leave, push, and pop instructions so that gcc has the same stack
305 frame as in 32 bit mode. */
306 static char stackop_size = '\0';
308 /* Non-zero to optimize code alignment. */
309 int optimize_align_code = 1;
311 /* Non-zero to quieten some warnings. */
312 static int quiet_warnings = 0;
315 static const char *cpu_arch_name = NULL;
316 static const char *cpu_sub_arch_name = NULL;
318 /* CPU feature flags. */
319 static i386_cpu_flags cpu_arch_flags = CPU_UNKNOWN_FLAGS;
321 /* Bitwise NOT of cpu_arch_flags. */
322 static i386_cpu_flags cpu_arch_flags_not;
324 /* If we have selected a cpu we are generating instructions for. */
325 static int cpu_arch_tune_set = 0;
327 /* Cpu we are generating instructions for. */
328 static enum processor_type cpu_arch_tune = PROCESSOR_UNKNOWN;
330 /* CPU feature flags of cpu we are generating instructions for. */
331 static i386_cpu_flags cpu_arch_tune_flags;
333 /* CPU instruction set architecture used. */
334 static enum processor_type cpu_arch_isa = PROCESSOR_UNKNOWN;
336 /* CPU feature flags of instruction set architecture used. */
337 static i386_cpu_flags cpu_arch_isa_flags;
339 /* If set, conditional jumps are not automatically promoted to handle
340 larger than a byte offset. */
341 static unsigned int no_cond_jump_promotion = 0;
343 /* Pre-defined "_GLOBAL_OFFSET_TABLE_". */
344 static symbolS *GOT_symbol;
346 /* The dwarf2 return column, adjusted for 32 or 64 bit. */
347 unsigned int x86_dwarf2_return_column;
349 /* The dwarf2 data alignment, adjusted for 32 or 64 bit. */
350 int x86_cie_data_alignment;
352 /* Interface to relax_segment.
353 There are 3 major relax states for 386 jump insns because the
354 different types of jumps add different sizes to frags when we're
355 figuring out what sort of jump to choose to reach a given label. */
358 #define UNCOND_JUMP 0
360 #define COND_JUMP86 2
365 #define SMALL16 (SMALL | CODE16)
367 #define BIG16 (BIG | CODE16)
371 #define INLINE __inline__
377 #define ENCODE_RELAX_STATE(type, size) \
378 ((relax_substateT) (((type) << 2) | (size)))
379 #define TYPE_FROM_RELAX_STATE(s) \
381 #define DISP_SIZE_FROM_RELAX_STATE(s) \
382 ((((s) & 3) == BIG ? 4 : (((s) & 3) == BIG16 ? 2 : 1)))
384 /* This table is used by relax_frag to promote short jumps to long
385 ones where necessary. SMALL (short) jumps may be promoted to BIG
386 (32 bit long) ones, and SMALL16 jumps to BIG16 (16 bit long). We
387 don't allow a short jump in a 32 bit code segment to be promoted to
388 a 16 bit offset jump because it's slower (requires data size
389 prefix), and doesn't work, unless the destination is in the bottom
390 64k of the code segment (The top 16 bits of eip are zeroed). */
392 const relax_typeS md_relax_table[] =
395 1) most positive reach of this state,
396 2) most negative reach of this state,
397 3) how many bytes this mode will have in the variable part of the frag
398 4) which index into the table to try if we can't fit into this one. */
400 /* UNCOND_JUMP states. */
401 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (UNCOND_JUMP, BIG)},
402 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (UNCOND_JUMP, BIG16)},
403 /* dword jmp adds 4 bytes to frag:
404 0 extra opcode bytes, 4 displacement bytes. */
406 /* word jmp adds 2 byte2 to frag:
407 0 extra opcode bytes, 2 displacement bytes. */
410 /* COND_JUMP states. */
411 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP, BIG)},
412 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP, BIG16)},
413 /* dword conditionals adds 5 bytes to frag:
414 1 extra opcode byte, 4 displacement bytes. */
416 /* word conditionals add 3 bytes to frag:
417 1 extra opcode byte, 2 displacement bytes. */
420 /* COND_JUMP86 states. */
421 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP86, BIG)},
422 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP86, BIG16)},
423 /* dword conditionals adds 5 bytes to frag:
424 1 extra opcode byte, 4 displacement bytes. */
426 /* word conditionals add 4 bytes to frag:
427 1 displacement byte and a 3 byte long branch insn. */
431 static const arch_entry cpu_arch[] =
433 {"generic32", PROCESSOR_GENERIC32,
434 CPU_GENERIC32_FLAGS },
435 {"generic64", PROCESSOR_GENERIC64,
436 CPU_GENERIC64_FLAGS },
437 {"i8086", PROCESSOR_UNKNOWN,
439 {"i186", PROCESSOR_UNKNOWN,
441 {"i286", PROCESSOR_UNKNOWN,
443 {"i386", PROCESSOR_I386,
445 {"i486", PROCESSOR_I486,
447 {"i586", PROCESSOR_PENTIUM,
449 {"i686", PROCESSOR_PENTIUMPRO,
451 {"pentium", PROCESSOR_PENTIUM,
453 {"pentiumpro",PROCESSOR_PENTIUMPRO,
455 {"pentiumii", PROCESSOR_PENTIUMPRO,
457 {"pentiumiii",PROCESSOR_PENTIUMPRO,
459 {"pentium4", PROCESSOR_PENTIUM4,
461 {"prescott", PROCESSOR_NOCONA,
463 {"nocona", PROCESSOR_NOCONA,
465 {"yonah", PROCESSOR_CORE,
467 {"core", PROCESSOR_CORE,
469 {"merom", PROCESSOR_CORE2,
471 {"core2", PROCESSOR_CORE2,
475 {"k6_2", PROCESSOR_K6,
477 {"athlon", PROCESSOR_ATHLON,
479 {"sledgehammer", PROCESSOR_K8,
481 {"opteron", PROCESSOR_K8,
485 {"amdfam10", PROCESSOR_AMDFAM10,
486 CPU_AMDFAM10_FLAGS },
487 {".mmx", PROCESSOR_UNKNOWN,
489 {".sse", PROCESSOR_UNKNOWN,
491 {".sse2", PROCESSOR_UNKNOWN,
493 {".sse3", PROCESSOR_UNKNOWN,
495 {".ssse3", PROCESSOR_UNKNOWN,
497 {".sse4.1", PROCESSOR_UNKNOWN,
499 {".sse4.2", PROCESSOR_UNKNOWN,
501 {".sse4", PROCESSOR_UNKNOWN,
503 {".3dnow", PROCESSOR_UNKNOWN,
505 {".3dnowa", PROCESSOR_UNKNOWN,
507 {".padlock", PROCESSOR_UNKNOWN,
509 {".pacifica", PROCESSOR_UNKNOWN,
511 {".svme", PROCESSOR_UNKNOWN,
513 {".sse4a", PROCESSOR_UNKNOWN,
515 {".abm", PROCESSOR_UNKNOWN,
517 {".sse5", PROCESSOR_UNKNOWN,
521 const pseudo_typeS md_pseudo_table[] =
523 #if !defined(OBJ_AOUT) && !defined(USE_ALIGN_PTWO)
524 {"align", s_align_bytes, 0},
526 {"align", s_align_ptwo, 0},
528 {"arch", set_cpu_arch, 0},
532 {"ffloat", float_cons, 'f'},
533 {"dfloat", float_cons, 'd'},
534 {"tfloat", float_cons, 'x'},
536 {"slong", signed_cons, 4},
537 {"noopt", s_ignore, 0},
538 {"optim", s_ignore, 0},
539 {"code16gcc", set_16bit_gcc_code_flag, CODE_16BIT},
540 {"code16", set_code_flag, CODE_16BIT},
541 {"code32", set_code_flag, CODE_32BIT},
542 {"code64", set_code_flag, CODE_64BIT},
543 {"intel_syntax", set_intel_syntax, 1},
544 {"att_syntax", set_intel_syntax, 0},
545 {"intel_mnemonic", set_intel_mnemonic, 1},
546 {"att_mnemonic", set_intel_mnemonic, 0},
547 {"allow_index_reg", set_allow_index_reg, 1},
548 {"disallow_index_reg", set_allow_index_reg, 0},
549 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
550 {"largecomm", handle_large_common, 0},
552 {"file", (void (*) (int)) dwarf2_directive_file, 0},
553 {"loc", dwarf2_directive_loc, 0},
554 {"loc_mark_labels", dwarf2_directive_loc_mark_labels, 0},
557 {"secrel32", pe_directive_secrel, 0},
562 /* For interface with expression (). */
563 extern char *input_line_pointer;
565 /* Hash table for instruction mnemonic lookup. */
566 static struct hash_control *op_hash;
568 /* Hash table for register lookup. */
569 static struct hash_control *reg_hash;
572 i386_align_code (fragS *fragP, int count)
574 /* Various efficient no-op patterns for aligning code labels.
575 Note: Don't try to assemble the instructions in the comments.
576 0L and 0w are not legal. */
577 static const char f32_1[] =
579 static const char f32_2[] =
580 {0x66,0x90}; /* xchg %ax,%ax */
581 static const char f32_3[] =
582 {0x8d,0x76,0x00}; /* leal 0(%esi),%esi */
583 static const char f32_4[] =
584 {0x8d,0x74,0x26,0x00}; /* leal 0(%esi,1),%esi */
585 static const char f32_5[] =
587 0x8d,0x74,0x26,0x00}; /* leal 0(%esi,1),%esi */
588 static const char f32_6[] =
589 {0x8d,0xb6,0x00,0x00,0x00,0x00}; /* leal 0L(%esi),%esi */
590 static const char f32_7[] =
591 {0x8d,0xb4,0x26,0x00,0x00,0x00,0x00}; /* leal 0L(%esi,1),%esi */
592 static const char f32_8[] =
594 0x8d,0xb4,0x26,0x00,0x00,0x00,0x00}; /* leal 0L(%esi,1),%esi */
595 static const char f32_9[] =
596 {0x89,0xf6, /* movl %esi,%esi */
597 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
598 static const char f32_10[] =
599 {0x8d,0x76,0x00, /* leal 0(%esi),%esi */
600 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
601 static const char f32_11[] =
602 {0x8d,0x74,0x26,0x00, /* leal 0(%esi,1),%esi */
603 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
604 static const char f32_12[] =
605 {0x8d,0xb6,0x00,0x00,0x00,0x00, /* leal 0L(%esi),%esi */
606 0x8d,0xbf,0x00,0x00,0x00,0x00}; /* leal 0L(%edi),%edi */
607 static const char f32_13[] =
608 {0x8d,0xb6,0x00,0x00,0x00,0x00, /* leal 0L(%esi),%esi */
609 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
610 static const char f32_14[] =
611 {0x8d,0xb4,0x26,0x00,0x00,0x00,0x00, /* leal 0L(%esi,1),%esi */
612 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
613 static const char f16_3[] =
614 {0x8d,0x74,0x00}; /* lea 0(%esi),%esi */
615 static const char f16_4[] =
616 {0x8d,0xb4,0x00,0x00}; /* lea 0w(%si),%si */
617 static const char f16_5[] =
619 0x8d,0xb4,0x00,0x00}; /* lea 0w(%si),%si */
620 static const char f16_6[] =
621 {0x89,0xf6, /* mov %si,%si */
622 0x8d,0xbd,0x00,0x00}; /* lea 0w(%di),%di */
623 static const char f16_7[] =
624 {0x8d,0x74,0x00, /* lea 0(%si),%si */
625 0x8d,0xbd,0x00,0x00}; /* lea 0w(%di),%di */
626 static const char f16_8[] =
627 {0x8d,0xb4,0x00,0x00, /* lea 0w(%si),%si */
628 0x8d,0xbd,0x00,0x00}; /* lea 0w(%di),%di */
629 static const char jump_31[] =
630 {0xeb,0x1d,0x90,0x90,0x90,0x90,0x90, /* jmp .+31; lotsa nops */
631 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
632 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
633 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90};
634 static const char *const f32_patt[] = {
635 f32_1, f32_2, f32_3, f32_4, f32_5, f32_6, f32_7, f32_8,
636 f32_9, f32_10, f32_11, f32_12, f32_13, f32_14
638 static const char *const f16_patt[] = {
639 f32_1, f32_2, f16_3, f16_4, f16_5, f16_6, f16_7, f16_8
642 static const char alt_3[] =
644 /* nopl 0(%[re]ax) */
645 static const char alt_4[] =
646 {0x0f,0x1f,0x40,0x00};
647 /* nopl 0(%[re]ax,%[re]ax,1) */
648 static const char alt_5[] =
649 {0x0f,0x1f,0x44,0x00,0x00};
650 /* nopw 0(%[re]ax,%[re]ax,1) */
651 static const char alt_6[] =
652 {0x66,0x0f,0x1f,0x44,0x00,0x00};
653 /* nopl 0L(%[re]ax) */
654 static const char alt_7[] =
655 {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
656 /* nopl 0L(%[re]ax,%[re]ax,1) */
657 static const char alt_8[] =
658 {0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
659 /* nopw 0L(%[re]ax,%[re]ax,1) */
660 static const char alt_9[] =
661 {0x66,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
662 /* nopw %cs:0L(%[re]ax,%[re]ax,1) */
663 static const char alt_10[] =
664 {0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
666 nopw %cs:0L(%[re]ax,%[re]ax,1) */
667 static const char alt_long_11[] =
669 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
672 nopw %cs:0L(%[re]ax,%[re]ax,1) */
673 static const char alt_long_12[] =
676 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
680 nopw %cs:0L(%[re]ax,%[re]ax,1) */
681 static const char alt_long_13[] =
685 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
690 nopw %cs:0L(%[re]ax,%[re]ax,1) */
691 static const char alt_long_14[] =
696 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
702 nopw %cs:0L(%[re]ax,%[re]ax,1) */
703 static const char alt_long_15[] =
709 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
710 /* nopl 0(%[re]ax,%[re]ax,1)
711 nopw 0(%[re]ax,%[re]ax,1) */
712 static const char alt_short_11[] =
713 {0x0f,0x1f,0x44,0x00,0x00,
714 0x66,0x0f,0x1f,0x44,0x00,0x00};
715 /* nopw 0(%[re]ax,%[re]ax,1)
716 nopw 0(%[re]ax,%[re]ax,1) */
717 static const char alt_short_12[] =
718 {0x66,0x0f,0x1f,0x44,0x00,0x00,
719 0x66,0x0f,0x1f,0x44,0x00,0x00};
720 /* nopw 0(%[re]ax,%[re]ax,1)
722 static const char alt_short_13[] =
723 {0x66,0x0f,0x1f,0x44,0x00,0x00,
724 0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
727 static const char alt_short_14[] =
728 {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00,
729 0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
731 nopl 0L(%[re]ax,%[re]ax,1) */
732 static const char alt_short_15[] =
733 {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00,
734 0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
735 static const char *const alt_short_patt[] = {
736 f32_1, f32_2, alt_3, alt_4, alt_5, alt_6, alt_7, alt_8,
737 alt_9, alt_10, alt_short_11, alt_short_12, alt_short_13,
738 alt_short_14, alt_short_15
740 static const char *const alt_long_patt[] = {
741 f32_1, f32_2, alt_3, alt_4, alt_5, alt_6, alt_7, alt_8,
742 alt_9, alt_10, alt_long_11, alt_long_12, alt_long_13,
743 alt_long_14, alt_long_15
746 /* Only align for at least a positive non-zero boundary. */
747 if (count <= 0 || count > MAX_MEM_FOR_RS_ALIGN_CODE)
750 /* We need to decide which NOP sequence to use for 32bit and
751 64bit. When -mtune= is used:
753 1. For PROCESSOR_I386, PROCESSOR_I486, PROCESSOR_PENTIUM and
754 PROCESSOR_GENERIC32, f32_patt will be used.
755 2. For PROCESSOR_PENTIUMPRO, PROCESSOR_PENTIUM4, PROCESSOR_NOCONA,
756 PROCESSOR_CORE, PROCESSOR_CORE2, and PROCESSOR_GENERIC64,
757 alt_long_patt will be used.
758 3. For PROCESSOR_ATHLON, PROCESSOR_K6, PROCESSOR_K8 and
759 PROCESSOR_AMDFAM10, alt_short_patt will be used.
761 When -mtune= isn't used, alt_long_patt will be used if
762 cpu_arch_isa_flags has Cpu686. Otherwise, f32_patt will
765 When -march= or .arch is used, we can't use anything beyond
766 cpu_arch_isa_flags. */
768 if (flag_code == CODE_16BIT)
772 memcpy (fragP->fr_literal + fragP->fr_fix,
774 /* Adjust jump offset. */
775 fragP->fr_literal[fragP->fr_fix + 1] = count - 2;
778 memcpy (fragP->fr_literal + fragP->fr_fix,
779 f16_patt[count - 1], count);
783 const char *const *patt = NULL;
785 if (cpu_arch_isa == PROCESSOR_UNKNOWN)
787 /* PROCESSOR_UNKNOWN means that all ISAs may be used. */
788 switch (cpu_arch_tune)
790 case PROCESSOR_UNKNOWN:
791 /* We use cpu_arch_isa_flags to check if we SHOULD
792 optimize for Cpu686. */
793 if (cpu_arch_isa_flags.bitfield.cpui686)
794 patt = alt_long_patt;
798 case PROCESSOR_PENTIUMPRO:
799 case PROCESSOR_PENTIUM4:
800 case PROCESSOR_NOCONA:
802 case PROCESSOR_CORE2:
803 case PROCESSOR_GENERIC64:
804 patt = alt_long_patt;
807 case PROCESSOR_ATHLON:
809 case PROCESSOR_AMDFAM10:
810 patt = alt_short_patt;
814 case PROCESSOR_PENTIUM:
815 case PROCESSOR_GENERIC32:
822 switch (cpu_arch_tune)
824 case PROCESSOR_UNKNOWN:
825 /* When cpu_arch_isa is net, cpu_arch_tune shouldn't be
826 PROCESSOR_UNKNOWN. */
832 case PROCESSOR_PENTIUM:
834 case PROCESSOR_ATHLON:
836 case PROCESSOR_AMDFAM10:
837 case PROCESSOR_GENERIC32:
838 /* We use cpu_arch_isa_flags to check if we CAN optimize
840 if (cpu_arch_isa_flags.bitfield.cpui686)
841 patt = alt_short_patt;
845 case PROCESSOR_PENTIUMPRO:
846 case PROCESSOR_PENTIUM4:
847 case PROCESSOR_NOCONA:
849 case PROCESSOR_CORE2:
850 if (cpu_arch_isa_flags.bitfield.cpui686)
851 patt = alt_long_patt;
855 case PROCESSOR_GENERIC64:
856 patt = alt_long_patt;
861 if (patt == f32_patt)
863 /* If the padding is less than 15 bytes, we use the normal
864 ones. Otherwise, we use a jump instruction and adjust
867 memcpy (fragP->fr_literal + fragP->fr_fix,
868 patt[count - 1], count);
871 memcpy (fragP->fr_literal + fragP->fr_fix,
873 /* Adjust jump offset. */
874 fragP->fr_literal[fragP->fr_fix + 1] = count - 2;
879 /* Maximum length of an instruction is 15 byte. If the
880 padding is greater than 15 bytes and we don't use jump,
881 we have to break it into smaller pieces. */
886 memcpy (fragP->fr_literal + fragP->fr_fix + padding,
891 memcpy (fragP->fr_literal + fragP->fr_fix,
892 patt [padding - 1], padding);
895 fragP->fr_var = count;
899 uints_all_zero (const unsigned int *x, unsigned int size)
917 uints_set (unsigned int *x, unsigned int v, unsigned int size)
934 uints_equal (const unsigned int *x, const unsigned int *y,
946 return x[0] == y [0];
953 #define UINTS_ALL_ZERO(x) \
954 uints_all_zero ((x).array, ARRAY_SIZE ((x).array))
955 #define UINTS_SET(x, v) \
956 uints_set ((x).array, v, ARRAY_SIZE ((x).array))
957 #define UINTS_CLEAR(x) \
958 uints_set ((x).array, 0, ARRAY_SIZE ((x).array))
959 #define UINTS_EQUAL(x, y) \
960 uints_equal ((x).array, (y).array, ARRAY_SIZE ((x).array))
963 cpu_flags_check_cpu64 (i386_cpu_flags f)
965 return !((flag_code == CODE_64BIT && f.bitfield.cpuno64)
966 || (flag_code != CODE_64BIT && f.bitfield.cpu64));
969 static INLINE i386_cpu_flags
970 cpu_flags_not (i386_cpu_flags x)
972 switch (ARRAY_SIZE (x.array))
975 x.array [2] = ~x.array [2];
977 x.array [1] = ~x.array [1];
979 x.array [0] = ~x.array [0];
986 x.bitfield.unused = 0;
992 static INLINE i386_cpu_flags
993 cpu_flags_and (i386_cpu_flags x, i386_cpu_flags y)
995 switch (ARRAY_SIZE (x.array))
998 x.array [2] &= y.array [2];
1000 x.array [1] &= y.array [1];
1002 x.array [0] &= y.array [0];
1010 static INLINE i386_cpu_flags
1011 cpu_flags_or (i386_cpu_flags x, i386_cpu_flags y)
1013 switch (ARRAY_SIZE (x.array))
1016 x.array [2] |= y.array [2];
1018 x.array [1] |= y.array [1];
1020 x.array [0] |= y.array [0];
1029 cpu_flags_match (i386_cpu_flags x)
1031 i386_cpu_flags not = cpu_arch_flags_not;
1033 not.bitfield.cpu64 = 1;
1034 not.bitfield.cpuno64 = 1;
1036 x.bitfield.cpu64 = 0;
1037 x.bitfield.cpuno64 = 0;
1039 not = cpu_flags_and (x, not);
1040 return UINTS_ALL_ZERO (not);
1043 static INLINE i386_operand_type
1044 operand_type_and (i386_operand_type x, i386_operand_type y)
1046 switch (ARRAY_SIZE (x.array))
1049 x.array [2] &= y.array [2];
1051 x.array [1] &= y.array [1];
1053 x.array [0] &= y.array [0];
1061 static INLINE i386_operand_type
1062 operand_type_or (i386_operand_type x, i386_operand_type y)
1064 switch (ARRAY_SIZE (x.array))
1067 x.array [2] |= y.array [2];
1069 x.array [1] |= y.array [1];
1071 x.array [0] |= y.array [0];
1079 static INLINE i386_operand_type
1080 operand_type_xor (i386_operand_type x, i386_operand_type y)
1082 switch (ARRAY_SIZE (x.array))
1085 x.array [2] ^= y.array [2];
1087 x.array [1] ^= y.array [1];
1089 x.array [0] ^= y.array [0];
1097 static const i386_operand_type acc32 = OPERAND_TYPE_ACC32;
1098 static const i386_operand_type acc64 = OPERAND_TYPE_ACC64;
1099 static const i386_operand_type control = OPERAND_TYPE_CONTROL;
1100 static const i386_operand_type reg16_inoutportreg
1101 = OPERAND_TYPE_REG16_INOUTPORTREG;
1102 static const i386_operand_type disp16 = OPERAND_TYPE_DISP16;
1103 static const i386_operand_type disp32 = OPERAND_TYPE_DISP32;
1104 static const i386_operand_type disp32s = OPERAND_TYPE_DISP32S;
1105 static const i386_operand_type disp16_32 = OPERAND_TYPE_DISP16_32;
1106 static const i386_operand_type anydisp
1107 = OPERAND_TYPE_ANYDISP;
1108 static const i386_operand_type regxmm = OPERAND_TYPE_REGXMM;
1109 static const i386_operand_type imm8 = OPERAND_TYPE_IMM8;
1110 static const i386_operand_type imm8s = OPERAND_TYPE_IMM8S;
1111 static const i386_operand_type imm16 = OPERAND_TYPE_IMM16;
1112 static const i386_operand_type imm32 = OPERAND_TYPE_IMM32;
1113 static const i386_operand_type imm32s = OPERAND_TYPE_IMM32S;
1114 static const i386_operand_type imm64 = OPERAND_TYPE_IMM64;
1115 static const i386_operand_type imm16_32 = OPERAND_TYPE_IMM16_32;
1116 static const i386_operand_type imm16_32s = OPERAND_TYPE_IMM16_32S;
1117 static const i386_operand_type imm16_32_32s = OPERAND_TYPE_IMM16_32_32S;
1128 operand_type_check (i386_operand_type t, enum operand_type c)
1133 return (t.bitfield.reg8
1136 || t.bitfield.reg64);
1139 return (t.bitfield.imm8
1143 || t.bitfield.imm32s
1144 || t.bitfield.imm64);
1147 return (t.bitfield.disp8
1148 || t.bitfield.disp16
1149 || t.bitfield.disp32
1150 || t.bitfield.disp32s
1151 || t.bitfield.disp64);
1154 return (t.bitfield.disp8
1155 || t.bitfield.disp16
1156 || t.bitfield.disp32
1157 || t.bitfield.disp32s
1158 || t.bitfield.disp64
1159 || t.bitfield.baseindex);
1167 operand_type_match (i386_operand_type overlap,
1168 i386_operand_type given)
1170 i386_operand_type temp = overlap;
1172 temp.bitfield.jumpabsolute = 0;
1173 if (UINTS_ALL_ZERO (temp))
1176 return (given.bitfield.baseindex == overlap.bitfield.baseindex
1177 && given.bitfield.jumpabsolute == overlap.bitfield.jumpabsolute);
1180 /* If given types r0 and r1 are registers they must be of the same type
1181 unless the expected operand type register overlap is null.
1182 Note that Acc in a template matches every size of reg. */
1185 operand_type_register_match (i386_operand_type m0,
1186 i386_operand_type g0,
1187 i386_operand_type t0,
1188 i386_operand_type m1,
1189 i386_operand_type g1,
1190 i386_operand_type t1)
1192 if (!operand_type_check (g0, reg))
1195 if (!operand_type_check (g1, reg))
1198 if (g0.bitfield.reg8 == g1.bitfield.reg8
1199 && g0.bitfield.reg16 == g1.bitfield.reg16
1200 && g0.bitfield.reg32 == g1.bitfield.reg32
1201 && g0.bitfield.reg64 == g1.bitfield.reg64)
1204 if (m0.bitfield.acc)
1206 t0.bitfield.reg8 = 1;
1207 t0.bitfield.reg16 = 1;
1208 t0.bitfield.reg32 = 1;
1209 t0.bitfield.reg64 = 1;
1212 if (m1.bitfield.acc)
1214 t1.bitfield.reg8 = 1;
1215 t1.bitfield.reg16 = 1;
1216 t1.bitfield.reg32 = 1;
1217 t1.bitfield.reg64 = 1;
1220 return (!(t0.bitfield.reg8 & t1.bitfield.reg8)
1221 && !(t0.bitfield.reg16 & t1.bitfield.reg16)
1222 && !(t0.bitfield.reg32 & t1.bitfield.reg32)
1223 && !(t0.bitfield.reg64 & t1.bitfield.reg64));
1226 static INLINE unsigned int
1227 mode_from_disp_size (i386_operand_type t)
1229 if (t.bitfield.disp8)
1231 else if (t.bitfield.disp16
1232 || t.bitfield.disp32
1233 || t.bitfield.disp32s)
1240 fits_in_signed_byte (offsetT num)
1242 return (num >= -128) && (num <= 127);
1246 fits_in_unsigned_byte (offsetT num)
1248 return (num & 0xff) == num;
1252 fits_in_unsigned_word (offsetT num)
1254 return (num & 0xffff) == num;
1258 fits_in_signed_word (offsetT num)
1260 return (-32768 <= num) && (num <= 32767);
1264 fits_in_signed_long (offsetT num ATTRIBUTE_UNUSED)
1269 return (!(((offsetT) -1 << 31) & num)
1270 || (((offsetT) -1 << 31) & num) == ((offsetT) -1 << 31));
1272 } /* fits_in_signed_long() */
1275 fits_in_unsigned_long (offsetT num ATTRIBUTE_UNUSED)
1280 return (num & (((offsetT) 2 << 31) - 1)) == num;
1282 } /* fits_in_unsigned_long() */
1284 static i386_operand_type
1285 smallest_imm_type (offsetT num)
1287 i386_operand_type t;
1290 t.bitfield.imm64 = 1;
1292 if (cpu_arch_tune != PROCESSOR_I486 && num == 1)
1294 /* This code is disabled on the 486 because all the Imm1 forms
1295 in the opcode table are slower on the i486. They're the
1296 versions with the implicitly specified single-position
1297 displacement, which has another syntax if you really want to
1299 t.bitfield.imm1 = 1;
1300 t.bitfield.imm8 = 1;
1301 t.bitfield.imm8s = 1;
1302 t.bitfield.imm16 = 1;
1303 t.bitfield.imm32 = 1;
1304 t.bitfield.imm32s = 1;
1306 else if (fits_in_signed_byte (num))
1308 t.bitfield.imm8 = 1;
1309 t.bitfield.imm8s = 1;
1310 t.bitfield.imm16 = 1;
1311 t.bitfield.imm32 = 1;
1312 t.bitfield.imm32s = 1;
1314 else if (fits_in_unsigned_byte (num))
1316 t.bitfield.imm8 = 1;
1317 t.bitfield.imm16 = 1;
1318 t.bitfield.imm32 = 1;
1319 t.bitfield.imm32s = 1;
1321 else if (fits_in_signed_word (num) || fits_in_unsigned_word (num))
1323 t.bitfield.imm16 = 1;
1324 t.bitfield.imm32 = 1;
1325 t.bitfield.imm32s = 1;
1327 else if (fits_in_signed_long (num))
1329 t.bitfield.imm32 = 1;
1330 t.bitfield.imm32s = 1;
1332 else if (fits_in_unsigned_long (num))
1333 t.bitfield.imm32 = 1;
1339 offset_in_range (offsetT val, int size)
1345 case 1: mask = ((addressT) 1 << 8) - 1; break;
1346 case 2: mask = ((addressT) 1 << 16) - 1; break;
1347 case 4: mask = ((addressT) 2 << 31) - 1; break;
1349 case 8: mask = ((addressT) 2 << 63) - 1; break;
1354 /* If BFD64, sign extend val. */
1355 if (!use_rela_relocations)
1356 if ((val & ~(((addressT) 2 << 31) - 1)) == 0)
1357 val = (val ^ ((addressT) 1 << 31)) - ((addressT) 1 << 31);
1359 if ((val & ~mask) != 0 && (val & ~mask) != ~mask)
1361 char buf1[40], buf2[40];
1363 sprint_value (buf1, val);
1364 sprint_value (buf2, val & mask);
1365 as_warn (_("%s shortened to %s"), buf1, buf2);
1370 /* Returns 0 if attempting to add a prefix where one from the same
1371 class already exists, 1 if non rep/repne added, 2 if rep/repne
1374 add_prefix (unsigned int prefix)
1379 if (prefix >= REX_OPCODE && prefix < REX_OPCODE + 16
1380 && flag_code == CODE_64BIT)
1382 if ((i.prefix[REX_PREFIX] & prefix & REX_W)
1383 || ((i.prefix[REX_PREFIX] & (REX_R | REX_X | REX_B))
1384 && (prefix & (REX_R | REX_X | REX_B))))
1395 case CS_PREFIX_OPCODE:
1396 case DS_PREFIX_OPCODE:
1397 case ES_PREFIX_OPCODE:
1398 case FS_PREFIX_OPCODE:
1399 case GS_PREFIX_OPCODE:
1400 case SS_PREFIX_OPCODE:
1404 case REPNE_PREFIX_OPCODE:
1405 case REPE_PREFIX_OPCODE:
1408 case LOCK_PREFIX_OPCODE:
1416 case ADDR_PREFIX_OPCODE:
1420 case DATA_PREFIX_OPCODE:
1424 if (i.prefix[q] != 0)
1432 i.prefix[q] |= prefix;
1435 as_bad (_("same type of prefix used twice"));
1441 set_code_flag (int value)
1444 if (flag_code == CODE_64BIT)
1446 cpu_arch_flags.bitfield.cpu64 = 1;
1447 cpu_arch_flags.bitfield.cpuno64 = 0;
1448 cpu_arch_flags_not.bitfield.cpu64 = 0;
1449 cpu_arch_flags_not.bitfield.cpuno64 = 1;
1453 cpu_arch_flags.bitfield.cpu64 = 0;
1454 cpu_arch_flags.bitfield.cpuno64 = 1;
1455 cpu_arch_flags_not.bitfield.cpu64 = 1;
1456 cpu_arch_flags_not.bitfield.cpuno64 = 0;
1458 if (value == CODE_64BIT && !cpu_arch_flags.bitfield.cpulm )
1460 as_bad (_("64bit mode not supported on this CPU."));
1462 if (value == CODE_32BIT && !cpu_arch_flags.bitfield.cpui386)
1464 as_bad (_("32bit mode not supported on this CPU."));
1466 stackop_size = '\0';
1470 set_16bit_gcc_code_flag (int new_code_flag)
1472 flag_code = new_code_flag;
1473 if (flag_code != CODE_16BIT)
1475 cpu_arch_flags.bitfield.cpu64 = 0;
1476 cpu_arch_flags.bitfield.cpuno64 = 1;
1477 cpu_arch_flags_not.bitfield.cpu64 = 1;
1478 cpu_arch_flags_not.bitfield.cpuno64 = 0;
1479 stackop_size = LONG_MNEM_SUFFIX;
1483 set_intel_syntax (int syntax_flag)
1485 /* Find out if register prefixing is specified. */
1486 int ask_naked_reg = 0;
1489 if (!is_end_of_line[(unsigned char) *input_line_pointer])
1491 char *string = input_line_pointer;
1492 int e = get_symbol_end ();
1494 if (strcmp (string, "prefix") == 0)
1496 else if (strcmp (string, "noprefix") == 0)
1499 as_bad (_("bad argument to syntax directive."));
1500 *input_line_pointer = e;
1502 demand_empty_rest_of_line ();
1504 intel_syntax = syntax_flag;
1506 if (ask_naked_reg == 0)
1507 allow_naked_reg = (intel_syntax
1508 && (bfd_get_symbol_leading_char (stdoutput) != '\0'));
1510 allow_naked_reg = (ask_naked_reg < 0);
1512 identifier_chars['%'] = intel_syntax && allow_naked_reg ? '%' : 0;
1513 identifier_chars['$'] = intel_syntax ? '$' : 0;
1514 register_prefix = allow_naked_reg ? "" : "%";
1518 set_intel_mnemonic (int mnemonic_flag)
1520 /* Find out if register prefixing is specified. */
1521 int ask_naked_reg = 0;
1524 if (!is_end_of_line[(unsigned char) *input_line_pointer])
1526 char *string = input_line_pointer;
1527 int e = get_symbol_end ();
1529 if (strcmp (string, "prefix") == 0)
1531 else if (strcmp (string, "noprefix") == 0)
1534 as_bad (_("bad argument to syntax directive."));
1535 *input_line_pointer = e;
1537 demand_empty_rest_of_line ();
1539 /* intel_mnemonic implies intel_syntax. */
1540 intel_mnemonic = intel_syntax = mnemonic_flag;
1542 if (ask_naked_reg == 0)
1543 allow_naked_reg = (intel_mnemonic
1544 && (bfd_get_symbol_leading_char (stdoutput) != '\0'));
1546 allow_naked_reg = (ask_naked_reg < 0);
1548 identifier_chars['%'] = intel_mnemonic && allow_naked_reg ? '%' : 0;
1549 identifier_chars['$'] = intel_mnemonic ? '$' : 0;
1550 register_prefix = allow_naked_reg ? "" : "%";
1554 set_allow_index_reg (int flag)
1556 allow_index_reg = flag;
1560 set_cpu_arch (int dummy ATTRIBUTE_UNUSED)
1564 if (!is_end_of_line[(unsigned char) *input_line_pointer])
1566 char *string = input_line_pointer;
1567 int e = get_symbol_end ();
1569 i386_cpu_flags flags;
1571 for (i = 0; i < ARRAY_SIZE (cpu_arch); i++)
1573 if (strcmp (string, cpu_arch[i].name) == 0)
1577 cpu_arch_name = cpu_arch[i].name;
1578 cpu_sub_arch_name = NULL;
1579 cpu_arch_flags = cpu_arch[i].flags;
1580 if (flag_code == CODE_64BIT)
1582 cpu_arch_flags.bitfield.cpu64 = 1;
1583 cpu_arch_flags.bitfield.cpuno64 = 0;
1587 cpu_arch_flags.bitfield.cpu64 = 0;
1588 cpu_arch_flags.bitfield.cpuno64 = 1;
1590 cpu_arch_flags_not = cpu_flags_not (cpu_arch_flags);
1591 cpu_arch_isa = cpu_arch[i].type;
1592 cpu_arch_isa_flags = cpu_arch[i].flags;
1593 if (!cpu_arch_tune_set)
1595 cpu_arch_tune = cpu_arch_isa;
1596 cpu_arch_tune_flags = cpu_arch_isa_flags;
1601 flags = cpu_flags_or (cpu_arch_flags,
1603 if (!UINTS_EQUAL (flags, cpu_arch_flags))
1605 cpu_sub_arch_name = cpu_arch[i].name;
1606 cpu_arch_flags = flags;
1607 cpu_arch_flags_not = cpu_flags_not (cpu_arch_flags);
1609 *input_line_pointer = e;
1610 demand_empty_rest_of_line ();
1614 if (i >= ARRAY_SIZE (cpu_arch))
1615 as_bad (_("no such architecture: `%s'"), string);
1617 *input_line_pointer = e;
1620 as_bad (_("missing cpu architecture"));
1622 no_cond_jump_promotion = 0;
1623 if (*input_line_pointer == ','
1624 && !is_end_of_line[(unsigned char) input_line_pointer[1]])
1626 char *string = ++input_line_pointer;
1627 int e = get_symbol_end ();
1629 if (strcmp (string, "nojumps") == 0)
1630 no_cond_jump_promotion = 1;
1631 else if (strcmp (string, "jumps") == 0)
1634 as_bad (_("no such architecture modifier: `%s'"), string);
1636 *input_line_pointer = e;
1639 demand_empty_rest_of_line ();
1645 if (!strcmp (default_arch, "x86_64"))
1646 return bfd_mach_x86_64;
1647 else if (!strcmp (default_arch, "i386"))
1648 return bfd_mach_i386_i386;
1650 as_fatal (_("Unknown architecture"));
1656 const char *hash_err;
1658 cpu_arch_flags_not = cpu_flags_not (cpu_arch_flags);
1660 /* Initialize op_hash hash table. */
1661 op_hash = hash_new ();
1664 const template *optab;
1665 templates *core_optab;
1667 /* Setup for loop. */
1669 core_optab = (templates *) xmalloc (sizeof (templates));
1670 core_optab->start = optab;
1675 if (optab->name == NULL
1676 || strcmp (optab->name, (optab - 1)->name) != 0)
1678 /* different name --> ship out current template list;
1679 add to hash table; & begin anew. */
1680 core_optab->end = optab;
1681 hash_err = hash_insert (op_hash,
1686 as_fatal (_("Internal Error: Can't hash %s: %s"),
1690 if (optab->name == NULL)
1692 core_optab = (templates *) xmalloc (sizeof (templates));
1693 core_optab->start = optab;
1698 /* Initialize reg_hash hash table. */
1699 reg_hash = hash_new ();
1701 const reg_entry *regtab;
1702 unsigned int regtab_size = i386_regtab_size;
1704 for (regtab = i386_regtab; regtab_size--; regtab++)
1706 hash_err = hash_insert (reg_hash, regtab->reg_name, (PTR) regtab);
1708 as_fatal (_("Internal Error: Can't hash %s: %s"),
1714 /* Fill in lexical tables: mnemonic_chars, operand_chars. */
1719 for (c = 0; c < 256; c++)
1724 mnemonic_chars[c] = c;
1725 register_chars[c] = c;
1726 operand_chars[c] = c;
1728 else if (ISLOWER (c))
1730 mnemonic_chars[c] = c;
1731 register_chars[c] = c;
1732 operand_chars[c] = c;
1734 else if (ISUPPER (c))
1736 mnemonic_chars[c] = TOLOWER (c);
1737 register_chars[c] = mnemonic_chars[c];
1738 operand_chars[c] = c;
1741 if (ISALPHA (c) || ISDIGIT (c))
1742 identifier_chars[c] = c;
1745 identifier_chars[c] = c;
1746 operand_chars[c] = c;
1751 identifier_chars['@'] = '@';
1754 identifier_chars['?'] = '?';
1755 operand_chars['?'] = '?';
1757 digit_chars['-'] = '-';
1758 mnemonic_chars['-'] = '-';
1759 mnemonic_chars['.'] = '.';
1760 identifier_chars['_'] = '_';
1761 identifier_chars['.'] = '.';
1763 for (p = operand_special_chars; *p != '\0'; p++)
1764 operand_chars[(unsigned char) *p] = *p;
1767 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
1770 record_alignment (text_section, 2);
1771 record_alignment (data_section, 2);
1772 record_alignment (bss_section, 2);
1776 if (flag_code == CODE_64BIT)
1778 x86_dwarf2_return_column = 16;
1779 x86_cie_data_alignment = -8;
1783 x86_dwarf2_return_column = 8;
1784 x86_cie_data_alignment = -4;
1789 i386_print_statistics (FILE *file)
1791 hash_print_statistics (file, "i386 opcode", op_hash);
1792 hash_print_statistics (file, "i386 register", reg_hash);
1797 /* Debugging routines for md_assemble. */
1798 static void pte (template *);
1799 static void pt (i386_operand_type);
1800 static void pe (expressionS *);
1801 static void ps (symbolS *);
1804 pi (char *line, i386_insn *x)
1808 fprintf (stdout, "%s: template ", line);
1810 fprintf (stdout, " address: base %s index %s scale %x\n",
1811 x->base_reg ? x->base_reg->reg_name : "none",
1812 x->index_reg ? x->index_reg->reg_name : "none",
1813 x->log2_scale_factor);
1814 fprintf (stdout, " modrm: mode %x reg %x reg/mem %x\n",
1815 x->rm.mode, x->rm.reg, x->rm.regmem);
1816 fprintf (stdout, " sib: base %x index %x scale %x\n",
1817 x->sib.base, x->sib.index, x->sib.scale);
1818 fprintf (stdout, " rex: 64bit %x extX %x extY %x extZ %x\n",
1819 (x->rex & REX_W) != 0,
1820 (x->rex & REX_R) != 0,
1821 (x->rex & REX_X) != 0,
1822 (x->rex & REX_B) != 0);
1823 fprintf (stdout, " drex: reg %d rex 0x%x\n",
1824 x->drex.reg, x->drex.rex);
1825 for (i = 0; i < x->operands; i++)
1827 fprintf (stdout, " #%d: ", i + 1);
1829 fprintf (stdout, "\n");
1830 if (x->types[i].bitfield.reg8
1831 || x->types[i].bitfield.reg16
1832 || x->types[i].bitfield.reg32
1833 || x->types[i].bitfield.reg64
1834 || x->types[i].bitfield.regmmx
1835 || x->types[i].bitfield.regxmm
1836 || x->types[i].bitfield.sreg2
1837 || x->types[i].bitfield.sreg3
1838 || x->types[i].bitfield.control
1839 || x->types[i].bitfield.debug
1840 || x->types[i].bitfield.test)
1841 fprintf (stdout, "%s\n", x->op[i].regs->reg_name);
1842 if (operand_type_check (x->types[i], imm))
1844 if (operand_type_check (x->types[i], disp))
1845 pe (x->op[i].disps);
1853 fprintf (stdout, " %d operands ", t->operands);
1854 fprintf (stdout, "opcode %x ", t->base_opcode);
1855 if (t->extension_opcode != None)
1856 fprintf (stdout, "ext %x ", t->extension_opcode);
1857 if (t->opcode_modifier.d)
1858 fprintf (stdout, "D");
1859 if (t->opcode_modifier.w)
1860 fprintf (stdout, "W");
1861 fprintf (stdout, "\n");
1862 for (i = 0; i < t->operands; i++)
1864 fprintf (stdout, " #%d type ", i + 1);
1865 pt (t->operand_types[i]);
1866 fprintf (stdout, "\n");
1873 fprintf (stdout, " operation %d\n", e->X_op);
1874 fprintf (stdout, " add_number %ld (%lx)\n",
1875 (long) e->X_add_number, (long) e->X_add_number);
1876 if (e->X_add_symbol)
1878 fprintf (stdout, " add_symbol ");
1879 ps (e->X_add_symbol);
1880 fprintf (stdout, "\n");
1884 fprintf (stdout, " op_symbol ");
1885 ps (e->X_op_symbol);
1886 fprintf (stdout, "\n");
1893 fprintf (stdout, "%s type %s%s",
1895 S_IS_EXTERNAL (s) ? "EXTERNAL " : "",
1896 segment_name (S_GET_SEGMENT (s)));
1899 static struct type_name
1901 i386_operand_type mask;
1904 const type_names[] =
1906 { OPERAND_TYPE_REG8, "r8" },
1907 { OPERAND_TYPE_REG16, "r16" },
1908 { OPERAND_TYPE_REG32, "r32" },
1909 { OPERAND_TYPE_REG64, "r64" },
1910 { OPERAND_TYPE_IMM8, "i8" },
1911 { OPERAND_TYPE_IMM8, "i8s" },
1912 { OPERAND_TYPE_IMM16, "i16" },
1913 { OPERAND_TYPE_IMM32, "i32" },
1914 { OPERAND_TYPE_IMM32S, "i32s" },
1915 { OPERAND_TYPE_IMM64, "i64" },
1916 { OPERAND_TYPE_IMM1, "i1" },
1917 { OPERAND_TYPE_BASEINDEX, "BaseIndex" },
1918 { OPERAND_TYPE_DISP8, "d8" },
1919 { OPERAND_TYPE_DISP16, "d16" },
1920 { OPERAND_TYPE_DISP32, "d32" },
1921 { OPERAND_TYPE_DISP32S, "d32s" },
1922 { OPERAND_TYPE_DISP64, "d64" },
1923 { OPERAND_TYPE_INOUTPORTREG, "InOutPortReg" },
1924 { OPERAND_TYPE_SHIFTCOUNT, "ShiftCount" },
1925 { OPERAND_TYPE_CONTROL, "control reg" },
1926 { OPERAND_TYPE_TEST, "test reg" },
1927 { OPERAND_TYPE_DEBUG, "debug reg" },
1928 { OPERAND_TYPE_FLOATREG, "FReg" },
1929 { OPERAND_TYPE_FLOATACC, "FAcc" },
1930 { OPERAND_TYPE_SREG2, "SReg2" },
1931 { OPERAND_TYPE_SREG3, "SReg3" },
1932 { OPERAND_TYPE_ACC, "Acc" },
1933 { OPERAND_TYPE_JUMPABSOLUTE, "Jump Absolute" },
1934 { OPERAND_TYPE_REGMMX, "rMMX" },
1935 { OPERAND_TYPE_REGXMM, "rXMM" },
1936 { OPERAND_TYPE_ESSEG, "es" },
1940 pt (i386_operand_type t)
1943 i386_operand_type a;
1945 for (j = 0; j < ARRAY_SIZE (type_names); j++)
1947 a = operand_type_and (t, type_names[j].mask);
1948 if (!UINTS_ALL_ZERO (a))
1949 fprintf (stdout, "%s, ", type_names[j].name);
1954 #endif /* DEBUG386 */
1956 static bfd_reloc_code_real_type
1957 reloc (unsigned int size,
1960 bfd_reloc_code_real_type other)
1962 if (other != NO_RELOC)
1964 reloc_howto_type *reloc;
1969 case BFD_RELOC_X86_64_GOT32:
1970 return BFD_RELOC_X86_64_GOT64;
1972 case BFD_RELOC_X86_64_PLTOFF64:
1973 return BFD_RELOC_X86_64_PLTOFF64;
1975 case BFD_RELOC_X86_64_GOTPC32:
1976 other = BFD_RELOC_X86_64_GOTPC64;
1978 case BFD_RELOC_X86_64_GOTPCREL:
1979 other = BFD_RELOC_X86_64_GOTPCREL64;
1981 case BFD_RELOC_X86_64_TPOFF32:
1982 other = BFD_RELOC_X86_64_TPOFF64;
1984 case BFD_RELOC_X86_64_DTPOFF32:
1985 other = BFD_RELOC_X86_64_DTPOFF64;
1991 /* Sign-checking 4-byte relocations in 16-/32-bit code is pointless. */
1992 if (size == 4 && flag_code != CODE_64BIT)
1995 reloc = bfd_reloc_type_lookup (stdoutput, other);
1997 as_bad (_("unknown relocation (%u)"), other);
1998 else if (size != bfd_get_reloc_size (reloc))
1999 as_bad (_("%u-byte relocation cannot be applied to %u-byte field"),
2000 bfd_get_reloc_size (reloc),
2002 else if (pcrel && !reloc->pc_relative)
2003 as_bad (_("non-pc-relative relocation for pc-relative field"));
2004 else if ((reloc->complain_on_overflow == complain_overflow_signed
2006 || (reloc->complain_on_overflow == complain_overflow_unsigned
2008 as_bad (_("relocated field and relocation type differ in signedness"));
2017 as_bad (_("there are no unsigned pc-relative relocations"));
2020 case 1: return BFD_RELOC_8_PCREL;
2021 case 2: return BFD_RELOC_16_PCREL;
2022 case 4: return BFD_RELOC_32_PCREL;
2023 case 8: return BFD_RELOC_64_PCREL;
2025 as_bad (_("cannot do %u byte pc-relative relocation"), size);
2032 case 4: return BFD_RELOC_X86_64_32S;
2037 case 1: return BFD_RELOC_8;
2038 case 2: return BFD_RELOC_16;
2039 case 4: return BFD_RELOC_32;
2040 case 8: return BFD_RELOC_64;
2042 as_bad (_("cannot do %s %u byte relocation"),
2043 sign > 0 ? "signed" : "unsigned", size);
2047 return BFD_RELOC_NONE;
2050 /* Here we decide which fixups can be adjusted to make them relative to
2051 the beginning of the section instead of the symbol. Basically we need
2052 to make sure that the dynamic relocations are done correctly, so in
2053 some cases we force the original symbol to be used. */
2056 tc_i386_fix_adjustable (fixS *fixP ATTRIBUTE_UNUSED)
2058 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
2062 /* Don't adjust pc-relative references to merge sections in 64-bit
2064 if (use_rela_relocations
2065 && (S_GET_SEGMENT (fixP->fx_addsy)->flags & SEC_MERGE) != 0
2069 /* The x86_64 GOTPCREL are represented as 32bit PCrel relocations
2070 and changed later by validate_fix. */
2071 if (GOT_symbol && fixP->fx_subsy == GOT_symbol
2072 && fixP->fx_r_type == BFD_RELOC_32_PCREL)
2075 /* adjust_reloc_syms doesn't know about the GOT. */
2076 if (fixP->fx_r_type == BFD_RELOC_386_GOTOFF
2077 || fixP->fx_r_type == BFD_RELOC_386_PLT32
2078 || fixP->fx_r_type == BFD_RELOC_386_GOT32
2079 || fixP->fx_r_type == BFD_RELOC_386_TLS_GD
2080 || fixP->fx_r_type == BFD_RELOC_386_TLS_LDM
2081 || fixP->fx_r_type == BFD_RELOC_386_TLS_LDO_32
2082 || fixP->fx_r_type == BFD_RELOC_386_TLS_IE_32
2083 || fixP->fx_r_type == BFD_RELOC_386_TLS_IE
2084 || fixP->fx_r_type == BFD_RELOC_386_TLS_GOTIE
2085 || fixP->fx_r_type == BFD_RELOC_386_TLS_LE_32
2086 || fixP->fx_r_type == BFD_RELOC_386_TLS_LE
2087 || fixP->fx_r_type == BFD_RELOC_386_TLS_GOTDESC
2088 || fixP->fx_r_type == BFD_RELOC_386_TLS_DESC_CALL
2089 || fixP->fx_r_type == BFD_RELOC_X86_64_PLT32
2090 || fixP->fx_r_type == BFD_RELOC_X86_64_GOT32
2091 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTPCREL
2092 || fixP->fx_r_type == BFD_RELOC_X86_64_TLSGD
2093 || fixP->fx_r_type == BFD_RELOC_X86_64_TLSLD
2094 || fixP->fx_r_type == BFD_RELOC_X86_64_DTPOFF32
2095 || fixP->fx_r_type == BFD_RELOC_X86_64_DTPOFF64
2096 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTTPOFF
2097 || fixP->fx_r_type == BFD_RELOC_X86_64_TPOFF32
2098 || fixP->fx_r_type == BFD_RELOC_X86_64_TPOFF64
2099 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTOFF64
2100 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTPC32_TLSDESC
2101 || fixP->fx_r_type == BFD_RELOC_X86_64_TLSDESC_CALL
2102 || fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
2103 || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
2110 intel_float_operand (const char *mnemonic)
2112 /* Note that the value returned is meaningful only for opcodes with (memory)
2113 operands, hence the code here is free to improperly handle opcodes that
2114 have no operands (for better performance and smaller code). */
2116 if (mnemonic[0] != 'f')
2117 return 0; /* non-math */
2119 switch (mnemonic[1])
2121 /* fclex, fdecstp, fdisi, femms, feni, fincstp, finit, fsetpm, and
2122 the fs segment override prefix not currently handled because no
2123 call path can make opcodes without operands get here */
2125 return 2 /* integer op */;
2127 if (mnemonic[2] == 'd' && (mnemonic[3] == 'c' || mnemonic[3] == 'e'))
2128 return 3; /* fldcw/fldenv */
2131 if (mnemonic[2] != 'o' /* fnop */)
2132 return 3; /* non-waiting control op */
2135 if (mnemonic[2] == 's')
2136 return 3; /* frstor/frstpm */
2139 if (mnemonic[2] == 'a')
2140 return 3; /* fsave */
2141 if (mnemonic[2] == 't')
2143 switch (mnemonic[3])
2145 case 'c': /* fstcw */
2146 case 'd': /* fstdw */
2147 case 'e': /* fstenv */
2148 case 's': /* fsts[gw] */
2154 if (mnemonic[2] == 'r' || mnemonic[2] == 's')
2155 return 0; /* fxsave/fxrstor are not really math ops */
2162 /* This is the guts of the machine-dependent assembler. LINE points to a
2163 machine dependent instruction. This function is supposed to emit
2164 the frags/bytes it assembles to. */
2171 char mnemonic[MAX_MNEM_SIZE];
2173 /* Initialize globals. */
2174 memset (&i, '\0', sizeof (i));
2175 for (j = 0; j < MAX_OPERANDS; j++)
2176 i.reloc[j] = NO_RELOC;
2177 memset (disp_expressions, '\0', sizeof (disp_expressions));
2178 memset (im_expressions, '\0', sizeof (im_expressions));
2179 save_stack_p = save_stack;
2181 /* First parse an instruction mnemonic & call i386_operand for the operands.
2182 We assume that the scrubber has arranged it so that line[0] is the valid
2183 start of a (possibly prefixed) mnemonic. */
2185 line = parse_insn (line, mnemonic);
2189 line = parse_operands (line, mnemonic);
2193 /* Now we've parsed the mnemonic into a set of templates, and have the
2194 operands at hand. */
2196 /* All intel opcodes have reversed operands except for "bound" and
2197 "enter". We also don't reverse intersegment "jmp" and "call"
2198 instructions with 2 immediate operands so that the immediate segment
2199 precedes the offset, as it does when in AT&T mode. */
2202 && (strcmp (mnemonic, "bound") != 0)
2203 && (strcmp (mnemonic, "invlpga") != 0)
2204 && !(operand_type_check (i.types[0], imm)
2205 && operand_type_check (i.types[1], imm)))
2208 /* The order of the immediates should be reversed
2209 for 2 immediates extrq and insertq instructions */
2210 if (i.imm_operands == 2
2211 && (strcmp (mnemonic, "extrq") == 0
2212 || strcmp (mnemonic, "insertq") == 0))
2213 swap_2_operands (0, 1);
2218 /* Don't optimize displacement for movabs since it only takes 64bit
2221 && (flag_code != CODE_64BIT
2222 || strcmp (mnemonic, "movabs") != 0))
2225 /* Next, we find a template that matches the given insn,
2226 making sure the overlap of the given operands types is consistent
2227 with the template operand types. */
2229 if (!match_template ())
2234 /* Undo SYSV386_COMPAT brokenness when in Intel mode. See i386.h */
2236 && (i.tm.base_opcode & 0xfffffde0) == 0xdce0)
2237 i.tm.base_opcode ^= Opcode_FloatR;
2239 /* Zap movzx and movsx suffix. The suffix may have been set from
2240 "word ptr" or "byte ptr" on the source operand, but we'll use
2241 the suffix later to choose the destination register. */
2242 if ((i.tm.base_opcode & ~9) == 0x0fb6)
2244 if (i.reg_operands < 2
2246 && (!i.tm.opcode_modifier.no_bsuf
2247 || !i.tm.opcode_modifier.no_wsuf
2248 || !i.tm.opcode_modifier.no_lsuf
2249 || !i.tm.opcode_modifier.no_ssuf
2250 || !i.tm.opcode_modifier.no_ldsuf
2251 || !i.tm.opcode_modifier.no_qsuf))
2252 as_bad (_("ambiguous operand size for `%s'"), i.tm.name);
2258 if (i.tm.opcode_modifier.fwait)
2259 if (!add_prefix (FWAIT_OPCODE))
2262 /* Check string instruction segment overrides. */
2263 if (i.tm.opcode_modifier.isstring && i.mem_operands != 0)
2265 if (!check_string ())
2269 if (!process_suffix ())
2272 /* Make still unresolved immediate matches conform to size of immediate
2273 given in i.suffix. */
2274 if (!finalize_imm ())
2277 if (i.types[0].bitfield.imm1)
2278 i.imm_operands = 0; /* kludge for shift insns. */
2280 for (j = 0; j < 3; j++)
2281 if (i.types[j].bitfield.inoutportreg
2282 || i.types[j].bitfield.shiftcount
2283 || i.types[j].bitfield.acc
2284 || i.types[j].bitfield.floatacc)
2287 if (i.tm.opcode_modifier.immext)
2291 if (i.tm.cpu_flags.bitfield.cpusse3 && i.operands > 0)
2293 /* Streaming SIMD extensions 3 Instructions have the fixed
2294 operands with an opcode suffix which is coded in the same
2295 place as an 8-bit immediate field would be. Here we check
2296 those operands and remove them afterwards. */
2299 for (x = 0; x < i.operands; x++)
2300 if (i.op[x].regs->reg_num != x)
2301 as_bad (_("can't use register '%s%s' as operand %d in '%s'."),
2303 i.op[x].regs->reg_name,
2309 /* These AMD 3DNow! and Intel Katmai New Instructions have an
2310 opcode suffix which is coded in the same place as an 8-bit
2311 immediate field would be. Here we fake an 8-bit immediate
2312 operand from the opcode suffix stored in tm.extension_opcode.
2313 SSE5 also uses this encoding, for some of its 3 argument
2316 assert (i.imm_operands == 0
2318 || (i.tm.cpu_flags.bitfield.cpusse5
2319 && i.operands <= 3)));
2321 exp = &im_expressions[i.imm_operands++];
2322 i.op[i.operands].imms = exp;
2323 UINTS_CLEAR (i.types[i.operands]);
2324 i.types[i.operands].bitfield.imm8 = 1;
2326 exp->X_op = O_constant;
2327 exp->X_add_number = i.tm.extension_opcode;
2328 i.tm.extension_opcode = None;
2331 /* For insns with operands there are more diddles to do to the opcode. */
2334 if (!process_operands ())
2337 else if (!quiet_warnings && i.tm.opcode_modifier.ugh)
2339 /* UnixWare fsub no args is alias for fsubp, fadd -> faddp, etc. */
2340 as_warn (_("translating to `%sp'"), i.tm.name);
2343 /* Handle conversion of 'int $3' --> special int3 insn. */
2344 if (i.tm.base_opcode == INT_OPCODE && i.op[0].imms->X_add_number == 3)
2346 i.tm.base_opcode = INT3_OPCODE;
2350 if ((i.tm.opcode_modifier.jump
2351 || i.tm.opcode_modifier.jumpbyte
2352 || i.tm.opcode_modifier.jumpdword)
2353 && i.op[0].disps->X_op == O_constant)
2355 /* Convert "jmp constant" (and "call constant") to a jump (call) to
2356 the absolute address given by the constant. Since ix86 jumps and
2357 calls are pc relative, we need to generate a reloc. */
2358 i.op[0].disps->X_add_symbol = &abs_symbol;
2359 i.op[0].disps->X_op = O_symbol;
2362 if (i.tm.opcode_modifier.rex64)
2365 /* For 8 bit registers we need an empty rex prefix. Also if the
2366 instruction already has a prefix, we need to convert old
2367 registers to new ones. */
2369 if ((i.types[0].bitfield.reg8
2370 && (i.op[0].regs->reg_flags & RegRex64) != 0)
2371 || (i.types[1].bitfield.reg8
2372 && (i.op[1].regs->reg_flags & RegRex64) != 0)
2373 || ((i.types[0].bitfield.reg8
2374 || i.types[1].bitfield.reg8)
2379 i.rex |= REX_OPCODE;
2380 for (x = 0; x < 2; x++)
2382 /* Look for 8 bit operand that uses old registers. */
2383 if (i.types[x].bitfield.reg8
2384 && (i.op[x].regs->reg_flags & RegRex64) == 0)
2386 /* In case it is "hi" register, give up. */
2387 if (i.op[x].regs->reg_num > 3)
2388 as_bad (_("can't encode register '%s%s' in an "
2389 "instruction requiring REX prefix."),
2390 register_prefix, i.op[x].regs->reg_name);
2392 /* Otherwise it is equivalent to the extended register.
2393 Since the encoding doesn't change this is merely
2394 cosmetic cleanup for debug output. */
2396 i.op[x].regs = i.op[x].regs + 8;
2401 /* If the instruction has the DREX attribute (aka SSE5), don't emit a
2403 if (i.tm.opcode_modifier.drex || i.tm.opcode_modifier.drexc)
2408 else if (i.rex != 0)
2409 add_prefix (REX_OPCODE | i.rex);
2411 /* We are ready to output the insn. */
2416 parse_insn (char *line, char *mnemonic)
2419 char *token_start = l;
2424 /* Non-zero if we found a prefix only acceptable with string insns. */
2425 const char *expecting_string_instruction = NULL;
2430 while ((*mnem_p = mnemonic_chars[(unsigned char) *l]) != 0)
2433 if (mnem_p >= mnemonic + MAX_MNEM_SIZE)
2435 as_bad (_("no such instruction: `%s'"), token_start);
2440 if (!is_space_char (*l)
2441 && *l != END_OF_INSN
2443 || (*l != PREFIX_SEPARATOR
2446 as_bad (_("invalid character %s in mnemonic"),
2447 output_invalid (*l));
2450 if (token_start == l)
2452 if (!intel_syntax && *l == PREFIX_SEPARATOR)
2453 as_bad (_("expecting prefix; got nothing"));
2455 as_bad (_("expecting mnemonic; got nothing"));
2459 /* Look up instruction (or prefix) via hash table. */
2460 current_templates = hash_find (op_hash, mnemonic);
2462 if (*l != END_OF_INSN
2463 && (!is_space_char (*l) || l[1] != END_OF_INSN)
2464 && current_templates
2465 && current_templates->start->opcode_modifier.isprefix)
2467 if (!cpu_flags_check_cpu64 (current_templates->start->cpu_flags))
2469 as_bad ((flag_code != CODE_64BIT
2470 ? _("`%s' is only supported in 64-bit mode")
2471 : _("`%s' is not supported in 64-bit mode")),
2472 current_templates->start->name);
2475 /* If we are in 16-bit mode, do not allow addr16 or data16.
2476 Similarly, in 32-bit mode, do not allow addr32 or data32. */
2477 if ((current_templates->start->opcode_modifier.size16
2478 || current_templates->start->opcode_modifier.size32)
2479 && flag_code != CODE_64BIT
2480 && (current_templates->start->opcode_modifier.size32
2481 ^ (flag_code == CODE_16BIT)))
2483 as_bad (_("redundant %s prefix"),
2484 current_templates->start->name);
2487 /* Add prefix, checking for repeated prefixes. */
2488 switch (add_prefix (current_templates->start->base_opcode))
2493 expecting_string_instruction = current_templates->start->name;
2496 /* Skip past PREFIX_SEPARATOR and reset token_start. */
2503 if (!current_templates)
2505 /* See if we can get a match by trimming off a suffix. */
2508 case WORD_MNEM_SUFFIX:
2509 if (intel_syntax && (intel_float_operand (mnemonic) & 2))
2510 i.suffix = SHORT_MNEM_SUFFIX;
2512 case BYTE_MNEM_SUFFIX:
2513 case QWORD_MNEM_SUFFIX:
2514 i.suffix = mnem_p[-1];
2516 current_templates = hash_find (op_hash, mnemonic);
2518 case SHORT_MNEM_SUFFIX:
2519 case LONG_MNEM_SUFFIX:
2522 i.suffix = mnem_p[-1];
2524 current_templates = hash_find (op_hash, mnemonic);
2532 if (intel_float_operand (mnemonic) == 1)
2533 i.suffix = SHORT_MNEM_SUFFIX;
2535 i.suffix = LONG_MNEM_SUFFIX;
2537 current_templates = hash_find (op_hash, mnemonic);
2541 if (!current_templates)
2543 as_bad (_("no such instruction: `%s'"), token_start);
2548 if (current_templates->start->opcode_modifier.jump
2549 || current_templates->start->opcode_modifier.jumpbyte)
2551 /* Check for a branch hint. We allow ",pt" and ",pn" for
2552 predict taken and predict not taken respectively.
2553 I'm not sure that branch hints actually do anything on loop
2554 and jcxz insns (JumpByte) for current Pentium4 chips. They
2555 may work in the future and it doesn't hurt to accept them
2557 if (l[0] == ',' && l[1] == 'p')
2561 if (!add_prefix (DS_PREFIX_OPCODE))
2565 else if (l[2] == 'n')
2567 if (!add_prefix (CS_PREFIX_OPCODE))
2573 /* Any other comma loses. */
2576 as_bad (_("invalid character %s in mnemonic"),
2577 output_invalid (*l));
2581 /* Check if instruction is supported on specified architecture. */
2583 for (t = current_templates->start; t < current_templates->end; ++t)
2585 if (cpu_flags_match (t->cpu_flags))
2587 if (cpu_flags_check_cpu64 (t->cpu_flags))
2590 if (!(supported & 2))
2592 as_bad (flag_code == CODE_64BIT
2593 ? _("`%s' is not supported in 64-bit mode")
2594 : _("`%s' is only supported in 64-bit mode"),
2595 current_templates->start->name);
2598 if (!(supported & 1))
2600 as_warn (_("`%s' is not supported on `%s%s'"),
2601 current_templates->start->name,
2603 cpu_sub_arch_name ? cpu_sub_arch_name : "");
2605 else if (!cpu_arch_flags.bitfield.cpui386
2606 && (flag_code != CODE_16BIT))
2608 as_warn (_("use .code16 to ensure correct addressing mode"));
2611 /* Check for rep/repne without a string instruction. */
2612 if (expecting_string_instruction)
2614 static templates override;
2616 for (t = current_templates->start; t < current_templates->end; ++t)
2617 if (t->opcode_modifier.isstring)
2619 if (t >= current_templates->end)
2621 as_bad (_("expecting string instruction after `%s'"),
2622 expecting_string_instruction);
2625 for (override.start = t; t < current_templates->end; ++t)
2626 if (!t->opcode_modifier.isstring)
2629 current_templates = &override;
2636 parse_operands (char *l, const char *mnemonic)
2640 /* 1 if operand is pending after ','. */
2641 unsigned int expecting_operand = 0;
2643 /* Non-zero if operand parens not balanced. */
2644 unsigned int paren_not_balanced;
2646 while (*l != END_OF_INSN)
2648 /* Skip optional white space before operand. */
2649 if (is_space_char (*l))
2651 if (!is_operand_char (*l) && *l != END_OF_INSN)
2653 as_bad (_("invalid character %s before operand %d"),
2654 output_invalid (*l),
2658 token_start = l; /* after white space */
2659 paren_not_balanced = 0;
2660 while (paren_not_balanced || *l != ',')
2662 if (*l == END_OF_INSN)
2664 if (paren_not_balanced)
2667 as_bad (_("unbalanced parenthesis in operand %d."),
2670 as_bad (_("unbalanced brackets in operand %d."),
2675 break; /* we are done */
2677 else if (!is_operand_char (*l) && !is_space_char (*l))
2679 as_bad (_("invalid character %s in operand %d"),
2680 output_invalid (*l),
2687 ++paren_not_balanced;
2689 --paren_not_balanced;
2694 ++paren_not_balanced;
2696 --paren_not_balanced;
2700 if (l != token_start)
2701 { /* Yes, we've read in another operand. */
2702 unsigned int operand_ok;
2703 this_operand = i.operands++;
2704 if (i.operands > MAX_OPERANDS)
2706 as_bad (_("spurious operands; (%d operands/instruction max)"),
2710 /* Now parse operand adding info to 'i' as we go along. */
2711 END_STRING_AND_SAVE (l);
2715 i386_intel_operand (token_start,
2716 intel_float_operand (mnemonic));
2718 operand_ok = i386_operand (token_start);
2720 RESTORE_END_STRING (l);
2726 if (expecting_operand)
2728 expecting_operand_after_comma:
2729 as_bad (_("expecting operand after ','; got nothing"));
2734 as_bad (_("expecting operand before ','; got nothing"));
2739 /* Now *l must be either ',' or END_OF_INSN. */
2742 if (*++l == END_OF_INSN)
2744 /* Just skip it, if it's \n complain. */
2745 goto expecting_operand_after_comma;
2747 expecting_operand = 1;
2754 swap_2_operands (int xchg1, int xchg2)
2756 union i386_op temp_op;
2757 i386_operand_type temp_type;
2758 enum bfd_reloc_code_real temp_reloc;
2760 temp_type = i.types[xchg2];
2761 i.types[xchg2] = i.types[xchg1];
2762 i.types[xchg1] = temp_type;
2763 temp_op = i.op[xchg2];
2764 i.op[xchg2] = i.op[xchg1];
2765 i.op[xchg1] = temp_op;
2766 temp_reloc = i.reloc[xchg2];
2767 i.reloc[xchg2] = i.reloc[xchg1];
2768 i.reloc[xchg1] = temp_reloc;
2772 swap_operands (void)
2777 swap_2_operands (1, i.operands - 2);
2780 swap_2_operands (0, i.operands - 1);
2786 if (i.mem_operands == 2)
2788 const seg_entry *temp_seg;
2789 temp_seg = i.seg[0];
2790 i.seg[0] = i.seg[1];
2791 i.seg[1] = temp_seg;
2795 /* Try to ensure constant immediates are represented in the smallest
2800 char guess_suffix = 0;
2804 guess_suffix = i.suffix;
2805 else if (i.reg_operands)
2807 /* Figure out a suffix from the last register operand specified.
2808 We can't do this properly yet, ie. excluding InOutPortReg,
2809 but the following works for instructions with immediates.
2810 In any case, we can't set i.suffix yet. */
2811 for (op = i.operands; --op >= 0;)
2812 if (i.types[op].bitfield.reg8)
2814 guess_suffix = BYTE_MNEM_SUFFIX;
2817 else if (i.types[op].bitfield.reg16)
2819 guess_suffix = WORD_MNEM_SUFFIX;
2822 else if (i.types[op].bitfield.reg32)
2824 guess_suffix = LONG_MNEM_SUFFIX;
2827 else if (i.types[op].bitfield.reg64)
2829 guess_suffix = QWORD_MNEM_SUFFIX;
2833 else if ((flag_code == CODE_16BIT) ^ (i.prefix[DATA_PREFIX] != 0))
2834 guess_suffix = WORD_MNEM_SUFFIX;
2836 for (op = i.operands; --op >= 0;)
2837 if (operand_type_check (i.types[op], imm))
2839 switch (i.op[op].imms->X_op)
2842 /* If a suffix is given, this operand may be shortened. */
2843 switch (guess_suffix)
2845 case LONG_MNEM_SUFFIX:
2846 i.types[op].bitfield.imm32 = 1;
2847 i.types[op].bitfield.imm64 = 1;
2849 case WORD_MNEM_SUFFIX:
2850 i.types[op].bitfield.imm16 = 1;
2851 i.types[op].bitfield.imm32 = 1;
2852 i.types[op].bitfield.imm32s = 1;
2853 i.types[op].bitfield.imm64 = 1;
2855 case BYTE_MNEM_SUFFIX:
2856 i.types[op].bitfield.imm8 = 1;
2857 i.types[op].bitfield.imm8s = 1;
2858 i.types[op].bitfield.imm16 = 1;
2859 i.types[op].bitfield.imm32 = 1;
2860 i.types[op].bitfield.imm32s = 1;
2861 i.types[op].bitfield.imm64 = 1;
2865 /* If this operand is at most 16 bits, convert it
2866 to a signed 16 bit number before trying to see
2867 whether it will fit in an even smaller size.
2868 This allows a 16-bit operand such as $0xffe0 to
2869 be recognised as within Imm8S range. */
2870 if ((i.types[op].bitfield.imm16)
2871 && (i.op[op].imms->X_add_number & ~(offsetT) 0xffff) == 0)
2873 i.op[op].imms->X_add_number =
2874 (((i.op[op].imms->X_add_number & 0xffff) ^ 0x8000) - 0x8000);
2876 if ((i.types[op].bitfield.imm32)
2877 && ((i.op[op].imms->X_add_number & ~(((offsetT) 2 << 31) - 1))
2880 i.op[op].imms->X_add_number = ((i.op[op].imms->X_add_number
2881 ^ ((offsetT) 1 << 31))
2882 - ((offsetT) 1 << 31));
2885 = operand_type_or (i.types[op],
2886 smallest_imm_type (i.op[op].imms->X_add_number));
2888 /* We must avoid matching of Imm32 templates when 64bit
2889 only immediate is available. */
2890 if (guess_suffix == QWORD_MNEM_SUFFIX)
2891 i.types[op].bitfield.imm32 = 0;
2898 /* Symbols and expressions. */
2900 /* Convert symbolic operand to proper sizes for matching, but don't
2901 prevent matching a set of insns that only supports sizes other
2902 than those matching the insn suffix. */
2904 i386_operand_type mask, allowed;
2908 UINTS_CLEAR (allowed);
2910 for (t = current_templates->start;
2911 t < current_templates->end;
2913 allowed = operand_type_or (allowed,
2914 t->operand_types[op]);
2915 switch (guess_suffix)
2917 case QWORD_MNEM_SUFFIX:
2918 mask.bitfield.imm64 = 1;
2919 mask.bitfield.imm32s = 1;
2921 case LONG_MNEM_SUFFIX:
2922 mask.bitfield.imm32 = 1;
2924 case WORD_MNEM_SUFFIX:
2925 mask.bitfield.imm16 = 1;
2927 case BYTE_MNEM_SUFFIX:
2928 mask.bitfield.imm8 = 1;
2933 allowed = operand_type_and (mask, allowed);
2934 if (!UINTS_ALL_ZERO (allowed))
2935 i.types[op] = operand_type_and (i.types[op], mask);
2942 /* Try to use the smallest displacement type too. */
2944 optimize_disp (void)
2948 for (op = i.operands; --op >= 0;)
2949 if (operand_type_check (i.types[op], disp))
2951 if (i.op[op].disps->X_op == O_constant)
2953 offsetT disp = i.op[op].disps->X_add_number;
2955 if (i.types[op].bitfield.disp16
2956 && (disp & ~(offsetT) 0xffff) == 0)
2958 /* If this operand is at most 16 bits, convert
2959 to a signed 16 bit number and don't use 64bit
2961 disp = (((disp & 0xffff) ^ 0x8000) - 0x8000);
2962 i.types[op].bitfield.disp64 = 0;
2964 if (i.types[op].bitfield.disp32
2965 && (disp & ~(((offsetT) 2 << 31) - 1)) == 0)
2967 /* If this operand is at most 32 bits, convert
2968 to a signed 32 bit number and don't use 64bit
2970 disp &= (((offsetT) 2 << 31) - 1);
2971 disp = (disp ^ ((offsetT) 1 << 31)) - ((addressT) 1 << 31);
2972 i.types[op].bitfield.disp64 = 0;
2974 if (!disp && i.types[op].bitfield.baseindex)
2976 i.types[op].bitfield.disp8 = 0;
2977 i.types[op].bitfield.disp16 = 0;
2978 i.types[op].bitfield.disp32 = 0;
2979 i.types[op].bitfield.disp32s = 0;
2980 i.types[op].bitfield.disp64 = 0;
2984 else if (flag_code == CODE_64BIT)
2986 if (fits_in_signed_long (disp))
2988 i.types[op].bitfield.disp64 = 0;
2989 i.types[op].bitfield.disp32s = 1;
2991 if (fits_in_unsigned_long (disp))
2992 i.types[op].bitfield.disp32 = 1;
2994 if ((i.types[op].bitfield.disp32
2995 || i.types[op].bitfield.disp32s
2996 || i.types[op].bitfield.disp16)
2997 && fits_in_signed_byte (disp))
2998 i.types[op].bitfield.disp8 = 1;
3000 else if (i.reloc[op] == BFD_RELOC_386_TLS_DESC_CALL
3001 || i.reloc[op] == BFD_RELOC_X86_64_TLSDESC_CALL)
3003 fix_new_exp (frag_now, frag_more (0) - frag_now->fr_literal, 0,
3004 i.op[op].disps, 0, i.reloc[op]);
3005 i.types[op].bitfield.disp8 = 0;
3006 i.types[op].bitfield.disp16 = 0;
3007 i.types[op].bitfield.disp32 = 0;
3008 i.types[op].bitfield.disp32s = 0;
3009 i.types[op].bitfield.disp64 = 0;
3012 /* We only support 64bit displacement on constants. */
3013 i.types[op].bitfield.disp64 = 0;
3018 match_template (void)
3020 /* Points to template once we've found it. */
3022 i386_operand_type overlap0, overlap1, overlap2, overlap3;
3023 unsigned int found_reverse_match;
3024 i386_opcode_modifier suffix_check;
3025 i386_operand_type operand_types [MAX_OPERANDS];
3026 int addr_prefix_disp;
3028 i386_cpu_flags overlap;
3030 #if MAX_OPERANDS != 4
3031 # error "MAX_OPERANDS must be 4."
3034 found_reverse_match = 0;
3035 addr_prefix_disp = -1;
3037 memset (&suffix_check, 0, sizeof (suffix_check));
3038 if (i.suffix == BYTE_MNEM_SUFFIX)
3039 suffix_check.no_bsuf = 1;
3040 else if (i.suffix == WORD_MNEM_SUFFIX)
3041 suffix_check.no_wsuf = 1;
3042 else if (i.suffix == SHORT_MNEM_SUFFIX)
3043 suffix_check.no_ssuf = 1;
3044 else if (i.suffix == LONG_MNEM_SUFFIX)
3045 suffix_check.no_lsuf = 1;
3046 else if (i.suffix == QWORD_MNEM_SUFFIX)
3047 suffix_check.no_qsuf = 1;
3048 else if (i.suffix == LONG_DOUBLE_MNEM_SUFFIX)
3049 suffix_check.no_ldsuf = 1;
3050 else if (i.suffix == XMMWORD_MNEM_SUFFIX)
3051 suffix_check.xmmword = 1;
3053 for (t = current_templates->start; t < current_templates->end; t++)
3055 addr_prefix_disp = -1;
3057 /* Must have right number of operands. */
3058 if (i.operands != t->operands)
3061 /* Check AT&T mnemonic and old gcc support. */
3062 if (t->opcode_modifier.attmnemonic
3065 && t->opcode_modifier.oldgcc)))
3068 /* Check Intel mnemonic. */
3069 if (!intel_mnemonic && t->opcode_modifier.intelmnemonic)
3072 /* Check the suffix, except for some instructions in intel mode. */
3073 if ((!intel_syntax || !t->opcode_modifier.ignoresize)
3074 && ((t->opcode_modifier.no_bsuf && suffix_check.no_bsuf)
3075 || (t->opcode_modifier.no_wsuf && suffix_check.no_wsuf)
3076 || (t->opcode_modifier.no_lsuf && suffix_check.no_lsuf)
3077 || (t->opcode_modifier.no_ssuf && suffix_check.no_ssuf)
3078 || (t->opcode_modifier.no_qsuf && suffix_check.no_qsuf)
3079 || (t->opcode_modifier.no_ldsuf && suffix_check.no_ldsuf)))
3082 /* Check the memory size in Intel mode when it is provided if
3086 && t->opcode_modifier.checksize
3087 && (!t->opcode_modifier.byte || !suffix_check.no_bsuf)
3088 && (!t->opcode_modifier.word || !suffix_check.no_wsuf)
3089 && (!t->opcode_modifier.dword || !suffix_check.no_lsuf)
3090 && (!t->opcode_modifier.qword || !suffix_check.no_qsuf)
3091 && (!t->opcode_modifier.xmmword || !suffix_check.xmmword))
3094 for (j = 0; j < MAX_OPERANDS; j++)
3095 operand_types [j] = t->operand_types [j];
3097 /* In general, don't allow 64-bit operands in 32-bit mode. */
3098 if (i.suffix == QWORD_MNEM_SUFFIX
3099 && flag_code != CODE_64BIT
3101 ? (!t->opcode_modifier.ignoresize
3102 && !intel_float_operand (t->name))
3103 : intel_float_operand (t->name) != 2)
3104 && ((!operand_types[0].bitfield.regmmx
3105 && !operand_types[0].bitfield.regxmm)
3106 || (!operand_types[t->operands > 1].bitfield.regmmx
3107 && !!operand_types[t->operands > 1].bitfield.regxmm))
3108 && (t->base_opcode != 0x0fc7
3109 || t->extension_opcode != 1 /* cmpxchg8b */))
3112 /* Do not verify operands when there are none. */
3115 overlap = cpu_flags_and (t->cpu_flags, cpu_arch_flags_not);
3118 if (!UINTS_ALL_ZERO (overlap))
3120 /* We've found a match; break out of loop. */
3125 /* Address size prefix will turn Disp64/Disp32/Disp16 operand
3126 into Disp32/Disp16/Disp32 operand. */
3127 if (i.prefix[ADDR_PREFIX] != 0)
3129 /* There should be only one Disp operand. */
3133 for (j = 0; j < MAX_OPERANDS; j++)
3135 if (operand_types[j].bitfield.disp16)
3137 addr_prefix_disp = j;
3138 operand_types[j].bitfield.disp32 = 1;
3139 operand_types[j].bitfield.disp16 = 0;
3145 for (j = 0; j < MAX_OPERANDS; j++)
3147 if (operand_types[j].bitfield.disp32)
3149 addr_prefix_disp = j;
3150 operand_types[j].bitfield.disp32 = 0;
3151 operand_types[j].bitfield.disp16 = 1;
3157 for (j = 0; j < MAX_OPERANDS; j++)
3159 if (operand_types[j].bitfield.disp64)
3161 addr_prefix_disp = j;
3162 operand_types[j].bitfield.disp64 = 0;
3163 operand_types[j].bitfield.disp32 = 1;
3171 overlap0 = operand_type_and (i.types[0], operand_types[0]);
3172 switch (t->operands)
3175 if (!operand_type_match (overlap0, i.types[0]))
3179 /* xchg %eax, %eax is a special case. It is an aliase for nop
3180 only in 32bit mode and we can use opcode 0x90. In 64bit
3181 mode, we can't use 0x90 for xchg %eax, %eax since it should
3182 zero-extend %eax to %rax. */
3183 if (flag_code == CODE_64BIT
3184 && t->base_opcode == 0x90
3185 && UINTS_EQUAL (i.types [0], acc32)
3186 && UINTS_EQUAL (i.types [1], acc32))
3190 overlap1 = operand_type_and (i.types[1], operand_types[1]);
3191 if (!operand_type_match (overlap0, i.types[0])
3192 || !operand_type_match (overlap1, i.types[1])
3193 /* monitor in SSE3 is a very special case. The first
3194 register and the second register may have different
3195 sizes. The same applies to crc32 in SSE4.2. It is
3196 also true for invlpga, vmload, vmrun and vmsave in
3198 || !((t->base_opcode == 0x0f01
3199 && (t->extension_opcode == 0xc8
3200 || t->extension_opcode == 0xd8
3201 || t->extension_opcode == 0xda
3202 || t->extension_opcode == 0xdb
3203 || t->extension_opcode == 0xdf))
3204 || t->base_opcode == 0xf20f38f1
3205 || operand_type_register_match (overlap0, i.types[0],
3207 overlap1, i.types[1],
3210 /* Check if other direction is valid ... */
3211 if (!t->opcode_modifier.d && !t->opcode_modifier.floatd)
3214 /* Try reversing direction of operands. */
3215 overlap0 = operand_type_and (i.types[0], operand_types[1]);
3216 overlap1 = operand_type_and (i.types[1], operand_types[0]);
3217 if (!operand_type_match (overlap0, i.types[0])
3218 || !operand_type_match (overlap1, i.types[1])
3219 || !operand_type_register_match (overlap0, i.types[0],
3221 overlap1, i.types[1],
3224 /* Does not match either direction. */
3227 /* found_reverse_match holds which of D or FloatDR
3229 if (t->opcode_modifier.d)
3230 found_reverse_match = Opcode_D;
3231 else if (t->opcode_modifier.floatd)
3232 found_reverse_match = Opcode_FloatD;
3234 found_reverse_match = 0;
3235 if (t->opcode_modifier.floatr)
3236 found_reverse_match |= Opcode_FloatR;
3240 /* Found a forward 2 operand match here. */
3241 switch (t->operands)
3244 overlap3 = operand_type_and (i.types[3],
3247 overlap2 = operand_type_and (i.types[2],
3252 switch (t->operands)
3255 if (!operand_type_match (overlap3, i.types[3])
3256 || !operand_type_register_match (overlap2,
3264 /* Here we make use of the fact that there are no
3265 reverse match 3 operand instructions, and all 3
3266 operand instructions only need to be checked for
3267 register consistency between operands 2 and 3. */
3268 if (!operand_type_match (overlap2, i.types[2])
3269 || !operand_type_register_match (overlap1,
3279 /* Found either forward/reverse 2, 3 or 4 operand match here:
3280 slip through to break. */
3282 if (!UINTS_ALL_ZERO (overlap))
3284 found_reverse_match = 0;
3287 /* We've found a match; break out of loop. */
3291 if (t == current_templates->end)
3293 /* We found no match. */
3294 as_bad (_("suffix or operands invalid for `%s'"),
3295 current_templates->start->name);
3299 if (!quiet_warnings)
3302 && (i.types[0].bitfield.jumpabsolute
3303 != operand_types[0].bitfield.jumpabsolute))
3305 as_warn (_("indirect %s without `*'"), t->name);
3308 if (t->opcode_modifier.isprefix
3309 && t->opcode_modifier.ignoresize)
3311 /* Warn them that a data or address size prefix doesn't
3312 affect assembly of the next line of code. */
3313 as_warn (_("stand-alone `%s' prefix"), t->name);
3317 /* Copy the template we found. */
3320 if (addr_prefix_disp != -1)
3321 i.tm.operand_types[addr_prefix_disp]
3322 = operand_types[addr_prefix_disp];
3324 if (found_reverse_match)
3326 /* If we found a reverse match we must alter the opcode
3327 direction bit. found_reverse_match holds bits to change
3328 (different for int & float insns). */
3330 i.tm.base_opcode ^= found_reverse_match;
3332 i.tm.operand_types[0] = operand_types[1];
3333 i.tm.operand_types[1] = operand_types[0];
3342 int mem_op = operand_type_check (i.types[0], anymem) ? 0 : 1;
3343 if (i.tm.operand_types[mem_op].bitfield.esseg)
3345 if (i.seg[0] != NULL && i.seg[0] != &es)
3347 as_bad (_("`%s' operand %d must use `%%es' segment"),
3352 /* There's only ever one segment override allowed per instruction.
3353 This instruction possibly has a legal segment override on the
3354 second operand, so copy the segment to where non-string
3355 instructions store it, allowing common code. */
3356 i.seg[0] = i.seg[1];
3358 else if (i.tm.operand_types[mem_op + 1].bitfield.esseg)
3360 if (i.seg[1] != NULL && i.seg[1] != &es)
3362 as_bad (_("`%s' operand %d must use `%%es' segment"),
3372 process_suffix (void)
3374 /* If matched instruction specifies an explicit instruction mnemonic
3376 if (i.tm.opcode_modifier.size16)
3377 i.suffix = WORD_MNEM_SUFFIX;
3378 else if (i.tm.opcode_modifier.size32)
3379 i.suffix = LONG_MNEM_SUFFIX;
3380 else if (i.tm.opcode_modifier.size64)
3381 i.suffix = QWORD_MNEM_SUFFIX;
3382 else if (i.reg_operands)
3384 /* If there's no instruction mnemonic suffix we try to invent one
3385 based on register operands. */
3388 /* We take i.suffix from the last register operand specified,
3389 Destination register type is more significant than source
3390 register type. crc32 in SSE4.2 prefers source register
3392 if (i.tm.base_opcode == 0xf20f38f1)
3394 if (i.types[0].bitfield.reg16)
3395 i.suffix = WORD_MNEM_SUFFIX;
3396 else if (i.types[0].bitfield.reg32)
3397 i.suffix = LONG_MNEM_SUFFIX;
3398 else if (i.types[0].bitfield.reg64)
3399 i.suffix = QWORD_MNEM_SUFFIX;
3401 else if (i.tm.base_opcode == 0xf20f38f0)
3403 if (i.types[0].bitfield.reg8)
3404 i.suffix = BYTE_MNEM_SUFFIX;
3411 if (i.tm.base_opcode == 0xf20f38f1
3412 || i.tm.base_opcode == 0xf20f38f0)
3414 /* We have to know the operand size for crc32. */
3415 as_bad (_("ambiguous memory operand size for `%s`"),
3420 for (op = i.operands; --op >= 0;)
3421 if (!i.tm.operand_types[op].bitfield.inoutportreg)
3423 if (i.types[op].bitfield.reg8)
3425 i.suffix = BYTE_MNEM_SUFFIX;
3428 else if (i.types[op].bitfield.reg16)
3430 i.suffix = WORD_MNEM_SUFFIX;
3433 else if (i.types[op].bitfield.reg32)
3435 i.suffix = LONG_MNEM_SUFFIX;
3438 else if (i.types[op].bitfield.reg64)
3440 i.suffix = QWORD_MNEM_SUFFIX;
3446 else if (i.suffix == BYTE_MNEM_SUFFIX)
3448 if (!check_byte_reg ())
3451 else if (i.suffix == LONG_MNEM_SUFFIX)
3453 if (!check_long_reg ())
3456 else if (i.suffix == QWORD_MNEM_SUFFIX)
3459 && i.tm.opcode_modifier.ignoresize
3460 && i.tm.opcode_modifier.no_qsuf)
3462 else if (!check_qword_reg ())
3465 else if (i.suffix == WORD_MNEM_SUFFIX)
3467 if (!check_word_reg ())
3470 else if (i.suffix == XMMWORD_MNEM_SUFFIX)
3472 /* Skip if the instruction has x suffix. match_template
3473 should check if it is a valid suffix. */
3475 else if (intel_syntax && i.tm.opcode_modifier.ignoresize)
3476 /* Do nothing if the instruction is going to ignore the prefix. */
3481 else if (i.tm.opcode_modifier.defaultsize
3483 /* exclude fldenv/frstor/fsave/fstenv */
3484 && i.tm.opcode_modifier.no_ssuf)
3486 i.suffix = stackop_size;
3488 else if (intel_syntax
3490 && (i.tm.operand_types[0].bitfield.jumpabsolute
3491 || i.tm.opcode_modifier.jumpbyte
3492 || i.tm.opcode_modifier.jumpintersegment
3493 || (i.tm.base_opcode == 0x0f01 /* [ls][gi]dt */
3494 && i.tm.extension_opcode <= 3)))
3499 if (!i.tm.opcode_modifier.no_qsuf)
3501 i.suffix = QWORD_MNEM_SUFFIX;
3505 if (!i.tm.opcode_modifier.no_lsuf)
3506 i.suffix = LONG_MNEM_SUFFIX;
3509 if (!i.tm.opcode_modifier.no_wsuf)
3510 i.suffix = WORD_MNEM_SUFFIX;
3519 if (i.tm.opcode_modifier.w)
3521 as_bad (_("no instruction mnemonic suffix given and "
3522 "no register operands; can't size instruction"));
3528 unsigned int suffixes;
3530 suffixes = !i.tm.opcode_modifier.no_bsuf;
3531 if (!i.tm.opcode_modifier.no_wsuf)
3533 if (!i.tm.opcode_modifier.no_lsuf)
3535 if (!i.tm.opcode_modifier.no_ldsuf)
3537 if (!i.tm.opcode_modifier.no_ssuf)
3539 if (!i.tm.opcode_modifier.no_qsuf)
3542 /* There are more than suffix matches. */
3543 if (i.tm.opcode_modifier.w
3544 || ((suffixes & (suffixes - 1))
3545 && !i.tm.opcode_modifier.defaultsize
3546 && !i.tm.opcode_modifier.ignoresize))
3548 as_bad (_("ambiguous operand size for `%s'"), i.tm.name);
3554 /* Change the opcode based on the operand size given by i.suffix;
3555 We don't need to change things for byte insns. */
3558 && i.suffix != BYTE_MNEM_SUFFIX
3559 && i.suffix != XMMWORD_MNEM_SUFFIX)
3561 /* It's not a byte, select word/dword operation. */
3562 if (i.tm.opcode_modifier.w)
3564 if (i.tm.opcode_modifier.shortform)
3565 i.tm.base_opcode |= 8;
3567 i.tm.base_opcode |= 1;
3570 /* Now select between word & dword operations via the operand
3571 size prefix, except for instructions that will ignore this
3573 if (i.tm.opcode_modifier.addrprefixop0)
3575 /* The address size override prefix changes the size of the
3577 if ((flag_code == CODE_32BIT
3578 && i.op->regs[0].reg_type.bitfield.reg16)
3579 || (flag_code != CODE_32BIT
3580 && i.op->regs[0].reg_type.bitfield.reg32))
3581 if (!add_prefix (ADDR_PREFIX_OPCODE))
3584 else if (i.suffix != QWORD_MNEM_SUFFIX
3585 && i.suffix != LONG_DOUBLE_MNEM_SUFFIX
3586 && !i.tm.opcode_modifier.ignoresize
3587 && !i.tm.opcode_modifier.floatmf
3588 && ((i.suffix == LONG_MNEM_SUFFIX) == (flag_code == CODE_16BIT)
3589 || (flag_code == CODE_64BIT
3590 && i.tm.opcode_modifier.jumpbyte)))
3592 unsigned int prefix = DATA_PREFIX_OPCODE;
3594 if (i.tm.opcode_modifier.jumpbyte) /* jcxz, loop */
3595 prefix = ADDR_PREFIX_OPCODE;
3597 if (!add_prefix (prefix))
3601 /* Set mode64 for an operand. */
3602 if (i.suffix == QWORD_MNEM_SUFFIX
3603 && flag_code == CODE_64BIT
3604 && !i.tm.opcode_modifier.norex64)
3606 /* Special case for xchg %rax,%rax. It is NOP and doesn't
3607 need rex64. cmpxchg8b is also a special case. */
3608 if (! (i.operands == 2
3609 && i.tm.base_opcode == 0x90
3610 && i.tm.extension_opcode == None
3611 && UINTS_EQUAL (i.types [0], acc64)
3612 && UINTS_EQUAL (i.types [1], acc64))
3613 && ! (i.operands == 1
3614 && i.tm.base_opcode == 0xfc7
3615 && i.tm.extension_opcode == 1
3616 && !operand_type_check (i.types [0], reg)
3617 && operand_type_check (i.types [0], anymem)))
3621 /* Size floating point instruction. */
3622 if (i.suffix == LONG_MNEM_SUFFIX)
3623 if (i.tm.opcode_modifier.floatmf)
3624 i.tm.base_opcode ^= 4;
3631 check_byte_reg (void)
3635 for (op = i.operands; --op >= 0;)
3637 /* If this is an eight bit register, it's OK. If it's the 16 or
3638 32 bit version of an eight bit register, we will just use the
3639 low portion, and that's OK too. */
3640 if (i.types[op].bitfield.reg8)
3643 /* Don't generate this warning if not needed. */
3644 if (intel_syntax && i.tm.opcode_modifier.byteokintel)
3647 /* crc32 doesn't generate this warning. */
3648 if (i.tm.base_opcode == 0xf20f38f0)
3651 if ((i.types[op].bitfield.reg16
3652 || i.types[op].bitfield.reg32
3653 || i.types[op].bitfield.reg64)
3654 && i.op[op].regs->reg_num < 4)
3656 /* Prohibit these changes in the 64bit mode, since the
3657 lowering is more complicated. */
3658 if (flag_code == CODE_64BIT
3659 && !i.tm.operand_types[op].bitfield.inoutportreg)
3661 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
3662 register_prefix, i.op[op].regs->reg_name,
3666 #if REGISTER_WARNINGS
3668 && !i.tm.operand_types[op].bitfield.inoutportreg)
3669 as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
3671 (i.op[op].regs + (i.types[op].bitfield.reg16
3672 ? REGNAM_AL - REGNAM_AX
3673 : REGNAM_AL - REGNAM_EAX))->reg_name,
3675 i.op[op].regs->reg_name,
3680 /* Any other register is bad. */
3681 if (i.types[op].bitfield.reg16
3682 || i.types[op].bitfield.reg32
3683 || i.types[op].bitfield.reg64
3684 || i.types[op].bitfield.regmmx
3685 || i.types[op].bitfield.regxmm
3686 || i.types[op].bitfield.sreg2
3687 || i.types[op].bitfield.sreg3
3688 || i.types[op].bitfield.control
3689 || i.types[op].bitfield.debug
3690 || i.types[op].bitfield.test
3691 || i.types[op].bitfield.floatreg
3692 || i.types[op].bitfield.floatacc)
3694 as_bad (_("`%s%s' not allowed with `%s%c'"),
3696 i.op[op].regs->reg_name,
3706 check_long_reg (void)
3710 for (op = i.operands; --op >= 0;)
3711 /* Reject eight bit registers, except where the template requires
3712 them. (eg. movzb) */
3713 if (i.types[op].bitfield.reg8
3714 && (i.tm.operand_types[op].bitfield.reg16
3715 || i.tm.operand_types[op].bitfield.reg32
3716 || i.tm.operand_types[op].bitfield.acc))
3718 as_bad (_("`%s%s' not allowed with `%s%c'"),
3720 i.op[op].regs->reg_name,
3725 /* Warn if the e prefix on a general reg is missing. */
3726 else if ((!quiet_warnings || flag_code == CODE_64BIT)
3727 && i.types[op].bitfield.reg16
3728 && (i.tm.operand_types[op].bitfield.reg32
3729 || i.tm.operand_types[op].bitfield.acc))
3731 /* Prohibit these changes in the 64bit mode, since the
3732 lowering is more complicated. */
3733 if (flag_code == CODE_64BIT)
3735 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
3736 register_prefix, i.op[op].regs->reg_name,
3740 #if REGISTER_WARNINGS
3742 as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
3744 (i.op[op].regs + REGNAM_EAX - REGNAM_AX)->reg_name,
3746 i.op[op].regs->reg_name,
3750 /* Warn if the r prefix on a general reg is missing. */
3751 else if (i.types[op].bitfield.reg64
3752 && (i.tm.operand_types[op].bitfield.reg32
3753 || i.tm.operand_types[op].bitfield.acc))
3756 && i.tm.opcode_modifier.toqword
3757 && !i.types[0].bitfield.regxmm)
3759 /* Convert to QWORD. We want REX byte. */
3760 i.suffix = QWORD_MNEM_SUFFIX;
3764 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
3765 register_prefix, i.op[op].regs->reg_name,
3774 check_qword_reg (void)
3778 for (op = i.operands; --op >= 0; )
3779 /* Reject eight bit registers, except where the template requires
3780 them. (eg. movzb) */
3781 if (i.types[op].bitfield.reg8
3782 && (i.tm.operand_types[op].bitfield.reg16
3783 || i.tm.operand_types[op].bitfield.reg32
3784 || i.tm.operand_types[op].bitfield.acc))
3786 as_bad (_("`%s%s' not allowed with `%s%c'"),
3788 i.op[op].regs->reg_name,
3793 /* Warn if the e prefix on a general reg is missing. */
3794 else if ((i.types[op].bitfield.reg16
3795 || i.types[op].bitfield.reg32)
3796 && (i.tm.operand_types[op].bitfield.reg32
3797 || i.tm.operand_types[op].bitfield.acc))
3799 /* Prohibit these changes in the 64bit mode, since the
3800 lowering is more complicated. */
3802 && i.tm.opcode_modifier.todword
3803 && !i.types[0].bitfield.regxmm)
3805 /* Convert to DWORD. We don't want REX byte. */
3806 i.suffix = LONG_MNEM_SUFFIX;
3810 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
3811 register_prefix, i.op[op].regs->reg_name,
3820 check_word_reg (void)
3823 for (op = i.operands; --op >= 0;)
3824 /* Reject eight bit registers, except where the template requires
3825 them. (eg. movzb) */
3826 if (i.types[op].bitfield.reg8
3827 && (i.tm.operand_types[op].bitfield.reg16
3828 || i.tm.operand_types[op].bitfield.reg32
3829 || i.tm.operand_types[op].bitfield.acc))
3831 as_bad (_("`%s%s' not allowed with `%s%c'"),
3833 i.op[op].regs->reg_name,
3838 /* Warn if the e prefix on a general reg is present. */
3839 else if ((!quiet_warnings || flag_code == CODE_64BIT)
3840 && i.types[op].bitfield.reg32
3841 && (i.tm.operand_types[op].bitfield.reg16
3842 || i.tm.operand_types[op].bitfield.acc))
3844 /* Prohibit these changes in the 64bit mode, since the
3845 lowering is more complicated. */
3846 if (flag_code == CODE_64BIT)
3848 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
3849 register_prefix, i.op[op].regs->reg_name,
3854 #if REGISTER_WARNINGS
3855 as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
3857 (i.op[op].regs + REGNAM_AX - REGNAM_EAX)->reg_name,
3859 i.op[op].regs->reg_name,
3867 update_imm (unsigned int j)
3869 i386_operand_type overlap;
3871 overlap = operand_type_and (i.types[j], i.tm.operand_types[j]);
3872 if ((overlap.bitfield.imm8
3873 || overlap.bitfield.imm8s
3874 || overlap.bitfield.imm16
3875 || overlap.bitfield.imm32
3876 || overlap.bitfield.imm32s
3877 || overlap.bitfield.imm64)
3878 && !UINTS_EQUAL (overlap, imm8)
3879 && !UINTS_EQUAL (overlap, imm8s)
3880 && !UINTS_EQUAL (overlap, imm16)
3881 && !UINTS_EQUAL (overlap, imm32)
3882 && !UINTS_EQUAL (overlap, imm32s)
3883 && !UINTS_EQUAL (overlap, imm64))
3887 i386_operand_type temp;
3890 if (i.suffix == BYTE_MNEM_SUFFIX)
3892 temp.bitfield.imm8 = overlap.bitfield.imm8;
3893 temp.bitfield.imm8s = overlap.bitfield.imm8s;
3895 else if (i.suffix == WORD_MNEM_SUFFIX)
3896 temp.bitfield.imm16 = overlap.bitfield.imm16;
3897 else if (i.suffix == QWORD_MNEM_SUFFIX)
3899 temp.bitfield.imm64 = overlap.bitfield.imm64;
3900 temp.bitfield.imm32s = overlap.bitfield.imm32s;
3903 temp.bitfield.imm32 = overlap.bitfield.imm32;
3906 else if (UINTS_EQUAL (overlap, imm16_32_32s)
3907 || UINTS_EQUAL (overlap, imm16_32)
3908 || UINTS_EQUAL (overlap, imm16_32s))
3910 UINTS_CLEAR (overlap);
3911 if ((flag_code == CODE_16BIT) ^ (i.prefix[DATA_PREFIX] != 0))
3912 overlap.bitfield.imm16 = 1;
3914 overlap.bitfield.imm32s = 1;
3916 if (!UINTS_EQUAL (overlap, imm8)
3917 && !UINTS_EQUAL (overlap, imm8s)
3918 && !UINTS_EQUAL (overlap, imm16)
3919 && !UINTS_EQUAL (overlap, imm32)
3920 && !UINTS_EQUAL (overlap, imm32s)
3921 && !UINTS_EQUAL (overlap, imm64))
3923 as_bad (_("no instruction mnemonic suffix given; "
3924 "can't determine immediate size"));
3928 i.types[j] = overlap;
3938 for (j = 0; j < 2; j++)
3939 if (update_imm (j) == 0)
3942 i.types[2] = operand_type_and (i.types[2], i.tm.operand_types[2]);
3943 assert (operand_type_check (i.types[2], imm) == 0);
3951 i.drex.modrm_reg = 0;
3952 i.drex.modrm_regmem = 0;
3954 /* SSE5 4 operand instructions must have the destination the same as
3955 one of the inputs. Figure out the destination register and cache
3956 it away in the drex field, and remember which fields to use for
3958 if (i.tm.opcode_modifier.drex
3959 && i.tm.opcode_modifier.drexv
3962 i.tm.extension_opcode = None;
3964 /* Case 1: 4 operand insn, dest = src1, src3 = register. */
3965 if (i.types[0].bitfield.regxmm != 0
3966 && i.types[1].bitfield.regxmm != 0
3967 && i.types[2].bitfield.regxmm != 0
3968 && i.types[3].bitfield.regxmm != 0
3969 && i.op[0].regs->reg_num == i.op[3].regs->reg_num
3970 && i.op[0].regs->reg_flags == i.op[3].regs->reg_flags)
3972 /* Clear the arguments that are stored in drex. */
3973 UINTS_CLEAR (i.types[0]);
3974 UINTS_CLEAR (i.types[3]);
3975 i.reg_operands -= 2;
3977 /* There are two different ways to encode a 4 operand
3978 instruction with all registers that uses OC1 set to
3979 0 or 1. Favor setting OC1 to 0 since this mimics the
3980 actions of other SSE5 assemblers. Use modrm encoding 2
3981 for register/register. Include the high order bit that
3982 is normally stored in the REX byte in the register
3984 i.tm.extension_opcode = DREX_X1_XMEM_X2_X1;
3985 i.drex.modrm_reg = 2;
3986 i.drex.modrm_regmem = 1;
3987 i.drex.reg = (i.op[3].regs->reg_num
3988 + ((i.op[3].regs->reg_flags & RegRex) ? 8 : 0));
3991 /* Case 2: 4 operand insn, dest = src1, src3 = memory. */
3992 else if (i.types[0].bitfield.regxmm != 0
3993 && i.types[1].bitfield.regxmm != 0
3994 && (i.types[2].bitfield.regxmm
3995 || operand_type_check (i.types[2], anymem))
3996 && i.types[3].bitfield.regxmm != 0
3997 && i.op[0].regs->reg_num == i.op[3].regs->reg_num
3998 && i.op[0].regs->reg_flags == i.op[3].regs->reg_flags)
4000 /* clear the arguments that are stored in drex */
4001 UINTS_CLEAR (i.types[0]);
4002 UINTS_CLEAR (i.types[3]);
4003 i.reg_operands -= 2;
4005 /* Specify the modrm encoding for memory addressing. Include
4006 the high order bit that is normally stored in the REX byte
4007 in the register field. */
4008 i.tm.extension_opcode = DREX_X1_X2_XMEM_X1;
4009 i.drex.modrm_reg = 1;
4010 i.drex.modrm_regmem = 2;
4011 i.drex.reg = (i.op[3].regs->reg_num
4012 + ((i.op[3].regs->reg_flags & RegRex) ? 8 : 0));
4015 /* Case 3: 4 operand insn, dest = src1, src2 = memory. */
4016 else if (i.types[0].bitfield.regxmm != 0
4017 && operand_type_check (i.types[1], anymem) != 0
4018 && i.types[2].bitfield.regxmm != 0
4019 && i.types[3].bitfield.regxmm != 0
4020 && i.op[0].regs->reg_num == i.op[3].regs->reg_num
4021 && i.op[0].regs->reg_flags == i.op[3].regs->reg_flags)
4023 /* Clear the arguments that are stored in drex. */
4024 UINTS_CLEAR (i.types[0]);
4025 UINTS_CLEAR (i.types[3]);
4026 i.reg_operands -= 2;
4028 /* Specify the modrm encoding for memory addressing. Include
4029 the high order bit that is normally stored in the REX byte
4030 in the register field. */
4031 i.tm.extension_opcode = DREX_X1_XMEM_X2_X1;
4032 i.drex.modrm_reg = 2;
4033 i.drex.modrm_regmem = 1;
4034 i.drex.reg = (i.op[3].regs->reg_num
4035 + ((i.op[3].regs->reg_flags & RegRex) ? 8 : 0));
4038 /* Case 4: 4 operand insn, dest = src3, src2 = register. */
4039 else if (i.types[0].bitfield.regxmm != 0
4040 && i.types[1].bitfield.regxmm != 0
4041 && i.types[2].bitfield.regxmm != 0
4042 && i.types[3].bitfield.regxmm != 0
4043 && i.op[2].regs->reg_num == i.op[3].regs->reg_num
4044 && i.op[2].regs->reg_flags == i.op[3].regs->reg_flags)
4046 /* clear the arguments that are stored in drex */
4047 UINTS_CLEAR (i.types[2]);
4048 UINTS_CLEAR (i.types[3]);
4049 i.reg_operands -= 2;
4051 /* There are two different ways to encode a 4 operand
4052 instruction with all registers that uses OC1 set to
4053 0 or 1. Favor setting OC1 to 0 since this mimics the
4054 actions of other SSE5 assemblers. Use modrm encoding
4055 2 for register/register. Include the high order bit that
4056 is normally stored in the REX byte in the register
4058 i.tm.extension_opcode = DREX_XMEM_X1_X2_X2;
4059 i.drex.modrm_reg = 1;
4060 i.drex.modrm_regmem = 0;
4062 /* Remember the register, including the upper bits */
4063 i.drex.reg = (i.op[3].regs->reg_num
4064 + ((i.op[3].regs->reg_flags & RegRex) ? 8 : 0));
4067 /* Case 5: 4 operand insn, dest = src3, src2 = memory. */
4068 else if (i.types[0].bitfield.regxmm != 0
4069 && (i.types[1].bitfield.regxmm
4070 || operand_type_check (i.types[1], anymem))
4071 && i.types[2].bitfield.regxmm != 0
4072 && i.types[3].bitfield.regxmm != 0
4073 && i.op[2].regs->reg_num == i.op[3].regs->reg_num
4074 && i.op[2].regs->reg_flags == i.op[3].regs->reg_flags)
4076 /* Clear the arguments that are stored in drex. */
4077 UINTS_CLEAR (i.types[2]);
4078 UINTS_CLEAR (i.types[3]);
4079 i.reg_operands -= 2;
4081 /* Specify the modrm encoding and remember the register
4082 including the bits normally stored in the REX byte. */
4083 i.tm.extension_opcode = DREX_X1_XMEM_X2_X2;
4084 i.drex.modrm_reg = 0;
4085 i.drex.modrm_regmem = 1;
4086 i.drex.reg = (i.op[3].regs->reg_num
4087 + ((i.op[3].regs->reg_flags & RegRex) ? 8 : 0));
4090 /* Case 6: 4 operand insn, dest = src3, src1 = memory. */
4091 else if (operand_type_check (i.types[0], anymem) != 0
4092 && i.types[1].bitfield.regxmm != 0
4093 && i.types[2].bitfield.regxmm != 0
4094 && i.types[3].bitfield.regxmm != 0
4095 && i.op[2].regs->reg_num == i.op[3].regs->reg_num
4096 && i.op[2].regs->reg_flags == i.op[3].regs->reg_flags)
4098 /* clear the arguments that are stored in drex */
4099 UINTS_CLEAR (i.types[2]);
4100 UINTS_CLEAR (i.types[3]);
4101 i.reg_operands -= 2;
4103 /* Specify the modrm encoding and remember the register
4104 including the bits normally stored in the REX byte. */
4105 i.tm.extension_opcode = DREX_XMEM_X1_X2_X2;
4106 i.drex.modrm_reg = 1;
4107 i.drex.modrm_regmem = 0;
4108 i.drex.reg = (i.op[3].regs->reg_num
4109 + ((i.op[3].regs->reg_flags & RegRex) ? 8 : 0));
4113 as_bad (_("Incorrect operands for the '%s' instruction"),
4117 /* SSE5 instructions with the DREX byte where the only memory operand
4118 is in the 2nd argument, and the first and last xmm register must
4119 match, and is encoded in the DREX byte. */
4120 else if (i.tm.opcode_modifier.drex
4121 && !i.tm.opcode_modifier.drexv
4124 /* Case 1: 4 operand insn, dest = src1, src3 = reg/mem. */
4125 if (i.types[0].bitfield.regxmm != 0
4126 && (i.types[1].bitfield.regxmm
4127 || operand_type_check(i.types[1], anymem))
4128 && i.types[2].bitfield.regxmm != 0
4129 && i.types[3].bitfield.regxmm != 0
4130 && i.op[0].regs->reg_num == i.op[3].regs->reg_num
4131 && i.op[0].regs->reg_flags == i.op[3].regs->reg_flags)
4133 /* clear the arguments that are stored in drex */
4134 UINTS_CLEAR (i.types[0]);
4135 UINTS_CLEAR (i.types[3]);
4136 i.reg_operands -= 2;
4138 /* Specify the modrm encoding and remember the register
4139 including the high bit normally stored in the REX
4141 i.drex.modrm_reg = 2;
4142 i.drex.modrm_regmem = 1;
4143 i.drex.reg = (i.op[3].regs->reg_num
4144 + ((i.op[3].regs->reg_flags & RegRex) ? 8 : 0));
4148 as_bad (_("Incorrect operands for the '%s' instruction"),
4152 /* SSE5 3 operand instructions that the result is a register, being
4153 either operand can be a memory operand, using OC0 to note which
4154 one is the memory. */
4155 else if (i.tm.opcode_modifier.drex
4156 && i.tm.opcode_modifier.drexv
4159 i.tm.extension_opcode = None;
4161 /* Case 1: 3 operand insn, src1 = register. */
4162 if (i.types[0].bitfield.regxmm != 0
4163 && i.types[1].bitfield.regxmm != 0
4164 && i.types[2].bitfield.regxmm != 0)
4166 /* Clear the arguments that are stored in drex. */
4167 UINTS_CLEAR (i.types[2]);
4170 /* Specify the modrm encoding and remember the register
4171 including the high bit normally stored in the REX byte. */
4172 i.tm.extension_opcode = DREX_XMEM_X1_X2;
4173 i.drex.modrm_reg = 1;
4174 i.drex.modrm_regmem = 0;
4175 i.drex.reg = (i.op[2].regs->reg_num
4176 + ((i.op[2].regs->reg_flags & RegRex) ? 8 : 0));
4179 /* Case 2: 3 operand insn, src1 = memory. */
4180 else if (operand_type_check (i.types[0], anymem) != 0
4181 && i.types[1].bitfield.regxmm != 0
4182 && i.types[2].bitfield.regxmm != 0)
4184 /* Clear the arguments that are stored in drex. */
4185 UINTS_CLEAR (i.types[2]);
4188 /* Specify the modrm encoding and remember the register
4189 including the high bit normally stored in the REX
4191 i.tm.extension_opcode = DREX_XMEM_X1_X2;
4192 i.drex.modrm_reg = 1;
4193 i.drex.modrm_regmem = 0;
4194 i.drex.reg = (i.op[2].regs->reg_num
4195 + ((i.op[2].regs->reg_flags & RegRex) ? 8 : 0));
4198 /* Case 3: 3 operand insn, src2 = memory. */
4199 else if (i.types[0].bitfield.regxmm != 0
4200 && operand_type_check (i.types[1], anymem) != 0
4201 && i.types[2].bitfield.regxmm != 0)
4203 /* Clear the arguments that are stored in drex. */
4204 UINTS_CLEAR (i.types[2]);
4207 /* Specify the modrm encoding and remember the register
4208 including the high bit normally stored in the REX byte. */
4209 i.tm.extension_opcode = DREX_X1_XMEM_X2;
4210 i.drex.modrm_reg = 0;
4211 i.drex.modrm_regmem = 1;
4212 i.drex.reg = (i.op[2].regs->reg_num
4213 + ((i.op[2].regs->reg_flags & RegRex) ? 8 : 0));
4217 as_bad (_("Incorrect operands for the '%s' instruction"),
4221 /* SSE5 4 operand instructions that are the comparison instructions
4222 where the first operand is the immediate value of the comparison
4224 else if (i.tm.opcode_modifier.drexc != 0 && i.operands == 4)
4226 /* Case 1: 4 operand insn, src1 = reg/memory. */
4227 if (operand_type_check (i.types[0], imm) != 0
4228 && (i.types[1].bitfield.regxmm
4229 || operand_type_check (i.types[1], anymem))
4230 && i.types[2].bitfield.regxmm != 0
4231 && i.types[3].bitfield.regxmm != 0)
4233 /* clear the arguments that are stored in drex */
4234 UINTS_CLEAR (i.types[3]);
4237 /* Specify the modrm encoding and remember the register
4238 including the high bit normally stored in the REX byte. */
4239 i.drex.modrm_reg = 2;
4240 i.drex.modrm_regmem = 1;
4241 i.drex.reg = (i.op[3].regs->reg_num
4242 + ((i.op[3].regs->reg_flags & RegRex) ? 8 : 0));
4245 /* Case 2: 3 operand insn with ImmExt that places the
4246 opcode_extension as an immediate argument. This is used for
4247 all of the varients of comparison that supplies the appropriate
4248 value as part of the instruction. */
4249 else if ((i.types[0].bitfield.regxmm
4250 || operand_type_check (i.types[0], anymem))
4251 && i.types[1].bitfield.regxmm != 0
4252 && i.types[2].bitfield.regxmm != 0
4253 && operand_type_check (i.types[3], imm) != 0)
4255 /* clear the arguments that are stored in drex */
4256 UINTS_CLEAR (i.types[2]);
4259 /* Specify the modrm encoding and remember the register
4260 including the high bit normally stored in the REX byte. */
4261 i.drex.modrm_reg = 1;
4262 i.drex.modrm_regmem = 0;
4263 i.drex.reg = (i.op[2].regs->reg_num
4264 + ((i.op[2].regs->reg_flags & RegRex) ? 8 : 0));
4268 as_bad (_("Incorrect operands for the '%s' instruction"),
4272 else if (i.tm.opcode_modifier.drex
4273 || i.tm.opcode_modifier.drexv
4274 || i.tm.opcode_modifier.drexc)
4275 as_bad (_("Internal error for the '%s' instruction"), i.tm.name);
4279 process_operands (void)
4281 /* Default segment register this instruction will use for memory
4282 accesses. 0 means unknown. This is only for optimizing out
4283 unnecessary segment overrides. */
4284 const seg_entry *default_seg = 0;
4286 /* Handle all of the DREX munging that SSE5 needs. */
4287 if (i.tm.opcode_modifier.drex
4288 || i.tm.opcode_modifier.drexv
4289 || i.tm.opcode_modifier.drexc)
4292 if (i.tm.opcode_modifier.firstxmm0)
4296 /* The first operand is implicit and must be xmm0. */
4297 assert (i.reg_operands && UINTS_EQUAL (i.types[0], regxmm));
4298 if (i.op[0].regs->reg_num != 0)
4301 as_bad (_("the last operand of `%s' must be `%sxmm0'"),
4302 i.tm.name, register_prefix);
4304 as_bad (_("the first operand of `%s' must be `%sxmm0'"),
4305 i.tm.name, register_prefix);
4309 for (j = 1; j < i.operands; j++)
4311 i.op[j - 1] = i.op[j];
4312 i.types[j - 1] = i.types[j];
4314 /* We need to adjust fields in i.tm since they are used by
4315 build_modrm_byte. */
4316 i.tm.operand_types [j - 1] = i.tm.operand_types [j];
4323 else if (i.tm.opcode_modifier.regkludge)
4325 /* The imul $imm, %reg instruction is converted into
4326 imul $imm, %reg, %reg, and the clr %reg instruction
4327 is converted into xor %reg, %reg. */
4329 unsigned int first_reg_op;
4331 if (operand_type_check (i.types[0], reg))
4335 /* Pretend we saw the extra register operand. */
4336 assert (i.reg_operands == 1
4337 && i.op[first_reg_op + 1].regs == 0);
4338 i.op[first_reg_op + 1].regs = i.op[first_reg_op].regs;
4339 i.types[first_reg_op + 1] = i.types[first_reg_op];
4344 if (i.tm.opcode_modifier.shortform)
4346 if (i.types[0].bitfield.sreg2
4347 || i.types[0].bitfield.sreg3)
4349 if (i.tm.base_opcode == POP_SEG_SHORT
4350 && i.op[0].regs->reg_num == 1)
4352 as_bad (_("you can't `pop %%cs'"));
4355 i.tm.base_opcode |= (i.op[0].regs->reg_num << 3);
4356 if ((i.op[0].regs->reg_flags & RegRex) != 0)
4361 /* The register or float register operand is in operand
4365 if (i.types[0].bitfield.floatreg
4366 || operand_type_check (i.types[0], reg))
4370 /* Register goes in low 3 bits of opcode. */
4371 i.tm.base_opcode |= i.op[op].regs->reg_num;
4372 if ((i.op[op].regs->reg_flags & RegRex) != 0)
4374 if (!quiet_warnings && i.tm.opcode_modifier.ugh)
4376 /* Warn about some common errors, but press on regardless.
4377 The first case can be generated by gcc (<= 2.8.1). */
4378 if (i.operands == 2)
4380 /* Reversed arguments on faddp, fsubp, etc. */
4381 as_warn (_("translating to `%s %s%s,%s%s'"), i.tm.name,
4382 register_prefix, i.op[1].regs->reg_name,
4383 register_prefix, i.op[0].regs->reg_name);
4387 /* Extraneous `l' suffix on fp insn. */
4388 as_warn (_("translating to `%s %s%s'"), i.tm.name,
4389 register_prefix, i.op[0].regs->reg_name);
4394 else if (i.tm.opcode_modifier.modrm)
4396 /* The opcode is completed (modulo i.tm.extension_opcode which
4397 must be put into the modrm byte). Now, we make the modrm and
4398 index base bytes based on all the info we've collected. */
4400 default_seg = build_modrm_byte ();
4402 else if ((i.tm.base_opcode & ~0x3) == MOV_AX_DISP32)
4406 else if (i.tm.opcode_modifier.isstring)
4408 /* For the string instructions that allow a segment override
4409 on one of their operands, the default segment is ds. */
4413 if (i.tm.base_opcode == 0x8d /* lea */
4416 as_warn (_("segment override on `%s' is ineffectual"), i.tm.name);
4418 /* If a segment was explicitly specified, and the specified segment
4419 is not the default, use an opcode prefix to select it. If we
4420 never figured out what the default segment is, then default_seg
4421 will be zero at this point, and the specified segment prefix will
4423 if ((i.seg[0]) && (i.seg[0] != default_seg))
4425 if (!add_prefix (i.seg[0]->seg_prefix))
4431 static const seg_entry *
4432 build_modrm_byte (void)
4434 const seg_entry *default_seg = 0;
4436 /* SSE5 4 operand instructions are encoded in such a way that one of
4437 the inputs must match the destination register. Process_drex hides
4438 the 3rd argument in the drex field, so that by the time we get
4439 here, it looks to GAS as if this is a 2 operand instruction. */
4440 if ((i.tm.opcode_modifier.drex
4441 || i.tm.opcode_modifier.drexv
4442 || i.tm.opcode_modifier.drexc)
4443 && i.reg_operands == 2)
4445 const reg_entry *reg = i.op[i.drex.modrm_reg].regs;
4446 const reg_entry *regmem = i.op[i.drex.modrm_regmem].regs;
4448 i.rm.reg = reg->reg_num;
4449 i.rm.regmem = regmem->reg_num;
4451 if ((reg->reg_flags & RegRex) != 0)
4453 if ((regmem->reg_flags & RegRex) != 0)
4457 /* i.reg_operands MUST be the number of real register operands;
4458 implicit registers do not count. */
4459 else if (i.reg_operands == 2)
4461 unsigned int source, dest;
4469 /* When there are 3 operands, one of them may be immediate,
4470 which may be the first or the last operand. Otherwise,
4471 the first operand must be shift count register (cl). */
4472 assert (i.imm_operands == 1
4473 || (i.imm_operands == 0
4474 && i.types[0].bitfield.shiftcount));
4475 if (operand_type_check (i.types[0], imm)
4476 || i.types[0].bitfield.shiftcount)
4482 /* When there are 4 operands, the first two must be 8bit
4483 immediate operands. The source operand will be the 3rd
4485 assert (i.imm_operands == 2
4486 && i.types[0].bitfield.imm8
4487 && i.types[1].bitfield.imm8);
4497 /* One of the register operands will be encoded in the i.tm.reg
4498 field, the other in the combined i.tm.mode and i.tm.regmem
4499 fields. If no form of this instruction supports a memory
4500 destination operand, then we assume the source operand may
4501 sometimes be a memory operand and so we need to store the
4502 destination in the i.rm.reg field. */
4503 if (!i.tm.operand_types[dest].bitfield.regmem
4504 && operand_type_check (i.tm.operand_types[dest], anymem) == 0)
4506 i.rm.reg = i.op[dest].regs->reg_num;
4507 i.rm.regmem = i.op[source].regs->reg_num;
4508 if ((i.op[dest].regs->reg_flags & RegRex) != 0)
4510 if ((i.op[source].regs->reg_flags & RegRex) != 0)
4515 i.rm.reg = i.op[source].regs->reg_num;
4516 i.rm.regmem = i.op[dest].regs->reg_num;
4517 if ((i.op[dest].regs->reg_flags & RegRex) != 0)
4519 if ((i.op[source].regs->reg_flags & RegRex) != 0)
4522 if (flag_code != CODE_64BIT && (i.rex & (REX_R | REX_B)))
4524 if (!i.types[0].bitfield.control
4525 && !i.types[1].bitfield.control)
4527 i.rex &= ~(REX_R | REX_B);
4528 add_prefix (LOCK_PREFIX_OPCODE);
4532 { /* If it's not 2 reg operands... */
4535 unsigned int fake_zero_displacement = 0;
4538 /* This has been precalculated for SSE5 instructions
4539 that have a DREX field earlier in process_drex. */
4540 if (i.tm.opcode_modifier.drex
4541 || i.tm.opcode_modifier.drexv
4542 || i.tm.opcode_modifier.drexc)
4543 op = i.drex.modrm_regmem;
4546 for (op = 0; op < i.operands; op++)
4547 if (operand_type_check (i.types[op], anymem))
4549 assert (op < i.operands);
4554 if (i.base_reg == 0)
4557 if (!i.disp_operands)
4558 fake_zero_displacement = 1;
4559 if (i.index_reg == 0)
4561 /* Operand is just <disp> */
4562 if (flag_code == CODE_64BIT)
4564 /* 64bit mode overwrites the 32bit absolute
4565 addressing by RIP relative addressing and
4566 absolute addressing is encoded by one of the
4567 redundant SIB forms. */
4568 i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
4569 i.sib.base = NO_BASE_REGISTER;
4570 i.sib.index = NO_INDEX_REGISTER;
4571 i.types[op] = ((i.prefix[ADDR_PREFIX] == 0)
4572 ? disp32s : disp32);
4574 else if ((flag_code == CODE_16BIT)
4575 ^ (i.prefix[ADDR_PREFIX] != 0))
4577 i.rm.regmem = NO_BASE_REGISTER_16;
4578 i.types[op] = disp16;
4582 i.rm.regmem = NO_BASE_REGISTER;
4583 i.types[op] = disp32;
4586 else /* !i.base_reg && i.index_reg */
4588 if (i.index_reg->reg_num == RegEiz
4589 || i.index_reg->reg_num == RegRiz)
4590 i.sib.index = NO_INDEX_REGISTER;
4592 i.sib.index = i.index_reg->reg_num;
4593 i.sib.base = NO_BASE_REGISTER;
4594 i.sib.scale = i.log2_scale_factor;
4595 i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
4596 i.types[op].bitfield.disp8 = 0;
4597 i.types[op].bitfield.disp16 = 0;
4598 i.types[op].bitfield.disp64 = 0;
4599 if (flag_code != CODE_64BIT)
4601 /* Must be 32 bit */
4602 i.types[op].bitfield.disp32 = 1;
4603 i.types[op].bitfield.disp32s = 0;
4607 i.types[op].bitfield.disp32 = 0;
4608 i.types[op].bitfield.disp32s = 1;
4610 if ((i.index_reg->reg_flags & RegRex) != 0)
4614 /* RIP addressing for 64bit mode. */
4615 else if (i.base_reg->reg_num == RegRip ||
4616 i.base_reg->reg_num == RegEip)
4618 i.rm.regmem = NO_BASE_REGISTER;
4619 i.types[op].bitfield.disp8 = 0;
4620 i.types[op].bitfield.disp16 = 0;
4621 i.types[op].bitfield.disp32 = 0;
4622 i.types[op].bitfield.disp32s = 1;
4623 i.types[op].bitfield.disp64 = 0;
4624 i.flags[op] |= Operand_PCrel;
4625 if (! i.disp_operands)
4626 fake_zero_displacement = 1;
4628 else if (i.base_reg->reg_type.bitfield.reg16)
4630 switch (i.base_reg->reg_num)
4633 if (i.index_reg == 0)
4635 else /* (%bx,%si) -> 0, or (%bx,%di) -> 1 */
4636 i.rm.regmem = i.index_reg->reg_num - 6;
4640 if (i.index_reg == 0)
4643 if (operand_type_check (i.types[op], disp) == 0)
4645 /* fake (%bp) into 0(%bp) */
4646 i.types[op].bitfield.disp8 = 1;
4647 fake_zero_displacement = 1;
4650 else /* (%bp,%si) -> 2, or (%bp,%di) -> 3 */
4651 i.rm.regmem = i.index_reg->reg_num - 6 + 2;
4653 default: /* (%si) -> 4 or (%di) -> 5 */
4654 i.rm.regmem = i.base_reg->reg_num - 6 + 4;
4656 i.rm.mode = mode_from_disp_size (i.types[op]);
4658 else /* i.base_reg and 32/64 bit mode */
4660 if (flag_code == CODE_64BIT
4661 && operand_type_check (i.types[op], disp))
4663 i386_operand_type temp;
4665 temp.bitfield.disp8 = i.types[op].bitfield.disp8;
4667 if (i.prefix[ADDR_PREFIX] == 0)
4668 i.types[op].bitfield.disp32s = 1;
4670 i.types[op].bitfield.disp32 = 1;
4673 i.rm.regmem = i.base_reg->reg_num;
4674 if ((i.base_reg->reg_flags & RegRex) != 0)
4676 i.sib.base = i.base_reg->reg_num;
4677 /* x86-64 ignores REX prefix bit here to avoid decoder
4679 if ((i.base_reg->reg_num & 7) == EBP_REG_NUM)
4682 if (i.disp_operands == 0)
4684 fake_zero_displacement = 1;
4685 i.types[op].bitfield.disp8 = 1;
4688 else if (i.base_reg->reg_num == ESP_REG_NUM)
4692 i.sib.scale = i.log2_scale_factor;
4693 if (i.index_reg == 0)
4695 /* <disp>(%esp) becomes two byte modrm with no index
4696 register. We've already stored the code for esp
4697 in i.rm.regmem ie. ESCAPE_TO_TWO_BYTE_ADDRESSING.
4698 Any base register besides %esp will not use the
4699 extra modrm byte. */
4700 i.sib.index = NO_INDEX_REGISTER;
4704 if (i.index_reg->reg_num == RegEiz
4705 || i.index_reg->reg_num == RegRiz)
4706 i.sib.index = NO_INDEX_REGISTER;
4708 i.sib.index = i.index_reg->reg_num;
4709 i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
4710 if ((i.index_reg->reg_flags & RegRex) != 0)
4715 && (i.reloc[op] == BFD_RELOC_386_TLS_DESC_CALL
4716 || i.reloc[op] == BFD_RELOC_X86_64_TLSDESC_CALL))
4719 i.rm.mode = mode_from_disp_size (i.types[op]);
4722 if (fake_zero_displacement)
4724 /* Fakes a zero displacement assuming that i.types[op]
4725 holds the correct displacement size. */
4728 assert (i.op[op].disps == 0);
4729 exp = &disp_expressions[i.disp_operands++];
4730 i.op[op].disps = exp;
4731 exp->X_op = O_constant;
4732 exp->X_add_number = 0;
4733 exp->X_add_symbol = (symbolS *) 0;
4734 exp->X_op_symbol = (symbolS *) 0;
4738 /* Fill in i.rm.reg or i.rm.regmem field with register operand
4739 (if any) based on i.tm.extension_opcode. Again, we must be
4740 careful to make sure that segment/control/debug/test/MMX
4741 registers are coded into the i.rm.reg field. */
4746 /* This has been precalculated for SSE5 instructions
4747 that have a DREX field earlier in process_drex. */
4748 if (i.tm.opcode_modifier.drex
4749 || i.tm.opcode_modifier.drexv
4750 || i.tm.opcode_modifier.drexc)
4752 op = i.drex.modrm_reg;
4753 i.rm.reg = i.op[op].regs->reg_num;
4754 if ((i.op[op].regs->reg_flags & RegRex) != 0)
4759 for (op = 0; op < i.operands; op++)
4760 if (i.types[op].bitfield.reg8
4761 || i.types[op].bitfield.reg16
4762 || i.types[op].bitfield.reg32
4763 || i.types[op].bitfield.reg64
4764 || i.types[op].bitfield.regmmx
4765 || i.types[op].bitfield.regxmm
4766 || i.types[op].bitfield.sreg2
4767 || i.types[op].bitfield.sreg3
4768 || i.types[op].bitfield.control
4769 || i.types[op].bitfield.debug
4770 || i.types[op].bitfield.test)
4773 assert (op < i.operands);
4775 /* If there is an extension opcode to put here, the
4776 register number must be put into the regmem field. */
4777 if (i.tm.extension_opcode != None)
4779 i.rm.regmem = i.op[op].regs->reg_num;
4780 if ((i.op[op].regs->reg_flags & RegRex) != 0)
4785 i.rm.reg = i.op[op].regs->reg_num;
4786 if ((i.op[op].regs->reg_flags & RegRex) != 0)
4791 /* Now, if no memory operand has set i.rm.mode = 0, 1, 2 we
4792 must set it to 3 to indicate this is a register operand
4793 in the regmem field. */
4794 if (!i.mem_operands)
4798 /* Fill in i.rm.reg field with extension opcode (if any). */
4799 if (i.tm.extension_opcode != None
4800 && !(i.tm.opcode_modifier.drex
4801 || i.tm.opcode_modifier.drexv
4802 || i.tm.opcode_modifier.drexc))
4803 i.rm.reg = i.tm.extension_opcode;
4809 output_branch (void)
4814 relax_substateT subtype;
4819 if (flag_code == CODE_16BIT)
4823 if (i.prefix[DATA_PREFIX] != 0)
4829 /* Pentium4 branch hints. */
4830 if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE /* not taken */
4831 || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE /* taken */)
4836 if (i.prefix[REX_PREFIX] != 0)
4842 if (i.prefixes != 0 && !intel_syntax)
4843 as_warn (_("skipping prefixes on this instruction"));
4845 /* It's always a symbol; End frag & setup for relax.
4846 Make sure there is enough room in this frag for the largest
4847 instruction we may generate in md_convert_frag. This is 2
4848 bytes for the opcode and room for the prefix and largest
4850 frag_grow (prefix + 2 + 4);
4851 /* Prefix and 1 opcode byte go in fr_fix. */
4852 p = frag_more (prefix + 1);
4853 if (i.prefix[DATA_PREFIX] != 0)
4854 *p++ = DATA_PREFIX_OPCODE;
4855 if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE
4856 || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE)
4857 *p++ = i.prefix[SEG_PREFIX];
4858 if (i.prefix[REX_PREFIX] != 0)
4859 *p++ = i.prefix[REX_PREFIX];
4860 *p = i.tm.base_opcode;
4862 if ((unsigned char) *p == JUMP_PC_RELATIVE)
4863 subtype = ENCODE_RELAX_STATE (UNCOND_JUMP, SMALL);
4864 else if (cpu_arch_flags.bitfield.cpui386)
4865 subtype = ENCODE_RELAX_STATE (COND_JUMP, SMALL);
4867 subtype = ENCODE_RELAX_STATE (COND_JUMP86, SMALL);
4870 sym = i.op[0].disps->X_add_symbol;
4871 off = i.op[0].disps->X_add_number;
4873 if (i.op[0].disps->X_op != O_constant
4874 && i.op[0].disps->X_op != O_symbol)
4876 /* Handle complex expressions. */
4877 sym = make_expr_symbol (i.op[0].disps);
4881 /* 1 possible extra opcode + 4 byte displacement go in var part.
4882 Pass reloc in fr_var. */
4883 frag_var (rs_machine_dependent, 5, i.reloc[0], subtype, sym, off, p);
4893 if (i.tm.opcode_modifier.jumpbyte)
4895 /* This is a loop or jecxz type instruction. */
4897 if (i.prefix[ADDR_PREFIX] != 0)
4899 FRAG_APPEND_1_CHAR (ADDR_PREFIX_OPCODE);
4902 /* Pentium4 branch hints. */
4903 if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE /* not taken */
4904 || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE /* taken */)
4906 FRAG_APPEND_1_CHAR (i.prefix[SEG_PREFIX]);
4915 if (flag_code == CODE_16BIT)
4918 if (i.prefix[DATA_PREFIX] != 0)
4920 FRAG_APPEND_1_CHAR (DATA_PREFIX_OPCODE);
4930 if (i.prefix[REX_PREFIX] != 0)
4932 FRAG_APPEND_1_CHAR (i.prefix[REX_PREFIX]);
4936 if (i.prefixes != 0 && !intel_syntax)
4937 as_warn (_("skipping prefixes on this instruction"));
4939 p = frag_more (1 + size);
4940 *p++ = i.tm.base_opcode;
4942 fixP = fix_new_exp (frag_now, p - frag_now->fr_literal, size,
4943 i.op[0].disps, 1, reloc (size, 1, 1, i.reloc[0]));
4945 /* All jumps handled here are signed, but don't use a signed limit
4946 check for 32 and 16 bit jumps as we want to allow wrap around at
4947 4G and 64k respectively. */
4949 fixP->fx_signed = 1;
4953 output_interseg_jump (void)
4961 if (flag_code == CODE_16BIT)
4965 if (i.prefix[DATA_PREFIX] != 0)
4971 if (i.prefix[REX_PREFIX] != 0)
4981 if (i.prefixes != 0 && !intel_syntax)
4982 as_warn (_("skipping prefixes on this instruction"));
4984 /* 1 opcode; 2 segment; offset */
4985 p = frag_more (prefix + 1 + 2 + size);
4987 if (i.prefix[DATA_PREFIX] != 0)
4988 *p++ = DATA_PREFIX_OPCODE;
4990 if (i.prefix[REX_PREFIX] != 0)
4991 *p++ = i.prefix[REX_PREFIX];
4993 *p++ = i.tm.base_opcode;
4994 if (i.op[1].imms->X_op == O_constant)
4996 offsetT n = i.op[1].imms->X_add_number;
4999 && !fits_in_unsigned_word (n)
5000 && !fits_in_signed_word (n))
5002 as_bad (_("16-bit jump out of range"));
5005 md_number_to_chars (p, n, size);
5008 fix_new_exp (frag_now, p - frag_now->fr_literal, size,
5009 i.op[1].imms, 0, reloc (size, 0, 0, i.reloc[1]));
5010 if (i.op[0].imms->X_op != O_constant)
5011 as_bad (_("can't handle non absolute segment in `%s'"),
5013 md_number_to_chars (p + size, (valueT) i.op[0].imms->X_add_number, 2);
5019 fragS *insn_start_frag;
5020 offsetT insn_start_off;
5022 /* Tie dwarf2 debug info to the address at the start of the insn.
5023 We can't do this after the insn has been output as the current
5024 frag may have been closed off. eg. by frag_var. */
5025 dwarf2_emit_insn (0);
5027 insn_start_frag = frag_now;
5028 insn_start_off = frag_now_fix ();
5031 if (i.tm.opcode_modifier.jump)
5033 else if (i.tm.opcode_modifier.jumpbyte
5034 || i.tm.opcode_modifier.jumpdword)
5036 else if (i.tm.opcode_modifier.jumpintersegment)
5037 output_interseg_jump ();
5040 /* Output normal instructions here. */
5044 unsigned int prefix;
5046 switch (i.tm.opcode_length)
5049 if (i.tm.base_opcode & 0xff000000)
5051 prefix = (i.tm.base_opcode >> 24) & 0xff;
5056 if ((i.tm.base_opcode & 0xff0000) != 0)
5058 prefix = (i.tm.base_opcode >> 16) & 0xff;
5059 if (i.tm.cpu_flags.bitfield.cpupadlock)
5062 if (prefix != REPE_PREFIX_OPCODE
5063 || i.prefix[LOCKREP_PREFIX] != REPE_PREFIX_OPCODE)
5064 add_prefix (prefix);
5067 add_prefix (prefix);
5076 /* The prefix bytes. */
5077 for (j = ARRAY_SIZE (i.prefix), q = i.prefix; j > 0; j--, q++)
5079 FRAG_APPEND_1_CHAR (*q);
5081 /* Now the opcode; be careful about word order here! */
5082 if (i.tm.opcode_length == 1)
5084 FRAG_APPEND_1_CHAR (i.tm.base_opcode);
5088 switch (i.tm.opcode_length)
5092 *p++ = (i.tm.base_opcode >> 16) & 0xff;
5102 /* Put out high byte first: can't use md_number_to_chars! */
5103 *p++ = (i.tm.base_opcode >> 8) & 0xff;
5104 *p = i.tm.base_opcode & 0xff;
5106 /* On SSE5, encode the OC1 bit in the DREX field if this
5107 encoding has multiple formats. */
5108 if (i.tm.opcode_modifier.drex
5109 && i.tm.opcode_modifier.drexv
5110 && DREX_OC1 (i.tm.extension_opcode))
5111 *p |= DREX_OC1_MASK;
5114 /* Now the modrm byte and sib byte (if present). */
5115 if (i.tm.opcode_modifier.modrm)
5117 FRAG_APPEND_1_CHAR ((i.rm.regmem << 0
5120 /* If i.rm.regmem == ESP (4)
5121 && i.rm.mode != (Register mode)
5123 ==> need second modrm byte. */
5124 if (i.rm.regmem == ESCAPE_TO_TWO_BYTE_ADDRESSING
5126 && !(i.base_reg && i.base_reg->reg_type.bitfield.reg16))
5127 FRAG_APPEND_1_CHAR ((i.sib.base << 0
5129 | i.sib.scale << 6));
5132 /* Write the DREX byte if needed. */
5133 if (i.tm.opcode_modifier.drex || i.tm.opcode_modifier.drexc)
5136 *p = (((i.drex.reg & 0xf) << 4) | (i.drex.rex & 0x7));
5138 /* Encode the OC0 bit if this encoding has multiple
5140 if ((i.tm.opcode_modifier.drex
5141 || i.tm.opcode_modifier.drexv)
5142 && DREX_OC0 (i.tm.extension_opcode))
5143 *p |= DREX_OC0_MASK;
5146 if (i.disp_operands)
5147 output_disp (insn_start_frag, insn_start_off);
5150 output_imm (insn_start_frag, insn_start_off);
5156 pi ("" /*line*/, &i);
5158 #endif /* DEBUG386 */
5161 /* Return the size of the displacement operand N. */
5164 disp_size (unsigned int n)
5167 if (i.types[n].bitfield.disp64)
5169 else if (i.types[n].bitfield.disp8)
5171 else if (i.types[n].bitfield.disp16)
5176 /* Return the size of the immediate operand N. */
5179 imm_size (unsigned int n)
5182 if (i.types[n].bitfield.imm64)
5184 else if (i.types[n].bitfield.imm8 || i.types[n].bitfield.imm8s)
5186 else if (i.types[n].bitfield.imm16)
5192 output_disp (fragS *insn_start_frag, offsetT insn_start_off)
5197 for (n = 0; n < i.operands; n++)
5199 if (operand_type_check (i.types[n], disp))
5201 if (i.op[n].disps->X_op == O_constant)
5203 int size = disp_size (n);
5206 val = offset_in_range (i.op[n].disps->X_add_number,
5208 p = frag_more (size);
5209 md_number_to_chars (p, val, size);
5213 enum bfd_reloc_code_real reloc_type;
5214 int size = disp_size (n);
5215 int sign = i.types[n].bitfield.disp32s;
5216 int pcrel = (i.flags[n] & Operand_PCrel) != 0;
5218 /* We can't have 8 bit displacement here. */
5219 assert (!i.types[n].bitfield.disp8);
5221 /* The PC relative address is computed relative
5222 to the instruction boundary, so in case immediate
5223 fields follows, we need to adjust the value. */
5224 if (pcrel && i.imm_operands)
5229 for (n1 = 0; n1 < i.operands; n1++)
5230 if (operand_type_check (i.types[n1], imm))
5232 /* Only one immediate is allowed for PC
5233 relative address. */
5236 i.op[n].disps->X_add_number -= sz;
5238 /* We should find the immediate. */
5242 p = frag_more (size);
5243 reloc_type = reloc (size, pcrel, sign, i.reloc[n]);
5245 && GOT_symbol == i.op[n].disps->X_add_symbol
5246 && (((reloc_type == BFD_RELOC_32
5247 || reloc_type == BFD_RELOC_X86_64_32S
5248 || (reloc_type == BFD_RELOC_64
5250 && (i.op[n].disps->X_op == O_symbol
5251 || (i.op[n].disps->X_op == O_add
5252 && ((symbol_get_value_expression
5253 (i.op[n].disps->X_op_symbol)->X_op)
5255 || reloc_type == BFD_RELOC_32_PCREL))
5259 if (insn_start_frag == frag_now)
5260 add = (p - frag_now->fr_literal) - insn_start_off;
5265 add = insn_start_frag->fr_fix - insn_start_off;
5266 for (fr = insn_start_frag->fr_next;
5267 fr && fr != frag_now; fr = fr->fr_next)
5269 add += p - frag_now->fr_literal;
5274 reloc_type = BFD_RELOC_386_GOTPC;
5275 i.op[n].imms->X_add_number += add;
5277 else if (reloc_type == BFD_RELOC_64)
5278 reloc_type = BFD_RELOC_X86_64_GOTPC64;
5280 /* Don't do the adjustment for x86-64, as there
5281 the pcrel addressing is relative to the _next_
5282 insn, and that is taken care of in other code. */
5283 reloc_type = BFD_RELOC_X86_64_GOTPC32;
5285 fix_new_exp (frag_now, p - frag_now->fr_literal, size,
5286 i.op[n].disps, pcrel, reloc_type);
5293 output_imm (fragS *insn_start_frag, offsetT insn_start_off)
5298 for (n = 0; n < i.operands; n++)
5300 if (operand_type_check (i.types[n], imm))
5302 if (i.op[n].imms->X_op == O_constant)
5304 int size = imm_size (n);
5307 val = offset_in_range (i.op[n].imms->X_add_number,
5309 p = frag_more (size);
5310 md_number_to_chars (p, val, size);
5314 /* Not absolute_section.
5315 Need a 32-bit fixup (don't support 8bit
5316 non-absolute imms). Try to support other
5318 enum bfd_reloc_code_real reloc_type;
5319 int size = imm_size (n);
5322 if (i.types[n].bitfield.imm32s
5323 && (i.suffix == QWORD_MNEM_SUFFIX
5324 || (!i.suffix && i.tm.opcode_modifier.no_lsuf)))
5329 p = frag_more (size);
5330 reloc_type = reloc (size, 0, sign, i.reloc[n]);
5332 /* This is tough to explain. We end up with this one if we
5333 * have operands that look like
5334 * "_GLOBAL_OFFSET_TABLE_+[.-.L284]". The goal here is to
5335 * obtain the absolute address of the GOT, and it is strongly
5336 * preferable from a performance point of view to avoid using
5337 * a runtime relocation for this. The actual sequence of
5338 * instructions often look something like:
5343 * addl $_GLOBAL_OFFSET_TABLE_+[.-.L66],%ebx
5345 * The call and pop essentially return the absolute address
5346 * of the label .L66 and store it in %ebx. The linker itself
5347 * will ultimately change the first operand of the addl so
5348 * that %ebx points to the GOT, but to keep things simple, the
5349 * .o file must have this operand set so that it generates not
5350 * the absolute address of .L66, but the absolute address of
5351 * itself. This allows the linker itself simply treat a GOTPC
5352 * relocation as asking for a pcrel offset to the GOT to be
5353 * added in, and the addend of the relocation is stored in the
5354 * operand field for the instruction itself.
5356 * Our job here is to fix the operand so that it would add
5357 * the correct offset so that %ebx would point to itself. The
5358 * thing that is tricky is that .-.L66 will point to the
5359 * beginning of the instruction, so we need to further modify
5360 * the operand so that it will point to itself. There are
5361 * other cases where you have something like:
5363 * .long $_GLOBAL_OFFSET_TABLE_+[.-.L66]
5365 * and here no correction would be required. Internally in
5366 * the assembler we treat operands of this form as not being
5367 * pcrel since the '.' is explicitly mentioned, and I wonder
5368 * whether it would simplify matters to do it this way. Who
5369 * knows. In earlier versions of the PIC patches, the
5370 * pcrel_adjust field was used to store the correction, but
5371 * since the expression is not pcrel, I felt it would be
5372 * confusing to do it this way. */
5374 if ((reloc_type == BFD_RELOC_32
5375 || reloc_type == BFD_RELOC_X86_64_32S
5376 || reloc_type == BFD_RELOC_64)
5378 && GOT_symbol == i.op[n].imms->X_add_symbol
5379 && (i.op[n].imms->X_op == O_symbol
5380 || (i.op[n].imms->X_op == O_add
5381 && ((symbol_get_value_expression
5382 (i.op[n].imms->X_op_symbol)->X_op)
5387 if (insn_start_frag == frag_now)
5388 add = (p - frag_now->fr_literal) - insn_start_off;
5393 add = insn_start_frag->fr_fix - insn_start_off;
5394 for (fr = insn_start_frag->fr_next;
5395 fr && fr != frag_now; fr = fr->fr_next)
5397 add += p - frag_now->fr_literal;
5401 reloc_type = BFD_RELOC_386_GOTPC;
5403 reloc_type = BFD_RELOC_X86_64_GOTPC32;
5405 reloc_type = BFD_RELOC_X86_64_GOTPC64;
5406 i.op[n].imms->X_add_number += add;
5408 fix_new_exp (frag_now, p - frag_now->fr_literal, size,
5409 i.op[n].imms, 0, reloc_type);
5415 /* x86_cons_fix_new is called via the expression parsing code when a
5416 reloc is needed. We use this hook to get the correct .got reloc. */
5417 static enum bfd_reloc_code_real got_reloc = NO_RELOC;
5418 static int cons_sign = -1;
5421 x86_cons_fix_new (fragS *frag, unsigned int off, unsigned int len,
5424 enum bfd_reloc_code_real r = reloc (len, 0, cons_sign, got_reloc);
5426 got_reloc = NO_RELOC;
5429 if (exp->X_op == O_secrel)
5431 exp->X_op = O_symbol;
5432 r = BFD_RELOC_32_SECREL;
5436 fix_new_exp (frag, off, len, exp, 0, r);
5439 #if (!defined (OBJ_ELF) && !defined (OBJ_MAYBE_ELF)) || defined (LEX_AT)
5440 # define lex_got(reloc, adjust, types) NULL
5442 /* Parse operands of the form
5443 <symbol>@GOTOFF+<nnn>
5444 and similar .plt or .got references.
5446 If we find one, set up the correct relocation in RELOC and copy the
5447 input string, minus the `@GOTOFF' into a malloc'd buffer for
5448 parsing by the calling routine. Return this buffer, and if ADJUST
5449 is non-null set it to the length of the string we removed from the
5450 input line. Otherwise return NULL. */
5452 lex_got (enum bfd_reloc_code_real *reloc,
5454 i386_operand_type *types)
5456 /* Some of the relocations depend on the size of what field is to
5457 be relocated. But in our callers i386_immediate and i386_displacement
5458 we don't yet know the operand size (this will be set by insn
5459 matching). Hence we record the word32 relocation here,
5460 and adjust the reloc according to the real size in reloc(). */
5461 static const struct {
5463 const enum bfd_reloc_code_real rel[2];
5464 const i386_operand_type types64;
5467 BFD_RELOC_X86_64_PLTOFF64 },
5468 OPERAND_TYPE_IMM64 },
5469 { "PLT", { BFD_RELOC_386_PLT32,
5470 BFD_RELOC_X86_64_PLT32 },
5471 OPERAND_TYPE_IMM32_32S_DISP32 },
5473 BFD_RELOC_X86_64_GOTPLT64 },
5474 OPERAND_TYPE_IMM64_DISP64 },
5475 { "GOTOFF", { BFD_RELOC_386_GOTOFF,
5476 BFD_RELOC_X86_64_GOTOFF64 },
5477 OPERAND_TYPE_IMM64_DISP64 },
5479 BFD_RELOC_X86_64_GOTPCREL },
5480 OPERAND_TYPE_IMM32_32S_DISP32 },
5481 { "TLSGD", { BFD_RELOC_386_TLS_GD,
5482 BFD_RELOC_X86_64_TLSGD },
5483 OPERAND_TYPE_IMM32_32S_DISP32 },
5484 { "TLSLDM", { BFD_RELOC_386_TLS_LDM,
5486 OPERAND_TYPE_NONE },
5488 BFD_RELOC_X86_64_TLSLD },
5489 OPERAND_TYPE_IMM32_32S_DISP32 },
5490 { "GOTTPOFF", { BFD_RELOC_386_TLS_IE_32,
5491 BFD_RELOC_X86_64_GOTTPOFF },
5492 OPERAND_TYPE_IMM32_32S_DISP32 },
5493 { "TPOFF", { BFD_RELOC_386_TLS_LE_32,
5494 BFD_RELOC_X86_64_TPOFF32 },
5495 OPERAND_TYPE_IMM32_32S_64_DISP32_64 },
5496 { "NTPOFF", { BFD_RELOC_386_TLS_LE,
5498 OPERAND_TYPE_NONE },
5499 { "DTPOFF", { BFD_RELOC_386_TLS_LDO_32,
5500 BFD_RELOC_X86_64_DTPOFF32 },
5502 OPERAND_TYPE_IMM32_32S_64_DISP32_64 },
5503 { "GOTNTPOFF",{ BFD_RELOC_386_TLS_GOTIE,
5505 OPERAND_TYPE_NONE },
5506 { "INDNTPOFF",{ BFD_RELOC_386_TLS_IE,
5508 OPERAND_TYPE_NONE },
5509 { "GOT", { BFD_RELOC_386_GOT32,
5510 BFD_RELOC_X86_64_GOT32 },
5511 OPERAND_TYPE_IMM32_32S_64_DISP32 },
5512 { "TLSDESC", { BFD_RELOC_386_TLS_GOTDESC,
5513 BFD_RELOC_X86_64_GOTPC32_TLSDESC },
5514 OPERAND_TYPE_IMM32_32S_DISP32 },
5515 { "TLSCALL", { BFD_RELOC_386_TLS_DESC_CALL,
5516 BFD_RELOC_X86_64_TLSDESC_CALL },
5517 OPERAND_TYPE_IMM32_32S_DISP32 },
5525 for (cp = input_line_pointer; *cp != '@'; cp++)
5526 if (is_end_of_line[(unsigned char) *cp] || *cp == ',')
5529 for (j = 0; j < ARRAY_SIZE (gotrel); j++)
5533 len = strlen (gotrel[j].str);
5534 if (strncasecmp (cp + 1, gotrel[j].str, len) == 0)
5536 if (gotrel[j].rel[object_64bit] != 0)
5539 char *tmpbuf, *past_reloc;
5541 *reloc = gotrel[j].rel[object_64bit];
5547 if (flag_code != CODE_64BIT)
5549 types->bitfield.imm32 = 1;
5550 types->bitfield.disp32 = 1;
5553 *types = gotrel[j].types64;
5556 if (GOT_symbol == NULL)
5557 GOT_symbol = symbol_find_or_make (GLOBAL_OFFSET_TABLE_NAME);
5559 /* The length of the first part of our input line. */
5560 first = cp - input_line_pointer;
5562 /* The second part goes from after the reloc token until
5563 (and including) an end_of_line char or comma. */
5564 past_reloc = cp + 1 + len;
5566 while (!is_end_of_line[(unsigned char) *cp] && *cp != ',')
5568 second = cp + 1 - past_reloc;
5570 /* Allocate and copy string. The trailing NUL shouldn't
5571 be necessary, but be safe. */
5572 tmpbuf = xmalloc (first + second + 2);
5573 memcpy (tmpbuf, input_line_pointer, first);
5574 if (second != 0 && *past_reloc != ' ')
5575 /* Replace the relocation token with ' ', so that
5576 errors like foo@GOTOFF1 will be detected. */
5577 tmpbuf[first++] = ' ';
5578 memcpy (tmpbuf + first, past_reloc, second);
5579 tmpbuf[first + second] = '\0';
5583 as_bad (_("@%s reloc is not supported with %d-bit output format"),
5584 gotrel[j].str, 1 << (5 + object_64bit));
5589 /* Might be a symbol version string. Don't as_bad here. */
5594 x86_cons (expressionS *exp, int size)
5596 if (size == 4 || (object_64bit && size == 8))
5598 /* Handle @GOTOFF and the like in an expression. */
5600 char *gotfree_input_line;
5603 save = input_line_pointer;
5604 gotfree_input_line = lex_got (&got_reloc, &adjust, NULL);
5605 if (gotfree_input_line)
5606 input_line_pointer = gotfree_input_line;
5610 if (gotfree_input_line)
5612 /* expression () has merrily parsed up to the end of line,
5613 or a comma - in the wrong buffer. Transfer how far
5614 input_line_pointer has moved to the right buffer. */
5615 input_line_pointer = (save
5616 + (input_line_pointer - gotfree_input_line)
5618 free (gotfree_input_line);
5619 if (exp->X_op == O_constant
5620 || exp->X_op == O_absent
5621 || exp->X_op == O_illegal
5622 || exp->X_op == O_register
5623 || exp->X_op == O_big)
5625 char c = *input_line_pointer;
5626 *input_line_pointer = 0;
5627 as_bad (_("missing or invalid expression `%s'"), save);
5628 *input_line_pointer = c;
5637 static void signed_cons (int size)
5639 if (flag_code == CODE_64BIT)
5647 pe_directive_secrel (dummy)
5648 int dummy ATTRIBUTE_UNUSED;
5655 if (exp.X_op == O_symbol)
5656 exp.X_op = O_secrel;
5658 emit_expr (&exp, 4);
5660 while (*input_line_pointer++ == ',');
5662 input_line_pointer--;
5663 demand_empty_rest_of_line ();
5668 i386_immediate (char *imm_start)
5670 char *save_input_line_pointer;
5671 char *gotfree_input_line;
5674 i386_operand_type types;
5676 UINTS_SET (types, ~0);
5678 if (i.imm_operands == MAX_IMMEDIATE_OPERANDS)
5680 as_bad (_("at most %d immediate operands are allowed"),
5681 MAX_IMMEDIATE_OPERANDS);
5685 exp = &im_expressions[i.imm_operands++];
5686 i.op[this_operand].imms = exp;
5688 if (is_space_char (*imm_start))
5691 save_input_line_pointer = input_line_pointer;
5692 input_line_pointer = imm_start;
5694 gotfree_input_line = lex_got (&i.reloc[this_operand], NULL, &types);
5695 if (gotfree_input_line)
5696 input_line_pointer = gotfree_input_line;
5698 exp_seg = expression (exp);
5701 if (*input_line_pointer)
5702 as_bad (_("junk `%s' after expression"), input_line_pointer);
5704 input_line_pointer = save_input_line_pointer;
5705 if (gotfree_input_line)
5706 free (gotfree_input_line);
5708 if (exp->X_op == O_absent
5709 || exp->X_op == O_illegal
5710 || exp->X_op == O_big
5711 || (gotfree_input_line
5712 && (exp->X_op == O_constant
5713 || exp->X_op == O_register)))
5715 as_bad (_("missing or invalid immediate expression `%s'"),
5719 else if (exp->X_op == O_constant)
5721 /* Size it properly later. */
5722 i.types[this_operand].bitfield.imm64 = 1;
5723 /* If BFD64, sign extend val. */
5724 if (!use_rela_relocations
5725 && (exp->X_add_number & ~(((addressT) 2 << 31) - 1)) == 0)
5727 = (exp->X_add_number ^ ((addressT) 1 << 31)) - ((addressT) 1 << 31);
5729 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
5730 else if (OUTPUT_FLAVOR == bfd_target_aout_flavour
5731 && exp_seg != absolute_section
5732 && exp_seg != text_section
5733 && exp_seg != data_section
5734 && exp_seg != bss_section
5735 && exp_seg != undefined_section
5736 && !bfd_is_com_section (exp_seg))
5738 as_bad (_("unimplemented segment %s in operand"), exp_seg->name);
5742 else if (!intel_syntax && exp->X_op == O_register)
5744 as_bad (_("illegal immediate register operand %s"), imm_start);
5749 /* This is an address. The size of the address will be
5750 determined later, depending on destination register,
5751 suffix, or the default for the section. */
5752 i.types[this_operand].bitfield.imm8 = 1;
5753 i.types[this_operand].bitfield.imm16 = 1;
5754 i.types[this_operand].bitfield.imm32 = 1;
5755 i.types[this_operand].bitfield.imm32s = 1;
5756 i.types[this_operand].bitfield.imm64 = 1;
5757 i.types[this_operand] = operand_type_and (i.types[this_operand],
5765 i386_scale (char *scale)
5768 char *save = input_line_pointer;
5770 input_line_pointer = scale;
5771 val = get_absolute_expression ();
5776 i.log2_scale_factor = 0;
5779 i.log2_scale_factor = 1;
5782 i.log2_scale_factor = 2;
5785 i.log2_scale_factor = 3;
5789 char sep = *input_line_pointer;
5791 *input_line_pointer = '\0';
5792 as_bad (_("expecting scale factor of 1, 2, 4, or 8: got `%s'"),
5794 *input_line_pointer = sep;
5795 input_line_pointer = save;
5799 if (i.log2_scale_factor != 0 && i.index_reg == 0)
5801 as_warn (_("scale factor of %d without an index register"),
5802 1 << i.log2_scale_factor);
5803 i.log2_scale_factor = 0;
5805 scale = input_line_pointer;
5806 input_line_pointer = save;
5811 i386_displacement (char *disp_start, char *disp_end)
5815 char *save_input_line_pointer;
5816 char *gotfree_input_line;
5818 i386_operand_type bigdisp, types = anydisp;
5821 if (i.disp_operands == MAX_MEMORY_OPERANDS)
5823 as_bad (_("at most %d displacement operands are allowed"),
5824 MAX_MEMORY_OPERANDS);
5828 UINTS_CLEAR (bigdisp);
5829 if ((i.types[this_operand].bitfield.jumpabsolute)
5830 || (!current_templates->start->opcode_modifier.jump
5831 && !current_templates->start->opcode_modifier.jumpdword))
5833 bigdisp.bitfield.disp32 = 1;
5834 override = (i.prefix[ADDR_PREFIX] != 0);
5835 if (flag_code == CODE_64BIT)
5839 bigdisp.bitfield.disp32s = 1;
5840 bigdisp.bitfield.disp64 = 1;
5843 else if ((flag_code == CODE_16BIT) ^ override)
5845 bigdisp.bitfield.disp32 = 0;
5846 bigdisp.bitfield.disp16 = 1;
5851 /* For PC-relative branches, the width of the displacement
5852 is dependent upon data size, not address size. */
5853 override = (i.prefix[DATA_PREFIX] != 0);
5854 if (flag_code == CODE_64BIT)
5856 if (override || i.suffix == WORD_MNEM_SUFFIX)
5857 bigdisp.bitfield.disp16 = 1;
5860 bigdisp.bitfield.disp32 = 1;
5861 bigdisp.bitfield.disp32s = 1;
5867 override = (i.suffix == (flag_code != CODE_16BIT
5869 : LONG_MNEM_SUFFIX));
5870 bigdisp.bitfield.disp32 = 1;
5871 if ((flag_code == CODE_16BIT) ^ override)
5873 bigdisp.bitfield.disp32 = 0;
5874 bigdisp.bitfield.disp16 = 1;
5878 i.types[this_operand] = operand_type_or (i.types[this_operand],
5881 exp = &disp_expressions[i.disp_operands];
5882 i.op[this_operand].disps = exp;
5884 save_input_line_pointer = input_line_pointer;
5885 input_line_pointer = disp_start;
5886 END_STRING_AND_SAVE (disp_end);
5888 #ifndef GCC_ASM_O_HACK
5889 #define GCC_ASM_O_HACK 0
5892 END_STRING_AND_SAVE (disp_end + 1);
5893 if (i.types[this_operand].bitfield.baseIndex
5894 && displacement_string_end[-1] == '+')
5896 /* This hack is to avoid a warning when using the "o"
5897 constraint within gcc asm statements.
5900 #define _set_tssldt_desc(n,addr,limit,type) \
5901 __asm__ __volatile__ ( \
5903 "movw %w1,2+%0\n\t" \
5905 "movb %b1,4+%0\n\t" \
5906 "movb %4,5+%0\n\t" \
5907 "movb $0,6+%0\n\t" \
5908 "movb %h1,7+%0\n\t" \
5910 : "=o"(*(n)) : "q" (addr), "ri"(limit), "i"(type))
5912 This works great except that the output assembler ends
5913 up looking a bit weird if it turns out that there is
5914 no offset. You end up producing code that looks like:
5927 So here we provide the missing zero. */
5929 *displacement_string_end = '0';
5932 gotfree_input_line = lex_got (&i.reloc[this_operand], NULL, &types);
5933 if (gotfree_input_line)
5934 input_line_pointer = gotfree_input_line;
5936 exp_seg = expression (exp);
5939 if (*input_line_pointer)
5940 as_bad (_("junk `%s' after expression"), input_line_pointer);
5942 RESTORE_END_STRING (disp_end + 1);
5944 input_line_pointer = save_input_line_pointer;
5945 if (gotfree_input_line)
5946 free (gotfree_input_line);
5949 /* We do this to make sure that the section symbol is in
5950 the symbol table. We will ultimately change the relocation
5951 to be relative to the beginning of the section. */
5952 if (i.reloc[this_operand] == BFD_RELOC_386_GOTOFF
5953 || i.reloc[this_operand] == BFD_RELOC_X86_64_GOTPCREL
5954 || i.reloc[this_operand] == BFD_RELOC_X86_64_GOTOFF64)
5956 if (exp->X_op != O_symbol)
5959 if (S_IS_LOCAL (exp->X_add_symbol)
5960 && S_GET_SEGMENT (exp->X_add_symbol) != undefined_section)
5961 section_symbol (S_GET_SEGMENT (exp->X_add_symbol));
5962 exp->X_op = O_subtract;
5963 exp->X_op_symbol = GOT_symbol;
5964 if (i.reloc[this_operand] == BFD_RELOC_X86_64_GOTPCREL)
5965 i.reloc[this_operand] = BFD_RELOC_32_PCREL;
5966 else if (i.reloc[this_operand] == BFD_RELOC_X86_64_GOTOFF64)
5967 i.reloc[this_operand] = BFD_RELOC_64;
5969 i.reloc[this_operand] = BFD_RELOC_32;
5972 else if (exp->X_op == O_absent
5973 || exp->X_op == O_illegal
5974 || exp->X_op == O_big
5975 || (gotfree_input_line
5976 && (exp->X_op == O_constant
5977 || exp->X_op == O_register)))
5980 as_bad (_("missing or invalid displacement expression `%s'"),
5985 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
5986 else if (exp->X_op != O_constant
5987 && OUTPUT_FLAVOR == bfd_target_aout_flavour
5988 && exp_seg != absolute_section
5989 && exp_seg != text_section
5990 && exp_seg != data_section
5991 && exp_seg != bss_section
5992 && exp_seg != undefined_section
5993 && !bfd_is_com_section (exp_seg))
5995 as_bad (_("unimplemented segment %s in operand"), exp_seg->name);
6000 RESTORE_END_STRING (disp_end);
6002 /* Check if this is a displacement only operand. */
6003 bigdisp = i.types[this_operand];
6004 bigdisp.bitfield.disp8 = 0;
6005 bigdisp.bitfield.disp16 = 0;
6006 bigdisp.bitfield.disp32 = 0;
6007 bigdisp.bitfield.disp32s = 0;
6008 bigdisp.bitfield.disp64 = 0;
6009 if (UINTS_ALL_ZERO (bigdisp))
6010 i.types[this_operand] = operand_type_and (i.types[this_operand],
6016 /* Make sure the memory operand we've been dealt is valid.
6017 Return 1 on success, 0 on a failure. */
6020 i386_index_check (const char *operand_string)
6023 #if INFER_ADDR_PREFIX
6029 if (flag_code == CODE_64BIT)
6032 && ((i.prefix[ADDR_PREFIX] == 0
6033 && !i.base_reg->reg_type.bitfield.reg64)
6034 || (i.prefix[ADDR_PREFIX]
6035 && !i.base_reg->reg_type.bitfield.reg32))
6037 || i.base_reg->reg_num !=
6038 (i.prefix[ADDR_PREFIX] == 0 ? RegRip : RegEip)))
6040 && (!i.index_reg->reg_type.bitfield.baseindex
6041 || (i.prefix[ADDR_PREFIX] == 0
6042 && i.index_reg->reg_num != RegRiz
6043 && !i.index_reg->reg_type.bitfield.reg64
6045 || (i.prefix[ADDR_PREFIX]
6046 && i.index_reg->reg_num != RegEiz
6047 && !i.index_reg->reg_type.bitfield.reg32))))
6052 if ((flag_code == CODE_16BIT) ^ (i.prefix[ADDR_PREFIX] != 0))
6056 && (!i.base_reg->reg_type.bitfield.reg16
6057 || !i.base_reg->reg_type.bitfield.baseindex))
6059 && (!i.index_reg->reg_type.bitfield.reg16
6060 || !i.index_reg->reg_type.bitfield.baseindex
6062 && i.base_reg->reg_num < 6
6063 && i.index_reg->reg_num >= 6
6064 && i.log2_scale_factor == 0))))
6071 && !i.base_reg->reg_type.bitfield.reg32)
6073 && ((!i.index_reg->reg_type.bitfield.reg32
6074 && i.index_reg->reg_num != RegEiz)
6075 || !i.index_reg->reg_type.bitfield.baseindex)))
6081 #if INFER_ADDR_PREFIX
6082 if (i.prefix[ADDR_PREFIX] == 0)
6084 i.prefix[ADDR_PREFIX] = ADDR_PREFIX_OPCODE;
6086 /* Change the size of any displacement too. At most one of
6087 Disp16 or Disp32 is set.
6088 FIXME. There doesn't seem to be any real need for separate
6089 Disp16 and Disp32 flags. The same goes for Imm16 and Imm32.
6090 Removing them would probably clean up the code quite a lot. */
6091 if (flag_code != CODE_64BIT
6092 && (i.types[this_operand].bitfield.disp16
6093 || i.types[this_operand].bitfield.disp32))
6094 i.types[this_operand]
6095 = operand_type_xor (i.types[this_operand], disp16_32);
6100 as_bad (_("`%s' is not a valid base/index expression"),
6104 as_bad (_("`%s' is not a valid %s bit base/index expression"),
6106 flag_code_names[flag_code]);
6111 /* Parse OPERAND_STRING into the i386_insn structure I. Returns non-zero
6115 i386_operand (char *operand_string)
6119 char *op_string = operand_string;
6121 if (is_space_char (*op_string))
6124 /* We check for an absolute prefix (differentiating,
6125 for example, 'jmp pc_relative_label' from 'jmp *absolute_label'. */
6126 if (*op_string == ABSOLUTE_PREFIX)
6129 if (is_space_char (*op_string))
6131 i.types[this_operand].bitfield.jumpabsolute = 1;
6134 /* Check if operand is a register. */
6135 if ((r = parse_register (op_string, &end_op)) != NULL)
6137 i386_operand_type temp;
6139 /* Check for a segment override by searching for ':' after a
6140 segment register. */
6142 if (is_space_char (*op_string))
6144 if (*op_string == ':'
6145 && (r->reg_type.bitfield.sreg2
6146 || r->reg_type.bitfield.sreg3))
6151 i.seg[i.mem_operands] = &es;
6154 i.seg[i.mem_operands] = &cs;
6157 i.seg[i.mem_operands] = &ss;
6160 i.seg[i.mem_operands] = &ds;
6163 i.seg[i.mem_operands] = &fs;
6166 i.seg[i.mem_operands] = &gs;
6170 /* Skip the ':' and whitespace. */
6172 if (is_space_char (*op_string))
6175 if (!is_digit_char (*op_string)
6176 && !is_identifier_char (*op_string)
6177 && *op_string != '('
6178 && *op_string != ABSOLUTE_PREFIX)
6180 as_bad (_("bad memory operand `%s'"), op_string);
6183 /* Handle case of %es:*foo. */
6184 if (*op_string == ABSOLUTE_PREFIX)
6187 if (is_space_char (*op_string))
6189 i.types[this_operand].bitfield.jumpabsolute = 1;
6191 goto do_memory_reference;
6195 as_bad (_("junk `%s' after register"), op_string);
6199 temp.bitfield.baseindex = 0;
6200 i.types[this_operand] = operand_type_or (i.types[this_operand],
6202 i.op[this_operand].regs = r;
6205 else if (*op_string == REGISTER_PREFIX)
6207 as_bad (_("bad register name `%s'"), op_string);
6210 else if (*op_string == IMMEDIATE_PREFIX)
6213 if (i.types[this_operand].bitfield.jumpabsolute)
6215 as_bad (_("immediate operand illegal with absolute jump"));
6218 if (!i386_immediate (op_string))
6221 else if (is_digit_char (*op_string)
6222 || is_identifier_char (*op_string)
6223 || *op_string == '(')
6225 /* This is a memory reference of some sort. */
6228 /* Start and end of displacement string expression (if found). */
6229 char *displacement_string_start;
6230 char *displacement_string_end;
6232 do_memory_reference:
6233 if ((i.mem_operands == 1
6234 && !current_templates->start->opcode_modifier.isstring)
6235 || i.mem_operands == 2)
6237 as_bad (_("too many memory references for `%s'"),
6238 current_templates->start->name);
6242 /* Check for base index form. We detect the base index form by
6243 looking for an ')' at the end of the operand, searching
6244 for the '(' matching it, and finding a REGISTER_PREFIX or ','
6246 base_string = op_string + strlen (op_string);
6249 if (is_space_char (*base_string))
6252 /* If we only have a displacement, set-up for it to be parsed later. */
6253 displacement_string_start = op_string;
6254 displacement_string_end = base_string + 1;
6256 if (*base_string == ')')
6259 unsigned int parens_balanced = 1;
6260 /* We've already checked that the number of left & right ()'s are
6261 equal, so this loop will not be infinite. */
6265 if (*base_string == ')')
6267 if (*base_string == '(')
6270 while (parens_balanced);
6272 temp_string = base_string;
6274 /* Skip past '(' and whitespace. */
6276 if (is_space_char (*base_string))
6279 if (*base_string == ','
6280 || ((i.base_reg = parse_register (base_string, &end_op))
6283 displacement_string_end = temp_string;
6285 i.types[this_operand].bitfield.baseindex = 1;
6289 base_string = end_op;
6290 if (is_space_char (*base_string))
6294 /* There may be an index reg or scale factor here. */
6295 if (*base_string == ',')
6298 if (is_space_char (*base_string))
6301 if ((i.index_reg = parse_register (base_string, &end_op))
6304 base_string = end_op;
6305 if (is_space_char (*base_string))
6307 if (*base_string == ',')
6310 if (is_space_char (*base_string))
6313 else if (*base_string != ')')
6315 as_bad (_("expecting `,' or `)' "
6316 "after index register in `%s'"),
6321 else if (*base_string == REGISTER_PREFIX)
6323 as_bad (_("bad register name `%s'"), base_string);
6327 /* Check for scale factor. */
6328 if (*base_string != ')')
6330 char *end_scale = i386_scale (base_string);
6335 base_string = end_scale;
6336 if (is_space_char (*base_string))
6338 if (*base_string != ')')
6340 as_bad (_("expecting `)' "
6341 "after scale factor in `%s'"),
6346 else if (!i.index_reg)
6348 as_bad (_("expecting index register or scale factor "
6349 "after `,'; got '%c'"),
6354 else if (*base_string != ')')
6356 as_bad (_("expecting `,' or `)' "
6357 "after base register in `%s'"),
6362 else if (*base_string == REGISTER_PREFIX)
6364 as_bad (_("bad register name `%s'"), base_string);
6369 /* If there's an expression beginning the operand, parse it,
6370 assuming displacement_string_start and
6371 displacement_string_end are meaningful. */
6372 if (displacement_string_start != displacement_string_end)
6374 if (!i386_displacement (displacement_string_start,
6375 displacement_string_end))
6379 /* Special case for (%dx) while doing input/output op. */
6381 && UINTS_EQUAL (i.base_reg->reg_type, reg16_inoutportreg)
6383 && i.log2_scale_factor == 0
6384 && i.seg[i.mem_operands] == 0
6385 && !operand_type_check (i.types[this_operand], disp))
6387 UINTS_CLEAR (i.types[this_operand]);
6388 i.types[this_operand].bitfield.inoutportreg = 1;
6392 if (i386_index_check (operand_string) == 0)
6398 /* It's not a memory operand; argh! */
6399 as_bad (_("invalid char %s beginning operand %d `%s'"),
6400 output_invalid (*op_string),
6405 return 1; /* Normal return. */
6408 /* md_estimate_size_before_relax()
6410 Called just before relax() for rs_machine_dependent frags. The x86
6411 assembler uses these frags to handle variable size jump
6414 Any symbol that is now undefined will not become defined.
6415 Return the correct fr_subtype in the frag.
6416 Return the initial "guess for variable size of frag" to caller.
6417 The guess is actually the growth beyond the fixed part. Whatever
6418 we do to grow the fixed or variable part contributes to our
6422 md_estimate_size_before_relax (fragP, segment)
6426 /* We've already got fragP->fr_subtype right; all we have to do is
6427 check for un-relaxable symbols. On an ELF system, we can't relax
6428 an externally visible symbol, because it may be overridden by a
6430 if (S_GET_SEGMENT (fragP->fr_symbol) != segment
6431 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
6433 && (S_IS_EXTERNAL (fragP->fr_symbol)
6434 || S_IS_WEAK (fragP->fr_symbol)))
6438 /* Symbol is undefined in this segment, or we need to keep a
6439 reloc so that weak symbols can be overridden. */
6440 int size = (fragP->fr_subtype & CODE16) ? 2 : 4;
6441 enum bfd_reloc_code_real reloc_type;
6442 unsigned char *opcode;
6445 if (fragP->fr_var != NO_RELOC)
6446 reloc_type = fragP->fr_var;
6448 reloc_type = BFD_RELOC_16_PCREL;
6450 reloc_type = BFD_RELOC_32_PCREL;
6452 old_fr_fix = fragP->fr_fix;
6453 opcode = (unsigned char *) fragP->fr_opcode;
6455 switch (TYPE_FROM_RELAX_STATE (fragP->fr_subtype))
6458 /* Make jmp (0xeb) a (d)word displacement jump. */
6460 fragP->fr_fix += size;
6461 fix_new (fragP, old_fr_fix, size,
6463 fragP->fr_offset, 1,
6469 && (!no_cond_jump_promotion || fragP->fr_var != NO_RELOC))
6471 /* Negate the condition, and branch past an
6472 unconditional jump. */
6475 /* Insert an unconditional jump. */
6477 /* We added two extra opcode bytes, and have a two byte
6479 fragP->fr_fix += 2 + 2;
6480 fix_new (fragP, old_fr_fix + 2, 2,
6482 fragP->fr_offset, 1,
6489 if (no_cond_jump_promotion && fragP->fr_var == NO_RELOC)
6494 fixP = fix_new (fragP, old_fr_fix, 1,
6496 fragP->fr_offset, 1,
6498 fixP->fx_signed = 1;
6502 /* This changes the byte-displacement jump 0x7N
6503 to the (d)word-displacement jump 0x0f,0x8N. */
6504 opcode[1] = opcode[0] + 0x10;
6505 opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
6506 /* We've added an opcode byte. */
6507 fragP->fr_fix += 1 + size;
6508 fix_new (fragP, old_fr_fix + 1, size,
6510 fragP->fr_offset, 1,
6515 BAD_CASE (fragP->fr_subtype);
6519 return fragP->fr_fix - old_fr_fix;
6522 /* Guess size depending on current relax state. Initially the relax
6523 state will correspond to a short jump and we return 1, because
6524 the variable part of the frag (the branch offset) is one byte
6525 long. However, we can relax a section more than once and in that
6526 case we must either set fr_subtype back to the unrelaxed state,
6527 or return the value for the appropriate branch. */
6528 return md_relax_table[fragP->fr_subtype].rlx_length;
6531 /* Called after relax() is finished.
6533 In: Address of frag.
6534 fr_type == rs_machine_dependent.
6535 fr_subtype is what the address relaxed to.
6537 Out: Any fixSs and constants are set up.
6538 Caller will turn frag into a ".space 0". */
6541 md_convert_frag (abfd, sec, fragP)
6542 bfd *abfd ATTRIBUTE_UNUSED;
6543 segT sec ATTRIBUTE_UNUSED;
6546 unsigned char *opcode;
6547 unsigned char *where_to_put_displacement = NULL;
6548 offsetT target_address;
6549 offsetT opcode_address;
6550 unsigned int extension = 0;
6551 offsetT displacement_from_opcode_start;
6553 opcode = (unsigned char *) fragP->fr_opcode;
6555 /* Address we want to reach in file space. */
6556 target_address = S_GET_VALUE (fragP->fr_symbol) + fragP->fr_offset;
6558 /* Address opcode resides at in file space. */
6559 opcode_address = fragP->fr_address + fragP->fr_fix;
6561 /* Displacement from opcode start to fill into instruction. */
6562 displacement_from_opcode_start = target_address - opcode_address;
6564 if ((fragP->fr_subtype & BIG) == 0)
6566 /* Don't have to change opcode. */
6567 extension = 1; /* 1 opcode + 1 displacement */
6568 where_to_put_displacement = &opcode[1];
6572 if (no_cond_jump_promotion
6573 && TYPE_FROM_RELAX_STATE (fragP->fr_subtype) != UNCOND_JUMP)
6574 as_warn_where (fragP->fr_file, fragP->fr_line,
6575 _("long jump required"));
6577 switch (fragP->fr_subtype)
6579 case ENCODE_RELAX_STATE (UNCOND_JUMP, BIG):
6580 extension = 4; /* 1 opcode + 4 displacement */
6582 where_to_put_displacement = &opcode[1];
6585 case ENCODE_RELAX_STATE (UNCOND_JUMP, BIG16):
6586 extension = 2; /* 1 opcode + 2 displacement */
6588 where_to_put_displacement = &opcode[1];
6591 case ENCODE_RELAX_STATE (COND_JUMP, BIG):
6592 case ENCODE_RELAX_STATE (COND_JUMP86, BIG):
6593 extension = 5; /* 2 opcode + 4 displacement */
6594 opcode[1] = opcode[0] + 0x10;
6595 opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
6596 where_to_put_displacement = &opcode[2];
6599 case ENCODE_RELAX_STATE (COND_JUMP, BIG16):
6600 extension = 3; /* 2 opcode + 2 displacement */
6601 opcode[1] = opcode[0] + 0x10;
6602 opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
6603 where_to_put_displacement = &opcode[2];
6606 case ENCODE_RELAX_STATE (COND_JUMP86, BIG16):
6611 where_to_put_displacement = &opcode[3];
6615 BAD_CASE (fragP->fr_subtype);
6620 /* If size if less then four we are sure that the operand fits,
6621 but if it's 4, then it could be that the displacement is larger
6623 if (DISP_SIZE_FROM_RELAX_STATE (fragP->fr_subtype) == 4
6625 && ((addressT) (displacement_from_opcode_start - extension
6626 + ((addressT) 1 << 31))
6627 > (((addressT) 2 << 31) - 1)))
6629 as_bad_where (fragP->fr_file, fragP->fr_line,
6630 _("jump target out of range"));
6631 /* Make us emit 0. */
6632 displacement_from_opcode_start = extension;
6634 /* Now put displacement after opcode. */
6635 md_number_to_chars ((char *) where_to_put_displacement,
6636 (valueT) (displacement_from_opcode_start - extension),
6637 DISP_SIZE_FROM_RELAX_STATE (fragP->fr_subtype));
6638 fragP->fr_fix += extension;
6641 /* Apply a fixup (fixS) to segment data, once it has been determined
6642 by our caller that we have all the info we need to fix it up.
6644 On the 386, immediates, displacements, and data pointers are all in
6645 the same (little-endian) format, so we don't need to care about which
6649 md_apply_fix (fixP, valP, seg)
6650 /* The fix we're to put in. */
6652 /* Pointer to the value of the bits. */
6654 /* Segment fix is from. */
6655 segT seg ATTRIBUTE_UNUSED;
6657 char *p = fixP->fx_where + fixP->fx_frag->fr_literal;
6658 valueT value = *valP;
6660 #if !defined (TE_Mach)
6663 switch (fixP->fx_r_type)
6669 fixP->fx_r_type = BFD_RELOC_64_PCREL;
6672 case BFD_RELOC_X86_64_32S:
6673 fixP->fx_r_type = BFD_RELOC_32_PCREL;
6676 fixP->fx_r_type = BFD_RELOC_16_PCREL;
6679 fixP->fx_r_type = BFD_RELOC_8_PCREL;
6684 if (fixP->fx_addsy != NULL
6685 && (fixP->fx_r_type == BFD_RELOC_32_PCREL
6686 || fixP->fx_r_type == BFD_RELOC_64_PCREL
6687 || fixP->fx_r_type == BFD_RELOC_16_PCREL
6688 || fixP->fx_r_type == BFD_RELOC_8_PCREL)
6689 && !use_rela_relocations)
6691 /* This is a hack. There should be a better way to handle this.
6692 This covers for the fact that bfd_install_relocation will
6693 subtract the current location (for partial_inplace, PC relative
6694 relocations); see more below. */
6698 || OUTPUT_FLAVOR == bfd_target_coff_flavour
6701 value += fixP->fx_where + fixP->fx_frag->fr_address;
6703 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
6706 segT sym_seg = S_GET_SEGMENT (fixP->fx_addsy);
6709 || (symbol_section_p (fixP->fx_addsy)
6710 && sym_seg != absolute_section))
6711 && !generic_force_reloc (fixP))
6713 /* Yes, we add the values in twice. This is because
6714 bfd_install_relocation subtracts them out again. I think
6715 bfd_install_relocation is broken, but I don't dare change
6717 value += fixP->fx_where + fixP->fx_frag->fr_address;
6721 #if defined (OBJ_COFF) && defined (TE_PE)
6722 /* For some reason, the PE format does not store a
6723 section address offset for a PC relative symbol. */
6724 if (S_GET_SEGMENT (fixP->fx_addsy) != seg
6725 || S_IS_WEAK (fixP->fx_addsy))
6726 value += md_pcrel_from (fixP);
6730 /* Fix a few things - the dynamic linker expects certain values here,
6731 and we must not disappoint it. */
6732 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
6733 if (IS_ELF && fixP->fx_addsy)
6734 switch (fixP->fx_r_type)
6736 case BFD_RELOC_386_PLT32:
6737 case BFD_RELOC_X86_64_PLT32:
6738 /* Make the jump instruction point to the address of the operand. At
6739 runtime we merely add the offset to the actual PLT entry. */
6743 case BFD_RELOC_386_TLS_GD:
6744 case BFD_RELOC_386_TLS_LDM:
6745 case BFD_RELOC_386_TLS_IE_32:
6746 case BFD_RELOC_386_TLS_IE:
6747 case BFD_RELOC_386_TLS_GOTIE:
6748 case BFD_RELOC_386_TLS_GOTDESC:
6749 case BFD_RELOC_X86_64_TLSGD:
6750 case BFD_RELOC_X86_64_TLSLD:
6751 case BFD_RELOC_X86_64_GOTTPOFF:
6752 case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
6753 value = 0; /* Fully resolved at runtime. No addend. */
6755 case BFD_RELOC_386_TLS_LE:
6756 case BFD_RELOC_386_TLS_LDO_32:
6757 case BFD_RELOC_386_TLS_LE_32:
6758 case BFD_RELOC_X86_64_DTPOFF32:
6759 case BFD_RELOC_X86_64_DTPOFF64:
6760 case BFD_RELOC_X86_64_TPOFF32:
6761 case BFD_RELOC_X86_64_TPOFF64:
6762 S_SET_THREAD_LOCAL (fixP->fx_addsy);
6765 case BFD_RELOC_386_TLS_DESC_CALL:
6766 case BFD_RELOC_X86_64_TLSDESC_CALL:
6767 value = 0; /* Fully resolved at runtime. No addend. */
6768 S_SET_THREAD_LOCAL (fixP->fx_addsy);
6772 case BFD_RELOC_386_GOT32:
6773 case BFD_RELOC_X86_64_GOT32:
6774 value = 0; /* Fully resolved at runtime. No addend. */
6777 case BFD_RELOC_VTABLE_INHERIT:
6778 case BFD_RELOC_VTABLE_ENTRY:
6785 #endif /* defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) */
6787 #endif /* !defined (TE_Mach) */
6789 /* Are we finished with this relocation now? */
6790 if (fixP->fx_addsy == NULL)
6792 else if (use_rela_relocations)
6794 fixP->fx_no_overflow = 1;
6795 /* Remember value for tc_gen_reloc. */
6796 fixP->fx_addnumber = value;
6800 md_number_to_chars (p, value, fixP->fx_size);
6804 md_atof (int type, char *litP, int *sizeP)
6806 /* This outputs the LITTLENUMs in REVERSE order;
6807 in accord with the bigendian 386. */
6808 return ieee_md_atof (type, litP, sizeP, FALSE);
6811 static char output_invalid_buf[sizeof (unsigned char) * 2 + 6];
6814 output_invalid (int c)
6817 snprintf (output_invalid_buf, sizeof (output_invalid_buf),
6820 snprintf (output_invalid_buf, sizeof (output_invalid_buf),
6821 "(0x%x)", (unsigned char) c);
6822 return output_invalid_buf;
6825 /* REG_STRING starts *before* REGISTER_PREFIX. */
6827 static const reg_entry *
6828 parse_real_register (char *reg_string, char **end_op)
6830 char *s = reg_string;
6832 char reg_name_given[MAX_REG_NAME_SIZE + 1];
6835 /* Skip possible REGISTER_PREFIX and possible whitespace. */
6836 if (*s == REGISTER_PREFIX)
6839 if (is_space_char (*s))
6843 while ((*p++ = register_chars[(unsigned char) *s]) != '\0')
6845 if (p >= reg_name_given + MAX_REG_NAME_SIZE)
6846 return (const reg_entry *) NULL;
6850 /* For naked regs, make sure that we are not dealing with an identifier.
6851 This prevents confusing an identifier like `eax_var' with register
6853 if (allow_naked_reg && identifier_chars[(unsigned char) *s])
6854 return (const reg_entry *) NULL;
6858 r = (const reg_entry *) hash_find (reg_hash, reg_name_given);
6860 /* Handle floating point regs, allowing spaces in the (i) part. */
6861 if (r == i386_regtab /* %st is first entry of table */)
6863 if (is_space_char (*s))
6868 if (is_space_char (*s))
6870 if (*s >= '0' && *s <= '7')
6874 if (is_space_char (*s))
6879 r = hash_find (reg_hash, "st(0)");
6884 /* We have "%st(" then garbage. */
6885 return (const reg_entry *) NULL;
6889 /* Don't allow fake index register unless allow_index_reg isn't 0. */
6892 && (r->reg_num == RegEiz || r->reg_num == RegRiz))
6893 return (const reg_entry *) NULL;
6896 && ((r->reg_flags & (RegRex64 | RegRex))
6897 || r->reg_type.bitfield.reg64)
6898 && (!cpu_arch_flags.bitfield.cpulm
6899 || !UINTS_EQUAL (r->reg_type, control))
6900 && flag_code != CODE_64BIT)
6901 return (const reg_entry *) NULL;
6906 /* REG_STRING starts *before* REGISTER_PREFIX. */
6908 static const reg_entry *
6909 parse_register (char *reg_string, char **end_op)
6913 if (*reg_string == REGISTER_PREFIX || allow_naked_reg)
6914 r = parse_real_register (reg_string, end_op);
6919 char *save = input_line_pointer;
6923 input_line_pointer = reg_string;
6924 c = get_symbol_end ();
6925 symbolP = symbol_find (reg_string);
6926 if (symbolP && S_GET_SEGMENT (symbolP) == reg_section)
6928 const expressionS *e = symbol_get_value_expression (symbolP);
6930 know (e->X_op == O_register);
6931 know (e->X_add_number >= 0
6932 && (valueT) e->X_add_number < i386_regtab_size);
6933 r = i386_regtab + e->X_add_number;
6934 *end_op = input_line_pointer;
6936 *input_line_pointer = c;
6937 input_line_pointer = save;
6943 i386_parse_name (char *name, expressionS *e, char *nextcharP)
6946 char *end = input_line_pointer;
6949 r = parse_register (name, &input_line_pointer);
6950 if (r && end <= input_line_pointer)
6952 *nextcharP = *input_line_pointer;
6953 *input_line_pointer = 0;
6954 e->X_op = O_register;
6955 e->X_add_number = r - i386_regtab;
6958 input_line_pointer = end;
6964 md_operand (expressionS *e)
6966 if (*input_line_pointer == REGISTER_PREFIX)
6969 const reg_entry *r = parse_real_register (input_line_pointer, &end);
6973 e->X_op = O_register;
6974 e->X_add_number = r - i386_regtab;
6975 input_line_pointer = end;
6981 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
6982 const char *md_shortopts = "kVQ:sqn";
6984 const char *md_shortopts = "qn";
6987 #define OPTION_32 (OPTION_MD_BASE + 0)
6988 #define OPTION_64 (OPTION_MD_BASE + 1)
6989 #define OPTION_DIVIDE (OPTION_MD_BASE + 2)
6990 #define OPTION_MARCH (OPTION_MD_BASE + 3)
6991 #define OPTION_MTUNE (OPTION_MD_BASE + 4)
6992 #define OPTION_MMNEMONIC (OPTION_MD_BASE + 5)
6993 #define OPTION_MSYNTAX (OPTION_MD_BASE + 6)
6994 #define OPTION_MINDEX_REG (OPTION_MD_BASE + 7)
6995 #define OPTION_MNAKED_REG (OPTION_MD_BASE + 8)
6996 #define OPTION_MOLD_GCC (OPTION_MD_BASE + 9)
6998 struct option md_longopts[] =
7000 {"32", no_argument, NULL, OPTION_32},
7001 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) || defined(TE_PEP)
7002 {"64", no_argument, NULL, OPTION_64},
7004 {"divide", no_argument, NULL, OPTION_DIVIDE},
7005 {"march", required_argument, NULL, OPTION_MARCH},
7006 {"mtune", required_argument, NULL, OPTION_MTUNE},
7007 {"mmnemonic", required_argument, NULL, OPTION_MMNEMONIC},
7008 {"msyntax", required_argument, NULL, OPTION_MSYNTAX},
7009 {"mindex-reg", no_argument, NULL, OPTION_MINDEX_REG},
7010 {"mnaked-reg", no_argument, NULL, OPTION_MNAKED_REG},
7011 {"mold-gcc", no_argument, NULL, OPTION_MOLD_GCC},
7012 {NULL, no_argument, NULL, 0}
7014 size_t md_longopts_size = sizeof (md_longopts);
7017 md_parse_option (int c, char *arg)
7024 optimize_align_code = 0;
7031 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7032 /* -Qy, -Qn: SVR4 arguments controlling whether a .comment section
7033 should be emitted or not. FIXME: Not implemented. */
7037 /* -V: SVR4 argument to print version ID. */
7039 print_version_id ();
7042 /* -k: Ignore for FreeBSD compatibility. */
7047 /* -s: On i386 Solaris, this tells the native assembler to use
7048 .stab instead of .stab.excl. We always use .stab anyhow. */
7051 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) || defined(TE_PEP)
7054 const char **list, **l;
7056 list = bfd_target_list ();
7057 for (l = list; *l != NULL; l++)
7058 if (CONST_STRNEQ (*l, "elf64-x86-64")
7059 || strcmp (*l, "coff-x86-64") == 0
7060 || strcmp (*l, "pe-x86-64") == 0
7061 || strcmp (*l, "pei-x86-64") == 0)
7063 default_arch = "x86_64";
7067 as_fatal (_("No compiled in support for x86_64"));
7074 default_arch = "i386";
7078 #ifdef SVR4_COMMENT_CHARS
7083 n = (char *) xmalloc (strlen (i386_comment_chars) + 1);
7085 for (s = i386_comment_chars; *s != '\0'; s++)
7089 i386_comment_chars = n;
7096 as_fatal (_("Invalid -march= option: `%s'"), arg);
7097 for (i = 0; i < ARRAY_SIZE (cpu_arch); i++)
7099 if (strcmp (arg, cpu_arch [i].name) == 0)
7101 cpu_arch_isa = cpu_arch[i].type;
7102 cpu_arch_isa_flags = cpu_arch[i].flags;
7103 if (!cpu_arch_tune_set)
7105 cpu_arch_tune = cpu_arch_isa;
7106 cpu_arch_tune_flags = cpu_arch_isa_flags;
7111 if (i >= ARRAY_SIZE (cpu_arch))
7112 as_fatal (_("Invalid -march= option: `%s'"), arg);
7117 as_fatal (_("Invalid -mtune= option: `%s'"), arg);
7118 for (i = 0; i < ARRAY_SIZE (cpu_arch); i++)
7120 if (strcmp (arg, cpu_arch [i].name) == 0)
7122 cpu_arch_tune_set = 1;
7123 cpu_arch_tune = cpu_arch [i].type;
7124 cpu_arch_tune_flags = cpu_arch[i].flags;
7128 if (i >= ARRAY_SIZE (cpu_arch))
7129 as_fatal (_("Invalid -mtune= option: `%s'"), arg);
7132 case OPTION_MMNEMONIC:
7133 if (strcasecmp (arg, "att") == 0)
7135 else if (strcasecmp (arg, "intel") == 0)
7138 as_fatal (_("Invalid -mmnemonic= option: `%s'"), arg);
7141 case OPTION_MSYNTAX:
7142 if (strcasecmp (arg, "att") == 0)
7144 else if (strcasecmp (arg, "intel") == 0)
7147 as_fatal (_("Invalid -msyntax= option: `%s'"), arg);
7150 case OPTION_MINDEX_REG:
7151 allow_index_reg = 1;
7154 case OPTION_MNAKED_REG:
7155 allow_naked_reg = 1;
7158 case OPTION_MOLD_GCC:
7170 md_show_usage (stream)
7173 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7174 fprintf (stream, _("\
7176 -V print assembler version number\n\
7179 fprintf (stream, _("\
7180 -n Do not optimize code alignment\n\
7181 -q quieten some warnings\n"));
7182 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7183 fprintf (stream, _("\
7186 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) || defined(TE_PEP)
7187 fprintf (stream, _("\
7188 --32/--64 generate 32bit/64bit code\n"));
7190 #ifdef SVR4_COMMENT_CHARS
7191 fprintf (stream, _("\
7192 --divide do not treat `/' as a comment character\n"));
7194 fprintf (stream, _("\
7195 --divide ignored\n"));
7197 fprintf (stream, _("\
7198 -march=CPU/-mtune=CPU generate code/optimize for CPU, where CPU is one of:\n\
7199 i386, i486, pentium, pentiumpro, pentium4, nocona,\n\
7200 core, core2, k6, athlon, k8, generic32, generic64\n"));
7201 fprintf (stream, _("\
7202 -mmnemonic=[att|intel] use AT&T/Intel mnemonic\n"));
7203 fprintf (stream, _("\
7204 -msyntax=[att|intel] use AT&T/Intel syntax\n"));
7205 fprintf (stream, _("\
7206 -mindex-reg support pseudo index registers\n"));
7207 fprintf (stream, _("\
7208 -mnaked-reg don't require `%%' prefix for registers\n"));
7209 fprintf (stream, _("\
7210 -mold-gcc support old (<= 2.8.1) versions of gcc\n"));
7213 #if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \
7214 || defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) || defined (TE_PEP))
7216 /* Pick the target format to use. */
7219 i386_target_format (void)
7221 if (!strcmp (default_arch, "x86_64"))
7223 set_code_flag (CODE_64BIT);
7224 if (UINTS_ALL_ZERO (cpu_arch_isa_flags))
7226 cpu_arch_isa_flags.bitfield.cpui186 = 1;
7227 cpu_arch_isa_flags.bitfield.cpui286 = 1;
7228 cpu_arch_isa_flags.bitfield.cpui386 = 1;
7229 cpu_arch_isa_flags.bitfield.cpui486 = 1;
7230 cpu_arch_isa_flags.bitfield.cpui586 = 1;
7231 cpu_arch_isa_flags.bitfield.cpui686 = 1;
7232 cpu_arch_isa_flags.bitfield.cpup4 = 1;
7233 cpu_arch_isa_flags.bitfield.cpummx= 1;
7234 cpu_arch_isa_flags.bitfield.cpummx2 = 1;
7235 cpu_arch_isa_flags.bitfield.cpusse = 1;
7236 cpu_arch_isa_flags.bitfield.cpusse2 = 1;
7238 if (UINTS_ALL_ZERO (cpu_arch_tune_flags))
7240 cpu_arch_tune_flags.bitfield.cpui186 = 1;
7241 cpu_arch_tune_flags.bitfield.cpui286 = 1;
7242 cpu_arch_tune_flags.bitfield.cpui386 = 1;
7243 cpu_arch_tune_flags.bitfield.cpui486 = 1;
7244 cpu_arch_tune_flags.bitfield.cpui586 = 1;
7245 cpu_arch_tune_flags.bitfield.cpui686 = 1;
7246 cpu_arch_tune_flags.bitfield.cpup4 = 1;
7247 cpu_arch_tune_flags.bitfield.cpummx= 1;
7248 cpu_arch_tune_flags.bitfield.cpummx2 = 1;
7249 cpu_arch_tune_flags.bitfield.cpusse = 1;
7250 cpu_arch_tune_flags.bitfield.cpusse2 = 1;
7253 else if (!strcmp (default_arch, "i386"))
7255 set_code_flag (CODE_32BIT);
7256 if (UINTS_ALL_ZERO (cpu_arch_isa_flags))
7258 cpu_arch_isa_flags.bitfield.cpui186 = 1;
7259 cpu_arch_isa_flags.bitfield.cpui286 = 1;
7260 cpu_arch_isa_flags.bitfield.cpui386 = 1;
7262 if (UINTS_ALL_ZERO (cpu_arch_tune_flags))
7264 cpu_arch_tune_flags.bitfield.cpui186 = 1;
7265 cpu_arch_tune_flags.bitfield.cpui286 = 1;
7266 cpu_arch_tune_flags.bitfield.cpui386 = 1;
7270 as_fatal (_("Unknown architecture"));
7271 switch (OUTPUT_FLAVOR)
7274 case bfd_target_coff_flavour:
7275 return flag_code == CODE_64BIT ? COFF_TARGET_FORMAT : "coff-i386";
7278 #ifdef OBJ_MAYBE_AOUT
7279 case bfd_target_aout_flavour:
7280 return AOUT_TARGET_FORMAT;
7282 #ifdef OBJ_MAYBE_COFF
7283 case bfd_target_coff_flavour:
7286 #if defined (OBJ_MAYBE_ELF) || defined (OBJ_ELF)
7287 case bfd_target_elf_flavour:
7289 if (flag_code == CODE_64BIT)
7292 use_rela_relocations = 1;
7294 return flag_code == CODE_64BIT ? ELF_TARGET_FORMAT64 : ELF_TARGET_FORMAT;
7303 #endif /* OBJ_MAYBE_ more than one */
7305 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF))
7307 i386_elf_emit_arch_note (void)
7309 if (IS_ELF && cpu_arch_name != NULL)
7312 asection *seg = now_seg;
7313 subsegT subseg = now_subseg;
7314 Elf_Internal_Note i_note;
7315 Elf_External_Note e_note;
7316 asection *note_secp;
7319 /* Create the .note section. */
7320 note_secp = subseg_new (".note", 0);
7321 bfd_set_section_flags (stdoutput,
7323 SEC_HAS_CONTENTS | SEC_READONLY);
7325 /* Process the arch string. */
7326 len = strlen (cpu_arch_name);
7328 i_note.namesz = len + 1;
7330 i_note.type = NT_ARCH;
7331 p = frag_more (sizeof (e_note.namesz));
7332 md_number_to_chars (p, (valueT) i_note.namesz, sizeof (e_note.namesz));
7333 p = frag_more (sizeof (e_note.descsz));
7334 md_number_to_chars (p, (valueT) i_note.descsz, sizeof (e_note.descsz));
7335 p = frag_more (sizeof (e_note.type));
7336 md_number_to_chars (p, (valueT) i_note.type, sizeof (e_note.type));
7337 p = frag_more (len + 1);
7338 strcpy (p, cpu_arch_name);
7340 frag_align (2, 0, 0);
7342 subseg_set (seg, subseg);
7348 md_undefined_symbol (name)
7351 if (name[0] == GLOBAL_OFFSET_TABLE_NAME[0]
7352 && name[1] == GLOBAL_OFFSET_TABLE_NAME[1]
7353 && name[2] == GLOBAL_OFFSET_TABLE_NAME[2]
7354 && strcmp (name, GLOBAL_OFFSET_TABLE_NAME) == 0)
7358 if (symbol_find (name))
7359 as_bad (_("GOT already in symbol table"));
7360 GOT_symbol = symbol_new (name, undefined_section,
7361 (valueT) 0, &zero_address_frag);
7368 /* Round up a section size to the appropriate boundary. */
7371 md_section_align (segment, size)
7372 segT segment ATTRIBUTE_UNUSED;
7375 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
7376 if (OUTPUT_FLAVOR == bfd_target_aout_flavour)
7378 /* For a.out, force the section size to be aligned. If we don't do
7379 this, BFD will align it for us, but it will not write out the
7380 final bytes of the section. This may be a bug in BFD, but it is
7381 easier to fix it here since that is how the other a.out targets
7385 align = bfd_get_section_alignment (stdoutput, segment);
7386 size = ((size + (1 << align) - 1) & ((valueT) -1 << align));
7393 /* On the i386, PC-relative offsets are relative to the start of the
7394 next instruction. That is, the address of the offset, plus its
7395 size, since the offset is always the last part of the insn. */
7398 md_pcrel_from (fixS *fixP)
7400 return fixP->fx_size + fixP->fx_where + fixP->fx_frag->fr_address;
7406 s_bss (int ignore ATTRIBUTE_UNUSED)
7410 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7412 obj_elf_section_change_hook ();
7414 temp = get_absolute_expression ();
7415 subseg_set (bss_section, (subsegT) temp);
7416 demand_empty_rest_of_line ();
7422 i386_validate_fix (fixS *fixp)
7424 if (fixp->fx_subsy && fixp->fx_subsy == GOT_symbol)
7426 if (fixp->fx_r_type == BFD_RELOC_32_PCREL)
7430 fixp->fx_r_type = BFD_RELOC_X86_64_GOTPCREL;
7435 fixp->fx_r_type = BFD_RELOC_386_GOTOFF;
7437 fixp->fx_r_type = BFD_RELOC_X86_64_GOTOFF64;
7444 tc_gen_reloc (section, fixp)
7445 asection *section ATTRIBUTE_UNUSED;
7449 bfd_reloc_code_real_type code;
7451 switch (fixp->fx_r_type)
7453 case BFD_RELOC_X86_64_PLT32:
7454 case BFD_RELOC_X86_64_GOT32:
7455 case BFD_RELOC_X86_64_GOTPCREL:
7456 case BFD_RELOC_386_PLT32:
7457 case BFD_RELOC_386_GOT32:
7458 case BFD_RELOC_386_GOTOFF:
7459 case BFD_RELOC_386_GOTPC:
7460 case BFD_RELOC_386_TLS_GD:
7461 case BFD_RELOC_386_TLS_LDM:
7462 case BFD_RELOC_386_TLS_LDO_32:
7463 case BFD_RELOC_386_TLS_IE_32:
7464 case BFD_RELOC_386_TLS_IE:
7465 case BFD_RELOC_386_TLS_GOTIE:
7466 case BFD_RELOC_386_TLS_LE_32:
7467 case BFD_RELOC_386_TLS_LE:
7468 case BFD_RELOC_386_TLS_GOTDESC:
7469 case BFD_RELOC_386_TLS_DESC_CALL:
7470 case BFD_RELOC_X86_64_TLSGD:
7471 case BFD_RELOC_X86_64_TLSLD:
7472 case BFD_RELOC_X86_64_DTPOFF32:
7473 case BFD_RELOC_X86_64_DTPOFF64:
7474 case BFD_RELOC_X86_64_GOTTPOFF:
7475 case BFD_RELOC_X86_64_TPOFF32:
7476 case BFD_RELOC_X86_64_TPOFF64:
7477 case BFD_RELOC_X86_64_GOTOFF64:
7478 case BFD_RELOC_X86_64_GOTPC32:
7479 case BFD_RELOC_X86_64_GOT64:
7480 case BFD_RELOC_X86_64_GOTPCREL64:
7481 case BFD_RELOC_X86_64_GOTPC64:
7482 case BFD_RELOC_X86_64_GOTPLT64:
7483 case BFD_RELOC_X86_64_PLTOFF64:
7484 case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
7485 case BFD_RELOC_X86_64_TLSDESC_CALL:
7487 case BFD_RELOC_VTABLE_ENTRY:
7488 case BFD_RELOC_VTABLE_INHERIT:
7490 case BFD_RELOC_32_SECREL:
7492 code = fixp->fx_r_type;
7494 case BFD_RELOC_X86_64_32S:
7495 if (!fixp->fx_pcrel)
7497 /* Don't turn BFD_RELOC_X86_64_32S into BFD_RELOC_32. */
7498 code = fixp->fx_r_type;
7504 switch (fixp->fx_size)
7507 as_bad_where (fixp->fx_file, fixp->fx_line,
7508 _("can not do %d byte pc-relative relocation"),
7510 code = BFD_RELOC_32_PCREL;
7512 case 1: code = BFD_RELOC_8_PCREL; break;
7513 case 2: code = BFD_RELOC_16_PCREL; break;
7514 case 4: code = BFD_RELOC_32_PCREL; break;
7516 case 8: code = BFD_RELOC_64_PCREL; break;
7522 switch (fixp->fx_size)
7525 as_bad_where (fixp->fx_file, fixp->fx_line,
7526 _("can not do %d byte relocation"),
7528 code = BFD_RELOC_32;
7530 case 1: code = BFD_RELOC_8; break;
7531 case 2: code = BFD_RELOC_16; break;
7532 case 4: code = BFD_RELOC_32; break;
7534 case 8: code = BFD_RELOC_64; break;
7541 if ((code == BFD_RELOC_32
7542 || code == BFD_RELOC_32_PCREL
7543 || code == BFD_RELOC_X86_64_32S)
7545 && fixp->fx_addsy == GOT_symbol)
7548 code = BFD_RELOC_386_GOTPC;
7550 code = BFD_RELOC_X86_64_GOTPC32;
7552 if ((code == BFD_RELOC_64 || code == BFD_RELOC_64_PCREL)
7554 && fixp->fx_addsy == GOT_symbol)
7556 code = BFD_RELOC_X86_64_GOTPC64;
7559 rel = (arelent *) xmalloc (sizeof (arelent));
7560 rel->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
7561 *rel->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
7563 rel->address = fixp->fx_frag->fr_address + fixp->fx_where;
7565 if (!use_rela_relocations)
7567 /* HACK: Since i386 ELF uses Rel instead of Rela, encode the
7568 vtable entry to be used in the relocation's section offset. */
7569 if (fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
7570 rel->address = fixp->fx_offset;
7574 /* Use the rela in 64bit mode. */
7577 if (!fixp->fx_pcrel)
7578 rel->addend = fixp->fx_offset;
7582 case BFD_RELOC_X86_64_PLT32:
7583 case BFD_RELOC_X86_64_GOT32:
7584 case BFD_RELOC_X86_64_GOTPCREL:
7585 case BFD_RELOC_X86_64_TLSGD:
7586 case BFD_RELOC_X86_64_TLSLD:
7587 case BFD_RELOC_X86_64_GOTTPOFF:
7588 case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
7589 case BFD_RELOC_X86_64_TLSDESC_CALL:
7590 rel->addend = fixp->fx_offset - fixp->fx_size;
7593 rel->addend = (section->vma
7595 + fixp->fx_addnumber
7596 + md_pcrel_from (fixp));
7601 rel->howto = bfd_reloc_type_lookup (stdoutput, code);
7602 if (rel->howto == NULL)
7604 as_bad_where (fixp->fx_file, fixp->fx_line,
7605 _("cannot represent relocation type %s"),
7606 bfd_get_reloc_code_name (code));
7607 /* Set howto to a garbage value so that we can keep going. */
7608 rel->howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_32);
7609 assert (rel->howto != NULL);
7616 /* Parse operands using Intel syntax. This implements a recursive descent
7617 parser based on the BNF grammar published in Appendix B of the MASM 6.1
7620 FIXME: We do not recognize the full operand grammar defined in the MASM
7621 documentation. In particular, all the structure/union and
7622 high-level macro operands are missing.
7624 Uppercase words are terminals, lower case words are non-terminals.
7625 Objects surrounded by double brackets '[[' ']]' are optional. Vertical
7626 bars '|' denote choices. Most grammar productions are implemented in
7627 functions called 'intel_<production>'.
7629 Initial production is 'expr'.
7635 binOp & | AND | \| | OR | ^ | XOR
7637 byteRegister AL | AH | BL | BH | CL | CH | DL | DH
7639 constant digits [[ radixOverride ]]
7641 dataType BYTE | WORD | DWORD | FWORD | QWORD | TBYTE | OWORD | XMMWORD
7679 => expr expr cmpOp e04
7682 gpRegister AX | EAX | BX | EBX | CX | ECX | DX | EDX
7683 | BP | EBP | SP | ESP | DI | EDI | SI | ESI
7685 hexdigit a | b | c | d | e | f
7686 | A | B | C | D | E | F
7692 mulOp * | / | % | MOD | << | SHL | >> | SHR
7696 register specialRegister
7700 segmentRegister CS | DS | ES | FS | GS | SS
7702 specialRegister CR0 | CR2 | CR3 | CR4
7703 | DR0 | DR1 | DR2 | DR3 | DR6 | DR7
7704 | TR3 | TR4 | TR5 | TR6 | TR7
7706 We simplify the grammar in obvious places (e.g., register parsing is
7707 done by calling parse_register) and eliminate immediate left recursion
7708 to implement a recursive-descent parser.
7712 expr' cmpOp e04 expr'
7763 /* Parsing structure for the intel syntax parser. Used to implement the
7764 semantic actions for the operand grammar. */
7765 struct intel_parser_s
7767 char *op_string; /* The string being parsed. */
7768 int got_a_float; /* Whether the operand is a float. */
7769 int op_modifier; /* Operand modifier. */
7770 int is_mem; /* 1 if operand is memory reference. */
7771 int in_offset; /* >=1 if parsing operand of offset. */
7772 int in_bracket; /* >=1 if parsing operand in brackets. */
7773 const reg_entry *reg; /* Last register reference found. */
7774 char *disp; /* Displacement string being built. */
7775 char *next_operand; /* Resume point when splitting operands. */
7778 static struct intel_parser_s intel_parser;
7780 /* Token structure for parsing intel syntax. */
7783 int code; /* Token code. */
7784 const reg_entry *reg; /* Register entry for register tokens. */
7785 char *str; /* String representation. */
7788 static struct intel_token cur_token, prev_token;
7790 /* Token codes for the intel parser. Since T_SHORT is already used
7791 by COFF, undefine it first to prevent a warning. */
7810 /* Prototypes for intel parser functions. */
7811 static int intel_match_token (int);
7812 static void intel_putback_token (void);
7813 static void intel_get_token (void);
7814 static int intel_expr (void);
7815 static int intel_e04 (void);
7816 static int intel_e05 (void);
7817 static int intel_e06 (void);
7818 static int intel_e09 (void);
7819 static int intel_e10 (void);
7820 static int intel_e11 (void);
7823 i386_intel_operand (char *operand_string, int got_a_float)
7828 p = intel_parser.op_string = xstrdup (operand_string);
7829 intel_parser.disp = (char *) xmalloc (strlen (operand_string) + 1);
7833 /* Initialize token holders. */
7834 cur_token.code = prev_token.code = T_NIL;
7835 cur_token.reg = prev_token.reg = NULL;
7836 cur_token.str = prev_token.str = NULL;
7838 /* Initialize parser structure. */
7839 intel_parser.got_a_float = got_a_float;
7840 intel_parser.op_modifier = 0;
7841 intel_parser.is_mem = 0;
7842 intel_parser.in_offset = 0;
7843 intel_parser.in_bracket = 0;
7844 intel_parser.reg = NULL;
7845 intel_parser.disp[0] = '\0';
7846 intel_parser.next_operand = NULL;
7848 /* Read the first token and start the parser. */
7850 ret = intel_expr ();
7855 if (cur_token.code != T_NIL)
7857 as_bad (_("invalid operand for '%s' ('%s' unexpected)"),
7858 current_templates->start->name, cur_token.str);
7861 /* If we found a memory reference, hand it over to i386_displacement
7862 to fill in the rest of the operand fields. */
7863 else if (intel_parser.is_mem)
7865 if ((i.mem_operands == 1
7866 && !current_templates->start->opcode_modifier.isstring)
7867 || i.mem_operands == 2)
7869 as_bad (_("too many memory references for '%s'"),
7870 current_templates->start->name);
7875 char *s = intel_parser.disp;
7878 if (!quiet_warnings && intel_parser.is_mem < 0)
7879 /* See the comments in intel_bracket_expr. */
7880 as_warn (_("Treating `%s' as memory reference"), operand_string);
7882 /* Add the displacement expression. */
7884 ret = i386_displacement (s, s + strlen (s));
7887 /* Swap base and index in 16-bit memory operands like
7888 [si+bx]. Since i386_index_check is also used in AT&T
7889 mode we have to do that here. */
7892 && i.base_reg->reg_type.bitfield.reg16
7893 && i.index_reg->reg_type.bitfield.reg16
7894 && i.base_reg->reg_num >= 6
7895 && i.index_reg->reg_num < 6)
7897 const reg_entry *base = i.index_reg;
7899 i.index_reg = i.base_reg;
7902 ret = i386_index_check (operand_string);
7907 /* Constant and OFFSET expressions are handled by i386_immediate. */
7908 else if ((intel_parser.op_modifier & (1 << T_OFFSET))
7909 || intel_parser.reg == NULL)
7910 ret = i386_immediate (intel_parser.disp);
7912 if (intel_parser.next_operand && this_operand >= MAX_OPERANDS - 1)
7914 if (!ret || !intel_parser.next_operand)
7916 intel_parser.op_string = intel_parser.next_operand;
7917 this_operand = i.operands++;
7921 free (intel_parser.disp);
7926 #define NUM_ADDRESS_REGS (!!i.base_reg + !!i.index_reg)
7930 expr' cmpOp e04 expr'
7935 /* XXX Implement the comparison operators. */
7936 return intel_e04 ();
7953 if (nregs >= 0 && NUM_ADDRESS_REGS > nregs)
7954 i.base_reg = i386_regtab + REGNAM_AL; /* al is invalid as base */
7956 if (cur_token.code == '+')
7958 else if (cur_token.code == '-')
7959 nregs = NUM_ADDRESS_REGS;
7963 strcat (intel_parser.disp, cur_token.str);
7964 intel_match_token (cur_token.code);
7975 int nregs = ~NUM_ADDRESS_REGS;
7982 if (cur_token.code == '&'
7983 || cur_token.code == '|'
7984 || cur_token.code == '^')
7988 str[0] = cur_token.code;
7990 strcat (intel_parser.disp, str);
7995 intel_match_token (cur_token.code);
8000 if (nregs >= 0 && NUM_ADDRESS_REGS > nregs)
8001 i.base_reg = i386_regtab + REGNAM_AL + 1; /* cl is invalid as base */
8012 int nregs = ~NUM_ADDRESS_REGS;
8019 if (cur_token.code == '*'
8020 || cur_token.code == '/'
8021 || cur_token.code == '%')
8025 str[0] = cur_token.code;
8027 strcat (intel_parser.disp, str);
8029 else if (cur_token.code == T_SHL)
8030 strcat (intel_parser.disp, "<<");
8031 else if (cur_token.code == T_SHR)
8032 strcat (intel_parser.disp, ">>");
8036 intel_match_token (cur_token.code);
8041 if (nregs >= 0 && NUM_ADDRESS_REGS > nregs)
8042 i.base_reg = i386_regtab + REGNAM_AL + 2; /* dl is invalid as base */
8060 int nregs = ~NUM_ADDRESS_REGS;
8065 /* Don't consume constants here. */
8066 if (cur_token.code == '+' || cur_token.code == '-')
8068 /* Need to look one token ahead - if the next token
8069 is a constant, the current token is its sign. */
8072 intel_match_token (cur_token.code);
8073 next_code = cur_token.code;
8074 intel_putback_token ();
8075 if (next_code == T_CONST)
8079 /* e09 OFFSET e09 */
8080 if (cur_token.code == T_OFFSET)
8083 ++intel_parser.in_offset;
8087 else if (cur_token.code == T_SHORT)
8088 intel_parser.op_modifier |= 1 << T_SHORT;
8091 else if (cur_token.code == '+')
8092 strcat (intel_parser.disp, "+");
8097 else if (cur_token.code == '-' || cur_token.code == '~')
8103 str[0] = cur_token.code;
8105 strcat (intel_parser.disp, str);
8112 intel_match_token (cur_token.code);
8120 /* e09' PTR e10 e09' */
8121 if (cur_token.code == T_PTR)
8125 if (prev_token.code == T_BYTE)
8126 suffix = BYTE_MNEM_SUFFIX;
8128 else if (prev_token.code == T_WORD)
8130 if (current_templates->start->name[0] == 'l'
8131 && current_templates->start->name[2] == 's'
8132 && current_templates->start->name[3] == 0)
8133 suffix = BYTE_MNEM_SUFFIX; /* so it will cause an error */
8134 else if (intel_parser.got_a_float == 2) /* "fi..." */
8135 suffix = SHORT_MNEM_SUFFIX;
8137 suffix = WORD_MNEM_SUFFIX;
8140 else if (prev_token.code == T_DWORD)
8142 if (current_templates->start->name[0] == 'l'
8143 && current_templates->start->name[2] == 's'
8144 && current_templates->start->name[3] == 0)
8145 suffix = WORD_MNEM_SUFFIX;
8146 else if (flag_code == CODE_16BIT
8147 && (current_templates->start->opcode_modifier.jump
8148 || current_templates->start->opcode_modifier.jumpdword))
8149 suffix = LONG_DOUBLE_MNEM_SUFFIX;
8150 else if (intel_parser.got_a_float == 1) /* "f..." */
8151 suffix = SHORT_MNEM_SUFFIX;
8153 suffix = LONG_MNEM_SUFFIX;
8156 else if (prev_token.code == T_FWORD)
8158 if (current_templates->start->name[0] == 'l'
8159 && current_templates->start->name[2] == 's'
8160 && current_templates->start->name[3] == 0)
8161 suffix = LONG_MNEM_SUFFIX;
8162 else if (!intel_parser.got_a_float)
8164 if (flag_code == CODE_16BIT)
8165 add_prefix (DATA_PREFIX_OPCODE);
8166 suffix = LONG_DOUBLE_MNEM_SUFFIX;
8169 suffix = BYTE_MNEM_SUFFIX; /* so it will cause an error */
8172 else if (prev_token.code == T_QWORD)
8174 if (intel_parser.got_a_float == 1) /* "f..." */
8175 suffix = LONG_MNEM_SUFFIX;
8177 suffix = QWORD_MNEM_SUFFIX;
8180 else if (prev_token.code == T_TBYTE)
8182 if (intel_parser.got_a_float == 1)
8183 suffix = LONG_DOUBLE_MNEM_SUFFIX;
8185 suffix = BYTE_MNEM_SUFFIX; /* so it will cause an error */
8188 else if (prev_token.code == T_XMMWORD)
8190 suffix = XMMWORD_MNEM_SUFFIX;
8195 as_bad (_("Unknown operand modifier `%s'"), prev_token.str);
8199 /* Operands for jump/call using 'ptr' notation denote absolute
8201 if (current_templates->start->opcode_modifier.jump
8202 || current_templates->start->opcode_modifier.jumpdword)
8203 i.types[this_operand].bitfield.jumpabsolute = 1;
8205 if (current_templates->start->base_opcode == 0x8d /* lea */)
8209 else if (i.suffix != suffix)
8211 as_bad (_("Conflicting operand modifiers"));
8217 /* e09' : e10 e09' */
8218 else if (cur_token.code == ':')
8220 if (prev_token.code != T_REG)
8222 /* While {call,jmp} SSSS:OOOO is MASM syntax only when SSSS is a
8223 segment/group identifier (which we don't have), using comma
8224 as the operand separator there is even less consistent, since
8225 there all branches only have a single operand. */
8226 if (this_operand != 0
8227 || intel_parser.in_offset
8228 || intel_parser.in_bracket
8229 || (!current_templates->start->opcode_modifier.jump
8230 && !current_templates->start->opcode_modifier.jumpdword
8231 && !current_templates->start->opcode_modifier.jumpintersegment
8232 && !current_templates->start->operand_types[0].bitfield.jumpabsolute))
8233 return intel_match_token (T_NIL);
8234 /* Remember the start of the 2nd operand and terminate 1st
8236 XXX This isn't right, yet (when SSSS:OOOO is right operand of
8237 another expression), but it gets at least the simplest case
8238 (a plain number or symbol on the left side) right. */
8239 intel_parser.next_operand = intel_parser.op_string;
8240 *--intel_parser.op_string = '\0';
8241 return intel_match_token (':');
8249 intel_match_token (cur_token.code);
8255 --intel_parser.in_offset;
8258 if (NUM_ADDRESS_REGS > nregs)
8260 as_bad (_("Invalid operand to `OFFSET'"));
8263 intel_parser.op_modifier |= 1 << T_OFFSET;
8266 if (nregs >= 0 && NUM_ADDRESS_REGS > nregs)
8267 i.base_reg = i386_regtab + REGNAM_AL + 3; /* bl is invalid as base */
8272 intel_bracket_expr (void)
8274 int was_offset = intel_parser.op_modifier & (1 << T_OFFSET);
8275 const char *start = intel_parser.op_string;
8278 if (i.op[this_operand].regs)
8279 return intel_match_token (T_NIL);
8281 intel_match_token ('[');
8283 /* Mark as a memory operand only if it's not already known to be an
8284 offset expression. If it's an offset expression, we need to keep
8286 if (!intel_parser.in_offset)
8288 ++intel_parser.in_bracket;
8290 /* Operands for jump/call inside brackets denote absolute addresses. */
8291 if (current_templates->start->opcode_modifier.jump
8292 || current_templates->start->opcode_modifier.jumpdword)
8293 i.types[this_operand].bitfield.jumpabsolute = 1;
8295 /* Unfortunately gas always diverged from MASM in a respect that can't
8296 be easily fixed without risking to break code sequences likely to be
8297 encountered (the testsuite even check for this): MASM doesn't consider
8298 an expression inside brackets unconditionally as a memory reference.
8299 When that is e.g. a constant, an offset expression, or the sum of the
8300 two, this is still taken as a constant load. gas, however, always
8301 treated these as memory references. As a compromise, we'll try to make
8302 offset expressions inside brackets work the MASM way (since that's
8303 less likely to be found in real world code), but make constants alone
8304 continue to work the traditional gas way. In either case, issue a
8306 intel_parser.op_modifier &= ~was_offset;
8309 strcat (intel_parser.disp, "[");
8311 /* Add a '+' to the displacement string if necessary. */
8312 if (*intel_parser.disp != '\0'
8313 && *(intel_parser.disp + strlen (intel_parser.disp) - 1) != '+')
8314 strcat (intel_parser.disp, "+");
8317 && (len = intel_parser.op_string - start - 1,
8318 intel_match_token (']')))
8320 /* Preserve brackets when the operand is an offset expression. */
8321 if (intel_parser.in_offset)
8322 strcat (intel_parser.disp, "]");
8325 --intel_parser.in_bracket;
8326 if (i.base_reg || i.index_reg)
8327 intel_parser.is_mem = 1;
8328 if (!intel_parser.is_mem)
8330 if (!(intel_parser.op_modifier & (1 << T_OFFSET)))
8331 /* Defer the warning until all of the operand was parsed. */
8332 intel_parser.is_mem = -1;
8333 else if (!quiet_warnings)
8334 as_warn (_("`[%.*s]' taken to mean just `%.*s'"),
8335 len, start, len, start);
8338 intel_parser.op_modifier |= was_offset;
8355 while (cur_token.code == '[')
8357 if (!intel_bracket_expr ())
8382 switch (cur_token.code)
8386 intel_match_token ('(');
8387 strcat (intel_parser.disp, "(");
8389 if (intel_expr () && intel_match_token (')'))
8391 strcat (intel_parser.disp, ")");
8398 return intel_bracket_expr ();
8403 strcat (intel_parser.disp, cur_token.str);
8404 intel_match_token (cur_token.code);
8406 /* Mark as a memory operand only if it's not already known to be an
8407 offset expression. */
8408 if (!intel_parser.in_offset)
8409 intel_parser.is_mem = 1;
8416 const reg_entry *reg = intel_parser.reg = cur_token.reg;
8418 intel_match_token (T_REG);
8420 /* Check for segment change. */
8421 if (cur_token.code == ':')
8423 if (!reg->reg_type.bitfield.sreg2
8424 && !reg->reg_type.bitfield.sreg3)
8426 as_bad (_("`%s' is not a valid segment register"),
8430 else if (i.seg[i.mem_operands])
8431 as_warn (_("Extra segment override ignored"));
8434 if (!intel_parser.in_offset)
8435 intel_parser.is_mem = 1;
8436 switch (reg->reg_num)
8439 i.seg[i.mem_operands] = &es;
8442 i.seg[i.mem_operands] = &cs;
8445 i.seg[i.mem_operands] = &ss;
8448 i.seg[i.mem_operands] = &ds;
8451 i.seg[i.mem_operands] = &fs;
8454 i.seg[i.mem_operands] = &gs;
8460 /* Not a segment register. Check for register scaling. */
8461 else if (cur_token.code == '*')
8463 if (!intel_parser.in_bracket)
8465 as_bad (_("Register scaling only allowed in memory operands"));
8469 if (reg->reg_type.bitfield.reg16) /* Disallow things like [si*1]. */
8470 reg = i386_regtab + REGNAM_AX + 4; /* sp is invalid as index */
8471 else if (i.index_reg)
8472 reg = i386_regtab + REGNAM_EAX + 4; /* esp is invalid as index */
8474 /* What follows must be a valid scale. */
8475 intel_match_token ('*');
8477 i.types[this_operand].bitfield.baseindex = 1;
8479 /* Set the scale after setting the register (otherwise,
8480 i386_scale will complain) */
8481 if (cur_token.code == '+' || cur_token.code == '-')
8483 char *str, sign = cur_token.code;
8484 intel_match_token (cur_token.code);
8485 if (cur_token.code != T_CONST)
8487 as_bad (_("Syntax error: Expecting a constant, got `%s'"),
8491 str = (char *) xmalloc (strlen (cur_token.str) + 2);
8492 strcpy (str + 1, cur_token.str);
8494 if (!i386_scale (str))
8498 else if (!i386_scale (cur_token.str))
8500 intel_match_token (cur_token.code);
8503 /* No scaling. If this is a memory operand, the register is either a
8504 base register (first occurrence) or an index register (second
8506 else if (intel_parser.in_bracket)
8511 else if (!i.index_reg)
8515 as_bad (_("Too many register references in memory operand"));
8519 i.types[this_operand].bitfield.baseindex = 1;
8522 /* It's neither base nor index. */
8523 else if (!intel_parser.in_offset && !intel_parser.is_mem)
8525 i386_operand_type temp = reg->reg_type;
8526 temp.bitfield.baseindex = 0;
8527 i.types[this_operand] = operand_type_or (i.types[this_operand],
8529 i.op[this_operand].regs = reg;
8534 as_bad (_("Invalid use of register"));
8538 /* Since registers are not part of the displacement string (except
8539 when we're parsing offset operands), we may need to remove any
8540 preceding '+' from the displacement string. */
8541 if (*intel_parser.disp != '\0'
8542 && !intel_parser.in_offset)
8544 char *s = intel_parser.disp;
8545 s += strlen (s) - 1;
8568 intel_match_token (cur_token.code);
8570 if (cur_token.code == T_PTR)
8573 /* It must have been an identifier. */
8574 intel_putback_token ();
8575 cur_token.code = T_ID;
8581 if (!intel_parser.in_offset && intel_parser.is_mem <= 0)
8585 /* The identifier represents a memory reference only if it's not
8586 preceded by an offset modifier and if it's not an equate. */
8587 symbolP = symbol_find(cur_token.str);
8588 if (!symbolP || S_GET_SEGMENT(symbolP) != absolute_section)
8589 intel_parser.is_mem = 1;
8597 char *save_str, sign = 0;
8599 /* Allow constants that start with `+' or `-'. */
8600 if (cur_token.code == '-' || cur_token.code == '+')
8602 sign = cur_token.code;
8603 intel_match_token (cur_token.code);
8604 if (cur_token.code != T_CONST)
8606 as_bad (_("Syntax error: Expecting a constant, got `%s'"),
8612 save_str = (char *) xmalloc (strlen (cur_token.str) + 2);
8613 strcpy (save_str + !!sign, cur_token.str);
8617 /* Get the next token to check for register scaling. */
8618 intel_match_token (cur_token.code);
8620 /* Check if this constant is a scaling factor for an
8622 if (cur_token.code == '*')
8624 if (intel_match_token ('*') && cur_token.code == T_REG)
8626 const reg_entry *reg = cur_token.reg;
8628 if (!intel_parser.in_bracket)
8630 as_bad (_("Register scaling only allowed "
8631 "in memory operands"));
8635 /* Disallow things like [1*si].
8636 sp and esp are invalid as index. */
8637 if (reg->reg_type.bitfield.reg16)
8638 reg = i386_regtab + REGNAM_AX + 4;
8639 else if (i.index_reg)
8640 reg = i386_regtab + REGNAM_EAX + 4;
8642 /* The constant is followed by `* reg', so it must be
8645 i.types[this_operand].bitfield.baseindex = 1;
8647 /* Set the scale after setting the register (otherwise,
8648 i386_scale will complain) */
8649 if (!i386_scale (save_str))
8651 intel_match_token (T_REG);
8653 /* Since registers are not part of the displacement
8654 string, we may need to remove any preceding '+' from
8655 the displacement string. */
8656 if (*intel_parser.disp != '\0')
8658 char *s = intel_parser.disp;
8659 s += strlen (s) - 1;
8669 /* The constant was not used for register scaling. Since we have
8670 already consumed the token following `*' we now need to put it
8671 back in the stream. */
8672 intel_putback_token ();
8675 /* Add the constant to the displacement string. */
8676 strcat (intel_parser.disp, save_str);
8683 as_bad (_("Unrecognized token '%s'"), cur_token.str);
8687 /* Match the given token against cur_token. If they match, read the next
8688 token from the operand string. */
8690 intel_match_token (int code)
8692 if (cur_token.code == code)
8699 as_bad (_("Unexpected token `%s'"), cur_token.str);
8704 /* Read a new token from intel_parser.op_string and store it in cur_token. */
8706 intel_get_token (void)
8709 const reg_entry *reg;
8710 struct intel_token new_token;
8712 new_token.code = T_NIL;
8713 new_token.reg = NULL;
8714 new_token.str = NULL;
8716 /* Free the memory allocated to the previous token and move
8717 cur_token to prev_token. */
8719 free (prev_token.str);
8721 prev_token = cur_token;
8723 /* Skip whitespace. */
8724 while (is_space_char (*intel_parser.op_string))
8725 intel_parser.op_string++;
8727 /* Return an empty token if we find nothing else on the line. */
8728 if (*intel_parser.op_string == '\0')
8730 cur_token = new_token;
8734 /* The new token cannot be larger than the remainder of the operand
8736 new_token.str = (char *) xmalloc (strlen (intel_parser.op_string) + 1);
8737 new_token.str[0] = '\0';
8739 if (strchr ("0123456789", *intel_parser.op_string))
8741 char *p = new_token.str;
8742 char *q = intel_parser.op_string;
8743 new_token.code = T_CONST;
8745 /* Allow any kind of identifier char to encompass floating point and
8746 hexadecimal numbers. */
8747 while (is_identifier_char (*q))
8751 /* Recognize special symbol names [0-9][bf]. */
8752 if (strlen (intel_parser.op_string) == 2
8753 && (intel_parser.op_string[1] == 'b'
8754 || intel_parser.op_string[1] == 'f'))
8755 new_token.code = T_ID;
8758 else if ((reg = parse_register (intel_parser.op_string, &end_op)) != NULL)
8760 size_t len = end_op - intel_parser.op_string;
8762 new_token.code = T_REG;
8763 new_token.reg = reg;
8765 memcpy (new_token.str, intel_parser.op_string, len);
8766 new_token.str[len] = '\0';
8769 else if (is_identifier_char (*intel_parser.op_string))
8771 char *p = new_token.str;
8772 char *q = intel_parser.op_string;
8774 /* A '.' or '$' followed by an identifier char is an identifier.
8775 Otherwise, it's operator '.' followed by an expression. */
8776 if ((*q == '.' || *q == '$') && !is_identifier_char (*(q + 1)))
8778 new_token.code = '.';
8779 new_token.str[0] = '.';
8780 new_token.str[1] = '\0';
8784 while (is_identifier_char (*q) || *q == '@')
8788 if (strcasecmp (new_token.str, "NOT") == 0)
8789 new_token.code = '~';
8791 else if (strcasecmp (new_token.str, "MOD") == 0)
8792 new_token.code = '%';
8794 else if (strcasecmp (new_token.str, "AND") == 0)
8795 new_token.code = '&';
8797 else if (strcasecmp (new_token.str, "OR") == 0)
8798 new_token.code = '|';
8800 else if (strcasecmp (new_token.str, "XOR") == 0)
8801 new_token.code = '^';
8803 else if (strcasecmp (new_token.str, "SHL") == 0)
8804 new_token.code = T_SHL;
8806 else if (strcasecmp (new_token.str, "SHR") == 0)
8807 new_token.code = T_SHR;
8809 else if (strcasecmp (new_token.str, "BYTE") == 0)
8810 new_token.code = T_BYTE;
8812 else if (strcasecmp (new_token.str, "WORD") == 0)
8813 new_token.code = T_WORD;
8815 else if (strcasecmp (new_token.str, "DWORD") == 0)
8816 new_token.code = T_DWORD;
8818 else if (strcasecmp (new_token.str, "FWORD") == 0)
8819 new_token.code = T_FWORD;
8821 else if (strcasecmp (new_token.str, "QWORD") == 0)
8822 new_token.code = T_QWORD;
8824 else if (strcasecmp (new_token.str, "TBYTE") == 0
8825 /* XXX remove (gcc still uses it) */
8826 || strcasecmp (new_token.str, "XWORD") == 0)
8827 new_token.code = T_TBYTE;
8829 else if (strcasecmp (new_token.str, "XMMWORD") == 0
8830 || strcasecmp (new_token.str, "OWORD") == 0)
8831 new_token.code = T_XMMWORD;
8833 else if (strcasecmp (new_token.str, "PTR") == 0)
8834 new_token.code = T_PTR;
8836 else if (strcasecmp (new_token.str, "SHORT") == 0)
8837 new_token.code = T_SHORT;
8839 else if (strcasecmp (new_token.str, "OFFSET") == 0)
8841 new_token.code = T_OFFSET;
8843 /* ??? This is not mentioned in the MASM grammar but gcc
8844 makes use of it with -mintel-syntax. OFFSET may be
8845 followed by FLAT: */
8846 if (strncasecmp (q, " FLAT:", 6) == 0)
8847 strcat (new_token.str, " FLAT:");
8850 /* ??? This is not mentioned in the MASM grammar. */
8851 else if (strcasecmp (new_token.str, "FLAT") == 0)
8853 new_token.code = T_OFFSET;
8855 strcat (new_token.str, ":");
8857 as_bad (_("`:' expected"));
8861 new_token.code = T_ID;
8865 else if (strchr ("+-/*%|&^:[]()~", *intel_parser.op_string))
8867 new_token.code = *intel_parser.op_string;
8868 new_token.str[0] = *intel_parser.op_string;
8869 new_token.str[1] = '\0';
8872 else if (strchr ("<>", *intel_parser.op_string)
8873 && *intel_parser.op_string == *(intel_parser.op_string + 1))
8875 new_token.code = *intel_parser.op_string == '<' ? T_SHL : T_SHR;
8876 new_token.str[0] = *intel_parser.op_string;
8877 new_token.str[1] = *intel_parser.op_string;
8878 new_token.str[2] = '\0';
8882 as_bad (_("Unrecognized token `%s'"), intel_parser.op_string);
8884 intel_parser.op_string += strlen (new_token.str);
8885 cur_token = new_token;
8888 /* Put cur_token back into the token stream and make cur_token point to
8891 intel_putback_token (void)
8893 if (cur_token.code != T_NIL)
8895 intel_parser.op_string -= strlen (cur_token.str);
8896 free (cur_token.str);
8898 cur_token = prev_token;
8900 /* Forget prev_token. */
8901 prev_token.code = T_NIL;
8902 prev_token.reg = NULL;
8903 prev_token.str = NULL;
8907 tc_x86_regname_to_dw2regnum (char *regname)
8909 unsigned int regnum;
8910 unsigned int regnames_count;
8911 static const char *const regnames_32[] =
8913 "eax", "ecx", "edx", "ebx",
8914 "esp", "ebp", "esi", "edi",
8915 "eip", "eflags", NULL,
8916 "st0", "st1", "st2", "st3",
8917 "st4", "st5", "st6", "st7",
8919 "xmm0", "xmm1", "xmm2", "xmm3",
8920 "xmm4", "xmm5", "xmm6", "xmm7",
8921 "mm0", "mm1", "mm2", "mm3",
8922 "mm4", "mm5", "mm6", "mm7",
8923 "fcw", "fsw", "mxcsr",
8924 "es", "cs", "ss", "ds", "fs", "gs", NULL, NULL,
8927 static const char *const regnames_64[] =
8929 "rax", "rdx", "rcx", "rbx",
8930 "rsi", "rdi", "rbp", "rsp",
8931 "r8", "r9", "r10", "r11",
8932 "r12", "r13", "r14", "r15",
8934 "xmm0", "xmm1", "xmm2", "xmm3",
8935 "xmm4", "xmm5", "xmm6", "xmm7",
8936 "xmm8", "xmm9", "xmm10", "xmm11",
8937 "xmm12", "xmm13", "xmm14", "xmm15",
8938 "st0", "st1", "st2", "st3",
8939 "st4", "st5", "st6", "st7",
8940 "mm0", "mm1", "mm2", "mm3",
8941 "mm4", "mm5", "mm6", "mm7",
8943 "es", "cs", "ss", "ds", "fs", "gs", NULL, NULL,
8944 "fs.base", "gs.base", NULL, NULL,
8946 "mxcsr", "fcw", "fsw"
8948 const char *const *regnames;
8950 if (flag_code == CODE_64BIT)
8952 regnames = regnames_64;
8953 regnames_count = ARRAY_SIZE (regnames_64);
8957 regnames = regnames_32;
8958 regnames_count = ARRAY_SIZE (regnames_32);
8961 for (regnum = 0; regnum < regnames_count; regnum++)
8962 if (regnames[regnum] != NULL
8963 && strcmp (regname, regnames[regnum]) == 0)
8970 tc_x86_frame_initial_instructions (void)
8972 static unsigned int sp_regno;
8975 sp_regno = tc_x86_regname_to_dw2regnum (flag_code == CODE_64BIT
8978 cfi_add_CFA_def_cfa (sp_regno, -x86_cie_data_alignment);
8979 cfi_add_CFA_offset (x86_dwarf2_return_column, x86_cie_data_alignment);
8983 i386_elf_section_type (const char *str, size_t len)
8985 if (flag_code == CODE_64BIT
8986 && len == sizeof ("unwind") - 1
8987 && strncmp (str, "unwind", 6) == 0)
8988 return SHT_X86_64_UNWIND;
8995 tc_pe_dwarf2_emit_offset (symbolS *symbol, unsigned int size)
8999 expr.X_op = O_secrel;
9000 expr.X_add_symbol = symbol;
9001 expr.X_add_number = 0;
9002 emit_expr (&expr, size);
9006 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
9007 /* For ELF on x86-64, add support for SHF_X86_64_LARGE. */
9010 x86_64_section_letter (int letter, char **ptr_msg)
9012 if (flag_code == CODE_64BIT)
9015 return SHF_X86_64_LARGE;
9017 *ptr_msg = _("Bad .section directive: want a,l,w,x,M,S,G,T in string");
9020 *ptr_msg = _("Bad .section directive: want a,w,x,M,S,G,T in string");
9025 x86_64_section_word (char *str, size_t len)
9027 if (len == 5 && flag_code == CODE_64BIT && CONST_STRNEQ (str, "large"))
9028 return SHF_X86_64_LARGE;
9034 handle_large_common (int small ATTRIBUTE_UNUSED)
9036 if (flag_code != CODE_64BIT)
9038 s_comm_internal (0, elf_common_parse);
9039 as_warn (_(".largecomm supported only in 64bit mode, producing .comm"));
9043 static segT lbss_section;
9044 asection *saved_com_section_ptr = elf_com_section_ptr;
9045 asection *saved_bss_section = bss_section;
9047 if (lbss_section == NULL)
9049 flagword applicable;
9051 subsegT subseg = now_subseg;
9053 /* The .lbss section is for local .largecomm symbols. */
9054 lbss_section = subseg_new (".lbss", 0);
9055 applicable = bfd_applicable_section_flags (stdoutput);
9056 bfd_set_section_flags (stdoutput, lbss_section,
9057 applicable & SEC_ALLOC);
9058 seg_info (lbss_section)->bss = 1;
9060 subseg_set (seg, subseg);
9063 elf_com_section_ptr = &_bfd_elf_large_com_section;
9064 bss_section = lbss_section;
9066 s_comm_internal (0, elf_common_parse);
9068 elf_com_section_ptr = saved_com_section_ptr;
9069 bss_section = saved_bss_section;
9072 #endif /* OBJ_ELF || OBJ_MAYBE_ELF */