gas/
[binutils.git] / gas / config / tc-i386.c
blob5cc82190a8cb67f4ec9bdd8aeab2f4aeece3f119
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, 2010
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 REP_PREFIX, LOCK_PREFIX. */
63 #define WAIT_PREFIX 0
64 #define SEG_PREFIX 1
65 #define ADDR_PREFIX 2
66 #define DATA_PREFIX 3
67 #define REP_PREFIX 4
68 #define LOCK_PREFIX 5
69 #define REX_PREFIX 6 /* must come last. */
70 #define MAX_PREFIXES 7 /* max prefixes per opcode */
72 /* we define the syntax here (modulo base,index,scale syntax) */
73 #define REGISTER_PREFIX '%'
74 #define IMMEDIATE_PREFIX '$'
75 #define ABSOLUTE_PREFIX '*'
77 /* these are the instruction mnemonic suffixes in AT&T syntax or
78 memory operand size in Intel syntax. */
79 #define WORD_MNEM_SUFFIX 'w'
80 #define BYTE_MNEM_SUFFIX 'b'
81 #define SHORT_MNEM_SUFFIX 's'
82 #define LONG_MNEM_SUFFIX 'l'
83 #define QWORD_MNEM_SUFFIX 'q'
84 #define XMMWORD_MNEM_SUFFIX 'x'
85 #define YMMWORD_MNEM_SUFFIX 'y'
86 /* Intel Syntax. Use a non-ascii letter since since it never appears
87 in instructions. */
88 #define LONG_DOUBLE_MNEM_SUFFIX '\1'
90 #define END_OF_INSN '\0'
93 'templates' is for grouping together 'template' structures for opcodes
94 of the same name. This is only used for storing the insns in the grand
95 ole hash table of insns.
96 The templates themselves start at START and range up to (but not including)
97 END.
99 typedef struct
101 const insn_template *start;
102 const insn_template *end;
104 templates;
106 /* 386 operand encoding bytes: see 386 book for details of this. */
107 typedef struct
109 unsigned int regmem; /* codes register or memory operand */
110 unsigned int reg; /* codes register operand (or extended opcode) */
111 unsigned int mode; /* how to interpret regmem & reg */
113 modrm_byte;
115 /* x86-64 extension prefix. */
116 typedef int rex_byte;
118 /* 386 opcode byte to code indirect addressing. */
119 typedef struct
121 unsigned base;
122 unsigned index;
123 unsigned scale;
125 sib_byte;
127 /* x86 arch names, types and features */
128 typedef struct
130 const char *name; /* arch name */
131 unsigned int len; /* arch string length */
132 enum processor_type type; /* arch type */
133 i386_cpu_flags flags; /* cpu feature flags */
134 unsigned int skip; /* show_arch should skip this. */
135 unsigned int negated; /* turn off indicated flags. */
137 arch_entry;
139 static void update_code_flag (int, int);
140 static void set_code_flag (int);
141 static void set_16bit_gcc_code_flag (int);
142 static void set_intel_syntax (int);
143 static void set_intel_mnemonic (int);
144 static void set_allow_index_reg (int);
145 static void set_sse_check (int);
146 static void set_cpu_arch (int);
147 #ifdef TE_PE
148 static void pe_directive_secrel (int);
149 #endif
150 static void signed_cons (int);
151 static char *output_invalid (int c);
152 static int i386_finalize_immediate (segT, expressionS *, i386_operand_type,
153 const char *);
154 static int i386_finalize_displacement (segT, expressionS *, i386_operand_type,
155 const char *);
156 static int i386_att_operand (char *);
157 static int i386_intel_operand (char *, int);
158 static int i386_intel_simplify (expressionS *);
159 static int i386_intel_parse_name (const char *, expressionS *);
160 static const reg_entry *parse_register (char *, char **);
161 static char *parse_insn (char *, char *);
162 static char *parse_operands (char *, const char *);
163 static void swap_operands (void);
164 static void swap_2_operands (int, int);
165 static void optimize_imm (void);
166 static void optimize_disp (void);
167 static const insn_template *match_template (void);
168 static int check_string (void);
169 static int process_suffix (void);
170 static int check_byte_reg (void);
171 static int check_long_reg (void);
172 static int check_qword_reg (void);
173 static int check_word_reg (void);
174 static int finalize_imm (void);
175 static int process_operands (void);
176 static const seg_entry *build_modrm_byte (void);
177 static void output_insn (void);
178 static void output_imm (fragS *, offsetT);
179 static void output_disp (fragS *, offsetT);
180 #ifndef I386COFF
181 static void s_bss (int);
182 #endif
183 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
184 static void handle_large_common (int small ATTRIBUTE_UNUSED);
185 #endif
187 static const char *default_arch = DEFAULT_ARCH;
189 /* VEX prefix. */
190 typedef struct
192 /* VEX prefix is either 2 byte or 3 byte. */
193 unsigned char bytes[3];
194 unsigned int length;
195 /* Destination or source register specifier. */
196 const reg_entry *register_specifier;
197 } vex_prefix;
199 /* 'md_assemble ()' gathers together information and puts it into a
200 i386_insn. */
202 union i386_op
204 expressionS *disps;
205 expressionS *imms;
206 const reg_entry *regs;
209 enum i386_error
211 operand_size_mismatch,
212 operand_type_mismatch,
213 register_type_mismatch,
214 number_of_operands_mismatch,
215 invalid_instruction_suffix,
216 bad_imm4,
217 old_gcc_only,
218 unsupported_with_intel_mnemonic,
219 unsupported_syntax,
220 unsupported
223 struct _i386_insn
225 /* TM holds the template for the insn were currently assembling. */
226 insn_template tm;
228 /* SUFFIX holds the instruction size suffix for byte, word, dword
229 or qword, if given. */
230 char suffix;
232 /* OPERANDS gives the number of given operands. */
233 unsigned int operands;
235 /* REG_OPERANDS, DISP_OPERANDS, MEM_OPERANDS, IMM_OPERANDS give the number
236 of given register, displacement, memory operands and immediate
237 operands. */
238 unsigned int reg_operands, disp_operands, mem_operands, imm_operands;
240 /* TYPES [i] is the type (see above #defines) which tells us how to
241 use OP[i] for the corresponding operand. */
242 i386_operand_type types[MAX_OPERANDS];
244 /* Displacement expression, immediate expression, or register for each
245 operand. */
246 union i386_op op[MAX_OPERANDS];
248 /* Flags for operands. */
249 unsigned int flags[MAX_OPERANDS];
250 #define Operand_PCrel 1
252 /* Relocation type for operand */
253 enum bfd_reloc_code_real reloc[MAX_OPERANDS];
255 /* BASE_REG, INDEX_REG, and LOG2_SCALE_FACTOR are used to encode
256 the base index byte below. */
257 const reg_entry *base_reg;
258 const reg_entry *index_reg;
259 unsigned int log2_scale_factor;
261 /* SEG gives the seg_entries of this insn. They are zero unless
262 explicit segment overrides are given. */
263 const seg_entry *seg[2];
265 /* PREFIX holds all the given prefix opcodes (usually null).
266 PREFIXES is the number of prefix opcodes. */
267 unsigned int prefixes;
268 unsigned char prefix[MAX_PREFIXES];
270 /* RM and SIB are the modrm byte and the sib byte where the
271 addressing modes of this insn are encoded. */
272 modrm_byte rm;
273 rex_byte rex;
274 sib_byte sib;
275 vex_prefix vex;
277 /* Swap operand in encoding. */
278 unsigned int swap_operand;
280 /* Force 32bit displacement in encoding. */
281 unsigned int disp32_encoding;
283 /* Error message. */
284 enum i386_error error;
287 typedef struct _i386_insn i386_insn;
289 /* List of chars besides those in app.c:symbol_chars that can start an
290 operand. Used to prevent the scrubber eating vital white-space. */
291 const char extra_symbol_chars[] = "*%-(["
292 #ifdef LEX_AT
294 #endif
295 #ifdef LEX_QM
297 #endif
300 #if (defined (TE_I386AIX) \
301 || ((defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)) \
302 && !defined (TE_GNU) \
303 && !defined (TE_LINUX) \
304 && !defined (TE_NETWARE) \
305 && !defined (TE_FreeBSD) \
306 && !defined (TE_NetBSD)))
307 /* This array holds the chars that always start a comment. If the
308 pre-processor is disabled, these aren't very useful. The option
309 --divide will remove '/' from this list. */
310 const char *i386_comment_chars = "#/";
311 #define SVR4_COMMENT_CHARS 1
312 #define PREFIX_SEPARATOR '\\'
314 #else
315 const char *i386_comment_chars = "#";
316 #define PREFIX_SEPARATOR '/'
317 #endif
319 /* This array holds the chars that only start a comment at the beginning of
320 a line. If the line seems to have the form '# 123 filename'
321 .line and .file directives will appear in the pre-processed output.
322 Note that input_file.c hand checks for '#' at the beginning of the
323 first line of the input file. This is because the compiler outputs
324 #NO_APP at the beginning of its output.
325 Also note that comments started like this one will always work if
326 '/' isn't otherwise defined. */
327 const char line_comment_chars[] = "#/";
329 const char line_separator_chars[] = ";";
331 /* Chars that can be used to separate mant from exp in floating point
332 nums. */
333 const char EXP_CHARS[] = "eE";
335 /* Chars that mean this number is a floating point constant
336 As in 0f12.456
337 or 0d1.2345e12. */
338 const char FLT_CHARS[] = "fFdDxX";
340 /* Tables for lexical analysis. */
341 static char mnemonic_chars[256];
342 static char register_chars[256];
343 static char operand_chars[256];
344 static char identifier_chars[256];
345 static char digit_chars[256];
347 /* Lexical macros. */
348 #define is_mnemonic_char(x) (mnemonic_chars[(unsigned char) x])
349 #define is_operand_char(x) (operand_chars[(unsigned char) x])
350 #define is_register_char(x) (register_chars[(unsigned char) x])
351 #define is_space_char(x) ((x) == ' ')
352 #define is_identifier_char(x) (identifier_chars[(unsigned char) x])
353 #define is_digit_char(x) (digit_chars[(unsigned char) x])
355 /* All non-digit non-letter characters that may occur in an operand. */
356 static char operand_special_chars[] = "%$-+(,)*._~/<>|&^!:[@]";
358 /* md_assemble() always leaves the strings it's passed unaltered. To
359 effect this we maintain a stack of saved characters that we've smashed
360 with '\0's (indicating end of strings for various sub-fields of the
361 assembler instruction). */
362 static char save_stack[32];
363 static char *save_stack_p;
364 #define END_STRING_AND_SAVE(s) \
365 do { *save_stack_p++ = *(s); *(s) = '\0'; } while (0)
366 #define RESTORE_END_STRING(s) \
367 do { *(s) = *--save_stack_p; } while (0)
369 /* The instruction we're assembling. */
370 static i386_insn i;
372 /* Possible templates for current insn. */
373 static const templates *current_templates;
375 /* Per instruction expressionS buffers: max displacements & immediates. */
376 static expressionS disp_expressions[MAX_MEMORY_OPERANDS];
377 static expressionS im_expressions[MAX_IMMEDIATE_OPERANDS];
379 /* Current operand we are working on. */
380 static int this_operand = -1;
382 /* We support four different modes. FLAG_CODE variable is used to distinguish
383 these. */
385 enum flag_code {
386 CODE_32BIT,
387 CODE_16BIT,
388 CODE_64BIT };
390 static enum flag_code flag_code;
391 static unsigned int object_64bit;
392 static unsigned int disallow_64bit_reloc;
393 static int use_rela_relocations = 0;
395 #if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \
396 || defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
397 || defined (TE_PE) || defined (TE_PEP) || defined (OBJ_MACH_O))
399 /* The ELF ABI to use. */
400 enum x86_elf_abi
402 I386_ABI,
403 X86_64_ABI,
404 X86_64_X32_ABI
407 static enum x86_elf_abi x86_elf_abi = I386_ABI;
408 #endif
410 /* The names used to print error messages. */
411 static const char *flag_code_names[] =
413 "32",
414 "16",
415 "64"
418 /* 1 for intel syntax,
419 0 if att syntax. */
420 static int intel_syntax = 0;
422 /* 1 for intel mnemonic,
423 0 if att mnemonic. */
424 static int intel_mnemonic = !SYSV386_COMPAT;
426 /* 1 if support old (<= 2.8.1) versions of gcc. */
427 static int old_gcc = OLDGCC_COMPAT;
429 /* 1 if pseudo registers are permitted. */
430 static int allow_pseudo_reg = 0;
432 /* 1 if register prefix % not required. */
433 static int allow_naked_reg = 0;
435 /* 1 if pseudo index register, eiz/riz, is allowed . */
436 static int allow_index_reg = 0;
438 static enum
440 sse_check_none = 0,
441 sse_check_warning,
442 sse_check_error
444 sse_check;
446 /* Register prefix used for error message. */
447 static const char *register_prefix = "%";
449 /* Used in 16 bit gcc mode to add an l suffix to call, ret, enter,
450 leave, push, and pop instructions so that gcc has the same stack
451 frame as in 32 bit mode. */
452 static char stackop_size = '\0';
454 /* Non-zero to optimize code alignment. */
455 int optimize_align_code = 1;
457 /* Non-zero to quieten some warnings. */
458 static int quiet_warnings = 0;
460 /* CPU name. */
461 static const char *cpu_arch_name = NULL;
462 static char *cpu_sub_arch_name = NULL;
464 /* CPU feature flags. */
465 static i386_cpu_flags cpu_arch_flags = CPU_UNKNOWN_FLAGS;
467 /* If we have selected a cpu we are generating instructions for. */
468 static int cpu_arch_tune_set = 0;
470 /* Cpu we are generating instructions for. */
471 enum processor_type cpu_arch_tune = PROCESSOR_UNKNOWN;
473 /* CPU feature flags of cpu we are generating instructions for. */
474 static i386_cpu_flags cpu_arch_tune_flags;
476 /* CPU instruction set architecture used. */
477 enum processor_type cpu_arch_isa = PROCESSOR_UNKNOWN;
479 /* CPU feature flags of instruction set architecture used. */
480 i386_cpu_flags cpu_arch_isa_flags;
482 /* If set, conditional jumps are not automatically promoted to handle
483 larger than a byte offset. */
484 static unsigned int no_cond_jump_promotion = 0;
486 /* Encode SSE instructions with VEX prefix. */
487 static unsigned int sse2avx;
489 /* Encode scalar AVX instructions with specific vector length. */
490 static enum
492 vex128 = 0,
493 vex256
494 } avxscalar;
496 /* Pre-defined "_GLOBAL_OFFSET_TABLE_". */
497 static symbolS *GOT_symbol;
499 /* The dwarf2 return column, adjusted for 32 or 64 bit. */
500 unsigned int x86_dwarf2_return_column;
502 /* The dwarf2 data alignment, adjusted for 32 or 64 bit. */
503 int x86_cie_data_alignment;
505 /* Interface to relax_segment.
506 There are 3 major relax states for 386 jump insns because the
507 different types of jumps add different sizes to frags when we're
508 figuring out what sort of jump to choose to reach a given label. */
510 /* Types. */
511 #define UNCOND_JUMP 0
512 #define COND_JUMP 1
513 #define COND_JUMP86 2
515 /* Sizes. */
516 #define CODE16 1
517 #define SMALL 0
518 #define SMALL16 (SMALL | CODE16)
519 #define BIG 2
520 #define BIG16 (BIG | CODE16)
522 #ifndef INLINE
523 #ifdef __GNUC__
524 #define INLINE __inline__
525 #else
526 #define INLINE
527 #endif
528 #endif
530 #define ENCODE_RELAX_STATE(type, size) \
531 ((relax_substateT) (((type) << 2) | (size)))
532 #define TYPE_FROM_RELAX_STATE(s) \
533 ((s) >> 2)
534 #define DISP_SIZE_FROM_RELAX_STATE(s) \
535 ((((s) & 3) == BIG ? 4 : (((s) & 3) == BIG16 ? 2 : 1)))
537 /* This table is used by relax_frag to promote short jumps to long
538 ones where necessary. SMALL (short) jumps may be promoted to BIG
539 (32 bit long) ones, and SMALL16 jumps to BIG16 (16 bit long). We
540 don't allow a short jump in a 32 bit code segment to be promoted to
541 a 16 bit offset jump because it's slower (requires data size
542 prefix), and doesn't work, unless the destination is in the bottom
543 64k of the code segment (The top 16 bits of eip are zeroed). */
545 const relax_typeS md_relax_table[] =
547 /* The fields are:
548 1) most positive reach of this state,
549 2) most negative reach of this state,
550 3) how many bytes this mode will have in the variable part of the frag
551 4) which index into the table to try if we can't fit into this one. */
553 /* UNCOND_JUMP states. */
554 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (UNCOND_JUMP, BIG)},
555 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (UNCOND_JUMP, BIG16)},
556 /* dword jmp adds 4 bytes to frag:
557 0 extra opcode bytes, 4 displacement bytes. */
558 {0, 0, 4, 0},
559 /* word jmp adds 2 byte2 to frag:
560 0 extra opcode bytes, 2 displacement bytes. */
561 {0, 0, 2, 0},
563 /* COND_JUMP states. */
564 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP, BIG)},
565 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP, BIG16)},
566 /* dword conditionals adds 5 bytes to frag:
567 1 extra opcode byte, 4 displacement bytes. */
568 {0, 0, 5, 0},
569 /* word conditionals add 3 bytes to frag:
570 1 extra opcode byte, 2 displacement bytes. */
571 {0, 0, 3, 0},
573 /* COND_JUMP86 states. */
574 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP86, BIG)},
575 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP86, BIG16)},
576 /* dword conditionals adds 5 bytes to frag:
577 1 extra opcode byte, 4 displacement bytes. */
578 {0, 0, 5, 0},
579 /* word conditionals add 4 bytes to frag:
580 1 displacement byte and a 3 byte long branch insn. */
581 {0, 0, 4, 0}
584 static const arch_entry cpu_arch[] =
586 /* Do not replace the first two entries - i386_target_format()
587 relies on them being there in this order. */
588 { STRING_COMMA_LEN ("generic32"), PROCESSOR_GENERIC32,
589 CPU_GENERIC32_FLAGS, 0, 0 },
590 { STRING_COMMA_LEN ("generic64"), PROCESSOR_GENERIC64,
591 CPU_GENERIC64_FLAGS, 0, 0 },
592 { STRING_COMMA_LEN ("i8086"), PROCESSOR_UNKNOWN,
593 CPU_NONE_FLAGS, 0, 0 },
594 { STRING_COMMA_LEN ("i186"), PROCESSOR_UNKNOWN,
595 CPU_I186_FLAGS, 0, 0 },
596 { STRING_COMMA_LEN ("i286"), PROCESSOR_UNKNOWN,
597 CPU_I286_FLAGS, 0, 0 },
598 { STRING_COMMA_LEN ("i386"), PROCESSOR_I386,
599 CPU_I386_FLAGS, 0, 0 },
600 { STRING_COMMA_LEN ("i486"), PROCESSOR_I486,
601 CPU_I486_FLAGS, 0, 0 },
602 { STRING_COMMA_LEN ("i586"), PROCESSOR_PENTIUM,
603 CPU_I586_FLAGS, 0, 0 },
604 { STRING_COMMA_LEN ("i686"), PROCESSOR_PENTIUMPRO,
605 CPU_I686_FLAGS, 0, 0 },
606 { STRING_COMMA_LEN ("pentium"), PROCESSOR_PENTIUM,
607 CPU_I586_FLAGS, 0, 0 },
608 { STRING_COMMA_LEN ("pentiumpro"), PROCESSOR_PENTIUMPRO,
609 CPU_PENTIUMPRO_FLAGS, 0, 0 },
610 { STRING_COMMA_LEN ("pentiumii"), PROCESSOR_PENTIUMPRO,
611 CPU_P2_FLAGS, 0, 0 },
612 { STRING_COMMA_LEN ("pentiumiii"),PROCESSOR_PENTIUMPRO,
613 CPU_P3_FLAGS, 0, 0 },
614 { STRING_COMMA_LEN ("pentium4"), PROCESSOR_PENTIUM4,
615 CPU_P4_FLAGS, 0, 0 },
616 { STRING_COMMA_LEN ("prescott"), PROCESSOR_NOCONA,
617 CPU_CORE_FLAGS, 0, 0 },
618 { STRING_COMMA_LEN ("nocona"), PROCESSOR_NOCONA,
619 CPU_NOCONA_FLAGS, 0, 0 },
620 { STRING_COMMA_LEN ("yonah"), PROCESSOR_CORE,
621 CPU_CORE_FLAGS, 1, 0 },
622 { STRING_COMMA_LEN ("core"), PROCESSOR_CORE,
623 CPU_CORE_FLAGS, 0, 0 },
624 { STRING_COMMA_LEN ("merom"), PROCESSOR_CORE2,
625 CPU_CORE2_FLAGS, 1, 0 },
626 { STRING_COMMA_LEN ("core2"), PROCESSOR_CORE2,
627 CPU_CORE2_FLAGS, 0, 0 },
628 { STRING_COMMA_LEN ("corei7"), PROCESSOR_COREI7,
629 CPU_COREI7_FLAGS, 0, 0 },
630 { STRING_COMMA_LEN ("l1om"), PROCESSOR_L1OM,
631 CPU_L1OM_FLAGS, 0, 0 },
632 { STRING_COMMA_LEN ("k6"), PROCESSOR_K6,
633 CPU_K6_FLAGS, 0, 0 },
634 { STRING_COMMA_LEN ("k6_2"), PROCESSOR_K6,
635 CPU_K6_2_FLAGS, 0, 0 },
636 { STRING_COMMA_LEN ("athlon"), PROCESSOR_ATHLON,
637 CPU_ATHLON_FLAGS, 0, 0 },
638 { STRING_COMMA_LEN ("sledgehammer"), PROCESSOR_K8,
639 CPU_K8_FLAGS, 1, 0 },
640 { STRING_COMMA_LEN ("opteron"), PROCESSOR_K8,
641 CPU_K8_FLAGS, 0, 0 },
642 { STRING_COMMA_LEN ("k8"), PROCESSOR_K8,
643 CPU_K8_FLAGS, 0, 0 },
644 { STRING_COMMA_LEN ("amdfam10"), PROCESSOR_AMDFAM10,
645 CPU_AMDFAM10_FLAGS, 0, 0 },
646 { STRING_COMMA_LEN ("bdver1"), PROCESSOR_BDVER1,
647 CPU_BDVER1_FLAGS, 0, 0 },
648 { STRING_COMMA_LEN (".8087"), PROCESSOR_UNKNOWN,
649 CPU_8087_FLAGS, 0, 0 },
650 { STRING_COMMA_LEN (".287"), PROCESSOR_UNKNOWN,
651 CPU_287_FLAGS, 0, 0 },
652 { STRING_COMMA_LEN (".387"), PROCESSOR_UNKNOWN,
653 CPU_387_FLAGS, 0, 0 },
654 { STRING_COMMA_LEN (".no87"), PROCESSOR_UNKNOWN,
655 CPU_ANY87_FLAGS, 0, 1 },
656 { STRING_COMMA_LEN (".mmx"), PROCESSOR_UNKNOWN,
657 CPU_MMX_FLAGS, 0, 0 },
658 { STRING_COMMA_LEN (".nommx"), PROCESSOR_UNKNOWN,
659 CPU_3DNOWA_FLAGS, 0, 1 },
660 { STRING_COMMA_LEN (".sse"), PROCESSOR_UNKNOWN,
661 CPU_SSE_FLAGS, 0, 0 },
662 { STRING_COMMA_LEN (".sse2"), PROCESSOR_UNKNOWN,
663 CPU_SSE2_FLAGS, 0, 0 },
664 { STRING_COMMA_LEN (".sse3"), PROCESSOR_UNKNOWN,
665 CPU_SSE3_FLAGS, 0, 0 },
666 { STRING_COMMA_LEN (".ssse3"), PROCESSOR_UNKNOWN,
667 CPU_SSSE3_FLAGS, 0, 0 },
668 { STRING_COMMA_LEN (".sse4.1"), PROCESSOR_UNKNOWN,
669 CPU_SSE4_1_FLAGS, 0, 0 },
670 { STRING_COMMA_LEN (".sse4.2"), PROCESSOR_UNKNOWN,
671 CPU_SSE4_2_FLAGS, 0, 0 },
672 { STRING_COMMA_LEN (".sse4"), PROCESSOR_UNKNOWN,
673 CPU_SSE4_2_FLAGS, 0, 0 },
674 { STRING_COMMA_LEN (".nosse"), PROCESSOR_UNKNOWN,
675 CPU_ANY_SSE_FLAGS, 0, 1 },
676 { STRING_COMMA_LEN (".avx"), PROCESSOR_UNKNOWN,
677 CPU_AVX_FLAGS, 0, 0 },
678 { STRING_COMMA_LEN (".noavx"), PROCESSOR_UNKNOWN,
679 CPU_ANY_AVX_FLAGS, 0, 1 },
680 { STRING_COMMA_LEN (".vmx"), PROCESSOR_UNKNOWN,
681 CPU_VMX_FLAGS, 0, 0 },
682 { STRING_COMMA_LEN (".smx"), PROCESSOR_UNKNOWN,
683 CPU_SMX_FLAGS, 0, 0 },
684 { STRING_COMMA_LEN (".xsave"), PROCESSOR_UNKNOWN,
685 CPU_XSAVE_FLAGS, 0, 0 },
686 { STRING_COMMA_LEN (".xsaveopt"), PROCESSOR_UNKNOWN,
687 CPU_XSAVEOPT_FLAGS, 0, 0 },
688 { STRING_COMMA_LEN (".aes"), PROCESSOR_UNKNOWN,
689 CPU_AES_FLAGS, 0, 0 },
690 { STRING_COMMA_LEN (".pclmul"), PROCESSOR_UNKNOWN,
691 CPU_PCLMUL_FLAGS, 0, 0 },
692 { STRING_COMMA_LEN (".clmul"), PROCESSOR_UNKNOWN,
693 CPU_PCLMUL_FLAGS, 1, 0 },
694 { STRING_COMMA_LEN (".fsgsbase"), PROCESSOR_UNKNOWN,
695 CPU_FSGSBASE_FLAGS, 0, 0 },
696 { STRING_COMMA_LEN (".rdrnd"), PROCESSOR_UNKNOWN,
697 CPU_RDRND_FLAGS, 0, 0 },
698 { STRING_COMMA_LEN (".f16c"), PROCESSOR_UNKNOWN,
699 CPU_F16C_FLAGS, 0, 0 },
700 { STRING_COMMA_LEN (".fma"), PROCESSOR_UNKNOWN,
701 CPU_FMA_FLAGS, 0, 0 },
702 { STRING_COMMA_LEN (".fma4"), PROCESSOR_UNKNOWN,
703 CPU_FMA4_FLAGS, 0, 0 },
704 { STRING_COMMA_LEN (".xop"), PROCESSOR_UNKNOWN,
705 CPU_XOP_FLAGS, 0, 0 },
706 { STRING_COMMA_LEN (".lwp"), PROCESSOR_UNKNOWN,
707 CPU_LWP_FLAGS, 0, 0 },
708 { STRING_COMMA_LEN (".movbe"), PROCESSOR_UNKNOWN,
709 CPU_MOVBE_FLAGS, 0, 0 },
710 { STRING_COMMA_LEN (".ept"), PROCESSOR_UNKNOWN,
711 CPU_EPT_FLAGS, 0, 0 },
712 { STRING_COMMA_LEN (".clflush"), PROCESSOR_UNKNOWN,
713 CPU_CLFLUSH_FLAGS, 0, 0 },
714 { STRING_COMMA_LEN (".nop"), PROCESSOR_UNKNOWN,
715 CPU_NOP_FLAGS, 0, 0 },
716 { STRING_COMMA_LEN (".syscall"), PROCESSOR_UNKNOWN,
717 CPU_SYSCALL_FLAGS, 0, 0 },
718 { STRING_COMMA_LEN (".rdtscp"), PROCESSOR_UNKNOWN,
719 CPU_RDTSCP_FLAGS, 0, 0 },
720 { STRING_COMMA_LEN (".3dnow"), PROCESSOR_UNKNOWN,
721 CPU_3DNOW_FLAGS, 0, 0 },
722 { STRING_COMMA_LEN (".3dnowa"), PROCESSOR_UNKNOWN,
723 CPU_3DNOWA_FLAGS, 0, 0 },
724 { STRING_COMMA_LEN (".padlock"), PROCESSOR_UNKNOWN,
725 CPU_PADLOCK_FLAGS, 0, 0 },
726 { STRING_COMMA_LEN (".pacifica"), PROCESSOR_UNKNOWN,
727 CPU_SVME_FLAGS, 1, 0 },
728 { STRING_COMMA_LEN (".svme"), PROCESSOR_UNKNOWN,
729 CPU_SVME_FLAGS, 0, 0 },
730 { STRING_COMMA_LEN (".sse4a"), PROCESSOR_UNKNOWN,
731 CPU_SSE4A_FLAGS, 0, 0 },
732 { STRING_COMMA_LEN (".abm"), PROCESSOR_UNKNOWN,
733 CPU_ABM_FLAGS, 0, 0 },
734 { STRING_COMMA_LEN (".bmi"), PROCESSOR_UNKNOWN,
735 CPU_BMI_FLAGS, 0, 0 },
736 { STRING_COMMA_LEN (".tbm"), PROCESSOR_UNKNOWN,
737 CPU_TBM_FLAGS, 0, 0 },
740 #ifdef I386COFF
741 /* Like s_lcomm_internal in gas/read.c but the alignment string
742 is allowed to be optional. */
744 static symbolS *
745 pe_lcomm_internal (int needs_align, symbolS *symbolP, addressT size)
747 addressT align = 0;
749 SKIP_WHITESPACE ();
751 if (needs_align
752 && *input_line_pointer == ',')
754 align = parse_align (needs_align - 1);
756 if (align == (addressT) -1)
757 return NULL;
759 else
761 if (size >= 8)
762 align = 3;
763 else if (size >= 4)
764 align = 2;
765 else if (size >= 2)
766 align = 1;
767 else
768 align = 0;
771 bss_alloc (symbolP, size, align);
772 return symbolP;
775 static void
776 pe_lcomm (int needs_align)
778 s_comm_internal (needs_align * 2, pe_lcomm_internal);
780 #endif
782 const pseudo_typeS md_pseudo_table[] =
784 #if !defined(OBJ_AOUT) && !defined(USE_ALIGN_PTWO)
785 {"align", s_align_bytes, 0},
786 #else
787 {"align", s_align_ptwo, 0},
788 #endif
789 {"arch", set_cpu_arch, 0},
790 #ifndef I386COFF
791 {"bss", s_bss, 0},
792 #else
793 {"lcomm", pe_lcomm, 1},
794 #endif
795 {"ffloat", float_cons, 'f'},
796 {"dfloat", float_cons, 'd'},
797 {"tfloat", float_cons, 'x'},
798 {"value", cons, 2},
799 {"slong", signed_cons, 4},
800 {"noopt", s_ignore, 0},
801 {"optim", s_ignore, 0},
802 {"code16gcc", set_16bit_gcc_code_flag, CODE_16BIT},
803 {"code16", set_code_flag, CODE_16BIT},
804 {"code32", set_code_flag, CODE_32BIT},
805 {"code64", set_code_flag, CODE_64BIT},
806 {"intel_syntax", set_intel_syntax, 1},
807 {"att_syntax", set_intel_syntax, 0},
808 {"intel_mnemonic", set_intel_mnemonic, 1},
809 {"att_mnemonic", set_intel_mnemonic, 0},
810 {"allow_index_reg", set_allow_index_reg, 1},
811 {"disallow_index_reg", set_allow_index_reg, 0},
812 {"sse_check", set_sse_check, 0},
813 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
814 {"largecomm", handle_large_common, 0},
815 #else
816 {"file", (void (*) (int)) dwarf2_directive_file, 0},
817 {"loc", dwarf2_directive_loc, 0},
818 {"loc_mark_labels", dwarf2_directive_loc_mark_labels, 0},
819 #endif
820 #ifdef TE_PE
821 {"secrel32", pe_directive_secrel, 0},
822 #endif
823 {0, 0, 0}
826 /* For interface with expression (). */
827 extern char *input_line_pointer;
829 /* Hash table for instruction mnemonic lookup. */
830 static struct hash_control *op_hash;
832 /* Hash table for register lookup. */
833 static struct hash_control *reg_hash;
835 void
836 i386_align_code (fragS *fragP, int count)
838 /* Various efficient no-op patterns for aligning code labels.
839 Note: Don't try to assemble the instructions in the comments.
840 0L and 0w are not legal. */
841 static const char f32_1[] =
842 {0x90}; /* nop */
843 static const char f32_2[] =
844 {0x66,0x90}; /* xchg %ax,%ax */
845 static const char f32_3[] =
846 {0x8d,0x76,0x00}; /* leal 0(%esi),%esi */
847 static const char f32_4[] =
848 {0x8d,0x74,0x26,0x00}; /* leal 0(%esi,1),%esi */
849 static const char f32_5[] =
850 {0x90, /* nop */
851 0x8d,0x74,0x26,0x00}; /* leal 0(%esi,1),%esi */
852 static const char f32_6[] =
853 {0x8d,0xb6,0x00,0x00,0x00,0x00}; /* leal 0L(%esi),%esi */
854 static const char f32_7[] =
855 {0x8d,0xb4,0x26,0x00,0x00,0x00,0x00}; /* leal 0L(%esi,1),%esi */
856 static const char f32_8[] =
857 {0x90, /* nop */
858 0x8d,0xb4,0x26,0x00,0x00,0x00,0x00}; /* leal 0L(%esi,1),%esi */
859 static const char f32_9[] =
860 {0x89,0xf6, /* movl %esi,%esi */
861 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
862 static const char f32_10[] =
863 {0x8d,0x76,0x00, /* leal 0(%esi),%esi */
864 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
865 static const char f32_11[] =
866 {0x8d,0x74,0x26,0x00, /* leal 0(%esi,1),%esi */
867 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
868 static const char f32_12[] =
869 {0x8d,0xb6,0x00,0x00,0x00,0x00, /* leal 0L(%esi),%esi */
870 0x8d,0xbf,0x00,0x00,0x00,0x00}; /* leal 0L(%edi),%edi */
871 static const char f32_13[] =
872 {0x8d,0xb6,0x00,0x00,0x00,0x00, /* leal 0L(%esi),%esi */
873 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
874 static const char f32_14[] =
875 {0x8d,0xb4,0x26,0x00,0x00,0x00,0x00, /* leal 0L(%esi,1),%esi */
876 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
877 static const char f16_3[] =
878 {0x8d,0x74,0x00}; /* lea 0(%esi),%esi */
879 static const char f16_4[] =
880 {0x8d,0xb4,0x00,0x00}; /* lea 0w(%si),%si */
881 static const char f16_5[] =
882 {0x90, /* nop */
883 0x8d,0xb4,0x00,0x00}; /* lea 0w(%si),%si */
884 static const char f16_6[] =
885 {0x89,0xf6, /* mov %si,%si */
886 0x8d,0xbd,0x00,0x00}; /* lea 0w(%di),%di */
887 static const char f16_7[] =
888 {0x8d,0x74,0x00, /* lea 0(%si),%si */
889 0x8d,0xbd,0x00,0x00}; /* lea 0w(%di),%di */
890 static const char f16_8[] =
891 {0x8d,0xb4,0x00,0x00, /* lea 0w(%si),%si */
892 0x8d,0xbd,0x00,0x00}; /* lea 0w(%di),%di */
893 static const char jump_31[] =
894 {0xeb,0x1d,0x90,0x90,0x90,0x90,0x90, /* jmp .+31; lotsa nops */
895 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
896 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
897 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90};
898 static const char *const f32_patt[] = {
899 f32_1, f32_2, f32_3, f32_4, f32_5, f32_6, f32_7, f32_8,
900 f32_9, f32_10, f32_11, f32_12, f32_13, f32_14
902 static const char *const f16_patt[] = {
903 f32_1, f32_2, f16_3, f16_4, f16_5, f16_6, f16_7, f16_8
905 /* nopl (%[re]ax) */
906 static const char alt_3[] =
907 {0x0f,0x1f,0x00};
908 /* nopl 0(%[re]ax) */
909 static const char alt_4[] =
910 {0x0f,0x1f,0x40,0x00};
911 /* nopl 0(%[re]ax,%[re]ax,1) */
912 static const char alt_5[] =
913 {0x0f,0x1f,0x44,0x00,0x00};
914 /* nopw 0(%[re]ax,%[re]ax,1) */
915 static const char alt_6[] =
916 {0x66,0x0f,0x1f,0x44,0x00,0x00};
917 /* nopl 0L(%[re]ax) */
918 static const char alt_7[] =
919 {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
920 /* nopl 0L(%[re]ax,%[re]ax,1) */
921 static const char alt_8[] =
922 {0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
923 /* nopw 0L(%[re]ax,%[re]ax,1) */
924 static const char alt_9[] =
925 {0x66,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
926 /* nopw %cs:0L(%[re]ax,%[re]ax,1) */
927 static const char alt_10[] =
928 {0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
929 /* data16
930 nopw %cs:0L(%[re]ax,%[re]ax,1) */
931 static const char alt_long_11[] =
932 {0x66,
933 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
934 /* data16
935 data16
936 nopw %cs:0L(%[re]ax,%[re]ax,1) */
937 static const char alt_long_12[] =
938 {0x66,
939 0x66,
940 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
941 /* data16
942 data16
943 data16
944 nopw %cs:0L(%[re]ax,%[re]ax,1) */
945 static const char alt_long_13[] =
946 {0x66,
947 0x66,
948 0x66,
949 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
950 /* data16
951 data16
952 data16
953 data16
954 nopw %cs:0L(%[re]ax,%[re]ax,1) */
955 static const char alt_long_14[] =
956 {0x66,
957 0x66,
958 0x66,
959 0x66,
960 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
961 /* data16
962 data16
963 data16
964 data16
965 data16
966 nopw %cs:0L(%[re]ax,%[re]ax,1) */
967 static const char alt_long_15[] =
968 {0x66,
969 0x66,
970 0x66,
971 0x66,
972 0x66,
973 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
974 /* nopl 0(%[re]ax,%[re]ax,1)
975 nopw 0(%[re]ax,%[re]ax,1) */
976 static const char alt_short_11[] =
977 {0x0f,0x1f,0x44,0x00,0x00,
978 0x66,0x0f,0x1f,0x44,0x00,0x00};
979 /* nopw 0(%[re]ax,%[re]ax,1)
980 nopw 0(%[re]ax,%[re]ax,1) */
981 static const char alt_short_12[] =
982 {0x66,0x0f,0x1f,0x44,0x00,0x00,
983 0x66,0x0f,0x1f,0x44,0x00,0x00};
984 /* nopw 0(%[re]ax,%[re]ax,1)
985 nopl 0L(%[re]ax) */
986 static const char alt_short_13[] =
987 {0x66,0x0f,0x1f,0x44,0x00,0x00,
988 0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
989 /* nopl 0L(%[re]ax)
990 nopl 0L(%[re]ax) */
991 static const char alt_short_14[] =
992 {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00,
993 0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
994 /* nopl 0L(%[re]ax)
995 nopl 0L(%[re]ax,%[re]ax,1) */
996 static const char alt_short_15[] =
997 {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00,
998 0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
999 static const char *const alt_short_patt[] = {
1000 f32_1, f32_2, alt_3, alt_4, alt_5, alt_6, alt_7, alt_8,
1001 alt_9, alt_10, alt_short_11, alt_short_12, alt_short_13,
1002 alt_short_14, alt_short_15
1004 static const char *const alt_long_patt[] = {
1005 f32_1, f32_2, alt_3, alt_4, alt_5, alt_6, alt_7, alt_8,
1006 alt_9, alt_10, alt_long_11, alt_long_12, alt_long_13,
1007 alt_long_14, alt_long_15
1010 /* Only align for at least a positive non-zero boundary. */
1011 if (count <= 0 || count > MAX_MEM_FOR_RS_ALIGN_CODE)
1012 return;
1014 /* We need to decide which NOP sequence to use for 32bit and
1015 64bit. When -mtune= is used:
1017 1. For PROCESSOR_I386, PROCESSOR_I486, PROCESSOR_PENTIUM and
1018 PROCESSOR_GENERIC32, f32_patt will be used.
1019 2. For PROCESSOR_PENTIUMPRO, PROCESSOR_PENTIUM4, PROCESSOR_NOCONA,
1020 PROCESSOR_CORE, PROCESSOR_CORE2, PROCESSOR_COREI7, and
1021 PROCESSOR_GENERIC64, alt_long_patt will be used.
1022 3. For PROCESSOR_ATHLON, PROCESSOR_K6, PROCESSOR_K8 and
1023 PROCESSOR_AMDFAM10, and PROCESSOR_BDVER1, alt_short_patt
1024 will be used.
1026 When -mtune= isn't used, alt_long_patt will be used if
1027 cpu_arch_isa_flags has CpuNop. Otherwise, f32_patt will
1028 be used.
1030 When -march= or .arch is used, we can't use anything beyond
1031 cpu_arch_isa_flags. */
1033 if (flag_code == CODE_16BIT)
1035 if (count > 8)
1037 memcpy (fragP->fr_literal + fragP->fr_fix,
1038 jump_31, count);
1039 /* Adjust jump offset. */
1040 fragP->fr_literal[fragP->fr_fix + 1] = count - 2;
1042 else
1043 memcpy (fragP->fr_literal + fragP->fr_fix,
1044 f16_patt[count - 1], count);
1046 else
1048 const char *const *patt = NULL;
1050 if (fragP->tc_frag_data.isa == PROCESSOR_UNKNOWN)
1052 /* PROCESSOR_UNKNOWN means that all ISAs may be used. */
1053 switch (cpu_arch_tune)
1055 case PROCESSOR_UNKNOWN:
1056 /* We use cpu_arch_isa_flags to check if we SHOULD
1057 optimize with nops. */
1058 if (fragP->tc_frag_data.isa_flags.bitfield.cpunop)
1059 patt = alt_long_patt;
1060 else
1061 patt = f32_patt;
1062 break;
1063 case PROCESSOR_PENTIUM4:
1064 case PROCESSOR_NOCONA:
1065 case PROCESSOR_CORE:
1066 case PROCESSOR_CORE2:
1067 case PROCESSOR_COREI7:
1068 case PROCESSOR_L1OM:
1069 case PROCESSOR_GENERIC64:
1070 patt = alt_long_patt;
1071 break;
1072 case PROCESSOR_K6:
1073 case PROCESSOR_ATHLON:
1074 case PROCESSOR_K8:
1075 case PROCESSOR_AMDFAM10:
1076 case PROCESSOR_BDVER1:
1077 patt = alt_short_patt;
1078 break;
1079 case PROCESSOR_I386:
1080 case PROCESSOR_I486:
1081 case PROCESSOR_PENTIUM:
1082 case PROCESSOR_PENTIUMPRO:
1083 case PROCESSOR_GENERIC32:
1084 patt = f32_patt;
1085 break;
1088 else
1090 switch (fragP->tc_frag_data.tune)
1092 case PROCESSOR_UNKNOWN:
1093 /* When cpu_arch_isa is set, cpu_arch_tune shouldn't be
1094 PROCESSOR_UNKNOWN. */
1095 abort ();
1096 break;
1098 case PROCESSOR_I386:
1099 case PROCESSOR_I486:
1100 case PROCESSOR_PENTIUM:
1101 case PROCESSOR_K6:
1102 case PROCESSOR_ATHLON:
1103 case PROCESSOR_K8:
1104 case PROCESSOR_AMDFAM10:
1105 case PROCESSOR_BDVER1:
1106 case PROCESSOR_GENERIC32:
1107 /* We use cpu_arch_isa_flags to check if we CAN optimize
1108 with nops. */
1109 if (fragP->tc_frag_data.isa_flags.bitfield.cpunop)
1110 patt = alt_short_patt;
1111 else
1112 patt = f32_patt;
1113 break;
1114 case PROCESSOR_PENTIUMPRO:
1115 case PROCESSOR_PENTIUM4:
1116 case PROCESSOR_NOCONA:
1117 case PROCESSOR_CORE:
1118 case PROCESSOR_CORE2:
1119 case PROCESSOR_COREI7:
1120 case PROCESSOR_L1OM:
1121 if (fragP->tc_frag_data.isa_flags.bitfield.cpunop)
1122 patt = alt_long_patt;
1123 else
1124 patt = f32_patt;
1125 break;
1126 case PROCESSOR_GENERIC64:
1127 patt = alt_long_patt;
1128 break;
1132 if (patt == f32_patt)
1134 /* If the padding is less than 15 bytes, we use the normal
1135 ones. Otherwise, we use a jump instruction and adjust
1136 its offset. */
1137 int limit;
1139 /* For 64bit, the limit is 3 bytes. */
1140 if (flag_code == CODE_64BIT
1141 && fragP->tc_frag_data.isa_flags.bitfield.cpulm)
1142 limit = 3;
1143 else
1144 limit = 15;
1145 if (count < limit)
1146 memcpy (fragP->fr_literal + fragP->fr_fix,
1147 patt[count - 1], count);
1148 else
1150 memcpy (fragP->fr_literal + fragP->fr_fix,
1151 jump_31, count);
1152 /* Adjust jump offset. */
1153 fragP->fr_literal[fragP->fr_fix + 1] = count - 2;
1156 else
1158 /* Maximum length of an instruction is 15 byte. If the
1159 padding is greater than 15 bytes and we don't use jump,
1160 we have to break it into smaller pieces. */
1161 int padding = count;
1162 while (padding > 15)
1164 padding -= 15;
1165 memcpy (fragP->fr_literal + fragP->fr_fix + padding,
1166 patt [14], 15);
1169 if (padding)
1170 memcpy (fragP->fr_literal + fragP->fr_fix,
1171 patt [padding - 1], padding);
1174 fragP->fr_var = count;
1177 static INLINE int
1178 operand_type_all_zero (const union i386_operand_type *x)
1180 switch (ARRAY_SIZE(x->array))
1182 case 3:
1183 if (x->array[2])
1184 return 0;
1185 case 2:
1186 if (x->array[1])
1187 return 0;
1188 case 1:
1189 return !x->array[0];
1190 default:
1191 abort ();
1195 static INLINE void
1196 operand_type_set (union i386_operand_type *x, unsigned int v)
1198 switch (ARRAY_SIZE(x->array))
1200 case 3:
1201 x->array[2] = v;
1202 case 2:
1203 x->array[1] = v;
1204 case 1:
1205 x->array[0] = v;
1206 break;
1207 default:
1208 abort ();
1212 static INLINE int
1213 operand_type_equal (const union i386_operand_type *x,
1214 const union i386_operand_type *y)
1216 switch (ARRAY_SIZE(x->array))
1218 case 3:
1219 if (x->array[2] != y->array[2])
1220 return 0;
1221 case 2:
1222 if (x->array[1] != y->array[1])
1223 return 0;
1224 case 1:
1225 return x->array[0] == y->array[0];
1226 break;
1227 default:
1228 abort ();
1232 static INLINE int
1233 cpu_flags_all_zero (const union i386_cpu_flags *x)
1235 switch (ARRAY_SIZE(x->array))
1237 case 3:
1238 if (x->array[2])
1239 return 0;
1240 case 2:
1241 if (x->array[1])
1242 return 0;
1243 case 1:
1244 return !x->array[0];
1245 default:
1246 abort ();
1250 static INLINE void
1251 cpu_flags_set (union i386_cpu_flags *x, unsigned int v)
1253 switch (ARRAY_SIZE(x->array))
1255 case 3:
1256 x->array[2] = v;
1257 case 2:
1258 x->array[1] = v;
1259 case 1:
1260 x->array[0] = v;
1261 break;
1262 default:
1263 abort ();
1267 static INLINE int
1268 cpu_flags_equal (const union i386_cpu_flags *x,
1269 const union i386_cpu_flags *y)
1271 switch (ARRAY_SIZE(x->array))
1273 case 3:
1274 if (x->array[2] != y->array[2])
1275 return 0;
1276 case 2:
1277 if (x->array[1] != y->array[1])
1278 return 0;
1279 case 1:
1280 return x->array[0] == y->array[0];
1281 break;
1282 default:
1283 abort ();
1287 static INLINE int
1288 cpu_flags_check_cpu64 (i386_cpu_flags f)
1290 return !((flag_code == CODE_64BIT && f.bitfield.cpuno64)
1291 || (flag_code != CODE_64BIT && f.bitfield.cpu64));
1294 static INLINE i386_cpu_flags
1295 cpu_flags_and (i386_cpu_flags x, i386_cpu_flags y)
1297 switch (ARRAY_SIZE (x.array))
1299 case 3:
1300 x.array [2] &= y.array [2];
1301 case 2:
1302 x.array [1] &= y.array [1];
1303 case 1:
1304 x.array [0] &= y.array [0];
1305 break;
1306 default:
1307 abort ();
1309 return x;
1312 static INLINE i386_cpu_flags
1313 cpu_flags_or (i386_cpu_flags x, i386_cpu_flags y)
1315 switch (ARRAY_SIZE (x.array))
1317 case 3:
1318 x.array [2] |= y.array [2];
1319 case 2:
1320 x.array [1] |= y.array [1];
1321 case 1:
1322 x.array [0] |= y.array [0];
1323 break;
1324 default:
1325 abort ();
1327 return x;
1330 static INLINE i386_cpu_flags
1331 cpu_flags_and_not (i386_cpu_flags x, i386_cpu_flags y)
1333 switch (ARRAY_SIZE (x.array))
1335 case 3:
1336 x.array [2] &= ~y.array [2];
1337 case 2:
1338 x.array [1] &= ~y.array [1];
1339 case 1:
1340 x.array [0] &= ~y.array [0];
1341 break;
1342 default:
1343 abort ();
1345 return x;
1348 #define CPU_FLAGS_ARCH_MATCH 0x1
1349 #define CPU_FLAGS_64BIT_MATCH 0x2
1350 #define CPU_FLAGS_AES_MATCH 0x4
1351 #define CPU_FLAGS_PCLMUL_MATCH 0x8
1352 #define CPU_FLAGS_AVX_MATCH 0x10
1354 #define CPU_FLAGS_32BIT_MATCH \
1355 (CPU_FLAGS_ARCH_MATCH | CPU_FLAGS_AES_MATCH \
1356 | CPU_FLAGS_PCLMUL_MATCH | CPU_FLAGS_AVX_MATCH)
1357 #define CPU_FLAGS_PERFECT_MATCH \
1358 (CPU_FLAGS_32BIT_MATCH | CPU_FLAGS_64BIT_MATCH)
1360 /* Return CPU flags match bits. */
1362 static int
1363 cpu_flags_match (const insn_template *t)
1365 i386_cpu_flags x = t->cpu_flags;
1366 int match = cpu_flags_check_cpu64 (x) ? CPU_FLAGS_64BIT_MATCH : 0;
1368 x.bitfield.cpu64 = 0;
1369 x.bitfield.cpuno64 = 0;
1371 if (cpu_flags_all_zero (&x))
1373 /* This instruction is available on all archs. */
1374 match |= CPU_FLAGS_32BIT_MATCH;
1376 else
1378 /* This instruction is available only on some archs. */
1379 i386_cpu_flags cpu = cpu_arch_flags;
1381 cpu.bitfield.cpu64 = 0;
1382 cpu.bitfield.cpuno64 = 0;
1383 cpu = cpu_flags_and (x, cpu);
1384 if (!cpu_flags_all_zero (&cpu))
1386 if (x.bitfield.cpuavx)
1388 /* We only need to check AES/PCLMUL/SSE2AVX with AVX. */
1389 if (cpu.bitfield.cpuavx)
1391 /* Check SSE2AVX. */
1392 if (!t->opcode_modifier.sse2avx|| sse2avx)
1394 match |= (CPU_FLAGS_ARCH_MATCH
1395 | CPU_FLAGS_AVX_MATCH);
1396 /* Check AES. */
1397 if (!x.bitfield.cpuaes || cpu.bitfield.cpuaes)
1398 match |= CPU_FLAGS_AES_MATCH;
1399 /* Check PCLMUL. */
1400 if (!x.bitfield.cpupclmul
1401 || cpu.bitfield.cpupclmul)
1402 match |= CPU_FLAGS_PCLMUL_MATCH;
1405 else
1406 match |= CPU_FLAGS_ARCH_MATCH;
1408 else
1409 match |= CPU_FLAGS_32BIT_MATCH;
1412 return match;
1415 static INLINE i386_operand_type
1416 operand_type_and (i386_operand_type x, i386_operand_type y)
1418 switch (ARRAY_SIZE (x.array))
1420 case 3:
1421 x.array [2] &= y.array [2];
1422 case 2:
1423 x.array [1] &= y.array [1];
1424 case 1:
1425 x.array [0] &= y.array [0];
1426 break;
1427 default:
1428 abort ();
1430 return x;
1433 static INLINE i386_operand_type
1434 operand_type_or (i386_operand_type x, i386_operand_type y)
1436 switch (ARRAY_SIZE (x.array))
1438 case 3:
1439 x.array [2] |= y.array [2];
1440 case 2:
1441 x.array [1] |= y.array [1];
1442 case 1:
1443 x.array [0] |= y.array [0];
1444 break;
1445 default:
1446 abort ();
1448 return x;
1451 static INLINE i386_operand_type
1452 operand_type_xor (i386_operand_type x, i386_operand_type y)
1454 switch (ARRAY_SIZE (x.array))
1456 case 3:
1457 x.array [2] ^= y.array [2];
1458 case 2:
1459 x.array [1] ^= y.array [1];
1460 case 1:
1461 x.array [0] ^= y.array [0];
1462 break;
1463 default:
1464 abort ();
1466 return x;
1469 static const i386_operand_type acc32 = OPERAND_TYPE_ACC32;
1470 static const i386_operand_type acc64 = OPERAND_TYPE_ACC64;
1471 static const i386_operand_type control = OPERAND_TYPE_CONTROL;
1472 static const i386_operand_type inoutportreg
1473 = OPERAND_TYPE_INOUTPORTREG;
1474 static const i386_operand_type reg16_inoutportreg
1475 = OPERAND_TYPE_REG16_INOUTPORTREG;
1476 static const i386_operand_type disp16 = OPERAND_TYPE_DISP16;
1477 static const i386_operand_type disp32 = OPERAND_TYPE_DISP32;
1478 static const i386_operand_type disp32s = OPERAND_TYPE_DISP32S;
1479 static const i386_operand_type disp16_32 = OPERAND_TYPE_DISP16_32;
1480 static const i386_operand_type anydisp
1481 = OPERAND_TYPE_ANYDISP;
1482 static const i386_operand_type regxmm = OPERAND_TYPE_REGXMM;
1483 static const i386_operand_type regymm = OPERAND_TYPE_REGYMM;
1484 static const i386_operand_type imm8 = OPERAND_TYPE_IMM8;
1485 static const i386_operand_type imm8s = OPERAND_TYPE_IMM8S;
1486 static const i386_operand_type imm16 = OPERAND_TYPE_IMM16;
1487 static const i386_operand_type imm32 = OPERAND_TYPE_IMM32;
1488 static const i386_operand_type imm32s = OPERAND_TYPE_IMM32S;
1489 static const i386_operand_type imm64 = OPERAND_TYPE_IMM64;
1490 static const i386_operand_type imm16_32 = OPERAND_TYPE_IMM16_32;
1491 static const i386_operand_type imm16_32s = OPERAND_TYPE_IMM16_32S;
1492 static const i386_operand_type imm16_32_32s = OPERAND_TYPE_IMM16_32_32S;
1493 static const i386_operand_type vec_imm4 = OPERAND_TYPE_VEC_IMM4;
1495 enum operand_type
1497 reg,
1498 imm,
1499 disp,
1500 anymem
1503 static INLINE int
1504 operand_type_check (i386_operand_type t, enum operand_type c)
1506 switch (c)
1508 case reg:
1509 return (t.bitfield.reg8
1510 || t.bitfield.reg16
1511 || t.bitfield.reg32
1512 || t.bitfield.reg64);
1514 case imm:
1515 return (t.bitfield.imm8
1516 || t.bitfield.imm8s
1517 || t.bitfield.imm16
1518 || t.bitfield.imm32
1519 || t.bitfield.imm32s
1520 || t.bitfield.imm64);
1522 case disp:
1523 return (t.bitfield.disp8
1524 || t.bitfield.disp16
1525 || t.bitfield.disp32
1526 || t.bitfield.disp32s
1527 || t.bitfield.disp64);
1529 case anymem:
1530 return (t.bitfield.disp8
1531 || t.bitfield.disp16
1532 || t.bitfield.disp32
1533 || t.bitfield.disp32s
1534 || t.bitfield.disp64
1535 || t.bitfield.baseindex);
1537 default:
1538 abort ();
1541 return 0;
1544 /* Return 1 if there is no conflict in 8bit/16bit/32bit/64bit on
1545 operand J for instruction template T. */
1547 static INLINE int
1548 match_reg_size (const insn_template *t, unsigned int j)
1550 return !((i.types[j].bitfield.byte
1551 && !t->operand_types[j].bitfield.byte)
1552 || (i.types[j].bitfield.word
1553 && !t->operand_types[j].bitfield.word)
1554 || (i.types[j].bitfield.dword
1555 && !t->operand_types[j].bitfield.dword)
1556 || (i.types[j].bitfield.qword
1557 && !t->operand_types[j].bitfield.qword));
1560 /* Return 1 if there is no conflict in any size on operand J for
1561 instruction template T. */
1563 static INLINE int
1564 match_mem_size (const insn_template *t, unsigned int j)
1566 return (match_reg_size (t, j)
1567 && !((i.types[j].bitfield.unspecified
1568 && !t->operand_types[j].bitfield.unspecified)
1569 || (i.types[j].bitfield.fword
1570 && !t->operand_types[j].bitfield.fword)
1571 || (i.types[j].bitfield.tbyte
1572 && !t->operand_types[j].bitfield.tbyte)
1573 || (i.types[j].bitfield.xmmword
1574 && !t->operand_types[j].bitfield.xmmword)
1575 || (i.types[j].bitfield.ymmword
1576 && !t->operand_types[j].bitfield.ymmword)));
1579 /* Return 1 if there is no size conflict on any operands for
1580 instruction template T. */
1582 static INLINE int
1583 operand_size_match (const insn_template *t)
1585 unsigned int j;
1586 int match = 1;
1588 /* Don't check jump instructions. */
1589 if (t->opcode_modifier.jump
1590 || t->opcode_modifier.jumpbyte
1591 || t->opcode_modifier.jumpdword
1592 || t->opcode_modifier.jumpintersegment)
1593 return match;
1595 /* Check memory and accumulator operand size. */
1596 for (j = 0; j < i.operands; j++)
1598 if (t->operand_types[j].bitfield.anysize)
1599 continue;
1601 if (t->operand_types[j].bitfield.acc && !match_reg_size (t, j))
1603 match = 0;
1604 break;
1607 if (i.types[j].bitfield.mem && !match_mem_size (t, j))
1609 match = 0;
1610 break;
1614 if (match)
1615 return match;
1616 else if (!t->opcode_modifier.d && !t->opcode_modifier.floatd)
1618 mismatch:
1619 i.error = operand_size_mismatch;
1620 return 0;
1623 /* Check reverse. */
1624 gas_assert (i.operands == 2);
1626 match = 1;
1627 for (j = 0; j < 2; j++)
1629 if (t->operand_types[j].bitfield.acc
1630 && !match_reg_size (t, j ? 0 : 1))
1631 goto mismatch;
1633 if (i.types[j].bitfield.mem
1634 && !match_mem_size (t, j ? 0 : 1))
1635 goto mismatch;
1638 return match;
1641 static INLINE int
1642 operand_type_match (i386_operand_type overlap,
1643 i386_operand_type given)
1645 i386_operand_type temp = overlap;
1647 temp.bitfield.jumpabsolute = 0;
1648 temp.bitfield.unspecified = 0;
1649 temp.bitfield.byte = 0;
1650 temp.bitfield.word = 0;
1651 temp.bitfield.dword = 0;
1652 temp.bitfield.fword = 0;
1653 temp.bitfield.qword = 0;
1654 temp.bitfield.tbyte = 0;
1655 temp.bitfield.xmmword = 0;
1656 temp.bitfield.ymmword = 0;
1657 if (operand_type_all_zero (&temp))
1658 goto mismatch;
1660 if (given.bitfield.baseindex == overlap.bitfield.baseindex
1661 && given.bitfield.jumpabsolute == overlap.bitfield.jumpabsolute)
1662 return 1;
1664 mismatch:
1665 i.error = operand_type_mismatch;
1666 return 0;
1669 /* If given types g0 and g1 are registers they must be of the same type
1670 unless the expected operand type register overlap is null.
1671 Note that Acc in a template matches every size of reg. */
1673 static INLINE int
1674 operand_type_register_match (i386_operand_type m0,
1675 i386_operand_type g0,
1676 i386_operand_type t0,
1677 i386_operand_type m1,
1678 i386_operand_type g1,
1679 i386_operand_type t1)
1681 if (!operand_type_check (g0, reg))
1682 return 1;
1684 if (!operand_type_check (g1, reg))
1685 return 1;
1687 if (g0.bitfield.reg8 == g1.bitfield.reg8
1688 && g0.bitfield.reg16 == g1.bitfield.reg16
1689 && g0.bitfield.reg32 == g1.bitfield.reg32
1690 && g0.bitfield.reg64 == g1.bitfield.reg64)
1691 return 1;
1693 if (m0.bitfield.acc)
1695 t0.bitfield.reg8 = 1;
1696 t0.bitfield.reg16 = 1;
1697 t0.bitfield.reg32 = 1;
1698 t0.bitfield.reg64 = 1;
1701 if (m1.bitfield.acc)
1703 t1.bitfield.reg8 = 1;
1704 t1.bitfield.reg16 = 1;
1705 t1.bitfield.reg32 = 1;
1706 t1.bitfield.reg64 = 1;
1709 if (!(t0.bitfield.reg8 & t1.bitfield.reg8)
1710 && !(t0.bitfield.reg16 & t1.bitfield.reg16)
1711 && !(t0.bitfield.reg32 & t1.bitfield.reg32)
1712 && !(t0.bitfield.reg64 & t1.bitfield.reg64))
1713 return 1;
1715 i.error = register_type_mismatch;
1717 return 0;
1720 static INLINE unsigned int
1721 mode_from_disp_size (i386_operand_type t)
1723 if (t.bitfield.disp8)
1724 return 1;
1725 else if (t.bitfield.disp16
1726 || t.bitfield.disp32
1727 || t.bitfield.disp32s)
1728 return 2;
1729 else
1730 return 0;
1733 static INLINE int
1734 fits_in_signed_byte (offsetT num)
1736 return (num >= -128) && (num <= 127);
1739 static INLINE int
1740 fits_in_unsigned_byte (offsetT num)
1742 return (num & 0xff) == num;
1745 static INLINE int
1746 fits_in_unsigned_word (offsetT num)
1748 return (num & 0xffff) == num;
1751 static INLINE int
1752 fits_in_signed_word (offsetT num)
1754 return (-32768 <= num) && (num <= 32767);
1757 static INLINE int
1758 fits_in_signed_long (offsetT num ATTRIBUTE_UNUSED)
1760 #ifndef BFD64
1761 return 1;
1762 #else
1763 return (!(((offsetT) -1 << 31) & num)
1764 || (((offsetT) -1 << 31) & num) == ((offsetT) -1 << 31));
1765 #endif
1766 } /* fits_in_signed_long() */
1768 static INLINE int
1769 fits_in_unsigned_long (offsetT num ATTRIBUTE_UNUSED)
1771 #ifndef BFD64
1772 return 1;
1773 #else
1774 return (num & (((offsetT) 2 << 31) - 1)) == num;
1775 #endif
1776 } /* fits_in_unsigned_long() */
1778 static INLINE int
1779 fits_in_imm4 (offsetT num)
1781 return (num & 0xf) == num;
1784 static i386_operand_type
1785 smallest_imm_type (offsetT num)
1787 i386_operand_type t;
1789 operand_type_set (&t, 0);
1790 t.bitfield.imm64 = 1;
1792 if (cpu_arch_tune != PROCESSOR_I486 && num == 1)
1794 /* This code is disabled on the 486 because all the Imm1 forms
1795 in the opcode table are slower on the i486. They're the
1796 versions with the implicitly specified single-position
1797 displacement, which has another syntax if you really want to
1798 use that form. */
1799 t.bitfield.imm1 = 1;
1800 t.bitfield.imm8 = 1;
1801 t.bitfield.imm8s = 1;
1802 t.bitfield.imm16 = 1;
1803 t.bitfield.imm32 = 1;
1804 t.bitfield.imm32s = 1;
1806 else if (fits_in_signed_byte (num))
1808 t.bitfield.imm8 = 1;
1809 t.bitfield.imm8s = 1;
1810 t.bitfield.imm16 = 1;
1811 t.bitfield.imm32 = 1;
1812 t.bitfield.imm32s = 1;
1814 else if (fits_in_unsigned_byte (num))
1816 t.bitfield.imm8 = 1;
1817 t.bitfield.imm16 = 1;
1818 t.bitfield.imm32 = 1;
1819 t.bitfield.imm32s = 1;
1821 else if (fits_in_signed_word (num) || fits_in_unsigned_word (num))
1823 t.bitfield.imm16 = 1;
1824 t.bitfield.imm32 = 1;
1825 t.bitfield.imm32s = 1;
1827 else if (fits_in_signed_long (num))
1829 t.bitfield.imm32 = 1;
1830 t.bitfield.imm32s = 1;
1832 else if (fits_in_unsigned_long (num))
1833 t.bitfield.imm32 = 1;
1835 return t;
1838 static offsetT
1839 offset_in_range (offsetT val, int size)
1841 addressT mask;
1843 switch (size)
1845 case 1: mask = ((addressT) 1 << 8) - 1; break;
1846 case 2: mask = ((addressT) 1 << 16) - 1; break;
1847 case 4: mask = ((addressT) 2 << 31) - 1; break;
1848 #ifdef BFD64
1849 case 8: mask = ((addressT) 2 << 63) - 1; break;
1850 #endif
1851 default: abort ();
1854 #ifdef BFD64
1855 /* If BFD64, sign extend val for 32bit address mode. */
1856 if (flag_code != CODE_64BIT
1857 || i.prefix[ADDR_PREFIX])
1858 if ((val & ~(((addressT) 2 << 31) - 1)) == 0)
1859 val = (val ^ ((addressT) 1 << 31)) - ((addressT) 1 << 31);
1860 #endif
1862 if ((val & ~mask) != 0 && (val & ~mask) != ~mask)
1864 char buf1[40], buf2[40];
1866 sprint_value (buf1, val);
1867 sprint_value (buf2, val & mask);
1868 as_warn (_("%s shortened to %s"), buf1, buf2);
1870 return val & mask;
1873 enum PREFIX_GROUP
1875 PREFIX_EXIST = 0,
1876 PREFIX_LOCK,
1877 PREFIX_REP,
1878 PREFIX_OTHER
1881 /* Returns
1882 a. PREFIX_EXIST if attempting to add a prefix where one from the
1883 same class already exists.
1884 b. PREFIX_LOCK if lock prefix is added.
1885 c. PREFIX_REP if rep/repne prefix is added.
1886 d. PREFIX_OTHER if other prefix is added.
1889 static enum PREFIX_GROUP
1890 add_prefix (unsigned int prefix)
1892 enum PREFIX_GROUP ret = PREFIX_OTHER;
1893 unsigned int q;
1895 if (prefix >= REX_OPCODE && prefix < REX_OPCODE + 16
1896 && flag_code == CODE_64BIT)
1898 if ((i.prefix[REX_PREFIX] & prefix & REX_W)
1899 || ((i.prefix[REX_PREFIX] & (REX_R | REX_X | REX_B))
1900 && (prefix & (REX_R | REX_X | REX_B))))
1901 ret = PREFIX_EXIST;
1902 q = REX_PREFIX;
1904 else
1906 switch (prefix)
1908 default:
1909 abort ();
1911 case CS_PREFIX_OPCODE:
1912 case DS_PREFIX_OPCODE:
1913 case ES_PREFIX_OPCODE:
1914 case FS_PREFIX_OPCODE:
1915 case GS_PREFIX_OPCODE:
1916 case SS_PREFIX_OPCODE:
1917 q = SEG_PREFIX;
1918 break;
1920 case REPNE_PREFIX_OPCODE:
1921 case REPE_PREFIX_OPCODE:
1922 q = REP_PREFIX;
1923 ret = PREFIX_REP;
1924 break;
1926 case LOCK_PREFIX_OPCODE:
1927 q = LOCK_PREFIX;
1928 ret = PREFIX_LOCK;
1929 break;
1931 case FWAIT_OPCODE:
1932 q = WAIT_PREFIX;
1933 break;
1935 case ADDR_PREFIX_OPCODE:
1936 q = ADDR_PREFIX;
1937 break;
1939 case DATA_PREFIX_OPCODE:
1940 q = DATA_PREFIX;
1941 break;
1943 if (i.prefix[q] != 0)
1944 ret = PREFIX_EXIST;
1947 if (ret)
1949 if (!i.prefix[q])
1950 ++i.prefixes;
1951 i.prefix[q] |= prefix;
1953 else
1954 as_bad (_("same type of prefix used twice"));
1956 return ret;
1959 static void
1960 update_code_flag (int value, int check)
1962 PRINTF_LIKE ((*as_error));
1964 flag_code = (enum flag_code) value;
1965 if (flag_code == CODE_64BIT)
1967 cpu_arch_flags.bitfield.cpu64 = 1;
1968 cpu_arch_flags.bitfield.cpuno64 = 0;
1970 else
1972 cpu_arch_flags.bitfield.cpu64 = 0;
1973 cpu_arch_flags.bitfield.cpuno64 = 1;
1975 if (value == CODE_64BIT && !cpu_arch_flags.bitfield.cpulm )
1977 if (check)
1978 as_error = as_fatal;
1979 else
1980 as_error = as_bad;
1981 (*as_error) (_("64bit mode not supported on `%s'."),
1982 cpu_arch_name ? cpu_arch_name : default_arch);
1984 if (value == CODE_32BIT && !cpu_arch_flags.bitfield.cpui386)
1986 if (check)
1987 as_error = as_fatal;
1988 else
1989 as_error = as_bad;
1990 (*as_error) (_("32bit mode not supported on `%s'."),
1991 cpu_arch_name ? cpu_arch_name : default_arch);
1993 stackop_size = '\0';
1996 static void
1997 set_code_flag (int value)
1999 update_code_flag (value, 0);
2002 static void
2003 set_16bit_gcc_code_flag (int new_code_flag)
2005 flag_code = (enum flag_code) new_code_flag;
2006 if (flag_code != CODE_16BIT)
2007 abort ();
2008 cpu_arch_flags.bitfield.cpu64 = 0;
2009 cpu_arch_flags.bitfield.cpuno64 = 1;
2010 stackop_size = LONG_MNEM_SUFFIX;
2013 static void
2014 set_intel_syntax (int syntax_flag)
2016 /* Find out if register prefixing is specified. */
2017 int ask_naked_reg = 0;
2019 SKIP_WHITESPACE ();
2020 if (!is_end_of_line[(unsigned char) *input_line_pointer])
2022 char *string = input_line_pointer;
2023 int e = get_symbol_end ();
2025 if (strcmp (string, "prefix") == 0)
2026 ask_naked_reg = 1;
2027 else if (strcmp (string, "noprefix") == 0)
2028 ask_naked_reg = -1;
2029 else
2030 as_bad (_("bad argument to syntax directive."));
2031 *input_line_pointer = e;
2033 demand_empty_rest_of_line ();
2035 intel_syntax = syntax_flag;
2037 if (ask_naked_reg == 0)
2038 allow_naked_reg = (intel_syntax
2039 && (bfd_get_symbol_leading_char (stdoutput) != '\0'));
2040 else
2041 allow_naked_reg = (ask_naked_reg < 0);
2043 expr_set_rank (O_full_ptr, syntax_flag ? 10 : 0);
2045 identifier_chars['%'] = intel_syntax && allow_naked_reg ? '%' : 0;
2046 identifier_chars['$'] = intel_syntax ? '$' : 0;
2047 register_prefix = allow_naked_reg ? "" : "%";
2050 static void
2051 set_intel_mnemonic (int mnemonic_flag)
2053 intel_mnemonic = mnemonic_flag;
2056 static void
2057 set_allow_index_reg (int flag)
2059 allow_index_reg = flag;
2062 static void
2063 set_sse_check (int dummy ATTRIBUTE_UNUSED)
2065 SKIP_WHITESPACE ();
2067 if (!is_end_of_line[(unsigned char) *input_line_pointer])
2069 char *string = input_line_pointer;
2070 int e = get_symbol_end ();
2072 if (strcmp (string, "none") == 0)
2073 sse_check = sse_check_none;
2074 else if (strcmp (string, "warning") == 0)
2075 sse_check = sse_check_warning;
2076 else if (strcmp (string, "error") == 0)
2077 sse_check = sse_check_error;
2078 else
2079 as_bad (_("bad argument to sse_check directive."));
2080 *input_line_pointer = e;
2082 else
2083 as_bad (_("missing argument for sse_check directive"));
2085 demand_empty_rest_of_line ();
2088 static void
2089 check_cpu_arch_compatible (const char *name ATTRIBUTE_UNUSED,
2090 i386_cpu_flags new_flag ATTRIBUTE_UNUSED)
2092 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
2093 static const char *arch;
2095 /* Intel LIOM is only supported on ELF. */
2096 if (!IS_ELF)
2097 return;
2099 if (!arch)
2101 /* Use cpu_arch_name if it is set in md_parse_option. Otherwise
2102 use default_arch. */
2103 arch = cpu_arch_name;
2104 if (!arch)
2105 arch = default_arch;
2108 /* If we are targeting Intel L1OM, we must enable it. */
2109 if (get_elf_backend_data (stdoutput)->elf_machine_code != EM_L1OM
2110 || new_flag.bitfield.cpul1om)
2111 return;
2113 as_bad (_("`%s' is not supported on `%s'"), name, arch);
2114 #endif
2117 static void
2118 set_cpu_arch (int dummy ATTRIBUTE_UNUSED)
2120 SKIP_WHITESPACE ();
2122 if (!is_end_of_line[(unsigned char) *input_line_pointer])
2124 char *string = input_line_pointer;
2125 int e = get_symbol_end ();
2126 unsigned int j;
2127 i386_cpu_flags flags;
2129 for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
2131 if (strcmp (string, cpu_arch[j].name) == 0)
2133 check_cpu_arch_compatible (string, cpu_arch[j].flags);
2135 if (*string != '.')
2137 cpu_arch_name = cpu_arch[j].name;
2138 cpu_sub_arch_name = NULL;
2139 cpu_arch_flags = cpu_arch[j].flags;
2140 if (flag_code == CODE_64BIT)
2142 cpu_arch_flags.bitfield.cpu64 = 1;
2143 cpu_arch_flags.bitfield.cpuno64 = 0;
2145 else
2147 cpu_arch_flags.bitfield.cpu64 = 0;
2148 cpu_arch_flags.bitfield.cpuno64 = 1;
2150 cpu_arch_isa = cpu_arch[j].type;
2151 cpu_arch_isa_flags = cpu_arch[j].flags;
2152 if (!cpu_arch_tune_set)
2154 cpu_arch_tune = cpu_arch_isa;
2155 cpu_arch_tune_flags = cpu_arch_isa_flags;
2157 break;
2160 if (!cpu_arch[j].negated)
2161 flags = cpu_flags_or (cpu_arch_flags,
2162 cpu_arch[j].flags);
2163 else
2164 flags = cpu_flags_and_not (cpu_arch_flags,
2165 cpu_arch[j].flags);
2166 if (!cpu_flags_equal (&flags, &cpu_arch_flags))
2168 if (cpu_sub_arch_name)
2170 char *name = cpu_sub_arch_name;
2171 cpu_sub_arch_name = concat (name,
2172 cpu_arch[j].name,
2173 (const char *) NULL);
2174 free (name);
2176 else
2177 cpu_sub_arch_name = xstrdup (cpu_arch[j].name);
2178 cpu_arch_flags = flags;
2179 cpu_arch_isa_flags = flags;
2181 *input_line_pointer = e;
2182 demand_empty_rest_of_line ();
2183 return;
2186 if (j >= ARRAY_SIZE (cpu_arch))
2187 as_bad (_("no such architecture: `%s'"), string);
2189 *input_line_pointer = e;
2191 else
2192 as_bad (_("missing cpu architecture"));
2194 no_cond_jump_promotion = 0;
2195 if (*input_line_pointer == ','
2196 && !is_end_of_line[(unsigned char) input_line_pointer[1]])
2198 char *string = ++input_line_pointer;
2199 int e = get_symbol_end ();
2201 if (strcmp (string, "nojumps") == 0)
2202 no_cond_jump_promotion = 1;
2203 else if (strcmp (string, "jumps") == 0)
2205 else
2206 as_bad (_("no such architecture modifier: `%s'"), string);
2208 *input_line_pointer = e;
2211 demand_empty_rest_of_line ();
2214 enum bfd_architecture
2215 i386_arch (void)
2217 if (cpu_arch_isa == PROCESSOR_L1OM)
2219 if (OUTPUT_FLAVOR != bfd_target_elf_flavour
2220 || flag_code != CODE_64BIT)
2221 as_fatal (_("Intel L1OM is 64bit ELF only"));
2222 return bfd_arch_l1om;
2224 else
2225 return bfd_arch_i386;
2228 unsigned long
2229 i386_mach ()
2231 if (!strncmp (default_arch, "x86_64", 6))
2233 if (cpu_arch_isa == PROCESSOR_L1OM)
2235 if (OUTPUT_FLAVOR != bfd_target_elf_flavour
2236 || default_arch[6] != '\0')
2237 as_fatal (_("Intel L1OM is 64bit ELF only"));
2238 return bfd_mach_l1om;
2240 else if (default_arch[6] == '\0')
2241 return bfd_mach_x86_64;
2242 else
2243 return bfd_mach_x64_32;
2245 else if (!strcmp (default_arch, "i386"))
2246 return bfd_mach_i386_i386;
2247 else
2248 as_fatal (_("Unknown architecture"));
2251 void
2252 md_begin ()
2254 const char *hash_err;
2256 /* Initialize op_hash hash table. */
2257 op_hash = hash_new ();
2260 const insn_template *optab;
2261 templates *core_optab;
2263 /* Setup for loop. */
2264 optab = i386_optab;
2265 core_optab = (templates *) xmalloc (sizeof (templates));
2266 core_optab->start = optab;
2268 while (1)
2270 ++optab;
2271 if (optab->name == NULL
2272 || strcmp (optab->name, (optab - 1)->name) != 0)
2274 /* different name --> ship out current template list;
2275 add to hash table; & begin anew. */
2276 core_optab->end = optab;
2277 hash_err = hash_insert (op_hash,
2278 (optab - 1)->name,
2279 (void *) core_optab);
2280 if (hash_err)
2282 as_fatal (_("Internal Error: Can't hash %s: %s"),
2283 (optab - 1)->name,
2284 hash_err);
2286 if (optab->name == NULL)
2287 break;
2288 core_optab = (templates *) xmalloc (sizeof (templates));
2289 core_optab->start = optab;
2294 /* Initialize reg_hash hash table. */
2295 reg_hash = hash_new ();
2297 const reg_entry *regtab;
2298 unsigned int regtab_size = i386_regtab_size;
2300 for (regtab = i386_regtab; regtab_size--; regtab++)
2302 hash_err = hash_insert (reg_hash, regtab->reg_name, (void *) regtab);
2303 if (hash_err)
2304 as_fatal (_("Internal Error: Can't hash %s: %s"),
2305 regtab->reg_name,
2306 hash_err);
2310 /* Fill in lexical tables: mnemonic_chars, operand_chars. */
2312 int c;
2313 char *p;
2315 for (c = 0; c < 256; c++)
2317 if (ISDIGIT (c))
2319 digit_chars[c] = c;
2320 mnemonic_chars[c] = c;
2321 register_chars[c] = c;
2322 operand_chars[c] = c;
2324 else if (ISLOWER (c))
2326 mnemonic_chars[c] = c;
2327 register_chars[c] = c;
2328 operand_chars[c] = c;
2330 else if (ISUPPER (c))
2332 mnemonic_chars[c] = TOLOWER (c);
2333 register_chars[c] = mnemonic_chars[c];
2334 operand_chars[c] = c;
2337 if (ISALPHA (c) || ISDIGIT (c))
2338 identifier_chars[c] = c;
2339 else if (c >= 128)
2341 identifier_chars[c] = c;
2342 operand_chars[c] = c;
2346 #ifdef LEX_AT
2347 identifier_chars['@'] = '@';
2348 #endif
2349 #ifdef LEX_QM
2350 identifier_chars['?'] = '?';
2351 operand_chars['?'] = '?';
2352 #endif
2353 digit_chars['-'] = '-';
2354 mnemonic_chars['_'] = '_';
2355 mnemonic_chars['-'] = '-';
2356 mnemonic_chars['.'] = '.';
2357 identifier_chars['_'] = '_';
2358 identifier_chars['.'] = '.';
2360 for (p = operand_special_chars; *p != '\0'; p++)
2361 operand_chars[(unsigned char) *p] = *p;
2364 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
2365 if (IS_ELF)
2367 record_alignment (text_section, 2);
2368 record_alignment (data_section, 2);
2369 record_alignment (bss_section, 2);
2371 #endif
2373 if (flag_code == CODE_64BIT)
2375 #if defined (OBJ_COFF) && defined (TE_PE)
2376 x86_dwarf2_return_column = (OUTPUT_FLAVOR == bfd_target_coff_flavour
2377 ? 32 : 16);
2378 #else
2379 x86_dwarf2_return_column = 16;
2380 #endif
2381 x86_cie_data_alignment = -8;
2383 else
2385 x86_dwarf2_return_column = 8;
2386 x86_cie_data_alignment = -4;
2390 void
2391 i386_print_statistics (FILE *file)
2393 hash_print_statistics (file, "i386 opcode", op_hash);
2394 hash_print_statistics (file, "i386 register", reg_hash);
2397 #ifdef DEBUG386
2399 /* Debugging routines for md_assemble. */
2400 static void pte (insn_template *);
2401 static void pt (i386_operand_type);
2402 static void pe (expressionS *);
2403 static void ps (symbolS *);
2405 static void
2406 pi (char *line, i386_insn *x)
2408 unsigned int j;
2410 fprintf (stdout, "%s: template ", line);
2411 pte (&x->tm);
2412 fprintf (stdout, " address: base %s index %s scale %x\n",
2413 x->base_reg ? x->base_reg->reg_name : "none",
2414 x->index_reg ? x->index_reg->reg_name : "none",
2415 x->log2_scale_factor);
2416 fprintf (stdout, " modrm: mode %x reg %x reg/mem %x\n",
2417 x->rm.mode, x->rm.reg, x->rm.regmem);
2418 fprintf (stdout, " sib: base %x index %x scale %x\n",
2419 x->sib.base, x->sib.index, x->sib.scale);
2420 fprintf (stdout, " rex: 64bit %x extX %x extY %x extZ %x\n",
2421 (x->rex & REX_W) != 0,
2422 (x->rex & REX_R) != 0,
2423 (x->rex & REX_X) != 0,
2424 (x->rex & REX_B) != 0);
2425 for (j = 0; j < x->operands; j++)
2427 fprintf (stdout, " #%d: ", j + 1);
2428 pt (x->types[j]);
2429 fprintf (stdout, "\n");
2430 if (x->types[j].bitfield.reg8
2431 || x->types[j].bitfield.reg16
2432 || x->types[j].bitfield.reg32
2433 || x->types[j].bitfield.reg64
2434 || x->types[j].bitfield.regmmx
2435 || x->types[j].bitfield.regxmm
2436 || x->types[j].bitfield.regymm
2437 || x->types[j].bitfield.sreg2
2438 || x->types[j].bitfield.sreg3
2439 || x->types[j].bitfield.control
2440 || x->types[j].bitfield.debug
2441 || x->types[j].bitfield.test)
2442 fprintf (stdout, "%s\n", x->op[j].regs->reg_name);
2443 if (operand_type_check (x->types[j], imm))
2444 pe (x->op[j].imms);
2445 if (operand_type_check (x->types[j], disp))
2446 pe (x->op[j].disps);
2450 static void
2451 pte (insn_template *t)
2453 unsigned int j;
2454 fprintf (stdout, " %d operands ", t->operands);
2455 fprintf (stdout, "opcode %x ", t->base_opcode);
2456 if (t->extension_opcode != None)
2457 fprintf (stdout, "ext %x ", t->extension_opcode);
2458 if (t->opcode_modifier.d)
2459 fprintf (stdout, "D");
2460 if (t->opcode_modifier.w)
2461 fprintf (stdout, "W");
2462 fprintf (stdout, "\n");
2463 for (j = 0; j < t->operands; j++)
2465 fprintf (stdout, " #%d type ", j + 1);
2466 pt (t->operand_types[j]);
2467 fprintf (stdout, "\n");
2471 static void
2472 pe (expressionS *e)
2474 fprintf (stdout, " operation %d\n", e->X_op);
2475 fprintf (stdout, " add_number %ld (%lx)\n",
2476 (long) e->X_add_number, (long) e->X_add_number);
2477 if (e->X_add_symbol)
2479 fprintf (stdout, " add_symbol ");
2480 ps (e->X_add_symbol);
2481 fprintf (stdout, "\n");
2483 if (e->X_op_symbol)
2485 fprintf (stdout, " op_symbol ");
2486 ps (e->X_op_symbol);
2487 fprintf (stdout, "\n");
2491 static void
2492 ps (symbolS *s)
2494 fprintf (stdout, "%s type %s%s",
2495 S_GET_NAME (s),
2496 S_IS_EXTERNAL (s) ? "EXTERNAL " : "",
2497 segment_name (S_GET_SEGMENT (s)));
2500 static struct type_name
2502 i386_operand_type mask;
2503 const char *name;
2505 const type_names[] =
2507 { OPERAND_TYPE_REG8, "r8" },
2508 { OPERAND_TYPE_REG16, "r16" },
2509 { OPERAND_TYPE_REG32, "r32" },
2510 { OPERAND_TYPE_REG64, "r64" },
2511 { OPERAND_TYPE_IMM8, "i8" },
2512 { OPERAND_TYPE_IMM8, "i8s" },
2513 { OPERAND_TYPE_IMM16, "i16" },
2514 { OPERAND_TYPE_IMM32, "i32" },
2515 { OPERAND_TYPE_IMM32S, "i32s" },
2516 { OPERAND_TYPE_IMM64, "i64" },
2517 { OPERAND_TYPE_IMM1, "i1" },
2518 { OPERAND_TYPE_BASEINDEX, "BaseIndex" },
2519 { OPERAND_TYPE_DISP8, "d8" },
2520 { OPERAND_TYPE_DISP16, "d16" },
2521 { OPERAND_TYPE_DISP32, "d32" },
2522 { OPERAND_TYPE_DISP32S, "d32s" },
2523 { OPERAND_TYPE_DISP64, "d64" },
2524 { OPERAND_TYPE_INOUTPORTREG, "InOutPortReg" },
2525 { OPERAND_TYPE_SHIFTCOUNT, "ShiftCount" },
2526 { OPERAND_TYPE_CONTROL, "control reg" },
2527 { OPERAND_TYPE_TEST, "test reg" },
2528 { OPERAND_TYPE_DEBUG, "debug reg" },
2529 { OPERAND_TYPE_FLOATREG, "FReg" },
2530 { OPERAND_TYPE_FLOATACC, "FAcc" },
2531 { OPERAND_TYPE_SREG2, "SReg2" },
2532 { OPERAND_TYPE_SREG3, "SReg3" },
2533 { OPERAND_TYPE_ACC, "Acc" },
2534 { OPERAND_TYPE_JUMPABSOLUTE, "Jump Absolute" },
2535 { OPERAND_TYPE_REGMMX, "rMMX" },
2536 { OPERAND_TYPE_REGXMM, "rXMM" },
2537 { OPERAND_TYPE_REGYMM, "rYMM" },
2538 { OPERAND_TYPE_ESSEG, "es" },
2541 static void
2542 pt (i386_operand_type t)
2544 unsigned int j;
2545 i386_operand_type a;
2547 for (j = 0; j < ARRAY_SIZE (type_names); j++)
2549 a = operand_type_and (t, type_names[j].mask);
2550 if (!operand_type_all_zero (&a))
2551 fprintf (stdout, "%s, ", type_names[j].name);
2553 fflush (stdout);
2556 #endif /* DEBUG386 */
2558 static bfd_reloc_code_real_type
2559 reloc (unsigned int size,
2560 int pcrel,
2561 int sign,
2562 bfd_reloc_code_real_type other)
2564 if (other != NO_RELOC)
2566 reloc_howto_type *rel;
2568 if (size == 8)
2569 switch (other)
2571 case BFD_RELOC_X86_64_GOT32:
2572 return BFD_RELOC_X86_64_GOT64;
2573 break;
2574 case BFD_RELOC_X86_64_PLTOFF64:
2575 return BFD_RELOC_X86_64_PLTOFF64;
2576 break;
2577 case BFD_RELOC_X86_64_GOTPC32:
2578 other = BFD_RELOC_X86_64_GOTPC64;
2579 break;
2580 case BFD_RELOC_X86_64_GOTPCREL:
2581 other = BFD_RELOC_X86_64_GOTPCREL64;
2582 break;
2583 case BFD_RELOC_X86_64_TPOFF32:
2584 other = BFD_RELOC_X86_64_TPOFF64;
2585 break;
2586 case BFD_RELOC_X86_64_DTPOFF32:
2587 other = BFD_RELOC_X86_64_DTPOFF64;
2588 break;
2589 default:
2590 break;
2593 /* Sign-checking 4-byte relocations in 16-/32-bit code is pointless. */
2594 if (size == 4 && (flag_code != CODE_64BIT || disallow_64bit_reloc))
2595 sign = -1;
2597 rel = bfd_reloc_type_lookup (stdoutput, other);
2598 if (!rel)
2599 as_bad (_("unknown relocation (%u)"), other);
2600 else if (size != bfd_get_reloc_size (rel))
2601 as_bad (_("%u-byte relocation cannot be applied to %u-byte field"),
2602 bfd_get_reloc_size (rel),
2603 size);
2604 else if (pcrel && !rel->pc_relative)
2605 as_bad (_("non-pc-relative relocation for pc-relative field"));
2606 else if ((rel->complain_on_overflow == complain_overflow_signed
2607 && !sign)
2608 || (rel->complain_on_overflow == complain_overflow_unsigned
2609 && sign > 0))
2610 as_bad (_("relocated field and relocation type differ in signedness"));
2611 else
2612 return other;
2613 return NO_RELOC;
2616 if (pcrel)
2618 if (!sign)
2619 as_bad (_("there are no unsigned pc-relative relocations"));
2620 switch (size)
2622 case 1: return BFD_RELOC_8_PCREL;
2623 case 2: return BFD_RELOC_16_PCREL;
2624 case 4: return BFD_RELOC_32_PCREL;
2625 case 8: return BFD_RELOC_64_PCREL;
2627 as_bad (_("cannot do %u byte pc-relative relocation"), size);
2629 else
2631 if (sign > 0)
2632 switch (size)
2634 case 4: return BFD_RELOC_X86_64_32S;
2636 else
2637 switch (size)
2639 case 1: return BFD_RELOC_8;
2640 case 2: return BFD_RELOC_16;
2641 case 4: return BFD_RELOC_32;
2642 case 8: return BFD_RELOC_64;
2644 as_bad (_("cannot do %s %u byte relocation"),
2645 sign > 0 ? "signed" : "unsigned", size);
2648 return NO_RELOC;
2651 /* Here we decide which fixups can be adjusted to make them relative to
2652 the beginning of the section instead of the symbol. Basically we need
2653 to make sure that the dynamic relocations are done correctly, so in
2654 some cases we force the original symbol to be used. */
2657 tc_i386_fix_adjustable (fixS *fixP ATTRIBUTE_UNUSED)
2659 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
2660 if (!IS_ELF)
2661 return 1;
2663 /* Don't adjust pc-relative references to merge sections in 64-bit
2664 mode. */
2665 if (use_rela_relocations
2666 && (S_GET_SEGMENT (fixP->fx_addsy)->flags & SEC_MERGE) != 0
2667 && fixP->fx_pcrel)
2668 return 0;
2670 /* The x86_64 GOTPCREL are represented as 32bit PCrel relocations
2671 and changed later by validate_fix. */
2672 if (GOT_symbol && fixP->fx_subsy == GOT_symbol
2673 && fixP->fx_r_type == BFD_RELOC_32_PCREL)
2674 return 0;
2676 /* adjust_reloc_syms doesn't know about the GOT. */
2677 if (fixP->fx_r_type == BFD_RELOC_386_GOTOFF
2678 || fixP->fx_r_type == BFD_RELOC_386_PLT32
2679 || fixP->fx_r_type == BFD_RELOC_386_GOT32
2680 || fixP->fx_r_type == BFD_RELOC_386_TLS_GD
2681 || fixP->fx_r_type == BFD_RELOC_386_TLS_LDM
2682 || fixP->fx_r_type == BFD_RELOC_386_TLS_LDO_32
2683 || fixP->fx_r_type == BFD_RELOC_386_TLS_IE_32
2684 || fixP->fx_r_type == BFD_RELOC_386_TLS_IE
2685 || fixP->fx_r_type == BFD_RELOC_386_TLS_GOTIE
2686 || fixP->fx_r_type == BFD_RELOC_386_TLS_LE_32
2687 || fixP->fx_r_type == BFD_RELOC_386_TLS_LE
2688 || fixP->fx_r_type == BFD_RELOC_386_TLS_GOTDESC
2689 || fixP->fx_r_type == BFD_RELOC_386_TLS_DESC_CALL
2690 || fixP->fx_r_type == BFD_RELOC_X86_64_PLT32
2691 || fixP->fx_r_type == BFD_RELOC_X86_64_GOT32
2692 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTPCREL
2693 || fixP->fx_r_type == BFD_RELOC_X86_64_TLSGD
2694 || fixP->fx_r_type == BFD_RELOC_X86_64_TLSLD
2695 || fixP->fx_r_type == BFD_RELOC_X86_64_DTPOFF32
2696 || fixP->fx_r_type == BFD_RELOC_X86_64_DTPOFF64
2697 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTTPOFF
2698 || fixP->fx_r_type == BFD_RELOC_X86_64_TPOFF32
2699 || fixP->fx_r_type == BFD_RELOC_X86_64_TPOFF64
2700 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTOFF64
2701 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTPC32_TLSDESC
2702 || fixP->fx_r_type == BFD_RELOC_X86_64_TLSDESC_CALL
2703 || fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
2704 || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
2705 return 0;
2706 #endif
2707 return 1;
2710 static int
2711 intel_float_operand (const char *mnemonic)
2713 /* Note that the value returned is meaningful only for opcodes with (memory)
2714 operands, hence the code here is free to improperly handle opcodes that
2715 have no operands (for better performance and smaller code). */
2717 if (mnemonic[0] != 'f')
2718 return 0; /* non-math */
2720 switch (mnemonic[1])
2722 /* fclex, fdecstp, fdisi, femms, feni, fincstp, finit, fsetpm, and
2723 the fs segment override prefix not currently handled because no
2724 call path can make opcodes without operands get here */
2725 case 'i':
2726 return 2 /* integer op */;
2727 case 'l':
2728 if (mnemonic[2] == 'd' && (mnemonic[3] == 'c' || mnemonic[3] == 'e'))
2729 return 3; /* fldcw/fldenv */
2730 break;
2731 case 'n':
2732 if (mnemonic[2] != 'o' /* fnop */)
2733 return 3; /* non-waiting control op */
2734 break;
2735 case 'r':
2736 if (mnemonic[2] == 's')
2737 return 3; /* frstor/frstpm */
2738 break;
2739 case 's':
2740 if (mnemonic[2] == 'a')
2741 return 3; /* fsave */
2742 if (mnemonic[2] == 't')
2744 switch (mnemonic[3])
2746 case 'c': /* fstcw */
2747 case 'd': /* fstdw */
2748 case 'e': /* fstenv */
2749 case 's': /* fsts[gw] */
2750 return 3;
2753 break;
2754 case 'x':
2755 if (mnemonic[2] == 'r' || mnemonic[2] == 's')
2756 return 0; /* fxsave/fxrstor are not really math ops */
2757 break;
2760 return 1;
2763 /* Build the VEX prefix. */
2765 static void
2766 build_vex_prefix (const insn_template *t)
2768 unsigned int register_specifier;
2769 unsigned int implied_prefix;
2770 unsigned int vector_length;
2772 /* Check register specifier. */
2773 if (i.vex.register_specifier)
2775 register_specifier = i.vex.register_specifier->reg_num;
2776 if ((i.vex.register_specifier->reg_flags & RegRex))
2777 register_specifier += 8;
2778 register_specifier = ~register_specifier & 0xf;
2780 else
2781 register_specifier = 0xf;
2783 /* Use 2-byte VEX prefix by swappping destination and source
2784 operand. */
2785 if (!i.swap_operand
2786 && i.operands == i.reg_operands
2787 && i.tm.opcode_modifier.vexopcode == VEX0F
2788 && i.tm.opcode_modifier.s
2789 && i.rex == REX_B)
2791 unsigned int xchg = i.operands - 1;
2792 union i386_op temp_op;
2793 i386_operand_type temp_type;
2795 temp_type = i.types[xchg];
2796 i.types[xchg] = i.types[0];
2797 i.types[0] = temp_type;
2798 temp_op = i.op[xchg];
2799 i.op[xchg] = i.op[0];
2800 i.op[0] = temp_op;
2802 gas_assert (i.rm.mode == 3);
2804 i.rex = REX_R;
2805 xchg = i.rm.regmem;
2806 i.rm.regmem = i.rm.reg;
2807 i.rm.reg = xchg;
2809 /* Use the next insn. */
2810 i.tm = t[1];
2813 if (i.tm.opcode_modifier.vex == VEXScalar)
2814 vector_length = avxscalar;
2815 else
2816 vector_length = i.tm.opcode_modifier.vex == VEX256 ? 1 : 0;
2818 switch ((i.tm.base_opcode >> 8) & 0xff)
2820 case 0:
2821 implied_prefix = 0;
2822 break;
2823 case DATA_PREFIX_OPCODE:
2824 implied_prefix = 1;
2825 break;
2826 case REPE_PREFIX_OPCODE:
2827 implied_prefix = 2;
2828 break;
2829 case REPNE_PREFIX_OPCODE:
2830 implied_prefix = 3;
2831 break;
2832 default:
2833 abort ();
2836 /* Use 2-byte VEX prefix if possible. */
2837 if (i.tm.opcode_modifier.vexopcode == VEX0F
2838 && i.tm.opcode_modifier.vexw != VEXW1
2839 && (i.rex & (REX_W | REX_X | REX_B)) == 0)
2841 /* 2-byte VEX prefix. */
2842 unsigned int r;
2844 i.vex.length = 2;
2845 i.vex.bytes[0] = 0xc5;
2847 /* Check the REX.R bit. */
2848 r = (i.rex & REX_R) ? 0 : 1;
2849 i.vex.bytes[1] = (r << 7
2850 | register_specifier << 3
2851 | vector_length << 2
2852 | implied_prefix);
2854 else
2856 /* 3-byte VEX prefix. */
2857 unsigned int m, w;
2859 i.vex.length = 3;
2861 switch (i.tm.opcode_modifier.vexopcode)
2863 case VEX0F:
2864 m = 0x1;
2865 i.vex.bytes[0] = 0xc4;
2866 break;
2867 case VEX0F38:
2868 m = 0x2;
2869 i.vex.bytes[0] = 0xc4;
2870 break;
2871 case VEX0F3A:
2872 m = 0x3;
2873 i.vex.bytes[0] = 0xc4;
2874 break;
2875 case XOP08:
2876 m = 0x8;
2877 i.vex.bytes[0] = 0x8f;
2878 break;
2879 case XOP09:
2880 m = 0x9;
2881 i.vex.bytes[0] = 0x8f;
2882 break;
2883 case XOP0A:
2884 m = 0xa;
2885 i.vex.bytes[0] = 0x8f;
2886 break;
2887 default:
2888 abort ();
2891 /* The high 3 bits of the second VEX byte are 1's compliment
2892 of RXB bits from REX. */
2893 i.vex.bytes[1] = (~i.rex & 0x7) << 5 | m;
2895 /* Check the REX.W bit. */
2896 w = (i.rex & REX_W) ? 1 : 0;
2897 if (i.tm.opcode_modifier.vexw)
2899 if (w)
2900 abort ();
2902 if (i.tm.opcode_modifier.vexw == VEXW1)
2903 w = 1;
2906 i.vex.bytes[2] = (w << 7
2907 | register_specifier << 3
2908 | vector_length << 2
2909 | implied_prefix);
2913 static void
2914 process_immext (void)
2916 expressionS *exp;
2918 if (i.tm.cpu_flags.bitfield.cpusse3 && i.operands > 0)
2920 /* SSE3 Instructions have the fixed operands with an opcode
2921 suffix which is coded in the same place as an 8-bit immediate
2922 field would be. Here we check those operands and remove them
2923 afterwards. */
2924 unsigned int x;
2926 for (x = 0; x < i.operands; x++)
2927 if (i.op[x].regs->reg_num != x)
2928 as_bad (_("can't use register '%s%s' as operand %d in '%s'."),
2929 register_prefix, i.op[x].regs->reg_name, x + 1,
2930 i.tm.name);
2932 i.operands = 0;
2935 /* These AMD 3DNow! and SSE2 instructions have an opcode suffix
2936 which is coded in the same place as an 8-bit immediate field
2937 would be. Here we fake an 8-bit immediate operand from the
2938 opcode suffix stored in tm.extension_opcode.
2940 AVX instructions also use this encoding, for some of
2941 3 argument instructions. */
2943 gas_assert (i.imm_operands == 0
2944 && (i.operands <= 2
2945 || (i.tm.opcode_modifier.vex
2946 && i.operands <= 4)));
2948 exp = &im_expressions[i.imm_operands++];
2949 i.op[i.operands].imms = exp;
2950 i.types[i.operands] = imm8;
2951 i.operands++;
2952 exp->X_op = O_constant;
2953 exp->X_add_number = i.tm.extension_opcode;
2954 i.tm.extension_opcode = None;
2957 /* This is the guts of the machine-dependent assembler. LINE points to a
2958 machine dependent instruction. This function is supposed to emit
2959 the frags/bytes it assembles to. */
2961 void
2962 md_assemble (char *line)
2964 unsigned int j;
2965 char mnemonic[MAX_MNEM_SIZE];
2966 const insn_template *t;
2968 /* Initialize globals. */
2969 memset (&i, '\0', sizeof (i));
2970 for (j = 0; j < MAX_OPERANDS; j++)
2971 i.reloc[j] = NO_RELOC;
2972 memset (disp_expressions, '\0', sizeof (disp_expressions));
2973 memset (im_expressions, '\0', sizeof (im_expressions));
2974 save_stack_p = save_stack;
2976 /* First parse an instruction mnemonic & call i386_operand for the operands.
2977 We assume that the scrubber has arranged it so that line[0] is the valid
2978 start of a (possibly prefixed) mnemonic. */
2980 line = parse_insn (line, mnemonic);
2981 if (line == NULL)
2982 return;
2984 line = parse_operands (line, mnemonic);
2985 this_operand = -1;
2986 if (line == NULL)
2987 return;
2989 /* Now we've parsed the mnemonic into a set of templates, and have the
2990 operands at hand. */
2992 /* All intel opcodes have reversed operands except for "bound" and
2993 "enter". We also don't reverse intersegment "jmp" and "call"
2994 instructions with 2 immediate operands so that the immediate segment
2995 precedes the offset, as it does when in AT&T mode. */
2996 if (intel_syntax
2997 && i.operands > 1
2998 && (strcmp (mnemonic, "bound") != 0)
2999 && (strcmp (mnemonic, "invlpga") != 0)
3000 && !(operand_type_check (i.types[0], imm)
3001 && operand_type_check (i.types[1], imm)))
3002 swap_operands ();
3004 /* The order of the immediates should be reversed
3005 for 2 immediates extrq and insertq instructions */
3006 if (i.imm_operands == 2
3007 && (strcmp (mnemonic, "extrq") == 0
3008 || strcmp (mnemonic, "insertq") == 0))
3009 swap_2_operands (0, 1);
3011 if (i.imm_operands)
3012 optimize_imm ();
3014 /* Don't optimize displacement for movabs since it only takes 64bit
3015 displacement. */
3016 if (i.disp_operands
3017 && !i.disp32_encoding
3018 && (flag_code != CODE_64BIT
3019 || strcmp (mnemonic, "movabs") != 0))
3020 optimize_disp ();
3022 /* Next, we find a template that matches the given insn,
3023 making sure the overlap of the given operands types is consistent
3024 with the template operand types. */
3026 if (!(t = match_template ()))
3027 return;
3029 if (sse_check != sse_check_none
3030 && !i.tm.opcode_modifier.noavx
3031 && (i.tm.cpu_flags.bitfield.cpusse
3032 || i.tm.cpu_flags.bitfield.cpusse2
3033 || i.tm.cpu_flags.bitfield.cpusse3
3034 || i.tm.cpu_flags.bitfield.cpussse3
3035 || i.tm.cpu_flags.bitfield.cpusse4_1
3036 || i.tm.cpu_flags.bitfield.cpusse4_2))
3038 (sse_check == sse_check_warning
3039 ? as_warn
3040 : as_bad) (_("SSE instruction `%s' is used"), i.tm.name);
3043 /* Zap movzx and movsx suffix. The suffix has been set from
3044 "word ptr" or "byte ptr" on the source operand in Intel syntax
3045 or extracted from mnemonic in AT&T syntax. But we'll use
3046 the destination register to choose the suffix for encoding. */
3047 if ((i.tm.base_opcode & ~9) == 0x0fb6)
3049 /* In Intel syntax, there must be a suffix. In AT&T syntax, if
3050 there is no suffix, the default will be byte extension. */
3051 if (i.reg_operands != 2
3052 && !i.suffix
3053 && intel_syntax)
3054 as_bad (_("ambiguous operand size for `%s'"), i.tm.name);
3056 i.suffix = 0;
3059 if (i.tm.opcode_modifier.fwait)
3060 if (!add_prefix (FWAIT_OPCODE))
3061 return;
3063 /* Check for lock without a lockable instruction. Destination operand
3064 must be memory unless it is xchg (0x86). */
3065 if (i.prefix[LOCK_PREFIX]
3066 && (!i.tm.opcode_modifier.islockable
3067 || i.mem_operands == 0
3068 || (i.tm.base_opcode != 0x86
3069 && !operand_type_check (i.types[i.operands - 1], anymem))))
3071 as_bad (_("expecting lockable instruction after `lock'"));
3072 return;
3075 /* Check string instruction segment overrides. */
3076 if (i.tm.opcode_modifier.isstring && i.mem_operands != 0)
3078 if (!check_string ())
3079 return;
3080 i.disp_operands = 0;
3083 if (!process_suffix ())
3084 return;
3086 /* Update operand types. */
3087 for (j = 0; j < i.operands; j++)
3088 i.types[j] = operand_type_and (i.types[j], i.tm.operand_types[j]);
3090 /* Make still unresolved immediate matches conform to size of immediate
3091 given in i.suffix. */
3092 if (!finalize_imm ())
3093 return;
3095 if (i.types[0].bitfield.imm1)
3096 i.imm_operands = 0; /* kludge for shift insns. */
3098 /* We only need to check those implicit registers for instructions
3099 with 3 operands or less. */
3100 if (i.operands <= 3)
3101 for (j = 0; j < i.operands; j++)
3102 if (i.types[j].bitfield.inoutportreg
3103 || i.types[j].bitfield.shiftcount
3104 || i.types[j].bitfield.acc
3105 || i.types[j].bitfield.floatacc)
3106 i.reg_operands--;
3108 /* ImmExt should be processed after SSE2AVX. */
3109 if (!i.tm.opcode_modifier.sse2avx
3110 && i.tm.opcode_modifier.immext)
3111 process_immext ();
3113 /* For insns with operands there are more diddles to do to the opcode. */
3114 if (i.operands)
3116 if (!process_operands ())
3117 return;
3119 else if (!quiet_warnings && i.tm.opcode_modifier.ugh)
3121 /* UnixWare fsub no args is alias for fsubp, fadd -> faddp, etc. */
3122 as_warn (_("translating to `%sp'"), i.tm.name);
3125 if (i.tm.opcode_modifier.vex)
3126 build_vex_prefix (t);
3128 /* Handle conversion of 'int $3' --> special int3 insn. XOP or FMA4
3129 instructions may define INT_OPCODE as well, so avoid this corner
3130 case for those instructions that use MODRM. */
3131 if (i.tm.base_opcode == INT_OPCODE
3132 && !i.tm.opcode_modifier.modrm
3133 && i.op[0].imms->X_add_number == 3)
3135 i.tm.base_opcode = INT3_OPCODE;
3136 i.imm_operands = 0;
3139 if ((i.tm.opcode_modifier.jump
3140 || i.tm.opcode_modifier.jumpbyte
3141 || i.tm.opcode_modifier.jumpdword)
3142 && i.op[0].disps->X_op == O_constant)
3144 /* Convert "jmp constant" (and "call constant") to a jump (call) to
3145 the absolute address given by the constant. Since ix86 jumps and
3146 calls are pc relative, we need to generate a reloc. */
3147 i.op[0].disps->X_add_symbol = &abs_symbol;
3148 i.op[0].disps->X_op = O_symbol;
3151 if (i.tm.opcode_modifier.rex64)
3152 i.rex |= REX_W;
3154 /* For 8 bit registers we need an empty rex prefix. Also if the
3155 instruction already has a prefix, we need to convert old
3156 registers to new ones. */
3158 if ((i.types[0].bitfield.reg8
3159 && (i.op[0].regs->reg_flags & RegRex64) != 0)
3160 || (i.types[1].bitfield.reg8
3161 && (i.op[1].regs->reg_flags & RegRex64) != 0)
3162 || ((i.types[0].bitfield.reg8
3163 || i.types[1].bitfield.reg8)
3164 && i.rex != 0))
3166 int x;
3168 i.rex |= REX_OPCODE;
3169 for (x = 0; x < 2; x++)
3171 /* Look for 8 bit operand that uses old registers. */
3172 if (i.types[x].bitfield.reg8
3173 && (i.op[x].regs->reg_flags & RegRex64) == 0)
3175 /* In case it is "hi" register, give up. */
3176 if (i.op[x].regs->reg_num > 3)
3177 as_bad (_("can't encode register '%s%s' in an "
3178 "instruction requiring REX prefix."),
3179 register_prefix, i.op[x].regs->reg_name);
3181 /* Otherwise it is equivalent to the extended register.
3182 Since the encoding doesn't change this is merely
3183 cosmetic cleanup for debug output. */
3185 i.op[x].regs = i.op[x].regs + 8;
3190 if (i.rex != 0)
3191 add_prefix (REX_OPCODE | i.rex);
3193 /* We are ready to output the insn. */
3194 output_insn ();
3197 static char *
3198 parse_insn (char *line, char *mnemonic)
3200 char *l = line;
3201 char *token_start = l;
3202 char *mnem_p;
3203 int supported;
3204 const insn_template *t;
3205 char *dot_p = NULL;
3207 /* Non-zero if we found a prefix only acceptable with string insns. */
3208 const char *expecting_string_instruction = NULL;
3210 while (1)
3212 mnem_p = mnemonic;
3213 while ((*mnem_p = mnemonic_chars[(unsigned char) *l]) != 0)
3215 if (*mnem_p == '.')
3216 dot_p = mnem_p;
3217 mnem_p++;
3218 if (mnem_p >= mnemonic + MAX_MNEM_SIZE)
3220 as_bad (_("no such instruction: `%s'"), token_start);
3221 return NULL;
3223 l++;
3225 if (!is_space_char (*l)
3226 && *l != END_OF_INSN
3227 && (intel_syntax
3228 || (*l != PREFIX_SEPARATOR
3229 && *l != ',')))
3231 as_bad (_("invalid character %s in mnemonic"),
3232 output_invalid (*l));
3233 return NULL;
3235 if (token_start == l)
3237 if (!intel_syntax && *l == PREFIX_SEPARATOR)
3238 as_bad (_("expecting prefix; got nothing"));
3239 else
3240 as_bad (_("expecting mnemonic; got nothing"));
3241 return NULL;
3244 /* Look up instruction (or prefix) via hash table. */
3245 current_templates = (const templates *) hash_find (op_hash, mnemonic);
3247 if (*l != END_OF_INSN
3248 && (!is_space_char (*l) || l[1] != END_OF_INSN)
3249 && current_templates
3250 && current_templates->start->opcode_modifier.isprefix)
3252 if (!cpu_flags_check_cpu64 (current_templates->start->cpu_flags))
3254 as_bad ((flag_code != CODE_64BIT
3255 ? _("`%s' is only supported in 64-bit mode")
3256 : _("`%s' is not supported in 64-bit mode")),
3257 current_templates->start->name);
3258 return NULL;
3260 /* If we are in 16-bit mode, do not allow addr16 or data16.
3261 Similarly, in 32-bit mode, do not allow addr32 or data32. */
3262 if ((current_templates->start->opcode_modifier.size16
3263 || current_templates->start->opcode_modifier.size32)
3264 && flag_code != CODE_64BIT
3265 && (current_templates->start->opcode_modifier.size32
3266 ^ (flag_code == CODE_16BIT)))
3268 as_bad (_("redundant %s prefix"),
3269 current_templates->start->name);
3270 return NULL;
3272 /* Add prefix, checking for repeated prefixes. */
3273 switch (add_prefix (current_templates->start->base_opcode))
3275 case PREFIX_EXIST:
3276 return NULL;
3277 case PREFIX_REP:
3278 expecting_string_instruction = current_templates->start->name;
3279 break;
3280 default:
3281 break;
3283 /* Skip past PREFIX_SEPARATOR and reset token_start. */
3284 token_start = ++l;
3286 else
3287 break;
3290 if (!current_templates)
3292 /* Check if we should swap operand or force 32bit displacement in
3293 encoding. */
3294 if (mnem_p - 2 == dot_p && dot_p[1] == 's')
3295 i.swap_operand = 1;
3296 else if (mnem_p - 4 == dot_p
3297 && dot_p[1] == 'd'
3298 && dot_p[2] == '3'
3299 && dot_p[3] == '2')
3300 i.disp32_encoding = 1;
3301 else
3302 goto check_suffix;
3303 mnem_p = dot_p;
3304 *dot_p = '\0';
3305 current_templates = (const templates *) hash_find (op_hash, mnemonic);
3308 if (!current_templates)
3310 check_suffix:
3311 /* See if we can get a match by trimming off a suffix. */
3312 switch (mnem_p[-1])
3314 case WORD_MNEM_SUFFIX:
3315 if (intel_syntax && (intel_float_operand (mnemonic) & 2))
3316 i.suffix = SHORT_MNEM_SUFFIX;
3317 else
3318 case BYTE_MNEM_SUFFIX:
3319 case QWORD_MNEM_SUFFIX:
3320 i.suffix = mnem_p[-1];
3321 mnem_p[-1] = '\0';
3322 current_templates = (const templates *) hash_find (op_hash,
3323 mnemonic);
3324 break;
3325 case SHORT_MNEM_SUFFIX:
3326 case LONG_MNEM_SUFFIX:
3327 if (!intel_syntax)
3329 i.suffix = mnem_p[-1];
3330 mnem_p[-1] = '\0';
3331 current_templates = (const templates *) hash_find (op_hash,
3332 mnemonic);
3334 break;
3336 /* Intel Syntax. */
3337 case 'd':
3338 if (intel_syntax)
3340 if (intel_float_operand (mnemonic) == 1)
3341 i.suffix = SHORT_MNEM_SUFFIX;
3342 else
3343 i.suffix = LONG_MNEM_SUFFIX;
3344 mnem_p[-1] = '\0';
3345 current_templates = (const templates *) hash_find (op_hash,
3346 mnemonic);
3348 break;
3350 if (!current_templates)
3352 as_bad (_("no such instruction: `%s'"), token_start);
3353 return NULL;
3357 if (current_templates->start->opcode_modifier.jump
3358 || current_templates->start->opcode_modifier.jumpbyte)
3360 /* Check for a branch hint. We allow ",pt" and ",pn" for
3361 predict taken and predict not taken respectively.
3362 I'm not sure that branch hints actually do anything on loop
3363 and jcxz insns (JumpByte) for current Pentium4 chips. They
3364 may work in the future and it doesn't hurt to accept them
3365 now. */
3366 if (l[0] == ',' && l[1] == 'p')
3368 if (l[2] == 't')
3370 if (!add_prefix (DS_PREFIX_OPCODE))
3371 return NULL;
3372 l += 3;
3374 else if (l[2] == 'n')
3376 if (!add_prefix (CS_PREFIX_OPCODE))
3377 return NULL;
3378 l += 3;
3382 /* Any other comma loses. */
3383 if (*l == ',')
3385 as_bad (_("invalid character %s in mnemonic"),
3386 output_invalid (*l));
3387 return NULL;
3390 /* Check if instruction is supported on specified architecture. */
3391 supported = 0;
3392 for (t = current_templates->start; t < current_templates->end; ++t)
3394 supported |= cpu_flags_match (t);
3395 if (supported == CPU_FLAGS_PERFECT_MATCH)
3396 goto skip;
3399 if (!(supported & CPU_FLAGS_64BIT_MATCH))
3401 as_bad (flag_code == CODE_64BIT
3402 ? _("`%s' is not supported in 64-bit mode")
3403 : _("`%s' is only supported in 64-bit mode"),
3404 current_templates->start->name);
3405 return NULL;
3407 if (supported != CPU_FLAGS_PERFECT_MATCH)
3409 as_bad (_("`%s' is not supported on `%s%s'"),
3410 current_templates->start->name,
3411 cpu_arch_name ? cpu_arch_name : default_arch,
3412 cpu_sub_arch_name ? cpu_sub_arch_name : "");
3413 return NULL;
3416 skip:
3417 if (!cpu_arch_flags.bitfield.cpui386
3418 && (flag_code != CODE_16BIT))
3420 as_warn (_("use .code16 to ensure correct addressing mode"));
3423 /* Check for rep/repne without a string instruction. */
3424 if (expecting_string_instruction)
3426 static templates override;
3428 for (t = current_templates->start; t < current_templates->end; ++t)
3429 if (t->opcode_modifier.isstring)
3430 break;
3431 if (t >= current_templates->end)
3433 as_bad (_("expecting string instruction after `%s'"),
3434 expecting_string_instruction);
3435 return NULL;
3437 for (override.start = t; t < current_templates->end; ++t)
3438 if (!t->opcode_modifier.isstring)
3439 break;
3440 override.end = t;
3441 current_templates = &override;
3444 return l;
3447 static char *
3448 parse_operands (char *l, const char *mnemonic)
3450 char *token_start;
3452 /* 1 if operand is pending after ','. */
3453 unsigned int expecting_operand = 0;
3455 /* Non-zero if operand parens not balanced. */
3456 unsigned int paren_not_balanced;
3458 while (*l != END_OF_INSN)
3460 /* Skip optional white space before operand. */
3461 if (is_space_char (*l))
3462 ++l;
3463 if (!is_operand_char (*l) && *l != END_OF_INSN)
3465 as_bad (_("invalid character %s before operand %d"),
3466 output_invalid (*l),
3467 i.operands + 1);
3468 return NULL;
3470 token_start = l; /* after white space */
3471 paren_not_balanced = 0;
3472 while (paren_not_balanced || *l != ',')
3474 if (*l == END_OF_INSN)
3476 if (paren_not_balanced)
3478 if (!intel_syntax)
3479 as_bad (_("unbalanced parenthesis in operand %d."),
3480 i.operands + 1);
3481 else
3482 as_bad (_("unbalanced brackets in operand %d."),
3483 i.operands + 1);
3484 return NULL;
3486 else
3487 break; /* we are done */
3489 else if (!is_operand_char (*l) && !is_space_char (*l))
3491 as_bad (_("invalid character %s in operand %d"),
3492 output_invalid (*l),
3493 i.operands + 1);
3494 return NULL;
3496 if (!intel_syntax)
3498 if (*l == '(')
3499 ++paren_not_balanced;
3500 if (*l == ')')
3501 --paren_not_balanced;
3503 else
3505 if (*l == '[')
3506 ++paren_not_balanced;
3507 if (*l == ']')
3508 --paren_not_balanced;
3510 l++;
3512 if (l != token_start)
3513 { /* Yes, we've read in another operand. */
3514 unsigned int operand_ok;
3515 this_operand = i.operands++;
3516 i.types[this_operand].bitfield.unspecified = 1;
3517 if (i.operands > MAX_OPERANDS)
3519 as_bad (_("spurious operands; (%d operands/instruction max)"),
3520 MAX_OPERANDS);
3521 return NULL;
3523 /* Now parse operand adding info to 'i' as we go along. */
3524 END_STRING_AND_SAVE (l);
3526 if (intel_syntax)
3527 operand_ok =
3528 i386_intel_operand (token_start,
3529 intel_float_operand (mnemonic));
3530 else
3531 operand_ok = i386_att_operand (token_start);
3533 RESTORE_END_STRING (l);
3534 if (!operand_ok)
3535 return NULL;
3537 else
3539 if (expecting_operand)
3541 expecting_operand_after_comma:
3542 as_bad (_("expecting operand after ','; got nothing"));
3543 return NULL;
3545 if (*l == ',')
3547 as_bad (_("expecting operand before ','; got nothing"));
3548 return NULL;
3552 /* Now *l must be either ',' or END_OF_INSN. */
3553 if (*l == ',')
3555 if (*++l == END_OF_INSN)
3557 /* Just skip it, if it's \n complain. */
3558 goto expecting_operand_after_comma;
3560 expecting_operand = 1;
3563 return l;
3566 static void
3567 swap_2_operands (int xchg1, int xchg2)
3569 union i386_op temp_op;
3570 i386_operand_type temp_type;
3571 enum bfd_reloc_code_real temp_reloc;
3573 temp_type = i.types[xchg2];
3574 i.types[xchg2] = i.types[xchg1];
3575 i.types[xchg1] = temp_type;
3576 temp_op = i.op[xchg2];
3577 i.op[xchg2] = i.op[xchg1];
3578 i.op[xchg1] = temp_op;
3579 temp_reloc = i.reloc[xchg2];
3580 i.reloc[xchg2] = i.reloc[xchg1];
3581 i.reloc[xchg1] = temp_reloc;
3584 static void
3585 swap_operands (void)
3587 switch (i.operands)
3589 case 5:
3590 case 4:
3591 swap_2_operands (1, i.operands - 2);
3592 case 3:
3593 case 2:
3594 swap_2_operands (0, i.operands - 1);
3595 break;
3596 default:
3597 abort ();
3600 if (i.mem_operands == 2)
3602 const seg_entry *temp_seg;
3603 temp_seg = i.seg[0];
3604 i.seg[0] = i.seg[1];
3605 i.seg[1] = temp_seg;
3609 /* Try to ensure constant immediates are represented in the smallest
3610 opcode possible. */
3611 static void
3612 optimize_imm (void)
3614 char guess_suffix = 0;
3615 int op;
3617 if (i.suffix)
3618 guess_suffix = i.suffix;
3619 else if (i.reg_operands)
3621 /* Figure out a suffix from the last register operand specified.
3622 We can't do this properly yet, ie. excluding InOutPortReg,
3623 but the following works for instructions with immediates.
3624 In any case, we can't set i.suffix yet. */
3625 for (op = i.operands; --op >= 0;)
3626 if (i.types[op].bitfield.reg8)
3628 guess_suffix = BYTE_MNEM_SUFFIX;
3629 break;
3631 else if (i.types[op].bitfield.reg16)
3633 guess_suffix = WORD_MNEM_SUFFIX;
3634 break;
3636 else if (i.types[op].bitfield.reg32)
3638 guess_suffix = LONG_MNEM_SUFFIX;
3639 break;
3641 else if (i.types[op].bitfield.reg64)
3643 guess_suffix = QWORD_MNEM_SUFFIX;
3644 break;
3647 else if ((flag_code == CODE_16BIT) ^ (i.prefix[DATA_PREFIX] != 0))
3648 guess_suffix = WORD_MNEM_SUFFIX;
3650 for (op = i.operands; --op >= 0;)
3651 if (operand_type_check (i.types[op], imm))
3653 switch (i.op[op].imms->X_op)
3655 case O_constant:
3656 /* If a suffix is given, this operand may be shortened. */
3657 switch (guess_suffix)
3659 case LONG_MNEM_SUFFIX:
3660 i.types[op].bitfield.imm32 = 1;
3661 i.types[op].bitfield.imm64 = 1;
3662 break;
3663 case WORD_MNEM_SUFFIX:
3664 i.types[op].bitfield.imm16 = 1;
3665 i.types[op].bitfield.imm32 = 1;
3666 i.types[op].bitfield.imm32s = 1;
3667 i.types[op].bitfield.imm64 = 1;
3668 break;
3669 case BYTE_MNEM_SUFFIX:
3670 i.types[op].bitfield.imm8 = 1;
3671 i.types[op].bitfield.imm8s = 1;
3672 i.types[op].bitfield.imm16 = 1;
3673 i.types[op].bitfield.imm32 = 1;
3674 i.types[op].bitfield.imm32s = 1;
3675 i.types[op].bitfield.imm64 = 1;
3676 break;
3679 /* If this operand is at most 16 bits, convert it
3680 to a signed 16 bit number before trying to see
3681 whether it will fit in an even smaller size.
3682 This allows a 16-bit operand such as $0xffe0 to
3683 be recognised as within Imm8S range. */
3684 if ((i.types[op].bitfield.imm16)
3685 && (i.op[op].imms->X_add_number & ~(offsetT) 0xffff) == 0)
3687 i.op[op].imms->X_add_number =
3688 (((i.op[op].imms->X_add_number & 0xffff) ^ 0x8000) - 0x8000);
3690 if ((i.types[op].bitfield.imm32)
3691 && ((i.op[op].imms->X_add_number & ~(((offsetT) 2 << 31) - 1))
3692 == 0))
3694 i.op[op].imms->X_add_number = ((i.op[op].imms->X_add_number
3695 ^ ((offsetT) 1 << 31))
3696 - ((offsetT) 1 << 31));
3698 i.types[op]
3699 = operand_type_or (i.types[op],
3700 smallest_imm_type (i.op[op].imms->X_add_number));
3702 /* We must avoid matching of Imm32 templates when 64bit
3703 only immediate is available. */
3704 if (guess_suffix == QWORD_MNEM_SUFFIX)
3705 i.types[op].bitfield.imm32 = 0;
3706 break;
3708 case O_absent:
3709 case O_register:
3710 abort ();
3712 /* Symbols and expressions. */
3713 default:
3714 /* Convert symbolic operand to proper sizes for matching, but don't
3715 prevent matching a set of insns that only supports sizes other
3716 than those matching the insn suffix. */
3718 i386_operand_type mask, allowed;
3719 const insn_template *t;
3721 operand_type_set (&mask, 0);
3722 operand_type_set (&allowed, 0);
3724 for (t = current_templates->start;
3725 t < current_templates->end;
3726 ++t)
3727 allowed = operand_type_or (allowed,
3728 t->operand_types[op]);
3729 switch (guess_suffix)
3731 case QWORD_MNEM_SUFFIX:
3732 mask.bitfield.imm64 = 1;
3733 mask.bitfield.imm32s = 1;
3734 break;
3735 case LONG_MNEM_SUFFIX:
3736 mask.bitfield.imm32 = 1;
3737 break;
3738 case WORD_MNEM_SUFFIX:
3739 mask.bitfield.imm16 = 1;
3740 break;
3741 case BYTE_MNEM_SUFFIX:
3742 mask.bitfield.imm8 = 1;
3743 break;
3744 default:
3745 break;
3747 allowed = operand_type_and (mask, allowed);
3748 if (!operand_type_all_zero (&allowed))
3749 i.types[op] = operand_type_and (i.types[op], mask);
3751 break;
3756 /* Try to use the smallest displacement type too. */
3757 static void
3758 optimize_disp (void)
3760 int op;
3762 for (op = i.operands; --op >= 0;)
3763 if (operand_type_check (i.types[op], disp))
3765 if (i.op[op].disps->X_op == O_constant)
3767 offsetT op_disp = i.op[op].disps->X_add_number;
3769 if (i.types[op].bitfield.disp16
3770 && (op_disp & ~(offsetT) 0xffff) == 0)
3772 /* If this operand is at most 16 bits, convert
3773 to a signed 16 bit number and don't use 64bit
3774 displacement. */
3775 op_disp = (((op_disp & 0xffff) ^ 0x8000) - 0x8000);
3776 i.types[op].bitfield.disp64 = 0;
3778 if (i.types[op].bitfield.disp32
3779 && (op_disp & ~(((offsetT) 2 << 31) - 1)) == 0)
3781 /* If this operand is at most 32 bits, convert
3782 to a signed 32 bit number and don't use 64bit
3783 displacement. */
3784 op_disp &= (((offsetT) 2 << 31) - 1);
3785 op_disp = (op_disp ^ ((offsetT) 1 << 31)) - ((addressT) 1 << 31);
3786 i.types[op].bitfield.disp64 = 0;
3788 if (!op_disp && i.types[op].bitfield.baseindex)
3790 i.types[op].bitfield.disp8 = 0;
3791 i.types[op].bitfield.disp16 = 0;
3792 i.types[op].bitfield.disp32 = 0;
3793 i.types[op].bitfield.disp32s = 0;
3794 i.types[op].bitfield.disp64 = 0;
3795 i.op[op].disps = 0;
3796 i.disp_operands--;
3798 else if (flag_code == CODE_64BIT)
3800 if (fits_in_signed_long (op_disp))
3802 i.types[op].bitfield.disp64 = 0;
3803 i.types[op].bitfield.disp32s = 1;
3805 if (i.prefix[ADDR_PREFIX]
3806 && fits_in_unsigned_long (op_disp))
3807 i.types[op].bitfield.disp32 = 1;
3809 if ((i.types[op].bitfield.disp32
3810 || i.types[op].bitfield.disp32s
3811 || i.types[op].bitfield.disp16)
3812 && fits_in_signed_byte (op_disp))
3813 i.types[op].bitfield.disp8 = 1;
3815 else if (i.reloc[op] == BFD_RELOC_386_TLS_DESC_CALL
3816 || i.reloc[op] == BFD_RELOC_X86_64_TLSDESC_CALL)
3818 fix_new_exp (frag_now, frag_more (0) - frag_now->fr_literal, 0,
3819 i.op[op].disps, 0, i.reloc[op]);
3820 i.types[op].bitfield.disp8 = 0;
3821 i.types[op].bitfield.disp16 = 0;
3822 i.types[op].bitfield.disp32 = 0;
3823 i.types[op].bitfield.disp32s = 0;
3824 i.types[op].bitfield.disp64 = 0;
3826 else
3827 /* We only support 64bit displacement on constants. */
3828 i.types[op].bitfield.disp64 = 0;
3832 /* Check if operands are valid for the instruction. Update VEX
3833 operand types. */
3835 static int
3836 VEX_check_operands (const insn_template *t)
3838 if (!t->opcode_modifier.vex)
3839 return 0;
3841 /* Only check VEX_Imm4, which must be the first operand. */
3842 if (t->operand_types[0].bitfield.vec_imm4)
3844 if (i.op[0].imms->X_op != O_constant
3845 || !fits_in_imm4 (i.op[0].imms->X_add_number))
3847 i.error = bad_imm4;
3848 return 1;
3851 /* Turn off Imm8 so that update_imm won't complain. */
3852 i.types[0] = vec_imm4;
3855 return 0;
3858 static const insn_template *
3859 match_template (void)
3861 /* Points to template once we've found it. */
3862 const insn_template *t;
3863 i386_operand_type overlap0, overlap1, overlap2, overlap3;
3864 i386_operand_type overlap4;
3865 unsigned int found_reverse_match;
3866 i386_opcode_modifier suffix_check;
3867 i386_operand_type operand_types [MAX_OPERANDS];
3868 int addr_prefix_disp;
3869 unsigned int j;
3870 unsigned int found_cpu_match;
3871 unsigned int check_register;
3873 #if MAX_OPERANDS != 5
3874 # error "MAX_OPERANDS must be 5."
3875 #endif
3877 found_reverse_match = 0;
3878 addr_prefix_disp = -1;
3880 memset (&suffix_check, 0, sizeof (suffix_check));
3881 if (i.suffix == BYTE_MNEM_SUFFIX)
3882 suffix_check.no_bsuf = 1;
3883 else if (i.suffix == WORD_MNEM_SUFFIX)
3884 suffix_check.no_wsuf = 1;
3885 else if (i.suffix == SHORT_MNEM_SUFFIX)
3886 suffix_check.no_ssuf = 1;
3887 else if (i.suffix == LONG_MNEM_SUFFIX)
3888 suffix_check.no_lsuf = 1;
3889 else if (i.suffix == QWORD_MNEM_SUFFIX)
3890 suffix_check.no_qsuf = 1;
3891 else if (i.suffix == LONG_DOUBLE_MNEM_SUFFIX)
3892 suffix_check.no_ldsuf = 1;
3894 /* Must have right number of operands. */
3895 i.error = number_of_operands_mismatch;
3897 for (t = current_templates->start; t < current_templates->end; t++)
3899 addr_prefix_disp = -1;
3901 if (i.operands != t->operands)
3902 continue;
3904 /* Check processor support. */
3905 i.error = unsupported;
3906 found_cpu_match = (cpu_flags_match (t)
3907 == CPU_FLAGS_PERFECT_MATCH);
3908 if (!found_cpu_match)
3909 continue;
3911 /* Check old gcc support. */
3912 i.error = old_gcc_only;
3913 if (!old_gcc && t->opcode_modifier.oldgcc)
3914 continue;
3916 /* Check AT&T mnemonic. */
3917 i.error = unsupported_with_intel_mnemonic;
3918 if (intel_mnemonic && t->opcode_modifier.attmnemonic)
3919 continue;
3921 /* Check AT&T/Intel syntax. */
3922 i.error = unsupported_syntax;
3923 if ((intel_syntax && t->opcode_modifier.attsyntax)
3924 || (!intel_syntax && t->opcode_modifier.intelsyntax))
3925 continue;
3927 /* Check the suffix, except for some instructions in intel mode. */
3928 i.error = invalid_instruction_suffix;
3929 if ((!intel_syntax || !t->opcode_modifier.ignoresize)
3930 && ((t->opcode_modifier.no_bsuf && suffix_check.no_bsuf)
3931 || (t->opcode_modifier.no_wsuf && suffix_check.no_wsuf)
3932 || (t->opcode_modifier.no_lsuf && suffix_check.no_lsuf)
3933 || (t->opcode_modifier.no_ssuf && suffix_check.no_ssuf)
3934 || (t->opcode_modifier.no_qsuf && suffix_check.no_qsuf)
3935 || (t->opcode_modifier.no_ldsuf && suffix_check.no_ldsuf)))
3936 continue;
3938 if (!operand_size_match (t))
3939 continue;
3941 for (j = 0; j < MAX_OPERANDS; j++)
3942 operand_types[j] = t->operand_types[j];
3944 /* In general, don't allow 64-bit operands in 32-bit mode. */
3945 if (i.suffix == QWORD_MNEM_SUFFIX
3946 && flag_code != CODE_64BIT
3947 && (intel_syntax
3948 ? (!t->opcode_modifier.ignoresize
3949 && !intel_float_operand (t->name))
3950 : intel_float_operand (t->name) != 2)
3951 && ((!operand_types[0].bitfield.regmmx
3952 && !operand_types[0].bitfield.regxmm
3953 && !operand_types[0].bitfield.regymm)
3954 || (!operand_types[t->operands > 1].bitfield.regmmx
3955 && !!operand_types[t->operands > 1].bitfield.regxmm
3956 && !!operand_types[t->operands > 1].bitfield.regymm))
3957 && (t->base_opcode != 0x0fc7
3958 || t->extension_opcode != 1 /* cmpxchg8b */))
3959 continue;
3961 /* In general, don't allow 32-bit operands on pre-386. */
3962 else if (i.suffix == LONG_MNEM_SUFFIX
3963 && !cpu_arch_flags.bitfield.cpui386
3964 && (intel_syntax
3965 ? (!t->opcode_modifier.ignoresize
3966 && !intel_float_operand (t->name))
3967 : intel_float_operand (t->name) != 2)
3968 && ((!operand_types[0].bitfield.regmmx
3969 && !operand_types[0].bitfield.regxmm)
3970 || (!operand_types[t->operands > 1].bitfield.regmmx
3971 && !!operand_types[t->operands > 1].bitfield.regxmm)))
3972 continue;
3974 /* Do not verify operands when there are none. */
3975 else
3977 if (!t->operands)
3978 /* We've found a match; break out of loop. */
3979 break;
3982 /* Address size prefix will turn Disp64/Disp32/Disp16 operand
3983 into Disp32/Disp16/Disp32 operand. */
3984 if (i.prefix[ADDR_PREFIX] != 0)
3986 /* There should be only one Disp operand. */
3987 switch (flag_code)
3989 case CODE_16BIT:
3990 for (j = 0; j < MAX_OPERANDS; j++)
3992 if (operand_types[j].bitfield.disp16)
3994 addr_prefix_disp = j;
3995 operand_types[j].bitfield.disp32 = 1;
3996 operand_types[j].bitfield.disp16 = 0;
3997 break;
4000 break;
4001 case CODE_32BIT:
4002 for (j = 0; j < MAX_OPERANDS; j++)
4004 if (operand_types[j].bitfield.disp32)
4006 addr_prefix_disp = j;
4007 operand_types[j].bitfield.disp32 = 0;
4008 operand_types[j].bitfield.disp16 = 1;
4009 break;
4012 break;
4013 case CODE_64BIT:
4014 for (j = 0; j < MAX_OPERANDS; j++)
4016 if (operand_types[j].bitfield.disp64)
4018 addr_prefix_disp = j;
4019 operand_types[j].bitfield.disp64 = 0;
4020 operand_types[j].bitfield.disp32 = 1;
4021 break;
4024 break;
4028 /* We check register size if needed. */
4029 check_register = t->opcode_modifier.checkregsize;
4030 overlap0 = operand_type_and (i.types[0], operand_types[0]);
4031 switch (t->operands)
4033 case 1:
4034 if (!operand_type_match (overlap0, i.types[0]))
4035 continue;
4036 break;
4037 case 2:
4038 /* xchg %eax, %eax is a special case. It is an aliase for nop
4039 only in 32bit mode and we can use opcode 0x90. In 64bit
4040 mode, we can't use 0x90 for xchg %eax, %eax since it should
4041 zero-extend %eax to %rax. */
4042 if (flag_code == CODE_64BIT
4043 && t->base_opcode == 0x90
4044 && operand_type_equal (&i.types [0], &acc32)
4045 && operand_type_equal (&i.types [1], &acc32))
4046 continue;
4047 if (i.swap_operand)
4049 /* If we swap operand in encoding, we either match
4050 the next one or reverse direction of operands. */
4051 if (t->opcode_modifier.s)
4052 continue;
4053 else if (t->opcode_modifier.d)
4054 goto check_reverse;
4057 case 3:
4058 /* If we swap operand in encoding, we match the next one. */
4059 if (i.swap_operand && t->opcode_modifier.s)
4060 continue;
4061 case 4:
4062 case 5:
4063 overlap1 = operand_type_and (i.types[1], operand_types[1]);
4064 if (!operand_type_match (overlap0, i.types[0])
4065 || !operand_type_match (overlap1, i.types[1])
4066 || (check_register
4067 && !operand_type_register_match (overlap0, i.types[0],
4068 operand_types[0],
4069 overlap1, i.types[1],
4070 operand_types[1])))
4072 /* Check if other direction is valid ... */
4073 if (!t->opcode_modifier.d && !t->opcode_modifier.floatd)
4074 continue;
4076 check_reverse:
4077 /* Try reversing direction of operands. */
4078 overlap0 = operand_type_and (i.types[0], operand_types[1]);
4079 overlap1 = operand_type_and (i.types[1], operand_types[0]);
4080 if (!operand_type_match (overlap0, i.types[0])
4081 || !operand_type_match (overlap1, i.types[1])
4082 || (check_register
4083 && !operand_type_register_match (overlap0,
4084 i.types[0],
4085 operand_types[1],
4086 overlap1,
4087 i.types[1],
4088 operand_types[0])))
4090 /* Does not match either direction. */
4091 continue;
4093 /* found_reverse_match holds which of D or FloatDR
4094 we've found. */
4095 if (t->opcode_modifier.d)
4096 found_reverse_match = Opcode_D;
4097 else if (t->opcode_modifier.floatd)
4098 found_reverse_match = Opcode_FloatD;
4099 else
4100 found_reverse_match = 0;
4101 if (t->opcode_modifier.floatr)
4102 found_reverse_match |= Opcode_FloatR;
4104 else
4106 /* Found a forward 2 operand match here. */
4107 switch (t->operands)
4109 case 5:
4110 overlap4 = operand_type_and (i.types[4],
4111 operand_types[4]);
4112 case 4:
4113 overlap3 = operand_type_and (i.types[3],
4114 operand_types[3]);
4115 case 3:
4116 overlap2 = operand_type_and (i.types[2],
4117 operand_types[2]);
4118 break;
4121 switch (t->operands)
4123 case 5:
4124 if (!operand_type_match (overlap4, i.types[4])
4125 || !operand_type_register_match (overlap3,
4126 i.types[3],
4127 operand_types[3],
4128 overlap4,
4129 i.types[4],
4130 operand_types[4]))
4131 continue;
4132 case 4:
4133 if (!operand_type_match (overlap3, i.types[3])
4134 || (check_register
4135 && !operand_type_register_match (overlap2,
4136 i.types[2],
4137 operand_types[2],
4138 overlap3,
4139 i.types[3],
4140 operand_types[3])))
4141 continue;
4142 case 3:
4143 /* Here we make use of the fact that there are no
4144 reverse match 3 operand instructions, and all 3
4145 operand instructions only need to be checked for
4146 register consistency between operands 2 and 3. */
4147 if (!operand_type_match (overlap2, i.types[2])
4148 || (check_register
4149 && !operand_type_register_match (overlap1,
4150 i.types[1],
4151 operand_types[1],
4152 overlap2,
4153 i.types[2],
4154 operand_types[2])))
4155 continue;
4156 break;
4159 /* Found either forward/reverse 2, 3 or 4 operand match here:
4160 slip through to break. */
4162 if (!found_cpu_match)
4164 found_reverse_match = 0;
4165 continue;
4168 /* Check if VEX operands are valid. */
4169 if (VEX_check_operands (t))
4170 continue;
4172 /* We've found a match; break out of loop. */
4173 break;
4176 if (t == current_templates->end)
4178 /* We found no match. */
4179 const char *err_msg;
4180 switch (i.error)
4182 default:
4183 abort ();
4184 case operand_size_mismatch:
4185 err_msg = _("operand size mismatch");
4186 break;
4187 case operand_type_mismatch:
4188 err_msg = _("operand type mismatch");
4189 break;
4190 case register_type_mismatch:
4191 err_msg = _("register type mismatch");
4192 break;
4193 case number_of_operands_mismatch:
4194 err_msg = _("number of operands mismatch");
4195 break;
4196 case invalid_instruction_suffix:
4197 err_msg = _("invalid instruction suffix");
4198 break;
4199 case bad_imm4:
4200 err_msg = _("Imm4 isn't the first operand");
4201 break;
4202 case old_gcc_only:
4203 err_msg = _("only supported with old gcc");
4204 break;
4205 case unsupported_with_intel_mnemonic:
4206 err_msg = _("unsupported with Intel mnemonic");
4207 break;
4208 case unsupported_syntax:
4209 err_msg = _("unsupported syntax");
4210 break;
4211 case unsupported:
4212 err_msg = _("unsupported");
4213 break;
4215 as_bad (_("%s for `%s'"), err_msg,
4216 current_templates->start->name);
4217 return NULL;
4220 if (!quiet_warnings)
4222 if (!intel_syntax
4223 && (i.types[0].bitfield.jumpabsolute
4224 != operand_types[0].bitfield.jumpabsolute))
4226 as_warn (_("indirect %s without `*'"), t->name);
4229 if (t->opcode_modifier.isprefix
4230 && t->opcode_modifier.ignoresize)
4232 /* Warn them that a data or address size prefix doesn't
4233 affect assembly of the next line of code. */
4234 as_warn (_("stand-alone `%s' prefix"), t->name);
4238 /* Copy the template we found. */
4239 i.tm = *t;
4241 if (addr_prefix_disp != -1)
4242 i.tm.operand_types[addr_prefix_disp]
4243 = operand_types[addr_prefix_disp];
4245 if (found_reverse_match)
4247 /* If we found a reverse match we must alter the opcode
4248 direction bit. found_reverse_match holds bits to change
4249 (different for int & float insns). */
4251 i.tm.base_opcode ^= found_reverse_match;
4253 i.tm.operand_types[0] = operand_types[1];
4254 i.tm.operand_types[1] = operand_types[0];
4257 return t;
4260 static int
4261 check_string (void)
4263 int mem_op = operand_type_check (i.types[0], anymem) ? 0 : 1;
4264 if (i.tm.operand_types[mem_op].bitfield.esseg)
4266 if (i.seg[0] != NULL && i.seg[0] != &es)
4268 as_bad (_("`%s' operand %d must use `%ses' segment"),
4269 i.tm.name,
4270 mem_op + 1,
4271 register_prefix);
4272 return 0;
4274 /* There's only ever one segment override allowed per instruction.
4275 This instruction possibly has a legal segment override on the
4276 second operand, so copy the segment to where non-string
4277 instructions store it, allowing common code. */
4278 i.seg[0] = i.seg[1];
4280 else if (i.tm.operand_types[mem_op + 1].bitfield.esseg)
4282 if (i.seg[1] != NULL && i.seg[1] != &es)
4284 as_bad (_("`%s' operand %d must use `%ses' segment"),
4285 i.tm.name,
4286 mem_op + 2,
4287 register_prefix);
4288 return 0;
4291 return 1;
4294 static int
4295 process_suffix (void)
4297 /* If matched instruction specifies an explicit instruction mnemonic
4298 suffix, use it. */
4299 if (i.tm.opcode_modifier.size16)
4300 i.suffix = WORD_MNEM_SUFFIX;
4301 else if (i.tm.opcode_modifier.size32)
4302 i.suffix = LONG_MNEM_SUFFIX;
4303 else if (i.tm.opcode_modifier.size64)
4304 i.suffix = QWORD_MNEM_SUFFIX;
4305 else if (i.reg_operands)
4307 /* If there's no instruction mnemonic suffix we try to invent one
4308 based on register operands. */
4309 if (!i.suffix)
4311 /* We take i.suffix from the last register operand specified,
4312 Destination register type is more significant than source
4313 register type. crc32 in SSE4.2 prefers source register
4314 type. */
4315 if (i.tm.base_opcode == 0xf20f38f1)
4317 if (i.types[0].bitfield.reg16)
4318 i.suffix = WORD_MNEM_SUFFIX;
4319 else if (i.types[0].bitfield.reg32)
4320 i.suffix = LONG_MNEM_SUFFIX;
4321 else if (i.types[0].bitfield.reg64)
4322 i.suffix = QWORD_MNEM_SUFFIX;
4324 else if (i.tm.base_opcode == 0xf20f38f0)
4326 if (i.types[0].bitfield.reg8)
4327 i.suffix = BYTE_MNEM_SUFFIX;
4330 if (!i.suffix)
4332 int op;
4334 if (i.tm.base_opcode == 0xf20f38f1
4335 || i.tm.base_opcode == 0xf20f38f0)
4337 /* We have to know the operand size for crc32. */
4338 as_bad (_("ambiguous memory operand size for `%s`"),
4339 i.tm.name);
4340 return 0;
4343 for (op = i.operands; --op >= 0;)
4344 if (!i.tm.operand_types[op].bitfield.inoutportreg)
4346 if (i.types[op].bitfield.reg8)
4348 i.suffix = BYTE_MNEM_SUFFIX;
4349 break;
4351 else if (i.types[op].bitfield.reg16)
4353 i.suffix = WORD_MNEM_SUFFIX;
4354 break;
4356 else if (i.types[op].bitfield.reg32)
4358 i.suffix = LONG_MNEM_SUFFIX;
4359 break;
4361 else if (i.types[op].bitfield.reg64)
4363 i.suffix = QWORD_MNEM_SUFFIX;
4364 break;
4369 else if (i.suffix == BYTE_MNEM_SUFFIX)
4371 if (intel_syntax
4372 && i.tm.opcode_modifier.ignoresize
4373 && i.tm.opcode_modifier.no_bsuf)
4374 i.suffix = 0;
4375 else if (!check_byte_reg ())
4376 return 0;
4378 else if (i.suffix == LONG_MNEM_SUFFIX)
4380 if (intel_syntax
4381 && i.tm.opcode_modifier.ignoresize
4382 && i.tm.opcode_modifier.no_lsuf)
4383 i.suffix = 0;
4384 else if (!check_long_reg ())
4385 return 0;
4387 else if (i.suffix == QWORD_MNEM_SUFFIX)
4389 if (intel_syntax
4390 && i.tm.opcode_modifier.ignoresize
4391 && i.tm.opcode_modifier.no_qsuf)
4392 i.suffix = 0;
4393 else if (!check_qword_reg ())
4394 return 0;
4396 else if (i.suffix == WORD_MNEM_SUFFIX)
4398 if (intel_syntax
4399 && i.tm.opcode_modifier.ignoresize
4400 && i.tm.opcode_modifier.no_wsuf)
4401 i.suffix = 0;
4402 else if (!check_word_reg ())
4403 return 0;
4405 else if (i.suffix == XMMWORD_MNEM_SUFFIX
4406 || i.suffix == YMMWORD_MNEM_SUFFIX)
4408 /* Skip if the instruction has x/y suffix. match_template
4409 should check if it is a valid suffix. */
4411 else if (intel_syntax && i.tm.opcode_modifier.ignoresize)
4412 /* Do nothing if the instruction is going to ignore the prefix. */
4414 else
4415 abort ();
4417 else if (i.tm.opcode_modifier.defaultsize
4418 && !i.suffix
4419 /* exclude fldenv/frstor/fsave/fstenv */
4420 && i.tm.opcode_modifier.no_ssuf)
4422 i.suffix = stackop_size;
4424 else if (intel_syntax
4425 && !i.suffix
4426 && (i.tm.operand_types[0].bitfield.jumpabsolute
4427 || i.tm.opcode_modifier.jumpbyte
4428 || i.tm.opcode_modifier.jumpintersegment
4429 || (i.tm.base_opcode == 0x0f01 /* [ls][gi]dt */
4430 && i.tm.extension_opcode <= 3)))
4432 switch (flag_code)
4434 case CODE_64BIT:
4435 if (!i.tm.opcode_modifier.no_qsuf)
4437 i.suffix = QWORD_MNEM_SUFFIX;
4438 break;
4440 case CODE_32BIT:
4441 if (!i.tm.opcode_modifier.no_lsuf)
4442 i.suffix = LONG_MNEM_SUFFIX;
4443 break;
4444 case CODE_16BIT:
4445 if (!i.tm.opcode_modifier.no_wsuf)
4446 i.suffix = WORD_MNEM_SUFFIX;
4447 break;
4451 if (!i.suffix)
4453 if (!intel_syntax)
4455 if (i.tm.opcode_modifier.w)
4457 as_bad (_("no instruction mnemonic suffix given and "
4458 "no register operands; can't size instruction"));
4459 return 0;
4462 else
4464 unsigned int suffixes;
4466 suffixes = !i.tm.opcode_modifier.no_bsuf;
4467 if (!i.tm.opcode_modifier.no_wsuf)
4468 suffixes |= 1 << 1;
4469 if (!i.tm.opcode_modifier.no_lsuf)
4470 suffixes |= 1 << 2;
4471 if (!i.tm.opcode_modifier.no_ldsuf)
4472 suffixes |= 1 << 3;
4473 if (!i.tm.opcode_modifier.no_ssuf)
4474 suffixes |= 1 << 4;
4475 if (!i.tm.opcode_modifier.no_qsuf)
4476 suffixes |= 1 << 5;
4478 /* There are more than suffix matches. */
4479 if (i.tm.opcode_modifier.w
4480 || ((suffixes & (suffixes - 1))
4481 && !i.tm.opcode_modifier.defaultsize
4482 && !i.tm.opcode_modifier.ignoresize))
4484 as_bad (_("ambiguous operand size for `%s'"), i.tm.name);
4485 return 0;
4490 /* Change the opcode based on the operand size given by i.suffix;
4491 We don't need to change things for byte insns. */
4493 if (i.suffix
4494 && i.suffix != BYTE_MNEM_SUFFIX
4495 && i.suffix != XMMWORD_MNEM_SUFFIX
4496 && i.suffix != YMMWORD_MNEM_SUFFIX)
4498 /* It's not a byte, select word/dword operation. */
4499 if (i.tm.opcode_modifier.w)
4501 if (i.tm.opcode_modifier.shortform)
4502 i.tm.base_opcode |= 8;
4503 else
4504 i.tm.base_opcode |= 1;
4507 /* Now select between word & dword operations via the operand
4508 size prefix, except for instructions that will ignore this
4509 prefix anyway. */
4510 if (i.tm.opcode_modifier.addrprefixop0)
4512 /* The address size override prefix changes the size of the
4513 first operand. */
4514 if ((flag_code == CODE_32BIT
4515 && i.op->regs[0].reg_type.bitfield.reg16)
4516 || (flag_code != CODE_32BIT
4517 && i.op->regs[0].reg_type.bitfield.reg32))
4518 if (!add_prefix (ADDR_PREFIX_OPCODE))
4519 return 0;
4521 else if (i.suffix != QWORD_MNEM_SUFFIX
4522 && i.suffix != LONG_DOUBLE_MNEM_SUFFIX
4523 && !i.tm.opcode_modifier.ignoresize
4524 && !i.tm.opcode_modifier.floatmf
4525 && ((i.suffix == LONG_MNEM_SUFFIX) == (flag_code == CODE_16BIT)
4526 || (flag_code == CODE_64BIT
4527 && i.tm.opcode_modifier.jumpbyte)))
4529 unsigned int prefix = DATA_PREFIX_OPCODE;
4531 if (i.tm.opcode_modifier.jumpbyte) /* jcxz, loop */
4532 prefix = ADDR_PREFIX_OPCODE;
4534 if (!add_prefix (prefix))
4535 return 0;
4538 /* Set mode64 for an operand. */
4539 if (i.suffix == QWORD_MNEM_SUFFIX
4540 && flag_code == CODE_64BIT
4541 && !i.tm.opcode_modifier.norex64)
4543 /* Special case for xchg %rax,%rax. It is NOP and doesn't
4544 need rex64. cmpxchg8b is also a special case. */
4545 if (! (i.operands == 2
4546 && i.tm.base_opcode == 0x90
4547 && i.tm.extension_opcode == None
4548 && operand_type_equal (&i.types [0], &acc64)
4549 && operand_type_equal (&i.types [1], &acc64))
4550 && ! (i.operands == 1
4551 && i.tm.base_opcode == 0xfc7
4552 && i.tm.extension_opcode == 1
4553 && !operand_type_check (i.types [0], reg)
4554 && operand_type_check (i.types [0], anymem)))
4555 i.rex |= REX_W;
4558 /* Size floating point instruction. */
4559 if (i.suffix == LONG_MNEM_SUFFIX)
4560 if (i.tm.opcode_modifier.floatmf)
4561 i.tm.base_opcode ^= 4;
4564 return 1;
4567 static int
4568 check_byte_reg (void)
4570 int op;
4572 for (op = i.operands; --op >= 0;)
4574 /* If this is an eight bit register, it's OK. If it's the 16 or
4575 32 bit version of an eight bit register, we will just use the
4576 low portion, and that's OK too. */
4577 if (i.types[op].bitfield.reg8)
4578 continue;
4580 /* crc32 doesn't generate this warning. */
4581 if (i.tm.base_opcode == 0xf20f38f0)
4582 continue;
4584 if ((i.types[op].bitfield.reg16
4585 || i.types[op].bitfield.reg32
4586 || i.types[op].bitfield.reg64)
4587 && i.op[op].regs->reg_num < 4)
4589 /* Prohibit these changes in the 64bit mode, since the
4590 lowering is more complicated. */
4591 if (flag_code == CODE_64BIT
4592 && !i.tm.operand_types[op].bitfield.inoutportreg)
4594 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4595 register_prefix, i.op[op].regs->reg_name,
4596 i.suffix);
4597 return 0;
4599 #if REGISTER_WARNINGS
4600 if (!quiet_warnings
4601 && !i.tm.operand_types[op].bitfield.inoutportreg)
4602 as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
4603 register_prefix,
4604 (i.op[op].regs + (i.types[op].bitfield.reg16
4605 ? REGNAM_AL - REGNAM_AX
4606 : REGNAM_AL - REGNAM_EAX))->reg_name,
4607 register_prefix,
4608 i.op[op].regs->reg_name,
4609 i.suffix);
4610 #endif
4611 continue;
4613 /* Any other register is bad. */
4614 if (i.types[op].bitfield.reg16
4615 || i.types[op].bitfield.reg32
4616 || i.types[op].bitfield.reg64
4617 || i.types[op].bitfield.regmmx
4618 || i.types[op].bitfield.regxmm
4619 || i.types[op].bitfield.regymm
4620 || i.types[op].bitfield.sreg2
4621 || i.types[op].bitfield.sreg3
4622 || i.types[op].bitfield.control
4623 || i.types[op].bitfield.debug
4624 || i.types[op].bitfield.test
4625 || i.types[op].bitfield.floatreg
4626 || i.types[op].bitfield.floatacc)
4628 as_bad (_("`%s%s' not allowed with `%s%c'"),
4629 register_prefix,
4630 i.op[op].regs->reg_name,
4631 i.tm.name,
4632 i.suffix);
4633 return 0;
4636 return 1;
4639 static int
4640 check_long_reg (void)
4642 int op;
4644 for (op = i.operands; --op >= 0;)
4645 /* Reject eight bit registers, except where the template requires
4646 them. (eg. movzb) */
4647 if (i.types[op].bitfield.reg8
4648 && (i.tm.operand_types[op].bitfield.reg16
4649 || i.tm.operand_types[op].bitfield.reg32
4650 || i.tm.operand_types[op].bitfield.acc))
4652 as_bad (_("`%s%s' not allowed with `%s%c'"),
4653 register_prefix,
4654 i.op[op].regs->reg_name,
4655 i.tm.name,
4656 i.suffix);
4657 return 0;
4659 /* Warn if the e prefix on a general reg is missing. */
4660 else if ((!quiet_warnings || flag_code == CODE_64BIT)
4661 && i.types[op].bitfield.reg16
4662 && (i.tm.operand_types[op].bitfield.reg32
4663 || i.tm.operand_types[op].bitfield.acc))
4665 /* Prohibit these changes in the 64bit mode, since the
4666 lowering is more complicated. */
4667 if (flag_code == CODE_64BIT)
4669 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4670 register_prefix, i.op[op].regs->reg_name,
4671 i.suffix);
4672 return 0;
4674 #if REGISTER_WARNINGS
4675 else
4676 as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
4677 register_prefix,
4678 (i.op[op].regs + REGNAM_EAX - REGNAM_AX)->reg_name,
4679 register_prefix,
4680 i.op[op].regs->reg_name,
4681 i.suffix);
4682 #endif
4684 /* Warn if the r prefix on a general reg is missing. */
4685 else if (i.types[op].bitfield.reg64
4686 && (i.tm.operand_types[op].bitfield.reg32
4687 || i.tm.operand_types[op].bitfield.acc))
4689 if (intel_syntax
4690 && i.tm.opcode_modifier.toqword
4691 && !i.types[0].bitfield.regxmm)
4693 /* Convert to QWORD. We want REX byte. */
4694 i.suffix = QWORD_MNEM_SUFFIX;
4696 else
4698 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4699 register_prefix, i.op[op].regs->reg_name,
4700 i.suffix);
4701 return 0;
4704 return 1;
4707 static int
4708 check_qword_reg (void)
4710 int op;
4712 for (op = i.operands; --op >= 0; )
4713 /* Reject eight bit registers, except where the template requires
4714 them. (eg. movzb) */
4715 if (i.types[op].bitfield.reg8
4716 && (i.tm.operand_types[op].bitfield.reg16
4717 || i.tm.operand_types[op].bitfield.reg32
4718 || i.tm.operand_types[op].bitfield.acc))
4720 as_bad (_("`%s%s' not allowed with `%s%c'"),
4721 register_prefix,
4722 i.op[op].regs->reg_name,
4723 i.tm.name,
4724 i.suffix);
4725 return 0;
4727 /* Warn if the e prefix on a general reg is missing. */
4728 else if ((i.types[op].bitfield.reg16
4729 || i.types[op].bitfield.reg32)
4730 && (i.tm.operand_types[op].bitfield.reg32
4731 || i.tm.operand_types[op].bitfield.acc))
4733 /* Prohibit these changes in the 64bit mode, since the
4734 lowering is more complicated. */
4735 if (intel_syntax
4736 && i.tm.opcode_modifier.todword
4737 && !i.types[0].bitfield.regxmm)
4739 /* Convert to DWORD. We don't want REX byte. */
4740 i.suffix = LONG_MNEM_SUFFIX;
4742 else
4744 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4745 register_prefix, i.op[op].regs->reg_name,
4746 i.suffix);
4747 return 0;
4750 return 1;
4753 static int
4754 check_word_reg (void)
4756 int op;
4757 for (op = i.operands; --op >= 0;)
4758 /* Reject eight bit registers, except where the template requires
4759 them. (eg. movzb) */
4760 if (i.types[op].bitfield.reg8
4761 && (i.tm.operand_types[op].bitfield.reg16
4762 || i.tm.operand_types[op].bitfield.reg32
4763 || i.tm.operand_types[op].bitfield.acc))
4765 as_bad (_("`%s%s' not allowed with `%s%c'"),
4766 register_prefix,
4767 i.op[op].regs->reg_name,
4768 i.tm.name,
4769 i.suffix);
4770 return 0;
4772 /* Warn if the e prefix on a general reg is present. */
4773 else if ((!quiet_warnings || flag_code == CODE_64BIT)
4774 && i.types[op].bitfield.reg32
4775 && (i.tm.operand_types[op].bitfield.reg16
4776 || i.tm.operand_types[op].bitfield.acc))
4778 /* Prohibit these changes in the 64bit mode, since the
4779 lowering is more complicated. */
4780 if (flag_code == CODE_64BIT)
4782 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4783 register_prefix, i.op[op].regs->reg_name,
4784 i.suffix);
4785 return 0;
4787 else
4788 #if REGISTER_WARNINGS
4789 as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
4790 register_prefix,
4791 (i.op[op].regs + REGNAM_AX - REGNAM_EAX)->reg_name,
4792 register_prefix,
4793 i.op[op].regs->reg_name,
4794 i.suffix);
4795 #endif
4797 return 1;
4800 static int
4801 update_imm (unsigned int j)
4803 i386_operand_type overlap = i.types[j];
4804 if ((overlap.bitfield.imm8
4805 || overlap.bitfield.imm8s
4806 || overlap.bitfield.imm16
4807 || overlap.bitfield.imm32
4808 || overlap.bitfield.imm32s
4809 || overlap.bitfield.imm64)
4810 && !operand_type_equal (&overlap, &imm8)
4811 && !operand_type_equal (&overlap, &imm8s)
4812 && !operand_type_equal (&overlap, &imm16)
4813 && !operand_type_equal (&overlap, &imm32)
4814 && !operand_type_equal (&overlap, &imm32s)
4815 && !operand_type_equal (&overlap, &imm64))
4817 if (i.suffix)
4819 i386_operand_type temp;
4821 operand_type_set (&temp, 0);
4822 if (i.suffix == BYTE_MNEM_SUFFIX)
4824 temp.bitfield.imm8 = overlap.bitfield.imm8;
4825 temp.bitfield.imm8s = overlap.bitfield.imm8s;
4827 else if (i.suffix == WORD_MNEM_SUFFIX)
4828 temp.bitfield.imm16 = overlap.bitfield.imm16;
4829 else if (i.suffix == QWORD_MNEM_SUFFIX)
4831 temp.bitfield.imm64 = overlap.bitfield.imm64;
4832 temp.bitfield.imm32s = overlap.bitfield.imm32s;
4834 else
4835 temp.bitfield.imm32 = overlap.bitfield.imm32;
4836 overlap = temp;
4838 else if (operand_type_equal (&overlap, &imm16_32_32s)
4839 || operand_type_equal (&overlap, &imm16_32)
4840 || operand_type_equal (&overlap, &imm16_32s))
4842 if ((flag_code == CODE_16BIT) ^ (i.prefix[DATA_PREFIX] != 0))
4843 overlap = imm16;
4844 else
4845 overlap = imm32s;
4847 if (!operand_type_equal (&overlap, &imm8)
4848 && !operand_type_equal (&overlap, &imm8s)
4849 && !operand_type_equal (&overlap, &imm16)
4850 && !operand_type_equal (&overlap, &imm32)
4851 && !operand_type_equal (&overlap, &imm32s)
4852 && !operand_type_equal (&overlap, &imm64))
4854 as_bad (_("no instruction mnemonic suffix given; "
4855 "can't determine immediate size"));
4856 return 0;
4859 i.types[j] = overlap;
4861 return 1;
4864 static int
4865 finalize_imm (void)
4867 unsigned int j, n;
4869 /* Update the first 2 immediate operands. */
4870 n = i.operands > 2 ? 2 : i.operands;
4871 if (n)
4873 for (j = 0; j < n; j++)
4874 if (update_imm (j) == 0)
4875 return 0;
4877 /* The 3rd operand can't be immediate operand. */
4878 gas_assert (operand_type_check (i.types[2], imm) == 0);
4881 return 1;
4884 static int
4885 bad_implicit_operand (int xmm)
4887 const char *ireg = xmm ? "xmm0" : "ymm0";
4889 if (intel_syntax)
4890 as_bad (_("the last operand of `%s' must be `%s%s'"),
4891 i.tm.name, register_prefix, ireg);
4892 else
4893 as_bad (_("the first operand of `%s' must be `%s%s'"),
4894 i.tm.name, register_prefix, ireg);
4895 return 0;
4898 static int
4899 process_operands (void)
4901 /* Default segment register this instruction will use for memory
4902 accesses. 0 means unknown. This is only for optimizing out
4903 unnecessary segment overrides. */
4904 const seg_entry *default_seg = 0;
4906 if (i.tm.opcode_modifier.sse2avx && i.tm.opcode_modifier.vexvvvv)
4908 unsigned int dupl = i.operands;
4909 unsigned int dest = dupl - 1;
4910 unsigned int j;
4912 /* The destination must be an xmm register. */
4913 gas_assert (i.reg_operands
4914 && MAX_OPERANDS > dupl
4915 && operand_type_equal (&i.types[dest], &regxmm));
4917 if (i.tm.opcode_modifier.firstxmm0)
4919 /* The first operand is implicit and must be xmm0. */
4920 gas_assert (operand_type_equal (&i.types[0], &regxmm));
4921 if (i.op[0].regs->reg_num != 0)
4922 return bad_implicit_operand (1);
4924 if (i.tm.opcode_modifier.vexsources == VEX3SOURCES)
4926 /* Keep xmm0 for instructions with VEX prefix and 3
4927 sources. */
4928 goto duplicate;
4930 else
4932 /* We remove the first xmm0 and keep the number of
4933 operands unchanged, which in fact duplicates the
4934 destination. */
4935 for (j = 1; j < i.operands; j++)
4937 i.op[j - 1] = i.op[j];
4938 i.types[j - 1] = i.types[j];
4939 i.tm.operand_types[j - 1] = i.tm.operand_types[j];
4943 else if (i.tm.opcode_modifier.implicit1stxmm0)
4945 gas_assert ((MAX_OPERANDS - 1) > dupl
4946 && (i.tm.opcode_modifier.vexsources
4947 == VEX3SOURCES));
4949 /* Add the implicit xmm0 for instructions with VEX prefix
4950 and 3 sources. */
4951 for (j = i.operands; j > 0; j--)
4953 i.op[j] = i.op[j - 1];
4954 i.types[j] = i.types[j - 1];
4955 i.tm.operand_types[j] = i.tm.operand_types[j - 1];
4957 i.op[0].regs
4958 = (const reg_entry *) hash_find (reg_hash, "xmm0");
4959 i.types[0] = regxmm;
4960 i.tm.operand_types[0] = regxmm;
4962 i.operands += 2;
4963 i.reg_operands += 2;
4964 i.tm.operands += 2;
4966 dupl++;
4967 dest++;
4968 i.op[dupl] = i.op[dest];
4969 i.types[dupl] = i.types[dest];
4970 i.tm.operand_types[dupl] = i.tm.operand_types[dest];
4972 else
4974 duplicate:
4975 i.operands++;
4976 i.reg_operands++;
4977 i.tm.operands++;
4979 i.op[dupl] = i.op[dest];
4980 i.types[dupl] = i.types[dest];
4981 i.tm.operand_types[dupl] = i.tm.operand_types[dest];
4984 if (i.tm.opcode_modifier.immext)
4985 process_immext ();
4987 else if (i.tm.opcode_modifier.firstxmm0)
4989 unsigned int j;
4991 /* The first operand is implicit and must be xmm0/ymm0. */
4992 gas_assert (i.reg_operands
4993 && (operand_type_equal (&i.types[0], &regxmm)
4994 || operand_type_equal (&i.types[0], &regymm)));
4995 if (i.op[0].regs->reg_num != 0)
4996 return bad_implicit_operand (i.types[0].bitfield.regxmm);
4998 for (j = 1; j < i.operands; j++)
5000 i.op[j - 1] = i.op[j];
5001 i.types[j - 1] = i.types[j];
5003 /* We need to adjust fields in i.tm since they are used by
5004 build_modrm_byte. */
5005 i.tm.operand_types [j - 1] = i.tm.operand_types [j];
5008 i.operands--;
5009 i.reg_operands--;
5010 i.tm.operands--;
5012 else if (i.tm.opcode_modifier.regkludge)
5014 /* The imul $imm, %reg instruction is converted into
5015 imul $imm, %reg, %reg, and the clr %reg instruction
5016 is converted into xor %reg, %reg. */
5018 unsigned int first_reg_op;
5020 if (operand_type_check (i.types[0], reg))
5021 first_reg_op = 0;
5022 else
5023 first_reg_op = 1;
5024 /* Pretend we saw the extra register operand. */
5025 gas_assert (i.reg_operands == 1
5026 && i.op[first_reg_op + 1].regs == 0);
5027 i.op[first_reg_op + 1].regs = i.op[first_reg_op].regs;
5028 i.types[first_reg_op + 1] = i.types[first_reg_op];
5029 i.operands++;
5030 i.reg_operands++;
5033 if (i.tm.opcode_modifier.shortform)
5035 if (i.types[0].bitfield.sreg2
5036 || i.types[0].bitfield.sreg3)
5038 if (i.tm.base_opcode == POP_SEG_SHORT
5039 && i.op[0].regs->reg_num == 1)
5041 as_bad (_("you can't `pop %scs'"), register_prefix);
5042 return 0;
5044 i.tm.base_opcode |= (i.op[0].regs->reg_num << 3);
5045 if ((i.op[0].regs->reg_flags & RegRex) != 0)
5046 i.rex |= REX_B;
5048 else
5050 /* The register or float register operand is in operand
5051 0 or 1. */
5052 unsigned int op;
5054 if (i.types[0].bitfield.floatreg
5055 || operand_type_check (i.types[0], reg))
5056 op = 0;
5057 else
5058 op = 1;
5059 /* Register goes in low 3 bits of opcode. */
5060 i.tm.base_opcode |= i.op[op].regs->reg_num;
5061 if ((i.op[op].regs->reg_flags & RegRex) != 0)
5062 i.rex |= REX_B;
5063 if (!quiet_warnings && i.tm.opcode_modifier.ugh)
5065 /* Warn about some common errors, but press on regardless.
5066 The first case can be generated by gcc (<= 2.8.1). */
5067 if (i.operands == 2)
5069 /* Reversed arguments on faddp, fsubp, etc. */
5070 as_warn (_("translating to `%s %s%s,%s%s'"), i.tm.name,
5071 register_prefix, i.op[!intel_syntax].regs->reg_name,
5072 register_prefix, i.op[intel_syntax].regs->reg_name);
5074 else
5076 /* Extraneous `l' suffix on fp insn. */
5077 as_warn (_("translating to `%s %s%s'"), i.tm.name,
5078 register_prefix, i.op[0].regs->reg_name);
5083 else if (i.tm.opcode_modifier.modrm)
5085 /* The opcode is completed (modulo i.tm.extension_opcode which
5086 must be put into the modrm byte). Now, we make the modrm and
5087 index base bytes based on all the info we've collected. */
5089 default_seg = build_modrm_byte ();
5091 else if ((i.tm.base_opcode & ~0x3) == MOV_AX_DISP32)
5093 default_seg = &ds;
5095 else if (i.tm.opcode_modifier.isstring)
5097 /* For the string instructions that allow a segment override
5098 on one of their operands, the default segment is ds. */
5099 default_seg = &ds;
5102 if (i.tm.base_opcode == 0x8d /* lea */
5103 && i.seg[0]
5104 && !quiet_warnings)
5105 as_warn (_("segment override on `%s' is ineffectual"), i.tm.name);
5107 /* If a segment was explicitly specified, and the specified segment
5108 is not the default, use an opcode prefix to select it. If we
5109 never figured out what the default segment is, then default_seg
5110 will be zero at this point, and the specified segment prefix will
5111 always be used. */
5112 if ((i.seg[0]) && (i.seg[0] != default_seg))
5114 if (!add_prefix (i.seg[0]->seg_prefix))
5115 return 0;
5117 return 1;
5120 static const seg_entry *
5121 build_modrm_byte (void)
5123 const seg_entry *default_seg = 0;
5124 unsigned int source, dest;
5125 int vex_3_sources;
5127 /* The first operand of instructions with VEX prefix and 3 sources
5128 must be VEX_Imm4. */
5129 vex_3_sources = i.tm.opcode_modifier.vexsources == VEX3SOURCES;
5130 if (vex_3_sources)
5132 unsigned int nds, reg_slot;
5133 expressionS *exp;
5135 if (i.tm.opcode_modifier.veximmext
5136 && i.tm.opcode_modifier.immext)
5138 dest = i.operands - 2;
5139 gas_assert (dest == 3);
5141 else
5142 dest = i.operands - 1;
5143 nds = dest - 1;
5145 /* There are 2 kinds of instructions:
5146 1. 5 operands: 4 register operands or 3 register operands
5147 plus 1 memory operand plus one Vec_Imm4 operand, VexXDS, and
5148 VexW0 or VexW1. The destination must be either XMM or YMM
5149 register.
5150 2. 4 operands: 4 register operands or 3 register operands
5151 plus 1 memory operand, VexXDS, and VexImmExt */
5152 gas_assert ((i.reg_operands == 4
5153 || (i.reg_operands == 3 && i.mem_operands == 1))
5154 && i.tm.opcode_modifier.vexvvvv == VEXXDS
5155 && (i.tm.opcode_modifier.veximmext
5156 || (i.imm_operands == 1
5157 && i.types[0].bitfield.vec_imm4
5158 && (i.tm.opcode_modifier.vexw == VEXW0
5159 || i.tm.opcode_modifier.vexw == VEXW1)
5160 && (operand_type_equal (&i.tm.operand_types[dest], &regxmm)
5161 || operand_type_equal (&i.tm.operand_types[dest], &regymm)))));
5163 if (i.imm_operands == 0)
5165 /* When there is no immediate operand, generate an 8bit
5166 immediate operand to encode the first operand. */
5167 exp = &im_expressions[i.imm_operands++];
5168 i.op[i.operands].imms = exp;
5169 i.types[i.operands] = imm8;
5170 i.operands++;
5171 /* If VexW1 is set, the first operand is the source and
5172 the second operand is encoded in the immediate operand. */
5173 if (i.tm.opcode_modifier.vexw == VEXW1)
5175 source = 0;
5176 reg_slot = 1;
5178 else
5180 source = 1;
5181 reg_slot = 0;
5184 /* FMA swaps REG and NDS. */
5185 if (i.tm.cpu_flags.bitfield.cpufma)
5187 unsigned int tmp;
5188 tmp = reg_slot;
5189 reg_slot = nds;
5190 nds = tmp;
5193 gas_assert (operand_type_equal (&i.tm.operand_types[reg_slot],
5194 &regxmm)
5195 || operand_type_equal (&i.tm.operand_types[reg_slot],
5196 &regymm));
5197 exp->X_op = O_constant;
5198 exp->X_add_number
5199 = ((i.op[reg_slot].regs->reg_num
5200 + ((i.op[reg_slot].regs->reg_flags & RegRex) ? 8 : 0))
5201 << 4);
5203 else
5205 unsigned int imm_slot;
5207 if (i.tm.opcode_modifier.vexw == VEXW0)
5209 /* If VexW0 is set, the third operand is the source and
5210 the second operand is encoded in the immediate
5211 operand. */
5212 source = 2;
5213 reg_slot = 1;
5215 else
5217 /* VexW1 is set, the second operand is the source and
5218 the third operand is encoded in the immediate
5219 operand. */
5220 source = 1;
5221 reg_slot = 2;
5224 if (i.tm.opcode_modifier.immext)
5226 /* When ImmExt is set, the immdiate byte is the last
5227 operand. */
5228 imm_slot = i.operands - 1;
5229 source--;
5230 reg_slot--;
5232 else
5234 imm_slot = 0;
5236 /* Turn on Imm8 so that output_imm will generate it. */
5237 i.types[imm_slot].bitfield.imm8 = 1;
5240 gas_assert (operand_type_equal (&i.tm.operand_types[reg_slot],
5241 &regxmm)
5242 || operand_type_equal (&i.tm.operand_types[reg_slot],
5243 &regymm));
5244 i.op[imm_slot].imms->X_add_number
5245 |= ((i.op[reg_slot].regs->reg_num
5246 + ((i.op[reg_slot].regs->reg_flags & RegRex) ? 8 : 0))
5247 << 4);
5250 gas_assert (operand_type_equal (&i.tm.operand_types[nds], &regxmm)
5251 || operand_type_equal (&i.tm.operand_types[nds],
5252 &regymm));
5253 i.vex.register_specifier = i.op[nds].regs;
5255 else
5256 source = dest = 0;
5258 /* i.reg_operands MUST be the number of real register operands;
5259 implicit registers do not count. If there are 3 register
5260 operands, it must be a instruction with VexNDS. For a
5261 instruction with VexNDD, the destination register is encoded
5262 in VEX prefix. If there are 4 register operands, it must be
5263 a instruction with VEX prefix and 3 sources. */
5264 if (i.mem_operands == 0
5265 && ((i.reg_operands == 2
5266 && i.tm.opcode_modifier.vexvvvv <= VEXXDS)
5267 || (i.reg_operands == 3
5268 && i.tm.opcode_modifier.vexvvvv == VEXXDS)
5269 || (i.reg_operands == 4 && vex_3_sources)))
5271 switch (i.operands)
5273 case 2:
5274 source = 0;
5275 break;
5276 case 3:
5277 /* When there are 3 operands, one of them may be immediate,
5278 which may be the first or the last operand. Otherwise,
5279 the first operand must be shift count register (cl) or it
5280 is an instruction with VexNDS. */
5281 gas_assert (i.imm_operands == 1
5282 || (i.imm_operands == 0
5283 && (i.tm.opcode_modifier.vexvvvv == VEXXDS
5284 || i.types[0].bitfield.shiftcount)));
5285 if (operand_type_check (i.types[0], imm)
5286 || i.types[0].bitfield.shiftcount)
5287 source = 1;
5288 else
5289 source = 0;
5290 break;
5291 case 4:
5292 /* When there are 4 operands, the first two must be 8bit
5293 immediate operands. The source operand will be the 3rd
5294 one.
5296 For instructions with VexNDS, if the first operand
5297 an imm8, the source operand is the 2nd one. If the last
5298 operand is imm8, the source operand is the first one. */
5299 gas_assert ((i.imm_operands == 2
5300 && i.types[0].bitfield.imm8
5301 && i.types[1].bitfield.imm8)
5302 || (i.tm.opcode_modifier.vexvvvv == VEXXDS
5303 && i.imm_operands == 1
5304 && (i.types[0].bitfield.imm8
5305 || i.types[i.operands - 1].bitfield.imm8)));
5306 if (i.imm_operands == 2)
5307 source = 2;
5308 else
5310 if (i.types[0].bitfield.imm8)
5311 source = 1;
5312 else
5313 source = 0;
5315 break;
5316 case 5:
5317 break;
5318 default:
5319 abort ();
5322 if (!vex_3_sources)
5324 dest = source + 1;
5326 if (i.tm.opcode_modifier.vexvvvv == VEXXDS)
5328 /* For instructions with VexNDS, the register-only
5329 source operand must be 32/64bit integer, XMM or
5330 YMM register. It is encoded in VEX prefix. We
5331 need to clear RegMem bit before calling
5332 operand_type_equal. */
5334 i386_operand_type op;
5335 unsigned int vvvv;
5337 /* Check register-only source operand when two source
5338 operands are swapped. */
5339 if (!i.tm.operand_types[source].bitfield.baseindex
5340 && i.tm.operand_types[dest].bitfield.baseindex)
5342 vvvv = source;
5343 source = dest;
5345 else
5346 vvvv = dest;
5348 op = i.tm.operand_types[vvvv];
5349 op.bitfield.regmem = 0;
5350 if ((dest + 1) >= i.operands
5351 || (op.bitfield.reg32 != 1
5352 && !op.bitfield.reg64 != 1
5353 && !operand_type_equal (&op, &regxmm)
5354 && !operand_type_equal (&op, &regymm)))
5355 abort ();
5356 i.vex.register_specifier = i.op[vvvv].regs;
5357 dest++;
5361 i.rm.mode = 3;
5362 /* One of the register operands will be encoded in the i.tm.reg
5363 field, the other in the combined i.tm.mode and i.tm.regmem
5364 fields. If no form of this instruction supports a memory
5365 destination operand, then we assume the source operand may
5366 sometimes be a memory operand and so we need to store the
5367 destination in the i.rm.reg field. */
5368 if (!i.tm.operand_types[dest].bitfield.regmem
5369 && operand_type_check (i.tm.operand_types[dest], anymem) == 0)
5371 i.rm.reg = i.op[dest].regs->reg_num;
5372 i.rm.regmem = i.op[source].regs->reg_num;
5373 if ((i.op[dest].regs->reg_flags & RegRex) != 0)
5374 i.rex |= REX_R;
5375 if ((i.op[source].regs->reg_flags & RegRex) != 0)
5376 i.rex |= REX_B;
5378 else
5380 i.rm.reg = i.op[source].regs->reg_num;
5381 i.rm.regmem = i.op[dest].regs->reg_num;
5382 if ((i.op[dest].regs->reg_flags & RegRex) != 0)
5383 i.rex |= REX_B;
5384 if ((i.op[source].regs->reg_flags & RegRex) != 0)
5385 i.rex |= REX_R;
5387 if (flag_code != CODE_64BIT && (i.rex & (REX_R | REX_B)))
5389 if (!i.types[0].bitfield.control
5390 && !i.types[1].bitfield.control)
5391 abort ();
5392 i.rex &= ~(REX_R | REX_B);
5393 add_prefix (LOCK_PREFIX_OPCODE);
5396 else
5397 { /* If it's not 2 reg operands... */
5398 unsigned int mem;
5400 if (i.mem_operands)
5402 unsigned int fake_zero_displacement = 0;
5403 unsigned int op;
5405 for (op = 0; op < i.operands; op++)
5406 if (operand_type_check (i.types[op], anymem))
5407 break;
5408 gas_assert (op < i.operands);
5410 default_seg = &ds;
5412 if (i.base_reg == 0)
5414 i.rm.mode = 0;
5415 if (!i.disp_operands)
5416 fake_zero_displacement = 1;
5417 if (i.index_reg == 0)
5419 /* Operand is just <disp> */
5420 if (flag_code == CODE_64BIT)
5422 /* 64bit mode overwrites the 32bit absolute
5423 addressing by RIP relative addressing and
5424 absolute addressing is encoded by one of the
5425 redundant SIB forms. */
5426 i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
5427 i.sib.base = NO_BASE_REGISTER;
5428 i.sib.index = NO_INDEX_REGISTER;
5429 i.types[op] = ((i.prefix[ADDR_PREFIX] == 0)
5430 ? disp32s : disp32);
5432 else if ((flag_code == CODE_16BIT)
5433 ^ (i.prefix[ADDR_PREFIX] != 0))
5435 i.rm.regmem = NO_BASE_REGISTER_16;
5436 i.types[op] = disp16;
5438 else
5440 i.rm.regmem = NO_BASE_REGISTER;
5441 i.types[op] = disp32;
5444 else /* !i.base_reg && i.index_reg */
5446 if (i.index_reg->reg_num == RegEiz
5447 || i.index_reg->reg_num == RegRiz)
5448 i.sib.index = NO_INDEX_REGISTER;
5449 else
5450 i.sib.index = i.index_reg->reg_num;
5451 i.sib.base = NO_BASE_REGISTER;
5452 i.sib.scale = i.log2_scale_factor;
5453 i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
5454 i.types[op].bitfield.disp8 = 0;
5455 i.types[op].bitfield.disp16 = 0;
5456 i.types[op].bitfield.disp64 = 0;
5457 if (flag_code != CODE_64BIT)
5459 /* Must be 32 bit */
5460 i.types[op].bitfield.disp32 = 1;
5461 i.types[op].bitfield.disp32s = 0;
5463 else
5465 i.types[op].bitfield.disp32 = 0;
5466 i.types[op].bitfield.disp32s = 1;
5468 if ((i.index_reg->reg_flags & RegRex) != 0)
5469 i.rex |= REX_X;
5472 /* RIP addressing for 64bit mode. */
5473 else if (i.base_reg->reg_num == RegRip ||
5474 i.base_reg->reg_num == RegEip)
5476 i.rm.regmem = NO_BASE_REGISTER;
5477 i.types[op].bitfield.disp8 = 0;
5478 i.types[op].bitfield.disp16 = 0;
5479 i.types[op].bitfield.disp32 = 0;
5480 i.types[op].bitfield.disp32s = 1;
5481 i.types[op].bitfield.disp64 = 0;
5482 i.flags[op] |= Operand_PCrel;
5483 if (! i.disp_operands)
5484 fake_zero_displacement = 1;
5486 else if (i.base_reg->reg_type.bitfield.reg16)
5488 switch (i.base_reg->reg_num)
5490 case 3: /* (%bx) */
5491 if (i.index_reg == 0)
5492 i.rm.regmem = 7;
5493 else /* (%bx,%si) -> 0, or (%bx,%di) -> 1 */
5494 i.rm.regmem = i.index_reg->reg_num - 6;
5495 break;
5496 case 5: /* (%bp) */
5497 default_seg = &ss;
5498 if (i.index_reg == 0)
5500 i.rm.regmem = 6;
5501 if (operand_type_check (i.types[op], disp) == 0)
5503 /* fake (%bp) into 0(%bp) */
5504 i.types[op].bitfield.disp8 = 1;
5505 fake_zero_displacement = 1;
5508 else /* (%bp,%si) -> 2, or (%bp,%di) -> 3 */
5509 i.rm.regmem = i.index_reg->reg_num - 6 + 2;
5510 break;
5511 default: /* (%si) -> 4 or (%di) -> 5 */
5512 i.rm.regmem = i.base_reg->reg_num - 6 + 4;
5514 i.rm.mode = mode_from_disp_size (i.types[op]);
5516 else /* i.base_reg and 32/64 bit mode */
5518 if (flag_code == CODE_64BIT
5519 && operand_type_check (i.types[op], disp))
5521 i386_operand_type temp;
5522 operand_type_set (&temp, 0);
5523 temp.bitfield.disp8 = i.types[op].bitfield.disp8;
5524 i.types[op] = temp;
5525 if (i.prefix[ADDR_PREFIX] == 0)
5526 i.types[op].bitfield.disp32s = 1;
5527 else
5528 i.types[op].bitfield.disp32 = 1;
5531 i.rm.regmem = i.base_reg->reg_num;
5532 if ((i.base_reg->reg_flags & RegRex) != 0)
5533 i.rex |= REX_B;
5534 i.sib.base = i.base_reg->reg_num;
5535 /* x86-64 ignores REX prefix bit here to avoid decoder
5536 complications. */
5537 if ((i.base_reg->reg_num & 7) == EBP_REG_NUM)
5539 default_seg = &ss;
5540 if (i.disp_operands == 0)
5542 fake_zero_displacement = 1;
5543 i.types[op].bitfield.disp8 = 1;
5546 else if (i.base_reg->reg_num == ESP_REG_NUM)
5548 default_seg = &ss;
5550 i.sib.scale = i.log2_scale_factor;
5551 if (i.index_reg == 0)
5553 /* <disp>(%esp) becomes two byte modrm with no index
5554 register. We've already stored the code for esp
5555 in i.rm.regmem ie. ESCAPE_TO_TWO_BYTE_ADDRESSING.
5556 Any base register besides %esp will not use the
5557 extra modrm byte. */
5558 i.sib.index = NO_INDEX_REGISTER;
5560 else
5562 if (i.index_reg->reg_num == RegEiz
5563 || i.index_reg->reg_num == RegRiz)
5564 i.sib.index = NO_INDEX_REGISTER;
5565 else
5566 i.sib.index = i.index_reg->reg_num;
5567 i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
5568 if ((i.index_reg->reg_flags & RegRex) != 0)
5569 i.rex |= REX_X;
5572 if (i.disp_operands
5573 && (i.reloc[op] == BFD_RELOC_386_TLS_DESC_CALL
5574 || i.reloc[op] == BFD_RELOC_X86_64_TLSDESC_CALL))
5575 i.rm.mode = 0;
5576 else
5577 i.rm.mode = mode_from_disp_size (i.types[op]);
5580 if (fake_zero_displacement)
5582 /* Fakes a zero displacement assuming that i.types[op]
5583 holds the correct displacement size. */
5584 expressionS *exp;
5586 gas_assert (i.op[op].disps == 0);
5587 exp = &disp_expressions[i.disp_operands++];
5588 i.op[op].disps = exp;
5589 exp->X_op = O_constant;
5590 exp->X_add_number = 0;
5591 exp->X_add_symbol = (symbolS *) 0;
5592 exp->X_op_symbol = (symbolS *) 0;
5595 mem = op;
5597 else
5598 mem = ~0;
5600 if (i.tm.opcode_modifier.vexsources == XOP2SOURCES)
5602 if (operand_type_check (i.types[0], imm))
5603 i.vex.register_specifier = NULL;
5604 else
5606 /* VEX.vvvv encodes one of the sources when the first
5607 operand is not an immediate. */
5608 if (i.tm.opcode_modifier.vexw == VEXW0)
5609 i.vex.register_specifier = i.op[0].regs;
5610 else
5611 i.vex.register_specifier = i.op[1].regs;
5614 /* Destination is a XMM register encoded in the ModRM.reg
5615 and VEX.R bit. */
5616 i.rm.reg = i.op[2].regs->reg_num;
5617 if ((i.op[2].regs->reg_flags & RegRex) != 0)
5618 i.rex |= REX_R;
5620 /* ModRM.rm and VEX.B encodes the other source. */
5621 if (!i.mem_operands)
5623 i.rm.mode = 3;
5625 if (i.tm.opcode_modifier.vexw == VEXW0)
5626 i.rm.regmem = i.op[1].regs->reg_num;
5627 else
5628 i.rm.regmem = i.op[0].regs->reg_num;
5630 if ((i.op[1].regs->reg_flags & RegRex) != 0)
5631 i.rex |= REX_B;
5634 else if (i.tm.opcode_modifier.vexvvvv == VEXLWP)
5636 i.vex.register_specifier = i.op[2].regs;
5637 if (!i.mem_operands)
5639 i.rm.mode = 3;
5640 i.rm.regmem = i.op[1].regs->reg_num;
5641 if ((i.op[1].regs->reg_flags & RegRex) != 0)
5642 i.rex |= REX_B;
5645 /* Fill in i.rm.reg or i.rm.regmem field with register operand
5646 (if any) based on i.tm.extension_opcode. Again, we must be
5647 careful to make sure that segment/control/debug/test/MMX
5648 registers are coded into the i.rm.reg field. */
5649 else if (i.reg_operands)
5651 unsigned int op;
5652 unsigned int vex_reg = ~0;
5654 for (op = 0; op < i.operands; op++)
5655 if (i.types[op].bitfield.reg8
5656 || i.types[op].bitfield.reg16
5657 || i.types[op].bitfield.reg32
5658 || i.types[op].bitfield.reg64
5659 || i.types[op].bitfield.regmmx
5660 || i.types[op].bitfield.regxmm
5661 || i.types[op].bitfield.regymm
5662 || i.types[op].bitfield.sreg2
5663 || i.types[op].bitfield.sreg3
5664 || i.types[op].bitfield.control
5665 || i.types[op].bitfield.debug
5666 || i.types[op].bitfield.test)
5667 break;
5669 if (vex_3_sources)
5670 op = dest;
5671 else if (i.tm.opcode_modifier.vexvvvv == VEXXDS)
5673 /* For instructions with VexNDS, the register-only
5674 source operand is encoded in VEX prefix. */
5675 gas_assert (mem != (unsigned int) ~0);
5677 if (op > mem)
5679 vex_reg = op++;
5680 gas_assert (op < i.operands);
5682 else
5684 /* Check register-only source operand when two source
5685 operands are swapped. */
5686 if (!i.tm.operand_types[op].bitfield.baseindex
5687 && i.tm.operand_types[op + 1].bitfield.baseindex)
5689 vex_reg = op;
5690 op += 2;
5691 gas_assert (mem == (vex_reg + 1)
5692 && op < i.operands);
5694 else
5696 vex_reg = op + 1;
5697 gas_assert (vex_reg < i.operands);
5701 else if (i.tm.opcode_modifier.vexvvvv == VEXNDD)
5703 /* For instructions with VexNDD, the register destination
5704 is encoded in VEX prefix. */
5705 if (i.mem_operands == 0)
5707 /* There is no memory operand. */
5708 gas_assert ((op + 2) == i.operands);
5709 vex_reg = op + 1;
5711 else
5713 /* There are only 2 operands. */
5714 gas_assert (op < 2 && i.operands == 2);
5715 vex_reg = 1;
5718 else
5719 gas_assert (op < i.operands);
5721 if (vex_reg != (unsigned int) ~0)
5723 i386_operand_type *type = &i.tm.operand_types[vex_reg];
5725 if (type->bitfield.reg32 != 1
5726 && type->bitfield.reg64 != 1
5727 && !operand_type_equal (type, &regxmm)
5728 && !operand_type_equal (type, &regymm))
5729 abort ();
5731 i.vex.register_specifier = i.op[vex_reg].regs;
5734 /* Don't set OP operand twice. */
5735 if (vex_reg != op)
5737 /* If there is an extension opcode to put here, the
5738 register number must be put into the regmem field. */
5739 if (i.tm.extension_opcode != None)
5741 i.rm.regmem = i.op[op].regs->reg_num;
5742 if ((i.op[op].regs->reg_flags & RegRex) != 0)
5743 i.rex |= REX_B;
5745 else
5747 i.rm.reg = i.op[op].regs->reg_num;
5748 if ((i.op[op].regs->reg_flags & RegRex) != 0)
5749 i.rex |= REX_R;
5753 /* Now, if no memory operand has set i.rm.mode = 0, 1, 2 we
5754 must set it to 3 to indicate this is a register operand
5755 in the regmem field. */
5756 if (!i.mem_operands)
5757 i.rm.mode = 3;
5760 /* Fill in i.rm.reg field with extension opcode (if any). */
5761 if (i.tm.extension_opcode != None)
5762 i.rm.reg = i.tm.extension_opcode;
5764 return default_seg;
5767 static void
5768 output_branch (void)
5770 char *p;
5771 int size;
5772 int code16;
5773 int prefix;
5774 relax_substateT subtype;
5775 symbolS *sym;
5776 offsetT off;
5778 code16 = flag_code == CODE_16BIT ? CODE16 : 0;
5779 size = i.disp32_encoding ? BIG : SMALL;
5781 prefix = 0;
5782 if (i.prefix[DATA_PREFIX] != 0)
5784 prefix = 1;
5785 i.prefixes -= 1;
5786 code16 ^= CODE16;
5788 /* Pentium4 branch hints. */
5789 if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE /* not taken */
5790 || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE /* taken */)
5792 prefix++;
5793 i.prefixes--;
5795 if (i.prefix[REX_PREFIX] != 0)
5797 prefix++;
5798 i.prefixes--;
5801 if (i.prefixes != 0 && !intel_syntax)
5802 as_warn (_("skipping prefixes on this instruction"));
5804 /* It's always a symbol; End frag & setup for relax.
5805 Make sure there is enough room in this frag for the largest
5806 instruction we may generate in md_convert_frag. This is 2
5807 bytes for the opcode and room for the prefix and largest
5808 displacement. */
5809 frag_grow (prefix + 2 + 4);
5810 /* Prefix and 1 opcode byte go in fr_fix. */
5811 p = frag_more (prefix + 1);
5812 if (i.prefix[DATA_PREFIX] != 0)
5813 *p++ = DATA_PREFIX_OPCODE;
5814 if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE
5815 || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE)
5816 *p++ = i.prefix[SEG_PREFIX];
5817 if (i.prefix[REX_PREFIX] != 0)
5818 *p++ = i.prefix[REX_PREFIX];
5819 *p = i.tm.base_opcode;
5821 if ((unsigned char) *p == JUMP_PC_RELATIVE)
5822 subtype = ENCODE_RELAX_STATE (UNCOND_JUMP, size);
5823 else if (cpu_arch_flags.bitfield.cpui386)
5824 subtype = ENCODE_RELAX_STATE (COND_JUMP, size);
5825 else
5826 subtype = ENCODE_RELAX_STATE (COND_JUMP86, size);
5827 subtype |= code16;
5829 sym = i.op[0].disps->X_add_symbol;
5830 off = i.op[0].disps->X_add_number;
5832 if (i.op[0].disps->X_op != O_constant
5833 && i.op[0].disps->X_op != O_symbol)
5835 /* Handle complex expressions. */
5836 sym = make_expr_symbol (i.op[0].disps);
5837 off = 0;
5840 /* 1 possible extra opcode + 4 byte displacement go in var part.
5841 Pass reloc in fr_var. */
5842 frag_var (rs_machine_dependent, 5, i.reloc[0], subtype, sym, off, p);
5845 static void
5846 output_jump (void)
5848 char *p;
5849 int size;
5850 fixS *fixP;
5852 if (i.tm.opcode_modifier.jumpbyte)
5854 /* This is a loop or jecxz type instruction. */
5855 size = 1;
5856 if (i.prefix[ADDR_PREFIX] != 0)
5858 FRAG_APPEND_1_CHAR (ADDR_PREFIX_OPCODE);
5859 i.prefixes -= 1;
5861 /* Pentium4 branch hints. */
5862 if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE /* not taken */
5863 || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE /* taken */)
5865 FRAG_APPEND_1_CHAR (i.prefix[SEG_PREFIX]);
5866 i.prefixes--;
5869 else
5871 int code16;
5873 code16 = 0;
5874 if (flag_code == CODE_16BIT)
5875 code16 = CODE16;
5877 if (i.prefix[DATA_PREFIX] != 0)
5879 FRAG_APPEND_1_CHAR (DATA_PREFIX_OPCODE);
5880 i.prefixes -= 1;
5881 code16 ^= CODE16;
5884 size = 4;
5885 if (code16)
5886 size = 2;
5889 if (i.prefix[REX_PREFIX] != 0)
5891 FRAG_APPEND_1_CHAR (i.prefix[REX_PREFIX]);
5892 i.prefixes -= 1;
5895 if (i.prefixes != 0 && !intel_syntax)
5896 as_warn (_("skipping prefixes on this instruction"));
5898 p = frag_more (1 + size);
5899 *p++ = i.tm.base_opcode;
5901 fixP = fix_new_exp (frag_now, p - frag_now->fr_literal, size,
5902 i.op[0].disps, 1, reloc (size, 1, 1, i.reloc[0]));
5904 /* All jumps handled here are signed, but don't use a signed limit
5905 check for 32 and 16 bit jumps as we want to allow wrap around at
5906 4G and 64k respectively. */
5907 if (size == 1)
5908 fixP->fx_signed = 1;
5911 static void
5912 output_interseg_jump (void)
5914 char *p;
5915 int size;
5916 int prefix;
5917 int code16;
5919 code16 = 0;
5920 if (flag_code == CODE_16BIT)
5921 code16 = CODE16;
5923 prefix = 0;
5924 if (i.prefix[DATA_PREFIX] != 0)
5926 prefix = 1;
5927 i.prefixes -= 1;
5928 code16 ^= CODE16;
5930 if (i.prefix[REX_PREFIX] != 0)
5932 prefix++;
5933 i.prefixes -= 1;
5936 size = 4;
5937 if (code16)
5938 size = 2;
5940 if (i.prefixes != 0 && !intel_syntax)
5941 as_warn (_("skipping prefixes on this instruction"));
5943 /* 1 opcode; 2 segment; offset */
5944 p = frag_more (prefix + 1 + 2 + size);
5946 if (i.prefix[DATA_PREFIX] != 0)
5947 *p++ = DATA_PREFIX_OPCODE;
5949 if (i.prefix[REX_PREFIX] != 0)
5950 *p++ = i.prefix[REX_PREFIX];
5952 *p++ = i.tm.base_opcode;
5953 if (i.op[1].imms->X_op == O_constant)
5955 offsetT n = i.op[1].imms->X_add_number;
5957 if (size == 2
5958 && !fits_in_unsigned_word (n)
5959 && !fits_in_signed_word (n))
5961 as_bad (_("16-bit jump out of range"));
5962 return;
5964 md_number_to_chars (p, n, size);
5966 else
5967 fix_new_exp (frag_now, p - frag_now->fr_literal, size,
5968 i.op[1].imms, 0, reloc (size, 0, 0, i.reloc[1]));
5969 if (i.op[0].imms->X_op != O_constant)
5970 as_bad (_("can't handle non absolute segment in `%s'"),
5971 i.tm.name);
5972 md_number_to_chars (p + size, (valueT) i.op[0].imms->X_add_number, 2);
5975 static void
5976 output_insn (void)
5978 fragS *insn_start_frag;
5979 offsetT insn_start_off;
5981 /* Tie dwarf2 debug info to the address at the start of the insn.
5982 We can't do this after the insn has been output as the current
5983 frag may have been closed off. eg. by frag_var. */
5984 dwarf2_emit_insn (0);
5986 insn_start_frag = frag_now;
5987 insn_start_off = frag_now_fix ();
5989 /* Output jumps. */
5990 if (i.tm.opcode_modifier.jump)
5991 output_branch ();
5992 else if (i.tm.opcode_modifier.jumpbyte
5993 || i.tm.opcode_modifier.jumpdword)
5994 output_jump ();
5995 else if (i.tm.opcode_modifier.jumpintersegment)
5996 output_interseg_jump ();
5997 else
5999 /* Output normal instructions here. */
6000 char *p;
6001 unsigned char *q;
6002 unsigned int j;
6003 unsigned int prefix;
6005 /* Since the VEX prefix contains the implicit prefix, we don't
6006 need the explicit prefix. */
6007 if (!i.tm.opcode_modifier.vex)
6009 switch (i.tm.opcode_length)
6011 case 3:
6012 if (i.tm.base_opcode & 0xff000000)
6014 prefix = (i.tm.base_opcode >> 24) & 0xff;
6015 goto check_prefix;
6017 break;
6018 case 2:
6019 if ((i.tm.base_opcode & 0xff0000) != 0)
6021 prefix = (i.tm.base_opcode >> 16) & 0xff;
6022 if (i.tm.cpu_flags.bitfield.cpupadlock)
6024 check_prefix:
6025 if (prefix != REPE_PREFIX_OPCODE
6026 || (i.prefix[REP_PREFIX]
6027 != REPE_PREFIX_OPCODE))
6028 add_prefix (prefix);
6030 else
6031 add_prefix (prefix);
6033 break;
6034 case 1:
6035 break;
6036 default:
6037 abort ();
6040 /* The prefix bytes. */
6041 for (j = ARRAY_SIZE (i.prefix), q = i.prefix; j > 0; j--, q++)
6042 if (*q)
6043 FRAG_APPEND_1_CHAR (*q);
6046 if (i.tm.opcode_modifier.vex)
6048 for (j = 0, q = i.prefix; j < ARRAY_SIZE (i.prefix); j++, q++)
6049 if (*q)
6050 switch (j)
6052 case REX_PREFIX:
6053 /* REX byte is encoded in VEX prefix. */
6054 break;
6055 case SEG_PREFIX:
6056 case ADDR_PREFIX:
6057 FRAG_APPEND_1_CHAR (*q);
6058 break;
6059 default:
6060 /* There should be no other prefixes for instructions
6061 with VEX prefix. */
6062 abort ();
6065 /* Now the VEX prefix. */
6066 p = frag_more (i.vex.length);
6067 for (j = 0; j < i.vex.length; j++)
6068 p[j] = i.vex.bytes[j];
6071 /* Now the opcode; be careful about word order here! */
6072 if (i.tm.opcode_length == 1)
6074 FRAG_APPEND_1_CHAR (i.tm.base_opcode);
6076 else
6078 switch (i.tm.opcode_length)
6080 case 3:
6081 p = frag_more (3);
6082 *p++ = (i.tm.base_opcode >> 16) & 0xff;
6083 break;
6084 case 2:
6085 p = frag_more (2);
6086 break;
6087 default:
6088 abort ();
6089 break;
6092 /* Put out high byte first: can't use md_number_to_chars! */
6093 *p++ = (i.tm.base_opcode >> 8) & 0xff;
6094 *p = i.tm.base_opcode & 0xff;
6097 /* Now the modrm byte and sib byte (if present). */
6098 if (i.tm.opcode_modifier.modrm)
6100 FRAG_APPEND_1_CHAR ((i.rm.regmem << 0
6101 | i.rm.reg << 3
6102 | i.rm.mode << 6));
6103 /* If i.rm.regmem == ESP (4)
6104 && i.rm.mode != (Register mode)
6105 && not 16 bit
6106 ==> need second modrm byte. */
6107 if (i.rm.regmem == ESCAPE_TO_TWO_BYTE_ADDRESSING
6108 && i.rm.mode != 3
6109 && !(i.base_reg && i.base_reg->reg_type.bitfield.reg16))
6110 FRAG_APPEND_1_CHAR ((i.sib.base << 0
6111 | i.sib.index << 3
6112 | i.sib.scale << 6));
6115 if (i.disp_operands)
6116 output_disp (insn_start_frag, insn_start_off);
6118 if (i.imm_operands)
6119 output_imm (insn_start_frag, insn_start_off);
6122 #ifdef DEBUG386
6123 if (flag_debug)
6125 pi ("" /*line*/, &i);
6127 #endif /* DEBUG386 */
6130 /* Return the size of the displacement operand N. */
6132 static int
6133 disp_size (unsigned int n)
6135 int size = 4;
6136 if (i.types[n].bitfield.disp64)
6137 size = 8;
6138 else if (i.types[n].bitfield.disp8)
6139 size = 1;
6140 else if (i.types[n].bitfield.disp16)
6141 size = 2;
6142 return size;
6145 /* Return the size of the immediate operand N. */
6147 static int
6148 imm_size (unsigned int n)
6150 int size = 4;
6151 if (i.types[n].bitfield.imm64)
6152 size = 8;
6153 else if (i.types[n].bitfield.imm8 || i.types[n].bitfield.imm8s)
6154 size = 1;
6155 else if (i.types[n].bitfield.imm16)
6156 size = 2;
6157 return size;
6160 static void
6161 output_disp (fragS *insn_start_frag, offsetT insn_start_off)
6163 char *p;
6164 unsigned int n;
6166 for (n = 0; n < i.operands; n++)
6168 if (operand_type_check (i.types[n], disp))
6170 if (i.op[n].disps->X_op == O_constant)
6172 int size = disp_size (n);
6173 offsetT val;
6175 val = offset_in_range (i.op[n].disps->X_add_number,
6176 size);
6177 p = frag_more (size);
6178 md_number_to_chars (p, val, size);
6180 else
6182 enum bfd_reloc_code_real reloc_type;
6183 int size = disp_size (n);
6184 int sign = i.types[n].bitfield.disp32s;
6185 int pcrel = (i.flags[n] & Operand_PCrel) != 0;
6187 /* We can't have 8 bit displacement here. */
6188 gas_assert (!i.types[n].bitfield.disp8);
6190 /* The PC relative address is computed relative
6191 to the instruction boundary, so in case immediate
6192 fields follows, we need to adjust the value. */
6193 if (pcrel && i.imm_operands)
6195 unsigned int n1;
6196 int sz = 0;
6198 for (n1 = 0; n1 < i.operands; n1++)
6199 if (operand_type_check (i.types[n1], imm))
6201 /* Only one immediate is allowed for PC
6202 relative address. */
6203 gas_assert (sz == 0);
6204 sz = imm_size (n1);
6205 i.op[n].disps->X_add_number -= sz;
6207 /* We should find the immediate. */
6208 gas_assert (sz != 0);
6211 p = frag_more (size);
6212 reloc_type = reloc (size, pcrel, sign, i.reloc[n]);
6213 if (GOT_symbol
6214 && GOT_symbol == i.op[n].disps->X_add_symbol
6215 && (((reloc_type == BFD_RELOC_32
6216 || reloc_type == BFD_RELOC_X86_64_32S
6217 || (reloc_type == BFD_RELOC_64
6218 && object_64bit))
6219 && (i.op[n].disps->X_op == O_symbol
6220 || (i.op[n].disps->X_op == O_add
6221 && ((symbol_get_value_expression
6222 (i.op[n].disps->X_op_symbol)->X_op)
6223 == O_subtract))))
6224 || reloc_type == BFD_RELOC_32_PCREL))
6226 offsetT add;
6228 if (insn_start_frag == frag_now)
6229 add = (p - frag_now->fr_literal) - insn_start_off;
6230 else
6232 fragS *fr;
6234 add = insn_start_frag->fr_fix - insn_start_off;
6235 for (fr = insn_start_frag->fr_next;
6236 fr && fr != frag_now; fr = fr->fr_next)
6237 add += fr->fr_fix;
6238 add += p - frag_now->fr_literal;
6241 if (!object_64bit)
6243 reloc_type = BFD_RELOC_386_GOTPC;
6244 i.op[n].imms->X_add_number += add;
6246 else if (reloc_type == BFD_RELOC_64)
6247 reloc_type = BFD_RELOC_X86_64_GOTPC64;
6248 else
6249 /* Don't do the adjustment for x86-64, as there
6250 the pcrel addressing is relative to the _next_
6251 insn, and that is taken care of in other code. */
6252 reloc_type = BFD_RELOC_X86_64_GOTPC32;
6254 fix_new_exp (frag_now, p - frag_now->fr_literal, size,
6255 i.op[n].disps, pcrel, reloc_type);
6261 static void
6262 output_imm (fragS *insn_start_frag, offsetT insn_start_off)
6264 char *p;
6265 unsigned int n;
6267 for (n = 0; n < i.operands; n++)
6269 if (operand_type_check (i.types[n], imm))
6271 if (i.op[n].imms->X_op == O_constant)
6273 int size = imm_size (n);
6274 offsetT val;
6276 val = offset_in_range (i.op[n].imms->X_add_number,
6277 size);
6278 p = frag_more (size);
6279 md_number_to_chars (p, val, size);
6281 else
6283 /* Not absolute_section.
6284 Need a 32-bit fixup (don't support 8bit
6285 non-absolute imms). Try to support other
6286 sizes ... */
6287 enum bfd_reloc_code_real reloc_type;
6288 int size = imm_size (n);
6289 int sign;
6291 if (i.types[n].bitfield.imm32s
6292 && (i.suffix == QWORD_MNEM_SUFFIX
6293 || (!i.suffix && i.tm.opcode_modifier.no_lsuf)))
6294 sign = 1;
6295 else
6296 sign = 0;
6298 p = frag_more (size);
6299 reloc_type = reloc (size, 0, sign, i.reloc[n]);
6301 /* This is tough to explain. We end up with this one if we
6302 * have operands that look like
6303 * "_GLOBAL_OFFSET_TABLE_+[.-.L284]". The goal here is to
6304 * obtain the absolute address of the GOT, and it is strongly
6305 * preferable from a performance point of view to avoid using
6306 * a runtime relocation for this. The actual sequence of
6307 * instructions often look something like:
6309 * call .L66
6310 * .L66:
6311 * popl %ebx
6312 * addl $_GLOBAL_OFFSET_TABLE_+[.-.L66],%ebx
6314 * The call and pop essentially return the absolute address
6315 * of the label .L66 and store it in %ebx. The linker itself
6316 * will ultimately change the first operand of the addl so
6317 * that %ebx points to the GOT, but to keep things simple, the
6318 * .o file must have this operand set so that it generates not
6319 * the absolute address of .L66, but the absolute address of
6320 * itself. This allows the linker itself simply treat a GOTPC
6321 * relocation as asking for a pcrel offset to the GOT to be
6322 * added in, and the addend of the relocation is stored in the
6323 * operand field for the instruction itself.
6325 * Our job here is to fix the operand so that it would add
6326 * the correct offset so that %ebx would point to itself. The
6327 * thing that is tricky is that .-.L66 will point to the
6328 * beginning of the instruction, so we need to further modify
6329 * the operand so that it will point to itself. There are
6330 * other cases where you have something like:
6332 * .long $_GLOBAL_OFFSET_TABLE_+[.-.L66]
6334 * and here no correction would be required. Internally in
6335 * the assembler we treat operands of this form as not being
6336 * pcrel since the '.' is explicitly mentioned, and I wonder
6337 * whether it would simplify matters to do it this way. Who
6338 * knows. In earlier versions of the PIC patches, the
6339 * pcrel_adjust field was used to store the correction, but
6340 * since the expression is not pcrel, I felt it would be
6341 * confusing to do it this way. */
6343 if ((reloc_type == BFD_RELOC_32
6344 || reloc_type == BFD_RELOC_X86_64_32S
6345 || reloc_type == BFD_RELOC_64)
6346 && GOT_symbol
6347 && GOT_symbol == i.op[n].imms->X_add_symbol
6348 && (i.op[n].imms->X_op == O_symbol
6349 || (i.op[n].imms->X_op == O_add
6350 && ((symbol_get_value_expression
6351 (i.op[n].imms->X_op_symbol)->X_op)
6352 == O_subtract))))
6354 offsetT add;
6356 if (insn_start_frag == frag_now)
6357 add = (p - frag_now->fr_literal) - insn_start_off;
6358 else
6360 fragS *fr;
6362 add = insn_start_frag->fr_fix - insn_start_off;
6363 for (fr = insn_start_frag->fr_next;
6364 fr && fr != frag_now; fr = fr->fr_next)
6365 add += fr->fr_fix;
6366 add += p - frag_now->fr_literal;
6369 if (!object_64bit)
6370 reloc_type = BFD_RELOC_386_GOTPC;
6371 else if (size == 4)
6372 reloc_type = BFD_RELOC_X86_64_GOTPC32;
6373 else if (size == 8)
6374 reloc_type = BFD_RELOC_X86_64_GOTPC64;
6375 i.op[n].imms->X_add_number += add;
6377 fix_new_exp (frag_now, p - frag_now->fr_literal, size,
6378 i.op[n].imms, 0, reloc_type);
6384 /* x86_cons_fix_new is called via the expression parsing code when a
6385 reloc is needed. We use this hook to get the correct .got reloc. */
6386 static enum bfd_reloc_code_real got_reloc = NO_RELOC;
6387 static int cons_sign = -1;
6389 void
6390 x86_cons_fix_new (fragS *frag, unsigned int off, unsigned int len,
6391 expressionS *exp)
6393 enum bfd_reloc_code_real r = reloc (len, 0, cons_sign, got_reloc);
6395 got_reloc = NO_RELOC;
6397 #ifdef TE_PE
6398 if (exp->X_op == O_secrel)
6400 exp->X_op = O_symbol;
6401 r = BFD_RELOC_32_SECREL;
6403 #endif
6405 fix_new_exp (frag, off, len, exp, 0, r);
6408 #if (!defined (OBJ_ELF) && !defined (OBJ_MAYBE_ELF)) || defined (LEX_AT)
6409 # define lex_got(reloc, adjust, types) NULL
6410 #else
6411 /* Parse operands of the form
6412 <symbol>@GOTOFF+<nnn>
6413 and similar .plt or .got references.
6415 If we find one, set up the correct relocation in RELOC and copy the
6416 input string, minus the `@GOTOFF' into a malloc'd buffer for
6417 parsing by the calling routine. Return this buffer, and if ADJUST
6418 is non-null set it to the length of the string we removed from the
6419 input line. Otherwise return NULL. */
6420 static char *
6421 lex_got (enum bfd_reloc_code_real *rel,
6422 int *adjust,
6423 i386_operand_type *types)
6425 /* Some of the relocations depend on the size of what field is to
6426 be relocated. But in our callers i386_immediate and i386_displacement
6427 we don't yet know the operand size (this will be set by insn
6428 matching). Hence we record the word32 relocation here,
6429 and adjust the reloc according to the real size in reloc(). */
6430 static const struct {
6431 const char *str;
6432 int len;
6433 const enum bfd_reloc_code_real rel[2];
6434 const i386_operand_type types64;
6435 } gotrel[] = {
6436 { STRING_COMMA_LEN ("PLTOFF"), { _dummy_first_bfd_reloc_code_real,
6437 BFD_RELOC_X86_64_PLTOFF64 },
6438 OPERAND_TYPE_IMM64 },
6439 { STRING_COMMA_LEN ("PLT"), { BFD_RELOC_386_PLT32,
6440 BFD_RELOC_X86_64_PLT32 },
6441 OPERAND_TYPE_IMM32_32S_DISP32 },
6442 { STRING_COMMA_LEN ("GOTPLT"), { _dummy_first_bfd_reloc_code_real,
6443 BFD_RELOC_X86_64_GOTPLT64 },
6444 OPERAND_TYPE_IMM64_DISP64 },
6445 { STRING_COMMA_LEN ("GOTOFF"), { BFD_RELOC_386_GOTOFF,
6446 BFD_RELOC_X86_64_GOTOFF64 },
6447 OPERAND_TYPE_IMM64_DISP64 },
6448 { STRING_COMMA_LEN ("GOTPCREL"), { _dummy_first_bfd_reloc_code_real,
6449 BFD_RELOC_X86_64_GOTPCREL },
6450 OPERAND_TYPE_IMM32_32S_DISP32 },
6451 { STRING_COMMA_LEN ("TLSGD"), { BFD_RELOC_386_TLS_GD,
6452 BFD_RELOC_X86_64_TLSGD },
6453 OPERAND_TYPE_IMM32_32S_DISP32 },
6454 { STRING_COMMA_LEN ("TLSLDM"), { BFD_RELOC_386_TLS_LDM,
6455 _dummy_first_bfd_reloc_code_real },
6456 OPERAND_TYPE_NONE },
6457 { STRING_COMMA_LEN ("TLSLD"), { _dummy_first_bfd_reloc_code_real,
6458 BFD_RELOC_X86_64_TLSLD },
6459 OPERAND_TYPE_IMM32_32S_DISP32 },
6460 { STRING_COMMA_LEN ("GOTTPOFF"), { BFD_RELOC_386_TLS_IE_32,
6461 BFD_RELOC_X86_64_GOTTPOFF },
6462 OPERAND_TYPE_IMM32_32S_DISP32 },
6463 { STRING_COMMA_LEN ("TPOFF"), { BFD_RELOC_386_TLS_LE_32,
6464 BFD_RELOC_X86_64_TPOFF32 },
6465 OPERAND_TYPE_IMM32_32S_64_DISP32_64 },
6466 { STRING_COMMA_LEN ("NTPOFF"), { BFD_RELOC_386_TLS_LE,
6467 _dummy_first_bfd_reloc_code_real },
6468 OPERAND_TYPE_NONE },
6469 { STRING_COMMA_LEN ("DTPOFF"), { BFD_RELOC_386_TLS_LDO_32,
6470 BFD_RELOC_X86_64_DTPOFF32 },
6471 OPERAND_TYPE_IMM32_32S_64_DISP32_64 },
6472 { STRING_COMMA_LEN ("GOTNTPOFF"),{ BFD_RELOC_386_TLS_GOTIE,
6473 _dummy_first_bfd_reloc_code_real },
6474 OPERAND_TYPE_NONE },
6475 { STRING_COMMA_LEN ("INDNTPOFF"),{ BFD_RELOC_386_TLS_IE,
6476 _dummy_first_bfd_reloc_code_real },
6477 OPERAND_TYPE_NONE },
6478 { STRING_COMMA_LEN ("GOT"), { BFD_RELOC_386_GOT32,
6479 BFD_RELOC_X86_64_GOT32 },
6480 OPERAND_TYPE_IMM32_32S_64_DISP32 },
6481 { STRING_COMMA_LEN ("TLSDESC"), { BFD_RELOC_386_TLS_GOTDESC,
6482 BFD_RELOC_X86_64_GOTPC32_TLSDESC },
6483 OPERAND_TYPE_IMM32_32S_DISP32 },
6484 { STRING_COMMA_LEN ("TLSCALL"), { BFD_RELOC_386_TLS_DESC_CALL,
6485 BFD_RELOC_X86_64_TLSDESC_CALL },
6486 OPERAND_TYPE_IMM32_32S_DISP32 },
6488 char *cp;
6489 unsigned int j;
6491 if (!IS_ELF)
6492 return NULL;
6494 for (cp = input_line_pointer; *cp != '@'; cp++)
6495 if (is_end_of_line[(unsigned char) *cp] || *cp == ',')
6496 return NULL;
6498 for (j = 0; j < ARRAY_SIZE (gotrel); j++)
6500 int len = gotrel[j].len;
6501 if (strncasecmp (cp + 1, gotrel[j].str, len) == 0)
6503 if (gotrel[j].rel[object_64bit] != 0)
6505 int first, second;
6506 char *tmpbuf, *past_reloc;
6508 *rel = gotrel[j].rel[object_64bit];
6509 if (adjust)
6510 *adjust = len;
6512 if (types)
6514 if (flag_code != CODE_64BIT)
6516 types->bitfield.imm32 = 1;
6517 types->bitfield.disp32 = 1;
6519 else
6520 *types = gotrel[j].types64;
6523 if (GOT_symbol == NULL)
6524 GOT_symbol = symbol_find_or_make (GLOBAL_OFFSET_TABLE_NAME);
6526 /* The length of the first part of our input line. */
6527 first = cp - input_line_pointer;
6529 /* The second part goes from after the reloc token until
6530 (and including) an end_of_line char or comma. */
6531 past_reloc = cp + 1 + len;
6532 cp = past_reloc;
6533 while (!is_end_of_line[(unsigned char) *cp] && *cp != ',')
6534 ++cp;
6535 second = cp + 1 - past_reloc;
6537 /* Allocate and copy string. The trailing NUL shouldn't
6538 be necessary, but be safe. */
6539 tmpbuf = (char *) xmalloc (first + second + 2);
6540 memcpy (tmpbuf, input_line_pointer, first);
6541 if (second != 0 && *past_reloc != ' ')
6542 /* Replace the relocation token with ' ', so that
6543 errors like foo@GOTOFF1 will be detected. */
6544 tmpbuf[first++] = ' ';
6545 memcpy (tmpbuf + first, past_reloc, second);
6546 tmpbuf[first + second] = '\0';
6547 return tmpbuf;
6550 as_bad (_("@%s reloc is not supported with %d-bit output format"),
6551 gotrel[j].str, 1 << (5 + object_64bit));
6552 return NULL;
6556 /* Might be a symbol version string. Don't as_bad here. */
6557 return NULL;
6560 void
6561 x86_cons (expressionS *exp, int size)
6563 intel_syntax = -intel_syntax;
6565 exp->X_md = 0;
6566 if (size == 4 || (object_64bit && size == 8))
6568 /* Handle @GOTOFF and the like in an expression. */
6569 char *save;
6570 char *gotfree_input_line;
6571 int adjust;
6573 save = input_line_pointer;
6574 gotfree_input_line = lex_got (&got_reloc, &adjust, NULL);
6575 if (gotfree_input_line)
6576 input_line_pointer = gotfree_input_line;
6578 expression (exp);
6580 if (gotfree_input_line)
6582 /* expression () has merrily parsed up to the end of line,
6583 or a comma - in the wrong buffer. Transfer how far
6584 input_line_pointer has moved to the right buffer. */
6585 input_line_pointer = (save
6586 + (input_line_pointer - gotfree_input_line)
6587 + adjust);
6588 free (gotfree_input_line);
6589 if (exp->X_op == O_constant
6590 || exp->X_op == O_absent
6591 || exp->X_op == O_illegal
6592 || exp->X_op == O_register
6593 || exp->X_op == O_big)
6595 char c = *input_line_pointer;
6596 *input_line_pointer = 0;
6597 as_bad (_("missing or invalid expression `%s'"), save);
6598 *input_line_pointer = c;
6602 else
6603 expression (exp);
6605 intel_syntax = -intel_syntax;
6607 if (intel_syntax)
6608 i386_intel_simplify (exp);
6610 #endif
6612 static void
6613 signed_cons (int size)
6615 if (flag_code == CODE_64BIT)
6616 cons_sign = 1;
6617 cons (size);
6618 cons_sign = -1;
6621 #ifdef TE_PE
6622 static void
6623 pe_directive_secrel (dummy)
6624 int dummy ATTRIBUTE_UNUSED;
6626 expressionS exp;
6630 expression (&exp);
6631 if (exp.X_op == O_symbol)
6632 exp.X_op = O_secrel;
6634 emit_expr (&exp, 4);
6636 while (*input_line_pointer++ == ',');
6638 input_line_pointer--;
6639 demand_empty_rest_of_line ();
6641 #endif
6643 static int
6644 i386_immediate (char *imm_start)
6646 char *save_input_line_pointer;
6647 char *gotfree_input_line;
6648 segT exp_seg = 0;
6649 expressionS *exp;
6650 i386_operand_type types;
6652 operand_type_set (&types, ~0);
6654 if (i.imm_operands == MAX_IMMEDIATE_OPERANDS)
6656 as_bad (_("at most %d immediate operands are allowed"),
6657 MAX_IMMEDIATE_OPERANDS);
6658 return 0;
6661 exp = &im_expressions[i.imm_operands++];
6662 i.op[this_operand].imms = exp;
6664 if (is_space_char (*imm_start))
6665 ++imm_start;
6667 save_input_line_pointer = input_line_pointer;
6668 input_line_pointer = imm_start;
6670 gotfree_input_line = lex_got (&i.reloc[this_operand], NULL, &types);
6671 if (gotfree_input_line)
6672 input_line_pointer = gotfree_input_line;
6674 exp_seg = expression (exp);
6676 SKIP_WHITESPACE ();
6677 if (*input_line_pointer)
6678 as_bad (_("junk `%s' after expression"), input_line_pointer);
6680 input_line_pointer = save_input_line_pointer;
6681 if (gotfree_input_line)
6683 free (gotfree_input_line);
6685 if (exp->X_op == O_constant || exp->X_op == O_register)
6686 exp->X_op = O_illegal;
6689 return i386_finalize_immediate (exp_seg, exp, types, imm_start);
6692 static int
6693 i386_finalize_immediate (segT exp_seg ATTRIBUTE_UNUSED, expressionS *exp,
6694 i386_operand_type types, const char *imm_start)
6696 if (exp->X_op == O_absent || exp->X_op == O_illegal || exp->X_op == O_big)
6698 if (imm_start)
6699 as_bad (_("missing or invalid immediate expression `%s'"),
6700 imm_start);
6701 return 0;
6703 else if (exp->X_op == O_constant)
6705 /* Size it properly later. */
6706 i.types[this_operand].bitfield.imm64 = 1;
6707 /* If not 64bit, sign extend val. */
6708 if (flag_code != CODE_64BIT
6709 && (exp->X_add_number & ~(((addressT) 2 << 31) - 1)) == 0)
6710 exp->X_add_number
6711 = (exp->X_add_number ^ ((addressT) 1 << 31)) - ((addressT) 1 << 31);
6713 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
6714 else if (OUTPUT_FLAVOR == bfd_target_aout_flavour
6715 && exp_seg != absolute_section
6716 && exp_seg != text_section
6717 && exp_seg != data_section
6718 && exp_seg != bss_section
6719 && exp_seg != undefined_section
6720 && !bfd_is_com_section (exp_seg))
6722 as_bad (_("unimplemented segment %s in operand"), exp_seg->name);
6723 return 0;
6725 #endif
6726 else if (!intel_syntax && exp->X_op == O_register)
6728 if (imm_start)
6729 as_bad (_("illegal immediate register operand %s"), imm_start);
6730 return 0;
6732 else
6734 /* This is an address. The size of the address will be
6735 determined later, depending on destination register,
6736 suffix, or the default for the section. */
6737 i.types[this_operand].bitfield.imm8 = 1;
6738 i.types[this_operand].bitfield.imm16 = 1;
6739 i.types[this_operand].bitfield.imm32 = 1;
6740 i.types[this_operand].bitfield.imm32s = 1;
6741 i.types[this_operand].bitfield.imm64 = 1;
6742 i.types[this_operand] = operand_type_and (i.types[this_operand],
6743 types);
6746 return 1;
6749 static char *
6750 i386_scale (char *scale)
6752 offsetT val;
6753 char *save = input_line_pointer;
6755 input_line_pointer = scale;
6756 val = get_absolute_expression ();
6758 switch (val)
6760 case 1:
6761 i.log2_scale_factor = 0;
6762 break;
6763 case 2:
6764 i.log2_scale_factor = 1;
6765 break;
6766 case 4:
6767 i.log2_scale_factor = 2;
6768 break;
6769 case 8:
6770 i.log2_scale_factor = 3;
6771 break;
6772 default:
6774 char sep = *input_line_pointer;
6776 *input_line_pointer = '\0';
6777 as_bad (_("expecting scale factor of 1, 2, 4, or 8: got `%s'"),
6778 scale);
6779 *input_line_pointer = sep;
6780 input_line_pointer = save;
6781 return NULL;
6784 if (i.log2_scale_factor != 0 && i.index_reg == 0)
6786 as_warn (_("scale factor of %d without an index register"),
6787 1 << i.log2_scale_factor);
6788 i.log2_scale_factor = 0;
6790 scale = input_line_pointer;
6791 input_line_pointer = save;
6792 return scale;
6795 static int
6796 i386_displacement (char *disp_start, char *disp_end)
6798 expressionS *exp;
6799 segT exp_seg = 0;
6800 char *save_input_line_pointer;
6801 char *gotfree_input_line;
6802 int override;
6803 i386_operand_type bigdisp, types = anydisp;
6804 int ret;
6806 if (i.disp_operands == MAX_MEMORY_OPERANDS)
6808 as_bad (_("at most %d displacement operands are allowed"),
6809 MAX_MEMORY_OPERANDS);
6810 return 0;
6813 operand_type_set (&bigdisp, 0);
6814 if ((i.types[this_operand].bitfield.jumpabsolute)
6815 || (!current_templates->start->opcode_modifier.jump
6816 && !current_templates->start->opcode_modifier.jumpdword))
6818 bigdisp.bitfield.disp32 = 1;
6819 override = (i.prefix[ADDR_PREFIX] != 0);
6820 if (flag_code == CODE_64BIT)
6822 if (!override)
6824 bigdisp.bitfield.disp32s = 1;
6825 bigdisp.bitfield.disp64 = 1;
6828 else if ((flag_code == CODE_16BIT) ^ override)
6830 bigdisp.bitfield.disp32 = 0;
6831 bigdisp.bitfield.disp16 = 1;
6834 else
6836 /* For PC-relative branches, the width of the displacement
6837 is dependent upon data size, not address size. */
6838 override = (i.prefix[DATA_PREFIX] != 0);
6839 if (flag_code == CODE_64BIT)
6841 if (override || i.suffix == WORD_MNEM_SUFFIX)
6842 bigdisp.bitfield.disp16 = 1;
6843 else
6845 bigdisp.bitfield.disp32 = 1;
6846 bigdisp.bitfield.disp32s = 1;
6849 else
6851 if (!override)
6852 override = (i.suffix == (flag_code != CODE_16BIT
6853 ? WORD_MNEM_SUFFIX
6854 : LONG_MNEM_SUFFIX));
6855 bigdisp.bitfield.disp32 = 1;
6856 if ((flag_code == CODE_16BIT) ^ override)
6858 bigdisp.bitfield.disp32 = 0;
6859 bigdisp.bitfield.disp16 = 1;
6863 i.types[this_operand] = operand_type_or (i.types[this_operand],
6864 bigdisp);
6866 exp = &disp_expressions[i.disp_operands];
6867 i.op[this_operand].disps = exp;
6868 i.disp_operands++;
6869 save_input_line_pointer = input_line_pointer;
6870 input_line_pointer = disp_start;
6871 END_STRING_AND_SAVE (disp_end);
6873 #ifndef GCC_ASM_O_HACK
6874 #define GCC_ASM_O_HACK 0
6875 #endif
6876 #if GCC_ASM_O_HACK
6877 END_STRING_AND_SAVE (disp_end + 1);
6878 if (i.types[this_operand].bitfield.baseIndex
6879 && displacement_string_end[-1] == '+')
6881 /* This hack is to avoid a warning when using the "o"
6882 constraint within gcc asm statements.
6883 For instance:
6885 #define _set_tssldt_desc(n,addr,limit,type) \
6886 __asm__ __volatile__ ( \
6887 "movw %w2,%0\n\t" \
6888 "movw %w1,2+%0\n\t" \
6889 "rorl $16,%1\n\t" \
6890 "movb %b1,4+%0\n\t" \
6891 "movb %4,5+%0\n\t" \
6892 "movb $0,6+%0\n\t" \
6893 "movb %h1,7+%0\n\t" \
6894 "rorl $16,%1" \
6895 : "=o"(*(n)) : "q" (addr), "ri"(limit), "i"(type))
6897 This works great except that the output assembler ends
6898 up looking a bit weird if it turns out that there is
6899 no offset. You end up producing code that looks like:
6901 #APP
6902 movw $235,(%eax)
6903 movw %dx,2+(%eax)
6904 rorl $16,%edx
6905 movb %dl,4+(%eax)
6906 movb $137,5+(%eax)
6907 movb $0,6+(%eax)
6908 movb %dh,7+(%eax)
6909 rorl $16,%edx
6910 #NO_APP
6912 So here we provide the missing zero. */
6914 *displacement_string_end = '0';
6916 #endif
6917 gotfree_input_line = lex_got (&i.reloc[this_operand], NULL, &types);
6918 if (gotfree_input_line)
6919 input_line_pointer = gotfree_input_line;
6921 exp_seg = expression (exp);
6923 SKIP_WHITESPACE ();
6924 if (*input_line_pointer)
6925 as_bad (_("junk `%s' after expression"), input_line_pointer);
6926 #if GCC_ASM_O_HACK
6927 RESTORE_END_STRING (disp_end + 1);
6928 #endif
6929 input_line_pointer = save_input_line_pointer;
6930 if (gotfree_input_line)
6932 free (gotfree_input_line);
6934 if (exp->X_op == O_constant || exp->X_op == O_register)
6935 exp->X_op = O_illegal;
6938 ret = i386_finalize_displacement (exp_seg, exp, types, disp_start);
6940 RESTORE_END_STRING (disp_end);
6942 return ret;
6945 static int
6946 i386_finalize_displacement (segT exp_seg ATTRIBUTE_UNUSED, expressionS *exp,
6947 i386_operand_type types, const char *disp_start)
6949 i386_operand_type bigdisp;
6950 int ret = 1;
6952 /* We do this to make sure that the section symbol is in
6953 the symbol table. We will ultimately change the relocation
6954 to be relative to the beginning of the section. */
6955 if (i.reloc[this_operand] == BFD_RELOC_386_GOTOFF
6956 || i.reloc[this_operand] == BFD_RELOC_X86_64_GOTPCREL
6957 || i.reloc[this_operand] == BFD_RELOC_X86_64_GOTOFF64)
6959 if (exp->X_op != O_symbol)
6960 goto inv_disp;
6962 if (S_IS_LOCAL (exp->X_add_symbol)
6963 && S_GET_SEGMENT (exp->X_add_symbol) != undefined_section
6964 && S_GET_SEGMENT (exp->X_add_symbol) != expr_section)
6965 section_symbol (S_GET_SEGMENT (exp->X_add_symbol));
6966 exp->X_op = O_subtract;
6967 exp->X_op_symbol = GOT_symbol;
6968 if (i.reloc[this_operand] == BFD_RELOC_X86_64_GOTPCREL)
6969 i.reloc[this_operand] = BFD_RELOC_32_PCREL;
6970 else if (i.reloc[this_operand] == BFD_RELOC_X86_64_GOTOFF64)
6971 i.reloc[this_operand] = BFD_RELOC_64;
6972 else
6973 i.reloc[this_operand] = BFD_RELOC_32;
6976 else if (exp->X_op == O_absent
6977 || exp->X_op == O_illegal
6978 || exp->X_op == O_big)
6980 inv_disp:
6981 as_bad (_("missing or invalid displacement expression `%s'"),
6982 disp_start);
6983 ret = 0;
6986 else if (flag_code == CODE_64BIT
6987 && !i.prefix[ADDR_PREFIX]
6988 && exp->X_op == O_constant)
6990 /* Since displacement is signed extended to 64bit, don't allow
6991 disp32 and turn off disp32s if they are out of range. */
6992 i.types[this_operand].bitfield.disp32 = 0;
6993 if (!fits_in_signed_long (exp->X_add_number))
6995 i.types[this_operand].bitfield.disp32s = 0;
6996 if (i.types[this_operand].bitfield.baseindex)
6998 as_bad (_("0x%lx out range of signed 32bit displacement"),
6999 (long) exp->X_add_number);
7000 ret = 0;
7005 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
7006 else if (exp->X_op != O_constant
7007 && OUTPUT_FLAVOR == bfd_target_aout_flavour
7008 && exp_seg != absolute_section
7009 && exp_seg != text_section
7010 && exp_seg != data_section
7011 && exp_seg != bss_section
7012 && exp_seg != undefined_section
7013 && !bfd_is_com_section (exp_seg))
7015 as_bad (_("unimplemented segment %s in operand"), exp_seg->name);
7016 ret = 0;
7018 #endif
7020 /* Check if this is a displacement only operand. */
7021 bigdisp = i.types[this_operand];
7022 bigdisp.bitfield.disp8 = 0;
7023 bigdisp.bitfield.disp16 = 0;
7024 bigdisp.bitfield.disp32 = 0;
7025 bigdisp.bitfield.disp32s = 0;
7026 bigdisp.bitfield.disp64 = 0;
7027 if (operand_type_all_zero (&bigdisp))
7028 i.types[this_operand] = operand_type_and (i.types[this_operand],
7029 types);
7031 return ret;
7034 /* Make sure the memory operand we've been dealt is valid.
7035 Return 1 on success, 0 on a failure. */
7037 static int
7038 i386_index_check (const char *operand_string)
7040 int ok;
7041 const char *kind = "base/index";
7042 #if INFER_ADDR_PREFIX
7043 int fudged = 0;
7045 tryprefix:
7046 #endif
7047 ok = 1;
7048 if (current_templates->start->opcode_modifier.isstring
7049 && !current_templates->start->opcode_modifier.immext
7050 && (current_templates->end[-1].opcode_modifier.isstring
7051 || i.mem_operands))
7053 /* Memory operands of string insns are special in that they only allow
7054 a single register (rDI, rSI, or rBX) as their memory address. */
7055 unsigned int expected;
7057 kind = "string address";
7059 if (current_templates->start->opcode_modifier.w)
7061 i386_operand_type type = current_templates->end[-1].operand_types[0];
7063 if (!type.bitfield.baseindex
7064 || ((!i.mem_operands != !intel_syntax)
7065 && current_templates->end[-1].operand_types[1]
7066 .bitfield.baseindex))
7067 type = current_templates->end[-1].operand_types[1];
7068 expected = type.bitfield.esseg ? 7 /* rDI */ : 6 /* rSI */;
7070 else
7071 expected = 3 /* rBX */;
7073 if (!i.base_reg || i.index_reg
7074 || operand_type_check (i.types[this_operand], disp))
7075 ok = -1;
7076 else if (!(flag_code == CODE_64BIT
7077 ? i.prefix[ADDR_PREFIX]
7078 ? i.base_reg->reg_type.bitfield.reg32
7079 : i.base_reg->reg_type.bitfield.reg64
7080 : (flag_code == CODE_16BIT) ^ !i.prefix[ADDR_PREFIX]
7081 ? i.base_reg->reg_type.bitfield.reg32
7082 : i.base_reg->reg_type.bitfield.reg16))
7083 ok = 0;
7084 else if (i.base_reg->reg_num != expected)
7085 ok = -1;
7087 if (ok < 0)
7089 unsigned int j;
7091 for (j = 0; j < i386_regtab_size; ++j)
7092 if ((flag_code == CODE_64BIT
7093 ? i.prefix[ADDR_PREFIX]
7094 ? i386_regtab[j].reg_type.bitfield.reg32
7095 : i386_regtab[j].reg_type.bitfield.reg64
7096 : (flag_code == CODE_16BIT) ^ !i.prefix[ADDR_PREFIX]
7097 ? i386_regtab[j].reg_type.bitfield.reg32
7098 : i386_regtab[j].reg_type.bitfield.reg16)
7099 && i386_regtab[j].reg_num == expected)
7100 break;
7101 gas_assert (j < i386_regtab_size);
7102 as_warn (_("`%s' is not valid here (expected `%c%s%s%c')"),
7103 operand_string,
7104 intel_syntax ? '[' : '(',
7105 register_prefix,
7106 i386_regtab[j].reg_name,
7107 intel_syntax ? ']' : ')');
7108 ok = 1;
7111 else if (flag_code == CODE_64BIT)
7113 if ((i.base_reg
7114 && ((i.prefix[ADDR_PREFIX] == 0
7115 && !i.base_reg->reg_type.bitfield.reg64)
7116 || (i.prefix[ADDR_PREFIX]
7117 && !i.base_reg->reg_type.bitfield.reg32))
7118 && (i.index_reg
7119 || i.base_reg->reg_num !=
7120 (i.prefix[ADDR_PREFIX] == 0 ? RegRip : RegEip)))
7121 || (i.index_reg
7122 && (!i.index_reg->reg_type.bitfield.baseindex
7123 || (i.prefix[ADDR_PREFIX] == 0
7124 && i.index_reg->reg_num != RegRiz
7125 && !i.index_reg->reg_type.bitfield.reg64
7127 || (i.prefix[ADDR_PREFIX]
7128 && i.index_reg->reg_num != RegEiz
7129 && !i.index_reg->reg_type.bitfield.reg32))))
7130 ok = 0;
7132 else
7134 if ((flag_code == CODE_16BIT) ^ (i.prefix[ADDR_PREFIX] != 0))
7136 /* 16bit checks. */
7137 if ((i.base_reg
7138 && (!i.base_reg->reg_type.bitfield.reg16
7139 || !i.base_reg->reg_type.bitfield.baseindex))
7140 || (i.index_reg
7141 && (!i.index_reg->reg_type.bitfield.reg16
7142 || !i.index_reg->reg_type.bitfield.baseindex
7143 || !(i.base_reg
7144 && i.base_reg->reg_num < 6
7145 && i.index_reg->reg_num >= 6
7146 && i.log2_scale_factor == 0))))
7147 ok = 0;
7149 else
7151 /* 32bit checks. */
7152 if ((i.base_reg
7153 && !i.base_reg->reg_type.bitfield.reg32)
7154 || (i.index_reg
7155 && ((!i.index_reg->reg_type.bitfield.reg32
7156 && i.index_reg->reg_num != RegEiz)
7157 || !i.index_reg->reg_type.bitfield.baseindex)))
7158 ok = 0;
7161 if (!ok)
7163 #if INFER_ADDR_PREFIX
7164 if (!i.mem_operands && !i.prefix[ADDR_PREFIX])
7166 i.prefix[ADDR_PREFIX] = ADDR_PREFIX_OPCODE;
7167 i.prefixes += 1;
7168 /* Change the size of any displacement too. At most one of
7169 Disp16 or Disp32 is set.
7170 FIXME. There doesn't seem to be any real need for separate
7171 Disp16 and Disp32 flags. The same goes for Imm16 and Imm32.
7172 Removing them would probably clean up the code quite a lot. */
7173 if (flag_code != CODE_64BIT
7174 && (i.types[this_operand].bitfield.disp16
7175 || i.types[this_operand].bitfield.disp32))
7176 i.types[this_operand]
7177 = operand_type_xor (i.types[this_operand], disp16_32);
7178 fudged = 1;
7179 goto tryprefix;
7181 if (fudged)
7182 as_bad (_("`%s' is not a valid %s expression"),
7183 operand_string,
7184 kind);
7185 else
7186 #endif
7187 as_bad (_("`%s' is not a valid %s-bit %s expression"),
7188 operand_string,
7189 flag_code_names[i.prefix[ADDR_PREFIX]
7190 ? flag_code == CODE_32BIT
7191 ? CODE_16BIT
7192 : CODE_32BIT
7193 : flag_code],
7194 kind);
7196 return ok;
7199 /* Parse OPERAND_STRING into the i386_insn structure I. Returns zero
7200 on error. */
7202 static int
7203 i386_att_operand (char *operand_string)
7205 const reg_entry *r;
7206 char *end_op;
7207 char *op_string = operand_string;
7209 if (is_space_char (*op_string))
7210 ++op_string;
7212 /* We check for an absolute prefix (differentiating,
7213 for example, 'jmp pc_relative_label' from 'jmp *absolute_label'. */
7214 if (*op_string == ABSOLUTE_PREFIX)
7216 ++op_string;
7217 if (is_space_char (*op_string))
7218 ++op_string;
7219 i.types[this_operand].bitfield.jumpabsolute = 1;
7222 /* Check if operand is a register. */
7223 if ((r = parse_register (op_string, &end_op)) != NULL)
7225 i386_operand_type temp;
7227 /* Check for a segment override by searching for ':' after a
7228 segment register. */
7229 op_string = end_op;
7230 if (is_space_char (*op_string))
7231 ++op_string;
7232 if (*op_string == ':'
7233 && (r->reg_type.bitfield.sreg2
7234 || r->reg_type.bitfield.sreg3))
7236 switch (r->reg_num)
7238 case 0:
7239 i.seg[i.mem_operands] = &es;
7240 break;
7241 case 1:
7242 i.seg[i.mem_operands] = &cs;
7243 break;
7244 case 2:
7245 i.seg[i.mem_operands] = &ss;
7246 break;
7247 case 3:
7248 i.seg[i.mem_operands] = &ds;
7249 break;
7250 case 4:
7251 i.seg[i.mem_operands] = &fs;
7252 break;
7253 case 5:
7254 i.seg[i.mem_operands] = &gs;
7255 break;
7258 /* Skip the ':' and whitespace. */
7259 ++op_string;
7260 if (is_space_char (*op_string))
7261 ++op_string;
7263 if (!is_digit_char (*op_string)
7264 && !is_identifier_char (*op_string)
7265 && *op_string != '('
7266 && *op_string != ABSOLUTE_PREFIX)
7268 as_bad (_("bad memory operand `%s'"), op_string);
7269 return 0;
7271 /* Handle case of %es:*foo. */
7272 if (*op_string == ABSOLUTE_PREFIX)
7274 ++op_string;
7275 if (is_space_char (*op_string))
7276 ++op_string;
7277 i.types[this_operand].bitfield.jumpabsolute = 1;
7279 goto do_memory_reference;
7281 if (*op_string)
7283 as_bad (_("junk `%s' after register"), op_string);
7284 return 0;
7286 temp = r->reg_type;
7287 temp.bitfield.baseindex = 0;
7288 i.types[this_operand] = operand_type_or (i.types[this_operand],
7289 temp);
7290 i.types[this_operand].bitfield.unspecified = 0;
7291 i.op[this_operand].regs = r;
7292 i.reg_operands++;
7294 else if (*op_string == REGISTER_PREFIX)
7296 as_bad (_("bad register name `%s'"), op_string);
7297 return 0;
7299 else if (*op_string == IMMEDIATE_PREFIX)
7301 ++op_string;
7302 if (i.types[this_operand].bitfield.jumpabsolute)
7304 as_bad (_("immediate operand illegal with absolute jump"));
7305 return 0;
7307 if (!i386_immediate (op_string))
7308 return 0;
7310 else if (is_digit_char (*op_string)
7311 || is_identifier_char (*op_string)
7312 || *op_string == '(')
7314 /* This is a memory reference of some sort. */
7315 char *base_string;
7317 /* Start and end of displacement string expression (if found). */
7318 char *displacement_string_start;
7319 char *displacement_string_end;
7321 do_memory_reference:
7322 if ((i.mem_operands == 1
7323 && !current_templates->start->opcode_modifier.isstring)
7324 || i.mem_operands == 2)
7326 as_bad (_("too many memory references for `%s'"),
7327 current_templates->start->name);
7328 return 0;
7331 /* Check for base index form. We detect the base index form by
7332 looking for an ')' at the end of the operand, searching
7333 for the '(' matching it, and finding a REGISTER_PREFIX or ','
7334 after the '('. */
7335 base_string = op_string + strlen (op_string);
7337 --base_string;
7338 if (is_space_char (*base_string))
7339 --base_string;
7341 /* If we only have a displacement, set-up for it to be parsed later. */
7342 displacement_string_start = op_string;
7343 displacement_string_end = base_string + 1;
7345 if (*base_string == ')')
7347 char *temp_string;
7348 unsigned int parens_balanced = 1;
7349 /* We've already checked that the number of left & right ()'s are
7350 equal, so this loop will not be infinite. */
7353 base_string--;
7354 if (*base_string == ')')
7355 parens_balanced++;
7356 if (*base_string == '(')
7357 parens_balanced--;
7359 while (parens_balanced);
7361 temp_string = base_string;
7363 /* Skip past '(' and whitespace. */
7364 ++base_string;
7365 if (is_space_char (*base_string))
7366 ++base_string;
7368 if (*base_string == ','
7369 || ((i.base_reg = parse_register (base_string, &end_op))
7370 != NULL))
7372 displacement_string_end = temp_string;
7374 i.types[this_operand].bitfield.baseindex = 1;
7376 if (i.base_reg)
7378 base_string = end_op;
7379 if (is_space_char (*base_string))
7380 ++base_string;
7383 /* There may be an index reg or scale factor here. */
7384 if (*base_string == ',')
7386 ++base_string;
7387 if (is_space_char (*base_string))
7388 ++base_string;
7390 if ((i.index_reg = parse_register (base_string, &end_op))
7391 != NULL)
7393 base_string = end_op;
7394 if (is_space_char (*base_string))
7395 ++base_string;
7396 if (*base_string == ',')
7398 ++base_string;
7399 if (is_space_char (*base_string))
7400 ++base_string;
7402 else if (*base_string != ')')
7404 as_bad (_("expecting `,' or `)' "
7405 "after index register in `%s'"),
7406 operand_string);
7407 return 0;
7410 else if (*base_string == REGISTER_PREFIX)
7412 as_bad (_("bad register name `%s'"), base_string);
7413 return 0;
7416 /* Check for scale factor. */
7417 if (*base_string != ')')
7419 char *end_scale = i386_scale (base_string);
7421 if (!end_scale)
7422 return 0;
7424 base_string = end_scale;
7425 if (is_space_char (*base_string))
7426 ++base_string;
7427 if (*base_string != ')')
7429 as_bad (_("expecting `)' "
7430 "after scale factor in `%s'"),
7431 operand_string);
7432 return 0;
7435 else if (!i.index_reg)
7437 as_bad (_("expecting index register or scale factor "
7438 "after `,'; got '%c'"),
7439 *base_string);
7440 return 0;
7443 else if (*base_string != ')')
7445 as_bad (_("expecting `,' or `)' "
7446 "after base register in `%s'"),
7447 operand_string);
7448 return 0;
7451 else if (*base_string == REGISTER_PREFIX)
7453 as_bad (_("bad register name `%s'"), base_string);
7454 return 0;
7458 /* If there's an expression beginning the operand, parse it,
7459 assuming displacement_string_start and
7460 displacement_string_end are meaningful. */
7461 if (displacement_string_start != displacement_string_end)
7463 if (!i386_displacement (displacement_string_start,
7464 displacement_string_end))
7465 return 0;
7468 /* Special case for (%dx) while doing input/output op. */
7469 if (i.base_reg
7470 && operand_type_equal (&i.base_reg->reg_type,
7471 &reg16_inoutportreg)
7472 && i.index_reg == 0
7473 && i.log2_scale_factor == 0
7474 && i.seg[i.mem_operands] == 0
7475 && !operand_type_check (i.types[this_operand], disp))
7477 i.types[this_operand] = inoutportreg;
7478 return 1;
7481 if (i386_index_check (operand_string) == 0)
7482 return 0;
7483 i.types[this_operand].bitfield.mem = 1;
7484 i.mem_operands++;
7486 else
7488 /* It's not a memory operand; argh! */
7489 as_bad (_("invalid char %s beginning operand %d `%s'"),
7490 output_invalid (*op_string),
7491 this_operand + 1,
7492 op_string);
7493 return 0;
7495 return 1; /* Normal return. */
7498 /* md_estimate_size_before_relax()
7500 Called just before relax() for rs_machine_dependent frags. The x86
7501 assembler uses these frags to handle variable size jump
7502 instructions.
7504 Any symbol that is now undefined will not become defined.
7505 Return the correct fr_subtype in the frag.
7506 Return the initial "guess for variable size of frag" to caller.
7507 The guess is actually the growth beyond the fixed part. Whatever
7508 we do to grow the fixed or variable part contributes to our
7509 returned value. */
7512 md_estimate_size_before_relax (fragP, segment)
7513 fragS *fragP;
7514 segT segment;
7516 /* We've already got fragP->fr_subtype right; all we have to do is
7517 check for un-relaxable symbols. On an ELF system, we can't relax
7518 an externally visible symbol, because it may be overridden by a
7519 shared library. */
7520 if (S_GET_SEGMENT (fragP->fr_symbol) != segment
7521 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7522 || (IS_ELF
7523 && (S_IS_EXTERNAL (fragP->fr_symbol)
7524 || S_IS_WEAK (fragP->fr_symbol)
7525 || ((symbol_get_bfdsym (fragP->fr_symbol)->flags
7526 & BSF_GNU_INDIRECT_FUNCTION))))
7527 #endif
7528 #if defined (OBJ_COFF) && defined (TE_PE)
7529 || (OUTPUT_FLAVOR == bfd_target_coff_flavour
7530 && S_IS_WEAK (fragP->fr_symbol))
7531 #endif
7534 /* Symbol is undefined in this segment, or we need to keep a
7535 reloc so that weak symbols can be overridden. */
7536 int size = (fragP->fr_subtype & CODE16) ? 2 : 4;
7537 enum bfd_reloc_code_real reloc_type;
7538 unsigned char *opcode;
7539 int old_fr_fix;
7541 if (fragP->fr_var != NO_RELOC)
7542 reloc_type = (enum bfd_reloc_code_real) fragP->fr_var;
7543 else if (size == 2)
7544 reloc_type = BFD_RELOC_16_PCREL;
7545 else
7546 reloc_type = BFD_RELOC_32_PCREL;
7548 old_fr_fix = fragP->fr_fix;
7549 opcode = (unsigned char *) fragP->fr_opcode;
7551 switch (TYPE_FROM_RELAX_STATE (fragP->fr_subtype))
7553 case UNCOND_JUMP:
7554 /* Make jmp (0xeb) a (d)word displacement jump. */
7555 opcode[0] = 0xe9;
7556 fragP->fr_fix += size;
7557 fix_new (fragP, old_fr_fix, size,
7558 fragP->fr_symbol,
7559 fragP->fr_offset, 1,
7560 reloc_type);
7561 break;
7563 case COND_JUMP86:
7564 if (size == 2
7565 && (!no_cond_jump_promotion || fragP->fr_var != NO_RELOC))
7567 /* Negate the condition, and branch past an
7568 unconditional jump. */
7569 opcode[0] ^= 1;
7570 opcode[1] = 3;
7571 /* Insert an unconditional jump. */
7572 opcode[2] = 0xe9;
7573 /* We added two extra opcode bytes, and have a two byte
7574 offset. */
7575 fragP->fr_fix += 2 + 2;
7576 fix_new (fragP, old_fr_fix + 2, 2,
7577 fragP->fr_symbol,
7578 fragP->fr_offset, 1,
7579 reloc_type);
7580 break;
7582 /* Fall through. */
7584 case COND_JUMP:
7585 if (no_cond_jump_promotion && fragP->fr_var == NO_RELOC)
7587 fixS *fixP;
7589 fragP->fr_fix += 1;
7590 fixP = fix_new (fragP, old_fr_fix, 1,
7591 fragP->fr_symbol,
7592 fragP->fr_offset, 1,
7593 BFD_RELOC_8_PCREL);
7594 fixP->fx_signed = 1;
7595 break;
7598 /* This changes the byte-displacement jump 0x7N
7599 to the (d)word-displacement jump 0x0f,0x8N. */
7600 opcode[1] = opcode[0] + 0x10;
7601 opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
7602 /* We've added an opcode byte. */
7603 fragP->fr_fix += 1 + size;
7604 fix_new (fragP, old_fr_fix + 1, size,
7605 fragP->fr_symbol,
7606 fragP->fr_offset, 1,
7607 reloc_type);
7608 break;
7610 default:
7611 BAD_CASE (fragP->fr_subtype);
7612 break;
7614 frag_wane (fragP);
7615 return fragP->fr_fix - old_fr_fix;
7618 /* Guess size depending on current relax state. Initially the relax
7619 state will correspond to a short jump and we return 1, because
7620 the variable part of the frag (the branch offset) is one byte
7621 long. However, we can relax a section more than once and in that
7622 case we must either set fr_subtype back to the unrelaxed state,
7623 or return the value for the appropriate branch. */
7624 return md_relax_table[fragP->fr_subtype].rlx_length;
7627 /* Called after relax() is finished.
7629 In: Address of frag.
7630 fr_type == rs_machine_dependent.
7631 fr_subtype is what the address relaxed to.
7633 Out: Any fixSs and constants are set up.
7634 Caller will turn frag into a ".space 0". */
7636 void
7637 md_convert_frag (abfd, sec, fragP)
7638 bfd *abfd ATTRIBUTE_UNUSED;
7639 segT sec ATTRIBUTE_UNUSED;
7640 fragS *fragP;
7642 unsigned char *opcode;
7643 unsigned char *where_to_put_displacement = NULL;
7644 offsetT target_address;
7645 offsetT opcode_address;
7646 unsigned int extension = 0;
7647 offsetT displacement_from_opcode_start;
7649 opcode = (unsigned char *) fragP->fr_opcode;
7651 /* Address we want to reach in file space. */
7652 target_address = S_GET_VALUE (fragP->fr_symbol) + fragP->fr_offset;
7654 /* Address opcode resides at in file space. */
7655 opcode_address = fragP->fr_address + fragP->fr_fix;
7657 /* Displacement from opcode start to fill into instruction. */
7658 displacement_from_opcode_start = target_address - opcode_address;
7660 if ((fragP->fr_subtype & BIG) == 0)
7662 /* Don't have to change opcode. */
7663 extension = 1; /* 1 opcode + 1 displacement */
7664 where_to_put_displacement = &opcode[1];
7666 else
7668 if (no_cond_jump_promotion
7669 && TYPE_FROM_RELAX_STATE (fragP->fr_subtype) != UNCOND_JUMP)
7670 as_warn_where (fragP->fr_file, fragP->fr_line,
7671 _("long jump required"));
7673 switch (fragP->fr_subtype)
7675 case ENCODE_RELAX_STATE (UNCOND_JUMP, BIG):
7676 extension = 4; /* 1 opcode + 4 displacement */
7677 opcode[0] = 0xe9;
7678 where_to_put_displacement = &opcode[1];
7679 break;
7681 case ENCODE_RELAX_STATE (UNCOND_JUMP, BIG16):
7682 extension = 2; /* 1 opcode + 2 displacement */
7683 opcode[0] = 0xe9;
7684 where_to_put_displacement = &opcode[1];
7685 break;
7687 case ENCODE_RELAX_STATE (COND_JUMP, BIG):
7688 case ENCODE_RELAX_STATE (COND_JUMP86, BIG):
7689 extension = 5; /* 2 opcode + 4 displacement */
7690 opcode[1] = opcode[0] + 0x10;
7691 opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
7692 where_to_put_displacement = &opcode[2];
7693 break;
7695 case ENCODE_RELAX_STATE (COND_JUMP, BIG16):
7696 extension = 3; /* 2 opcode + 2 displacement */
7697 opcode[1] = opcode[0] + 0x10;
7698 opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
7699 where_to_put_displacement = &opcode[2];
7700 break;
7702 case ENCODE_RELAX_STATE (COND_JUMP86, BIG16):
7703 extension = 4;
7704 opcode[0] ^= 1;
7705 opcode[1] = 3;
7706 opcode[2] = 0xe9;
7707 where_to_put_displacement = &opcode[3];
7708 break;
7710 default:
7711 BAD_CASE (fragP->fr_subtype);
7712 break;
7716 /* If size if less then four we are sure that the operand fits,
7717 but if it's 4, then it could be that the displacement is larger
7718 then -/+ 2GB. */
7719 if (DISP_SIZE_FROM_RELAX_STATE (fragP->fr_subtype) == 4
7720 && object_64bit
7721 && ((addressT) (displacement_from_opcode_start - extension
7722 + ((addressT) 1 << 31))
7723 > (((addressT) 2 << 31) - 1)))
7725 as_bad_where (fragP->fr_file, fragP->fr_line,
7726 _("jump target out of range"));
7727 /* Make us emit 0. */
7728 displacement_from_opcode_start = extension;
7730 /* Now put displacement after opcode. */
7731 md_number_to_chars ((char *) where_to_put_displacement,
7732 (valueT) (displacement_from_opcode_start - extension),
7733 DISP_SIZE_FROM_RELAX_STATE (fragP->fr_subtype));
7734 fragP->fr_fix += extension;
7737 /* Apply a fixup (fixS) to segment data, once it has been determined
7738 by our caller that we have all the info we need to fix it up.
7740 On the 386, immediates, displacements, and data pointers are all in
7741 the same (little-endian) format, so we don't need to care about which
7742 we are handling. */
7744 void
7745 md_apply_fix (fixP, valP, seg)
7746 /* The fix we're to put in. */
7747 fixS *fixP;
7748 /* Pointer to the value of the bits. */
7749 valueT *valP;
7750 /* Segment fix is from. */
7751 segT seg ATTRIBUTE_UNUSED;
7753 char *p = fixP->fx_where + fixP->fx_frag->fr_literal;
7754 valueT value = *valP;
7756 #if !defined (TE_Mach)
7757 if (fixP->fx_pcrel)
7759 switch (fixP->fx_r_type)
7761 default:
7762 break;
7764 case BFD_RELOC_64:
7765 fixP->fx_r_type = BFD_RELOC_64_PCREL;
7766 break;
7767 case BFD_RELOC_32:
7768 case BFD_RELOC_X86_64_32S:
7769 fixP->fx_r_type = BFD_RELOC_32_PCREL;
7770 break;
7771 case BFD_RELOC_16:
7772 fixP->fx_r_type = BFD_RELOC_16_PCREL;
7773 break;
7774 case BFD_RELOC_8:
7775 fixP->fx_r_type = BFD_RELOC_8_PCREL;
7776 break;
7780 if (fixP->fx_addsy != NULL
7781 && (fixP->fx_r_type == BFD_RELOC_32_PCREL
7782 || fixP->fx_r_type == BFD_RELOC_64_PCREL
7783 || fixP->fx_r_type == BFD_RELOC_16_PCREL
7784 || fixP->fx_r_type == BFD_RELOC_8_PCREL)
7785 && !use_rela_relocations)
7787 /* This is a hack. There should be a better way to handle this.
7788 This covers for the fact that bfd_install_relocation will
7789 subtract the current location (for partial_inplace, PC relative
7790 relocations); see more below. */
7791 #ifndef OBJ_AOUT
7792 if (IS_ELF
7793 #ifdef TE_PE
7794 || OUTPUT_FLAVOR == bfd_target_coff_flavour
7795 #endif
7797 value += fixP->fx_where + fixP->fx_frag->fr_address;
7798 #endif
7799 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7800 if (IS_ELF)
7802 segT sym_seg = S_GET_SEGMENT (fixP->fx_addsy);
7804 if ((sym_seg == seg
7805 || (symbol_section_p (fixP->fx_addsy)
7806 && sym_seg != absolute_section))
7807 && !generic_force_reloc (fixP))
7809 /* Yes, we add the values in twice. This is because
7810 bfd_install_relocation subtracts them out again. I think
7811 bfd_install_relocation is broken, but I don't dare change
7812 it. FIXME. */
7813 value += fixP->fx_where + fixP->fx_frag->fr_address;
7816 #endif
7817 #if defined (OBJ_COFF) && defined (TE_PE)
7818 /* For some reason, the PE format does not store a
7819 section address offset for a PC relative symbol. */
7820 if (S_GET_SEGMENT (fixP->fx_addsy) != seg
7821 || S_IS_WEAK (fixP->fx_addsy))
7822 value += md_pcrel_from (fixP);
7823 #endif
7825 #if defined (OBJ_COFF) && defined (TE_PE)
7826 if (fixP->fx_addsy != NULL && S_IS_WEAK (fixP->fx_addsy))
7828 value -= S_GET_VALUE (fixP->fx_addsy);
7830 #endif
7832 /* Fix a few things - the dynamic linker expects certain values here,
7833 and we must not disappoint it. */
7834 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7835 if (IS_ELF && fixP->fx_addsy)
7836 switch (fixP->fx_r_type)
7838 case BFD_RELOC_386_PLT32:
7839 case BFD_RELOC_X86_64_PLT32:
7840 /* Make the jump instruction point to the address of the operand. At
7841 runtime we merely add the offset to the actual PLT entry. */
7842 value = -4;
7843 break;
7845 case BFD_RELOC_386_TLS_GD:
7846 case BFD_RELOC_386_TLS_LDM:
7847 case BFD_RELOC_386_TLS_IE_32:
7848 case BFD_RELOC_386_TLS_IE:
7849 case BFD_RELOC_386_TLS_GOTIE:
7850 case BFD_RELOC_386_TLS_GOTDESC:
7851 case BFD_RELOC_X86_64_TLSGD:
7852 case BFD_RELOC_X86_64_TLSLD:
7853 case BFD_RELOC_X86_64_GOTTPOFF:
7854 case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
7855 value = 0; /* Fully resolved at runtime. No addend. */
7856 /* Fallthrough */
7857 case BFD_RELOC_386_TLS_LE:
7858 case BFD_RELOC_386_TLS_LDO_32:
7859 case BFD_RELOC_386_TLS_LE_32:
7860 case BFD_RELOC_X86_64_DTPOFF32:
7861 case BFD_RELOC_X86_64_DTPOFF64:
7862 case BFD_RELOC_X86_64_TPOFF32:
7863 case BFD_RELOC_X86_64_TPOFF64:
7864 S_SET_THREAD_LOCAL (fixP->fx_addsy);
7865 break;
7867 case BFD_RELOC_386_TLS_DESC_CALL:
7868 case BFD_RELOC_X86_64_TLSDESC_CALL:
7869 value = 0; /* Fully resolved at runtime. No addend. */
7870 S_SET_THREAD_LOCAL (fixP->fx_addsy);
7871 fixP->fx_done = 0;
7872 return;
7874 case BFD_RELOC_386_GOT32:
7875 case BFD_RELOC_X86_64_GOT32:
7876 value = 0; /* Fully resolved at runtime. No addend. */
7877 break;
7879 case BFD_RELOC_VTABLE_INHERIT:
7880 case BFD_RELOC_VTABLE_ENTRY:
7881 fixP->fx_done = 0;
7882 return;
7884 default:
7885 break;
7887 #endif /* defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) */
7888 *valP = value;
7889 #endif /* !defined (TE_Mach) */
7891 /* Are we finished with this relocation now? */
7892 if (fixP->fx_addsy == NULL)
7893 fixP->fx_done = 1;
7894 #if defined (OBJ_COFF) && defined (TE_PE)
7895 else if (fixP->fx_addsy != NULL && S_IS_WEAK (fixP->fx_addsy))
7897 fixP->fx_done = 0;
7898 /* Remember value for tc_gen_reloc. */
7899 fixP->fx_addnumber = value;
7900 /* Clear out the frag for now. */
7901 value = 0;
7903 #endif
7904 else if (use_rela_relocations)
7906 fixP->fx_no_overflow = 1;
7907 /* Remember value for tc_gen_reloc. */
7908 fixP->fx_addnumber = value;
7909 value = 0;
7912 md_number_to_chars (p, value, fixP->fx_size);
7915 char *
7916 md_atof (int type, char *litP, int *sizeP)
7918 /* This outputs the LITTLENUMs in REVERSE order;
7919 in accord with the bigendian 386. */
7920 return ieee_md_atof (type, litP, sizeP, FALSE);
7923 static char output_invalid_buf[sizeof (unsigned char) * 2 + 6];
7925 static char *
7926 output_invalid (int c)
7928 if (ISPRINT (c))
7929 snprintf (output_invalid_buf, sizeof (output_invalid_buf),
7930 "'%c'", c);
7931 else
7932 snprintf (output_invalid_buf, sizeof (output_invalid_buf),
7933 "(0x%x)", (unsigned char) c);
7934 return output_invalid_buf;
7937 /* REG_STRING starts *before* REGISTER_PREFIX. */
7939 static const reg_entry *
7940 parse_real_register (char *reg_string, char **end_op)
7942 char *s = reg_string;
7943 char *p;
7944 char reg_name_given[MAX_REG_NAME_SIZE + 1];
7945 const reg_entry *r;
7947 /* Skip possible REGISTER_PREFIX and possible whitespace. */
7948 if (*s == REGISTER_PREFIX)
7949 ++s;
7951 if (is_space_char (*s))
7952 ++s;
7954 p = reg_name_given;
7955 while ((*p++ = register_chars[(unsigned char) *s]) != '\0')
7957 if (p >= reg_name_given + MAX_REG_NAME_SIZE)
7958 return (const reg_entry *) NULL;
7959 s++;
7962 /* For naked regs, make sure that we are not dealing with an identifier.
7963 This prevents confusing an identifier like `eax_var' with register
7964 `eax'. */
7965 if (allow_naked_reg && identifier_chars[(unsigned char) *s])
7966 return (const reg_entry *) NULL;
7968 *end_op = s;
7970 r = (const reg_entry *) hash_find (reg_hash, reg_name_given);
7972 /* Handle floating point regs, allowing spaces in the (i) part. */
7973 if (r == i386_regtab /* %st is first entry of table */)
7975 if (is_space_char (*s))
7976 ++s;
7977 if (*s == '(')
7979 ++s;
7980 if (is_space_char (*s))
7981 ++s;
7982 if (*s >= '0' && *s <= '7')
7984 int fpr = *s - '0';
7985 ++s;
7986 if (is_space_char (*s))
7987 ++s;
7988 if (*s == ')')
7990 *end_op = s + 1;
7991 r = (const reg_entry *) hash_find (reg_hash, "st(0)");
7992 know (r);
7993 return r + fpr;
7996 /* We have "%st(" then garbage. */
7997 return (const reg_entry *) NULL;
8001 if (r == NULL || allow_pseudo_reg)
8002 return r;
8004 if (operand_type_all_zero (&r->reg_type))
8005 return (const reg_entry *) NULL;
8007 if ((r->reg_type.bitfield.reg32
8008 || r->reg_type.bitfield.sreg3
8009 || r->reg_type.bitfield.control
8010 || r->reg_type.bitfield.debug
8011 || r->reg_type.bitfield.test)
8012 && !cpu_arch_flags.bitfield.cpui386)
8013 return (const reg_entry *) NULL;
8015 if (r->reg_type.bitfield.floatreg
8016 && !cpu_arch_flags.bitfield.cpu8087
8017 && !cpu_arch_flags.bitfield.cpu287
8018 && !cpu_arch_flags.bitfield.cpu387)
8019 return (const reg_entry *) NULL;
8021 if (r->reg_type.bitfield.regmmx && !cpu_arch_flags.bitfield.cpummx)
8022 return (const reg_entry *) NULL;
8024 if (r->reg_type.bitfield.regxmm && !cpu_arch_flags.bitfield.cpusse)
8025 return (const reg_entry *) NULL;
8027 if (r->reg_type.bitfield.regymm && !cpu_arch_flags.bitfield.cpuavx)
8028 return (const reg_entry *) NULL;
8030 /* Don't allow fake index register unless allow_index_reg isn't 0. */
8031 if (!allow_index_reg
8032 && (r->reg_num == RegEiz || r->reg_num == RegRiz))
8033 return (const reg_entry *) NULL;
8035 if (((r->reg_flags & (RegRex64 | RegRex))
8036 || r->reg_type.bitfield.reg64)
8037 && (!cpu_arch_flags.bitfield.cpulm
8038 || !operand_type_equal (&r->reg_type, &control))
8039 && flag_code != CODE_64BIT)
8040 return (const reg_entry *) NULL;
8042 if (r->reg_type.bitfield.sreg3 && r->reg_num == RegFlat && !intel_syntax)
8043 return (const reg_entry *) NULL;
8045 return r;
8048 /* REG_STRING starts *before* REGISTER_PREFIX. */
8050 static const reg_entry *
8051 parse_register (char *reg_string, char **end_op)
8053 const reg_entry *r;
8055 if (*reg_string == REGISTER_PREFIX || allow_naked_reg)
8056 r = parse_real_register (reg_string, end_op);
8057 else
8058 r = NULL;
8059 if (!r)
8061 char *save = input_line_pointer;
8062 char c;
8063 symbolS *symbolP;
8065 input_line_pointer = reg_string;
8066 c = get_symbol_end ();
8067 symbolP = symbol_find (reg_string);
8068 if (symbolP && S_GET_SEGMENT (symbolP) == reg_section)
8070 const expressionS *e = symbol_get_value_expression (symbolP);
8072 know (e->X_op == O_register);
8073 know (e->X_add_number >= 0
8074 && (valueT) e->X_add_number < i386_regtab_size);
8075 r = i386_regtab + e->X_add_number;
8076 *end_op = input_line_pointer;
8078 *input_line_pointer = c;
8079 input_line_pointer = save;
8081 return r;
8085 i386_parse_name (char *name, expressionS *e, char *nextcharP)
8087 const reg_entry *r;
8088 char *end = input_line_pointer;
8090 *end = *nextcharP;
8091 r = parse_register (name, &input_line_pointer);
8092 if (r && end <= input_line_pointer)
8094 *nextcharP = *input_line_pointer;
8095 *input_line_pointer = 0;
8096 e->X_op = O_register;
8097 e->X_add_number = r - i386_regtab;
8098 return 1;
8100 input_line_pointer = end;
8101 *end = 0;
8102 return intel_syntax ? i386_intel_parse_name (name, e) : 0;
8105 void
8106 md_operand (expressionS *e)
8108 char *end;
8109 const reg_entry *r;
8111 switch (*input_line_pointer)
8113 case REGISTER_PREFIX:
8114 r = parse_real_register (input_line_pointer, &end);
8115 if (r)
8117 e->X_op = O_register;
8118 e->X_add_number = r - i386_regtab;
8119 input_line_pointer = end;
8121 break;
8123 case '[':
8124 gas_assert (intel_syntax);
8125 end = input_line_pointer++;
8126 expression (e);
8127 if (*input_line_pointer == ']')
8129 ++input_line_pointer;
8130 e->X_op_symbol = make_expr_symbol (e);
8131 e->X_add_symbol = NULL;
8132 e->X_add_number = 0;
8133 e->X_op = O_index;
8135 else
8137 e->X_op = O_absent;
8138 input_line_pointer = end;
8140 break;
8145 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8146 const char *md_shortopts = "kVQ:sqn";
8147 #else
8148 const char *md_shortopts = "qn";
8149 #endif
8151 #define OPTION_32 (OPTION_MD_BASE + 0)
8152 #define OPTION_64 (OPTION_MD_BASE + 1)
8153 #define OPTION_DIVIDE (OPTION_MD_BASE + 2)
8154 #define OPTION_MARCH (OPTION_MD_BASE + 3)
8155 #define OPTION_MTUNE (OPTION_MD_BASE + 4)
8156 #define OPTION_MMNEMONIC (OPTION_MD_BASE + 5)
8157 #define OPTION_MSYNTAX (OPTION_MD_BASE + 6)
8158 #define OPTION_MINDEX_REG (OPTION_MD_BASE + 7)
8159 #define OPTION_MNAKED_REG (OPTION_MD_BASE + 8)
8160 #define OPTION_MOLD_GCC (OPTION_MD_BASE + 9)
8161 #define OPTION_MSSE2AVX (OPTION_MD_BASE + 10)
8162 #define OPTION_MSSE_CHECK (OPTION_MD_BASE + 11)
8163 #define OPTION_MAVXSCALAR (OPTION_MD_BASE + 12)
8164 #define OPTION_X32 (OPTION_MD_BASE + 13)
8166 struct option md_longopts[] =
8168 {"32", no_argument, NULL, OPTION_32},
8169 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
8170 || defined (TE_PE) || defined (TE_PEP))
8171 {"64", no_argument, NULL, OPTION_64},
8172 #endif
8173 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8174 {"x32", no_argument, NULL, OPTION_X32},
8175 #endif
8176 {"divide", no_argument, NULL, OPTION_DIVIDE},
8177 {"march", required_argument, NULL, OPTION_MARCH},
8178 {"mtune", required_argument, NULL, OPTION_MTUNE},
8179 {"mmnemonic", required_argument, NULL, OPTION_MMNEMONIC},
8180 {"msyntax", required_argument, NULL, OPTION_MSYNTAX},
8181 {"mindex-reg", no_argument, NULL, OPTION_MINDEX_REG},
8182 {"mnaked-reg", no_argument, NULL, OPTION_MNAKED_REG},
8183 {"mold-gcc", no_argument, NULL, OPTION_MOLD_GCC},
8184 {"msse2avx", no_argument, NULL, OPTION_MSSE2AVX},
8185 {"msse-check", required_argument, NULL, OPTION_MSSE_CHECK},
8186 {"mavxscalar", required_argument, NULL, OPTION_MAVXSCALAR},
8187 {NULL, no_argument, NULL, 0}
8189 size_t md_longopts_size = sizeof (md_longopts);
8192 md_parse_option (int c, char *arg)
8194 unsigned int j;
8195 char *arch, *next;
8197 switch (c)
8199 case 'n':
8200 optimize_align_code = 0;
8201 break;
8203 case 'q':
8204 quiet_warnings = 1;
8205 break;
8207 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8208 /* -Qy, -Qn: SVR4 arguments controlling whether a .comment section
8209 should be emitted or not. FIXME: Not implemented. */
8210 case 'Q':
8211 break;
8213 /* -V: SVR4 argument to print version ID. */
8214 case 'V':
8215 print_version_id ();
8216 break;
8218 /* -k: Ignore for FreeBSD compatibility. */
8219 case 'k':
8220 break;
8222 case 's':
8223 /* -s: On i386 Solaris, this tells the native assembler to use
8224 .stab instead of .stab.excl. We always use .stab anyhow. */
8225 break;
8226 #endif
8227 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
8228 || defined (TE_PE) || defined (TE_PEP))
8229 case OPTION_64:
8231 const char **list, **l;
8233 list = bfd_target_list ();
8234 for (l = list; *l != NULL; l++)
8235 if (CONST_STRNEQ (*l, "elf64-x86-64")
8236 || strcmp (*l, "coff-x86-64") == 0
8237 || strcmp (*l, "pe-x86-64") == 0
8238 || strcmp (*l, "pei-x86-64") == 0)
8240 default_arch = "x86_64";
8241 break;
8243 if (*l == NULL)
8244 as_fatal (_("No compiled in support for x86_64"));
8245 free (list);
8247 break;
8248 #endif
8250 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8251 case OPTION_X32:
8252 if (IS_ELF)
8254 const char **list, **l;
8256 list = bfd_target_list ();
8257 for (l = list; *l != NULL; l++)
8258 if (CONST_STRNEQ (*l, "elf32-x86-64"))
8260 default_arch = "x86_64:32";
8261 break;
8263 if (*l == NULL)
8264 as_fatal (_("No compiled in support for 32bit x86_64"));
8265 free (list);
8267 else
8268 as_fatal (_("32bit x86_64 is only supported for ELF"));
8269 break;
8270 #endif
8272 case OPTION_32:
8273 default_arch = "i386";
8274 break;
8276 case OPTION_DIVIDE:
8277 #ifdef SVR4_COMMENT_CHARS
8279 char *n, *t;
8280 const char *s;
8282 n = (char *) xmalloc (strlen (i386_comment_chars) + 1);
8283 t = n;
8284 for (s = i386_comment_chars; *s != '\0'; s++)
8285 if (*s != '/')
8286 *t++ = *s;
8287 *t = '\0';
8288 i386_comment_chars = n;
8290 #endif
8291 break;
8293 case OPTION_MARCH:
8294 arch = xstrdup (arg);
8297 if (*arch == '.')
8298 as_fatal (_("Invalid -march= option: `%s'"), arg);
8299 next = strchr (arch, '+');
8300 if (next)
8301 *next++ = '\0';
8302 for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
8304 if (strcmp (arch, cpu_arch [j].name) == 0)
8306 /* Processor. */
8307 if (! cpu_arch[j].flags.bitfield.cpui386)
8308 continue;
8310 cpu_arch_name = cpu_arch[j].name;
8311 cpu_sub_arch_name = NULL;
8312 cpu_arch_flags = cpu_arch[j].flags;
8313 cpu_arch_isa = cpu_arch[j].type;
8314 cpu_arch_isa_flags = cpu_arch[j].flags;
8315 if (!cpu_arch_tune_set)
8317 cpu_arch_tune = cpu_arch_isa;
8318 cpu_arch_tune_flags = cpu_arch_isa_flags;
8320 break;
8322 else if (*cpu_arch [j].name == '.'
8323 && strcmp (arch, cpu_arch [j].name + 1) == 0)
8325 /* ISA entension. */
8326 i386_cpu_flags flags;
8328 if (!cpu_arch[j].negated)
8329 flags = cpu_flags_or (cpu_arch_flags,
8330 cpu_arch[j].flags);
8331 else
8332 flags = cpu_flags_and_not (cpu_arch_flags,
8333 cpu_arch[j].flags);
8334 if (!cpu_flags_equal (&flags, &cpu_arch_flags))
8336 if (cpu_sub_arch_name)
8338 char *name = cpu_sub_arch_name;
8339 cpu_sub_arch_name = concat (name,
8340 cpu_arch[j].name,
8341 (const char *) NULL);
8342 free (name);
8344 else
8345 cpu_sub_arch_name = xstrdup (cpu_arch[j].name);
8346 cpu_arch_flags = flags;
8347 cpu_arch_isa_flags = flags;
8349 break;
8353 if (j >= ARRAY_SIZE (cpu_arch))
8354 as_fatal (_("Invalid -march= option: `%s'"), arg);
8356 arch = next;
8358 while (next != NULL );
8359 break;
8361 case OPTION_MTUNE:
8362 if (*arg == '.')
8363 as_fatal (_("Invalid -mtune= option: `%s'"), arg);
8364 for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
8366 if (strcmp (arg, cpu_arch [j].name) == 0)
8368 cpu_arch_tune_set = 1;
8369 cpu_arch_tune = cpu_arch [j].type;
8370 cpu_arch_tune_flags = cpu_arch[j].flags;
8371 break;
8374 if (j >= ARRAY_SIZE (cpu_arch))
8375 as_fatal (_("Invalid -mtune= option: `%s'"), arg);
8376 break;
8378 case OPTION_MMNEMONIC:
8379 if (strcasecmp (arg, "att") == 0)
8380 intel_mnemonic = 0;
8381 else if (strcasecmp (arg, "intel") == 0)
8382 intel_mnemonic = 1;
8383 else
8384 as_fatal (_("Invalid -mmnemonic= option: `%s'"), arg);
8385 break;
8387 case OPTION_MSYNTAX:
8388 if (strcasecmp (arg, "att") == 0)
8389 intel_syntax = 0;
8390 else if (strcasecmp (arg, "intel") == 0)
8391 intel_syntax = 1;
8392 else
8393 as_fatal (_("Invalid -msyntax= option: `%s'"), arg);
8394 break;
8396 case OPTION_MINDEX_REG:
8397 allow_index_reg = 1;
8398 break;
8400 case OPTION_MNAKED_REG:
8401 allow_naked_reg = 1;
8402 break;
8404 case OPTION_MOLD_GCC:
8405 old_gcc = 1;
8406 break;
8408 case OPTION_MSSE2AVX:
8409 sse2avx = 1;
8410 break;
8412 case OPTION_MSSE_CHECK:
8413 if (strcasecmp (arg, "error") == 0)
8414 sse_check = sse_check_error;
8415 else if (strcasecmp (arg, "warning") == 0)
8416 sse_check = sse_check_warning;
8417 else if (strcasecmp (arg, "none") == 0)
8418 sse_check = sse_check_none;
8419 else
8420 as_fatal (_("Invalid -msse-check= option: `%s'"), arg);
8421 break;
8423 case OPTION_MAVXSCALAR:
8424 if (strcasecmp (arg, "128") == 0)
8425 avxscalar = vex128;
8426 else if (strcasecmp (arg, "256") == 0)
8427 avxscalar = vex256;
8428 else
8429 as_fatal (_("Invalid -mavxscalar= option: `%s'"), arg);
8430 break;
8432 default:
8433 return 0;
8435 return 1;
8438 #define MESSAGE_TEMPLATE \
8441 static void
8442 show_arch (FILE *stream, int ext, int check)
8444 static char message[] = MESSAGE_TEMPLATE;
8445 char *start = message + 27;
8446 char *p;
8447 int size = sizeof (MESSAGE_TEMPLATE);
8448 int left;
8449 const char *name;
8450 int len;
8451 unsigned int j;
8453 p = start;
8454 left = size - (start - message);
8455 for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
8457 /* Should it be skipped? */
8458 if (cpu_arch [j].skip)
8459 continue;
8461 name = cpu_arch [j].name;
8462 len = cpu_arch [j].len;
8463 if (*name == '.')
8465 /* It is an extension. Skip if we aren't asked to show it. */
8466 if (ext)
8468 name++;
8469 len--;
8471 else
8472 continue;
8474 else if (ext)
8476 /* It is an processor. Skip if we show only extension. */
8477 continue;
8479 else if (check && ! cpu_arch[j].flags.bitfield.cpui386)
8481 /* It is an impossible processor - skip. */
8482 continue;
8485 /* Reserve 2 spaces for ", " or ",\0" */
8486 left -= len + 2;
8488 /* Check if there is any room. */
8489 if (left >= 0)
8491 if (p != start)
8493 *p++ = ',';
8494 *p++ = ' ';
8496 p = mempcpy (p, name, len);
8498 else
8500 /* Output the current message now and start a new one. */
8501 *p++ = ',';
8502 *p = '\0';
8503 fprintf (stream, "%s\n", message);
8504 p = start;
8505 left = size - (start - message) - len - 2;
8507 gas_assert (left >= 0);
8509 p = mempcpy (p, name, len);
8513 *p = '\0';
8514 fprintf (stream, "%s\n", message);
8517 void
8518 md_show_usage (FILE *stream)
8520 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8521 fprintf (stream, _("\
8522 -Q ignored\n\
8523 -V print assembler version number\n\
8524 -k ignored\n"));
8525 #endif
8526 fprintf (stream, _("\
8527 -n Do not optimize code alignment\n\
8528 -q quieten some warnings\n"));
8529 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8530 fprintf (stream, _("\
8531 -s ignored\n"));
8532 #endif
8533 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
8534 || defined (TE_PE) || defined (TE_PEP))
8535 fprintf (stream, _("\
8536 --32/--64/--x32 generate 32bit/64bit/x32 code\n"));
8537 #endif
8538 #ifdef SVR4_COMMENT_CHARS
8539 fprintf (stream, _("\
8540 --divide do not treat `/' as a comment character\n"));
8541 #else
8542 fprintf (stream, _("\
8543 --divide ignored\n"));
8544 #endif
8545 fprintf (stream, _("\
8546 -march=CPU[,+EXTENSION...]\n\
8547 generate code for CPU and EXTENSION, CPU is one of:\n"));
8548 show_arch (stream, 0, 1);
8549 fprintf (stream, _("\
8550 EXTENSION is combination of:\n"));
8551 show_arch (stream, 1, 0);
8552 fprintf (stream, _("\
8553 -mtune=CPU optimize for CPU, CPU is one of:\n"));
8554 show_arch (stream, 0, 0);
8555 fprintf (stream, _("\
8556 -msse2avx encode SSE instructions with VEX prefix\n"));
8557 fprintf (stream, _("\
8558 -msse-check=[none|error|warning]\n\
8559 check SSE instructions\n"));
8560 fprintf (stream, _("\
8561 -mavxscalar=[128|256] encode scalar AVX instructions with specific vector\n\
8562 length\n"));
8563 fprintf (stream, _("\
8564 -mmnemonic=[att|intel] use AT&T/Intel mnemonic\n"));
8565 fprintf (stream, _("\
8566 -msyntax=[att|intel] use AT&T/Intel syntax\n"));
8567 fprintf (stream, _("\
8568 -mindex-reg support pseudo index registers\n"));
8569 fprintf (stream, _("\
8570 -mnaked-reg don't require `%%' prefix for registers\n"));
8571 fprintf (stream, _("\
8572 -mold-gcc support old (<= 2.8.1) versions of gcc\n"));
8575 #if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \
8576 || defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
8577 || defined (TE_PE) || defined (TE_PEP) || defined (OBJ_MACH_O))
8579 /* Pick the target format to use. */
8581 const char *
8582 i386_target_format (void)
8584 if (!strncmp (default_arch, "x86_64", 6))
8586 update_code_flag (CODE_64BIT, 1);
8587 if (default_arch[6] == '\0')
8588 x86_elf_abi = X86_64_ABI;
8589 else
8590 x86_elf_abi = X86_64_X32_ABI;
8592 else if (!strcmp (default_arch, "i386"))
8593 update_code_flag (CODE_32BIT, 1);
8594 else
8595 as_fatal (_("Unknown architecture"));
8597 if (cpu_flags_all_zero (&cpu_arch_isa_flags))
8598 cpu_arch_isa_flags = cpu_arch[flag_code == CODE_64BIT].flags;
8599 if (cpu_flags_all_zero (&cpu_arch_tune_flags))
8600 cpu_arch_tune_flags = cpu_arch[flag_code == CODE_64BIT].flags;
8602 switch (OUTPUT_FLAVOR)
8604 #if defined (OBJ_MAYBE_AOUT) || defined (OBJ_AOUT)
8605 case bfd_target_aout_flavour:
8606 return AOUT_TARGET_FORMAT;
8607 #endif
8608 #if defined (OBJ_MAYBE_COFF) || defined (OBJ_COFF)
8609 # if defined (TE_PE) || defined (TE_PEP)
8610 case bfd_target_coff_flavour:
8611 return flag_code == CODE_64BIT ? "pe-x86-64" : "pe-i386";
8612 # elif defined (TE_GO32)
8613 case bfd_target_coff_flavour:
8614 return "coff-go32";
8615 # else
8616 case bfd_target_coff_flavour:
8617 return "coff-i386";
8618 # endif
8619 #endif
8620 #if defined (OBJ_MAYBE_ELF) || defined (OBJ_ELF)
8621 case bfd_target_elf_flavour:
8623 const char *format;
8625 switch (x86_elf_abi)
8627 default:
8628 format = ELF_TARGET_FORMAT;
8629 break;
8630 case X86_64_ABI:
8631 use_rela_relocations = 1;
8632 object_64bit = 1;
8633 format = ELF_TARGET_FORMAT64;
8634 break;
8635 case X86_64_X32_ABI:
8636 use_rela_relocations = 1;
8637 object_64bit = 1;
8638 disallow_64bit_reloc = 1;
8639 format = ELF_TARGET_FORMAT32;
8640 break;
8642 if (cpu_arch_isa == PROCESSOR_L1OM)
8644 if (x86_elf_abi != X86_64_ABI)
8645 as_fatal (_("Intel L1OM is 64bit only"));
8646 return ELF_TARGET_L1OM_FORMAT;
8648 else
8649 return format;
8651 #endif
8652 #if defined (OBJ_MACH_O)
8653 case bfd_target_mach_o_flavour:
8654 return flag_code == CODE_64BIT ? "mach-o-x86-64" : "mach-o-i386";
8655 #endif
8656 default:
8657 abort ();
8658 return NULL;
8662 #endif /* OBJ_MAYBE_ more than one */
8664 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF))
8665 void
8666 i386_elf_emit_arch_note (void)
8668 if (IS_ELF && cpu_arch_name != NULL)
8670 char *p;
8671 asection *seg = now_seg;
8672 subsegT subseg = now_subseg;
8673 Elf_Internal_Note i_note;
8674 Elf_External_Note e_note;
8675 asection *note_secp;
8676 int len;
8678 /* Create the .note section. */
8679 note_secp = subseg_new (".note", 0);
8680 bfd_set_section_flags (stdoutput,
8681 note_secp,
8682 SEC_HAS_CONTENTS | SEC_READONLY);
8684 /* Process the arch string. */
8685 len = strlen (cpu_arch_name);
8687 i_note.namesz = len + 1;
8688 i_note.descsz = 0;
8689 i_note.type = NT_ARCH;
8690 p = frag_more (sizeof (e_note.namesz));
8691 md_number_to_chars (p, (valueT) i_note.namesz, sizeof (e_note.namesz));
8692 p = frag_more (sizeof (e_note.descsz));
8693 md_number_to_chars (p, (valueT) i_note.descsz, sizeof (e_note.descsz));
8694 p = frag_more (sizeof (e_note.type));
8695 md_number_to_chars (p, (valueT) i_note.type, sizeof (e_note.type));
8696 p = frag_more (len + 1);
8697 strcpy (p, cpu_arch_name);
8699 frag_align (2, 0, 0);
8701 subseg_set (seg, subseg);
8704 #endif
8706 symbolS *
8707 md_undefined_symbol (name)
8708 char *name;
8710 if (name[0] == GLOBAL_OFFSET_TABLE_NAME[0]
8711 && name[1] == GLOBAL_OFFSET_TABLE_NAME[1]
8712 && name[2] == GLOBAL_OFFSET_TABLE_NAME[2]
8713 && strcmp (name, GLOBAL_OFFSET_TABLE_NAME) == 0)
8715 if (!GOT_symbol)
8717 if (symbol_find (name))
8718 as_bad (_("GOT already in symbol table"));
8719 GOT_symbol = symbol_new (name, undefined_section,
8720 (valueT) 0, &zero_address_frag);
8722 return GOT_symbol;
8724 return 0;
8727 /* Round up a section size to the appropriate boundary. */
8729 valueT
8730 md_section_align (segment, size)
8731 segT segment ATTRIBUTE_UNUSED;
8732 valueT size;
8734 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
8735 if (OUTPUT_FLAVOR == bfd_target_aout_flavour)
8737 /* For a.out, force the section size to be aligned. If we don't do
8738 this, BFD will align it for us, but it will not write out the
8739 final bytes of the section. This may be a bug in BFD, but it is
8740 easier to fix it here since that is how the other a.out targets
8741 work. */
8742 int align;
8744 align = bfd_get_section_alignment (stdoutput, segment);
8745 size = ((size + (1 << align) - 1) & ((valueT) -1 << align));
8747 #endif
8749 return size;
8752 /* On the i386, PC-relative offsets are relative to the start of the
8753 next instruction. That is, the address of the offset, plus its
8754 size, since the offset is always the last part of the insn. */
8756 long
8757 md_pcrel_from (fixS *fixP)
8759 return fixP->fx_size + fixP->fx_where + fixP->fx_frag->fr_address;
8762 #ifndef I386COFF
8764 static void
8765 s_bss (int ignore ATTRIBUTE_UNUSED)
8767 int temp;
8769 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8770 if (IS_ELF)
8771 obj_elf_section_change_hook ();
8772 #endif
8773 temp = get_absolute_expression ();
8774 subseg_set (bss_section, (subsegT) temp);
8775 demand_empty_rest_of_line ();
8778 #endif
8780 void
8781 i386_validate_fix (fixS *fixp)
8783 if (fixp->fx_subsy && fixp->fx_subsy == GOT_symbol)
8785 if (fixp->fx_r_type == BFD_RELOC_32_PCREL)
8787 if (!object_64bit)
8788 abort ();
8789 fixp->fx_r_type = BFD_RELOC_X86_64_GOTPCREL;
8791 else
8793 if (!object_64bit)
8794 fixp->fx_r_type = BFD_RELOC_386_GOTOFF;
8795 else
8796 fixp->fx_r_type = BFD_RELOC_X86_64_GOTOFF64;
8798 fixp->fx_subsy = 0;
8802 arelent *
8803 tc_gen_reloc (section, fixp)
8804 asection *section ATTRIBUTE_UNUSED;
8805 fixS *fixp;
8807 arelent *rel;
8808 bfd_reloc_code_real_type code;
8810 switch (fixp->fx_r_type)
8812 case BFD_RELOC_X86_64_PLT32:
8813 case BFD_RELOC_X86_64_GOT32:
8814 case BFD_RELOC_X86_64_GOTPCREL:
8815 case BFD_RELOC_386_PLT32:
8816 case BFD_RELOC_386_GOT32:
8817 case BFD_RELOC_386_GOTOFF:
8818 case BFD_RELOC_386_GOTPC:
8819 case BFD_RELOC_386_TLS_GD:
8820 case BFD_RELOC_386_TLS_LDM:
8821 case BFD_RELOC_386_TLS_LDO_32:
8822 case BFD_RELOC_386_TLS_IE_32:
8823 case BFD_RELOC_386_TLS_IE:
8824 case BFD_RELOC_386_TLS_GOTIE:
8825 case BFD_RELOC_386_TLS_LE_32:
8826 case BFD_RELOC_386_TLS_LE:
8827 case BFD_RELOC_386_TLS_GOTDESC:
8828 case BFD_RELOC_386_TLS_DESC_CALL:
8829 case BFD_RELOC_X86_64_TLSGD:
8830 case BFD_RELOC_X86_64_TLSLD:
8831 case BFD_RELOC_X86_64_DTPOFF32:
8832 case BFD_RELOC_X86_64_DTPOFF64:
8833 case BFD_RELOC_X86_64_GOTTPOFF:
8834 case BFD_RELOC_X86_64_TPOFF32:
8835 case BFD_RELOC_X86_64_TPOFF64:
8836 case BFD_RELOC_X86_64_GOTOFF64:
8837 case BFD_RELOC_X86_64_GOTPC32:
8838 case BFD_RELOC_X86_64_GOT64:
8839 case BFD_RELOC_X86_64_GOTPCREL64:
8840 case BFD_RELOC_X86_64_GOTPC64:
8841 case BFD_RELOC_X86_64_GOTPLT64:
8842 case BFD_RELOC_X86_64_PLTOFF64:
8843 case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
8844 case BFD_RELOC_X86_64_TLSDESC_CALL:
8845 case BFD_RELOC_RVA:
8846 case BFD_RELOC_VTABLE_ENTRY:
8847 case BFD_RELOC_VTABLE_INHERIT:
8848 #ifdef TE_PE
8849 case BFD_RELOC_32_SECREL:
8850 #endif
8851 code = fixp->fx_r_type;
8852 break;
8853 case BFD_RELOC_X86_64_32S:
8854 if (!fixp->fx_pcrel)
8856 /* Don't turn BFD_RELOC_X86_64_32S into BFD_RELOC_32. */
8857 code = fixp->fx_r_type;
8858 break;
8860 default:
8861 if (fixp->fx_pcrel)
8863 switch (fixp->fx_size)
8865 default:
8866 as_bad_where (fixp->fx_file, fixp->fx_line,
8867 _("can not do %d byte pc-relative relocation"),
8868 fixp->fx_size);
8869 code = BFD_RELOC_32_PCREL;
8870 break;
8871 case 1: code = BFD_RELOC_8_PCREL; break;
8872 case 2: code = BFD_RELOC_16_PCREL; break;
8873 case 4: code = BFD_RELOC_32_PCREL; break;
8874 #ifdef BFD64
8875 case 8: code = BFD_RELOC_64_PCREL; break;
8876 #endif
8879 else
8881 switch (fixp->fx_size)
8883 default:
8884 as_bad_where (fixp->fx_file, fixp->fx_line,
8885 _("can not do %d byte relocation"),
8886 fixp->fx_size);
8887 code = BFD_RELOC_32;
8888 break;
8889 case 1: code = BFD_RELOC_8; break;
8890 case 2: code = BFD_RELOC_16; break;
8891 case 4: code = BFD_RELOC_32; break;
8892 #ifdef BFD64
8893 case 8: code = BFD_RELOC_64; break;
8894 #endif
8897 break;
8900 if ((code == BFD_RELOC_32
8901 || code == BFD_RELOC_32_PCREL
8902 || code == BFD_RELOC_X86_64_32S)
8903 && GOT_symbol
8904 && fixp->fx_addsy == GOT_symbol)
8906 if (!object_64bit)
8907 code = BFD_RELOC_386_GOTPC;
8908 else
8909 code = BFD_RELOC_X86_64_GOTPC32;
8911 if ((code == BFD_RELOC_64 || code == BFD_RELOC_64_PCREL)
8912 && GOT_symbol
8913 && fixp->fx_addsy == GOT_symbol)
8915 code = BFD_RELOC_X86_64_GOTPC64;
8918 rel = (arelent *) xmalloc (sizeof (arelent));
8919 rel->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
8920 *rel->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
8922 rel->address = fixp->fx_frag->fr_address + fixp->fx_where;
8924 if (!use_rela_relocations)
8926 /* HACK: Since i386 ELF uses Rel instead of Rela, encode the
8927 vtable entry to be used in the relocation's section offset. */
8928 if (fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
8929 rel->address = fixp->fx_offset;
8930 #if defined (OBJ_COFF) && defined (TE_PE)
8931 else if (fixp->fx_addsy && S_IS_WEAK (fixp->fx_addsy))
8932 rel->addend = fixp->fx_addnumber - (S_GET_VALUE (fixp->fx_addsy) * 2);
8933 else
8934 #endif
8935 rel->addend = 0;
8937 /* Use the rela in 64bit mode. */
8938 else
8940 if (disallow_64bit_reloc)
8941 switch (code)
8943 case BFD_RELOC_64:
8944 case BFD_RELOC_X86_64_DTPOFF64:
8945 case BFD_RELOC_X86_64_TPOFF64:
8946 case BFD_RELOC_64_PCREL:
8947 case BFD_RELOC_X86_64_GOTOFF64:
8948 case BFD_RELOC_X86_64_GOT64:
8949 case BFD_RELOC_X86_64_GOTPCREL64:
8950 case BFD_RELOC_X86_64_GOTPC64:
8951 case BFD_RELOC_X86_64_GOTPLT64:
8952 case BFD_RELOC_X86_64_PLTOFF64:
8953 as_bad_where (fixp->fx_file, fixp->fx_line,
8954 _("cannot represent relocation type %s in x32 mode"),
8955 bfd_get_reloc_code_name (code));
8956 break;
8957 default:
8958 break;
8961 if (!fixp->fx_pcrel)
8962 rel->addend = fixp->fx_offset;
8963 else
8964 switch (code)
8966 case BFD_RELOC_X86_64_PLT32:
8967 case BFD_RELOC_X86_64_GOT32:
8968 case BFD_RELOC_X86_64_GOTPCREL:
8969 case BFD_RELOC_X86_64_TLSGD:
8970 case BFD_RELOC_X86_64_TLSLD:
8971 case BFD_RELOC_X86_64_GOTTPOFF:
8972 case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
8973 case BFD_RELOC_X86_64_TLSDESC_CALL:
8974 rel->addend = fixp->fx_offset - fixp->fx_size;
8975 break;
8976 default:
8977 rel->addend = (section->vma
8978 - fixp->fx_size
8979 + fixp->fx_addnumber
8980 + md_pcrel_from (fixp));
8981 break;
8985 rel->howto = bfd_reloc_type_lookup (stdoutput, code);
8986 if (rel->howto == NULL)
8988 as_bad_where (fixp->fx_file, fixp->fx_line,
8989 _("cannot represent relocation type %s"),
8990 bfd_get_reloc_code_name (code));
8991 /* Set howto to a garbage value so that we can keep going. */
8992 rel->howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_32);
8993 gas_assert (rel->howto != NULL);
8996 return rel;
8999 #include "tc-i386-intel.c"
9001 void
9002 tc_x86_parse_to_dw2regnum (expressionS *exp)
9004 int saved_naked_reg;
9005 char saved_register_dot;
9007 saved_naked_reg = allow_naked_reg;
9008 allow_naked_reg = 1;
9009 saved_register_dot = register_chars['.'];
9010 register_chars['.'] = '.';
9011 allow_pseudo_reg = 1;
9012 expression_and_evaluate (exp);
9013 allow_pseudo_reg = 0;
9014 register_chars['.'] = saved_register_dot;
9015 allow_naked_reg = saved_naked_reg;
9017 if (exp->X_op == O_register && exp->X_add_number >= 0)
9019 if ((addressT) exp->X_add_number < i386_regtab_size)
9021 exp->X_op = O_constant;
9022 exp->X_add_number = i386_regtab[exp->X_add_number]
9023 .dw2_regnum[flag_code >> 1];
9025 else
9026 exp->X_op = O_illegal;
9030 void
9031 tc_x86_frame_initial_instructions (void)
9033 static unsigned int sp_regno[2];
9035 if (!sp_regno[flag_code >> 1])
9037 char *saved_input = input_line_pointer;
9038 char sp[][4] = {"esp", "rsp"};
9039 expressionS exp;
9041 input_line_pointer = sp[flag_code >> 1];
9042 tc_x86_parse_to_dw2regnum (&exp);
9043 gas_assert (exp.X_op == O_constant);
9044 sp_regno[flag_code >> 1] = exp.X_add_number;
9045 input_line_pointer = saved_input;
9048 cfi_add_CFA_def_cfa (sp_regno[flag_code >> 1], -x86_cie_data_alignment);
9049 cfi_add_CFA_offset (x86_dwarf2_return_column, x86_cie_data_alignment);
9053 i386_elf_section_type (const char *str, size_t len)
9055 if (flag_code == CODE_64BIT
9056 && len == sizeof ("unwind") - 1
9057 && strncmp (str, "unwind", 6) == 0)
9058 return SHT_X86_64_UNWIND;
9060 return -1;
9063 #ifdef TE_SOLARIS
9064 void
9065 i386_solaris_fix_up_eh_frame (segT sec)
9067 if (flag_code == CODE_64BIT)
9068 elf_section_type (sec) = SHT_X86_64_UNWIND;
9070 #endif
9072 #ifdef TE_PE
9073 void
9074 tc_pe_dwarf2_emit_offset (symbolS *symbol, unsigned int size)
9076 expressionS exp;
9078 exp.X_op = O_secrel;
9079 exp.X_add_symbol = symbol;
9080 exp.X_add_number = 0;
9081 emit_expr (&exp, size);
9083 #endif
9085 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
9086 /* For ELF on x86-64, add support for SHF_X86_64_LARGE. */
9088 bfd_vma
9089 x86_64_section_letter (int letter, char **ptr_msg)
9091 if (flag_code == CODE_64BIT)
9093 if (letter == 'l')
9094 return SHF_X86_64_LARGE;
9096 *ptr_msg = _("bad .section directive: want a,l,w,x,M,S,G,T in string");
9098 else
9099 *ptr_msg = _("bad .section directive: want a,w,x,M,S,G,T in string");
9100 return -1;
9103 bfd_vma
9104 x86_64_section_word (char *str, size_t len)
9106 if (len == 5 && flag_code == CODE_64BIT && CONST_STRNEQ (str, "large"))
9107 return SHF_X86_64_LARGE;
9109 return -1;
9112 static void
9113 handle_large_common (int small ATTRIBUTE_UNUSED)
9115 if (flag_code != CODE_64BIT)
9117 s_comm_internal (0, elf_common_parse);
9118 as_warn (_(".largecomm supported only in 64bit mode, producing .comm"));
9120 else
9122 static segT lbss_section;
9123 asection *saved_com_section_ptr = elf_com_section_ptr;
9124 asection *saved_bss_section = bss_section;
9126 if (lbss_section == NULL)
9128 flagword applicable;
9129 segT seg = now_seg;
9130 subsegT subseg = now_subseg;
9132 /* The .lbss section is for local .largecomm symbols. */
9133 lbss_section = subseg_new (".lbss", 0);
9134 applicable = bfd_applicable_section_flags (stdoutput);
9135 bfd_set_section_flags (stdoutput, lbss_section,
9136 applicable & SEC_ALLOC);
9137 seg_info (lbss_section)->bss = 1;
9139 subseg_set (seg, subseg);
9142 elf_com_section_ptr = &_bfd_elf_large_com_section;
9143 bss_section = lbss_section;
9145 s_comm_internal (0, elf_common_parse);
9147 elf_com_section_ptr = saved_com_section_ptr;
9148 bss_section = saved_bss_section;
9151 #endif /* OBJ_ELF || OBJ_MAYBE_ELF */