gas/
[binutils.git] / gas / config / tc-i386.c
blobf4660b4ec7dfed9649465c4f085ad71813c83f25
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, 2009
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)
11 any later version.
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
21 02110-1301, USA. */
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. */
30 #include "as.h"
31 #include "safe-ctype.h"
32 #include "subsegs.h"
33 #include "dwarf2dbg.h"
34 #include "dw2gencfi.h"
35 #include "elf/x86-64.h"
36 #include "opcodes/i386-init.h"
38 #ifndef REGISTER_WARNINGS
39 #define REGISTER_WARNINGS 1
40 #endif
42 #ifndef INFER_ADDR_PREFIX
43 #define INFER_ADDR_PREFIX 1
44 #endif
46 #ifndef DEFAULT_ARCH
47 #define DEFAULT_ARCH "i386"
48 #endif
50 #ifndef INLINE
51 #if __GNUC__ >= 2
52 #define INLINE __inline__
53 #else
54 #define INLINE
55 #endif
56 #endif
58 /* Prefixes will be emitted in the order defined below.
59 WAIT_PREFIX must be the first prefix since FWAIT is really is an
60 instruction, and so must come before any prefixes.
61 The preferred prefix order is SEG_PREFIX, ADDR_PREFIX, DATA_PREFIX,
62 LOCKREP_PREFIX. */
63 #define WAIT_PREFIX 0
64 #define SEG_PREFIX 1
65 #define ADDR_PREFIX 2
66 #define DATA_PREFIX 3
67 #define LOCKREP_PREFIX 4
68 #define REX_PREFIX 5 /* must come last. */
69 #define MAX_PREFIXES 6 /* max prefixes per opcode */
71 /* we define the syntax here (modulo base,index,scale syntax) */
72 #define REGISTER_PREFIX '%'
73 #define IMMEDIATE_PREFIX '$'
74 #define ABSOLUTE_PREFIX '*'
76 /* these are the instruction mnemonic suffixes in AT&T syntax or
77 memory operand size in Intel syntax. */
78 #define WORD_MNEM_SUFFIX 'w'
79 #define BYTE_MNEM_SUFFIX 'b'
80 #define SHORT_MNEM_SUFFIX 's'
81 #define LONG_MNEM_SUFFIX 'l'
82 #define QWORD_MNEM_SUFFIX 'q'
83 #define XMMWORD_MNEM_SUFFIX 'x'
84 #define YMMWORD_MNEM_SUFFIX 'y'
85 /* Intel Syntax. Use a non-ascii letter since since it never appears
86 in instructions. */
87 #define LONG_DOUBLE_MNEM_SUFFIX '\1'
89 #define END_OF_INSN '\0'
92 'templates' is for grouping together 'template' structures for opcodes
93 of the same name. This is only used for storing the insns in the grand
94 ole hash table of insns.
95 The templates themselves start at START and range up to (but not including)
96 END.
98 typedef struct
100 const template *start;
101 const template *end;
103 templates;
105 /* 386 operand encoding bytes: see 386 book for details of this. */
106 typedef struct
108 unsigned int regmem; /* codes register or memory operand */
109 unsigned int reg; /* codes register operand (or extended opcode) */
110 unsigned int mode; /* how to interpret regmem & reg */
112 modrm_byte;
114 /* x86-64 extension prefix. */
115 typedef int rex_byte;
117 /* 386 opcode byte to code indirect addressing. */
118 typedef struct
120 unsigned base;
121 unsigned index;
122 unsigned scale;
124 sib_byte;
126 /* x86 arch names, types and features */
127 typedef struct
129 const char *name; /* arch name */
130 enum processor_type type; /* arch type */
131 i386_cpu_flags flags; /* cpu feature flags */
133 arch_entry;
135 static void set_code_flag (int);
136 static void set_16bit_gcc_code_flag (int);
137 static void set_intel_syntax (int);
138 static void set_intel_mnemonic (int);
139 static void set_allow_index_reg (int);
140 static void set_sse_check (int);
141 static void set_cpu_arch (int);
142 #ifdef TE_PE
143 static void pe_directive_secrel (int);
144 #endif
145 static void signed_cons (int);
146 static char *output_invalid (int c);
147 static int i386_finalize_immediate (segT, expressionS *, i386_operand_type,
148 const char *);
149 static int i386_finalize_displacement (segT, expressionS *, i386_operand_type,
150 const char *);
151 static int i386_att_operand (char *);
152 static int i386_intel_operand (char *, int);
153 static int i386_intel_simplify (expressionS *);
154 static int i386_intel_parse_name (const char *, expressionS *);
155 static const reg_entry *parse_register (char *, char **);
156 static char *parse_insn (char *, char *);
157 static char *parse_operands (char *, const char *);
158 static void swap_operands (void);
159 static void swap_2_operands (int, int);
160 static void optimize_imm (void);
161 static void optimize_disp (void);
162 static const template *match_template (void);
163 static int check_string (void);
164 static int process_suffix (void);
165 static int check_byte_reg (void);
166 static int check_long_reg (void);
167 static int check_qword_reg (void);
168 static int check_word_reg (void);
169 static int finalize_imm (void);
170 static int process_operands (void);
171 static const seg_entry *build_modrm_byte (void);
172 static void output_insn (void);
173 static void output_imm (fragS *, offsetT);
174 static void output_disp (fragS *, offsetT);
175 #ifndef I386COFF
176 static void s_bss (int);
177 #endif
178 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
179 static void handle_large_common (int small ATTRIBUTE_UNUSED);
180 #endif
182 static const char *default_arch = DEFAULT_ARCH;
184 /* VEX prefix. */
185 typedef struct
187 /* VEX prefix is either 2 byte or 3 byte. */
188 unsigned char bytes[3];
189 unsigned int length;
190 /* Destination or source register specifier. */
191 const reg_entry *register_specifier;
192 } vex_prefix;
194 /* 'md_assemble ()' gathers together information and puts it into a
195 i386_insn. */
197 union i386_op
199 expressionS *disps;
200 expressionS *imms;
201 const reg_entry *regs;
204 struct _i386_insn
206 /* TM holds the template for the insn were currently assembling. */
207 template tm;
209 /* SUFFIX holds the instruction size suffix for byte, word, dword
210 or qword, if given. */
211 char suffix;
213 /* OPERANDS gives the number of given operands. */
214 unsigned int operands;
216 /* REG_OPERANDS, DISP_OPERANDS, MEM_OPERANDS, IMM_OPERANDS give the number
217 of given register, displacement, memory operands and immediate
218 operands. */
219 unsigned int reg_operands, disp_operands, mem_operands, imm_operands;
221 /* TYPES [i] is the type (see above #defines) which tells us how to
222 use OP[i] for the corresponding operand. */
223 i386_operand_type types[MAX_OPERANDS];
225 /* Displacement expression, immediate expression, or register for each
226 operand. */
227 union i386_op op[MAX_OPERANDS];
229 /* Flags for operands. */
230 unsigned int flags[MAX_OPERANDS];
231 #define Operand_PCrel 1
233 /* Relocation type for operand */
234 enum bfd_reloc_code_real reloc[MAX_OPERANDS];
236 /* BASE_REG, INDEX_REG, and LOG2_SCALE_FACTOR are used to encode
237 the base index byte below. */
238 const reg_entry *base_reg;
239 const reg_entry *index_reg;
240 unsigned int log2_scale_factor;
242 /* SEG gives the seg_entries of this insn. They are zero unless
243 explicit segment overrides are given. */
244 const seg_entry *seg[2];
246 /* PREFIX holds all the given prefix opcodes (usually null).
247 PREFIXES is the number of prefix opcodes. */
248 unsigned int prefixes;
249 unsigned char prefix[MAX_PREFIXES];
251 /* RM and SIB are the modrm byte and the sib byte where the
252 addressing modes of this insn are encoded. */
253 modrm_byte rm;
254 rex_byte rex;
255 sib_byte sib;
256 vex_prefix vex;
258 /* Swap operand in encoding. */
259 unsigned int swap_operand : 1;
262 typedef struct _i386_insn i386_insn;
264 /* List of chars besides those in app.c:symbol_chars that can start an
265 operand. Used to prevent the scrubber eating vital white-space. */
266 const char extra_symbol_chars[] = "*%-(["
267 #ifdef LEX_AT
269 #endif
270 #ifdef LEX_QM
272 #endif
275 #if (defined (TE_I386AIX) \
276 || ((defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)) \
277 && !defined (TE_GNU) \
278 && !defined (TE_LINUX) \
279 && !defined (TE_NETWARE) \
280 && !defined (TE_FreeBSD) \
281 && !defined (TE_NetBSD)))
282 /* This array holds the chars that always start a comment. If the
283 pre-processor is disabled, these aren't very useful. The option
284 --divide will remove '/' from this list. */
285 const char *i386_comment_chars = "#/";
286 #define SVR4_COMMENT_CHARS 1
287 #define PREFIX_SEPARATOR '\\'
289 #else
290 const char *i386_comment_chars = "#";
291 #define PREFIX_SEPARATOR '/'
292 #endif
294 /* This array holds the chars that only start a comment at the beginning of
295 a line. If the line seems to have the form '# 123 filename'
296 .line and .file directives will appear in the pre-processed output.
297 Note that input_file.c hand checks for '#' at the beginning of the
298 first line of the input file. This is because the compiler outputs
299 #NO_APP at the beginning of its output.
300 Also note that comments started like this one will always work if
301 '/' isn't otherwise defined. */
302 const char line_comment_chars[] = "#/";
304 const char line_separator_chars[] = ";";
306 /* Chars that can be used to separate mant from exp in floating point
307 nums. */
308 const char EXP_CHARS[] = "eE";
310 /* Chars that mean this number is a floating point constant
311 As in 0f12.456
312 or 0d1.2345e12. */
313 const char FLT_CHARS[] = "fFdDxX";
315 /* Tables for lexical analysis. */
316 static char mnemonic_chars[256];
317 static char register_chars[256];
318 static char operand_chars[256];
319 static char identifier_chars[256];
320 static char digit_chars[256];
322 /* Lexical macros. */
323 #define is_mnemonic_char(x) (mnemonic_chars[(unsigned char) x])
324 #define is_operand_char(x) (operand_chars[(unsigned char) x])
325 #define is_register_char(x) (register_chars[(unsigned char) x])
326 #define is_space_char(x) ((x) == ' ')
327 #define is_identifier_char(x) (identifier_chars[(unsigned char) x])
328 #define is_digit_char(x) (digit_chars[(unsigned char) x])
330 /* All non-digit non-letter characters that may occur in an operand. */
331 static char operand_special_chars[] = "%$-+(,)*._~/<>|&^!:[@]";
333 /* md_assemble() always leaves the strings it's passed unaltered. To
334 effect this we maintain a stack of saved characters that we've smashed
335 with '\0's (indicating end of strings for various sub-fields of the
336 assembler instruction). */
337 static char save_stack[32];
338 static char *save_stack_p;
339 #define END_STRING_AND_SAVE(s) \
340 do { *save_stack_p++ = *(s); *(s) = '\0'; } while (0)
341 #define RESTORE_END_STRING(s) \
342 do { *(s) = *--save_stack_p; } while (0)
344 /* The instruction we're assembling. */
345 static i386_insn i;
347 /* Possible templates for current insn. */
348 static const templates *current_templates;
350 /* Per instruction expressionS buffers: max displacements & immediates. */
351 static expressionS disp_expressions[MAX_MEMORY_OPERANDS];
352 static expressionS im_expressions[MAX_IMMEDIATE_OPERANDS];
354 /* Current operand we are working on. */
355 static int this_operand = -1;
357 /* We support four different modes. FLAG_CODE variable is used to distinguish
358 these. */
360 enum flag_code {
361 CODE_32BIT,
362 CODE_16BIT,
363 CODE_64BIT };
365 static enum flag_code flag_code;
366 static unsigned int object_64bit;
367 static int use_rela_relocations = 0;
369 /* The names used to print error messages. */
370 static const char *flag_code_names[] =
372 "32",
373 "16",
374 "64"
377 /* 1 for intel syntax,
378 0 if att syntax. */
379 static int intel_syntax = 0;
381 /* 1 for intel mnemonic,
382 0 if att mnemonic. */
383 static int intel_mnemonic = !SYSV386_COMPAT;
385 /* 1 if support old (<= 2.8.1) versions of gcc. */
386 static int old_gcc = OLDGCC_COMPAT;
388 /* 1 if pseudo registers are permitted. */
389 static int allow_pseudo_reg = 0;
391 /* 1 if register prefix % not required. */
392 static int allow_naked_reg = 0;
394 /* 1 if pseudo index register, eiz/riz, is allowed . */
395 static int allow_index_reg = 0;
397 static enum
399 sse_check_none = 0,
400 sse_check_warning,
401 sse_check_error
403 sse_check;
405 /* Register prefix used for error message. */
406 static const char *register_prefix = "%";
408 /* Used in 16 bit gcc mode to add an l suffix to call, ret, enter,
409 leave, push, and pop instructions so that gcc has the same stack
410 frame as in 32 bit mode. */
411 static char stackop_size = '\0';
413 /* Non-zero to optimize code alignment. */
414 int optimize_align_code = 1;
416 /* Non-zero to quieten some warnings. */
417 static int quiet_warnings = 0;
419 /* CPU name. */
420 static const char *cpu_arch_name = NULL;
421 static char *cpu_sub_arch_name = NULL;
423 /* CPU feature flags. */
424 static i386_cpu_flags cpu_arch_flags = CPU_UNKNOWN_FLAGS;
426 /* If we have selected a cpu we are generating instructions for. */
427 static int cpu_arch_tune_set = 0;
429 /* Cpu we are generating instructions for. */
430 enum processor_type cpu_arch_tune = PROCESSOR_UNKNOWN;
432 /* CPU feature flags of cpu we are generating instructions for. */
433 static i386_cpu_flags cpu_arch_tune_flags;
435 /* CPU instruction set architecture used. */
436 enum processor_type cpu_arch_isa = PROCESSOR_UNKNOWN;
438 /* CPU feature flags of instruction set architecture used. */
439 i386_cpu_flags cpu_arch_isa_flags;
441 /* If set, conditional jumps are not automatically promoted to handle
442 larger than a byte offset. */
443 static unsigned int no_cond_jump_promotion = 0;
445 /* Encode SSE instructions with VEX prefix. */
446 static unsigned int sse2avx;
448 /* Pre-defined "_GLOBAL_OFFSET_TABLE_". */
449 static symbolS *GOT_symbol;
451 /* The dwarf2 return column, adjusted for 32 or 64 bit. */
452 unsigned int x86_dwarf2_return_column;
454 /* The dwarf2 data alignment, adjusted for 32 or 64 bit. */
455 int x86_cie_data_alignment;
457 /* Interface to relax_segment.
458 There are 3 major relax states for 386 jump insns because the
459 different types of jumps add different sizes to frags when we're
460 figuring out what sort of jump to choose to reach a given label. */
462 /* Types. */
463 #define UNCOND_JUMP 0
464 #define COND_JUMP 1
465 #define COND_JUMP86 2
467 /* Sizes. */
468 #define CODE16 1
469 #define SMALL 0
470 #define SMALL16 (SMALL | CODE16)
471 #define BIG 2
472 #define BIG16 (BIG | CODE16)
474 #ifndef INLINE
475 #ifdef __GNUC__
476 #define INLINE __inline__
477 #else
478 #define INLINE
479 #endif
480 #endif
482 #define ENCODE_RELAX_STATE(type, size) \
483 ((relax_substateT) (((type) << 2) | (size)))
484 #define TYPE_FROM_RELAX_STATE(s) \
485 ((s) >> 2)
486 #define DISP_SIZE_FROM_RELAX_STATE(s) \
487 ((((s) & 3) == BIG ? 4 : (((s) & 3) == BIG16 ? 2 : 1)))
489 /* This table is used by relax_frag to promote short jumps to long
490 ones where necessary. SMALL (short) jumps may be promoted to BIG
491 (32 bit long) ones, and SMALL16 jumps to BIG16 (16 bit long). We
492 don't allow a short jump in a 32 bit code segment to be promoted to
493 a 16 bit offset jump because it's slower (requires data size
494 prefix), and doesn't work, unless the destination is in the bottom
495 64k of the code segment (The top 16 bits of eip are zeroed). */
497 const relax_typeS md_relax_table[] =
499 /* The fields are:
500 1) most positive reach of this state,
501 2) most negative reach of this state,
502 3) how many bytes this mode will have in the variable part of the frag
503 4) which index into the table to try if we can't fit into this one. */
505 /* UNCOND_JUMP states. */
506 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (UNCOND_JUMP, BIG)},
507 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (UNCOND_JUMP, BIG16)},
508 /* dword jmp adds 4 bytes to frag:
509 0 extra opcode bytes, 4 displacement bytes. */
510 {0, 0, 4, 0},
511 /* word jmp adds 2 byte2 to frag:
512 0 extra opcode bytes, 2 displacement bytes. */
513 {0, 0, 2, 0},
515 /* COND_JUMP states. */
516 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP, BIG)},
517 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP, BIG16)},
518 /* dword conditionals adds 5 bytes to frag:
519 1 extra opcode byte, 4 displacement bytes. */
520 {0, 0, 5, 0},
521 /* word conditionals add 3 bytes to frag:
522 1 extra opcode byte, 2 displacement bytes. */
523 {0, 0, 3, 0},
525 /* COND_JUMP86 states. */
526 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP86, BIG)},
527 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP86, BIG16)},
528 /* dword conditionals adds 5 bytes to frag:
529 1 extra opcode byte, 4 displacement bytes. */
530 {0, 0, 5, 0},
531 /* word conditionals add 4 bytes to frag:
532 1 displacement byte and a 3 byte long branch insn. */
533 {0, 0, 4, 0}
536 static const arch_entry cpu_arch[] =
538 { "generic32", PROCESSOR_GENERIC32,
539 CPU_GENERIC32_FLAGS },
540 { "generic64", PROCESSOR_GENERIC64,
541 CPU_GENERIC64_FLAGS },
542 { "i8086", PROCESSOR_UNKNOWN,
543 CPU_NONE_FLAGS },
544 { "i186", PROCESSOR_UNKNOWN,
545 CPU_I186_FLAGS },
546 { "i286", PROCESSOR_UNKNOWN,
547 CPU_I286_FLAGS },
548 { "i386", PROCESSOR_I386,
549 CPU_I386_FLAGS },
550 { "i486", PROCESSOR_I486,
551 CPU_I486_FLAGS },
552 { "i586", PROCESSOR_PENTIUM,
553 CPU_I586_FLAGS },
554 { "i686", PROCESSOR_PENTIUMPRO,
555 CPU_I686_FLAGS },
556 { "pentium", PROCESSOR_PENTIUM,
557 CPU_I586_FLAGS },
558 { "pentiumpro", PROCESSOR_PENTIUMPRO,
559 CPU_I686_FLAGS },
560 { "pentiumii", PROCESSOR_PENTIUMPRO,
561 CPU_P2_FLAGS },
562 { "pentiumiii",PROCESSOR_PENTIUMPRO,
563 CPU_P3_FLAGS },
564 { "pentium4", PROCESSOR_PENTIUM4,
565 CPU_P4_FLAGS },
566 { "prescott", PROCESSOR_NOCONA,
567 CPU_CORE_FLAGS },
568 { "nocona", PROCESSOR_NOCONA,
569 CPU_NOCONA_FLAGS },
570 { "yonah", PROCESSOR_CORE,
571 CPU_CORE_FLAGS },
572 { "core", PROCESSOR_CORE,
573 CPU_CORE_FLAGS },
574 { "merom", PROCESSOR_CORE2,
575 CPU_CORE2_FLAGS },
576 { "core2", PROCESSOR_CORE2,
577 CPU_CORE2_FLAGS },
578 { "corei7", PROCESSOR_COREI7,
579 CPU_COREI7_FLAGS },
580 { "k6", PROCESSOR_K6,
581 CPU_K6_FLAGS },
582 { "k6_2", PROCESSOR_K6,
583 CPU_K6_2_FLAGS },
584 { "athlon", PROCESSOR_ATHLON,
585 CPU_ATHLON_FLAGS },
586 { "sledgehammer", PROCESSOR_K8,
587 CPU_K8_FLAGS },
588 { "opteron", PROCESSOR_K8,
589 CPU_K8_FLAGS },
590 { "k8", PROCESSOR_K8,
591 CPU_K8_FLAGS },
592 { "amdfam10", PROCESSOR_AMDFAM10,
593 CPU_AMDFAM10_FLAGS },
594 { ".mmx", PROCESSOR_UNKNOWN,
595 CPU_MMX_FLAGS },
596 { ".sse", PROCESSOR_UNKNOWN,
597 CPU_SSE_FLAGS },
598 { ".sse2", PROCESSOR_UNKNOWN,
599 CPU_SSE2_FLAGS },
600 { ".sse3", PROCESSOR_UNKNOWN,
601 CPU_SSE3_FLAGS },
602 { ".ssse3", PROCESSOR_UNKNOWN,
603 CPU_SSSE3_FLAGS },
604 { ".sse4.1", PROCESSOR_UNKNOWN,
605 CPU_SSE4_1_FLAGS },
606 { ".sse4.2", PROCESSOR_UNKNOWN,
607 CPU_SSE4_2_FLAGS },
608 { ".sse4", PROCESSOR_UNKNOWN,
609 CPU_SSE4_2_FLAGS },
610 { ".avx", PROCESSOR_UNKNOWN,
611 CPU_AVX_FLAGS },
612 { ".vmx", PROCESSOR_UNKNOWN,
613 CPU_VMX_FLAGS },
614 { ".smx", PROCESSOR_UNKNOWN,
615 CPU_SMX_FLAGS },
616 { ".xsave", PROCESSOR_UNKNOWN,
617 CPU_XSAVE_FLAGS },
618 { ".aes", PROCESSOR_UNKNOWN,
619 CPU_AES_FLAGS },
620 { ".pclmul", PROCESSOR_UNKNOWN,
621 CPU_PCLMUL_FLAGS },
622 { ".clmul", PROCESSOR_UNKNOWN,
623 CPU_PCLMUL_FLAGS },
624 { ".fma", PROCESSOR_UNKNOWN,
625 CPU_FMA_FLAGS },
626 { ".fma4", PROCESSOR_UNKNOWN,
627 CPU_FMA4_FLAGS },
628 { ".movbe", PROCESSOR_UNKNOWN,
629 CPU_MOVBE_FLAGS },
630 { ".ept", PROCESSOR_UNKNOWN,
631 CPU_EPT_FLAGS },
632 { ".clflush", PROCESSOR_UNKNOWN,
633 CPU_CLFLUSH_FLAGS },
634 { ".syscall", PROCESSOR_UNKNOWN,
635 CPU_SYSCALL_FLAGS },
636 { ".rdtscp", PROCESSOR_UNKNOWN,
637 CPU_RDTSCP_FLAGS },
638 { ".3dnow", PROCESSOR_UNKNOWN,
639 CPU_3DNOW_FLAGS },
640 { ".3dnowa", PROCESSOR_UNKNOWN,
641 CPU_3DNOWA_FLAGS },
642 { ".padlock", PROCESSOR_UNKNOWN,
643 CPU_PADLOCK_FLAGS },
644 { ".pacifica", PROCESSOR_UNKNOWN,
645 CPU_SVME_FLAGS },
646 { ".svme", PROCESSOR_UNKNOWN,
647 CPU_SVME_FLAGS },
648 { ".sse4a", PROCESSOR_UNKNOWN,
649 CPU_SSE4A_FLAGS },
650 { ".abm", PROCESSOR_UNKNOWN,
651 CPU_ABM_FLAGS },
654 #ifdef I386COFF
655 /* Like s_lcomm_internal in gas/read.c but the alignment string
656 is allowed to be optional. */
658 static symbolS *
659 pe_lcomm_internal (int needs_align, symbolS *symbolP, addressT size)
661 addressT align = 0;
663 SKIP_WHITESPACE ();
665 if (needs_align
666 && *input_line_pointer == ',')
668 align = parse_align (needs_align - 1);
670 if (align == (addressT) -1)
671 return NULL;
673 else
675 if (size >= 8)
676 align = 3;
677 else if (size >= 4)
678 align = 2;
679 else if (size >= 2)
680 align = 1;
681 else
682 align = 0;
685 bss_alloc (symbolP, size, align);
686 return symbolP;
689 static void
690 pe_lcomm (int needs_align)
692 s_comm_internal (needs_align * 2, pe_lcomm_internal);
694 #endif
696 const pseudo_typeS md_pseudo_table[] =
698 #if !defined(OBJ_AOUT) && !defined(USE_ALIGN_PTWO)
699 {"align", s_align_bytes, 0},
700 #else
701 {"align", s_align_ptwo, 0},
702 #endif
703 {"arch", set_cpu_arch, 0},
704 #ifndef I386COFF
705 {"bss", s_bss, 0},
706 #else
707 {"lcomm", pe_lcomm, 1},
708 #endif
709 {"ffloat", float_cons, 'f'},
710 {"dfloat", float_cons, 'd'},
711 {"tfloat", float_cons, 'x'},
712 {"value", cons, 2},
713 {"slong", signed_cons, 4},
714 {"noopt", s_ignore, 0},
715 {"optim", s_ignore, 0},
716 {"code16gcc", set_16bit_gcc_code_flag, CODE_16BIT},
717 {"code16", set_code_flag, CODE_16BIT},
718 {"code32", set_code_flag, CODE_32BIT},
719 {"code64", set_code_flag, CODE_64BIT},
720 {"intel_syntax", set_intel_syntax, 1},
721 {"att_syntax", set_intel_syntax, 0},
722 {"intel_mnemonic", set_intel_mnemonic, 1},
723 {"att_mnemonic", set_intel_mnemonic, 0},
724 {"allow_index_reg", set_allow_index_reg, 1},
725 {"disallow_index_reg", set_allow_index_reg, 0},
726 {"sse_check", set_sse_check, 0},
727 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
728 {"largecomm", handle_large_common, 0},
729 #else
730 {"file", (void (*) (int)) dwarf2_directive_file, 0},
731 {"loc", dwarf2_directive_loc, 0},
732 {"loc_mark_labels", dwarf2_directive_loc_mark_labels, 0},
733 #endif
734 #ifdef TE_PE
735 {"secrel32", pe_directive_secrel, 0},
736 #endif
737 {0, 0, 0}
740 /* For interface with expression (). */
741 extern char *input_line_pointer;
743 /* Hash table for instruction mnemonic lookup. */
744 static struct hash_control *op_hash;
746 /* Hash table for register lookup. */
747 static struct hash_control *reg_hash;
749 void
750 i386_align_code (fragS *fragP, int count)
752 /* Various efficient no-op patterns for aligning code labels.
753 Note: Don't try to assemble the instructions in the comments.
754 0L and 0w are not legal. */
755 static const char f32_1[] =
756 {0x90}; /* nop */
757 static const char f32_2[] =
758 {0x66,0x90}; /* xchg %ax,%ax */
759 static const char f32_3[] =
760 {0x8d,0x76,0x00}; /* leal 0(%esi),%esi */
761 static const char f32_4[] =
762 {0x8d,0x74,0x26,0x00}; /* leal 0(%esi,1),%esi */
763 static const char f32_5[] =
764 {0x90, /* nop */
765 0x8d,0x74,0x26,0x00}; /* leal 0(%esi,1),%esi */
766 static const char f32_6[] =
767 {0x8d,0xb6,0x00,0x00,0x00,0x00}; /* leal 0L(%esi),%esi */
768 static const char f32_7[] =
769 {0x8d,0xb4,0x26,0x00,0x00,0x00,0x00}; /* leal 0L(%esi,1),%esi */
770 static const char f32_8[] =
771 {0x90, /* nop */
772 0x8d,0xb4,0x26,0x00,0x00,0x00,0x00}; /* leal 0L(%esi,1),%esi */
773 static const char f32_9[] =
774 {0x89,0xf6, /* movl %esi,%esi */
775 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
776 static const char f32_10[] =
777 {0x8d,0x76,0x00, /* leal 0(%esi),%esi */
778 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
779 static const char f32_11[] =
780 {0x8d,0x74,0x26,0x00, /* leal 0(%esi,1),%esi */
781 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
782 static const char f32_12[] =
783 {0x8d,0xb6,0x00,0x00,0x00,0x00, /* leal 0L(%esi),%esi */
784 0x8d,0xbf,0x00,0x00,0x00,0x00}; /* leal 0L(%edi),%edi */
785 static const char f32_13[] =
786 {0x8d,0xb6,0x00,0x00,0x00,0x00, /* leal 0L(%esi),%esi */
787 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
788 static const char f32_14[] =
789 {0x8d,0xb4,0x26,0x00,0x00,0x00,0x00, /* leal 0L(%esi,1),%esi */
790 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
791 static const char f16_3[] =
792 {0x8d,0x74,0x00}; /* lea 0(%esi),%esi */
793 static const char f16_4[] =
794 {0x8d,0xb4,0x00,0x00}; /* lea 0w(%si),%si */
795 static const char f16_5[] =
796 {0x90, /* nop */
797 0x8d,0xb4,0x00,0x00}; /* lea 0w(%si),%si */
798 static const char f16_6[] =
799 {0x89,0xf6, /* mov %si,%si */
800 0x8d,0xbd,0x00,0x00}; /* lea 0w(%di),%di */
801 static const char f16_7[] =
802 {0x8d,0x74,0x00, /* lea 0(%si),%si */
803 0x8d,0xbd,0x00,0x00}; /* lea 0w(%di),%di */
804 static const char f16_8[] =
805 {0x8d,0xb4,0x00,0x00, /* lea 0w(%si),%si */
806 0x8d,0xbd,0x00,0x00}; /* lea 0w(%di),%di */
807 static const char jump_31[] =
808 {0xeb,0x1d,0x90,0x90,0x90,0x90,0x90, /* jmp .+31; lotsa nops */
809 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
810 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
811 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90};
812 static const char *const f32_patt[] = {
813 f32_1, f32_2, f32_3, f32_4, f32_5, f32_6, f32_7, f32_8,
814 f32_9, f32_10, f32_11, f32_12, f32_13, f32_14
816 static const char *const f16_patt[] = {
817 f32_1, f32_2, f16_3, f16_4, f16_5, f16_6, f16_7, f16_8
819 /* nopl (%[re]ax) */
820 static const char alt_3[] =
821 {0x0f,0x1f,0x00};
822 /* nopl 0(%[re]ax) */
823 static const char alt_4[] =
824 {0x0f,0x1f,0x40,0x00};
825 /* nopl 0(%[re]ax,%[re]ax,1) */
826 static const char alt_5[] =
827 {0x0f,0x1f,0x44,0x00,0x00};
828 /* nopw 0(%[re]ax,%[re]ax,1) */
829 static const char alt_6[] =
830 {0x66,0x0f,0x1f,0x44,0x00,0x00};
831 /* nopl 0L(%[re]ax) */
832 static const char alt_7[] =
833 {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
834 /* nopl 0L(%[re]ax,%[re]ax,1) */
835 static const char alt_8[] =
836 {0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
837 /* nopw 0L(%[re]ax,%[re]ax,1) */
838 static const char alt_9[] =
839 {0x66,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
840 /* nopw %cs:0L(%[re]ax,%[re]ax,1) */
841 static const char alt_10[] =
842 {0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
843 /* data16
844 nopw %cs:0L(%[re]ax,%[re]ax,1) */
845 static const char alt_long_11[] =
846 {0x66,
847 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
848 /* data16
849 data16
850 nopw %cs:0L(%[re]ax,%[re]ax,1) */
851 static const char alt_long_12[] =
852 {0x66,
853 0x66,
854 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
855 /* data16
856 data16
857 data16
858 nopw %cs:0L(%[re]ax,%[re]ax,1) */
859 static const char alt_long_13[] =
860 {0x66,
861 0x66,
862 0x66,
863 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
864 /* data16
865 data16
866 data16
867 data16
868 nopw %cs:0L(%[re]ax,%[re]ax,1) */
869 static const char alt_long_14[] =
870 {0x66,
871 0x66,
872 0x66,
873 0x66,
874 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
875 /* data16
876 data16
877 data16
878 data16
879 data16
880 nopw %cs:0L(%[re]ax,%[re]ax,1) */
881 static const char alt_long_15[] =
882 {0x66,
883 0x66,
884 0x66,
885 0x66,
886 0x66,
887 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
888 /* nopl 0(%[re]ax,%[re]ax,1)
889 nopw 0(%[re]ax,%[re]ax,1) */
890 static const char alt_short_11[] =
891 {0x0f,0x1f,0x44,0x00,0x00,
892 0x66,0x0f,0x1f,0x44,0x00,0x00};
893 /* nopw 0(%[re]ax,%[re]ax,1)
894 nopw 0(%[re]ax,%[re]ax,1) */
895 static const char alt_short_12[] =
896 {0x66,0x0f,0x1f,0x44,0x00,0x00,
897 0x66,0x0f,0x1f,0x44,0x00,0x00};
898 /* nopw 0(%[re]ax,%[re]ax,1)
899 nopl 0L(%[re]ax) */
900 static const char alt_short_13[] =
901 {0x66,0x0f,0x1f,0x44,0x00,0x00,
902 0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
903 /* nopl 0L(%[re]ax)
904 nopl 0L(%[re]ax) */
905 static const char alt_short_14[] =
906 {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00,
907 0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
908 /* nopl 0L(%[re]ax)
909 nopl 0L(%[re]ax,%[re]ax,1) */
910 static const char alt_short_15[] =
911 {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00,
912 0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
913 static const char *const alt_short_patt[] = {
914 f32_1, f32_2, alt_3, alt_4, alt_5, alt_6, alt_7, alt_8,
915 alt_9, alt_10, alt_short_11, alt_short_12, alt_short_13,
916 alt_short_14, alt_short_15
918 static const char *const alt_long_patt[] = {
919 f32_1, f32_2, alt_3, alt_4, alt_5, alt_6, alt_7, alt_8,
920 alt_9, alt_10, alt_long_11, alt_long_12, alt_long_13,
921 alt_long_14, alt_long_15
924 /* Only align for at least a positive non-zero boundary. */
925 if (count <= 0 || count > MAX_MEM_FOR_RS_ALIGN_CODE)
926 return;
928 /* We need to decide which NOP sequence to use for 32bit and
929 64bit. When -mtune= is used:
931 1. For PROCESSOR_I386, PROCESSOR_I486, PROCESSOR_PENTIUM and
932 PROCESSOR_GENERIC32, f32_patt will be used.
933 2. For PROCESSOR_PENTIUMPRO, PROCESSOR_PENTIUM4, PROCESSOR_NOCONA,
934 PROCESSOR_CORE, PROCESSOR_CORE2, PROCESSOR_COREI7, and
935 PROCESSOR_GENERIC64, alt_long_patt will be used.
936 3. For PROCESSOR_ATHLON, PROCESSOR_K6, PROCESSOR_K8 and
937 PROCESSOR_AMDFAM10, alt_short_patt will be used.
939 When -mtune= isn't used, alt_long_patt will be used if
940 cpu_arch_isa_flags has Cpu686. Otherwise, f32_patt will
941 be used.
943 When -march= or .arch is used, we can't use anything beyond
944 cpu_arch_isa_flags. */
946 if (flag_code == CODE_16BIT)
948 if (count > 8)
950 memcpy (fragP->fr_literal + fragP->fr_fix,
951 jump_31, count);
952 /* Adjust jump offset. */
953 fragP->fr_literal[fragP->fr_fix + 1] = count - 2;
955 else
956 memcpy (fragP->fr_literal + fragP->fr_fix,
957 f16_patt[count - 1], count);
959 else
961 const char *const *patt = NULL;
963 if (fragP->tc_frag_data.isa == PROCESSOR_UNKNOWN)
965 /* PROCESSOR_UNKNOWN means that all ISAs may be used. */
966 switch (cpu_arch_tune)
968 case PROCESSOR_UNKNOWN:
969 /* We use cpu_arch_isa_flags to check if we SHOULD
970 optimize for Cpu686. */
971 if (fragP->tc_frag_data.isa_flags.bitfield.cpui686)
972 patt = alt_long_patt;
973 else
974 patt = f32_patt;
975 break;
976 case PROCESSOR_PENTIUMPRO:
977 case PROCESSOR_PENTIUM4:
978 case PROCESSOR_NOCONA:
979 case PROCESSOR_CORE:
980 case PROCESSOR_CORE2:
981 case PROCESSOR_COREI7:
982 case PROCESSOR_GENERIC64:
983 patt = alt_long_patt;
984 break;
985 case PROCESSOR_K6:
986 case PROCESSOR_ATHLON:
987 case PROCESSOR_K8:
988 case PROCESSOR_AMDFAM10:
989 patt = alt_short_patt;
990 break;
991 case PROCESSOR_I386:
992 case PROCESSOR_I486:
993 case PROCESSOR_PENTIUM:
994 case PROCESSOR_GENERIC32:
995 patt = f32_patt;
996 break;
999 else
1001 switch (fragP->tc_frag_data.tune)
1003 case PROCESSOR_UNKNOWN:
1004 /* When cpu_arch_isa is set, cpu_arch_tune shouldn't be
1005 PROCESSOR_UNKNOWN. */
1006 abort ();
1007 break;
1009 case PROCESSOR_I386:
1010 case PROCESSOR_I486:
1011 case PROCESSOR_PENTIUM:
1012 case PROCESSOR_K6:
1013 case PROCESSOR_ATHLON:
1014 case PROCESSOR_K8:
1015 case PROCESSOR_AMDFAM10:
1016 case PROCESSOR_GENERIC32:
1017 /* We use cpu_arch_isa_flags to check if we CAN optimize
1018 for Cpu686. */
1019 if (fragP->tc_frag_data.isa_flags.bitfield.cpui686)
1020 patt = alt_short_patt;
1021 else
1022 patt = f32_patt;
1023 break;
1024 case PROCESSOR_PENTIUMPRO:
1025 case PROCESSOR_PENTIUM4:
1026 case PROCESSOR_NOCONA:
1027 case PROCESSOR_CORE:
1028 case PROCESSOR_CORE2:
1029 case PROCESSOR_COREI7:
1030 if (fragP->tc_frag_data.isa_flags.bitfield.cpui686)
1031 patt = alt_long_patt;
1032 else
1033 patt = f32_patt;
1034 break;
1035 case PROCESSOR_GENERIC64:
1036 patt = alt_long_patt;
1037 break;
1041 if (patt == f32_patt)
1043 /* If the padding is less than 15 bytes, we use the normal
1044 ones. Otherwise, we use a jump instruction and adjust
1045 its offset. */
1046 if (count < 15)
1047 memcpy (fragP->fr_literal + fragP->fr_fix,
1048 patt[count - 1], count);
1049 else
1051 memcpy (fragP->fr_literal + fragP->fr_fix,
1052 jump_31, count);
1053 /* Adjust jump offset. */
1054 fragP->fr_literal[fragP->fr_fix + 1] = count - 2;
1057 else
1059 /* Maximum length of an instruction is 15 byte. If the
1060 padding is greater than 15 bytes and we don't use jump,
1061 we have to break it into smaller pieces. */
1062 int padding = count;
1063 while (padding > 15)
1065 padding -= 15;
1066 memcpy (fragP->fr_literal + fragP->fr_fix + padding,
1067 patt [14], 15);
1070 if (padding)
1071 memcpy (fragP->fr_literal + fragP->fr_fix,
1072 patt [padding - 1], padding);
1075 fragP->fr_var = count;
1078 static INLINE int
1079 operand_type_all_zero (const union i386_operand_type *x)
1081 switch (ARRAY_SIZE(x->array))
1083 case 3:
1084 if (x->array[2])
1085 return 0;
1086 case 2:
1087 if (x->array[1])
1088 return 0;
1089 case 1:
1090 return !x->array[0];
1091 default:
1092 abort ();
1096 static INLINE void
1097 operand_type_set (union i386_operand_type *x, unsigned int v)
1099 switch (ARRAY_SIZE(x->array))
1101 case 3:
1102 x->array[2] = v;
1103 case 2:
1104 x->array[1] = v;
1105 case 1:
1106 x->array[0] = v;
1107 break;
1108 default:
1109 abort ();
1113 static INLINE int
1114 operand_type_equal (const union i386_operand_type *x,
1115 const union i386_operand_type *y)
1117 switch (ARRAY_SIZE(x->array))
1119 case 3:
1120 if (x->array[2] != y->array[2])
1121 return 0;
1122 case 2:
1123 if (x->array[1] != y->array[1])
1124 return 0;
1125 case 1:
1126 return x->array[0] == y->array[0];
1127 break;
1128 default:
1129 abort ();
1133 static INLINE int
1134 cpu_flags_all_zero (const union i386_cpu_flags *x)
1136 switch (ARRAY_SIZE(x->array))
1138 case 3:
1139 if (x->array[2])
1140 return 0;
1141 case 2:
1142 if (x->array[1])
1143 return 0;
1144 case 1:
1145 return !x->array[0];
1146 default:
1147 abort ();
1151 static INLINE void
1152 cpu_flags_set (union i386_cpu_flags *x, unsigned int v)
1154 switch (ARRAY_SIZE(x->array))
1156 case 3:
1157 x->array[2] = v;
1158 case 2:
1159 x->array[1] = v;
1160 case 1:
1161 x->array[0] = v;
1162 break;
1163 default:
1164 abort ();
1168 static INLINE int
1169 cpu_flags_equal (const union i386_cpu_flags *x,
1170 const union i386_cpu_flags *y)
1172 switch (ARRAY_SIZE(x->array))
1174 case 3:
1175 if (x->array[2] != y->array[2])
1176 return 0;
1177 case 2:
1178 if (x->array[1] != y->array[1])
1179 return 0;
1180 case 1:
1181 return x->array[0] == y->array[0];
1182 break;
1183 default:
1184 abort ();
1188 static INLINE int
1189 cpu_flags_check_cpu64 (i386_cpu_flags f)
1191 return !((flag_code == CODE_64BIT && f.bitfield.cpuno64)
1192 || (flag_code != CODE_64BIT && f.bitfield.cpu64));
1195 static INLINE i386_cpu_flags
1196 cpu_flags_and (i386_cpu_flags x, i386_cpu_flags y)
1198 switch (ARRAY_SIZE (x.array))
1200 case 3:
1201 x.array [2] &= y.array [2];
1202 case 2:
1203 x.array [1] &= y.array [1];
1204 case 1:
1205 x.array [0] &= y.array [0];
1206 break;
1207 default:
1208 abort ();
1210 return x;
1213 static INLINE i386_cpu_flags
1214 cpu_flags_or (i386_cpu_flags x, i386_cpu_flags y)
1216 switch (ARRAY_SIZE (x.array))
1218 case 3:
1219 x.array [2] |= y.array [2];
1220 case 2:
1221 x.array [1] |= y.array [1];
1222 case 1:
1223 x.array [0] |= y.array [0];
1224 break;
1225 default:
1226 abort ();
1228 return x;
1231 #define CPU_FLAGS_ARCH_MATCH 0x1
1232 #define CPU_FLAGS_64BIT_MATCH 0x2
1233 #define CPU_FLAGS_AES_MATCH 0x4
1234 #define CPU_FLAGS_PCLMUL_MATCH 0x8
1235 #define CPU_FLAGS_AVX_MATCH 0x10
1237 #define CPU_FLAGS_32BIT_MATCH \
1238 (CPU_FLAGS_ARCH_MATCH | CPU_FLAGS_AES_MATCH \
1239 | CPU_FLAGS_PCLMUL_MATCH | CPU_FLAGS_AVX_MATCH)
1240 #define CPU_FLAGS_PERFECT_MATCH \
1241 (CPU_FLAGS_32BIT_MATCH | CPU_FLAGS_64BIT_MATCH)
1243 /* Return CPU flags match bits. */
1245 static int
1246 cpu_flags_match (const template *t)
1248 i386_cpu_flags x = t->cpu_flags;
1249 int match = cpu_flags_check_cpu64 (x) ? CPU_FLAGS_64BIT_MATCH : 0;
1251 x.bitfield.cpu64 = 0;
1252 x.bitfield.cpuno64 = 0;
1254 if (cpu_flags_all_zero (&x))
1256 /* This instruction is available on all archs. */
1257 match |= CPU_FLAGS_32BIT_MATCH;
1259 else
1261 /* This instruction is available only on some archs. */
1262 i386_cpu_flags cpu = cpu_arch_flags;
1264 cpu.bitfield.cpu64 = 0;
1265 cpu.bitfield.cpuno64 = 0;
1266 cpu = cpu_flags_and (x, cpu);
1267 if (!cpu_flags_all_zero (&cpu))
1269 if (x.bitfield.cpuavx)
1271 /* We only need to check AES/PCLMUL/SSE2AVX with AVX. */
1272 if (cpu.bitfield.cpuavx)
1274 /* Check SSE2AVX. */
1275 if (!t->opcode_modifier.sse2avx|| sse2avx)
1277 match |= (CPU_FLAGS_ARCH_MATCH
1278 | CPU_FLAGS_AVX_MATCH);
1279 /* Check AES. */
1280 if (!x.bitfield.cpuaes || cpu.bitfield.cpuaes)
1281 match |= CPU_FLAGS_AES_MATCH;
1282 /* Check PCLMUL. */
1283 if (!x.bitfield.cpupclmul
1284 || cpu.bitfield.cpupclmul)
1285 match |= CPU_FLAGS_PCLMUL_MATCH;
1288 else
1289 match |= CPU_FLAGS_ARCH_MATCH;
1291 else
1292 match |= CPU_FLAGS_32BIT_MATCH;
1295 return match;
1298 static INLINE i386_operand_type
1299 operand_type_and (i386_operand_type x, i386_operand_type y)
1301 switch (ARRAY_SIZE (x.array))
1303 case 3:
1304 x.array [2] &= y.array [2];
1305 case 2:
1306 x.array [1] &= y.array [1];
1307 case 1:
1308 x.array [0] &= y.array [0];
1309 break;
1310 default:
1311 abort ();
1313 return x;
1316 static INLINE i386_operand_type
1317 operand_type_or (i386_operand_type x, i386_operand_type y)
1319 switch (ARRAY_SIZE (x.array))
1321 case 3:
1322 x.array [2] |= y.array [2];
1323 case 2:
1324 x.array [1] |= y.array [1];
1325 case 1:
1326 x.array [0] |= y.array [0];
1327 break;
1328 default:
1329 abort ();
1331 return x;
1334 static INLINE i386_operand_type
1335 operand_type_xor (i386_operand_type x, i386_operand_type y)
1337 switch (ARRAY_SIZE (x.array))
1339 case 3:
1340 x.array [2] ^= y.array [2];
1341 case 2:
1342 x.array [1] ^= y.array [1];
1343 case 1:
1344 x.array [0] ^= y.array [0];
1345 break;
1346 default:
1347 abort ();
1349 return x;
1352 static const i386_operand_type acc32 = OPERAND_TYPE_ACC32;
1353 static const i386_operand_type acc64 = OPERAND_TYPE_ACC64;
1354 static const i386_operand_type control = OPERAND_TYPE_CONTROL;
1355 static const i386_operand_type inoutportreg
1356 = OPERAND_TYPE_INOUTPORTREG;
1357 static const i386_operand_type reg16_inoutportreg
1358 = OPERAND_TYPE_REG16_INOUTPORTREG;
1359 static const i386_operand_type disp16 = OPERAND_TYPE_DISP16;
1360 static const i386_operand_type disp32 = OPERAND_TYPE_DISP32;
1361 static const i386_operand_type disp32s = OPERAND_TYPE_DISP32S;
1362 static const i386_operand_type disp16_32 = OPERAND_TYPE_DISP16_32;
1363 static const i386_operand_type anydisp
1364 = OPERAND_TYPE_ANYDISP;
1365 static const i386_operand_type regxmm = OPERAND_TYPE_REGXMM;
1366 static const i386_operand_type regymm = OPERAND_TYPE_REGYMM;
1367 static const i386_operand_type imm8 = OPERAND_TYPE_IMM8;
1368 static const i386_operand_type imm8s = OPERAND_TYPE_IMM8S;
1369 static const i386_operand_type imm16 = OPERAND_TYPE_IMM16;
1370 static const i386_operand_type imm32 = OPERAND_TYPE_IMM32;
1371 static const i386_operand_type imm32s = OPERAND_TYPE_IMM32S;
1372 static const i386_operand_type imm64 = OPERAND_TYPE_IMM64;
1373 static const i386_operand_type imm16_32 = OPERAND_TYPE_IMM16_32;
1374 static const i386_operand_type imm16_32s = OPERAND_TYPE_IMM16_32S;
1375 static const i386_operand_type imm16_32_32s = OPERAND_TYPE_IMM16_32_32S;
1377 enum operand_type
1379 reg,
1380 imm,
1381 disp,
1382 anymem
1385 static INLINE int
1386 operand_type_check (i386_operand_type t, enum operand_type c)
1388 switch (c)
1390 case reg:
1391 return (t.bitfield.reg8
1392 || t.bitfield.reg16
1393 || t.bitfield.reg32
1394 || t.bitfield.reg64);
1396 case imm:
1397 return (t.bitfield.imm8
1398 || t.bitfield.imm8s
1399 || t.bitfield.imm16
1400 || t.bitfield.imm32
1401 || t.bitfield.imm32s
1402 || t.bitfield.imm64);
1404 case disp:
1405 return (t.bitfield.disp8
1406 || t.bitfield.disp16
1407 || t.bitfield.disp32
1408 || t.bitfield.disp32s
1409 || t.bitfield.disp64);
1411 case anymem:
1412 return (t.bitfield.disp8
1413 || t.bitfield.disp16
1414 || t.bitfield.disp32
1415 || t.bitfield.disp32s
1416 || t.bitfield.disp64
1417 || t.bitfield.baseindex);
1419 default:
1420 abort ();
1423 return 0;
1426 /* Return 1 if there is no conflict in 8bit/16bit/32bit/64bit on
1427 operand J for instruction template T. */
1429 static INLINE int
1430 match_reg_size (const template *t, unsigned int j)
1432 return !((i.types[j].bitfield.byte
1433 && !t->operand_types[j].bitfield.byte)
1434 || (i.types[j].bitfield.word
1435 && !t->operand_types[j].bitfield.word)
1436 || (i.types[j].bitfield.dword
1437 && !t->operand_types[j].bitfield.dword)
1438 || (i.types[j].bitfield.qword
1439 && !t->operand_types[j].bitfield.qword));
1442 /* Return 1 if there is no conflict in any size on operand J for
1443 instruction template T. */
1445 static INLINE int
1446 match_mem_size (const template *t, unsigned int j)
1448 return (match_reg_size (t, j)
1449 && !((i.types[j].bitfield.unspecified
1450 && !t->operand_types[j].bitfield.unspecified)
1451 || (i.types[j].bitfield.fword
1452 && !t->operand_types[j].bitfield.fword)
1453 || (i.types[j].bitfield.tbyte
1454 && !t->operand_types[j].bitfield.tbyte)
1455 || (i.types[j].bitfield.xmmword
1456 && !t->operand_types[j].bitfield.xmmword)
1457 || (i.types[j].bitfield.ymmword
1458 && !t->operand_types[j].bitfield.ymmword)));
1461 /* Return 1 if there is no size conflict on any operands for
1462 instruction template T. */
1464 static INLINE int
1465 operand_size_match (const template *t)
1467 unsigned int j;
1468 int match = 1;
1470 /* Don't check jump instructions. */
1471 if (t->opcode_modifier.jump
1472 || t->opcode_modifier.jumpbyte
1473 || t->opcode_modifier.jumpdword
1474 || t->opcode_modifier.jumpintersegment)
1475 return match;
1477 /* Check memory and accumulator operand size. */
1478 for (j = 0; j < i.operands; j++)
1480 if (t->operand_types[j].bitfield.anysize)
1481 continue;
1483 if (t->operand_types[j].bitfield.acc && !match_reg_size (t, j))
1485 match = 0;
1486 break;
1489 if (i.types[j].bitfield.mem && !match_mem_size (t, j))
1491 match = 0;
1492 break;
1496 if (match
1497 || (!t->opcode_modifier.d && !t->opcode_modifier.floatd))
1498 return match;
1500 /* Check reverse. */
1501 gas_assert (i.operands == 2);
1503 match = 1;
1504 for (j = 0; j < 2; j++)
1506 if (t->operand_types[j].bitfield.acc
1507 && !match_reg_size (t, j ? 0 : 1))
1509 match = 0;
1510 break;
1513 if (i.types[j].bitfield.mem
1514 && !match_mem_size (t, j ? 0 : 1))
1516 match = 0;
1517 break;
1521 return match;
1524 static INLINE int
1525 operand_type_match (i386_operand_type overlap,
1526 i386_operand_type given)
1528 i386_operand_type temp = overlap;
1530 temp.bitfield.jumpabsolute = 0;
1531 temp.bitfield.unspecified = 0;
1532 temp.bitfield.byte = 0;
1533 temp.bitfield.word = 0;
1534 temp.bitfield.dword = 0;
1535 temp.bitfield.fword = 0;
1536 temp.bitfield.qword = 0;
1537 temp.bitfield.tbyte = 0;
1538 temp.bitfield.xmmword = 0;
1539 temp.bitfield.ymmword = 0;
1540 if (operand_type_all_zero (&temp))
1541 return 0;
1543 return (given.bitfield.baseindex == overlap.bitfield.baseindex
1544 && given.bitfield.jumpabsolute == overlap.bitfield.jumpabsolute);
1547 /* If given types g0 and g1 are registers they must be of the same type
1548 unless the expected operand type register overlap is null.
1549 Note that Acc in a template matches every size of reg. */
1551 static INLINE int
1552 operand_type_register_match (i386_operand_type m0,
1553 i386_operand_type g0,
1554 i386_operand_type t0,
1555 i386_operand_type m1,
1556 i386_operand_type g1,
1557 i386_operand_type t1)
1559 if (!operand_type_check (g0, reg))
1560 return 1;
1562 if (!operand_type_check (g1, reg))
1563 return 1;
1565 if (g0.bitfield.reg8 == g1.bitfield.reg8
1566 && g0.bitfield.reg16 == g1.bitfield.reg16
1567 && g0.bitfield.reg32 == g1.bitfield.reg32
1568 && g0.bitfield.reg64 == g1.bitfield.reg64)
1569 return 1;
1571 if (m0.bitfield.acc)
1573 t0.bitfield.reg8 = 1;
1574 t0.bitfield.reg16 = 1;
1575 t0.bitfield.reg32 = 1;
1576 t0.bitfield.reg64 = 1;
1579 if (m1.bitfield.acc)
1581 t1.bitfield.reg8 = 1;
1582 t1.bitfield.reg16 = 1;
1583 t1.bitfield.reg32 = 1;
1584 t1.bitfield.reg64 = 1;
1587 return (!(t0.bitfield.reg8 & t1.bitfield.reg8)
1588 && !(t0.bitfield.reg16 & t1.bitfield.reg16)
1589 && !(t0.bitfield.reg32 & t1.bitfield.reg32)
1590 && !(t0.bitfield.reg64 & t1.bitfield.reg64));
1593 static INLINE unsigned int
1594 mode_from_disp_size (i386_operand_type t)
1596 if (t.bitfield.disp8)
1597 return 1;
1598 else if (t.bitfield.disp16
1599 || t.bitfield.disp32
1600 || t.bitfield.disp32s)
1601 return 2;
1602 else
1603 return 0;
1606 static INLINE int
1607 fits_in_signed_byte (offsetT num)
1609 return (num >= -128) && (num <= 127);
1612 static INLINE int
1613 fits_in_unsigned_byte (offsetT num)
1615 return (num & 0xff) == num;
1618 static INLINE int
1619 fits_in_unsigned_word (offsetT num)
1621 return (num & 0xffff) == num;
1624 static INLINE int
1625 fits_in_signed_word (offsetT num)
1627 return (-32768 <= num) && (num <= 32767);
1630 static INLINE int
1631 fits_in_signed_long (offsetT num ATTRIBUTE_UNUSED)
1633 #ifndef BFD64
1634 return 1;
1635 #else
1636 return (!(((offsetT) -1 << 31) & num)
1637 || (((offsetT) -1 << 31) & num) == ((offsetT) -1 << 31));
1638 #endif
1639 } /* fits_in_signed_long() */
1641 static INLINE int
1642 fits_in_unsigned_long (offsetT num ATTRIBUTE_UNUSED)
1644 #ifndef BFD64
1645 return 1;
1646 #else
1647 return (num & (((offsetT) 2 << 31) - 1)) == num;
1648 #endif
1649 } /* fits_in_unsigned_long() */
1651 static i386_operand_type
1652 smallest_imm_type (offsetT num)
1654 i386_operand_type t;
1656 operand_type_set (&t, 0);
1657 t.bitfield.imm64 = 1;
1659 if (cpu_arch_tune != PROCESSOR_I486 && num == 1)
1661 /* This code is disabled on the 486 because all the Imm1 forms
1662 in the opcode table are slower on the i486. They're the
1663 versions with the implicitly specified single-position
1664 displacement, which has another syntax if you really want to
1665 use that form. */
1666 t.bitfield.imm1 = 1;
1667 t.bitfield.imm8 = 1;
1668 t.bitfield.imm8s = 1;
1669 t.bitfield.imm16 = 1;
1670 t.bitfield.imm32 = 1;
1671 t.bitfield.imm32s = 1;
1673 else if (fits_in_signed_byte (num))
1675 t.bitfield.imm8 = 1;
1676 t.bitfield.imm8s = 1;
1677 t.bitfield.imm16 = 1;
1678 t.bitfield.imm32 = 1;
1679 t.bitfield.imm32s = 1;
1681 else if (fits_in_unsigned_byte (num))
1683 t.bitfield.imm8 = 1;
1684 t.bitfield.imm16 = 1;
1685 t.bitfield.imm32 = 1;
1686 t.bitfield.imm32s = 1;
1688 else if (fits_in_signed_word (num) || fits_in_unsigned_word (num))
1690 t.bitfield.imm16 = 1;
1691 t.bitfield.imm32 = 1;
1692 t.bitfield.imm32s = 1;
1694 else if (fits_in_signed_long (num))
1696 t.bitfield.imm32 = 1;
1697 t.bitfield.imm32s = 1;
1699 else if (fits_in_unsigned_long (num))
1700 t.bitfield.imm32 = 1;
1702 return t;
1705 static offsetT
1706 offset_in_range (offsetT val, int size)
1708 addressT mask;
1710 switch (size)
1712 case 1: mask = ((addressT) 1 << 8) - 1; break;
1713 case 2: mask = ((addressT) 1 << 16) - 1; break;
1714 case 4: mask = ((addressT) 2 << 31) - 1; break;
1715 #ifdef BFD64
1716 case 8: mask = ((addressT) 2 << 63) - 1; break;
1717 #endif
1718 default: abort ();
1721 /* If BFD64, sign extend val. */
1722 if (!use_rela_relocations)
1723 if ((val & ~(((addressT) 2 << 31) - 1)) == 0)
1724 val = (val ^ ((addressT) 1 << 31)) - ((addressT) 1 << 31);
1726 if ((val & ~mask) != 0 && (val & ~mask) != ~mask)
1728 char buf1[40], buf2[40];
1730 sprint_value (buf1, val);
1731 sprint_value (buf2, val & mask);
1732 as_warn (_("%s shortened to %s"), buf1, buf2);
1734 return val & mask;
1737 /* Returns 0 if attempting to add a prefix where one from the same
1738 class already exists, 1 if non rep/repne added, 2 if rep/repne
1739 added. */
1740 static int
1741 add_prefix (unsigned int prefix)
1743 int ret = 1;
1744 unsigned int q;
1746 if (prefix >= REX_OPCODE && prefix < REX_OPCODE + 16
1747 && flag_code == CODE_64BIT)
1749 if ((i.prefix[REX_PREFIX] & prefix & REX_W)
1750 || ((i.prefix[REX_PREFIX] & (REX_R | REX_X | REX_B))
1751 && (prefix & (REX_R | REX_X | REX_B))))
1752 ret = 0;
1753 q = REX_PREFIX;
1755 else
1757 switch (prefix)
1759 default:
1760 abort ();
1762 case CS_PREFIX_OPCODE:
1763 case DS_PREFIX_OPCODE:
1764 case ES_PREFIX_OPCODE:
1765 case FS_PREFIX_OPCODE:
1766 case GS_PREFIX_OPCODE:
1767 case SS_PREFIX_OPCODE:
1768 q = SEG_PREFIX;
1769 break;
1771 case REPNE_PREFIX_OPCODE:
1772 case REPE_PREFIX_OPCODE:
1773 ret = 2;
1774 /* fall thru */
1775 case LOCK_PREFIX_OPCODE:
1776 q = LOCKREP_PREFIX;
1777 break;
1779 case FWAIT_OPCODE:
1780 q = WAIT_PREFIX;
1781 break;
1783 case ADDR_PREFIX_OPCODE:
1784 q = ADDR_PREFIX;
1785 break;
1787 case DATA_PREFIX_OPCODE:
1788 q = DATA_PREFIX;
1789 break;
1791 if (i.prefix[q] != 0)
1792 ret = 0;
1795 if (ret)
1797 if (!i.prefix[q])
1798 ++i.prefixes;
1799 i.prefix[q] |= prefix;
1801 else
1802 as_bad (_("same type of prefix used twice"));
1804 return ret;
1807 static void
1808 set_code_flag (int value)
1810 flag_code = value;
1811 if (flag_code == CODE_64BIT)
1813 cpu_arch_flags.bitfield.cpu64 = 1;
1814 cpu_arch_flags.bitfield.cpuno64 = 0;
1816 else
1818 cpu_arch_flags.bitfield.cpu64 = 0;
1819 cpu_arch_flags.bitfield.cpuno64 = 1;
1821 if (value == CODE_64BIT && !cpu_arch_flags.bitfield.cpulm )
1823 as_bad (_("64bit mode not supported on this CPU."));
1825 if (value == CODE_32BIT && !cpu_arch_flags.bitfield.cpui386)
1827 as_bad (_("32bit mode not supported on this CPU."));
1829 stackop_size = '\0';
1832 static void
1833 set_16bit_gcc_code_flag (int new_code_flag)
1835 flag_code = new_code_flag;
1836 if (flag_code != CODE_16BIT)
1837 abort ();
1838 cpu_arch_flags.bitfield.cpu64 = 0;
1839 cpu_arch_flags.bitfield.cpuno64 = 1;
1840 stackop_size = LONG_MNEM_SUFFIX;
1843 static void
1844 set_intel_syntax (int syntax_flag)
1846 /* Find out if register prefixing is specified. */
1847 int ask_naked_reg = 0;
1849 SKIP_WHITESPACE ();
1850 if (!is_end_of_line[(unsigned char) *input_line_pointer])
1852 char *string = input_line_pointer;
1853 int e = get_symbol_end ();
1855 if (strcmp (string, "prefix") == 0)
1856 ask_naked_reg = 1;
1857 else if (strcmp (string, "noprefix") == 0)
1858 ask_naked_reg = -1;
1859 else
1860 as_bad (_("bad argument to syntax directive."));
1861 *input_line_pointer = e;
1863 demand_empty_rest_of_line ();
1865 intel_syntax = syntax_flag;
1867 if (ask_naked_reg == 0)
1868 allow_naked_reg = (intel_syntax
1869 && (bfd_get_symbol_leading_char (stdoutput) != '\0'));
1870 else
1871 allow_naked_reg = (ask_naked_reg < 0);
1873 expr_set_rank (O_full_ptr, syntax_flag ? 10 : 0);
1875 identifier_chars['%'] = intel_syntax && allow_naked_reg ? '%' : 0;
1876 identifier_chars['$'] = intel_syntax ? '$' : 0;
1877 register_prefix = allow_naked_reg ? "" : "%";
1880 static void
1881 set_intel_mnemonic (int mnemonic_flag)
1883 intel_mnemonic = mnemonic_flag;
1886 static void
1887 set_allow_index_reg (int flag)
1889 allow_index_reg = flag;
1892 static void
1893 set_sse_check (int dummy ATTRIBUTE_UNUSED)
1895 SKIP_WHITESPACE ();
1897 if (!is_end_of_line[(unsigned char) *input_line_pointer])
1899 char *string = input_line_pointer;
1900 int e = get_symbol_end ();
1902 if (strcmp (string, "none") == 0)
1903 sse_check = sse_check_none;
1904 else if (strcmp (string, "warning") == 0)
1905 sse_check = sse_check_warning;
1906 else if (strcmp (string, "error") == 0)
1907 sse_check = sse_check_error;
1908 else
1909 as_bad (_("bad argument to sse_check directive."));
1910 *input_line_pointer = e;
1912 else
1913 as_bad (_("missing argument for sse_check directive"));
1915 demand_empty_rest_of_line ();
1918 static void
1919 set_cpu_arch (int dummy ATTRIBUTE_UNUSED)
1921 SKIP_WHITESPACE ();
1923 if (!is_end_of_line[(unsigned char) *input_line_pointer])
1925 char *string = input_line_pointer;
1926 int e = get_symbol_end ();
1927 unsigned int i;
1928 i386_cpu_flags flags;
1930 for (i = 0; i < ARRAY_SIZE (cpu_arch); i++)
1932 if (strcmp (string, cpu_arch[i].name) == 0)
1934 if (*string != '.')
1936 cpu_arch_name = cpu_arch[i].name;
1937 cpu_sub_arch_name = NULL;
1938 cpu_arch_flags = cpu_arch[i].flags;
1939 if (flag_code == CODE_64BIT)
1941 cpu_arch_flags.bitfield.cpu64 = 1;
1942 cpu_arch_flags.bitfield.cpuno64 = 0;
1944 else
1946 cpu_arch_flags.bitfield.cpu64 = 0;
1947 cpu_arch_flags.bitfield.cpuno64 = 1;
1949 cpu_arch_isa = cpu_arch[i].type;
1950 cpu_arch_isa_flags = cpu_arch[i].flags;
1951 if (!cpu_arch_tune_set)
1953 cpu_arch_tune = cpu_arch_isa;
1954 cpu_arch_tune_flags = cpu_arch_isa_flags;
1956 break;
1959 flags = cpu_flags_or (cpu_arch_flags,
1960 cpu_arch[i].flags);
1961 if (!cpu_flags_equal (&flags, &cpu_arch_flags))
1963 if (cpu_sub_arch_name)
1965 char *name = cpu_sub_arch_name;
1966 cpu_sub_arch_name = concat (name,
1967 cpu_arch[i].name,
1968 (const char *) NULL);
1969 free (name);
1971 else
1972 cpu_sub_arch_name = xstrdup (cpu_arch[i].name);
1973 cpu_arch_flags = flags;
1975 *input_line_pointer = e;
1976 demand_empty_rest_of_line ();
1977 return;
1980 if (i >= ARRAY_SIZE (cpu_arch))
1981 as_bad (_("no such architecture: `%s'"), string);
1983 *input_line_pointer = e;
1985 else
1986 as_bad (_("missing cpu architecture"));
1988 no_cond_jump_promotion = 0;
1989 if (*input_line_pointer == ','
1990 && !is_end_of_line[(unsigned char) input_line_pointer[1]])
1992 char *string = ++input_line_pointer;
1993 int e = get_symbol_end ();
1995 if (strcmp (string, "nojumps") == 0)
1996 no_cond_jump_promotion = 1;
1997 else if (strcmp (string, "jumps") == 0)
1999 else
2000 as_bad (_("no such architecture modifier: `%s'"), string);
2002 *input_line_pointer = e;
2005 demand_empty_rest_of_line ();
2008 unsigned long
2009 i386_mach ()
2011 if (!strcmp (default_arch, "x86_64"))
2012 return bfd_mach_x86_64;
2013 else if (!strcmp (default_arch, "i386"))
2014 return bfd_mach_i386_i386;
2015 else
2016 as_fatal (_("Unknown architecture"));
2019 void
2020 md_begin ()
2022 const char *hash_err;
2024 /* Initialize op_hash hash table. */
2025 op_hash = hash_new ();
2028 const template *optab;
2029 templates *core_optab;
2031 /* Setup for loop. */
2032 optab = i386_optab;
2033 core_optab = (templates *) xmalloc (sizeof (templates));
2034 core_optab->start = optab;
2036 while (1)
2038 ++optab;
2039 if (optab->name == NULL
2040 || strcmp (optab->name, (optab - 1)->name) != 0)
2042 /* different name --> ship out current template list;
2043 add to hash table; & begin anew. */
2044 core_optab->end = optab;
2045 hash_err = hash_insert (op_hash,
2046 (optab - 1)->name,
2047 (void *) core_optab);
2048 if (hash_err)
2050 as_fatal (_("Internal Error: Can't hash %s: %s"),
2051 (optab - 1)->name,
2052 hash_err);
2054 if (optab->name == NULL)
2055 break;
2056 core_optab = (templates *) xmalloc (sizeof (templates));
2057 core_optab->start = optab;
2062 /* Initialize reg_hash hash table. */
2063 reg_hash = hash_new ();
2065 const reg_entry *regtab;
2066 unsigned int regtab_size = i386_regtab_size;
2068 for (regtab = i386_regtab; regtab_size--; regtab++)
2070 hash_err = hash_insert (reg_hash, regtab->reg_name, (void *) regtab);
2071 if (hash_err)
2072 as_fatal (_("Internal Error: Can't hash %s: %s"),
2073 regtab->reg_name,
2074 hash_err);
2078 /* Fill in lexical tables: mnemonic_chars, operand_chars. */
2080 int c;
2081 char *p;
2083 for (c = 0; c < 256; c++)
2085 if (ISDIGIT (c))
2087 digit_chars[c] = c;
2088 mnemonic_chars[c] = c;
2089 register_chars[c] = c;
2090 operand_chars[c] = c;
2092 else if (ISLOWER (c))
2094 mnemonic_chars[c] = c;
2095 register_chars[c] = c;
2096 operand_chars[c] = c;
2098 else if (ISUPPER (c))
2100 mnemonic_chars[c] = TOLOWER (c);
2101 register_chars[c] = mnemonic_chars[c];
2102 operand_chars[c] = c;
2105 if (ISALPHA (c) || ISDIGIT (c))
2106 identifier_chars[c] = c;
2107 else if (c >= 128)
2109 identifier_chars[c] = c;
2110 operand_chars[c] = c;
2114 #ifdef LEX_AT
2115 identifier_chars['@'] = '@';
2116 #endif
2117 #ifdef LEX_QM
2118 identifier_chars['?'] = '?';
2119 operand_chars['?'] = '?';
2120 #endif
2121 digit_chars['-'] = '-';
2122 mnemonic_chars['_'] = '_';
2123 mnemonic_chars['-'] = '-';
2124 mnemonic_chars['.'] = '.';
2125 identifier_chars['_'] = '_';
2126 identifier_chars['.'] = '.';
2128 for (p = operand_special_chars; *p != '\0'; p++)
2129 operand_chars[(unsigned char) *p] = *p;
2132 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
2133 if (IS_ELF)
2135 record_alignment (text_section, 2);
2136 record_alignment (data_section, 2);
2137 record_alignment (bss_section, 2);
2139 #endif
2141 if (flag_code == CODE_64BIT)
2143 x86_dwarf2_return_column = 16;
2144 x86_cie_data_alignment = -8;
2146 else
2148 x86_dwarf2_return_column = 8;
2149 x86_cie_data_alignment = -4;
2153 void
2154 i386_print_statistics (FILE *file)
2156 hash_print_statistics (file, "i386 opcode", op_hash);
2157 hash_print_statistics (file, "i386 register", reg_hash);
2160 #ifdef DEBUG386
2162 /* Debugging routines for md_assemble. */
2163 static void pte (template *);
2164 static void pt (i386_operand_type);
2165 static void pe (expressionS *);
2166 static void ps (symbolS *);
2168 static void
2169 pi (char *line, i386_insn *x)
2171 unsigned int i;
2173 fprintf (stdout, "%s: template ", line);
2174 pte (&x->tm);
2175 fprintf (stdout, " address: base %s index %s scale %x\n",
2176 x->base_reg ? x->base_reg->reg_name : "none",
2177 x->index_reg ? x->index_reg->reg_name : "none",
2178 x->log2_scale_factor);
2179 fprintf (stdout, " modrm: mode %x reg %x reg/mem %x\n",
2180 x->rm.mode, x->rm.reg, x->rm.regmem);
2181 fprintf (stdout, " sib: base %x index %x scale %x\n",
2182 x->sib.base, x->sib.index, x->sib.scale);
2183 fprintf (stdout, " rex: 64bit %x extX %x extY %x extZ %x\n",
2184 (x->rex & REX_W) != 0,
2185 (x->rex & REX_R) != 0,
2186 (x->rex & REX_X) != 0,
2187 (x->rex & REX_B) != 0);
2188 for (i = 0; i < x->operands; i++)
2190 fprintf (stdout, " #%d: ", i + 1);
2191 pt (x->types[i]);
2192 fprintf (stdout, "\n");
2193 if (x->types[i].bitfield.reg8
2194 || x->types[i].bitfield.reg16
2195 || x->types[i].bitfield.reg32
2196 || x->types[i].bitfield.reg64
2197 || x->types[i].bitfield.regmmx
2198 || x->types[i].bitfield.regxmm
2199 || x->types[i].bitfield.regymm
2200 || x->types[i].bitfield.sreg2
2201 || x->types[i].bitfield.sreg3
2202 || x->types[i].bitfield.control
2203 || x->types[i].bitfield.debug
2204 || x->types[i].bitfield.test)
2205 fprintf (stdout, "%s\n", x->op[i].regs->reg_name);
2206 if (operand_type_check (x->types[i], imm))
2207 pe (x->op[i].imms);
2208 if (operand_type_check (x->types[i], disp))
2209 pe (x->op[i].disps);
2213 static void
2214 pte (template *t)
2216 unsigned int i;
2217 fprintf (stdout, " %d operands ", t->operands);
2218 fprintf (stdout, "opcode %x ", t->base_opcode);
2219 if (t->extension_opcode != None)
2220 fprintf (stdout, "ext %x ", t->extension_opcode);
2221 if (t->opcode_modifier.d)
2222 fprintf (stdout, "D");
2223 if (t->opcode_modifier.w)
2224 fprintf (stdout, "W");
2225 fprintf (stdout, "\n");
2226 for (i = 0; i < t->operands; i++)
2228 fprintf (stdout, " #%d type ", i + 1);
2229 pt (t->operand_types[i]);
2230 fprintf (stdout, "\n");
2234 static void
2235 pe (expressionS *e)
2237 fprintf (stdout, " operation %d\n", e->X_op);
2238 fprintf (stdout, " add_number %ld (%lx)\n",
2239 (long) e->X_add_number, (long) e->X_add_number);
2240 if (e->X_add_symbol)
2242 fprintf (stdout, " add_symbol ");
2243 ps (e->X_add_symbol);
2244 fprintf (stdout, "\n");
2246 if (e->X_op_symbol)
2248 fprintf (stdout, " op_symbol ");
2249 ps (e->X_op_symbol);
2250 fprintf (stdout, "\n");
2254 static void
2255 ps (symbolS *s)
2257 fprintf (stdout, "%s type %s%s",
2258 S_GET_NAME (s),
2259 S_IS_EXTERNAL (s) ? "EXTERNAL " : "",
2260 segment_name (S_GET_SEGMENT (s)));
2263 static struct type_name
2265 i386_operand_type mask;
2266 const char *name;
2268 const type_names[] =
2270 { OPERAND_TYPE_REG8, "r8" },
2271 { OPERAND_TYPE_REG16, "r16" },
2272 { OPERAND_TYPE_REG32, "r32" },
2273 { OPERAND_TYPE_REG64, "r64" },
2274 { OPERAND_TYPE_IMM8, "i8" },
2275 { OPERAND_TYPE_IMM8, "i8s" },
2276 { OPERAND_TYPE_IMM16, "i16" },
2277 { OPERAND_TYPE_IMM32, "i32" },
2278 { OPERAND_TYPE_IMM32S, "i32s" },
2279 { OPERAND_TYPE_IMM64, "i64" },
2280 { OPERAND_TYPE_IMM1, "i1" },
2281 { OPERAND_TYPE_BASEINDEX, "BaseIndex" },
2282 { OPERAND_TYPE_DISP8, "d8" },
2283 { OPERAND_TYPE_DISP16, "d16" },
2284 { OPERAND_TYPE_DISP32, "d32" },
2285 { OPERAND_TYPE_DISP32S, "d32s" },
2286 { OPERAND_TYPE_DISP64, "d64" },
2287 { OPERAND_TYPE_INOUTPORTREG, "InOutPortReg" },
2288 { OPERAND_TYPE_SHIFTCOUNT, "ShiftCount" },
2289 { OPERAND_TYPE_CONTROL, "control reg" },
2290 { OPERAND_TYPE_TEST, "test reg" },
2291 { OPERAND_TYPE_DEBUG, "debug reg" },
2292 { OPERAND_TYPE_FLOATREG, "FReg" },
2293 { OPERAND_TYPE_FLOATACC, "FAcc" },
2294 { OPERAND_TYPE_SREG2, "SReg2" },
2295 { OPERAND_TYPE_SREG3, "SReg3" },
2296 { OPERAND_TYPE_ACC, "Acc" },
2297 { OPERAND_TYPE_JUMPABSOLUTE, "Jump Absolute" },
2298 { OPERAND_TYPE_REGMMX, "rMMX" },
2299 { OPERAND_TYPE_REGXMM, "rXMM" },
2300 { OPERAND_TYPE_REGYMM, "rYMM" },
2301 { OPERAND_TYPE_ESSEG, "es" },
2304 static void
2305 pt (i386_operand_type t)
2307 unsigned int j;
2308 i386_operand_type a;
2310 for (j = 0; j < ARRAY_SIZE (type_names); j++)
2312 a = operand_type_and (t, type_names[j].mask);
2313 if (!operand_type_all_zero (&a))
2314 fprintf (stdout, "%s, ", type_names[j].name);
2316 fflush (stdout);
2319 #endif /* DEBUG386 */
2321 static bfd_reloc_code_real_type
2322 reloc (unsigned int size,
2323 int pcrel,
2324 int sign,
2325 bfd_reloc_code_real_type other)
2327 if (other != NO_RELOC)
2329 reloc_howto_type *reloc;
2331 if (size == 8)
2332 switch (other)
2334 case BFD_RELOC_X86_64_GOT32:
2335 return BFD_RELOC_X86_64_GOT64;
2336 break;
2337 case BFD_RELOC_X86_64_PLTOFF64:
2338 return BFD_RELOC_X86_64_PLTOFF64;
2339 break;
2340 case BFD_RELOC_X86_64_GOTPC32:
2341 other = BFD_RELOC_X86_64_GOTPC64;
2342 break;
2343 case BFD_RELOC_X86_64_GOTPCREL:
2344 other = BFD_RELOC_X86_64_GOTPCREL64;
2345 break;
2346 case BFD_RELOC_X86_64_TPOFF32:
2347 other = BFD_RELOC_X86_64_TPOFF64;
2348 break;
2349 case BFD_RELOC_X86_64_DTPOFF32:
2350 other = BFD_RELOC_X86_64_DTPOFF64;
2351 break;
2352 default:
2353 break;
2356 /* Sign-checking 4-byte relocations in 16-/32-bit code is pointless. */
2357 if (size == 4 && flag_code != CODE_64BIT)
2358 sign = -1;
2360 reloc = bfd_reloc_type_lookup (stdoutput, other);
2361 if (!reloc)
2362 as_bad (_("unknown relocation (%u)"), other);
2363 else if (size != bfd_get_reloc_size (reloc))
2364 as_bad (_("%u-byte relocation cannot be applied to %u-byte field"),
2365 bfd_get_reloc_size (reloc),
2366 size);
2367 else if (pcrel && !reloc->pc_relative)
2368 as_bad (_("non-pc-relative relocation for pc-relative field"));
2369 else if ((reloc->complain_on_overflow == complain_overflow_signed
2370 && !sign)
2371 || (reloc->complain_on_overflow == complain_overflow_unsigned
2372 && sign > 0))
2373 as_bad (_("relocated field and relocation type differ in signedness"));
2374 else
2375 return other;
2376 return NO_RELOC;
2379 if (pcrel)
2381 if (!sign)
2382 as_bad (_("there are no unsigned pc-relative relocations"));
2383 switch (size)
2385 case 1: return BFD_RELOC_8_PCREL;
2386 case 2: return BFD_RELOC_16_PCREL;
2387 case 4: return BFD_RELOC_32_PCREL;
2388 case 8: return BFD_RELOC_64_PCREL;
2390 as_bad (_("cannot do %u byte pc-relative relocation"), size);
2392 else
2394 if (sign > 0)
2395 switch (size)
2397 case 4: return BFD_RELOC_X86_64_32S;
2399 else
2400 switch (size)
2402 case 1: return BFD_RELOC_8;
2403 case 2: return BFD_RELOC_16;
2404 case 4: return BFD_RELOC_32;
2405 case 8: return BFD_RELOC_64;
2407 as_bad (_("cannot do %s %u byte relocation"),
2408 sign > 0 ? "signed" : "unsigned", size);
2411 return NO_RELOC;
2414 /* Here we decide which fixups can be adjusted to make them relative to
2415 the beginning of the section instead of the symbol. Basically we need
2416 to make sure that the dynamic relocations are done correctly, so in
2417 some cases we force the original symbol to be used. */
2420 tc_i386_fix_adjustable (fixS *fixP ATTRIBUTE_UNUSED)
2422 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
2423 if (!IS_ELF)
2424 return 1;
2426 /* Don't adjust pc-relative references to merge sections in 64-bit
2427 mode. */
2428 if (use_rela_relocations
2429 && (S_GET_SEGMENT (fixP->fx_addsy)->flags & SEC_MERGE) != 0
2430 && fixP->fx_pcrel)
2431 return 0;
2433 /* The x86_64 GOTPCREL are represented as 32bit PCrel relocations
2434 and changed later by validate_fix. */
2435 if (GOT_symbol && fixP->fx_subsy == GOT_symbol
2436 && fixP->fx_r_type == BFD_RELOC_32_PCREL)
2437 return 0;
2439 /* adjust_reloc_syms doesn't know about the GOT. */
2440 if (fixP->fx_r_type == BFD_RELOC_386_GOTOFF
2441 || fixP->fx_r_type == BFD_RELOC_386_PLT32
2442 || fixP->fx_r_type == BFD_RELOC_386_GOT32
2443 || fixP->fx_r_type == BFD_RELOC_386_TLS_GD
2444 || fixP->fx_r_type == BFD_RELOC_386_TLS_LDM
2445 || fixP->fx_r_type == BFD_RELOC_386_TLS_LDO_32
2446 || fixP->fx_r_type == BFD_RELOC_386_TLS_IE_32
2447 || fixP->fx_r_type == BFD_RELOC_386_TLS_IE
2448 || fixP->fx_r_type == BFD_RELOC_386_TLS_GOTIE
2449 || fixP->fx_r_type == BFD_RELOC_386_TLS_LE_32
2450 || fixP->fx_r_type == BFD_RELOC_386_TLS_LE
2451 || fixP->fx_r_type == BFD_RELOC_386_TLS_GOTDESC
2452 || fixP->fx_r_type == BFD_RELOC_386_TLS_DESC_CALL
2453 || fixP->fx_r_type == BFD_RELOC_X86_64_PLT32
2454 || fixP->fx_r_type == BFD_RELOC_X86_64_GOT32
2455 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTPCREL
2456 || fixP->fx_r_type == BFD_RELOC_X86_64_TLSGD
2457 || fixP->fx_r_type == BFD_RELOC_X86_64_TLSLD
2458 || fixP->fx_r_type == BFD_RELOC_X86_64_DTPOFF32
2459 || fixP->fx_r_type == BFD_RELOC_X86_64_DTPOFF64
2460 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTTPOFF
2461 || fixP->fx_r_type == BFD_RELOC_X86_64_TPOFF32
2462 || fixP->fx_r_type == BFD_RELOC_X86_64_TPOFF64
2463 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTOFF64
2464 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTPC32_TLSDESC
2465 || fixP->fx_r_type == BFD_RELOC_X86_64_TLSDESC_CALL
2466 || fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
2467 || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
2468 return 0;
2470 if (fixP->fx_addsy != NULL
2471 && symbol_get_bfdsym (fixP->fx_addsy)->flags & BSF_GNU_INDIRECT_FUNCTION)
2472 return 0;
2473 #endif
2474 return 1;
2477 static int
2478 intel_float_operand (const char *mnemonic)
2480 /* Note that the value returned is meaningful only for opcodes with (memory)
2481 operands, hence the code here is free to improperly handle opcodes that
2482 have no operands (for better performance and smaller code). */
2484 if (mnemonic[0] != 'f')
2485 return 0; /* non-math */
2487 switch (mnemonic[1])
2489 /* fclex, fdecstp, fdisi, femms, feni, fincstp, finit, fsetpm, and
2490 the fs segment override prefix not currently handled because no
2491 call path can make opcodes without operands get here */
2492 case 'i':
2493 return 2 /* integer op */;
2494 case 'l':
2495 if (mnemonic[2] == 'd' && (mnemonic[3] == 'c' || mnemonic[3] == 'e'))
2496 return 3; /* fldcw/fldenv */
2497 break;
2498 case 'n':
2499 if (mnemonic[2] != 'o' /* fnop */)
2500 return 3; /* non-waiting control op */
2501 break;
2502 case 'r':
2503 if (mnemonic[2] == 's')
2504 return 3; /* frstor/frstpm */
2505 break;
2506 case 's':
2507 if (mnemonic[2] == 'a')
2508 return 3; /* fsave */
2509 if (mnemonic[2] == 't')
2511 switch (mnemonic[3])
2513 case 'c': /* fstcw */
2514 case 'd': /* fstdw */
2515 case 'e': /* fstenv */
2516 case 's': /* fsts[gw] */
2517 return 3;
2520 break;
2521 case 'x':
2522 if (mnemonic[2] == 'r' || mnemonic[2] == 's')
2523 return 0; /* fxsave/fxrstor are not really math ops */
2524 break;
2527 return 1;
2530 /* Build the VEX prefix. */
2532 static void
2533 build_vex_prefix (const template *t)
2535 unsigned int register_specifier;
2536 unsigned int implied_prefix;
2537 unsigned int vector_length;
2539 /* Check register specifier. */
2540 if (i.vex.register_specifier)
2542 register_specifier = i.vex.register_specifier->reg_num;
2543 if ((i.vex.register_specifier->reg_flags & RegRex))
2544 register_specifier += 8;
2545 register_specifier = ~register_specifier & 0xf;
2547 else
2548 register_specifier = 0xf;
2550 /* Use 2-byte VEX prefix by swappping destination and source
2551 operand. */
2552 if (!i.swap_operand
2553 && i.operands == i.reg_operands
2554 && i.tm.opcode_modifier.vex0f
2555 && i.tm.opcode_modifier.s
2556 && i.rex == REX_B)
2558 unsigned int xchg = i.operands - 1;
2559 union i386_op temp_op;
2560 i386_operand_type temp_type;
2562 temp_type = i.types[xchg];
2563 i.types[xchg] = i.types[0];
2564 i.types[0] = temp_type;
2565 temp_op = i.op[xchg];
2566 i.op[xchg] = i.op[0];
2567 i.op[0] = temp_op;
2569 gas_assert (i.rm.mode == 3);
2571 i.rex = REX_R;
2572 xchg = i.rm.regmem;
2573 i.rm.regmem = i.rm.reg;
2574 i.rm.reg = xchg;
2576 /* Use the next insn. */
2577 i.tm = t[1];
2580 vector_length = i.tm.opcode_modifier.vex256 ? 1 : 0;
2582 switch ((i.tm.base_opcode >> 8) & 0xff)
2584 case 0:
2585 implied_prefix = 0;
2586 break;
2587 case DATA_PREFIX_OPCODE:
2588 implied_prefix = 1;
2589 break;
2590 case REPE_PREFIX_OPCODE:
2591 implied_prefix = 2;
2592 break;
2593 case REPNE_PREFIX_OPCODE:
2594 implied_prefix = 3;
2595 break;
2596 default:
2597 abort ();
2600 /* Use 2-byte VEX prefix if possible. */
2601 if (i.tm.opcode_modifier.vex0f
2602 && (i.rex & (REX_W | REX_X | REX_B)) == 0)
2604 /* 2-byte VEX prefix. */
2605 unsigned int r;
2607 i.vex.length = 2;
2608 i.vex.bytes[0] = 0xc5;
2610 /* Check the REX.R bit. */
2611 r = (i.rex & REX_R) ? 0 : 1;
2612 i.vex.bytes[1] = (r << 7
2613 | register_specifier << 3
2614 | vector_length << 2
2615 | implied_prefix);
2617 else
2619 /* 3-byte VEX prefix. */
2620 unsigned int m, w;
2622 if (i.tm.opcode_modifier.vex0f)
2623 m = 0x1;
2624 else if (i.tm.opcode_modifier.vex0f38)
2625 m = 0x2;
2626 else if (i.tm.opcode_modifier.vex0f3a)
2627 m = 0x3;
2628 else
2629 abort ();
2631 i.vex.length = 3;
2632 i.vex.bytes[0] = 0xc4;
2634 /* The high 3 bits of the second VEX byte are 1's compliment
2635 of RXB bits from REX. */
2636 i.vex.bytes[1] = (~i.rex & 0x7) << 5 | m;
2638 /* Check the REX.W bit. */
2639 w = (i.rex & REX_W) ? 1 : 0;
2640 if (i.tm.opcode_modifier.vexw0 || i.tm.opcode_modifier.vexw1)
2642 if (w)
2643 abort ();
2645 if (i.tm.opcode_modifier.vexw1)
2646 w = 1;
2649 i.vex.bytes[2] = (w << 7
2650 | register_specifier << 3
2651 | vector_length << 2
2652 | implied_prefix);
2656 static void
2657 process_immext (void)
2659 expressionS *exp;
2661 if (i.tm.cpu_flags.bitfield.cpusse3 && i.operands > 0)
2663 /* SSE3 Instructions have the fixed operands with an opcode
2664 suffix which is coded in the same place as an 8-bit immediate
2665 field would be. Here we check those operands and remove them
2666 afterwards. */
2667 unsigned int x;
2669 for (x = 0; x < i.operands; x++)
2670 if (i.op[x].regs->reg_num != x)
2671 as_bad (_("can't use register '%s%s' as operand %d in '%s'."),
2672 register_prefix, i.op[x].regs->reg_name, x + 1,
2673 i.tm.name);
2675 i.operands = 0;
2678 /* These AMD 3DNow! and SSE2 instructions have an opcode suffix
2679 which is coded in the same place as an 8-bit immediate field
2680 would be. Here we fake an 8-bit immediate operand from the
2681 opcode suffix stored in tm.extension_opcode.
2683 AVX instructions also use this encoding, for some of
2684 3 argument instructions. */
2686 gas_assert (i.imm_operands == 0
2687 && (i.operands <= 2
2688 || (i.tm.opcode_modifier.vex
2689 && i.operands <= 4)));
2691 exp = &im_expressions[i.imm_operands++];
2692 i.op[i.operands].imms = exp;
2693 i.types[i.operands] = imm8;
2694 i.operands++;
2695 exp->X_op = O_constant;
2696 exp->X_add_number = i.tm.extension_opcode;
2697 i.tm.extension_opcode = None;
2700 /* This is the guts of the machine-dependent assembler. LINE points to a
2701 machine dependent instruction. This function is supposed to emit
2702 the frags/bytes it assembles to. */
2704 void
2705 md_assemble (char *line)
2707 unsigned int j;
2708 char mnemonic[MAX_MNEM_SIZE];
2709 const template *t;
2711 /* Initialize globals. */
2712 memset (&i, '\0', sizeof (i));
2713 for (j = 0; j < MAX_OPERANDS; j++)
2714 i.reloc[j] = NO_RELOC;
2715 memset (disp_expressions, '\0', sizeof (disp_expressions));
2716 memset (im_expressions, '\0', sizeof (im_expressions));
2717 save_stack_p = save_stack;
2719 /* First parse an instruction mnemonic & call i386_operand for the operands.
2720 We assume that the scrubber has arranged it so that line[0] is the valid
2721 start of a (possibly prefixed) mnemonic. */
2723 line = parse_insn (line, mnemonic);
2724 if (line == NULL)
2725 return;
2727 line = parse_operands (line, mnemonic);
2728 this_operand = -1;
2729 if (line == NULL)
2730 return;
2732 /* Now we've parsed the mnemonic into a set of templates, and have the
2733 operands at hand. */
2735 /* All intel opcodes have reversed operands except for "bound" and
2736 "enter". We also don't reverse intersegment "jmp" and "call"
2737 instructions with 2 immediate operands so that the immediate segment
2738 precedes the offset, as it does when in AT&T mode. */
2739 if (intel_syntax
2740 && i.operands > 1
2741 && (strcmp (mnemonic, "bound") != 0)
2742 && (strcmp (mnemonic, "invlpga") != 0)
2743 && !(operand_type_check (i.types[0], imm)
2744 && operand_type_check (i.types[1], imm)))
2745 swap_operands ();
2747 /* The order of the immediates should be reversed
2748 for 2 immediates extrq and insertq instructions */
2749 if (i.imm_operands == 2
2750 && (strcmp (mnemonic, "extrq") == 0
2751 || strcmp (mnemonic, "insertq") == 0))
2752 swap_2_operands (0, 1);
2754 if (i.imm_operands)
2755 optimize_imm ();
2757 /* Don't optimize displacement for movabs since it only takes 64bit
2758 displacement. */
2759 if (i.disp_operands
2760 && (flag_code != CODE_64BIT
2761 || strcmp (mnemonic, "movabs") != 0))
2762 optimize_disp ();
2764 /* Next, we find a template that matches the given insn,
2765 making sure the overlap of the given operands types is consistent
2766 with the template operand types. */
2768 if (!(t = match_template ()))
2769 return;
2771 if (sse_check != sse_check_none
2772 && !i.tm.opcode_modifier.noavx
2773 && (i.tm.cpu_flags.bitfield.cpusse
2774 || i.tm.cpu_flags.bitfield.cpusse2
2775 || i.tm.cpu_flags.bitfield.cpusse3
2776 || i.tm.cpu_flags.bitfield.cpussse3
2777 || i.tm.cpu_flags.bitfield.cpusse4_1
2778 || i.tm.cpu_flags.bitfield.cpusse4_2))
2780 (sse_check == sse_check_warning
2781 ? as_warn
2782 : as_bad) (_("SSE instruction `%s' is used"), i.tm.name);
2785 /* Zap movzx and movsx suffix. The suffix has been set from
2786 "word ptr" or "byte ptr" on the source operand in Intel syntax
2787 or extracted from mnemonic in AT&T syntax. But we'll use
2788 the destination register to choose the suffix for encoding. */
2789 if ((i.tm.base_opcode & ~9) == 0x0fb6)
2791 /* In Intel syntax, there must be a suffix. In AT&T syntax, if
2792 there is no suffix, the default will be byte extension. */
2793 if (i.reg_operands != 2
2794 && !i.suffix
2795 && intel_syntax)
2796 as_bad (_("ambiguous operand size for `%s'"), i.tm.name);
2798 i.suffix = 0;
2801 if (i.tm.opcode_modifier.fwait)
2802 if (!add_prefix (FWAIT_OPCODE))
2803 return;
2805 /* Check string instruction segment overrides. */
2806 if (i.tm.opcode_modifier.isstring && i.mem_operands != 0)
2808 if (!check_string ())
2809 return;
2810 i.disp_operands = 0;
2813 if (!process_suffix ())
2814 return;
2816 /* Make still unresolved immediate matches conform to size of immediate
2817 given in i.suffix. */
2818 if (!finalize_imm ())
2819 return;
2821 if (i.types[0].bitfield.imm1)
2822 i.imm_operands = 0; /* kludge for shift insns. */
2824 for (j = 0; j < i.operands; j++)
2825 if (i.types[j].bitfield.inoutportreg
2826 || i.types[j].bitfield.shiftcount
2827 || i.types[j].bitfield.acc
2828 || i.types[j].bitfield.floatacc)
2829 i.reg_operands--;
2831 /* ImmExt should be processed after SSE2AVX. */
2832 if (!i.tm.opcode_modifier.sse2avx
2833 && i.tm.opcode_modifier.immext)
2834 process_immext ();
2836 /* For insns with operands there are more diddles to do to the opcode. */
2837 if (i.operands)
2839 if (!process_operands ())
2840 return;
2842 else if (!quiet_warnings && i.tm.opcode_modifier.ugh)
2844 /* UnixWare fsub no args is alias for fsubp, fadd -> faddp, etc. */
2845 as_warn (_("translating to `%sp'"), i.tm.name);
2848 if (i.tm.opcode_modifier.vex)
2849 build_vex_prefix (t);
2851 /* Handle conversion of 'int $3' --> special int3 insn. */
2852 if (i.tm.base_opcode == INT_OPCODE && i.op[0].imms->X_add_number == 3)
2854 i.tm.base_opcode = INT3_OPCODE;
2855 i.imm_operands = 0;
2858 if ((i.tm.opcode_modifier.jump
2859 || i.tm.opcode_modifier.jumpbyte
2860 || i.tm.opcode_modifier.jumpdword)
2861 && i.op[0].disps->X_op == O_constant)
2863 /* Convert "jmp constant" (and "call constant") to a jump (call) to
2864 the absolute address given by the constant. Since ix86 jumps and
2865 calls are pc relative, we need to generate a reloc. */
2866 i.op[0].disps->X_add_symbol = &abs_symbol;
2867 i.op[0].disps->X_op = O_symbol;
2870 if (i.tm.opcode_modifier.rex64)
2871 i.rex |= REX_W;
2873 /* For 8 bit registers we need an empty rex prefix. Also if the
2874 instruction already has a prefix, we need to convert old
2875 registers to new ones. */
2877 if ((i.types[0].bitfield.reg8
2878 && (i.op[0].regs->reg_flags & RegRex64) != 0)
2879 || (i.types[1].bitfield.reg8
2880 && (i.op[1].regs->reg_flags & RegRex64) != 0)
2881 || ((i.types[0].bitfield.reg8
2882 || i.types[1].bitfield.reg8)
2883 && i.rex != 0))
2885 int x;
2887 i.rex |= REX_OPCODE;
2888 for (x = 0; x < 2; x++)
2890 /* Look for 8 bit operand that uses old registers. */
2891 if (i.types[x].bitfield.reg8
2892 && (i.op[x].regs->reg_flags & RegRex64) == 0)
2894 /* In case it is "hi" register, give up. */
2895 if (i.op[x].regs->reg_num > 3)
2896 as_bad (_("can't encode register '%s%s' in an "
2897 "instruction requiring REX prefix."),
2898 register_prefix, i.op[x].regs->reg_name);
2900 /* Otherwise it is equivalent to the extended register.
2901 Since the encoding doesn't change this is merely
2902 cosmetic cleanup for debug output. */
2904 i.op[x].regs = i.op[x].regs + 8;
2909 if (i.rex != 0)
2910 add_prefix (REX_OPCODE | i.rex);
2912 /* We are ready to output the insn. */
2913 output_insn ();
2916 static char *
2917 parse_insn (char *line, char *mnemonic)
2919 char *l = line;
2920 char *token_start = l;
2921 char *mnem_p;
2922 int supported;
2923 const template *t;
2924 char *dot_p = NULL;
2926 /* Non-zero if we found a prefix only acceptable with string insns. */
2927 const char *expecting_string_instruction = NULL;
2929 while (1)
2931 mnem_p = mnemonic;
2932 while ((*mnem_p = mnemonic_chars[(unsigned char) *l]) != 0)
2934 if (*mnem_p == '.')
2935 dot_p = mnem_p;
2936 mnem_p++;
2937 if (mnem_p >= mnemonic + MAX_MNEM_SIZE)
2939 as_bad (_("no such instruction: `%s'"), token_start);
2940 return NULL;
2942 l++;
2944 if (!is_space_char (*l)
2945 && *l != END_OF_INSN
2946 && (intel_syntax
2947 || (*l != PREFIX_SEPARATOR
2948 && *l != ',')))
2950 as_bad (_("invalid character %s in mnemonic"),
2951 output_invalid (*l));
2952 return NULL;
2954 if (token_start == l)
2956 if (!intel_syntax && *l == PREFIX_SEPARATOR)
2957 as_bad (_("expecting prefix; got nothing"));
2958 else
2959 as_bad (_("expecting mnemonic; got nothing"));
2960 return NULL;
2963 /* Look up instruction (or prefix) via hash table. */
2964 current_templates = hash_find (op_hash, mnemonic);
2966 if (*l != END_OF_INSN
2967 && (!is_space_char (*l) || l[1] != END_OF_INSN)
2968 && current_templates
2969 && current_templates->start->opcode_modifier.isprefix)
2971 if (!cpu_flags_check_cpu64 (current_templates->start->cpu_flags))
2973 as_bad ((flag_code != CODE_64BIT
2974 ? _("`%s' is only supported in 64-bit mode")
2975 : _("`%s' is not supported in 64-bit mode")),
2976 current_templates->start->name);
2977 return NULL;
2979 /* If we are in 16-bit mode, do not allow addr16 or data16.
2980 Similarly, in 32-bit mode, do not allow addr32 or data32. */
2981 if ((current_templates->start->opcode_modifier.size16
2982 || current_templates->start->opcode_modifier.size32)
2983 && flag_code != CODE_64BIT
2984 && (current_templates->start->opcode_modifier.size32
2985 ^ (flag_code == CODE_16BIT)))
2987 as_bad (_("redundant %s prefix"),
2988 current_templates->start->name);
2989 return NULL;
2991 /* Add prefix, checking for repeated prefixes. */
2992 switch (add_prefix (current_templates->start->base_opcode))
2994 case 0:
2995 return NULL;
2996 case 2:
2997 expecting_string_instruction = current_templates->start->name;
2998 break;
3000 /* Skip past PREFIX_SEPARATOR and reset token_start. */
3001 token_start = ++l;
3003 else
3004 break;
3007 if (!current_templates)
3009 /* Check if we should swap operand in encoding. */
3010 if (mnem_p - 2 == dot_p && dot_p[1] == 's')
3011 i.swap_operand = 1;
3012 else
3013 goto check_suffix;
3014 mnem_p = dot_p;
3015 *dot_p = '\0';
3016 current_templates = hash_find (op_hash, mnemonic);
3019 if (!current_templates)
3021 check_suffix:
3022 /* See if we can get a match by trimming off a suffix. */
3023 switch (mnem_p[-1])
3025 case WORD_MNEM_SUFFIX:
3026 if (intel_syntax && (intel_float_operand (mnemonic) & 2))
3027 i.suffix = SHORT_MNEM_SUFFIX;
3028 else
3029 case BYTE_MNEM_SUFFIX:
3030 case QWORD_MNEM_SUFFIX:
3031 i.suffix = mnem_p[-1];
3032 mnem_p[-1] = '\0';
3033 current_templates = hash_find (op_hash, mnemonic);
3034 break;
3035 case SHORT_MNEM_SUFFIX:
3036 case LONG_MNEM_SUFFIX:
3037 if (!intel_syntax)
3039 i.suffix = mnem_p[-1];
3040 mnem_p[-1] = '\0';
3041 current_templates = hash_find (op_hash, mnemonic);
3043 break;
3045 /* Intel Syntax. */
3046 case 'd':
3047 if (intel_syntax)
3049 if (intel_float_operand (mnemonic) == 1)
3050 i.suffix = SHORT_MNEM_SUFFIX;
3051 else
3052 i.suffix = LONG_MNEM_SUFFIX;
3053 mnem_p[-1] = '\0';
3054 current_templates = hash_find (op_hash, mnemonic);
3056 break;
3058 if (!current_templates)
3060 as_bad (_("no such instruction: `%s'"), token_start);
3061 return NULL;
3065 if (current_templates->start->opcode_modifier.jump
3066 || current_templates->start->opcode_modifier.jumpbyte)
3068 /* Check for a branch hint. We allow ",pt" and ",pn" for
3069 predict taken and predict not taken respectively.
3070 I'm not sure that branch hints actually do anything on loop
3071 and jcxz insns (JumpByte) for current Pentium4 chips. They
3072 may work in the future and it doesn't hurt to accept them
3073 now. */
3074 if (l[0] == ',' && l[1] == 'p')
3076 if (l[2] == 't')
3078 if (!add_prefix (DS_PREFIX_OPCODE))
3079 return NULL;
3080 l += 3;
3082 else if (l[2] == 'n')
3084 if (!add_prefix (CS_PREFIX_OPCODE))
3085 return NULL;
3086 l += 3;
3090 /* Any other comma loses. */
3091 if (*l == ',')
3093 as_bad (_("invalid character %s in mnemonic"),
3094 output_invalid (*l));
3095 return NULL;
3098 /* Check if instruction is supported on specified architecture. */
3099 supported = 0;
3100 for (t = current_templates->start; t < current_templates->end; ++t)
3102 supported |= cpu_flags_match (t);
3103 if (supported == CPU_FLAGS_PERFECT_MATCH)
3104 goto skip;
3107 if (!(supported & CPU_FLAGS_64BIT_MATCH))
3109 as_bad (flag_code == CODE_64BIT
3110 ? _("`%s' is not supported in 64-bit mode")
3111 : _("`%s' is only supported in 64-bit mode"),
3112 current_templates->start->name);
3113 return NULL;
3115 if (supported != CPU_FLAGS_PERFECT_MATCH)
3117 as_bad (_("`%s' is not supported on `%s%s'"),
3118 current_templates->start->name,
3119 cpu_arch_name ? cpu_arch_name : default_arch,
3120 cpu_sub_arch_name ? cpu_sub_arch_name : "");
3121 return NULL;
3124 skip:
3125 if (!cpu_arch_flags.bitfield.cpui386
3126 && (flag_code != CODE_16BIT))
3128 as_warn (_("use .code16 to ensure correct addressing mode"));
3131 /* Check for rep/repne without a string instruction. */
3132 if (expecting_string_instruction)
3134 static templates override;
3136 for (t = current_templates->start; t < current_templates->end; ++t)
3137 if (t->opcode_modifier.isstring)
3138 break;
3139 if (t >= current_templates->end)
3141 as_bad (_("expecting string instruction after `%s'"),
3142 expecting_string_instruction);
3143 return NULL;
3145 for (override.start = t; t < current_templates->end; ++t)
3146 if (!t->opcode_modifier.isstring)
3147 break;
3148 override.end = t;
3149 current_templates = &override;
3152 return l;
3155 static char *
3156 parse_operands (char *l, const char *mnemonic)
3158 char *token_start;
3160 /* 1 if operand is pending after ','. */
3161 unsigned int expecting_operand = 0;
3163 /* Non-zero if operand parens not balanced. */
3164 unsigned int paren_not_balanced;
3166 while (*l != END_OF_INSN)
3168 /* Skip optional white space before operand. */
3169 if (is_space_char (*l))
3170 ++l;
3171 if (!is_operand_char (*l) && *l != END_OF_INSN)
3173 as_bad (_("invalid character %s before operand %d"),
3174 output_invalid (*l),
3175 i.operands + 1);
3176 return NULL;
3178 token_start = l; /* after white space */
3179 paren_not_balanced = 0;
3180 while (paren_not_balanced || *l != ',')
3182 if (*l == END_OF_INSN)
3184 if (paren_not_balanced)
3186 if (!intel_syntax)
3187 as_bad (_("unbalanced parenthesis in operand %d."),
3188 i.operands + 1);
3189 else
3190 as_bad (_("unbalanced brackets in operand %d."),
3191 i.operands + 1);
3192 return NULL;
3194 else
3195 break; /* we are done */
3197 else if (!is_operand_char (*l) && !is_space_char (*l))
3199 as_bad (_("invalid character %s in operand %d"),
3200 output_invalid (*l),
3201 i.operands + 1);
3202 return NULL;
3204 if (!intel_syntax)
3206 if (*l == '(')
3207 ++paren_not_balanced;
3208 if (*l == ')')
3209 --paren_not_balanced;
3211 else
3213 if (*l == '[')
3214 ++paren_not_balanced;
3215 if (*l == ']')
3216 --paren_not_balanced;
3218 l++;
3220 if (l != token_start)
3221 { /* Yes, we've read in another operand. */
3222 unsigned int operand_ok;
3223 this_operand = i.operands++;
3224 i.types[this_operand].bitfield.unspecified = 1;
3225 if (i.operands > MAX_OPERANDS)
3227 as_bad (_("spurious operands; (%d operands/instruction max)"),
3228 MAX_OPERANDS);
3229 return NULL;
3231 /* Now parse operand adding info to 'i' as we go along. */
3232 END_STRING_AND_SAVE (l);
3234 if (intel_syntax)
3235 operand_ok =
3236 i386_intel_operand (token_start,
3237 intel_float_operand (mnemonic));
3238 else
3239 operand_ok = i386_att_operand (token_start);
3241 RESTORE_END_STRING (l);
3242 if (!operand_ok)
3243 return NULL;
3245 else
3247 if (expecting_operand)
3249 expecting_operand_after_comma:
3250 as_bad (_("expecting operand after ','; got nothing"));
3251 return NULL;
3253 if (*l == ',')
3255 as_bad (_("expecting operand before ','; got nothing"));
3256 return NULL;
3260 /* Now *l must be either ',' or END_OF_INSN. */
3261 if (*l == ',')
3263 if (*++l == END_OF_INSN)
3265 /* Just skip it, if it's \n complain. */
3266 goto expecting_operand_after_comma;
3268 expecting_operand = 1;
3271 return l;
3274 static void
3275 swap_2_operands (int xchg1, int xchg2)
3277 union i386_op temp_op;
3278 i386_operand_type temp_type;
3279 enum bfd_reloc_code_real temp_reloc;
3281 temp_type = i.types[xchg2];
3282 i.types[xchg2] = i.types[xchg1];
3283 i.types[xchg1] = temp_type;
3284 temp_op = i.op[xchg2];
3285 i.op[xchg2] = i.op[xchg1];
3286 i.op[xchg1] = temp_op;
3287 temp_reloc = i.reloc[xchg2];
3288 i.reloc[xchg2] = i.reloc[xchg1];
3289 i.reloc[xchg1] = temp_reloc;
3292 static void
3293 swap_operands (void)
3295 switch (i.operands)
3297 case 5:
3298 case 4:
3299 swap_2_operands (1, i.operands - 2);
3300 case 3:
3301 case 2:
3302 swap_2_operands (0, i.operands - 1);
3303 break;
3304 default:
3305 abort ();
3308 if (i.mem_operands == 2)
3310 const seg_entry *temp_seg;
3311 temp_seg = i.seg[0];
3312 i.seg[0] = i.seg[1];
3313 i.seg[1] = temp_seg;
3317 /* Try to ensure constant immediates are represented in the smallest
3318 opcode possible. */
3319 static void
3320 optimize_imm (void)
3322 char guess_suffix = 0;
3323 int op;
3325 if (i.suffix)
3326 guess_suffix = i.suffix;
3327 else if (i.reg_operands)
3329 /* Figure out a suffix from the last register operand specified.
3330 We can't do this properly yet, ie. excluding InOutPortReg,
3331 but the following works for instructions with immediates.
3332 In any case, we can't set i.suffix yet. */
3333 for (op = i.operands; --op >= 0;)
3334 if (i.types[op].bitfield.reg8)
3336 guess_suffix = BYTE_MNEM_SUFFIX;
3337 break;
3339 else if (i.types[op].bitfield.reg16)
3341 guess_suffix = WORD_MNEM_SUFFIX;
3342 break;
3344 else if (i.types[op].bitfield.reg32)
3346 guess_suffix = LONG_MNEM_SUFFIX;
3347 break;
3349 else if (i.types[op].bitfield.reg64)
3351 guess_suffix = QWORD_MNEM_SUFFIX;
3352 break;
3355 else if ((flag_code == CODE_16BIT) ^ (i.prefix[DATA_PREFIX] != 0))
3356 guess_suffix = WORD_MNEM_SUFFIX;
3358 for (op = i.operands; --op >= 0;)
3359 if (operand_type_check (i.types[op], imm))
3361 switch (i.op[op].imms->X_op)
3363 case O_constant:
3364 /* If a suffix is given, this operand may be shortened. */
3365 switch (guess_suffix)
3367 case LONG_MNEM_SUFFIX:
3368 i.types[op].bitfield.imm32 = 1;
3369 i.types[op].bitfield.imm64 = 1;
3370 break;
3371 case WORD_MNEM_SUFFIX:
3372 i.types[op].bitfield.imm16 = 1;
3373 i.types[op].bitfield.imm32 = 1;
3374 i.types[op].bitfield.imm32s = 1;
3375 i.types[op].bitfield.imm64 = 1;
3376 break;
3377 case BYTE_MNEM_SUFFIX:
3378 i.types[op].bitfield.imm8 = 1;
3379 i.types[op].bitfield.imm8s = 1;
3380 i.types[op].bitfield.imm16 = 1;
3381 i.types[op].bitfield.imm32 = 1;
3382 i.types[op].bitfield.imm32s = 1;
3383 i.types[op].bitfield.imm64 = 1;
3384 break;
3387 /* If this operand is at most 16 bits, convert it
3388 to a signed 16 bit number before trying to see
3389 whether it will fit in an even smaller size.
3390 This allows a 16-bit operand such as $0xffe0 to
3391 be recognised as within Imm8S range. */
3392 if ((i.types[op].bitfield.imm16)
3393 && (i.op[op].imms->X_add_number & ~(offsetT) 0xffff) == 0)
3395 i.op[op].imms->X_add_number =
3396 (((i.op[op].imms->X_add_number & 0xffff) ^ 0x8000) - 0x8000);
3398 if ((i.types[op].bitfield.imm32)
3399 && ((i.op[op].imms->X_add_number & ~(((offsetT) 2 << 31) - 1))
3400 == 0))
3402 i.op[op].imms->X_add_number = ((i.op[op].imms->X_add_number
3403 ^ ((offsetT) 1 << 31))
3404 - ((offsetT) 1 << 31));
3406 i.types[op]
3407 = operand_type_or (i.types[op],
3408 smallest_imm_type (i.op[op].imms->X_add_number));
3410 /* We must avoid matching of Imm32 templates when 64bit
3411 only immediate is available. */
3412 if (guess_suffix == QWORD_MNEM_SUFFIX)
3413 i.types[op].bitfield.imm32 = 0;
3414 break;
3416 case O_absent:
3417 case O_register:
3418 abort ();
3420 /* Symbols and expressions. */
3421 default:
3422 /* Convert symbolic operand to proper sizes for matching, but don't
3423 prevent matching a set of insns that only supports sizes other
3424 than those matching the insn suffix. */
3426 i386_operand_type mask, allowed;
3427 const template *t;
3429 operand_type_set (&mask, 0);
3430 operand_type_set (&allowed, 0);
3432 for (t = current_templates->start;
3433 t < current_templates->end;
3434 ++t)
3435 allowed = operand_type_or (allowed,
3436 t->operand_types[op]);
3437 switch (guess_suffix)
3439 case QWORD_MNEM_SUFFIX:
3440 mask.bitfield.imm64 = 1;
3441 mask.bitfield.imm32s = 1;
3442 break;
3443 case LONG_MNEM_SUFFIX:
3444 mask.bitfield.imm32 = 1;
3445 break;
3446 case WORD_MNEM_SUFFIX:
3447 mask.bitfield.imm16 = 1;
3448 break;
3449 case BYTE_MNEM_SUFFIX:
3450 mask.bitfield.imm8 = 1;
3451 break;
3452 default:
3453 break;
3455 allowed = operand_type_and (mask, allowed);
3456 if (!operand_type_all_zero (&allowed))
3457 i.types[op] = operand_type_and (i.types[op], mask);
3459 break;
3464 /* Try to use the smallest displacement type too. */
3465 static void
3466 optimize_disp (void)
3468 int op;
3470 for (op = i.operands; --op >= 0;)
3471 if (operand_type_check (i.types[op], disp))
3473 if (i.op[op].disps->X_op == O_constant)
3475 offsetT disp = i.op[op].disps->X_add_number;
3477 if (i.types[op].bitfield.disp16
3478 && (disp & ~(offsetT) 0xffff) == 0)
3480 /* If this operand is at most 16 bits, convert
3481 to a signed 16 bit number and don't use 64bit
3482 displacement. */
3483 disp = (((disp & 0xffff) ^ 0x8000) - 0x8000);
3484 i.types[op].bitfield.disp64 = 0;
3486 if (i.types[op].bitfield.disp32
3487 && (disp & ~(((offsetT) 2 << 31) - 1)) == 0)
3489 /* If this operand is at most 32 bits, convert
3490 to a signed 32 bit number and don't use 64bit
3491 displacement. */
3492 disp &= (((offsetT) 2 << 31) - 1);
3493 disp = (disp ^ ((offsetT) 1 << 31)) - ((addressT) 1 << 31);
3494 i.types[op].bitfield.disp64 = 0;
3496 if (!disp && i.types[op].bitfield.baseindex)
3498 i.types[op].bitfield.disp8 = 0;
3499 i.types[op].bitfield.disp16 = 0;
3500 i.types[op].bitfield.disp32 = 0;
3501 i.types[op].bitfield.disp32s = 0;
3502 i.types[op].bitfield.disp64 = 0;
3503 i.op[op].disps = 0;
3504 i.disp_operands--;
3506 else if (flag_code == CODE_64BIT)
3508 if (fits_in_signed_long (disp))
3510 i.types[op].bitfield.disp64 = 0;
3511 i.types[op].bitfield.disp32s = 1;
3513 if (fits_in_unsigned_long (disp))
3514 i.types[op].bitfield.disp32 = 1;
3516 if ((i.types[op].bitfield.disp32
3517 || i.types[op].bitfield.disp32s
3518 || i.types[op].bitfield.disp16)
3519 && fits_in_signed_byte (disp))
3520 i.types[op].bitfield.disp8 = 1;
3522 else if (i.reloc[op] == BFD_RELOC_386_TLS_DESC_CALL
3523 || i.reloc[op] == BFD_RELOC_X86_64_TLSDESC_CALL)
3525 fix_new_exp (frag_now, frag_more (0) - frag_now->fr_literal, 0,
3526 i.op[op].disps, 0, i.reloc[op]);
3527 i.types[op].bitfield.disp8 = 0;
3528 i.types[op].bitfield.disp16 = 0;
3529 i.types[op].bitfield.disp32 = 0;
3530 i.types[op].bitfield.disp32s = 0;
3531 i.types[op].bitfield.disp64 = 0;
3533 else
3534 /* We only support 64bit displacement on constants. */
3535 i.types[op].bitfield.disp64 = 0;
3539 static const template *
3540 match_template (void)
3542 /* Points to template once we've found it. */
3543 const template *t;
3544 i386_operand_type overlap0, overlap1, overlap2, overlap3;
3545 i386_operand_type overlap4;
3546 unsigned int found_reverse_match;
3547 i386_opcode_modifier suffix_check;
3548 i386_operand_type operand_types [MAX_OPERANDS];
3549 int addr_prefix_disp;
3550 unsigned int j;
3551 unsigned int found_cpu_match;
3552 unsigned int check_register;
3554 #if MAX_OPERANDS != 5
3555 # error "MAX_OPERANDS must be 5."
3556 #endif
3558 found_reverse_match = 0;
3559 addr_prefix_disp = -1;
3561 memset (&suffix_check, 0, sizeof (suffix_check));
3562 if (i.suffix == BYTE_MNEM_SUFFIX)
3563 suffix_check.no_bsuf = 1;
3564 else if (i.suffix == WORD_MNEM_SUFFIX)
3565 suffix_check.no_wsuf = 1;
3566 else if (i.suffix == SHORT_MNEM_SUFFIX)
3567 suffix_check.no_ssuf = 1;
3568 else if (i.suffix == LONG_MNEM_SUFFIX)
3569 suffix_check.no_lsuf = 1;
3570 else if (i.suffix == QWORD_MNEM_SUFFIX)
3571 suffix_check.no_qsuf = 1;
3572 else if (i.suffix == LONG_DOUBLE_MNEM_SUFFIX)
3573 suffix_check.no_ldsuf = 1;
3575 for (t = current_templates->start; t < current_templates->end; t++)
3577 addr_prefix_disp = -1;
3579 /* Must have right number of operands. */
3580 if (i.operands != t->operands)
3581 continue;
3583 /* Check processor support. */
3584 found_cpu_match = (cpu_flags_match (t)
3585 == CPU_FLAGS_PERFECT_MATCH);
3586 if (!found_cpu_match)
3587 continue;
3589 /* Check old gcc support. */
3590 if (!old_gcc && t->opcode_modifier.oldgcc)
3591 continue;
3593 /* Check AT&T mnemonic. */
3594 if (intel_mnemonic && t->opcode_modifier.attmnemonic)
3595 continue;
3597 /* Check AT&T syntax Intel syntax. */
3598 if ((intel_syntax && t->opcode_modifier.attsyntax)
3599 || (!intel_syntax && t->opcode_modifier.intelsyntax))
3600 continue;
3602 /* Check the suffix, except for some instructions in intel mode. */
3603 if ((!intel_syntax || !t->opcode_modifier.ignoresize)
3604 && ((t->opcode_modifier.no_bsuf && suffix_check.no_bsuf)
3605 || (t->opcode_modifier.no_wsuf && suffix_check.no_wsuf)
3606 || (t->opcode_modifier.no_lsuf && suffix_check.no_lsuf)
3607 || (t->opcode_modifier.no_ssuf && suffix_check.no_ssuf)
3608 || (t->opcode_modifier.no_qsuf && suffix_check.no_qsuf)
3609 || (t->opcode_modifier.no_ldsuf && suffix_check.no_ldsuf)))
3610 continue;
3612 if (!operand_size_match (t))
3613 continue;
3615 for (j = 0; j < MAX_OPERANDS; j++)
3616 operand_types[j] = t->operand_types[j];
3618 /* In general, don't allow 64-bit operands in 32-bit mode. */
3619 if (i.suffix == QWORD_MNEM_SUFFIX
3620 && flag_code != CODE_64BIT
3621 && (intel_syntax
3622 ? (!t->opcode_modifier.ignoresize
3623 && !intel_float_operand (t->name))
3624 : intel_float_operand (t->name) != 2)
3625 && ((!operand_types[0].bitfield.regmmx
3626 && !operand_types[0].bitfield.regxmm
3627 && !operand_types[0].bitfield.regymm)
3628 || (!operand_types[t->operands > 1].bitfield.regmmx
3629 && !!operand_types[t->operands > 1].bitfield.regxmm
3630 && !!operand_types[t->operands > 1].bitfield.regymm))
3631 && (t->base_opcode != 0x0fc7
3632 || t->extension_opcode != 1 /* cmpxchg8b */))
3633 continue;
3635 /* In general, don't allow 32-bit operands on pre-386. */
3636 else if (i.suffix == LONG_MNEM_SUFFIX
3637 && !cpu_arch_flags.bitfield.cpui386
3638 && (intel_syntax
3639 ? (!t->opcode_modifier.ignoresize
3640 && !intel_float_operand (t->name))
3641 : intel_float_operand (t->name) != 2)
3642 && ((!operand_types[0].bitfield.regmmx
3643 && !operand_types[0].bitfield.regxmm)
3644 || (!operand_types[t->operands > 1].bitfield.regmmx
3645 && !!operand_types[t->operands > 1].bitfield.regxmm)))
3646 continue;
3648 /* Do not verify operands when there are none. */
3649 else
3651 if (!t->operands)
3652 /* We've found a match; break out of loop. */
3653 break;
3656 /* Address size prefix will turn Disp64/Disp32/Disp16 operand
3657 into Disp32/Disp16/Disp32 operand. */
3658 if (i.prefix[ADDR_PREFIX] != 0)
3660 /* There should be only one Disp operand. */
3661 switch (flag_code)
3663 case CODE_16BIT:
3664 for (j = 0; j < MAX_OPERANDS; j++)
3666 if (operand_types[j].bitfield.disp16)
3668 addr_prefix_disp = j;
3669 operand_types[j].bitfield.disp32 = 1;
3670 operand_types[j].bitfield.disp16 = 0;
3671 break;
3674 break;
3675 case CODE_32BIT:
3676 for (j = 0; j < MAX_OPERANDS; j++)
3678 if (operand_types[j].bitfield.disp32)
3680 addr_prefix_disp = j;
3681 operand_types[j].bitfield.disp32 = 0;
3682 operand_types[j].bitfield.disp16 = 1;
3683 break;
3686 break;
3687 case CODE_64BIT:
3688 for (j = 0; j < MAX_OPERANDS; j++)
3690 if (operand_types[j].bitfield.disp64)
3692 addr_prefix_disp = j;
3693 operand_types[j].bitfield.disp64 = 0;
3694 operand_types[j].bitfield.disp32 = 1;
3695 break;
3698 break;
3702 /* We check register size only if size of operands can be
3703 encoded the canonical way. */
3704 check_register = t->opcode_modifier.w;
3705 overlap0 = operand_type_and (i.types[0], operand_types[0]);
3706 switch (t->operands)
3708 case 1:
3709 if (!operand_type_match (overlap0, i.types[0]))
3710 continue;
3711 break;
3712 case 2:
3713 /* xchg %eax, %eax is a special case. It is an aliase for nop
3714 only in 32bit mode and we can use opcode 0x90. In 64bit
3715 mode, we can't use 0x90 for xchg %eax, %eax since it should
3716 zero-extend %eax to %rax. */
3717 if (flag_code == CODE_64BIT
3718 && t->base_opcode == 0x90
3719 && operand_type_equal (&i.types [0], &acc32)
3720 && operand_type_equal (&i.types [1], &acc32))
3721 continue;
3722 if (i.swap_operand)
3724 /* If we swap operand in encoding, we either match
3725 the next one or reverse direction of operands. */
3726 if (t->opcode_modifier.s)
3727 continue;
3728 else if (t->opcode_modifier.d)
3729 goto check_reverse;
3732 case 3:
3733 /* If we swap operand in encoding, we match the next one. */
3734 if (i.swap_operand && t->opcode_modifier.s)
3735 continue;
3736 case 4:
3737 case 5:
3738 overlap1 = operand_type_and (i.types[1], operand_types[1]);
3739 if (!operand_type_match (overlap0, i.types[0])
3740 || !operand_type_match (overlap1, i.types[1])
3741 || (check_register
3742 && !operand_type_register_match (overlap0, i.types[0],
3743 operand_types[0],
3744 overlap1, i.types[1],
3745 operand_types[1])))
3747 /* Check if other direction is valid ... */
3748 if (!t->opcode_modifier.d && !t->opcode_modifier.floatd)
3749 continue;
3751 check_reverse:
3752 /* Try reversing direction of operands. */
3753 overlap0 = operand_type_and (i.types[0], operand_types[1]);
3754 overlap1 = operand_type_and (i.types[1], operand_types[0]);
3755 if (!operand_type_match (overlap0, i.types[0])
3756 || !operand_type_match (overlap1, i.types[1])
3757 || (check_register
3758 && !operand_type_register_match (overlap0,
3759 i.types[0],
3760 operand_types[1],
3761 overlap1,
3762 i.types[1],
3763 operand_types[0])))
3765 /* Does not match either direction. */
3766 continue;
3768 /* found_reverse_match holds which of D or FloatDR
3769 we've found. */
3770 if (t->opcode_modifier.d)
3771 found_reverse_match = Opcode_D;
3772 else if (t->opcode_modifier.floatd)
3773 found_reverse_match = Opcode_FloatD;
3774 else
3775 found_reverse_match = 0;
3776 if (t->opcode_modifier.floatr)
3777 found_reverse_match |= Opcode_FloatR;
3779 else
3781 /* Found a forward 2 operand match here. */
3782 switch (t->operands)
3784 case 5:
3785 overlap4 = operand_type_and (i.types[4],
3786 operand_types[4]);
3787 case 4:
3788 overlap3 = operand_type_and (i.types[3],
3789 operand_types[3]);
3790 case 3:
3791 overlap2 = operand_type_and (i.types[2],
3792 operand_types[2]);
3793 break;
3796 switch (t->operands)
3798 case 5:
3799 if (!operand_type_match (overlap4, i.types[4])
3800 || !operand_type_register_match (overlap3,
3801 i.types[3],
3802 operand_types[3],
3803 overlap4,
3804 i.types[4],
3805 operand_types[4]))
3806 continue;
3807 case 4:
3808 if (!operand_type_match (overlap3, i.types[3])
3809 || (check_register
3810 && !operand_type_register_match (overlap2,
3811 i.types[2],
3812 operand_types[2],
3813 overlap3,
3814 i.types[3],
3815 operand_types[3])))
3816 continue;
3817 case 3:
3818 /* Here we make use of the fact that there are no
3819 reverse match 3 operand instructions, and all 3
3820 operand instructions only need to be checked for
3821 register consistency between operands 2 and 3. */
3822 if (!operand_type_match (overlap2, i.types[2])
3823 || (check_register
3824 && !operand_type_register_match (overlap1,
3825 i.types[1],
3826 operand_types[1],
3827 overlap2,
3828 i.types[2],
3829 operand_types[2])))
3830 continue;
3831 break;
3834 /* Found either forward/reverse 2, 3 or 4 operand match here:
3835 slip through to break. */
3837 if (!found_cpu_match)
3839 found_reverse_match = 0;
3840 continue;
3843 /* We've found a match; break out of loop. */
3844 break;
3847 if (t == current_templates->end)
3849 /* We found no match. */
3850 if (intel_syntax)
3851 as_bad (_("ambiguous operand size or operands invalid for `%s'"),
3852 current_templates->start->name);
3853 else
3854 as_bad (_("suffix or operands invalid for `%s'"),
3855 current_templates->start->name);
3856 return NULL;
3859 if (!quiet_warnings)
3861 if (!intel_syntax
3862 && (i.types[0].bitfield.jumpabsolute
3863 != operand_types[0].bitfield.jumpabsolute))
3865 as_warn (_("indirect %s without `*'"), t->name);
3868 if (t->opcode_modifier.isprefix
3869 && t->opcode_modifier.ignoresize)
3871 /* Warn them that a data or address size prefix doesn't
3872 affect assembly of the next line of code. */
3873 as_warn (_("stand-alone `%s' prefix"), t->name);
3877 /* Copy the template we found. */
3878 i.tm = *t;
3880 if (addr_prefix_disp != -1)
3881 i.tm.operand_types[addr_prefix_disp]
3882 = operand_types[addr_prefix_disp];
3884 if (found_reverse_match)
3886 /* If we found a reverse match we must alter the opcode
3887 direction bit. found_reverse_match holds bits to change
3888 (different for int & float insns). */
3890 i.tm.base_opcode ^= found_reverse_match;
3892 i.tm.operand_types[0] = operand_types[1];
3893 i.tm.operand_types[1] = operand_types[0];
3896 return t;
3899 static int
3900 check_string (void)
3902 int mem_op = operand_type_check (i.types[0], anymem) ? 0 : 1;
3903 if (i.tm.operand_types[mem_op].bitfield.esseg)
3905 if (i.seg[0] != NULL && i.seg[0] != &es)
3907 as_bad (_("`%s' operand %d must use `%ses' segment"),
3908 i.tm.name,
3909 mem_op + 1,
3910 register_prefix);
3911 return 0;
3913 /* There's only ever one segment override allowed per instruction.
3914 This instruction possibly has a legal segment override on the
3915 second operand, so copy the segment to where non-string
3916 instructions store it, allowing common code. */
3917 i.seg[0] = i.seg[1];
3919 else if (i.tm.operand_types[mem_op + 1].bitfield.esseg)
3921 if (i.seg[1] != NULL && i.seg[1] != &es)
3923 as_bad (_("`%s' operand %d must use `%ses' segment"),
3924 i.tm.name,
3925 mem_op + 2,
3926 register_prefix);
3927 return 0;
3930 return 1;
3933 static int
3934 process_suffix (void)
3936 /* If matched instruction specifies an explicit instruction mnemonic
3937 suffix, use it. */
3938 if (i.tm.opcode_modifier.size16)
3939 i.suffix = WORD_MNEM_SUFFIX;
3940 else if (i.tm.opcode_modifier.size32)
3941 i.suffix = LONG_MNEM_SUFFIX;
3942 else if (i.tm.opcode_modifier.size64)
3943 i.suffix = QWORD_MNEM_SUFFIX;
3944 else if (i.reg_operands)
3946 /* If there's no instruction mnemonic suffix we try to invent one
3947 based on register operands. */
3948 if (!i.suffix)
3950 /* We take i.suffix from the last register operand specified,
3951 Destination register type is more significant than source
3952 register type. crc32 in SSE4.2 prefers source register
3953 type. */
3954 if (i.tm.base_opcode == 0xf20f38f1)
3956 if (i.types[0].bitfield.reg16)
3957 i.suffix = WORD_MNEM_SUFFIX;
3958 else if (i.types[0].bitfield.reg32)
3959 i.suffix = LONG_MNEM_SUFFIX;
3960 else if (i.types[0].bitfield.reg64)
3961 i.suffix = QWORD_MNEM_SUFFIX;
3963 else if (i.tm.base_opcode == 0xf20f38f0)
3965 if (i.types[0].bitfield.reg8)
3966 i.suffix = BYTE_MNEM_SUFFIX;
3969 if (!i.suffix)
3971 int op;
3973 if (i.tm.base_opcode == 0xf20f38f1
3974 || i.tm.base_opcode == 0xf20f38f0)
3976 /* We have to know the operand size for crc32. */
3977 as_bad (_("ambiguous memory operand size for `%s`"),
3978 i.tm.name);
3979 return 0;
3982 for (op = i.operands; --op >= 0;)
3983 if (!i.tm.operand_types[op].bitfield.inoutportreg)
3985 if (i.types[op].bitfield.reg8)
3987 i.suffix = BYTE_MNEM_SUFFIX;
3988 break;
3990 else if (i.types[op].bitfield.reg16)
3992 i.suffix = WORD_MNEM_SUFFIX;
3993 break;
3995 else if (i.types[op].bitfield.reg32)
3997 i.suffix = LONG_MNEM_SUFFIX;
3998 break;
4000 else if (i.types[op].bitfield.reg64)
4002 i.suffix = QWORD_MNEM_SUFFIX;
4003 break;
4008 else if (i.suffix == BYTE_MNEM_SUFFIX)
4010 if (!check_byte_reg ())
4011 return 0;
4013 else if (i.suffix == LONG_MNEM_SUFFIX)
4015 if (!check_long_reg ())
4016 return 0;
4018 else if (i.suffix == QWORD_MNEM_SUFFIX)
4020 if (intel_syntax
4021 && i.tm.opcode_modifier.ignoresize
4022 && i.tm.opcode_modifier.no_qsuf)
4023 i.suffix = 0;
4024 else if (!check_qword_reg ())
4025 return 0;
4027 else if (i.suffix == WORD_MNEM_SUFFIX)
4029 if (!check_word_reg ())
4030 return 0;
4032 else if (i.suffix == XMMWORD_MNEM_SUFFIX
4033 || i.suffix == YMMWORD_MNEM_SUFFIX)
4035 /* Skip if the instruction has x/y suffix. match_template
4036 should check if it is a valid suffix. */
4038 else if (intel_syntax && i.tm.opcode_modifier.ignoresize)
4039 /* Do nothing if the instruction is going to ignore the prefix. */
4041 else
4042 abort ();
4044 else if (i.tm.opcode_modifier.defaultsize
4045 && !i.suffix
4046 /* exclude fldenv/frstor/fsave/fstenv */
4047 && i.tm.opcode_modifier.no_ssuf)
4049 i.suffix = stackop_size;
4051 else if (intel_syntax
4052 && !i.suffix
4053 && (i.tm.operand_types[0].bitfield.jumpabsolute
4054 || i.tm.opcode_modifier.jumpbyte
4055 || i.tm.opcode_modifier.jumpintersegment
4056 || (i.tm.base_opcode == 0x0f01 /* [ls][gi]dt */
4057 && i.tm.extension_opcode <= 3)))
4059 switch (flag_code)
4061 case CODE_64BIT:
4062 if (!i.tm.opcode_modifier.no_qsuf)
4064 i.suffix = QWORD_MNEM_SUFFIX;
4065 break;
4067 case CODE_32BIT:
4068 if (!i.tm.opcode_modifier.no_lsuf)
4069 i.suffix = LONG_MNEM_SUFFIX;
4070 break;
4071 case CODE_16BIT:
4072 if (!i.tm.opcode_modifier.no_wsuf)
4073 i.suffix = WORD_MNEM_SUFFIX;
4074 break;
4078 if (!i.suffix)
4080 if (!intel_syntax)
4082 if (i.tm.opcode_modifier.w)
4084 as_bad (_("no instruction mnemonic suffix given and "
4085 "no register operands; can't size instruction"));
4086 return 0;
4089 else
4091 unsigned int suffixes;
4093 suffixes = !i.tm.opcode_modifier.no_bsuf;
4094 if (!i.tm.opcode_modifier.no_wsuf)
4095 suffixes |= 1 << 1;
4096 if (!i.tm.opcode_modifier.no_lsuf)
4097 suffixes |= 1 << 2;
4098 if (!i.tm.opcode_modifier.no_ldsuf)
4099 suffixes |= 1 << 3;
4100 if (!i.tm.opcode_modifier.no_ssuf)
4101 suffixes |= 1 << 4;
4102 if (!i.tm.opcode_modifier.no_qsuf)
4103 suffixes |= 1 << 5;
4105 /* There are more than suffix matches. */
4106 if (i.tm.opcode_modifier.w
4107 || ((suffixes & (suffixes - 1))
4108 && !i.tm.opcode_modifier.defaultsize
4109 && !i.tm.opcode_modifier.ignoresize))
4111 as_bad (_("ambiguous operand size for `%s'"), i.tm.name);
4112 return 0;
4117 /* Change the opcode based on the operand size given by i.suffix;
4118 We don't need to change things for byte insns. */
4120 if (i.suffix
4121 && i.suffix != BYTE_MNEM_SUFFIX
4122 && i.suffix != XMMWORD_MNEM_SUFFIX
4123 && i.suffix != YMMWORD_MNEM_SUFFIX)
4125 /* It's not a byte, select word/dword operation. */
4126 if (i.tm.opcode_modifier.w)
4128 if (i.tm.opcode_modifier.shortform)
4129 i.tm.base_opcode |= 8;
4130 else
4131 i.tm.base_opcode |= 1;
4134 /* Now select between word & dword operations via the operand
4135 size prefix, except for instructions that will ignore this
4136 prefix anyway. */
4137 if (i.tm.opcode_modifier.addrprefixop0)
4139 /* The address size override prefix changes the size of the
4140 first operand. */
4141 if ((flag_code == CODE_32BIT
4142 && i.op->regs[0].reg_type.bitfield.reg16)
4143 || (flag_code != CODE_32BIT
4144 && i.op->regs[0].reg_type.bitfield.reg32))
4145 if (!add_prefix (ADDR_PREFIX_OPCODE))
4146 return 0;
4148 else if (i.suffix != QWORD_MNEM_SUFFIX
4149 && i.suffix != LONG_DOUBLE_MNEM_SUFFIX
4150 && !i.tm.opcode_modifier.ignoresize
4151 && !i.tm.opcode_modifier.floatmf
4152 && ((i.suffix == LONG_MNEM_SUFFIX) == (flag_code == CODE_16BIT)
4153 || (flag_code == CODE_64BIT
4154 && i.tm.opcode_modifier.jumpbyte)))
4156 unsigned int prefix = DATA_PREFIX_OPCODE;
4158 if (i.tm.opcode_modifier.jumpbyte) /* jcxz, loop */
4159 prefix = ADDR_PREFIX_OPCODE;
4161 if (!add_prefix (prefix))
4162 return 0;
4165 /* Set mode64 for an operand. */
4166 if (i.suffix == QWORD_MNEM_SUFFIX
4167 && flag_code == CODE_64BIT
4168 && !i.tm.opcode_modifier.norex64)
4170 /* Special case for xchg %rax,%rax. It is NOP and doesn't
4171 need rex64. cmpxchg8b is also a special case. */
4172 if (! (i.operands == 2
4173 && i.tm.base_opcode == 0x90
4174 && i.tm.extension_opcode == None
4175 && operand_type_equal (&i.types [0], &acc64)
4176 && operand_type_equal (&i.types [1], &acc64))
4177 && ! (i.operands == 1
4178 && i.tm.base_opcode == 0xfc7
4179 && i.tm.extension_opcode == 1
4180 && !operand_type_check (i.types [0], reg)
4181 && operand_type_check (i.types [0], anymem)))
4182 i.rex |= REX_W;
4185 /* Size floating point instruction. */
4186 if (i.suffix == LONG_MNEM_SUFFIX)
4187 if (i.tm.opcode_modifier.floatmf)
4188 i.tm.base_opcode ^= 4;
4191 return 1;
4194 static int
4195 check_byte_reg (void)
4197 int op;
4199 for (op = i.operands; --op >= 0;)
4201 /* If this is an eight bit register, it's OK. If it's the 16 or
4202 32 bit version of an eight bit register, we will just use the
4203 low portion, and that's OK too. */
4204 if (i.types[op].bitfield.reg8)
4205 continue;
4207 /* Don't generate this warning if not needed. */
4208 if (intel_syntax && i.tm.opcode_modifier.byteokintel)
4209 continue;
4211 /* crc32 doesn't generate this warning. */
4212 if (i.tm.base_opcode == 0xf20f38f0)
4213 continue;
4215 if ((i.types[op].bitfield.reg16
4216 || i.types[op].bitfield.reg32
4217 || i.types[op].bitfield.reg64)
4218 && i.op[op].regs->reg_num < 4)
4220 /* Prohibit these changes in the 64bit mode, since the
4221 lowering is more complicated. */
4222 if (flag_code == CODE_64BIT
4223 && !i.tm.operand_types[op].bitfield.inoutportreg)
4225 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4226 register_prefix, i.op[op].regs->reg_name,
4227 i.suffix);
4228 return 0;
4230 #if REGISTER_WARNINGS
4231 if (!quiet_warnings
4232 && !i.tm.operand_types[op].bitfield.inoutportreg)
4233 as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
4234 register_prefix,
4235 (i.op[op].regs + (i.types[op].bitfield.reg16
4236 ? REGNAM_AL - REGNAM_AX
4237 : REGNAM_AL - REGNAM_EAX))->reg_name,
4238 register_prefix,
4239 i.op[op].regs->reg_name,
4240 i.suffix);
4241 #endif
4242 continue;
4244 /* Any other register is bad. */
4245 if (i.types[op].bitfield.reg16
4246 || i.types[op].bitfield.reg32
4247 || i.types[op].bitfield.reg64
4248 || i.types[op].bitfield.regmmx
4249 || i.types[op].bitfield.regxmm
4250 || i.types[op].bitfield.regymm
4251 || i.types[op].bitfield.sreg2
4252 || i.types[op].bitfield.sreg3
4253 || i.types[op].bitfield.control
4254 || i.types[op].bitfield.debug
4255 || i.types[op].bitfield.test
4256 || i.types[op].bitfield.floatreg
4257 || i.types[op].bitfield.floatacc)
4259 as_bad (_("`%s%s' not allowed with `%s%c'"),
4260 register_prefix,
4261 i.op[op].regs->reg_name,
4262 i.tm.name,
4263 i.suffix);
4264 return 0;
4267 return 1;
4270 static int
4271 check_long_reg (void)
4273 int op;
4275 for (op = i.operands; --op >= 0;)
4276 /* Reject eight bit registers, except where the template requires
4277 them. (eg. movzb) */
4278 if (i.types[op].bitfield.reg8
4279 && (i.tm.operand_types[op].bitfield.reg16
4280 || i.tm.operand_types[op].bitfield.reg32
4281 || i.tm.operand_types[op].bitfield.acc))
4283 as_bad (_("`%s%s' not allowed with `%s%c'"),
4284 register_prefix,
4285 i.op[op].regs->reg_name,
4286 i.tm.name,
4287 i.suffix);
4288 return 0;
4290 /* Warn if the e prefix on a general reg is missing. */
4291 else if ((!quiet_warnings || flag_code == CODE_64BIT)
4292 && i.types[op].bitfield.reg16
4293 && (i.tm.operand_types[op].bitfield.reg32
4294 || i.tm.operand_types[op].bitfield.acc))
4296 /* Prohibit these changes in the 64bit mode, since the
4297 lowering is more complicated. */
4298 if (flag_code == CODE_64BIT)
4300 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4301 register_prefix, i.op[op].regs->reg_name,
4302 i.suffix);
4303 return 0;
4305 #if REGISTER_WARNINGS
4306 else
4307 as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
4308 register_prefix,
4309 (i.op[op].regs + REGNAM_EAX - REGNAM_AX)->reg_name,
4310 register_prefix,
4311 i.op[op].regs->reg_name,
4312 i.suffix);
4313 #endif
4315 /* Warn if the r prefix on a general reg is missing. */
4316 else if (i.types[op].bitfield.reg64
4317 && (i.tm.operand_types[op].bitfield.reg32
4318 || i.tm.operand_types[op].bitfield.acc))
4320 if (intel_syntax
4321 && i.tm.opcode_modifier.toqword
4322 && !i.types[0].bitfield.regxmm)
4324 /* Convert to QWORD. We want REX byte. */
4325 i.suffix = QWORD_MNEM_SUFFIX;
4327 else
4329 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4330 register_prefix, i.op[op].regs->reg_name,
4331 i.suffix);
4332 return 0;
4335 return 1;
4338 static int
4339 check_qword_reg (void)
4341 int op;
4343 for (op = i.operands; --op >= 0; )
4344 /* Reject eight bit registers, except where the template requires
4345 them. (eg. movzb) */
4346 if (i.types[op].bitfield.reg8
4347 && (i.tm.operand_types[op].bitfield.reg16
4348 || i.tm.operand_types[op].bitfield.reg32
4349 || i.tm.operand_types[op].bitfield.acc))
4351 as_bad (_("`%s%s' not allowed with `%s%c'"),
4352 register_prefix,
4353 i.op[op].regs->reg_name,
4354 i.tm.name,
4355 i.suffix);
4356 return 0;
4358 /* Warn if the e prefix on a general reg is missing. */
4359 else if ((i.types[op].bitfield.reg16
4360 || i.types[op].bitfield.reg32)
4361 && (i.tm.operand_types[op].bitfield.reg32
4362 || i.tm.operand_types[op].bitfield.acc))
4364 /* Prohibit these changes in the 64bit mode, since the
4365 lowering is more complicated. */
4366 if (intel_syntax
4367 && i.tm.opcode_modifier.todword
4368 && !i.types[0].bitfield.regxmm)
4370 /* Convert to DWORD. We don't want REX byte. */
4371 i.suffix = LONG_MNEM_SUFFIX;
4373 else
4375 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4376 register_prefix, i.op[op].regs->reg_name,
4377 i.suffix);
4378 return 0;
4381 return 1;
4384 static int
4385 check_word_reg (void)
4387 int op;
4388 for (op = i.operands; --op >= 0;)
4389 /* Reject eight bit registers, except where the template requires
4390 them. (eg. movzb) */
4391 if (i.types[op].bitfield.reg8
4392 && (i.tm.operand_types[op].bitfield.reg16
4393 || i.tm.operand_types[op].bitfield.reg32
4394 || i.tm.operand_types[op].bitfield.acc))
4396 as_bad (_("`%s%s' not allowed with `%s%c'"),
4397 register_prefix,
4398 i.op[op].regs->reg_name,
4399 i.tm.name,
4400 i.suffix);
4401 return 0;
4403 /* Warn if the e prefix on a general reg is present. */
4404 else if ((!quiet_warnings || flag_code == CODE_64BIT)
4405 && i.types[op].bitfield.reg32
4406 && (i.tm.operand_types[op].bitfield.reg16
4407 || i.tm.operand_types[op].bitfield.acc))
4409 /* Prohibit these changes in the 64bit mode, since the
4410 lowering is more complicated. */
4411 if (flag_code == CODE_64BIT)
4413 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4414 register_prefix, i.op[op].regs->reg_name,
4415 i.suffix);
4416 return 0;
4418 else
4419 #if REGISTER_WARNINGS
4420 as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
4421 register_prefix,
4422 (i.op[op].regs + REGNAM_AX - REGNAM_EAX)->reg_name,
4423 register_prefix,
4424 i.op[op].regs->reg_name,
4425 i.suffix);
4426 #endif
4428 return 1;
4431 static int
4432 update_imm (unsigned int j)
4434 i386_operand_type overlap;
4436 overlap = operand_type_and (i.types[j], i.tm.operand_types[j]);
4437 if ((overlap.bitfield.imm8
4438 || overlap.bitfield.imm8s
4439 || overlap.bitfield.imm16
4440 || overlap.bitfield.imm32
4441 || overlap.bitfield.imm32s
4442 || overlap.bitfield.imm64)
4443 && !operand_type_equal (&overlap, &imm8)
4444 && !operand_type_equal (&overlap, &imm8s)
4445 && !operand_type_equal (&overlap, &imm16)
4446 && !operand_type_equal (&overlap, &imm32)
4447 && !operand_type_equal (&overlap, &imm32s)
4448 && !operand_type_equal (&overlap, &imm64))
4450 if (i.suffix)
4452 i386_operand_type temp;
4454 operand_type_set (&temp, 0);
4455 if (i.suffix == BYTE_MNEM_SUFFIX)
4457 temp.bitfield.imm8 = overlap.bitfield.imm8;
4458 temp.bitfield.imm8s = overlap.bitfield.imm8s;
4460 else if (i.suffix == WORD_MNEM_SUFFIX)
4461 temp.bitfield.imm16 = overlap.bitfield.imm16;
4462 else if (i.suffix == QWORD_MNEM_SUFFIX)
4464 temp.bitfield.imm64 = overlap.bitfield.imm64;
4465 temp.bitfield.imm32s = overlap.bitfield.imm32s;
4467 else
4468 temp.bitfield.imm32 = overlap.bitfield.imm32;
4469 overlap = temp;
4471 else if (operand_type_equal (&overlap, &imm16_32_32s)
4472 || operand_type_equal (&overlap, &imm16_32)
4473 || operand_type_equal (&overlap, &imm16_32s))
4475 if ((flag_code == CODE_16BIT) ^ (i.prefix[DATA_PREFIX] != 0))
4476 overlap = imm16;
4477 else
4478 overlap = imm32s;
4480 if (!operand_type_equal (&overlap, &imm8)
4481 && !operand_type_equal (&overlap, &imm8s)
4482 && !operand_type_equal (&overlap, &imm16)
4483 && !operand_type_equal (&overlap, &imm32)
4484 && !operand_type_equal (&overlap, &imm32s)
4485 && !operand_type_equal (&overlap, &imm64))
4487 as_bad (_("no instruction mnemonic suffix given; "
4488 "can't determine immediate size"));
4489 return 0;
4492 i.types[j] = overlap;
4494 return 1;
4497 static int
4498 finalize_imm (void)
4500 unsigned int j;
4502 for (j = 0; j < 2; j++)
4503 if (update_imm (j) == 0)
4504 return 0;
4506 i.types[2] = operand_type_and (i.types[2], i.tm.operand_types[2]);
4507 gas_assert (operand_type_check (i.types[2], imm) == 0);
4509 return 1;
4512 static int
4513 bad_implicit_operand (int xmm)
4515 const char *reg = xmm ? "xmm0" : "ymm0";
4516 if (intel_syntax)
4517 as_bad (_("the last operand of `%s' must be `%s%s'"),
4518 i.tm.name, register_prefix, reg);
4519 else
4520 as_bad (_("the first operand of `%s' must be `%s%s'"),
4521 i.tm.name, register_prefix, reg);
4522 return 0;
4525 static int
4526 process_operands (void)
4528 /* Default segment register this instruction will use for memory
4529 accesses. 0 means unknown. This is only for optimizing out
4530 unnecessary segment overrides. */
4531 const seg_entry *default_seg = 0;
4533 if (i.tm.opcode_modifier.sse2avx
4534 && (i.tm.opcode_modifier.vexnds
4535 || i.tm.opcode_modifier.vexndd))
4537 unsigned int dup = i.operands;
4538 unsigned int dest = dup - 1;
4539 unsigned int j;
4541 /* The destination must be an xmm register. */
4542 gas_assert (i.reg_operands
4543 && MAX_OPERANDS > dup
4544 && operand_type_equal (&i.types[dest], &regxmm));
4546 if (i.tm.opcode_modifier.firstxmm0)
4548 /* The first operand is implicit and must be xmm0. */
4549 gas_assert (operand_type_equal (&i.types[0], &regxmm));
4550 if (i.op[0].regs->reg_num != 0)
4551 return bad_implicit_operand (1);
4553 if (i.tm.opcode_modifier.vex3sources)
4555 /* Keep xmm0 for instructions with VEX prefix and 3
4556 sources. */
4557 goto duplicate;
4559 else
4561 /* We remove the first xmm0 and keep the number of
4562 operands unchanged, which in fact duplicates the
4563 destination. */
4564 for (j = 1; j < i.operands; j++)
4566 i.op[j - 1] = i.op[j];
4567 i.types[j - 1] = i.types[j];
4568 i.tm.operand_types[j - 1] = i.tm.operand_types[j];
4572 else if (i.tm.opcode_modifier.implicit1stxmm0)
4574 gas_assert ((MAX_OPERANDS - 1) > dup
4575 && i.tm.opcode_modifier.vex3sources);
4577 /* Add the implicit xmm0 for instructions with VEX prefix
4578 and 3 sources. */
4579 for (j = i.operands; j > 0; j--)
4581 i.op[j] = i.op[j - 1];
4582 i.types[j] = i.types[j - 1];
4583 i.tm.operand_types[j] = i.tm.operand_types[j - 1];
4585 i.op[0].regs
4586 = (const reg_entry *) hash_find (reg_hash, "xmm0");
4587 i.types[0] = regxmm;
4588 i.tm.operand_types[0] = regxmm;
4590 i.operands += 2;
4591 i.reg_operands += 2;
4592 i.tm.operands += 2;
4594 dup++;
4595 dest++;
4596 i.op[dup] = i.op[dest];
4597 i.types[dup] = i.types[dest];
4598 i.tm.operand_types[dup] = i.tm.operand_types[dest];
4600 else
4602 duplicate:
4603 i.operands++;
4604 i.reg_operands++;
4605 i.tm.operands++;
4607 i.op[dup] = i.op[dest];
4608 i.types[dup] = i.types[dest];
4609 i.tm.operand_types[dup] = i.tm.operand_types[dest];
4612 if (i.tm.opcode_modifier.immext)
4613 process_immext ();
4615 else if (i.tm.opcode_modifier.firstxmm0)
4617 unsigned int j;
4619 /* The first operand is implicit and must be xmm0/ymm0. */
4620 gas_assert (i.reg_operands
4621 && (operand_type_equal (&i.types[0], &regxmm)
4622 || operand_type_equal (&i.types[0], &regymm)));
4623 if (i.op[0].regs->reg_num != 0)
4624 return bad_implicit_operand (i.types[0].bitfield.regxmm);
4626 for (j = 1; j < i.operands; j++)
4628 i.op[j - 1] = i.op[j];
4629 i.types[j - 1] = i.types[j];
4631 /* We need to adjust fields in i.tm since they are used by
4632 build_modrm_byte. */
4633 i.tm.operand_types [j - 1] = i.tm.operand_types [j];
4636 i.operands--;
4637 i.reg_operands--;
4638 i.tm.operands--;
4640 else if (i.tm.opcode_modifier.regkludge)
4642 /* The imul $imm, %reg instruction is converted into
4643 imul $imm, %reg, %reg, and the clr %reg instruction
4644 is converted into xor %reg, %reg. */
4646 unsigned int first_reg_op;
4648 if (operand_type_check (i.types[0], reg))
4649 first_reg_op = 0;
4650 else
4651 first_reg_op = 1;
4652 /* Pretend we saw the extra register operand. */
4653 gas_assert (i.reg_operands == 1
4654 && i.op[first_reg_op + 1].regs == 0);
4655 i.op[first_reg_op + 1].regs = i.op[first_reg_op].regs;
4656 i.types[first_reg_op + 1] = i.types[first_reg_op];
4657 i.operands++;
4658 i.reg_operands++;
4661 if (i.tm.opcode_modifier.shortform)
4663 if (i.types[0].bitfield.sreg2
4664 || i.types[0].bitfield.sreg3)
4666 if (i.tm.base_opcode == POP_SEG_SHORT
4667 && i.op[0].regs->reg_num == 1)
4669 as_bad (_("you can't `pop %scs'"), register_prefix);
4670 return 0;
4672 i.tm.base_opcode |= (i.op[0].regs->reg_num << 3);
4673 if ((i.op[0].regs->reg_flags & RegRex) != 0)
4674 i.rex |= REX_B;
4676 else
4678 /* The register or float register operand is in operand
4679 0 or 1. */
4680 unsigned int op;
4682 if (i.types[0].bitfield.floatreg
4683 || operand_type_check (i.types[0], reg))
4684 op = 0;
4685 else
4686 op = 1;
4687 /* Register goes in low 3 bits of opcode. */
4688 i.tm.base_opcode |= i.op[op].regs->reg_num;
4689 if ((i.op[op].regs->reg_flags & RegRex) != 0)
4690 i.rex |= REX_B;
4691 if (!quiet_warnings && i.tm.opcode_modifier.ugh)
4693 /* Warn about some common errors, but press on regardless.
4694 The first case can be generated by gcc (<= 2.8.1). */
4695 if (i.operands == 2)
4697 /* Reversed arguments on faddp, fsubp, etc. */
4698 as_warn (_("translating to `%s %s%s,%s%s'"), i.tm.name,
4699 register_prefix, i.op[!intel_syntax].regs->reg_name,
4700 register_prefix, i.op[intel_syntax].regs->reg_name);
4702 else
4704 /* Extraneous `l' suffix on fp insn. */
4705 as_warn (_("translating to `%s %s%s'"), i.tm.name,
4706 register_prefix, i.op[0].regs->reg_name);
4711 else if (i.tm.opcode_modifier.modrm)
4713 /* The opcode is completed (modulo i.tm.extension_opcode which
4714 must be put into the modrm byte). Now, we make the modrm and
4715 index base bytes based on all the info we've collected. */
4717 default_seg = build_modrm_byte ();
4719 else if ((i.tm.base_opcode & ~0x3) == MOV_AX_DISP32)
4721 default_seg = &ds;
4723 else if (i.tm.opcode_modifier.isstring)
4725 /* For the string instructions that allow a segment override
4726 on one of their operands, the default segment is ds. */
4727 default_seg = &ds;
4730 if (i.tm.base_opcode == 0x8d /* lea */
4731 && i.seg[0]
4732 && !quiet_warnings)
4733 as_warn (_("segment override on `%s' is ineffectual"), i.tm.name);
4735 /* If a segment was explicitly specified, and the specified segment
4736 is not the default, use an opcode prefix to select it. If we
4737 never figured out what the default segment is, then default_seg
4738 will be zero at this point, and the specified segment prefix will
4739 always be used. */
4740 if ((i.seg[0]) && (i.seg[0] != default_seg))
4742 if (!add_prefix (i.seg[0]->seg_prefix))
4743 return 0;
4745 return 1;
4748 static const seg_entry *
4749 build_modrm_byte (void)
4751 const seg_entry *default_seg = 0;
4752 unsigned int source, dest;
4753 int vex_3_sources;
4755 /* The first operand of instructions with VEX prefix and 3 sources
4756 must be VEX_Imm4. */
4757 vex_3_sources = i.tm.opcode_modifier.vex3sources;
4758 if (vex_3_sources)
4760 unsigned int nds, reg;
4762 if (i.tm.opcode_modifier.veximmext
4763 && i.tm.opcode_modifier.immext)
4765 dest = i.operands - 2;
4766 gas_assert (dest == 3);
4768 else
4769 dest = i.operands - 1;
4770 nds = dest - 1;
4772 /* This instruction must have 4 register operands
4773 or 3 register operands plus 1 memory operand.
4774 It must have VexNDS and VexImmExt. */
4775 gas_assert ((i.reg_operands == 4
4776 || (i.reg_operands == 3 && i.mem_operands == 1))
4777 && i.tm.opcode_modifier.vexnds
4778 && i.tm.opcode_modifier.veximmext
4779 && (operand_type_equal (&i.tm.operand_types[dest], &regxmm)
4780 || operand_type_equal (&i.tm.operand_types[dest], &regymm)));
4782 /* Generate an 8bit immediate operand to encode the register
4783 operand. */
4784 expressionS *exp = &im_expressions[i.imm_operands++];
4785 i.op[i.operands].imms = exp;
4786 i.types[i.operands] = imm8;
4787 i.operands++;
4788 /* If VexW1 is set, the first operand is the source and
4789 the second operand is encoded in the immediate operand. */
4790 if (i.tm.opcode_modifier.vexw1)
4792 source = 0;
4793 reg = 1;
4795 else
4797 source = 1;
4798 reg = 0;
4800 /* FMA4 swaps REG and NDS. */
4801 if (i.tm.cpu_flags.bitfield.cpufma4)
4803 unsigned int tmp;
4804 tmp = reg;
4805 reg = nds;
4806 nds = tmp;
4808 gas_assert ((operand_type_equal (&i.tm.operand_types[reg], &regxmm)
4809 || operand_type_equal (&i.tm.operand_types[reg],
4810 &regymm))
4811 && (operand_type_equal (&i.tm.operand_types[nds], &regxmm)
4812 || operand_type_equal (&i.tm.operand_types[nds],
4813 &regymm)));
4814 exp->X_op = O_constant;
4815 exp->X_add_number
4816 = ((i.op[reg].regs->reg_num
4817 + ((i.op[reg].regs->reg_flags & RegRex) ? 8 : 0)) << 4);
4818 i.vex.register_specifier = i.op[nds].regs;
4820 else
4821 source = dest = 0;
4823 /* i.reg_operands MUST be the number of real register operands;
4824 implicit registers do not count. If there are 3 register
4825 operands, it must be a instruction with VexNDS. For a
4826 instruction with VexNDD, the destination register is encoded
4827 in VEX prefix. If there are 4 register operands, it must be
4828 a instruction with VEX prefix and 3 sources. */
4829 if (i.mem_operands == 0
4830 && ((i.reg_operands == 2
4831 && !i.tm.opcode_modifier.vexndd)
4832 || (i.reg_operands == 3
4833 && i.tm.opcode_modifier.vexnds)
4834 || (i.reg_operands == 4 && vex_3_sources)))
4836 switch (i.operands)
4838 case 2:
4839 source = 0;
4840 break;
4841 case 3:
4842 /* When there are 3 operands, one of them may be immediate,
4843 which may be the first or the last operand. Otherwise,
4844 the first operand must be shift count register (cl) or it
4845 is an instruction with VexNDS. */
4846 gas_assert (i.imm_operands == 1
4847 || (i.imm_operands == 0
4848 && (i.tm.opcode_modifier.vexnds
4849 || i.types[0].bitfield.shiftcount)));
4850 if (operand_type_check (i.types[0], imm)
4851 || i.types[0].bitfield.shiftcount)
4852 source = 1;
4853 else
4854 source = 0;
4855 break;
4856 case 4:
4857 /* When there are 4 operands, the first two must be 8bit
4858 immediate operands. The source operand will be the 3rd
4859 one.
4861 For instructions with VexNDS, if the first operand
4862 an imm8, the source operand is the 2nd one. If the last
4863 operand is imm8, the source operand is the first one. */
4864 gas_assert ((i.imm_operands == 2
4865 && i.types[0].bitfield.imm8
4866 && i.types[1].bitfield.imm8)
4867 || (i.tm.opcode_modifier.vexnds
4868 && i.imm_operands == 1
4869 && (i.types[0].bitfield.imm8
4870 || i.types[i.operands - 1].bitfield.imm8)));
4871 if (i.tm.opcode_modifier.vexnds)
4873 if (i.types[0].bitfield.imm8)
4874 source = 1;
4875 else
4876 source = 0;
4878 else
4879 source = 2;
4880 break;
4881 case 5:
4882 break;
4883 default:
4884 abort ();
4887 if (!vex_3_sources)
4889 dest = source + 1;
4891 if (i.tm.opcode_modifier.vexnds)
4893 /* For instructions with VexNDS, the register-only
4894 source operand must be XMM or YMM register. It is
4895 encoded in VEX prefix. We need to clear RegMem bit
4896 before calling operand_type_equal. */
4897 i386_operand_type op = i.tm.operand_types[dest];
4898 op.bitfield.regmem = 0;
4899 if ((dest + 1) >= i.operands
4900 || (!operand_type_equal (&op, &regxmm)
4901 && !operand_type_equal (&op, &regymm)))
4902 abort ();
4903 i.vex.register_specifier = i.op[dest].regs;
4904 dest++;
4908 i.rm.mode = 3;
4909 /* One of the register operands will be encoded in the i.tm.reg
4910 field, the other in the combined i.tm.mode and i.tm.regmem
4911 fields. If no form of this instruction supports a memory
4912 destination operand, then we assume the source operand may
4913 sometimes be a memory operand and so we need to store the
4914 destination in the i.rm.reg field. */
4915 if (!i.tm.operand_types[dest].bitfield.regmem
4916 && operand_type_check (i.tm.operand_types[dest], anymem) == 0)
4918 i.rm.reg = i.op[dest].regs->reg_num;
4919 i.rm.regmem = i.op[source].regs->reg_num;
4920 if ((i.op[dest].regs->reg_flags & RegRex) != 0)
4921 i.rex |= REX_R;
4922 if ((i.op[source].regs->reg_flags & RegRex) != 0)
4923 i.rex |= REX_B;
4925 else
4927 i.rm.reg = i.op[source].regs->reg_num;
4928 i.rm.regmem = i.op[dest].regs->reg_num;
4929 if ((i.op[dest].regs->reg_flags & RegRex) != 0)
4930 i.rex |= REX_B;
4931 if ((i.op[source].regs->reg_flags & RegRex) != 0)
4932 i.rex |= REX_R;
4934 if (flag_code != CODE_64BIT && (i.rex & (REX_R | REX_B)))
4936 if (!i.types[0].bitfield.control
4937 && !i.types[1].bitfield.control)
4938 abort ();
4939 i.rex &= ~(REX_R | REX_B);
4940 add_prefix (LOCK_PREFIX_OPCODE);
4943 else
4944 { /* If it's not 2 reg operands... */
4945 unsigned int mem;
4947 if (i.mem_operands)
4949 unsigned int fake_zero_displacement = 0;
4950 unsigned int op;
4952 for (op = 0; op < i.operands; op++)
4953 if (operand_type_check (i.types[op], anymem))
4954 break;
4955 gas_assert (op < i.operands);
4957 default_seg = &ds;
4959 if (i.base_reg == 0)
4961 i.rm.mode = 0;
4962 if (!i.disp_operands)
4963 fake_zero_displacement = 1;
4964 if (i.index_reg == 0)
4966 /* Operand is just <disp> */
4967 if (flag_code == CODE_64BIT)
4969 /* 64bit mode overwrites the 32bit absolute
4970 addressing by RIP relative addressing and
4971 absolute addressing is encoded by one of the
4972 redundant SIB forms. */
4973 i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
4974 i.sib.base = NO_BASE_REGISTER;
4975 i.sib.index = NO_INDEX_REGISTER;
4976 i.types[op] = ((i.prefix[ADDR_PREFIX] == 0)
4977 ? disp32s : disp32);
4979 else if ((flag_code == CODE_16BIT)
4980 ^ (i.prefix[ADDR_PREFIX] != 0))
4982 i.rm.regmem = NO_BASE_REGISTER_16;
4983 i.types[op] = disp16;
4985 else
4987 i.rm.regmem = NO_BASE_REGISTER;
4988 i.types[op] = disp32;
4991 else /* !i.base_reg && i.index_reg */
4993 if (i.index_reg->reg_num == RegEiz
4994 || i.index_reg->reg_num == RegRiz)
4995 i.sib.index = NO_INDEX_REGISTER;
4996 else
4997 i.sib.index = i.index_reg->reg_num;
4998 i.sib.base = NO_BASE_REGISTER;
4999 i.sib.scale = i.log2_scale_factor;
5000 i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
5001 i.types[op].bitfield.disp8 = 0;
5002 i.types[op].bitfield.disp16 = 0;
5003 i.types[op].bitfield.disp64 = 0;
5004 if (flag_code != CODE_64BIT)
5006 /* Must be 32 bit */
5007 i.types[op].bitfield.disp32 = 1;
5008 i.types[op].bitfield.disp32s = 0;
5010 else
5012 i.types[op].bitfield.disp32 = 0;
5013 i.types[op].bitfield.disp32s = 1;
5015 if ((i.index_reg->reg_flags & RegRex) != 0)
5016 i.rex |= REX_X;
5019 /* RIP addressing for 64bit mode. */
5020 else if (i.base_reg->reg_num == RegRip ||
5021 i.base_reg->reg_num == RegEip)
5023 i.rm.regmem = NO_BASE_REGISTER;
5024 i.types[op].bitfield.disp8 = 0;
5025 i.types[op].bitfield.disp16 = 0;
5026 i.types[op].bitfield.disp32 = 0;
5027 i.types[op].bitfield.disp32s = 1;
5028 i.types[op].bitfield.disp64 = 0;
5029 i.flags[op] |= Operand_PCrel;
5030 if (! i.disp_operands)
5031 fake_zero_displacement = 1;
5033 else if (i.base_reg->reg_type.bitfield.reg16)
5035 switch (i.base_reg->reg_num)
5037 case 3: /* (%bx) */
5038 if (i.index_reg == 0)
5039 i.rm.regmem = 7;
5040 else /* (%bx,%si) -> 0, or (%bx,%di) -> 1 */
5041 i.rm.regmem = i.index_reg->reg_num - 6;
5042 break;
5043 case 5: /* (%bp) */
5044 default_seg = &ss;
5045 if (i.index_reg == 0)
5047 i.rm.regmem = 6;
5048 if (operand_type_check (i.types[op], disp) == 0)
5050 /* fake (%bp) into 0(%bp) */
5051 i.types[op].bitfield.disp8 = 1;
5052 fake_zero_displacement = 1;
5055 else /* (%bp,%si) -> 2, or (%bp,%di) -> 3 */
5056 i.rm.regmem = i.index_reg->reg_num - 6 + 2;
5057 break;
5058 default: /* (%si) -> 4 or (%di) -> 5 */
5059 i.rm.regmem = i.base_reg->reg_num - 6 + 4;
5061 i.rm.mode = mode_from_disp_size (i.types[op]);
5063 else /* i.base_reg and 32/64 bit mode */
5065 if (flag_code == CODE_64BIT
5066 && operand_type_check (i.types[op], disp))
5068 i386_operand_type temp;
5069 operand_type_set (&temp, 0);
5070 temp.bitfield.disp8 = i.types[op].bitfield.disp8;
5071 i.types[op] = temp;
5072 if (i.prefix[ADDR_PREFIX] == 0)
5073 i.types[op].bitfield.disp32s = 1;
5074 else
5075 i.types[op].bitfield.disp32 = 1;
5078 i.rm.regmem = i.base_reg->reg_num;
5079 if ((i.base_reg->reg_flags & RegRex) != 0)
5080 i.rex |= REX_B;
5081 i.sib.base = i.base_reg->reg_num;
5082 /* x86-64 ignores REX prefix bit here to avoid decoder
5083 complications. */
5084 if ((i.base_reg->reg_num & 7) == EBP_REG_NUM)
5086 default_seg = &ss;
5087 if (i.disp_operands == 0)
5089 fake_zero_displacement = 1;
5090 i.types[op].bitfield.disp8 = 1;
5093 else if (i.base_reg->reg_num == ESP_REG_NUM)
5095 default_seg = &ss;
5097 i.sib.scale = i.log2_scale_factor;
5098 if (i.index_reg == 0)
5100 /* <disp>(%esp) becomes two byte modrm with no index
5101 register. We've already stored the code for esp
5102 in i.rm.regmem ie. ESCAPE_TO_TWO_BYTE_ADDRESSING.
5103 Any base register besides %esp will not use the
5104 extra modrm byte. */
5105 i.sib.index = NO_INDEX_REGISTER;
5107 else
5109 if (i.index_reg->reg_num == RegEiz
5110 || i.index_reg->reg_num == RegRiz)
5111 i.sib.index = NO_INDEX_REGISTER;
5112 else
5113 i.sib.index = i.index_reg->reg_num;
5114 i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
5115 if ((i.index_reg->reg_flags & RegRex) != 0)
5116 i.rex |= REX_X;
5119 if (i.disp_operands
5120 && (i.reloc[op] == BFD_RELOC_386_TLS_DESC_CALL
5121 || i.reloc[op] == BFD_RELOC_X86_64_TLSDESC_CALL))
5122 i.rm.mode = 0;
5123 else
5124 i.rm.mode = mode_from_disp_size (i.types[op]);
5127 if (fake_zero_displacement)
5129 /* Fakes a zero displacement assuming that i.types[op]
5130 holds the correct displacement size. */
5131 expressionS *exp;
5133 gas_assert (i.op[op].disps == 0);
5134 exp = &disp_expressions[i.disp_operands++];
5135 i.op[op].disps = exp;
5136 exp->X_op = O_constant;
5137 exp->X_add_number = 0;
5138 exp->X_add_symbol = (symbolS *) 0;
5139 exp->X_op_symbol = (symbolS *) 0;
5142 mem = op;
5144 else
5145 mem = ~0;
5147 /* Fill in i.rm.reg or i.rm.regmem field with register operand
5148 (if any) based on i.tm.extension_opcode. Again, we must be
5149 careful to make sure that segment/control/debug/test/MMX
5150 registers are coded into the i.rm.reg field. */
5151 if (i.reg_operands)
5153 unsigned int op;
5154 unsigned int vex_reg = ~0;
5156 for (op = 0; op < i.operands; op++)
5157 if (i.types[op].bitfield.reg8
5158 || i.types[op].bitfield.reg16
5159 || i.types[op].bitfield.reg32
5160 || i.types[op].bitfield.reg64
5161 || i.types[op].bitfield.regmmx
5162 || i.types[op].bitfield.regxmm
5163 || i.types[op].bitfield.regymm
5164 || i.types[op].bitfield.sreg2
5165 || i.types[op].bitfield.sreg3
5166 || i.types[op].bitfield.control
5167 || i.types[op].bitfield.debug
5168 || i.types[op].bitfield.test)
5169 break;
5171 if (vex_3_sources)
5172 op = dest;
5173 else if (i.tm.opcode_modifier.vexnds)
5175 /* For instructions with VexNDS, the register-only
5176 source operand is encoded in VEX prefix. */
5177 gas_assert (mem != (unsigned int) ~0);
5179 if (op > mem)
5181 vex_reg = op++;
5182 gas_assert (op < i.operands);
5184 else
5186 vex_reg = op + 1;
5187 gas_assert (vex_reg < i.operands);
5190 else if (i.tm.opcode_modifier.vexndd)
5192 /* For instructions with VexNDD, there should be
5193 no memory operand and the register destination
5194 is encoded in VEX prefix. */
5195 gas_assert (i.mem_operands == 0
5196 && (op + 2) == i.operands);
5197 vex_reg = op + 1;
5199 else
5200 gas_assert (op < i.operands);
5202 if (vex_reg != (unsigned int) ~0)
5204 gas_assert (i.reg_operands == 2);
5206 if (!operand_type_equal (&i.tm.operand_types[vex_reg],
5207 & regxmm)
5208 && !operand_type_equal (&i.tm.operand_types[vex_reg],
5209 &regymm))
5210 abort ();
5211 i.vex.register_specifier = i.op[vex_reg].regs;
5214 /* If there is an extension opcode to put here, the
5215 register number must be put into the regmem field. */
5216 if (i.tm.extension_opcode != None)
5218 i.rm.regmem = i.op[op].regs->reg_num;
5219 if ((i.op[op].regs->reg_flags & RegRex) != 0)
5220 i.rex |= REX_B;
5222 else
5224 i.rm.reg = i.op[op].regs->reg_num;
5225 if ((i.op[op].regs->reg_flags & RegRex) != 0)
5226 i.rex |= REX_R;
5229 /* Now, if no memory operand has set i.rm.mode = 0, 1, 2 we
5230 must set it to 3 to indicate this is a register operand
5231 in the regmem field. */
5232 if (!i.mem_operands)
5233 i.rm.mode = 3;
5236 /* Fill in i.rm.reg field with extension opcode (if any). */
5237 if (i.tm.extension_opcode != None)
5238 i.rm.reg = i.tm.extension_opcode;
5240 return default_seg;
5243 static void
5244 output_branch (void)
5246 char *p;
5247 int code16;
5248 int prefix;
5249 relax_substateT subtype;
5250 symbolS *sym;
5251 offsetT off;
5253 code16 = 0;
5254 if (flag_code == CODE_16BIT)
5255 code16 = CODE16;
5257 prefix = 0;
5258 if (i.prefix[DATA_PREFIX] != 0)
5260 prefix = 1;
5261 i.prefixes -= 1;
5262 code16 ^= CODE16;
5264 /* Pentium4 branch hints. */
5265 if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE /* not taken */
5266 || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE /* taken */)
5268 prefix++;
5269 i.prefixes--;
5271 if (i.prefix[REX_PREFIX] != 0)
5273 prefix++;
5274 i.prefixes--;
5277 if (i.prefixes != 0 && !intel_syntax)
5278 as_warn (_("skipping prefixes on this instruction"));
5280 /* It's always a symbol; End frag & setup for relax.
5281 Make sure there is enough room in this frag for the largest
5282 instruction we may generate in md_convert_frag. This is 2
5283 bytes for the opcode and room for the prefix and largest
5284 displacement. */
5285 frag_grow (prefix + 2 + 4);
5286 /* Prefix and 1 opcode byte go in fr_fix. */
5287 p = frag_more (prefix + 1);
5288 if (i.prefix[DATA_PREFIX] != 0)
5289 *p++ = DATA_PREFIX_OPCODE;
5290 if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE
5291 || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE)
5292 *p++ = i.prefix[SEG_PREFIX];
5293 if (i.prefix[REX_PREFIX] != 0)
5294 *p++ = i.prefix[REX_PREFIX];
5295 *p = i.tm.base_opcode;
5297 if ((unsigned char) *p == JUMP_PC_RELATIVE)
5298 subtype = ENCODE_RELAX_STATE (UNCOND_JUMP, SMALL);
5299 else if (cpu_arch_flags.bitfield.cpui386)
5300 subtype = ENCODE_RELAX_STATE (COND_JUMP, SMALL);
5301 else
5302 subtype = ENCODE_RELAX_STATE (COND_JUMP86, SMALL);
5303 subtype |= code16;
5305 sym = i.op[0].disps->X_add_symbol;
5306 off = i.op[0].disps->X_add_number;
5308 if (i.op[0].disps->X_op != O_constant
5309 && i.op[0].disps->X_op != O_symbol)
5311 /* Handle complex expressions. */
5312 sym = make_expr_symbol (i.op[0].disps);
5313 off = 0;
5316 /* 1 possible extra opcode + 4 byte displacement go in var part.
5317 Pass reloc in fr_var. */
5318 frag_var (rs_machine_dependent, 5, i.reloc[0], subtype, sym, off, p);
5321 static void
5322 output_jump (void)
5324 char *p;
5325 int size;
5326 fixS *fixP;
5328 if (i.tm.opcode_modifier.jumpbyte)
5330 /* This is a loop or jecxz type instruction. */
5331 size = 1;
5332 if (i.prefix[ADDR_PREFIX] != 0)
5334 FRAG_APPEND_1_CHAR (ADDR_PREFIX_OPCODE);
5335 i.prefixes -= 1;
5337 /* Pentium4 branch hints. */
5338 if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE /* not taken */
5339 || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE /* taken */)
5341 FRAG_APPEND_1_CHAR (i.prefix[SEG_PREFIX]);
5342 i.prefixes--;
5345 else
5347 int code16;
5349 code16 = 0;
5350 if (flag_code == CODE_16BIT)
5351 code16 = CODE16;
5353 if (i.prefix[DATA_PREFIX] != 0)
5355 FRAG_APPEND_1_CHAR (DATA_PREFIX_OPCODE);
5356 i.prefixes -= 1;
5357 code16 ^= CODE16;
5360 size = 4;
5361 if (code16)
5362 size = 2;
5365 if (i.prefix[REX_PREFIX] != 0)
5367 FRAG_APPEND_1_CHAR (i.prefix[REX_PREFIX]);
5368 i.prefixes -= 1;
5371 if (i.prefixes != 0 && !intel_syntax)
5372 as_warn (_("skipping prefixes on this instruction"));
5374 p = frag_more (1 + size);
5375 *p++ = i.tm.base_opcode;
5377 fixP = fix_new_exp (frag_now, p - frag_now->fr_literal, size,
5378 i.op[0].disps, 1, reloc (size, 1, 1, i.reloc[0]));
5380 /* All jumps handled here are signed, but don't use a signed limit
5381 check for 32 and 16 bit jumps as we want to allow wrap around at
5382 4G and 64k respectively. */
5383 if (size == 1)
5384 fixP->fx_signed = 1;
5387 static void
5388 output_interseg_jump (void)
5390 char *p;
5391 int size;
5392 int prefix;
5393 int code16;
5395 code16 = 0;
5396 if (flag_code == CODE_16BIT)
5397 code16 = CODE16;
5399 prefix = 0;
5400 if (i.prefix[DATA_PREFIX] != 0)
5402 prefix = 1;
5403 i.prefixes -= 1;
5404 code16 ^= CODE16;
5406 if (i.prefix[REX_PREFIX] != 0)
5408 prefix++;
5409 i.prefixes -= 1;
5412 size = 4;
5413 if (code16)
5414 size = 2;
5416 if (i.prefixes != 0 && !intel_syntax)
5417 as_warn (_("skipping prefixes on this instruction"));
5419 /* 1 opcode; 2 segment; offset */
5420 p = frag_more (prefix + 1 + 2 + size);
5422 if (i.prefix[DATA_PREFIX] != 0)
5423 *p++ = DATA_PREFIX_OPCODE;
5425 if (i.prefix[REX_PREFIX] != 0)
5426 *p++ = i.prefix[REX_PREFIX];
5428 *p++ = i.tm.base_opcode;
5429 if (i.op[1].imms->X_op == O_constant)
5431 offsetT n = i.op[1].imms->X_add_number;
5433 if (size == 2
5434 && !fits_in_unsigned_word (n)
5435 && !fits_in_signed_word (n))
5437 as_bad (_("16-bit jump out of range"));
5438 return;
5440 md_number_to_chars (p, n, size);
5442 else
5443 fix_new_exp (frag_now, p - frag_now->fr_literal, size,
5444 i.op[1].imms, 0, reloc (size, 0, 0, i.reloc[1]));
5445 if (i.op[0].imms->X_op != O_constant)
5446 as_bad (_("can't handle non absolute segment in `%s'"),
5447 i.tm.name);
5448 md_number_to_chars (p + size, (valueT) i.op[0].imms->X_add_number, 2);
5451 static void
5452 output_insn (void)
5454 fragS *insn_start_frag;
5455 offsetT insn_start_off;
5457 /* Tie dwarf2 debug info to the address at the start of the insn.
5458 We can't do this after the insn has been output as the current
5459 frag may have been closed off. eg. by frag_var. */
5460 dwarf2_emit_insn (0);
5462 insn_start_frag = frag_now;
5463 insn_start_off = frag_now_fix ();
5465 /* Output jumps. */
5466 if (i.tm.opcode_modifier.jump)
5467 output_branch ();
5468 else if (i.tm.opcode_modifier.jumpbyte
5469 || i.tm.opcode_modifier.jumpdword)
5470 output_jump ();
5471 else if (i.tm.opcode_modifier.jumpintersegment)
5472 output_interseg_jump ();
5473 else
5475 /* Output normal instructions here. */
5476 char *p;
5477 unsigned char *q;
5478 unsigned int j;
5479 unsigned int prefix;
5481 /* Since the VEX prefix contains the implicit prefix, we don't
5482 need the explicit prefix. */
5483 if (!i.tm.opcode_modifier.vex)
5485 switch (i.tm.opcode_length)
5487 case 3:
5488 if (i.tm.base_opcode & 0xff000000)
5490 prefix = (i.tm.base_opcode >> 24) & 0xff;
5491 goto check_prefix;
5493 break;
5494 case 2:
5495 if ((i.tm.base_opcode & 0xff0000) != 0)
5497 prefix = (i.tm.base_opcode >> 16) & 0xff;
5498 if (i.tm.cpu_flags.bitfield.cpupadlock)
5500 check_prefix:
5501 if (prefix != REPE_PREFIX_OPCODE
5502 || (i.prefix[LOCKREP_PREFIX]
5503 != REPE_PREFIX_OPCODE))
5504 add_prefix (prefix);
5506 else
5507 add_prefix (prefix);
5509 break;
5510 case 1:
5511 break;
5512 default:
5513 abort ();
5516 /* The prefix bytes. */
5517 for (j = ARRAY_SIZE (i.prefix), q = i.prefix; j > 0; j--, q++)
5518 if (*q)
5519 FRAG_APPEND_1_CHAR (*q);
5522 if (i.tm.opcode_modifier.vex)
5524 for (j = 0, q = i.prefix; j < ARRAY_SIZE (i.prefix); j++, q++)
5525 if (*q)
5526 switch (j)
5528 case REX_PREFIX:
5529 /* REX byte is encoded in VEX prefix. */
5530 break;
5531 case SEG_PREFIX:
5532 case ADDR_PREFIX:
5533 FRAG_APPEND_1_CHAR (*q);
5534 break;
5535 default:
5536 /* There should be no other prefixes for instructions
5537 with VEX prefix. */
5538 abort ();
5541 /* Now the VEX prefix. */
5542 p = frag_more (i.vex.length);
5543 for (j = 0; j < i.vex.length; j++)
5544 p[j] = i.vex.bytes[j];
5547 /* Now the opcode; be careful about word order here! */
5548 if (i.tm.opcode_length == 1)
5550 FRAG_APPEND_1_CHAR (i.tm.base_opcode);
5552 else
5554 switch (i.tm.opcode_length)
5556 case 3:
5557 p = frag_more (3);
5558 *p++ = (i.tm.base_opcode >> 16) & 0xff;
5559 break;
5560 case 2:
5561 p = frag_more (2);
5562 break;
5563 default:
5564 abort ();
5565 break;
5568 /* Put out high byte first: can't use md_number_to_chars! */
5569 *p++ = (i.tm.base_opcode >> 8) & 0xff;
5570 *p = i.tm.base_opcode & 0xff;
5573 /* Now the modrm byte and sib byte (if present). */
5574 if (i.tm.opcode_modifier.modrm)
5576 FRAG_APPEND_1_CHAR ((i.rm.regmem << 0
5577 | i.rm.reg << 3
5578 | i.rm.mode << 6));
5579 /* If i.rm.regmem == ESP (4)
5580 && i.rm.mode != (Register mode)
5581 && not 16 bit
5582 ==> need second modrm byte. */
5583 if (i.rm.regmem == ESCAPE_TO_TWO_BYTE_ADDRESSING
5584 && i.rm.mode != 3
5585 && !(i.base_reg && i.base_reg->reg_type.bitfield.reg16))
5586 FRAG_APPEND_1_CHAR ((i.sib.base << 0
5587 | i.sib.index << 3
5588 | i.sib.scale << 6));
5591 if (i.disp_operands)
5592 output_disp (insn_start_frag, insn_start_off);
5594 if (i.imm_operands)
5595 output_imm (insn_start_frag, insn_start_off);
5598 #ifdef DEBUG386
5599 if (flag_debug)
5601 pi ("" /*line*/, &i);
5603 #endif /* DEBUG386 */
5606 /* Return the size of the displacement operand N. */
5608 static int
5609 disp_size (unsigned int n)
5611 int size = 4;
5612 if (i.types[n].bitfield.disp64)
5613 size = 8;
5614 else if (i.types[n].bitfield.disp8)
5615 size = 1;
5616 else if (i.types[n].bitfield.disp16)
5617 size = 2;
5618 return size;
5621 /* Return the size of the immediate operand N. */
5623 static int
5624 imm_size (unsigned int n)
5626 int size = 4;
5627 if (i.types[n].bitfield.imm64)
5628 size = 8;
5629 else if (i.types[n].bitfield.imm8 || i.types[n].bitfield.imm8s)
5630 size = 1;
5631 else if (i.types[n].bitfield.imm16)
5632 size = 2;
5633 return size;
5636 static void
5637 output_disp (fragS *insn_start_frag, offsetT insn_start_off)
5639 char *p;
5640 unsigned int n;
5642 for (n = 0; n < i.operands; n++)
5644 if (operand_type_check (i.types[n], disp))
5646 if (i.op[n].disps->X_op == O_constant)
5648 int size = disp_size (n);
5649 offsetT val;
5651 val = offset_in_range (i.op[n].disps->X_add_number,
5652 size);
5653 p = frag_more (size);
5654 md_number_to_chars (p, val, size);
5656 else
5658 enum bfd_reloc_code_real reloc_type;
5659 int size = disp_size (n);
5660 int sign = i.types[n].bitfield.disp32s;
5661 int pcrel = (i.flags[n] & Operand_PCrel) != 0;
5663 /* We can't have 8 bit displacement here. */
5664 gas_assert (!i.types[n].bitfield.disp8);
5666 /* The PC relative address is computed relative
5667 to the instruction boundary, so in case immediate
5668 fields follows, we need to adjust the value. */
5669 if (pcrel && i.imm_operands)
5671 unsigned int n1;
5672 int sz = 0;
5674 for (n1 = 0; n1 < i.operands; n1++)
5675 if (operand_type_check (i.types[n1], imm))
5677 /* Only one immediate is allowed for PC
5678 relative address. */
5679 gas_assert (sz == 0);
5680 sz = imm_size (n1);
5681 i.op[n].disps->X_add_number -= sz;
5683 /* We should find the immediate. */
5684 gas_assert (sz != 0);
5687 p = frag_more (size);
5688 reloc_type = reloc (size, pcrel, sign, i.reloc[n]);
5689 if (GOT_symbol
5690 && GOT_symbol == i.op[n].disps->X_add_symbol
5691 && (((reloc_type == BFD_RELOC_32
5692 || reloc_type == BFD_RELOC_X86_64_32S
5693 || (reloc_type == BFD_RELOC_64
5694 && object_64bit))
5695 && (i.op[n].disps->X_op == O_symbol
5696 || (i.op[n].disps->X_op == O_add
5697 && ((symbol_get_value_expression
5698 (i.op[n].disps->X_op_symbol)->X_op)
5699 == O_subtract))))
5700 || reloc_type == BFD_RELOC_32_PCREL))
5702 offsetT add;
5704 if (insn_start_frag == frag_now)
5705 add = (p - frag_now->fr_literal) - insn_start_off;
5706 else
5708 fragS *fr;
5710 add = insn_start_frag->fr_fix - insn_start_off;
5711 for (fr = insn_start_frag->fr_next;
5712 fr && fr != frag_now; fr = fr->fr_next)
5713 add += fr->fr_fix;
5714 add += p - frag_now->fr_literal;
5717 if (!object_64bit)
5719 reloc_type = BFD_RELOC_386_GOTPC;
5720 i.op[n].imms->X_add_number += add;
5722 else if (reloc_type == BFD_RELOC_64)
5723 reloc_type = BFD_RELOC_X86_64_GOTPC64;
5724 else
5725 /* Don't do the adjustment for x86-64, as there
5726 the pcrel addressing is relative to the _next_
5727 insn, and that is taken care of in other code. */
5728 reloc_type = BFD_RELOC_X86_64_GOTPC32;
5730 fix_new_exp (frag_now, p - frag_now->fr_literal, size,
5731 i.op[n].disps, pcrel, reloc_type);
5737 static void
5738 output_imm (fragS *insn_start_frag, offsetT insn_start_off)
5740 char *p;
5741 unsigned int n;
5743 for (n = 0; n < i.operands; n++)
5745 if (operand_type_check (i.types[n], imm))
5747 if (i.op[n].imms->X_op == O_constant)
5749 int size = imm_size (n);
5750 offsetT val;
5752 val = offset_in_range (i.op[n].imms->X_add_number,
5753 size);
5754 p = frag_more (size);
5755 md_number_to_chars (p, val, size);
5757 else
5759 /* Not absolute_section.
5760 Need a 32-bit fixup (don't support 8bit
5761 non-absolute imms). Try to support other
5762 sizes ... */
5763 enum bfd_reloc_code_real reloc_type;
5764 int size = imm_size (n);
5765 int sign;
5767 if (i.types[n].bitfield.imm32s
5768 && (i.suffix == QWORD_MNEM_SUFFIX
5769 || (!i.suffix && i.tm.opcode_modifier.no_lsuf)))
5770 sign = 1;
5771 else
5772 sign = 0;
5774 p = frag_more (size);
5775 reloc_type = reloc (size, 0, sign, i.reloc[n]);
5777 /* This is tough to explain. We end up with this one if we
5778 * have operands that look like
5779 * "_GLOBAL_OFFSET_TABLE_+[.-.L284]". The goal here is to
5780 * obtain the absolute address of the GOT, and it is strongly
5781 * preferable from a performance point of view to avoid using
5782 * a runtime relocation for this. The actual sequence of
5783 * instructions often look something like:
5785 * call .L66
5786 * .L66:
5787 * popl %ebx
5788 * addl $_GLOBAL_OFFSET_TABLE_+[.-.L66],%ebx
5790 * The call and pop essentially return the absolute address
5791 * of the label .L66 and store it in %ebx. The linker itself
5792 * will ultimately change the first operand of the addl so
5793 * that %ebx points to the GOT, but to keep things simple, the
5794 * .o file must have this operand set so that it generates not
5795 * the absolute address of .L66, but the absolute address of
5796 * itself. This allows the linker itself simply treat a GOTPC
5797 * relocation as asking for a pcrel offset to the GOT to be
5798 * added in, and the addend of the relocation is stored in the
5799 * operand field for the instruction itself.
5801 * Our job here is to fix the operand so that it would add
5802 * the correct offset so that %ebx would point to itself. The
5803 * thing that is tricky is that .-.L66 will point to the
5804 * beginning of the instruction, so we need to further modify
5805 * the operand so that it will point to itself. There are
5806 * other cases where you have something like:
5808 * .long $_GLOBAL_OFFSET_TABLE_+[.-.L66]
5810 * and here no correction would be required. Internally in
5811 * the assembler we treat operands of this form as not being
5812 * pcrel since the '.' is explicitly mentioned, and I wonder
5813 * whether it would simplify matters to do it this way. Who
5814 * knows. In earlier versions of the PIC patches, the
5815 * pcrel_adjust field was used to store the correction, but
5816 * since the expression is not pcrel, I felt it would be
5817 * confusing to do it this way. */
5819 if ((reloc_type == BFD_RELOC_32
5820 || reloc_type == BFD_RELOC_X86_64_32S
5821 || reloc_type == BFD_RELOC_64)
5822 && GOT_symbol
5823 && GOT_symbol == i.op[n].imms->X_add_symbol
5824 && (i.op[n].imms->X_op == O_symbol
5825 || (i.op[n].imms->X_op == O_add
5826 && ((symbol_get_value_expression
5827 (i.op[n].imms->X_op_symbol)->X_op)
5828 == O_subtract))))
5830 offsetT add;
5832 if (insn_start_frag == frag_now)
5833 add = (p - frag_now->fr_literal) - insn_start_off;
5834 else
5836 fragS *fr;
5838 add = insn_start_frag->fr_fix - insn_start_off;
5839 for (fr = insn_start_frag->fr_next;
5840 fr && fr != frag_now; fr = fr->fr_next)
5841 add += fr->fr_fix;
5842 add += p - frag_now->fr_literal;
5845 if (!object_64bit)
5846 reloc_type = BFD_RELOC_386_GOTPC;
5847 else if (size == 4)
5848 reloc_type = BFD_RELOC_X86_64_GOTPC32;
5849 else if (size == 8)
5850 reloc_type = BFD_RELOC_X86_64_GOTPC64;
5851 i.op[n].imms->X_add_number += add;
5853 fix_new_exp (frag_now, p - frag_now->fr_literal, size,
5854 i.op[n].imms, 0, reloc_type);
5860 /* x86_cons_fix_new is called via the expression parsing code when a
5861 reloc is needed. We use this hook to get the correct .got reloc. */
5862 static enum bfd_reloc_code_real got_reloc = NO_RELOC;
5863 static int cons_sign = -1;
5865 void
5866 x86_cons_fix_new (fragS *frag, unsigned int off, unsigned int len,
5867 expressionS *exp)
5869 enum bfd_reloc_code_real r = reloc (len, 0, cons_sign, got_reloc);
5871 got_reloc = NO_RELOC;
5873 #ifdef TE_PE
5874 if (exp->X_op == O_secrel)
5876 exp->X_op = O_symbol;
5877 r = BFD_RELOC_32_SECREL;
5879 #endif
5881 fix_new_exp (frag, off, len, exp, 0, r);
5884 #if (!defined (OBJ_ELF) && !defined (OBJ_MAYBE_ELF)) || defined (LEX_AT)
5885 # define lex_got(reloc, adjust, types) NULL
5886 #else
5887 /* Parse operands of the form
5888 <symbol>@GOTOFF+<nnn>
5889 and similar .plt or .got references.
5891 If we find one, set up the correct relocation in RELOC and copy the
5892 input string, minus the `@GOTOFF' into a malloc'd buffer for
5893 parsing by the calling routine. Return this buffer, and if ADJUST
5894 is non-null set it to the length of the string we removed from the
5895 input line. Otherwise return NULL. */
5896 static char *
5897 lex_got (enum bfd_reloc_code_real *reloc,
5898 int *adjust,
5899 i386_operand_type *types)
5901 /* Some of the relocations depend on the size of what field is to
5902 be relocated. But in our callers i386_immediate and i386_displacement
5903 we don't yet know the operand size (this will be set by insn
5904 matching). Hence we record the word32 relocation here,
5905 and adjust the reloc according to the real size in reloc(). */
5906 static const struct {
5907 const char *str;
5908 const enum bfd_reloc_code_real rel[2];
5909 const i386_operand_type types64;
5910 } gotrel[] = {
5911 { "PLTOFF", { 0,
5912 BFD_RELOC_X86_64_PLTOFF64 },
5913 OPERAND_TYPE_IMM64 },
5914 { "PLT", { BFD_RELOC_386_PLT32,
5915 BFD_RELOC_X86_64_PLT32 },
5916 OPERAND_TYPE_IMM32_32S_DISP32 },
5917 { "GOTPLT", { 0,
5918 BFD_RELOC_X86_64_GOTPLT64 },
5919 OPERAND_TYPE_IMM64_DISP64 },
5920 { "GOTOFF", { BFD_RELOC_386_GOTOFF,
5921 BFD_RELOC_X86_64_GOTOFF64 },
5922 OPERAND_TYPE_IMM64_DISP64 },
5923 { "GOTPCREL", { 0,
5924 BFD_RELOC_X86_64_GOTPCREL },
5925 OPERAND_TYPE_IMM32_32S_DISP32 },
5926 { "TLSGD", { BFD_RELOC_386_TLS_GD,
5927 BFD_RELOC_X86_64_TLSGD },
5928 OPERAND_TYPE_IMM32_32S_DISP32 },
5929 { "TLSLDM", { BFD_RELOC_386_TLS_LDM,
5930 0 },
5931 OPERAND_TYPE_NONE },
5932 { "TLSLD", { 0,
5933 BFD_RELOC_X86_64_TLSLD },
5934 OPERAND_TYPE_IMM32_32S_DISP32 },
5935 { "GOTTPOFF", { BFD_RELOC_386_TLS_IE_32,
5936 BFD_RELOC_X86_64_GOTTPOFF },
5937 OPERAND_TYPE_IMM32_32S_DISP32 },
5938 { "TPOFF", { BFD_RELOC_386_TLS_LE_32,
5939 BFD_RELOC_X86_64_TPOFF32 },
5940 OPERAND_TYPE_IMM32_32S_64_DISP32_64 },
5941 { "NTPOFF", { BFD_RELOC_386_TLS_LE,
5942 0 },
5943 OPERAND_TYPE_NONE },
5944 { "DTPOFF", { BFD_RELOC_386_TLS_LDO_32,
5945 BFD_RELOC_X86_64_DTPOFF32 },
5947 OPERAND_TYPE_IMM32_32S_64_DISP32_64 },
5948 { "GOTNTPOFF",{ BFD_RELOC_386_TLS_GOTIE,
5949 0 },
5950 OPERAND_TYPE_NONE },
5951 { "INDNTPOFF",{ BFD_RELOC_386_TLS_IE,
5952 0 },
5953 OPERAND_TYPE_NONE },
5954 { "GOT", { BFD_RELOC_386_GOT32,
5955 BFD_RELOC_X86_64_GOT32 },
5956 OPERAND_TYPE_IMM32_32S_64_DISP32 },
5957 { "TLSDESC", { BFD_RELOC_386_TLS_GOTDESC,
5958 BFD_RELOC_X86_64_GOTPC32_TLSDESC },
5959 OPERAND_TYPE_IMM32_32S_DISP32 },
5960 { "TLSCALL", { BFD_RELOC_386_TLS_DESC_CALL,
5961 BFD_RELOC_X86_64_TLSDESC_CALL },
5962 OPERAND_TYPE_IMM32_32S_DISP32 },
5964 char *cp;
5965 unsigned int j;
5967 if (!IS_ELF)
5968 return NULL;
5970 for (cp = input_line_pointer; *cp != '@'; cp++)
5971 if (is_end_of_line[(unsigned char) *cp] || *cp == ',')
5972 return NULL;
5974 for (j = 0; j < ARRAY_SIZE (gotrel); j++)
5976 int len;
5978 len = strlen (gotrel[j].str);
5979 if (strncasecmp (cp + 1, gotrel[j].str, len) == 0)
5981 if (gotrel[j].rel[object_64bit] != 0)
5983 int first, second;
5984 char *tmpbuf, *past_reloc;
5986 *reloc = gotrel[j].rel[object_64bit];
5987 if (adjust)
5988 *adjust = len;
5990 if (types)
5992 if (flag_code != CODE_64BIT)
5994 types->bitfield.imm32 = 1;
5995 types->bitfield.disp32 = 1;
5997 else
5998 *types = gotrel[j].types64;
6001 if (GOT_symbol == NULL)
6002 GOT_symbol = symbol_find_or_make (GLOBAL_OFFSET_TABLE_NAME);
6004 /* The length of the first part of our input line. */
6005 first = cp - input_line_pointer;
6007 /* The second part goes from after the reloc token until
6008 (and including) an end_of_line char or comma. */
6009 past_reloc = cp + 1 + len;
6010 cp = past_reloc;
6011 while (!is_end_of_line[(unsigned char) *cp] && *cp != ',')
6012 ++cp;
6013 second = cp + 1 - past_reloc;
6015 /* Allocate and copy string. The trailing NUL shouldn't
6016 be necessary, but be safe. */
6017 tmpbuf = xmalloc (first + second + 2);
6018 memcpy (tmpbuf, input_line_pointer, first);
6019 if (second != 0 && *past_reloc != ' ')
6020 /* Replace the relocation token with ' ', so that
6021 errors like foo@GOTOFF1 will be detected. */
6022 tmpbuf[first++] = ' ';
6023 memcpy (tmpbuf + first, past_reloc, second);
6024 tmpbuf[first + second] = '\0';
6025 return tmpbuf;
6028 as_bad (_("@%s reloc is not supported with %d-bit output format"),
6029 gotrel[j].str, 1 << (5 + object_64bit));
6030 return NULL;
6034 /* Might be a symbol version string. Don't as_bad here. */
6035 return NULL;
6038 void
6039 x86_cons (expressionS *exp, int size)
6041 intel_syntax = -intel_syntax;
6043 if (size == 4 || (object_64bit && size == 8))
6045 /* Handle @GOTOFF and the like in an expression. */
6046 char *save;
6047 char *gotfree_input_line;
6048 int adjust;
6050 save = input_line_pointer;
6051 gotfree_input_line = lex_got (&got_reloc, &adjust, NULL);
6052 if (gotfree_input_line)
6053 input_line_pointer = gotfree_input_line;
6055 expression (exp);
6057 if (gotfree_input_line)
6059 /* expression () has merrily parsed up to the end of line,
6060 or a comma - in the wrong buffer. Transfer how far
6061 input_line_pointer has moved to the right buffer. */
6062 input_line_pointer = (save
6063 + (input_line_pointer - gotfree_input_line)
6064 + adjust);
6065 free (gotfree_input_line);
6066 if (exp->X_op == O_constant
6067 || exp->X_op == O_absent
6068 || exp->X_op == O_illegal
6069 || exp->X_op == O_register
6070 || exp->X_op == O_big)
6072 char c = *input_line_pointer;
6073 *input_line_pointer = 0;
6074 as_bad (_("missing or invalid expression `%s'"), save);
6075 *input_line_pointer = c;
6079 else
6080 expression (exp);
6082 intel_syntax = -intel_syntax;
6084 if (intel_syntax)
6085 i386_intel_simplify (exp);
6087 #endif
6089 static void signed_cons (int size)
6091 if (flag_code == CODE_64BIT)
6092 cons_sign = 1;
6093 cons (size);
6094 cons_sign = -1;
6097 #ifdef TE_PE
6098 static void
6099 pe_directive_secrel (dummy)
6100 int dummy ATTRIBUTE_UNUSED;
6102 expressionS exp;
6106 expression (&exp);
6107 if (exp.X_op == O_symbol)
6108 exp.X_op = O_secrel;
6110 emit_expr (&exp, 4);
6112 while (*input_line_pointer++ == ',');
6114 input_line_pointer--;
6115 demand_empty_rest_of_line ();
6117 #endif
6119 static int
6120 i386_immediate (char *imm_start)
6122 char *save_input_line_pointer;
6123 char *gotfree_input_line;
6124 segT exp_seg = 0;
6125 expressionS *exp;
6126 i386_operand_type types;
6128 operand_type_set (&types, ~0);
6130 if (i.imm_operands == MAX_IMMEDIATE_OPERANDS)
6132 as_bad (_("at most %d immediate operands are allowed"),
6133 MAX_IMMEDIATE_OPERANDS);
6134 return 0;
6137 exp = &im_expressions[i.imm_operands++];
6138 i.op[this_operand].imms = exp;
6140 if (is_space_char (*imm_start))
6141 ++imm_start;
6143 save_input_line_pointer = input_line_pointer;
6144 input_line_pointer = imm_start;
6146 gotfree_input_line = lex_got (&i.reloc[this_operand], NULL, &types);
6147 if (gotfree_input_line)
6148 input_line_pointer = gotfree_input_line;
6150 exp_seg = expression (exp);
6152 SKIP_WHITESPACE ();
6153 if (*input_line_pointer)
6154 as_bad (_("junk `%s' after expression"), input_line_pointer);
6156 input_line_pointer = save_input_line_pointer;
6157 if (gotfree_input_line)
6159 free (gotfree_input_line);
6161 if (exp->X_op == O_constant || exp->X_op == O_register)
6162 exp->X_op = O_illegal;
6165 return i386_finalize_immediate (exp_seg, exp, types, imm_start);
6168 static int
6169 i386_finalize_immediate (segT exp_seg ATTRIBUTE_UNUSED, expressionS *exp,
6170 i386_operand_type types, const char *imm_start)
6172 if (exp->X_op == O_absent || exp->X_op == O_illegal || exp->X_op == O_big)
6174 as_bad (_("missing or invalid immediate expression `%s'"),
6175 imm_start);
6176 return 0;
6178 else if (exp->X_op == O_constant)
6180 /* Size it properly later. */
6181 i.types[this_operand].bitfield.imm64 = 1;
6182 /* If BFD64, sign extend val. */
6183 if (!use_rela_relocations
6184 && (exp->X_add_number & ~(((addressT) 2 << 31) - 1)) == 0)
6185 exp->X_add_number
6186 = (exp->X_add_number ^ ((addressT) 1 << 31)) - ((addressT) 1 << 31);
6188 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
6189 else if (OUTPUT_FLAVOR == bfd_target_aout_flavour
6190 && exp_seg != absolute_section
6191 && exp_seg != text_section
6192 && exp_seg != data_section
6193 && exp_seg != bss_section
6194 && exp_seg != undefined_section
6195 && !bfd_is_com_section (exp_seg))
6197 as_bad (_("unimplemented segment %s in operand"), exp_seg->name);
6198 return 0;
6200 #endif
6201 else if (!intel_syntax && exp->X_op == O_register)
6203 as_bad (_("illegal immediate register operand %s"), imm_start);
6204 return 0;
6206 else
6208 /* This is an address. The size of the address will be
6209 determined later, depending on destination register,
6210 suffix, or the default for the section. */
6211 i.types[this_operand].bitfield.imm8 = 1;
6212 i.types[this_operand].bitfield.imm16 = 1;
6213 i.types[this_operand].bitfield.imm32 = 1;
6214 i.types[this_operand].bitfield.imm32s = 1;
6215 i.types[this_operand].bitfield.imm64 = 1;
6216 i.types[this_operand] = operand_type_and (i.types[this_operand],
6217 types);
6220 return 1;
6223 static char *
6224 i386_scale (char *scale)
6226 offsetT val;
6227 char *save = input_line_pointer;
6229 input_line_pointer = scale;
6230 val = get_absolute_expression ();
6232 switch (val)
6234 case 1:
6235 i.log2_scale_factor = 0;
6236 break;
6237 case 2:
6238 i.log2_scale_factor = 1;
6239 break;
6240 case 4:
6241 i.log2_scale_factor = 2;
6242 break;
6243 case 8:
6244 i.log2_scale_factor = 3;
6245 break;
6246 default:
6248 char sep = *input_line_pointer;
6250 *input_line_pointer = '\0';
6251 as_bad (_("expecting scale factor of 1, 2, 4, or 8: got `%s'"),
6252 scale);
6253 *input_line_pointer = sep;
6254 input_line_pointer = save;
6255 return NULL;
6258 if (i.log2_scale_factor != 0 && i.index_reg == 0)
6260 as_warn (_("scale factor of %d without an index register"),
6261 1 << i.log2_scale_factor);
6262 i.log2_scale_factor = 0;
6264 scale = input_line_pointer;
6265 input_line_pointer = save;
6266 return scale;
6269 static int
6270 i386_displacement (char *disp_start, char *disp_end)
6272 expressionS *exp;
6273 segT exp_seg = 0;
6274 char *save_input_line_pointer;
6275 char *gotfree_input_line;
6276 int override;
6277 i386_operand_type bigdisp, types = anydisp;
6278 int ret;
6280 if (i.disp_operands == MAX_MEMORY_OPERANDS)
6282 as_bad (_("at most %d displacement operands are allowed"),
6283 MAX_MEMORY_OPERANDS);
6284 return 0;
6287 operand_type_set (&bigdisp, 0);
6288 if ((i.types[this_operand].bitfield.jumpabsolute)
6289 || (!current_templates->start->opcode_modifier.jump
6290 && !current_templates->start->opcode_modifier.jumpdword))
6292 bigdisp.bitfield.disp32 = 1;
6293 override = (i.prefix[ADDR_PREFIX] != 0);
6294 if (flag_code == CODE_64BIT)
6296 if (!override)
6298 bigdisp.bitfield.disp32s = 1;
6299 bigdisp.bitfield.disp64 = 1;
6302 else if ((flag_code == CODE_16BIT) ^ override)
6304 bigdisp.bitfield.disp32 = 0;
6305 bigdisp.bitfield.disp16 = 1;
6308 else
6310 /* For PC-relative branches, the width of the displacement
6311 is dependent upon data size, not address size. */
6312 override = (i.prefix[DATA_PREFIX] != 0);
6313 if (flag_code == CODE_64BIT)
6315 if (override || i.suffix == WORD_MNEM_SUFFIX)
6316 bigdisp.bitfield.disp16 = 1;
6317 else
6319 bigdisp.bitfield.disp32 = 1;
6320 bigdisp.bitfield.disp32s = 1;
6323 else
6325 if (!override)
6326 override = (i.suffix == (flag_code != CODE_16BIT
6327 ? WORD_MNEM_SUFFIX
6328 : LONG_MNEM_SUFFIX));
6329 bigdisp.bitfield.disp32 = 1;
6330 if ((flag_code == CODE_16BIT) ^ override)
6332 bigdisp.bitfield.disp32 = 0;
6333 bigdisp.bitfield.disp16 = 1;
6337 i.types[this_operand] = operand_type_or (i.types[this_operand],
6338 bigdisp);
6340 exp = &disp_expressions[i.disp_operands];
6341 i.op[this_operand].disps = exp;
6342 i.disp_operands++;
6343 save_input_line_pointer = input_line_pointer;
6344 input_line_pointer = disp_start;
6345 END_STRING_AND_SAVE (disp_end);
6347 #ifndef GCC_ASM_O_HACK
6348 #define GCC_ASM_O_HACK 0
6349 #endif
6350 #if GCC_ASM_O_HACK
6351 END_STRING_AND_SAVE (disp_end + 1);
6352 if (i.types[this_operand].bitfield.baseIndex
6353 && displacement_string_end[-1] == '+')
6355 /* This hack is to avoid a warning when using the "o"
6356 constraint within gcc asm statements.
6357 For instance:
6359 #define _set_tssldt_desc(n,addr,limit,type) \
6360 __asm__ __volatile__ ( \
6361 "movw %w2,%0\n\t" \
6362 "movw %w1,2+%0\n\t" \
6363 "rorl $16,%1\n\t" \
6364 "movb %b1,4+%0\n\t" \
6365 "movb %4,5+%0\n\t" \
6366 "movb $0,6+%0\n\t" \
6367 "movb %h1,7+%0\n\t" \
6368 "rorl $16,%1" \
6369 : "=o"(*(n)) : "q" (addr), "ri"(limit), "i"(type))
6371 This works great except that the output assembler ends
6372 up looking a bit weird if it turns out that there is
6373 no offset. You end up producing code that looks like:
6375 #APP
6376 movw $235,(%eax)
6377 movw %dx,2+(%eax)
6378 rorl $16,%edx
6379 movb %dl,4+(%eax)
6380 movb $137,5+(%eax)
6381 movb $0,6+(%eax)
6382 movb %dh,7+(%eax)
6383 rorl $16,%edx
6384 #NO_APP
6386 So here we provide the missing zero. */
6388 *displacement_string_end = '0';
6390 #endif
6391 gotfree_input_line = lex_got (&i.reloc[this_operand], NULL, &types);
6392 if (gotfree_input_line)
6393 input_line_pointer = gotfree_input_line;
6395 exp_seg = expression (exp);
6397 SKIP_WHITESPACE ();
6398 if (*input_line_pointer)
6399 as_bad (_("junk `%s' after expression"), input_line_pointer);
6400 #if GCC_ASM_O_HACK
6401 RESTORE_END_STRING (disp_end + 1);
6402 #endif
6403 input_line_pointer = save_input_line_pointer;
6404 if (gotfree_input_line)
6406 free (gotfree_input_line);
6408 if (exp->X_op == O_constant || exp->X_op == O_register)
6409 exp->X_op = O_illegal;
6412 ret = i386_finalize_displacement (exp_seg, exp, types, disp_start);
6414 RESTORE_END_STRING (disp_end);
6416 return ret;
6419 static int
6420 i386_finalize_displacement (segT exp_seg ATTRIBUTE_UNUSED, expressionS *exp,
6421 i386_operand_type types, const char *disp_start)
6423 i386_operand_type bigdisp;
6424 int ret = 1;
6426 /* We do this to make sure that the section symbol is in
6427 the symbol table. We will ultimately change the relocation
6428 to be relative to the beginning of the section. */
6429 if (i.reloc[this_operand] == BFD_RELOC_386_GOTOFF
6430 || i.reloc[this_operand] == BFD_RELOC_X86_64_GOTPCREL
6431 || i.reloc[this_operand] == BFD_RELOC_X86_64_GOTOFF64)
6433 if (exp->X_op != O_symbol)
6434 goto inv_disp;
6436 if (S_IS_LOCAL (exp->X_add_symbol)
6437 && S_GET_SEGMENT (exp->X_add_symbol) != undefined_section)
6438 section_symbol (S_GET_SEGMENT (exp->X_add_symbol));
6439 exp->X_op = O_subtract;
6440 exp->X_op_symbol = GOT_symbol;
6441 if (i.reloc[this_operand] == BFD_RELOC_X86_64_GOTPCREL)
6442 i.reloc[this_operand] = BFD_RELOC_32_PCREL;
6443 else if (i.reloc[this_operand] == BFD_RELOC_X86_64_GOTOFF64)
6444 i.reloc[this_operand] = BFD_RELOC_64;
6445 else
6446 i.reloc[this_operand] = BFD_RELOC_32;
6449 else if (exp->X_op == O_absent
6450 || exp->X_op == O_illegal
6451 || exp->X_op == O_big)
6453 inv_disp:
6454 as_bad (_("missing or invalid displacement expression `%s'"),
6455 disp_start);
6456 ret = 0;
6459 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
6460 else if (exp->X_op != O_constant
6461 && OUTPUT_FLAVOR == bfd_target_aout_flavour
6462 && exp_seg != absolute_section
6463 && exp_seg != text_section
6464 && exp_seg != data_section
6465 && exp_seg != bss_section
6466 && exp_seg != undefined_section
6467 && !bfd_is_com_section (exp_seg))
6469 as_bad (_("unimplemented segment %s in operand"), exp_seg->name);
6470 ret = 0;
6472 #endif
6474 /* Check if this is a displacement only operand. */
6475 bigdisp = i.types[this_operand];
6476 bigdisp.bitfield.disp8 = 0;
6477 bigdisp.bitfield.disp16 = 0;
6478 bigdisp.bitfield.disp32 = 0;
6479 bigdisp.bitfield.disp32s = 0;
6480 bigdisp.bitfield.disp64 = 0;
6481 if (operand_type_all_zero (&bigdisp))
6482 i.types[this_operand] = operand_type_and (i.types[this_operand],
6483 types);
6485 return ret;
6488 /* Make sure the memory operand we've been dealt is valid.
6489 Return 1 on success, 0 on a failure. */
6491 static int
6492 i386_index_check (const char *operand_string)
6494 int ok;
6495 const char *kind = "base/index";
6496 #if INFER_ADDR_PREFIX
6497 int fudged = 0;
6499 tryprefix:
6500 #endif
6501 ok = 1;
6502 if (current_templates->start->opcode_modifier.isstring
6503 && !current_templates->start->opcode_modifier.immext
6504 && (current_templates->end[-1].opcode_modifier.isstring
6505 || i.mem_operands))
6507 /* Memory operands of string insns are special in that they only allow
6508 a single register (rDI, rSI, or rBX) as their memory address. */
6509 unsigned int expected;
6511 kind = "string address";
6513 if (current_templates->start->opcode_modifier.w)
6515 i386_operand_type type = current_templates->end[-1].operand_types[0];
6517 if (!type.bitfield.baseindex
6518 || ((!i.mem_operands != !intel_syntax)
6519 && current_templates->end[-1].operand_types[1]
6520 .bitfield.baseindex))
6521 type = current_templates->end[-1].operand_types[1];
6522 expected = type.bitfield.esseg ? 7 /* rDI */ : 6 /* rSI */;
6524 else
6525 expected = 3 /* rBX */;
6527 if (!i.base_reg || i.index_reg
6528 || operand_type_check (i.types[this_operand], disp))
6529 ok = -1;
6530 else if (!(flag_code == CODE_64BIT
6531 ? i.prefix[ADDR_PREFIX]
6532 ? i.base_reg->reg_type.bitfield.reg32
6533 : i.base_reg->reg_type.bitfield.reg64
6534 : (flag_code == CODE_16BIT) ^ !i.prefix[ADDR_PREFIX]
6535 ? i.base_reg->reg_type.bitfield.reg32
6536 : i.base_reg->reg_type.bitfield.reg16))
6537 ok = 0;
6538 else if (i.base_reg->reg_num != expected)
6539 ok = -1;
6541 if (ok < 0)
6543 unsigned int j;
6545 for (j = 0; j < i386_regtab_size; ++j)
6546 if ((flag_code == CODE_64BIT
6547 ? i.prefix[ADDR_PREFIX]
6548 ? i386_regtab[j].reg_type.bitfield.reg32
6549 : i386_regtab[j].reg_type.bitfield.reg64
6550 : (flag_code == CODE_16BIT) ^ !i.prefix[ADDR_PREFIX]
6551 ? i386_regtab[j].reg_type.bitfield.reg32
6552 : i386_regtab[j].reg_type.bitfield.reg16)
6553 && i386_regtab[j].reg_num == expected)
6554 break;
6555 gas_assert (j < i386_regtab_size);
6556 as_warn (_("`%s' is not valid here (expected `%c%s%s%c')"),
6557 operand_string,
6558 intel_syntax ? '[' : '(',
6559 register_prefix,
6560 i386_regtab[j].reg_name,
6561 intel_syntax ? ']' : ')');
6562 ok = 1;
6565 else if (flag_code == CODE_64BIT)
6567 if ((i.base_reg
6568 && ((i.prefix[ADDR_PREFIX] == 0
6569 && !i.base_reg->reg_type.bitfield.reg64)
6570 || (i.prefix[ADDR_PREFIX]
6571 && !i.base_reg->reg_type.bitfield.reg32))
6572 && (i.index_reg
6573 || i.base_reg->reg_num !=
6574 (i.prefix[ADDR_PREFIX] == 0 ? RegRip : RegEip)))
6575 || (i.index_reg
6576 && (!i.index_reg->reg_type.bitfield.baseindex
6577 || (i.prefix[ADDR_PREFIX] == 0
6578 && i.index_reg->reg_num != RegRiz
6579 && !i.index_reg->reg_type.bitfield.reg64
6581 || (i.prefix[ADDR_PREFIX]
6582 && i.index_reg->reg_num != RegEiz
6583 && !i.index_reg->reg_type.bitfield.reg32))))
6584 ok = 0;
6586 else
6588 if ((flag_code == CODE_16BIT) ^ (i.prefix[ADDR_PREFIX] != 0))
6590 /* 16bit checks. */
6591 if ((i.base_reg
6592 && (!i.base_reg->reg_type.bitfield.reg16
6593 || !i.base_reg->reg_type.bitfield.baseindex))
6594 || (i.index_reg
6595 && (!i.index_reg->reg_type.bitfield.reg16
6596 || !i.index_reg->reg_type.bitfield.baseindex
6597 || !(i.base_reg
6598 && i.base_reg->reg_num < 6
6599 && i.index_reg->reg_num >= 6
6600 && i.log2_scale_factor == 0))))
6601 ok = 0;
6603 else
6605 /* 32bit checks. */
6606 if ((i.base_reg
6607 && !i.base_reg->reg_type.bitfield.reg32)
6608 || (i.index_reg
6609 && ((!i.index_reg->reg_type.bitfield.reg32
6610 && i.index_reg->reg_num != RegEiz)
6611 || !i.index_reg->reg_type.bitfield.baseindex)))
6612 ok = 0;
6615 if (!ok)
6617 #if INFER_ADDR_PREFIX
6618 if (!i.mem_operands && !i.prefix[ADDR_PREFIX])
6620 i.prefix[ADDR_PREFIX] = ADDR_PREFIX_OPCODE;
6621 i.prefixes += 1;
6622 /* Change the size of any displacement too. At most one of
6623 Disp16 or Disp32 is set.
6624 FIXME. There doesn't seem to be any real need for separate
6625 Disp16 and Disp32 flags. The same goes for Imm16 and Imm32.
6626 Removing them would probably clean up the code quite a lot. */
6627 if (flag_code != CODE_64BIT
6628 && (i.types[this_operand].bitfield.disp16
6629 || i.types[this_operand].bitfield.disp32))
6630 i.types[this_operand]
6631 = operand_type_xor (i.types[this_operand], disp16_32);
6632 fudged = 1;
6633 goto tryprefix;
6635 if (fudged)
6636 as_bad (_("`%s' is not a valid %s expression"),
6637 operand_string,
6638 kind);
6639 else
6640 #endif
6641 as_bad (_("`%s' is not a valid %s-bit %s expression"),
6642 operand_string,
6643 flag_code_names[i.prefix[ADDR_PREFIX]
6644 ? flag_code == CODE_32BIT
6645 ? CODE_16BIT
6646 : CODE_32BIT
6647 : flag_code],
6648 kind);
6650 return ok;
6653 /* Parse OPERAND_STRING into the i386_insn structure I. Returns zero
6654 on error. */
6656 static int
6657 i386_att_operand (char *operand_string)
6659 const reg_entry *r;
6660 char *end_op;
6661 char *op_string = operand_string;
6663 if (is_space_char (*op_string))
6664 ++op_string;
6666 /* We check for an absolute prefix (differentiating,
6667 for example, 'jmp pc_relative_label' from 'jmp *absolute_label'. */
6668 if (*op_string == ABSOLUTE_PREFIX)
6670 ++op_string;
6671 if (is_space_char (*op_string))
6672 ++op_string;
6673 i.types[this_operand].bitfield.jumpabsolute = 1;
6676 /* Check if operand is a register. */
6677 if ((r = parse_register (op_string, &end_op)) != NULL)
6679 i386_operand_type temp;
6681 /* Check for a segment override by searching for ':' after a
6682 segment register. */
6683 op_string = end_op;
6684 if (is_space_char (*op_string))
6685 ++op_string;
6686 if (*op_string == ':'
6687 && (r->reg_type.bitfield.sreg2
6688 || r->reg_type.bitfield.sreg3))
6690 switch (r->reg_num)
6692 case 0:
6693 i.seg[i.mem_operands] = &es;
6694 break;
6695 case 1:
6696 i.seg[i.mem_operands] = &cs;
6697 break;
6698 case 2:
6699 i.seg[i.mem_operands] = &ss;
6700 break;
6701 case 3:
6702 i.seg[i.mem_operands] = &ds;
6703 break;
6704 case 4:
6705 i.seg[i.mem_operands] = &fs;
6706 break;
6707 case 5:
6708 i.seg[i.mem_operands] = &gs;
6709 break;
6712 /* Skip the ':' and whitespace. */
6713 ++op_string;
6714 if (is_space_char (*op_string))
6715 ++op_string;
6717 if (!is_digit_char (*op_string)
6718 && !is_identifier_char (*op_string)
6719 && *op_string != '('
6720 && *op_string != ABSOLUTE_PREFIX)
6722 as_bad (_("bad memory operand `%s'"), op_string);
6723 return 0;
6725 /* Handle case of %es:*foo. */
6726 if (*op_string == ABSOLUTE_PREFIX)
6728 ++op_string;
6729 if (is_space_char (*op_string))
6730 ++op_string;
6731 i.types[this_operand].bitfield.jumpabsolute = 1;
6733 goto do_memory_reference;
6735 if (*op_string)
6737 as_bad (_("junk `%s' after register"), op_string);
6738 return 0;
6740 temp = r->reg_type;
6741 temp.bitfield.baseindex = 0;
6742 i.types[this_operand] = operand_type_or (i.types[this_operand],
6743 temp);
6744 i.types[this_operand].bitfield.unspecified = 0;
6745 i.op[this_operand].regs = r;
6746 i.reg_operands++;
6748 else if (*op_string == REGISTER_PREFIX)
6750 as_bad (_("bad register name `%s'"), op_string);
6751 return 0;
6753 else if (*op_string == IMMEDIATE_PREFIX)
6755 ++op_string;
6756 if (i.types[this_operand].bitfield.jumpabsolute)
6758 as_bad (_("immediate operand illegal with absolute jump"));
6759 return 0;
6761 if (!i386_immediate (op_string))
6762 return 0;
6764 else if (is_digit_char (*op_string)
6765 || is_identifier_char (*op_string)
6766 || *op_string == '(')
6768 /* This is a memory reference of some sort. */
6769 char *base_string;
6771 /* Start and end of displacement string expression (if found). */
6772 char *displacement_string_start;
6773 char *displacement_string_end;
6775 do_memory_reference:
6776 if ((i.mem_operands == 1
6777 && !current_templates->start->opcode_modifier.isstring)
6778 || i.mem_operands == 2)
6780 as_bad (_("too many memory references for `%s'"),
6781 current_templates->start->name);
6782 return 0;
6785 /* Check for base index form. We detect the base index form by
6786 looking for an ')' at the end of the operand, searching
6787 for the '(' matching it, and finding a REGISTER_PREFIX or ','
6788 after the '('. */
6789 base_string = op_string + strlen (op_string);
6791 --base_string;
6792 if (is_space_char (*base_string))
6793 --base_string;
6795 /* If we only have a displacement, set-up for it to be parsed later. */
6796 displacement_string_start = op_string;
6797 displacement_string_end = base_string + 1;
6799 if (*base_string == ')')
6801 char *temp_string;
6802 unsigned int parens_balanced = 1;
6803 /* We've already checked that the number of left & right ()'s are
6804 equal, so this loop will not be infinite. */
6807 base_string--;
6808 if (*base_string == ')')
6809 parens_balanced++;
6810 if (*base_string == '(')
6811 parens_balanced--;
6813 while (parens_balanced);
6815 temp_string = base_string;
6817 /* Skip past '(' and whitespace. */
6818 ++base_string;
6819 if (is_space_char (*base_string))
6820 ++base_string;
6822 if (*base_string == ','
6823 || ((i.base_reg = parse_register (base_string, &end_op))
6824 != NULL))
6826 displacement_string_end = temp_string;
6828 i.types[this_operand].bitfield.baseindex = 1;
6830 if (i.base_reg)
6832 base_string = end_op;
6833 if (is_space_char (*base_string))
6834 ++base_string;
6837 /* There may be an index reg or scale factor here. */
6838 if (*base_string == ',')
6840 ++base_string;
6841 if (is_space_char (*base_string))
6842 ++base_string;
6844 if ((i.index_reg = parse_register (base_string, &end_op))
6845 != NULL)
6847 base_string = end_op;
6848 if (is_space_char (*base_string))
6849 ++base_string;
6850 if (*base_string == ',')
6852 ++base_string;
6853 if (is_space_char (*base_string))
6854 ++base_string;
6856 else if (*base_string != ')')
6858 as_bad (_("expecting `,' or `)' "
6859 "after index register in `%s'"),
6860 operand_string);
6861 return 0;
6864 else if (*base_string == REGISTER_PREFIX)
6866 as_bad (_("bad register name `%s'"), base_string);
6867 return 0;
6870 /* Check for scale factor. */
6871 if (*base_string != ')')
6873 char *end_scale = i386_scale (base_string);
6875 if (!end_scale)
6876 return 0;
6878 base_string = end_scale;
6879 if (is_space_char (*base_string))
6880 ++base_string;
6881 if (*base_string != ')')
6883 as_bad (_("expecting `)' "
6884 "after scale factor in `%s'"),
6885 operand_string);
6886 return 0;
6889 else if (!i.index_reg)
6891 as_bad (_("expecting index register or scale factor "
6892 "after `,'; got '%c'"),
6893 *base_string);
6894 return 0;
6897 else if (*base_string != ')')
6899 as_bad (_("expecting `,' or `)' "
6900 "after base register in `%s'"),
6901 operand_string);
6902 return 0;
6905 else if (*base_string == REGISTER_PREFIX)
6907 as_bad (_("bad register name `%s'"), base_string);
6908 return 0;
6912 /* If there's an expression beginning the operand, parse it,
6913 assuming displacement_string_start and
6914 displacement_string_end are meaningful. */
6915 if (displacement_string_start != displacement_string_end)
6917 if (!i386_displacement (displacement_string_start,
6918 displacement_string_end))
6919 return 0;
6922 /* Special case for (%dx) while doing input/output op. */
6923 if (i.base_reg
6924 && operand_type_equal (&i.base_reg->reg_type,
6925 &reg16_inoutportreg)
6926 && i.index_reg == 0
6927 && i.log2_scale_factor == 0
6928 && i.seg[i.mem_operands] == 0
6929 && !operand_type_check (i.types[this_operand], disp))
6931 i.types[this_operand] = inoutportreg;
6932 return 1;
6935 if (i386_index_check (operand_string) == 0)
6936 return 0;
6937 i.types[this_operand].bitfield.mem = 1;
6938 i.mem_operands++;
6940 else
6942 /* It's not a memory operand; argh! */
6943 as_bad (_("invalid char %s beginning operand %d `%s'"),
6944 output_invalid (*op_string),
6945 this_operand + 1,
6946 op_string);
6947 return 0;
6949 return 1; /* Normal return. */
6952 /* md_estimate_size_before_relax()
6954 Called just before relax() for rs_machine_dependent frags. The x86
6955 assembler uses these frags to handle variable size jump
6956 instructions.
6958 Any symbol that is now undefined will not become defined.
6959 Return the correct fr_subtype in the frag.
6960 Return the initial "guess for variable size of frag" to caller.
6961 The guess is actually the growth beyond the fixed part. Whatever
6962 we do to grow the fixed or variable part contributes to our
6963 returned value. */
6966 md_estimate_size_before_relax (fragP, segment)
6967 fragS *fragP;
6968 segT segment;
6970 /* We've already got fragP->fr_subtype right; all we have to do is
6971 check for un-relaxable symbols. On an ELF system, we can't relax
6972 an externally visible symbol, because it may be overridden by a
6973 shared library. */
6974 if (S_GET_SEGMENT (fragP->fr_symbol) != segment
6975 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
6976 || (IS_ELF
6977 && (S_IS_EXTERNAL (fragP->fr_symbol)
6978 || S_IS_WEAK (fragP->fr_symbol)
6979 || ((symbol_get_bfdsym (fragP->fr_symbol)->flags
6980 & BSF_GNU_INDIRECT_FUNCTION))))
6981 #endif
6982 #if defined (OBJ_COFF) && defined (TE_PE)
6983 || (OUTPUT_FLAVOR == bfd_target_coff_flavour
6984 && S_IS_WEAK (fragP->fr_symbol))
6985 #endif
6988 /* Symbol is undefined in this segment, or we need to keep a
6989 reloc so that weak symbols can be overridden. */
6990 int size = (fragP->fr_subtype & CODE16) ? 2 : 4;
6991 enum bfd_reloc_code_real reloc_type;
6992 unsigned char *opcode;
6993 int old_fr_fix;
6995 if (fragP->fr_var != NO_RELOC)
6996 reloc_type = fragP->fr_var;
6997 else if (size == 2)
6998 reloc_type = BFD_RELOC_16_PCREL;
6999 else
7000 reloc_type = BFD_RELOC_32_PCREL;
7002 old_fr_fix = fragP->fr_fix;
7003 opcode = (unsigned char *) fragP->fr_opcode;
7005 switch (TYPE_FROM_RELAX_STATE (fragP->fr_subtype))
7007 case UNCOND_JUMP:
7008 /* Make jmp (0xeb) a (d)word displacement jump. */
7009 opcode[0] = 0xe9;
7010 fragP->fr_fix += size;
7011 fix_new (fragP, old_fr_fix, size,
7012 fragP->fr_symbol,
7013 fragP->fr_offset, 1,
7014 reloc_type);
7015 break;
7017 case COND_JUMP86:
7018 if (size == 2
7019 && (!no_cond_jump_promotion || fragP->fr_var != NO_RELOC))
7021 /* Negate the condition, and branch past an
7022 unconditional jump. */
7023 opcode[0] ^= 1;
7024 opcode[1] = 3;
7025 /* Insert an unconditional jump. */
7026 opcode[2] = 0xe9;
7027 /* We added two extra opcode bytes, and have a two byte
7028 offset. */
7029 fragP->fr_fix += 2 + 2;
7030 fix_new (fragP, old_fr_fix + 2, 2,
7031 fragP->fr_symbol,
7032 fragP->fr_offset, 1,
7033 reloc_type);
7034 break;
7036 /* Fall through. */
7038 case COND_JUMP:
7039 if (no_cond_jump_promotion && fragP->fr_var == NO_RELOC)
7041 fixS *fixP;
7043 fragP->fr_fix += 1;
7044 fixP = fix_new (fragP, old_fr_fix, 1,
7045 fragP->fr_symbol,
7046 fragP->fr_offset, 1,
7047 BFD_RELOC_8_PCREL);
7048 fixP->fx_signed = 1;
7049 break;
7052 /* This changes the byte-displacement jump 0x7N
7053 to the (d)word-displacement jump 0x0f,0x8N. */
7054 opcode[1] = opcode[0] + 0x10;
7055 opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
7056 /* We've added an opcode byte. */
7057 fragP->fr_fix += 1 + size;
7058 fix_new (fragP, old_fr_fix + 1, size,
7059 fragP->fr_symbol,
7060 fragP->fr_offset, 1,
7061 reloc_type);
7062 break;
7064 default:
7065 BAD_CASE (fragP->fr_subtype);
7066 break;
7068 frag_wane (fragP);
7069 return fragP->fr_fix - old_fr_fix;
7072 /* Guess size depending on current relax state. Initially the relax
7073 state will correspond to a short jump and we return 1, because
7074 the variable part of the frag (the branch offset) is one byte
7075 long. However, we can relax a section more than once and in that
7076 case we must either set fr_subtype back to the unrelaxed state,
7077 or return the value for the appropriate branch. */
7078 return md_relax_table[fragP->fr_subtype].rlx_length;
7081 /* Called after relax() is finished.
7083 In: Address of frag.
7084 fr_type == rs_machine_dependent.
7085 fr_subtype is what the address relaxed to.
7087 Out: Any fixSs and constants are set up.
7088 Caller will turn frag into a ".space 0". */
7090 void
7091 md_convert_frag (abfd, sec, fragP)
7092 bfd *abfd ATTRIBUTE_UNUSED;
7093 segT sec ATTRIBUTE_UNUSED;
7094 fragS *fragP;
7096 unsigned char *opcode;
7097 unsigned char *where_to_put_displacement = NULL;
7098 offsetT target_address;
7099 offsetT opcode_address;
7100 unsigned int extension = 0;
7101 offsetT displacement_from_opcode_start;
7103 opcode = (unsigned char *) fragP->fr_opcode;
7105 /* Address we want to reach in file space. */
7106 target_address = S_GET_VALUE (fragP->fr_symbol) + fragP->fr_offset;
7108 /* Address opcode resides at in file space. */
7109 opcode_address = fragP->fr_address + fragP->fr_fix;
7111 /* Displacement from opcode start to fill into instruction. */
7112 displacement_from_opcode_start = target_address - opcode_address;
7114 if ((fragP->fr_subtype & BIG) == 0)
7116 /* Don't have to change opcode. */
7117 extension = 1; /* 1 opcode + 1 displacement */
7118 where_to_put_displacement = &opcode[1];
7120 else
7122 if (no_cond_jump_promotion
7123 && TYPE_FROM_RELAX_STATE (fragP->fr_subtype) != UNCOND_JUMP)
7124 as_warn_where (fragP->fr_file, fragP->fr_line,
7125 _("long jump required"));
7127 switch (fragP->fr_subtype)
7129 case ENCODE_RELAX_STATE (UNCOND_JUMP, BIG):
7130 extension = 4; /* 1 opcode + 4 displacement */
7131 opcode[0] = 0xe9;
7132 where_to_put_displacement = &opcode[1];
7133 break;
7135 case ENCODE_RELAX_STATE (UNCOND_JUMP, BIG16):
7136 extension = 2; /* 1 opcode + 2 displacement */
7137 opcode[0] = 0xe9;
7138 where_to_put_displacement = &opcode[1];
7139 break;
7141 case ENCODE_RELAX_STATE (COND_JUMP, BIG):
7142 case ENCODE_RELAX_STATE (COND_JUMP86, BIG):
7143 extension = 5; /* 2 opcode + 4 displacement */
7144 opcode[1] = opcode[0] + 0x10;
7145 opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
7146 where_to_put_displacement = &opcode[2];
7147 break;
7149 case ENCODE_RELAX_STATE (COND_JUMP, BIG16):
7150 extension = 3; /* 2 opcode + 2 displacement */
7151 opcode[1] = opcode[0] + 0x10;
7152 opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
7153 where_to_put_displacement = &opcode[2];
7154 break;
7156 case ENCODE_RELAX_STATE (COND_JUMP86, BIG16):
7157 extension = 4;
7158 opcode[0] ^= 1;
7159 opcode[1] = 3;
7160 opcode[2] = 0xe9;
7161 where_to_put_displacement = &opcode[3];
7162 break;
7164 default:
7165 BAD_CASE (fragP->fr_subtype);
7166 break;
7170 /* If size if less then four we are sure that the operand fits,
7171 but if it's 4, then it could be that the displacement is larger
7172 then -/+ 2GB. */
7173 if (DISP_SIZE_FROM_RELAX_STATE (fragP->fr_subtype) == 4
7174 && object_64bit
7175 && ((addressT) (displacement_from_opcode_start - extension
7176 + ((addressT) 1 << 31))
7177 > (((addressT) 2 << 31) - 1)))
7179 as_bad_where (fragP->fr_file, fragP->fr_line,
7180 _("jump target out of range"));
7181 /* Make us emit 0. */
7182 displacement_from_opcode_start = extension;
7184 /* Now put displacement after opcode. */
7185 md_number_to_chars ((char *) where_to_put_displacement,
7186 (valueT) (displacement_from_opcode_start - extension),
7187 DISP_SIZE_FROM_RELAX_STATE (fragP->fr_subtype));
7188 fragP->fr_fix += extension;
7191 /* Apply a fixup (fixS) to segment data, once it has been determined
7192 by our caller that we have all the info we need to fix it up.
7194 On the 386, immediates, displacements, and data pointers are all in
7195 the same (little-endian) format, so we don't need to care about which
7196 we are handling. */
7198 void
7199 md_apply_fix (fixP, valP, seg)
7200 /* The fix we're to put in. */
7201 fixS *fixP;
7202 /* Pointer to the value of the bits. */
7203 valueT *valP;
7204 /* Segment fix is from. */
7205 segT seg ATTRIBUTE_UNUSED;
7207 char *p = fixP->fx_where + fixP->fx_frag->fr_literal;
7208 valueT value = *valP;
7210 #if !defined (TE_Mach)
7211 if (fixP->fx_pcrel)
7213 switch (fixP->fx_r_type)
7215 default:
7216 break;
7218 case BFD_RELOC_64:
7219 fixP->fx_r_type = BFD_RELOC_64_PCREL;
7220 break;
7221 case BFD_RELOC_32:
7222 case BFD_RELOC_X86_64_32S:
7223 fixP->fx_r_type = BFD_RELOC_32_PCREL;
7224 break;
7225 case BFD_RELOC_16:
7226 fixP->fx_r_type = BFD_RELOC_16_PCREL;
7227 break;
7228 case BFD_RELOC_8:
7229 fixP->fx_r_type = BFD_RELOC_8_PCREL;
7230 break;
7234 if (fixP->fx_addsy != NULL
7235 && (fixP->fx_r_type == BFD_RELOC_32_PCREL
7236 || fixP->fx_r_type == BFD_RELOC_64_PCREL
7237 || fixP->fx_r_type == BFD_RELOC_16_PCREL
7238 || fixP->fx_r_type == BFD_RELOC_8_PCREL)
7239 && !use_rela_relocations)
7241 /* This is a hack. There should be a better way to handle this.
7242 This covers for the fact that bfd_install_relocation will
7243 subtract the current location (for partial_inplace, PC relative
7244 relocations); see more below. */
7245 #ifndef OBJ_AOUT
7246 if (IS_ELF
7247 #ifdef TE_PE
7248 || OUTPUT_FLAVOR == bfd_target_coff_flavour
7249 #endif
7251 value += fixP->fx_where + fixP->fx_frag->fr_address;
7252 #endif
7253 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7254 if (IS_ELF)
7256 segT sym_seg = S_GET_SEGMENT (fixP->fx_addsy);
7258 if ((sym_seg == seg
7259 || (symbol_section_p (fixP->fx_addsy)
7260 && sym_seg != absolute_section))
7261 && !TC_FORCE_RELOCATION (fixP))
7263 /* Yes, we add the values in twice. This is because
7264 bfd_install_relocation subtracts them out again. I think
7265 bfd_install_relocation is broken, but I don't dare change
7266 it. FIXME. */
7267 value += fixP->fx_where + fixP->fx_frag->fr_address;
7270 #endif
7271 #if defined (OBJ_COFF) && defined (TE_PE)
7272 /* For some reason, the PE format does not store a
7273 section address offset for a PC relative symbol. */
7274 if (S_GET_SEGMENT (fixP->fx_addsy) != seg
7275 || S_IS_WEAK (fixP->fx_addsy))
7276 value += md_pcrel_from (fixP);
7277 #endif
7279 #if defined (OBJ_COFF) && defined (TE_PE)
7280 if (fixP->fx_addsy != NULL && S_IS_WEAK (fixP->fx_addsy))
7282 value -= S_GET_VALUE (fixP->fx_addsy);
7284 #endif
7286 /* Fix a few things - the dynamic linker expects certain values here,
7287 and we must not disappoint it. */
7288 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7289 if (IS_ELF && fixP->fx_addsy)
7290 switch (fixP->fx_r_type)
7292 case BFD_RELOC_386_PLT32:
7293 case BFD_RELOC_X86_64_PLT32:
7294 /* Make the jump instruction point to the address of the operand. At
7295 runtime we merely add the offset to the actual PLT entry. */
7296 value = -4;
7297 break;
7299 case BFD_RELOC_386_TLS_GD:
7300 case BFD_RELOC_386_TLS_LDM:
7301 case BFD_RELOC_386_TLS_IE_32:
7302 case BFD_RELOC_386_TLS_IE:
7303 case BFD_RELOC_386_TLS_GOTIE:
7304 case BFD_RELOC_386_TLS_GOTDESC:
7305 case BFD_RELOC_X86_64_TLSGD:
7306 case BFD_RELOC_X86_64_TLSLD:
7307 case BFD_RELOC_X86_64_GOTTPOFF:
7308 case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
7309 value = 0; /* Fully resolved at runtime. No addend. */
7310 /* Fallthrough */
7311 case BFD_RELOC_386_TLS_LE:
7312 case BFD_RELOC_386_TLS_LDO_32:
7313 case BFD_RELOC_386_TLS_LE_32:
7314 case BFD_RELOC_X86_64_DTPOFF32:
7315 case BFD_RELOC_X86_64_DTPOFF64:
7316 case BFD_RELOC_X86_64_TPOFF32:
7317 case BFD_RELOC_X86_64_TPOFF64:
7318 S_SET_THREAD_LOCAL (fixP->fx_addsy);
7319 break;
7321 case BFD_RELOC_386_TLS_DESC_CALL:
7322 case BFD_RELOC_X86_64_TLSDESC_CALL:
7323 value = 0; /* Fully resolved at runtime. No addend. */
7324 S_SET_THREAD_LOCAL (fixP->fx_addsy);
7325 fixP->fx_done = 0;
7326 return;
7328 case BFD_RELOC_386_GOT32:
7329 case BFD_RELOC_X86_64_GOT32:
7330 value = 0; /* Fully resolved at runtime. No addend. */
7331 break;
7333 case BFD_RELOC_VTABLE_INHERIT:
7334 case BFD_RELOC_VTABLE_ENTRY:
7335 fixP->fx_done = 0;
7336 return;
7338 default:
7339 break;
7341 #endif /* defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) */
7342 *valP = value;
7343 #endif /* !defined (TE_Mach) */
7345 /* Are we finished with this relocation now? */
7346 if (fixP->fx_addsy == NULL)
7347 fixP->fx_done = 1;
7348 #if defined (OBJ_COFF) && defined (TE_PE)
7349 else if (fixP->fx_addsy != NULL && S_IS_WEAK (fixP->fx_addsy))
7351 fixP->fx_done = 0;
7352 /* Remember value for tc_gen_reloc. */
7353 fixP->fx_addnumber = value;
7354 /* Clear out the frag for now. */
7355 value = 0;
7357 #endif
7358 else if (use_rela_relocations)
7360 fixP->fx_no_overflow = 1;
7361 /* Remember value for tc_gen_reloc. */
7362 fixP->fx_addnumber = value;
7363 value = 0;
7366 md_number_to_chars (p, value, fixP->fx_size);
7369 char *
7370 md_atof (int type, char *litP, int *sizeP)
7372 /* This outputs the LITTLENUMs in REVERSE order;
7373 in accord with the bigendian 386. */
7374 return ieee_md_atof (type, litP, sizeP, FALSE);
7377 static char output_invalid_buf[sizeof (unsigned char) * 2 + 6];
7379 static char *
7380 output_invalid (int c)
7382 if (ISPRINT (c))
7383 snprintf (output_invalid_buf, sizeof (output_invalid_buf),
7384 "'%c'", c);
7385 else
7386 snprintf (output_invalid_buf, sizeof (output_invalid_buf),
7387 "(0x%x)", (unsigned char) c);
7388 return output_invalid_buf;
7391 /* REG_STRING starts *before* REGISTER_PREFIX. */
7393 static const reg_entry *
7394 parse_real_register (char *reg_string, char **end_op)
7396 char *s = reg_string;
7397 char *p;
7398 char reg_name_given[MAX_REG_NAME_SIZE + 1];
7399 const reg_entry *r;
7401 /* Skip possible REGISTER_PREFIX and possible whitespace. */
7402 if (*s == REGISTER_PREFIX)
7403 ++s;
7405 if (is_space_char (*s))
7406 ++s;
7408 p = reg_name_given;
7409 while ((*p++ = register_chars[(unsigned char) *s]) != '\0')
7411 if (p >= reg_name_given + MAX_REG_NAME_SIZE)
7412 return (const reg_entry *) NULL;
7413 s++;
7416 /* For naked regs, make sure that we are not dealing with an identifier.
7417 This prevents confusing an identifier like `eax_var' with register
7418 `eax'. */
7419 if (allow_naked_reg && identifier_chars[(unsigned char) *s])
7420 return (const reg_entry *) NULL;
7422 *end_op = s;
7424 r = (const reg_entry *) hash_find (reg_hash, reg_name_given);
7426 /* Handle floating point regs, allowing spaces in the (i) part. */
7427 if (r == i386_regtab /* %st is first entry of table */)
7429 if (is_space_char (*s))
7430 ++s;
7431 if (*s == '(')
7433 ++s;
7434 if (is_space_char (*s))
7435 ++s;
7436 if (*s >= '0' && *s <= '7')
7438 int fpr = *s - '0';
7439 ++s;
7440 if (is_space_char (*s))
7441 ++s;
7442 if (*s == ')')
7444 *end_op = s + 1;
7445 r = hash_find (reg_hash, "st(0)");
7446 know (r);
7447 return r + fpr;
7450 /* We have "%st(" then garbage. */
7451 return (const reg_entry *) NULL;
7455 if (r == NULL || allow_pseudo_reg)
7456 return r;
7458 if (operand_type_all_zero (&r->reg_type))
7459 return (const reg_entry *) NULL;
7461 if ((r->reg_type.bitfield.reg32
7462 || r->reg_type.bitfield.sreg3
7463 || r->reg_type.bitfield.control
7464 || r->reg_type.bitfield.debug
7465 || r->reg_type.bitfield.test)
7466 && !cpu_arch_flags.bitfield.cpui386)
7467 return (const reg_entry *) NULL;
7469 if (r->reg_type.bitfield.regmmx && !cpu_arch_flags.bitfield.cpummx)
7470 return (const reg_entry *) NULL;
7472 if (r->reg_type.bitfield.regxmm && !cpu_arch_flags.bitfield.cpusse)
7473 return (const reg_entry *) NULL;
7475 if (r->reg_type.bitfield.regymm && !cpu_arch_flags.bitfield.cpuavx)
7476 return (const reg_entry *) NULL;
7478 /* Don't allow fake index register unless allow_index_reg isn't 0. */
7479 if (!allow_index_reg
7480 && (r->reg_num == RegEiz || r->reg_num == RegRiz))
7481 return (const reg_entry *) NULL;
7483 if (((r->reg_flags & (RegRex64 | RegRex))
7484 || r->reg_type.bitfield.reg64)
7485 && (!cpu_arch_flags.bitfield.cpulm
7486 || !operand_type_equal (&r->reg_type, &control))
7487 && flag_code != CODE_64BIT)
7488 return (const reg_entry *) NULL;
7490 if (r->reg_type.bitfield.sreg3 && r->reg_num == RegFlat && !intel_syntax)
7491 return (const reg_entry *) NULL;
7493 return r;
7496 /* REG_STRING starts *before* REGISTER_PREFIX. */
7498 static const reg_entry *
7499 parse_register (char *reg_string, char **end_op)
7501 const reg_entry *r;
7503 if (*reg_string == REGISTER_PREFIX || allow_naked_reg)
7504 r = parse_real_register (reg_string, end_op);
7505 else
7506 r = NULL;
7507 if (!r)
7509 char *save = input_line_pointer;
7510 char c;
7511 symbolS *symbolP;
7513 input_line_pointer = reg_string;
7514 c = get_symbol_end ();
7515 symbolP = symbol_find (reg_string);
7516 if (symbolP && S_GET_SEGMENT (symbolP) == reg_section)
7518 const expressionS *e = symbol_get_value_expression (symbolP);
7520 know (e->X_op == O_register);
7521 know (e->X_add_number >= 0
7522 && (valueT) e->X_add_number < i386_regtab_size);
7523 r = i386_regtab + e->X_add_number;
7524 *end_op = input_line_pointer;
7526 *input_line_pointer = c;
7527 input_line_pointer = save;
7529 return r;
7533 i386_parse_name (char *name, expressionS *e, char *nextcharP)
7535 const reg_entry *r;
7536 char *end = input_line_pointer;
7538 *end = *nextcharP;
7539 r = parse_register (name, &input_line_pointer);
7540 if (r && end <= input_line_pointer)
7542 *nextcharP = *input_line_pointer;
7543 *input_line_pointer = 0;
7544 e->X_op = O_register;
7545 e->X_add_number = r - i386_regtab;
7546 return 1;
7548 input_line_pointer = end;
7549 *end = 0;
7550 return intel_syntax ? i386_intel_parse_name (name, e) : 0;
7553 void
7554 md_operand (expressionS *e)
7556 char *end;
7557 const reg_entry *r;
7559 switch (*input_line_pointer)
7561 case REGISTER_PREFIX:
7562 r = parse_real_register (input_line_pointer, &end);
7563 if (r)
7565 e->X_op = O_register;
7566 e->X_add_number = r - i386_regtab;
7567 input_line_pointer = end;
7569 break;
7571 case '[':
7572 gas_assert (intel_syntax);
7573 end = input_line_pointer++;
7574 expression (e);
7575 if (*input_line_pointer == ']')
7577 ++input_line_pointer;
7578 e->X_op_symbol = make_expr_symbol (e);
7579 e->X_add_symbol = NULL;
7580 e->X_add_number = 0;
7581 e->X_op = O_index;
7583 else
7585 e->X_op = O_absent;
7586 input_line_pointer = end;
7588 break;
7593 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7594 const char *md_shortopts = "kVQ:sqn";
7595 #else
7596 const char *md_shortopts = "qn";
7597 #endif
7599 #define OPTION_32 (OPTION_MD_BASE + 0)
7600 #define OPTION_64 (OPTION_MD_BASE + 1)
7601 #define OPTION_DIVIDE (OPTION_MD_BASE + 2)
7602 #define OPTION_MARCH (OPTION_MD_BASE + 3)
7603 #define OPTION_MTUNE (OPTION_MD_BASE + 4)
7604 #define OPTION_MMNEMONIC (OPTION_MD_BASE + 5)
7605 #define OPTION_MSYNTAX (OPTION_MD_BASE + 6)
7606 #define OPTION_MINDEX_REG (OPTION_MD_BASE + 7)
7607 #define OPTION_MNAKED_REG (OPTION_MD_BASE + 8)
7608 #define OPTION_MOLD_GCC (OPTION_MD_BASE + 9)
7609 #define OPTION_MSSE2AVX (OPTION_MD_BASE + 10)
7610 #define OPTION_MSSE_CHECK (OPTION_MD_BASE + 11)
7612 struct option md_longopts[] =
7614 {"32", no_argument, NULL, OPTION_32},
7615 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
7616 || defined (TE_PE) || defined (TE_PEP))
7617 {"64", no_argument, NULL, OPTION_64},
7618 #endif
7619 {"divide", no_argument, NULL, OPTION_DIVIDE},
7620 {"march", required_argument, NULL, OPTION_MARCH},
7621 {"mtune", required_argument, NULL, OPTION_MTUNE},
7622 {"mmnemonic", required_argument, NULL, OPTION_MMNEMONIC},
7623 {"msyntax", required_argument, NULL, OPTION_MSYNTAX},
7624 {"mindex-reg", no_argument, NULL, OPTION_MINDEX_REG},
7625 {"mnaked-reg", no_argument, NULL, OPTION_MNAKED_REG},
7626 {"mold-gcc", no_argument, NULL, OPTION_MOLD_GCC},
7627 {"msse2avx", no_argument, NULL, OPTION_MSSE2AVX},
7628 {"msse-check", required_argument, NULL, OPTION_MSSE_CHECK},
7629 {NULL, no_argument, NULL, 0}
7631 size_t md_longopts_size = sizeof (md_longopts);
7634 md_parse_option (int c, char *arg)
7636 unsigned int i;
7637 char *arch, *next;
7639 switch (c)
7641 case 'n':
7642 optimize_align_code = 0;
7643 break;
7645 case 'q':
7646 quiet_warnings = 1;
7647 break;
7649 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7650 /* -Qy, -Qn: SVR4 arguments controlling whether a .comment section
7651 should be emitted or not. FIXME: Not implemented. */
7652 case 'Q':
7653 break;
7655 /* -V: SVR4 argument to print version ID. */
7656 case 'V':
7657 print_version_id ();
7658 break;
7660 /* -k: Ignore for FreeBSD compatibility. */
7661 case 'k':
7662 break;
7664 case 's':
7665 /* -s: On i386 Solaris, this tells the native assembler to use
7666 .stab instead of .stab.excl. We always use .stab anyhow. */
7667 break;
7668 #endif
7669 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
7670 || defined (TE_PE) || defined (TE_PEP))
7671 case OPTION_64:
7673 const char **list, **l;
7675 list = bfd_target_list ();
7676 for (l = list; *l != NULL; l++)
7677 if (CONST_STRNEQ (*l, "elf64-x86-64")
7678 || strcmp (*l, "coff-x86-64") == 0
7679 || strcmp (*l, "pe-x86-64") == 0
7680 || strcmp (*l, "pei-x86-64") == 0)
7682 default_arch = "x86_64";
7683 break;
7685 if (*l == NULL)
7686 as_fatal (_("No compiled in support for x86_64"));
7687 free (list);
7689 break;
7690 #endif
7692 case OPTION_32:
7693 default_arch = "i386";
7694 break;
7696 case OPTION_DIVIDE:
7697 #ifdef SVR4_COMMENT_CHARS
7699 char *n, *t;
7700 const char *s;
7702 n = (char *) xmalloc (strlen (i386_comment_chars) + 1);
7703 t = n;
7704 for (s = i386_comment_chars; *s != '\0'; s++)
7705 if (*s != '/')
7706 *t++ = *s;
7707 *t = '\0';
7708 i386_comment_chars = n;
7710 #endif
7711 break;
7713 case OPTION_MARCH:
7714 arch = xstrdup (arg);
7717 if (*arch == '.')
7718 as_fatal (_("Invalid -march= option: `%s'"), arg);
7719 next = strchr (arch, '+');
7720 if (next)
7721 *next++ = '\0';
7722 for (i = 0; i < ARRAY_SIZE (cpu_arch); i++)
7724 if (strcmp (arch, cpu_arch [i].name) == 0)
7726 /* Processor. */
7727 cpu_arch_name = cpu_arch[i].name;
7728 cpu_sub_arch_name = NULL;
7729 cpu_arch_flags = cpu_arch[i].flags;
7730 cpu_arch_isa = cpu_arch[i].type;
7731 cpu_arch_isa_flags = cpu_arch[i].flags;
7732 if (!cpu_arch_tune_set)
7734 cpu_arch_tune = cpu_arch_isa;
7735 cpu_arch_tune_flags = cpu_arch_isa_flags;
7737 break;
7739 else if (*cpu_arch [i].name == '.'
7740 && strcmp (arch, cpu_arch [i].name + 1) == 0)
7742 /* ISA entension. */
7743 i386_cpu_flags flags;
7744 flags = cpu_flags_or (cpu_arch_flags,
7745 cpu_arch[i].flags);
7746 if (!cpu_flags_equal (&flags, &cpu_arch_flags))
7748 if (cpu_sub_arch_name)
7750 char *name = cpu_sub_arch_name;
7751 cpu_sub_arch_name = concat (name,
7752 cpu_arch[i].name,
7753 (const char *) NULL);
7754 free (name);
7756 else
7757 cpu_sub_arch_name = xstrdup (cpu_arch[i].name);
7758 cpu_arch_flags = flags;
7760 break;
7764 if (i >= ARRAY_SIZE (cpu_arch))
7765 as_fatal (_("Invalid -march= option: `%s'"), arg);
7767 arch = next;
7769 while (next != NULL );
7770 break;
7772 case OPTION_MTUNE:
7773 if (*arg == '.')
7774 as_fatal (_("Invalid -mtune= option: `%s'"), arg);
7775 for (i = 0; i < ARRAY_SIZE (cpu_arch); i++)
7777 if (strcmp (arg, cpu_arch [i].name) == 0)
7779 cpu_arch_tune_set = 1;
7780 cpu_arch_tune = cpu_arch [i].type;
7781 cpu_arch_tune_flags = cpu_arch[i].flags;
7782 break;
7785 if (i >= ARRAY_SIZE (cpu_arch))
7786 as_fatal (_("Invalid -mtune= option: `%s'"), arg);
7787 break;
7789 case OPTION_MMNEMONIC:
7790 if (strcasecmp (arg, "att") == 0)
7791 intel_mnemonic = 0;
7792 else if (strcasecmp (arg, "intel") == 0)
7793 intel_mnemonic = 1;
7794 else
7795 as_fatal (_("Invalid -mmnemonic= option: `%s'"), arg);
7796 break;
7798 case OPTION_MSYNTAX:
7799 if (strcasecmp (arg, "att") == 0)
7800 intel_syntax = 0;
7801 else if (strcasecmp (arg, "intel") == 0)
7802 intel_syntax = 1;
7803 else
7804 as_fatal (_("Invalid -msyntax= option: `%s'"), arg);
7805 break;
7807 case OPTION_MINDEX_REG:
7808 allow_index_reg = 1;
7809 break;
7811 case OPTION_MNAKED_REG:
7812 allow_naked_reg = 1;
7813 break;
7815 case OPTION_MOLD_GCC:
7816 old_gcc = 1;
7817 break;
7819 case OPTION_MSSE2AVX:
7820 sse2avx = 1;
7821 break;
7823 case OPTION_MSSE_CHECK:
7824 if (strcasecmp (arg, "error") == 0)
7825 sse_check = sse_check_error;
7826 else if (strcasecmp (arg, "warning") == 0)
7827 sse_check = sse_check_warning;
7828 else if (strcasecmp (arg, "none") == 0)
7829 sse_check = sse_check_none;
7830 else
7831 as_fatal (_("Invalid -msse-check= option: `%s'"), arg);
7832 break;
7834 default:
7835 return 0;
7837 return 1;
7840 void
7841 md_show_usage (stream)
7842 FILE *stream;
7844 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7845 fprintf (stream, _("\
7846 -Q ignored\n\
7847 -V print assembler version number\n\
7848 -k ignored\n"));
7849 #endif
7850 fprintf (stream, _("\
7851 -n Do not optimize code alignment\n\
7852 -q quieten some warnings\n"));
7853 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7854 fprintf (stream, _("\
7855 -s ignored\n"));
7856 #endif
7857 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
7858 || defined (TE_PE) || defined (TE_PEP))
7859 fprintf (stream, _("\
7860 --32/--64 generate 32bit/64bit code\n"));
7861 #endif
7862 #ifdef SVR4_COMMENT_CHARS
7863 fprintf (stream, _("\
7864 --divide do not treat `/' as a comment character\n"));
7865 #else
7866 fprintf (stream, _("\
7867 --divide ignored\n"));
7868 #endif
7869 fprintf (stream, _("\
7870 -march=CPU[,+EXTENSION...]\n\
7871 generate code for CPU and EXTENSION, CPU is one of:\n\
7872 i8086, i186, i286, i386, i486, pentium, pentiumpro,\n\
7873 pentiumii, pentiumiii, pentium4, prescott, nocona,\n\
7874 core, core2, corei7, k6, k6_2, athlon, k8, amdfam10,\n\
7875 generic32, generic64\n\
7876 EXTENSION is combination of:\n\
7877 mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, sse4,\n\
7878 avx, vmx, smx, xsave, movbe, ept, aes, pclmul, fma,\n\
7879 clflush, syscall, rdtscp, 3dnow, 3dnowa, sse4a,\n\
7880 svme, abm, padlock, fma4\n"));
7881 fprintf (stream, _("\
7882 -mtune=CPU optimize for CPU, CPU is one of:\n\
7883 i8086, i186, i286, i386, i486, pentium, pentiumpro,\n\
7884 pentiumii, pentiumiii, pentium4, prescott, nocona,\n\
7885 core, core2, corei7, k6, k6_2, athlon, k8, amdfam10,\n\
7886 generic32, generic64\n"));
7887 fprintf (stream, _("\
7888 -msse2avx encode SSE instructions with VEX prefix\n"));
7889 fprintf (stream, _("\
7890 -msse-check=[none|error|warning]\n\
7891 check SSE instructions\n"));
7892 fprintf (stream, _("\
7893 -mmnemonic=[att|intel] use AT&T/Intel mnemonic\n"));
7894 fprintf (stream, _("\
7895 -msyntax=[att|intel] use AT&T/Intel syntax\n"));
7896 fprintf (stream, _("\
7897 -mindex-reg support pseudo index registers\n"));
7898 fprintf (stream, _("\
7899 -mnaked-reg don't require `%%' prefix for registers\n"));
7900 fprintf (stream, _("\
7901 -mold-gcc support old (<= 2.8.1) versions of gcc\n"));
7904 #if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \
7905 || defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
7906 || defined (TE_PE) || defined (TE_PEP) || defined (OBJ_MACH_O))
7908 /* Pick the target format to use. */
7910 const char *
7911 i386_target_format (void)
7913 if (!strcmp (default_arch, "x86_64"))
7915 set_code_flag (CODE_64BIT);
7916 if (cpu_flags_all_zero (&cpu_arch_isa_flags))
7918 cpu_arch_isa_flags.bitfield.cpui186 = 1;
7919 cpu_arch_isa_flags.bitfield.cpui286 = 1;
7920 cpu_arch_isa_flags.bitfield.cpui386 = 1;
7921 cpu_arch_isa_flags.bitfield.cpui486 = 1;
7922 cpu_arch_isa_flags.bitfield.cpui586 = 1;
7923 cpu_arch_isa_flags.bitfield.cpui686 = 1;
7924 cpu_arch_isa_flags.bitfield.cpuclflush = 1;
7925 cpu_arch_isa_flags.bitfield.cpummx= 1;
7926 cpu_arch_isa_flags.bitfield.cpusse = 1;
7927 cpu_arch_isa_flags.bitfield.cpusse2 = 1;
7929 if (cpu_flags_all_zero (&cpu_arch_tune_flags))
7931 cpu_arch_tune_flags.bitfield.cpui186 = 1;
7932 cpu_arch_tune_flags.bitfield.cpui286 = 1;
7933 cpu_arch_tune_flags.bitfield.cpui386 = 1;
7934 cpu_arch_tune_flags.bitfield.cpui486 = 1;
7935 cpu_arch_tune_flags.bitfield.cpui586 = 1;
7936 cpu_arch_tune_flags.bitfield.cpui686 = 1;
7937 cpu_arch_tune_flags.bitfield.cpuclflush = 1;
7938 cpu_arch_tune_flags.bitfield.cpummx= 1;
7939 cpu_arch_tune_flags.bitfield.cpusse = 1;
7940 cpu_arch_tune_flags.bitfield.cpusse2 = 1;
7943 else if (!strcmp (default_arch, "i386"))
7945 set_code_flag (CODE_32BIT);
7946 if (cpu_flags_all_zero (&cpu_arch_isa_flags))
7948 cpu_arch_isa_flags.bitfield.cpui186 = 1;
7949 cpu_arch_isa_flags.bitfield.cpui286 = 1;
7950 cpu_arch_isa_flags.bitfield.cpui386 = 1;
7952 if (cpu_flags_all_zero (&cpu_arch_tune_flags))
7954 cpu_arch_tune_flags.bitfield.cpui186 = 1;
7955 cpu_arch_tune_flags.bitfield.cpui286 = 1;
7956 cpu_arch_tune_flags.bitfield.cpui386 = 1;
7959 else
7960 as_fatal (_("Unknown architecture"));
7961 switch (OUTPUT_FLAVOR)
7963 #if defined (TE_PE) || defined (TE_PEP)
7964 case bfd_target_coff_flavour:
7965 return flag_code == CODE_64BIT ? "pe-x86-64" : "pe-i386";
7966 #endif
7967 #ifdef OBJ_MAYBE_AOUT
7968 case bfd_target_aout_flavour:
7969 return AOUT_TARGET_FORMAT;
7970 #endif
7971 #ifdef OBJ_MAYBE_COFF
7972 case bfd_target_coff_flavour:
7973 return "coff-i386";
7974 #endif
7975 #if defined (OBJ_MAYBE_ELF) || defined (OBJ_ELF)
7976 case bfd_target_elf_flavour:
7978 if (flag_code == CODE_64BIT)
7980 object_64bit = 1;
7981 use_rela_relocations = 1;
7983 return flag_code == CODE_64BIT ? ELF_TARGET_FORMAT64 : ELF_TARGET_FORMAT;
7985 #endif
7986 #if defined (OBJ_MACH_O)
7987 case bfd_target_mach_o_flavour:
7988 return flag_code == CODE_64BIT ? "mach-o-x86-64" : "mach-o-i386";
7989 #endif
7990 default:
7991 abort ();
7992 return NULL;
7996 #endif /* OBJ_MAYBE_ more than one */
7998 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF))
7999 void
8000 i386_elf_emit_arch_note (void)
8002 if (IS_ELF && cpu_arch_name != NULL)
8004 char *p;
8005 asection *seg = now_seg;
8006 subsegT subseg = now_subseg;
8007 Elf_Internal_Note i_note;
8008 Elf_External_Note e_note;
8009 asection *note_secp;
8010 int len;
8012 /* Create the .note section. */
8013 note_secp = subseg_new (".note", 0);
8014 bfd_set_section_flags (stdoutput,
8015 note_secp,
8016 SEC_HAS_CONTENTS | SEC_READONLY);
8018 /* Process the arch string. */
8019 len = strlen (cpu_arch_name);
8021 i_note.namesz = len + 1;
8022 i_note.descsz = 0;
8023 i_note.type = NT_ARCH;
8024 p = frag_more (sizeof (e_note.namesz));
8025 md_number_to_chars (p, (valueT) i_note.namesz, sizeof (e_note.namesz));
8026 p = frag_more (sizeof (e_note.descsz));
8027 md_number_to_chars (p, (valueT) i_note.descsz, sizeof (e_note.descsz));
8028 p = frag_more (sizeof (e_note.type));
8029 md_number_to_chars (p, (valueT) i_note.type, sizeof (e_note.type));
8030 p = frag_more (len + 1);
8031 strcpy (p, cpu_arch_name);
8033 frag_align (2, 0, 0);
8035 subseg_set (seg, subseg);
8038 #endif
8040 symbolS *
8041 md_undefined_symbol (name)
8042 char *name;
8044 if (name[0] == GLOBAL_OFFSET_TABLE_NAME[0]
8045 && name[1] == GLOBAL_OFFSET_TABLE_NAME[1]
8046 && name[2] == GLOBAL_OFFSET_TABLE_NAME[2]
8047 && strcmp (name, GLOBAL_OFFSET_TABLE_NAME) == 0)
8049 if (!GOT_symbol)
8051 if (symbol_find (name))
8052 as_bad (_("GOT already in symbol table"));
8053 GOT_symbol = symbol_new (name, undefined_section,
8054 (valueT) 0, &zero_address_frag);
8056 return GOT_symbol;
8058 return 0;
8061 /* Round up a section size to the appropriate boundary. */
8063 valueT
8064 md_section_align (segment, size)
8065 segT segment ATTRIBUTE_UNUSED;
8066 valueT size;
8068 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
8069 if (OUTPUT_FLAVOR == bfd_target_aout_flavour)
8071 /* For a.out, force the section size to be aligned. If we don't do
8072 this, BFD will align it for us, but it will not write out the
8073 final bytes of the section. This may be a bug in BFD, but it is
8074 easier to fix it here since that is how the other a.out targets
8075 work. */
8076 int align;
8078 align = bfd_get_section_alignment (stdoutput, segment);
8079 size = ((size + (1 << align) - 1) & ((valueT) -1 << align));
8081 #endif
8083 return size;
8086 /* On the i386, PC-relative offsets are relative to the start of the
8087 next instruction. That is, the address of the offset, plus its
8088 size, since the offset is always the last part of the insn. */
8090 long
8091 md_pcrel_from (fixS *fixP)
8093 return fixP->fx_size + fixP->fx_where + fixP->fx_frag->fr_address;
8096 #ifndef I386COFF
8098 static void
8099 s_bss (int ignore ATTRIBUTE_UNUSED)
8101 int temp;
8103 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8104 if (IS_ELF)
8105 obj_elf_section_change_hook ();
8106 #endif
8107 temp = get_absolute_expression ();
8108 subseg_set (bss_section, (subsegT) temp);
8109 demand_empty_rest_of_line ();
8112 #endif
8114 void
8115 i386_validate_fix (fixS *fixp)
8117 if (fixp->fx_subsy && fixp->fx_subsy == GOT_symbol)
8119 if (fixp->fx_r_type == BFD_RELOC_32_PCREL)
8121 if (!object_64bit)
8122 abort ();
8123 fixp->fx_r_type = BFD_RELOC_X86_64_GOTPCREL;
8125 else
8127 if (!object_64bit)
8128 fixp->fx_r_type = BFD_RELOC_386_GOTOFF;
8129 else
8130 fixp->fx_r_type = BFD_RELOC_X86_64_GOTOFF64;
8132 fixp->fx_subsy = 0;
8136 arelent *
8137 tc_gen_reloc (section, fixp)
8138 asection *section ATTRIBUTE_UNUSED;
8139 fixS *fixp;
8141 arelent *rel;
8142 bfd_reloc_code_real_type code;
8144 switch (fixp->fx_r_type)
8146 case BFD_RELOC_X86_64_PLT32:
8147 case BFD_RELOC_X86_64_GOT32:
8148 case BFD_RELOC_X86_64_GOTPCREL:
8149 case BFD_RELOC_386_PLT32:
8150 case BFD_RELOC_386_GOT32:
8151 case BFD_RELOC_386_GOTOFF:
8152 case BFD_RELOC_386_GOTPC:
8153 case BFD_RELOC_386_TLS_GD:
8154 case BFD_RELOC_386_TLS_LDM:
8155 case BFD_RELOC_386_TLS_LDO_32:
8156 case BFD_RELOC_386_TLS_IE_32:
8157 case BFD_RELOC_386_TLS_IE:
8158 case BFD_RELOC_386_TLS_GOTIE:
8159 case BFD_RELOC_386_TLS_LE_32:
8160 case BFD_RELOC_386_TLS_LE:
8161 case BFD_RELOC_386_TLS_GOTDESC:
8162 case BFD_RELOC_386_TLS_DESC_CALL:
8163 case BFD_RELOC_X86_64_TLSGD:
8164 case BFD_RELOC_X86_64_TLSLD:
8165 case BFD_RELOC_X86_64_DTPOFF32:
8166 case BFD_RELOC_X86_64_DTPOFF64:
8167 case BFD_RELOC_X86_64_GOTTPOFF:
8168 case BFD_RELOC_X86_64_TPOFF32:
8169 case BFD_RELOC_X86_64_TPOFF64:
8170 case BFD_RELOC_X86_64_GOTOFF64:
8171 case BFD_RELOC_X86_64_GOTPC32:
8172 case BFD_RELOC_X86_64_GOT64:
8173 case BFD_RELOC_X86_64_GOTPCREL64:
8174 case BFD_RELOC_X86_64_GOTPC64:
8175 case BFD_RELOC_X86_64_GOTPLT64:
8176 case BFD_RELOC_X86_64_PLTOFF64:
8177 case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
8178 case BFD_RELOC_X86_64_TLSDESC_CALL:
8179 case BFD_RELOC_RVA:
8180 case BFD_RELOC_VTABLE_ENTRY:
8181 case BFD_RELOC_VTABLE_INHERIT:
8182 #ifdef TE_PE
8183 case BFD_RELOC_32_SECREL:
8184 #endif
8185 code = fixp->fx_r_type;
8186 break;
8187 case BFD_RELOC_X86_64_32S:
8188 if (!fixp->fx_pcrel)
8190 /* Don't turn BFD_RELOC_X86_64_32S into BFD_RELOC_32. */
8191 code = fixp->fx_r_type;
8192 break;
8194 default:
8195 if (fixp->fx_pcrel)
8197 switch (fixp->fx_size)
8199 default:
8200 as_bad_where (fixp->fx_file, fixp->fx_line,
8201 _("can not do %d byte pc-relative relocation"),
8202 fixp->fx_size);
8203 code = BFD_RELOC_32_PCREL;
8204 break;
8205 case 1: code = BFD_RELOC_8_PCREL; break;
8206 case 2: code = BFD_RELOC_16_PCREL; break;
8207 case 4: code = BFD_RELOC_32_PCREL; break;
8208 #ifdef BFD64
8209 case 8: code = BFD_RELOC_64_PCREL; break;
8210 #endif
8213 else
8215 switch (fixp->fx_size)
8217 default:
8218 as_bad_where (fixp->fx_file, fixp->fx_line,
8219 _("can not do %d byte relocation"),
8220 fixp->fx_size);
8221 code = BFD_RELOC_32;
8222 break;
8223 case 1: code = BFD_RELOC_8; break;
8224 case 2: code = BFD_RELOC_16; break;
8225 case 4: code = BFD_RELOC_32; break;
8226 #ifdef BFD64
8227 case 8: code = BFD_RELOC_64; break;
8228 #endif
8231 break;
8234 if ((code == BFD_RELOC_32
8235 || code == BFD_RELOC_32_PCREL
8236 || code == BFD_RELOC_X86_64_32S)
8237 && GOT_symbol
8238 && fixp->fx_addsy == GOT_symbol)
8240 if (!object_64bit)
8241 code = BFD_RELOC_386_GOTPC;
8242 else
8243 code = BFD_RELOC_X86_64_GOTPC32;
8245 if ((code == BFD_RELOC_64 || code == BFD_RELOC_64_PCREL)
8246 && GOT_symbol
8247 && fixp->fx_addsy == GOT_symbol)
8249 code = BFD_RELOC_X86_64_GOTPC64;
8252 rel = (arelent *) xmalloc (sizeof (arelent));
8253 rel->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
8254 *rel->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
8256 rel->address = fixp->fx_frag->fr_address + fixp->fx_where;
8258 if (!use_rela_relocations)
8260 /* HACK: Since i386 ELF uses Rel instead of Rela, encode the
8261 vtable entry to be used in the relocation's section offset. */
8262 if (fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
8263 rel->address = fixp->fx_offset;
8264 #if defined (OBJ_COFF) && defined (TE_PE)
8265 else if (fixp->fx_addsy && S_IS_WEAK (fixp->fx_addsy))
8266 rel->addend = fixp->fx_addnumber - (S_GET_VALUE (fixp->fx_addsy) * 2);
8267 else
8268 #endif
8269 rel->addend = 0;
8271 /* Use the rela in 64bit mode. */
8272 else
8274 if (!fixp->fx_pcrel)
8275 rel->addend = fixp->fx_offset;
8276 else
8277 switch (code)
8279 case BFD_RELOC_X86_64_PLT32:
8280 case BFD_RELOC_X86_64_GOT32:
8281 case BFD_RELOC_X86_64_GOTPCREL:
8282 case BFD_RELOC_X86_64_TLSGD:
8283 case BFD_RELOC_X86_64_TLSLD:
8284 case BFD_RELOC_X86_64_GOTTPOFF:
8285 case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
8286 case BFD_RELOC_X86_64_TLSDESC_CALL:
8287 rel->addend = fixp->fx_offset - fixp->fx_size;
8288 break;
8289 default:
8290 rel->addend = (section->vma
8291 - fixp->fx_size
8292 + fixp->fx_addnumber
8293 + md_pcrel_from (fixp));
8294 break;
8298 rel->howto = bfd_reloc_type_lookup (stdoutput, code);
8299 if (rel->howto == NULL)
8301 as_bad_where (fixp->fx_file, fixp->fx_line,
8302 _("cannot represent relocation type %s"),
8303 bfd_get_reloc_code_name (code));
8304 /* Set howto to a garbage value so that we can keep going. */
8305 rel->howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_32);
8306 gas_assert (rel->howto != NULL);
8309 return rel;
8312 #include "tc-i386-intel.c"
8314 void
8315 tc_x86_parse_to_dw2regnum (expressionS *exp)
8317 int saved_naked_reg;
8318 char saved_register_dot;
8320 saved_naked_reg = allow_naked_reg;
8321 allow_naked_reg = 1;
8322 saved_register_dot = register_chars['.'];
8323 register_chars['.'] = '.';
8324 allow_pseudo_reg = 1;
8325 expression_and_evaluate (exp);
8326 allow_pseudo_reg = 0;
8327 register_chars['.'] = saved_register_dot;
8328 allow_naked_reg = saved_naked_reg;
8330 if (exp->X_op == O_register && exp->X_add_number >= 0)
8332 if ((addressT) exp->X_add_number < i386_regtab_size)
8334 exp->X_op = O_constant;
8335 exp->X_add_number = i386_regtab[exp->X_add_number]
8336 .dw2_regnum[flag_code >> 1];
8338 else
8339 exp->X_op = O_illegal;
8343 void
8344 tc_x86_frame_initial_instructions (void)
8346 static unsigned int sp_regno[2];
8348 if (!sp_regno[flag_code >> 1])
8350 char *saved_input = input_line_pointer;
8351 char sp[][4] = {"esp", "rsp"};
8352 expressionS exp;
8354 input_line_pointer = sp[flag_code >> 1];
8355 tc_x86_parse_to_dw2regnum (&exp);
8356 gas_assert (exp.X_op == O_constant);
8357 sp_regno[flag_code >> 1] = exp.X_add_number;
8358 input_line_pointer = saved_input;
8361 cfi_add_CFA_def_cfa (sp_regno[flag_code >> 1], -x86_cie_data_alignment);
8362 cfi_add_CFA_offset (x86_dwarf2_return_column, x86_cie_data_alignment);
8366 i386_elf_section_type (const char *str, size_t len)
8368 if (flag_code == CODE_64BIT
8369 && len == sizeof ("unwind") - 1
8370 && strncmp (str, "unwind", 6) == 0)
8371 return SHT_X86_64_UNWIND;
8373 return -1;
8376 #ifdef TE_SOLARIS
8377 void
8378 i386_solaris_fix_up_eh_frame (segT sec)
8380 if (flag_code == CODE_64BIT)
8381 elf_section_type (sec) = SHT_X86_64_UNWIND;
8383 #endif
8385 #ifdef TE_PE
8386 void
8387 tc_pe_dwarf2_emit_offset (symbolS *symbol, unsigned int size)
8389 expressionS expr;
8391 expr.X_op = O_secrel;
8392 expr.X_add_symbol = symbol;
8393 expr.X_add_number = 0;
8394 emit_expr (&expr, size);
8396 #endif
8398 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8399 /* For ELF on x86-64, add support for SHF_X86_64_LARGE. */
8401 bfd_vma
8402 x86_64_section_letter (int letter, char **ptr_msg)
8404 if (flag_code == CODE_64BIT)
8406 if (letter == 'l')
8407 return SHF_X86_64_LARGE;
8409 *ptr_msg = _("Bad .section directive: want a,l,w,x,M,S,G,T in string");
8411 else
8412 *ptr_msg = _("Bad .section directive: want a,w,x,M,S,G,T in string");
8413 return -1;
8416 bfd_vma
8417 x86_64_section_word (char *str, size_t len)
8419 if (len == 5 && flag_code == CODE_64BIT && CONST_STRNEQ (str, "large"))
8420 return SHF_X86_64_LARGE;
8422 return -1;
8425 static void
8426 handle_large_common (int small ATTRIBUTE_UNUSED)
8428 if (flag_code != CODE_64BIT)
8430 s_comm_internal (0, elf_common_parse);
8431 as_warn (_(".largecomm supported only in 64bit mode, producing .comm"));
8433 else
8435 static segT lbss_section;
8436 asection *saved_com_section_ptr = elf_com_section_ptr;
8437 asection *saved_bss_section = bss_section;
8439 if (lbss_section == NULL)
8441 flagword applicable;
8442 segT seg = now_seg;
8443 subsegT subseg = now_subseg;
8445 /* The .lbss section is for local .largecomm symbols. */
8446 lbss_section = subseg_new (".lbss", 0);
8447 applicable = bfd_applicable_section_flags (stdoutput);
8448 bfd_set_section_flags (stdoutput, lbss_section,
8449 applicable & SEC_ALLOC);
8450 seg_info (lbss_section)->bss = 1;
8452 subseg_set (seg, subseg);
8455 elf_com_section_ptr = &_bfd_elf_large_com_section;
8456 bss_section = lbss_section;
8458 s_comm_internal (0, elf_common_parse);
8460 elf_com_section_ptr = saved_com_section_ptr;
8461 bss_section = saved_bss_section;
8464 #endif /* OBJ_ELF || OBJ_MAYBE_ELF */