Add docs and arch tests to BMI.
[binutils.git] / gas / config / tc-i386.c
blob6f30dda133b5b1f4e69970b47c0bc7d7f7bbf4fb
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 int use_rela_relocations = 0;
394 /* The ELF ABI to use. */
395 enum x86_elf_abi
397 I386_ABI,
398 X86_64_LP64_ABI,
399 X86_64_ILP32_ABI
402 static enum x86_elf_abi x86_elf_abi = I386_ABI;
404 /* The names used to print error messages. */
405 static const char *flag_code_names[] =
407 "32",
408 "16",
409 "64"
412 /* 1 for intel syntax,
413 0 if att syntax. */
414 static int intel_syntax = 0;
416 /* 1 for intel mnemonic,
417 0 if att mnemonic. */
418 static int intel_mnemonic = !SYSV386_COMPAT;
420 /* 1 if support old (<= 2.8.1) versions of gcc. */
421 static int old_gcc = OLDGCC_COMPAT;
423 /* 1 if pseudo registers are permitted. */
424 static int allow_pseudo_reg = 0;
426 /* 1 if register prefix % not required. */
427 static int allow_naked_reg = 0;
429 /* 1 if pseudo index register, eiz/riz, is allowed . */
430 static int allow_index_reg = 0;
432 static enum
434 sse_check_none = 0,
435 sse_check_warning,
436 sse_check_error
438 sse_check;
440 /* Register prefix used for error message. */
441 static const char *register_prefix = "%";
443 /* Used in 16 bit gcc mode to add an l suffix to call, ret, enter,
444 leave, push, and pop instructions so that gcc has the same stack
445 frame as in 32 bit mode. */
446 static char stackop_size = '\0';
448 /* Non-zero to optimize code alignment. */
449 int optimize_align_code = 1;
451 /* Non-zero to quieten some warnings. */
452 static int quiet_warnings = 0;
454 /* CPU name. */
455 static const char *cpu_arch_name = NULL;
456 static char *cpu_sub_arch_name = NULL;
458 /* CPU feature flags. */
459 static i386_cpu_flags cpu_arch_flags = CPU_UNKNOWN_FLAGS;
461 /* If we have selected a cpu we are generating instructions for. */
462 static int cpu_arch_tune_set = 0;
464 /* Cpu we are generating instructions for. */
465 enum processor_type cpu_arch_tune = PROCESSOR_UNKNOWN;
467 /* CPU feature flags of cpu we are generating instructions for. */
468 static i386_cpu_flags cpu_arch_tune_flags;
470 /* CPU instruction set architecture used. */
471 enum processor_type cpu_arch_isa = PROCESSOR_UNKNOWN;
473 /* CPU feature flags of instruction set architecture used. */
474 i386_cpu_flags cpu_arch_isa_flags;
476 /* If set, conditional jumps are not automatically promoted to handle
477 larger than a byte offset. */
478 static unsigned int no_cond_jump_promotion = 0;
480 /* Encode SSE instructions with VEX prefix. */
481 static unsigned int sse2avx;
483 /* Encode scalar AVX instructions with specific vector length. */
484 static enum
486 vex128 = 0,
487 vex256
488 } avxscalar;
490 /* Pre-defined "_GLOBAL_OFFSET_TABLE_". */
491 static symbolS *GOT_symbol;
493 /* The dwarf2 return column, adjusted for 32 or 64 bit. */
494 unsigned int x86_dwarf2_return_column;
496 /* The dwarf2 data alignment, adjusted for 32 or 64 bit. */
497 int x86_cie_data_alignment;
499 /* Interface to relax_segment.
500 There are 3 major relax states for 386 jump insns because the
501 different types of jumps add different sizes to frags when we're
502 figuring out what sort of jump to choose to reach a given label. */
504 /* Types. */
505 #define UNCOND_JUMP 0
506 #define COND_JUMP 1
507 #define COND_JUMP86 2
509 /* Sizes. */
510 #define CODE16 1
511 #define SMALL 0
512 #define SMALL16 (SMALL | CODE16)
513 #define BIG 2
514 #define BIG16 (BIG | CODE16)
516 #ifndef INLINE
517 #ifdef __GNUC__
518 #define INLINE __inline__
519 #else
520 #define INLINE
521 #endif
522 #endif
524 #define ENCODE_RELAX_STATE(type, size) \
525 ((relax_substateT) (((type) << 2) | (size)))
526 #define TYPE_FROM_RELAX_STATE(s) \
527 ((s) >> 2)
528 #define DISP_SIZE_FROM_RELAX_STATE(s) \
529 ((((s) & 3) == BIG ? 4 : (((s) & 3) == BIG16 ? 2 : 1)))
531 /* This table is used by relax_frag to promote short jumps to long
532 ones where necessary. SMALL (short) jumps may be promoted to BIG
533 (32 bit long) ones, and SMALL16 jumps to BIG16 (16 bit long). We
534 don't allow a short jump in a 32 bit code segment to be promoted to
535 a 16 bit offset jump because it's slower (requires data size
536 prefix), and doesn't work, unless the destination is in the bottom
537 64k of the code segment (The top 16 bits of eip are zeroed). */
539 const relax_typeS md_relax_table[] =
541 /* The fields are:
542 1) most positive reach of this state,
543 2) most negative reach of this state,
544 3) how many bytes this mode will have in the variable part of the frag
545 4) which index into the table to try if we can't fit into this one. */
547 /* UNCOND_JUMP states. */
548 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (UNCOND_JUMP, BIG)},
549 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (UNCOND_JUMP, BIG16)},
550 /* dword jmp adds 4 bytes to frag:
551 0 extra opcode bytes, 4 displacement bytes. */
552 {0, 0, 4, 0},
553 /* word jmp adds 2 byte2 to frag:
554 0 extra opcode bytes, 2 displacement bytes. */
555 {0, 0, 2, 0},
557 /* COND_JUMP states. */
558 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP, BIG)},
559 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP, BIG16)},
560 /* dword conditionals adds 5 bytes to frag:
561 1 extra opcode byte, 4 displacement bytes. */
562 {0, 0, 5, 0},
563 /* word conditionals add 3 bytes to frag:
564 1 extra opcode byte, 2 displacement bytes. */
565 {0, 0, 3, 0},
567 /* COND_JUMP86 states. */
568 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP86, BIG)},
569 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP86, BIG16)},
570 /* dword conditionals adds 5 bytes to frag:
571 1 extra opcode byte, 4 displacement bytes. */
572 {0, 0, 5, 0},
573 /* word conditionals add 4 bytes to frag:
574 1 displacement byte and a 3 byte long branch insn. */
575 {0, 0, 4, 0}
578 static const arch_entry cpu_arch[] =
580 /* Do not replace the first two entries - i386_target_format()
581 relies on them being there in this order. */
582 { STRING_COMMA_LEN ("generic32"), PROCESSOR_GENERIC32,
583 CPU_GENERIC32_FLAGS, 0, 0 },
584 { STRING_COMMA_LEN ("generic64"), PROCESSOR_GENERIC64,
585 CPU_GENERIC64_FLAGS, 0, 0 },
586 { STRING_COMMA_LEN ("i8086"), PROCESSOR_UNKNOWN,
587 CPU_NONE_FLAGS, 0, 0 },
588 { STRING_COMMA_LEN ("i186"), PROCESSOR_UNKNOWN,
589 CPU_I186_FLAGS, 0, 0 },
590 { STRING_COMMA_LEN ("i286"), PROCESSOR_UNKNOWN,
591 CPU_I286_FLAGS, 0, 0 },
592 { STRING_COMMA_LEN ("i386"), PROCESSOR_I386,
593 CPU_I386_FLAGS, 0, 0 },
594 { STRING_COMMA_LEN ("i486"), PROCESSOR_I486,
595 CPU_I486_FLAGS, 0, 0 },
596 { STRING_COMMA_LEN ("i586"), PROCESSOR_PENTIUM,
597 CPU_I586_FLAGS, 0, 0 },
598 { STRING_COMMA_LEN ("i686"), PROCESSOR_PENTIUMPRO,
599 CPU_I686_FLAGS, 0, 0 },
600 { STRING_COMMA_LEN ("pentium"), PROCESSOR_PENTIUM,
601 CPU_I586_FLAGS, 0, 0 },
602 { STRING_COMMA_LEN ("pentiumpro"), PROCESSOR_PENTIUMPRO,
603 CPU_PENTIUMPRO_FLAGS, 0, 0 },
604 { STRING_COMMA_LEN ("pentiumii"), PROCESSOR_PENTIUMPRO,
605 CPU_P2_FLAGS, 0, 0 },
606 { STRING_COMMA_LEN ("pentiumiii"),PROCESSOR_PENTIUMPRO,
607 CPU_P3_FLAGS, 0, 0 },
608 { STRING_COMMA_LEN ("pentium4"), PROCESSOR_PENTIUM4,
609 CPU_P4_FLAGS, 0, 0 },
610 { STRING_COMMA_LEN ("prescott"), PROCESSOR_NOCONA,
611 CPU_CORE_FLAGS, 0, 0 },
612 { STRING_COMMA_LEN ("nocona"), PROCESSOR_NOCONA,
613 CPU_NOCONA_FLAGS, 0, 0 },
614 { STRING_COMMA_LEN ("yonah"), PROCESSOR_CORE,
615 CPU_CORE_FLAGS, 1, 0 },
616 { STRING_COMMA_LEN ("core"), PROCESSOR_CORE,
617 CPU_CORE_FLAGS, 0, 0 },
618 { STRING_COMMA_LEN ("merom"), PROCESSOR_CORE2,
619 CPU_CORE2_FLAGS, 1, 0 },
620 { STRING_COMMA_LEN ("core2"), PROCESSOR_CORE2,
621 CPU_CORE2_FLAGS, 0, 0 },
622 { STRING_COMMA_LEN ("corei7"), PROCESSOR_COREI7,
623 CPU_COREI7_FLAGS, 0, 0 },
624 { STRING_COMMA_LEN ("l1om"), PROCESSOR_L1OM,
625 CPU_L1OM_FLAGS, 0, 0 },
626 { STRING_COMMA_LEN ("k6"), PROCESSOR_K6,
627 CPU_K6_FLAGS, 0, 0 },
628 { STRING_COMMA_LEN ("k6_2"), PROCESSOR_K6,
629 CPU_K6_2_FLAGS, 0, 0 },
630 { STRING_COMMA_LEN ("athlon"), PROCESSOR_ATHLON,
631 CPU_ATHLON_FLAGS, 0, 0 },
632 { STRING_COMMA_LEN ("sledgehammer"), PROCESSOR_K8,
633 CPU_K8_FLAGS, 1, 0 },
634 { STRING_COMMA_LEN ("opteron"), PROCESSOR_K8,
635 CPU_K8_FLAGS, 0, 0 },
636 { STRING_COMMA_LEN ("k8"), PROCESSOR_K8,
637 CPU_K8_FLAGS, 0, 0 },
638 { STRING_COMMA_LEN ("amdfam10"), PROCESSOR_AMDFAM10,
639 CPU_AMDFAM10_FLAGS, 0, 0 },
640 { STRING_COMMA_LEN ("bdver1"), PROCESSOR_BDVER1,
641 CPU_BDVER1_FLAGS, 0, 0 },
642 { STRING_COMMA_LEN (".8087"), PROCESSOR_UNKNOWN,
643 CPU_8087_FLAGS, 0, 0 },
644 { STRING_COMMA_LEN (".287"), PROCESSOR_UNKNOWN,
645 CPU_287_FLAGS, 0, 0 },
646 { STRING_COMMA_LEN (".387"), PROCESSOR_UNKNOWN,
647 CPU_387_FLAGS, 0, 0 },
648 { STRING_COMMA_LEN (".no87"), PROCESSOR_UNKNOWN,
649 CPU_ANY87_FLAGS, 0, 1 },
650 { STRING_COMMA_LEN (".mmx"), PROCESSOR_UNKNOWN,
651 CPU_MMX_FLAGS, 0, 0 },
652 { STRING_COMMA_LEN (".nommx"), PROCESSOR_UNKNOWN,
653 CPU_3DNOWA_FLAGS, 0, 1 },
654 { STRING_COMMA_LEN (".sse"), PROCESSOR_UNKNOWN,
655 CPU_SSE_FLAGS, 0, 0 },
656 { STRING_COMMA_LEN (".sse2"), PROCESSOR_UNKNOWN,
657 CPU_SSE2_FLAGS, 0, 0 },
658 { STRING_COMMA_LEN (".sse3"), PROCESSOR_UNKNOWN,
659 CPU_SSE3_FLAGS, 0, 0 },
660 { STRING_COMMA_LEN (".ssse3"), PROCESSOR_UNKNOWN,
661 CPU_SSSE3_FLAGS, 0, 0 },
662 { STRING_COMMA_LEN (".sse4.1"), PROCESSOR_UNKNOWN,
663 CPU_SSE4_1_FLAGS, 0, 0 },
664 { STRING_COMMA_LEN (".sse4.2"), PROCESSOR_UNKNOWN,
665 CPU_SSE4_2_FLAGS, 0, 0 },
666 { STRING_COMMA_LEN (".sse4"), PROCESSOR_UNKNOWN,
667 CPU_SSE4_2_FLAGS, 0, 0 },
668 { STRING_COMMA_LEN (".nosse"), PROCESSOR_UNKNOWN,
669 CPU_ANY_SSE_FLAGS, 0, 1 },
670 { STRING_COMMA_LEN (".avx"), PROCESSOR_UNKNOWN,
671 CPU_AVX_FLAGS, 0, 0 },
672 { STRING_COMMA_LEN (".noavx"), PROCESSOR_UNKNOWN,
673 CPU_ANY_AVX_FLAGS, 0, 1 },
674 { STRING_COMMA_LEN (".vmx"), PROCESSOR_UNKNOWN,
675 CPU_VMX_FLAGS, 0, 0 },
676 { STRING_COMMA_LEN (".smx"), PROCESSOR_UNKNOWN,
677 CPU_SMX_FLAGS, 0, 0 },
678 { STRING_COMMA_LEN (".xsave"), PROCESSOR_UNKNOWN,
679 CPU_XSAVE_FLAGS, 0, 0 },
680 { STRING_COMMA_LEN (".xsaveopt"), PROCESSOR_UNKNOWN,
681 CPU_XSAVEOPT_FLAGS, 0, 0 },
682 { STRING_COMMA_LEN (".aes"), PROCESSOR_UNKNOWN,
683 CPU_AES_FLAGS, 0, 0 },
684 { STRING_COMMA_LEN (".pclmul"), PROCESSOR_UNKNOWN,
685 CPU_PCLMUL_FLAGS, 0, 0 },
686 { STRING_COMMA_LEN (".clmul"), PROCESSOR_UNKNOWN,
687 CPU_PCLMUL_FLAGS, 1, 0 },
688 { STRING_COMMA_LEN (".fsgsbase"), PROCESSOR_UNKNOWN,
689 CPU_FSGSBASE_FLAGS, 0, 0 },
690 { STRING_COMMA_LEN (".rdrnd"), PROCESSOR_UNKNOWN,
691 CPU_RDRND_FLAGS, 0, 0 },
692 { STRING_COMMA_LEN (".f16c"), PROCESSOR_UNKNOWN,
693 CPU_F16C_FLAGS, 0, 0 },
694 { STRING_COMMA_LEN (".fma"), PROCESSOR_UNKNOWN,
695 CPU_FMA_FLAGS, 0, 0 },
696 { STRING_COMMA_LEN (".fma4"), PROCESSOR_UNKNOWN,
697 CPU_FMA4_FLAGS, 0, 0 },
698 { STRING_COMMA_LEN (".xop"), PROCESSOR_UNKNOWN,
699 CPU_XOP_FLAGS, 0, 0 },
700 { STRING_COMMA_LEN (".lwp"), PROCESSOR_UNKNOWN,
701 CPU_LWP_FLAGS, 0, 0 },
702 { STRING_COMMA_LEN (".movbe"), PROCESSOR_UNKNOWN,
703 CPU_MOVBE_FLAGS, 0, 0 },
704 { STRING_COMMA_LEN (".ept"), PROCESSOR_UNKNOWN,
705 CPU_EPT_FLAGS, 0, 0 },
706 { STRING_COMMA_LEN (".clflush"), PROCESSOR_UNKNOWN,
707 CPU_CLFLUSH_FLAGS, 0, 0 },
708 { STRING_COMMA_LEN (".nop"), PROCESSOR_UNKNOWN,
709 CPU_NOP_FLAGS, 0, 0 },
710 { STRING_COMMA_LEN (".syscall"), PROCESSOR_UNKNOWN,
711 CPU_SYSCALL_FLAGS, 0, 0 },
712 { STRING_COMMA_LEN (".rdtscp"), PROCESSOR_UNKNOWN,
713 CPU_RDTSCP_FLAGS, 0, 0 },
714 { STRING_COMMA_LEN (".3dnow"), PROCESSOR_UNKNOWN,
715 CPU_3DNOW_FLAGS, 0, 0 },
716 { STRING_COMMA_LEN (".3dnowa"), PROCESSOR_UNKNOWN,
717 CPU_3DNOWA_FLAGS, 0, 0 },
718 { STRING_COMMA_LEN (".padlock"), PROCESSOR_UNKNOWN,
719 CPU_PADLOCK_FLAGS, 0, 0 },
720 { STRING_COMMA_LEN (".pacifica"), PROCESSOR_UNKNOWN,
721 CPU_SVME_FLAGS, 1, 0 },
722 { STRING_COMMA_LEN (".svme"), PROCESSOR_UNKNOWN,
723 CPU_SVME_FLAGS, 0, 0 },
724 { STRING_COMMA_LEN (".sse4a"), PROCESSOR_UNKNOWN,
725 CPU_SSE4A_FLAGS, 0, 0 },
726 { STRING_COMMA_LEN (".abm"), PROCESSOR_UNKNOWN,
727 CPU_ABM_FLAGS, 0, 0 },
728 { STRING_COMMA_LEN (".bmi"), PROCESSOR_UNKNOWN,
729 CPU_BMI_FLAGS, 0, 0 },
732 #ifdef I386COFF
733 /* Like s_lcomm_internal in gas/read.c but the alignment string
734 is allowed to be optional. */
736 static symbolS *
737 pe_lcomm_internal (int needs_align, symbolS *symbolP, addressT size)
739 addressT align = 0;
741 SKIP_WHITESPACE ();
743 if (needs_align
744 && *input_line_pointer == ',')
746 align = parse_align (needs_align - 1);
748 if (align == (addressT) -1)
749 return NULL;
751 else
753 if (size >= 8)
754 align = 3;
755 else if (size >= 4)
756 align = 2;
757 else if (size >= 2)
758 align = 1;
759 else
760 align = 0;
763 bss_alloc (symbolP, size, align);
764 return symbolP;
767 static void
768 pe_lcomm (int needs_align)
770 s_comm_internal (needs_align * 2, pe_lcomm_internal);
772 #endif
774 const pseudo_typeS md_pseudo_table[] =
776 #if !defined(OBJ_AOUT) && !defined(USE_ALIGN_PTWO)
777 {"align", s_align_bytes, 0},
778 #else
779 {"align", s_align_ptwo, 0},
780 #endif
781 {"arch", set_cpu_arch, 0},
782 #ifndef I386COFF
783 {"bss", s_bss, 0},
784 #else
785 {"lcomm", pe_lcomm, 1},
786 #endif
787 {"ffloat", float_cons, 'f'},
788 {"dfloat", float_cons, 'd'},
789 {"tfloat", float_cons, 'x'},
790 {"value", cons, 2},
791 {"slong", signed_cons, 4},
792 {"noopt", s_ignore, 0},
793 {"optim", s_ignore, 0},
794 {"code16gcc", set_16bit_gcc_code_flag, CODE_16BIT},
795 {"code16", set_code_flag, CODE_16BIT},
796 {"code32", set_code_flag, CODE_32BIT},
797 {"code64", set_code_flag, CODE_64BIT},
798 {"intel_syntax", set_intel_syntax, 1},
799 {"att_syntax", set_intel_syntax, 0},
800 {"intel_mnemonic", set_intel_mnemonic, 1},
801 {"att_mnemonic", set_intel_mnemonic, 0},
802 {"allow_index_reg", set_allow_index_reg, 1},
803 {"disallow_index_reg", set_allow_index_reg, 0},
804 {"sse_check", set_sse_check, 0},
805 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
806 {"largecomm", handle_large_common, 0},
807 #else
808 {"file", (void (*) (int)) dwarf2_directive_file, 0},
809 {"loc", dwarf2_directive_loc, 0},
810 {"loc_mark_labels", dwarf2_directive_loc_mark_labels, 0},
811 #endif
812 #ifdef TE_PE
813 {"secrel32", pe_directive_secrel, 0},
814 #endif
815 {0, 0, 0}
818 /* For interface with expression (). */
819 extern char *input_line_pointer;
821 /* Hash table for instruction mnemonic lookup. */
822 static struct hash_control *op_hash;
824 /* Hash table for register lookup. */
825 static struct hash_control *reg_hash;
827 void
828 i386_align_code (fragS *fragP, int count)
830 /* Various efficient no-op patterns for aligning code labels.
831 Note: Don't try to assemble the instructions in the comments.
832 0L and 0w are not legal. */
833 static const char f32_1[] =
834 {0x90}; /* nop */
835 static const char f32_2[] =
836 {0x66,0x90}; /* xchg %ax,%ax */
837 static const char f32_3[] =
838 {0x8d,0x76,0x00}; /* leal 0(%esi),%esi */
839 static const char f32_4[] =
840 {0x8d,0x74,0x26,0x00}; /* leal 0(%esi,1),%esi */
841 static const char f32_5[] =
842 {0x90, /* nop */
843 0x8d,0x74,0x26,0x00}; /* leal 0(%esi,1),%esi */
844 static const char f32_6[] =
845 {0x8d,0xb6,0x00,0x00,0x00,0x00}; /* leal 0L(%esi),%esi */
846 static const char f32_7[] =
847 {0x8d,0xb4,0x26,0x00,0x00,0x00,0x00}; /* leal 0L(%esi,1),%esi */
848 static const char f32_8[] =
849 {0x90, /* nop */
850 0x8d,0xb4,0x26,0x00,0x00,0x00,0x00}; /* leal 0L(%esi,1),%esi */
851 static const char f32_9[] =
852 {0x89,0xf6, /* movl %esi,%esi */
853 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
854 static const char f32_10[] =
855 {0x8d,0x76,0x00, /* leal 0(%esi),%esi */
856 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
857 static const char f32_11[] =
858 {0x8d,0x74,0x26,0x00, /* leal 0(%esi,1),%esi */
859 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
860 static const char f32_12[] =
861 {0x8d,0xb6,0x00,0x00,0x00,0x00, /* leal 0L(%esi),%esi */
862 0x8d,0xbf,0x00,0x00,0x00,0x00}; /* leal 0L(%edi),%edi */
863 static const char f32_13[] =
864 {0x8d,0xb6,0x00,0x00,0x00,0x00, /* leal 0L(%esi),%esi */
865 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
866 static const char f32_14[] =
867 {0x8d,0xb4,0x26,0x00,0x00,0x00,0x00, /* leal 0L(%esi,1),%esi */
868 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
869 static const char f16_3[] =
870 {0x8d,0x74,0x00}; /* lea 0(%esi),%esi */
871 static const char f16_4[] =
872 {0x8d,0xb4,0x00,0x00}; /* lea 0w(%si),%si */
873 static const char f16_5[] =
874 {0x90, /* nop */
875 0x8d,0xb4,0x00,0x00}; /* lea 0w(%si),%si */
876 static const char f16_6[] =
877 {0x89,0xf6, /* mov %si,%si */
878 0x8d,0xbd,0x00,0x00}; /* lea 0w(%di),%di */
879 static const char f16_7[] =
880 {0x8d,0x74,0x00, /* lea 0(%si),%si */
881 0x8d,0xbd,0x00,0x00}; /* lea 0w(%di),%di */
882 static const char f16_8[] =
883 {0x8d,0xb4,0x00,0x00, /* lea 0w(%si),%si */
884 0x8d,0xbd,0x00,0x00}; /* lea 0w(%di),%di */
885 static const char jump_31[] =
886 {0xeb,0x1d,0x90,0x90,0x90,0x90,0x90, /* jmp .+31; lotsa nops */
887 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
888 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
889 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90};
890 static const char *const f32_patt[] = {
891 f32_1, f32_2, f32_3, f32_4, f32_5, f32_6, f32_7, f32_8,
892 f32_9, f32_10, f32_11, f32_12, f32_13, f32_14
894 static const char *const f16_patt[] = {
895 f32_1, f32_2, f16_3, f16_4, f16_5, f16_6, f16_7, f16_8
897 /* nopl (%[re]ax) */
898 static const char alt_3[] =
899 {0x0f,0x1f,0x00};
900 /* nopl 0(%[re]ax) */
901 static const char alt_4[] =
902 {0x0f,0x1f,0x40,0x00};
903 /* nopl 0(%[re]ax,%[re]ax,1) */
904 static const char alt_5[] =
905 {0x0f,0x1f,0x44,0x00,0x00};
906 /* nopw 0(%[re]ax,%[re]ax,1) */
907 static const char alt_6[] =
908 {0x66,0x0f,0x1f,0x44,0x00,0x00};
909 /* nopl 0L(%[re]ax) */
910 static const char alt_7[] =
911 {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
912 /* nopl 0L(%[re]ax,%[re]ax,1) */
913 static const char alt_8[] =
914 {0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
915 /* nopw 0L(%[re]ax,%[re]ax,1) */
916 static const char alt_9[] =
917 {0x66,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
918 /* nopw %cs:0L(%[re]ax,%[re]ax,1) */
919 static const char alt_10[] =
920 {0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
921 /* data16
922 nopw %cs:0L(%[re]ax,%[re]ax,1) */
923 static const char alt_long_11[] =
924 {0x66,
925 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
926 /* data16
927 data16
928 nopw %cs:0L(%[re]ax,%[re]ax,1) */
929 static const char alt_long_12[] =
930 {0x66,
931 0x66,
932 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
933 /* data16
934 data16
935 data16
936 nopw %cs:0L(%[re]ax,%[re]ax,1) */
937 static const char alt_long_13[] =
938 {0x66,
939 0x66,
940 0x66,
941 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
942 /* data16
943 data16
944 data16
945 data16
946 nopw %cs:0L(%[re]ax,%[re]ax,1) */
947 static const char alt_long_14[] =
948 {0x66,
949 0x66,
950 0x66,
951 0x66,
952 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
953 /* data16
954 data16
955 data16
956 data16
957 data16
958 nopw %cs:0L(%[re]ax,%[re]ax,1) */
959 static const char alt_long_15[] =
960 {0x66,
961 0x66,
962 0x66,
963 0x66,
964 0x66,
965 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
966 /* nopl 0(%[re]ax,%[re]ax,1)
967 nopw 0(%[re]ax,%[re]ax,1) */
968 static const char alt_short_11[] =
969 {0x0f,0x1f,0x44,0x00,0x00,
970 0x66,0x0f,0x1f,0x44,0x00,0x00};
971 /* nopw 0(%[re]ax,%[re]ax,1)
972 nopw 0(%[re]ax,%[re]ax,1) */
973 static const char alt_short_12[] =
974 {0x66,0x0f,0x1f,0x44,0x00,0x00,
975 0x66,0x0f,0x1f,0x44,0x00,0x00};
976 /* nopw 0(%[re]ax,%[re]ax,1)
977 nopl 0L(%[re]ax) */
978 static const char alt_short_13[] =
979 {0x66,0x0f,0x1f,0x44,0x00,0x00,
980 0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
981 /* nopl 0L(%[re]ax)
982 nopl 0L(%[re]ax) */
983 static const char alt_short_14[] =
984 {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00,
985 0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
986 /* nopl 0L(%[re]ax)
987 nopl 0L(%[re]ax,%[re]ax,1) */
988 static const char alt_short_15[] =
989 {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00,
990 0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
991 static const char *const alt_short_patt[] = {
992 f32_1, f32_2, alt_3, alt_4, alt_5, alt_6, alt_7, alt_8,
993 alt_9, alt_10, alt_short_11, alt_short_12, alt_short_13,
994 alt_short_14, alt_short_15
996 static const char *const alt_long_patt[] = {
997 f32_1, f32_2, alt_3, alt_4, alt_5, alt_6, alt_7, alt_8,
998 alt_9, alt_10, alt_long_11, alt_long_12, alt_long_13,
999 alt_long_14, alt_long_15
1002 /* Only align for at least a positive non-zero boundary. */
1003 if (count <= 0 || count > MAX_MEM_FOR_RS_ALIGN_CODE)
1004 return;
1006 /* We need to decide which NOP sequence to use for 32bit and
1007 64bit. When -mtune= is used:
1009 1. For PROCESSOR_I386, PROCESSOR_I486, PROCESSOR_PENTIUM and
1010 PROCESSOR_GENERIC32, f32_patt will be used.
1011 2. For PROCESSOR_PENTIUMPRO, PROCESSOR_PENTIUM4, PROCESSOR_NOCONA,
1012 PROCESSOR_CORE, PROCESSOR_CORE2, PROCESSOR_COREI7, and
1013 PROCESSOR_GENERIC64, alt_long_patt will be used.
1014 3. For PROCESSOR_ATHLON, PROCESSOR_K6, PROCESSOR_K8 and
1015 PROCESSOR_AMDFAM10, and PROCESSOR_BDVER1, alt_short_patt
1016 will be used.
1018 When -mtune= isn't used, alt_long_patt will be used if
1019 cpu_arch_isa_flags has CpuNop. Otherwise, f32_patt will
1020 be used.
1022 When -march= or .arch is used, we can't use anything beyond
1023 cpu_arch_isa_flags. */
1025 if (flag_code == CODE_16BIT)
1027 if (count > 8)
1029 memcpy (fragP->fr_literal + fragP->fr_fix,
1030 jump_31, count);
1031 /* Adjust jump offset. */
1032 fragP->fr_literal[fragP->fr_fix + 1] = count - 2;
1034 else
1035 memcpy (fragP->fr_literal + fragP->fr_fix,
1036 f16_patt[count - 1], count);
1038 else
1040 const char *const *patt = NULL;
1042 if (fragP->tc_frag_data.isa == PROCESSOR_UNKNOWN)
1044 /* PROCESSOR_UNKNOWN means that all ISAs may be used. */
1045 switch (cpu_arch_tune)
1047 case PROCESSOR_UNKNOWN:
1048 /* We use cpu_arch_isa_flags to check if we SHOULD
1049 optimize with nops. */
1050 if (fragP->tc_frag_data.isa_flags.bitfield.cpunop)
1051 patt = alt_long_patt;
1052 else
1053 patt = f32_patt;
1054 break;
1055 case PROCESSOR_PENTIUMPRO:
1056 case PROCESSOR_PENTIUM4:
1057 case PROCESSOR_NOCONA:
1058 case PROCESSOR_CORE:
1059 case PROCESSOR_CORE2:
1060 case PROCESSOR_COREI7:
1061 case PROCESSOR_L1OM:
1062 case PROCESSOR_GENERIC64:
1063 patt = alt_long_patt;
1064 break;
1065 case PROCESSOR_K6:
1066 case PROCESSOR_ATHLON:
1067 case PROCESSOR_K8:
1068 case PROCESSOR_AMDFAM10:
1069 case PROCESSOR_BDVER1:
1070 patt = alt_short_patt;
1071 break;
1072 case PROCESSOR_I386:
1073 case PROCESSOR_I486:
1074 case PROCESSOR_PENTIUM:
1075 case PROCESSOR_GENERIC32:
1076 patt = f32_patt;
1077 break;
1080 else
1082 switch (fragP->tc_frag_data.tune)
1084 case PROCESSOR_UNKNOWN:
1085 /* When cpu_arch_isa is set, cpu_arch_tune shouldn't be
1086 PROCESSOR_UNKNOWN. */
1087 abort ();
1088 break;
1090 case PROCESSOR_I386:
1091 case PROCESSOR_I486:
1092 case PROCESSOR_PENTIUM:
1093 case PROCESSOR_K6:
1094 case PROCESSOR_ATHLON:
1095 case PROCESSOR_K8:
1096 case PROCESSOR_AMDFAM10:
1097 case PROCESSOR_BDVER1:
1098 case PROCESSOR_GENERIC32:
1099 /* We use cpu_arch_isa_flags to check if we CAN optimize
1100 with nops. */
1101 if (fragP->tc_frag_data.isa_flags.bitfield.cpunop)
1102 patt = alt_short_patt;
1103 else
1104 patt = f32_patt;
1105 break;
1106 case PROCESSOR_PENTIUMPRO:
1107 case PROCESSOR_PENTIUM4:
1108 case PROCESSOR_NOCONA:
1109 case PROCESSOR_CORE:
1110 case PROCESSOR_CORE2:
1111 case PROCESSOR_COREI7:
1112 case PROCESSOR_L1OM:
1113 if (fragP->tc_frag_data.isa_flags.bitfield.cpunop)
1114 patt = alt_long_patt;
1115 else
1116 patt = f32_patt;
1117 break;
1118 case PROCESSOR_GENERIC64:
1119 patt = alt_long_patt;
1120 break;
1124 if (patt == f32_patt)
1126 /* If the padding is less than 15 bytes, we use the normal
1127 ones. Otherwise, we use a jump instruction and adjust
1128 its offset. */
1129 int limit;
1131 /* For 64bit, the limit is 3 bytes. */
1132 if (flag_code == CODE_64BIT
1133 && fragP->tc_frag_data.isa_flags.bitfield.cpulm)
1134 limit = 3;
1135 else
1136 limit = 15;
1137 if (count < limit)
1138 memcpy (fragP->fr_literal + fragP->fr_fix,
1139 patt[count - 1], count);
1140 else
1142 memcpy (fragP->fr_literal + fragP->fr_fix,
1143 jump_31, count);
1144 /* Adjust jump offset. */
1145 fragP->fr_literal[fragP->fr_fix + 1] = count - 2;
1148 else
1150 /* Maximum length of an instruction is 15 byte. If the
1151 padding is greater than 15 bytes and we don't use jump,
1152 we have to break it into smaller pieces. */
1153 int padding = count;
1154 while (padding > 15)
1156 padding -= 15;
1157 memcpy (fragP->fr_literal + fragP->fr_fix + padding,
1158 patt [14], 15);
1161 if (padding)
1162 memcpy (fragP->fr_literal + fragP->fr_fix,
1163 patt [padding - 1], padding);
1166 fragP->fr_var = count;
1169 static INLINE int
1170 operand_type_all_zero (const union i386_operand_type *x)
1172 switch (ARRAY_SIZE(x->array))
1174 case 3:
1175 if (x->array[2])
1176 return 0;
1177 case 2:
1178 if (x->array[1])
1179 return 0;
1180 case 1:
1181 return !x->array[0];
1182 default:
1183 abort ();
1187 static INLINE void
1188 operand_type_set (union i386_operand_type *x, unsigned int v)
1190 switch (ARRAY_SIZE(x->array))
1192 case 3:
1193 x->array[2] = v;
1194 case 2:
1195 x->array[1] = v;
1196 case 1:
1197 x->array[0] = v;
1198 break;
1199 default:
1200 abort ();
1204 static INLINE int
1205 operand_type_equal (const union i386_operand_type *x,
1206 const union i386_operand_type *y)
1208 switch (ARRAY_SIZE(x->array))
1210 case 3:
1211 if (x->array[2] != y->array[2])
1212 return 0;
1213 case 2:
1214 if (x->array[1] != y->array[1])
1215 return 0;
1216 case 1:
1217 return x->array[0] == y->array[0];
1218 break;
1219 default:
1220 abort ();
1224 static INLINE int
1225 cpu_flags_all_zero (const union i386_cpu_flags *x)
1227 switch (ARRAY_SIZE(x->array))
1229 case 3:
1230 if (x->array[2])
1231 return 0;
1232 case 2:
1233 if (x->array[1])
1234 return 0;
1235 case 1:
1236 return !x->array[0];
1237 default:
1238 abort ();
1242 static INLINE void
1243 cpu_flags_set (union i386_cpu_flags *x, unsigned int v)
1245 switch (ARRAY_SIZE(x->array))
1247 case 3:
1248 x->array[2] = v;
1249 case 2:
1250 x->array[1] = v;
1251 case 1:
1252 x->array[0] = v;
1253 break;
1254 default:
1255 abort ();
1259 static INLINE int
1260 cpu_flags_equal (const union i386_cpu_flags *x,
1261 const union i386_cpu_flags *y)
1263 switch (ARRAY_SIZE(x->array))
1265 case 3:
1266 if (x->array[2] != y->array[2])
1267 return 0;
1268 case 2:
1269 if (x->array[1] != y->array[1])
1270 return 0;
1271 case 1:
1272 return x->array[0] == y->array[0];
1273 break;
1274 default:
1275 abort ();
1279 static INLINE int
1280 cpu_flags_check_cpu64 (i386_cpu_flags f)
1282 return !((flag_code == CODE_64BIT && f.bitfield.cpuno64)
1283 || (flag_code != CODE_64BIT && f.bitfield.cpu64));
1286 static INLINE i386_cpu_flags
1287 cpu_flags_and (i386_cpu_flags x, i386_cpu_flags y)
1289 switch (ARRAY_SIZE (x.array))
1291 case 3:
1292 x.array [2] &= y.array [2];
1293 case 2:
1294 x.array [1] &= y.array [1];
1295 case 1:
1296 x.array [0] &= y.array [0];
1297 break;
1298 default:
1299 abort ();
1301 return x;
1304 static INLINE i386_cpu_flags
1305 cpu_flags_or (i386_cpu_flags x, i386_cpu_flags y)
1307 switch (ARRAY_SIZE (x.array))
1309 case 3:
1310 x.array [2] |= y.array [2];
1311 case 2:
1312 x.array [1] |= y.array [1];
1313 case 1:
1314 x.array [0] |= y.array [0];
1315 break;
1316 default:
1317 abort ();
1319 return x;
1322 static INLINE i386_cpu_flags
1323 cpu_flags_and_not (i386_cpu_flags x, i386_cpu_flags y)
1325 switch (ARRAY_SIZE (x.array))
1327 case 3:
1328 x.array [2] &= ~y.array [2];
1329 case 2:
1330 x.array [1] &= ~y.array [1];
1331 case 1:
1332 x.array [0] &= ~y.array [0];
1333 break;
1334 default:
1335 abort ();
1337 return x;
1340 #define CPU_FLAGS_ARCH_MATCH 0x1
1341 #define CPU_FLAGS_64BIT_MATCH 0x2
1342 #define CPU_FLAGS_AES_MATCH 0x4
1343 #define CPU_FLAGS_PCLMUL_MATCH 0x8
1344 #define CPU_FLAGS_AVX_MATCH 0x10
1346 #define CPU_FLAGS_32BIT_MATCH \
1347 (CPU_FLAGS_ARCH_MATCH | CPU_FLAGS_AES_MATCH \
1348 | CPU_FLAGS_PCLMUL_MATCH | CPU_FLAGS_AVX_MATCH)
1349 #define CPU_FLAGS_PERFECT_MATCH \
1350 (CPU_FLAGS_32BIT_MATCH | CPU_FLAGS_64BIT_MATCH)
1352 /* Return CPU flags match bits. */
1354 static int
1355 cpu_flags_match (const insn_template *t)
1357 i386_cpu_flags x = t->cpu_flags;
1358 int match = cpu_flags_check_cpu64 (x) ? CPU_FLAGS_64BIT_MATCH : 0;
1360 x.bitfield.cpu64 = 0;
1361 x.bitfield.cpuno64 = 0;
1363 if (cpu_flags_all_zero (&x))
1365 /* This instruction is available on all archs. */
1366 match |= CPU_FLAGS_32BIT_MATCH;
1368 else
1370 /* This instruction is available only on some archs. */
1371 i386_cpu_flags cpu = cpu_arch_flags;
1373 cpu.bitfield.cpu64 = 0;
1374 cpu.bitfield.cpuno64 = 0;
1375 cpu = cpu_flags_and (x, cpu);
1376 if (!cpu_flags_all_zero (&cpu))
1378 if (x.bitfield.cpuavx)
1380 /* We only need to check AES/PCLMUL/SSE2AVX with AVX. */
1381 if (cpu.bitfield.cpuavx)
1383 /* Check SSE2AVX. */
1384 if (!t->opcode_modifier.sse2avx|| sse2avx)
1386 match |= (CPU_FLAGS_ARCH_MATCH
1387 | CPU_FLAGS_AVX_MATCH);
1388 /* Check AES. */
1389 if (!x.bitfield.cpuaes || cpu.bitfield.cpuaes)
1390 match |= CPU_FLAGS_AES_MATCH;
1391 /* Check PCLMUL. */
1392 if (!x.bitfield.cpupclmul
1393 || cpu.bitfield.cpupclmul)
1394 match |= CPU_FLAGS_PCLMUL_MATCH;
1397 else
1398 match |= CPU_FLAGS_ARCH_MATCH;
1400 else
1401 match |= CPU_FLAGS_32BIT_MATCH;
1404 return match;
1407 static INLINE i386_operand_type
1408 operand_type_and (i386_operand_type x, i386_operand_type y)
1410 switch (ARRAY_SIZE (x.array))
1412 case 3:
1413 x.array [2] &= y.array [2];
1414 case 2:
1415 x.array [1] &= y.array [1];
1416 case 1:
1417 x.array [0] &= y.array [0];
1418 break;
1419 default:
1420 abort ();
1422 return x;
1425 static INLINE i386_operand_type
1426 operand_type_or (i386_operand_type x, i386_operand_type y)
1428 switch (ARRAY_SIZE (x.array))
1430 case 3:
1431 x.array [2] |= y.array [2];
1432 case 2:
1433 x.array [1] |= y.array [1];
1434 case 1:
1435 x.array [0] |= y.array [0];
1436 break;
1437 default:
1438 abort ();
1440 return x;
1443 static INLINE i386_operand_type
1444 operand_type_xor (i386_operand_type x, i386_operand_type y)
1446 switch (ARRAY_SIZE (x.array))
1448 case 3:
1449 x.array [2] ^= y.array [2];
1450 case 2:
1451 x.array [1] ^= y.array [1];
1452 case 1:
1453 x.array [0] ^= y.array [0];
1454 break;
1455 default:
1456 abort ();
1458 return x;
1461 static const i386_operand_type acc32 = OPERAND_TYPE_ACC32;
1462 static const i386_operand_type acc64 = OPERAND_TYPE_ACC64;
1463 static const i386_operand_type control = OPERAND_TYPE_CONTROL;
1464 static const i386_operand_type inoutportreg
1465 = OPERAND_TYPE_INOUTPORTREG;
1466 static const i386_operand_type reg16_inoutportreg
1467 = OPERAND_TYPE_REG16_INOUTPORTREG;
1468 static const i386_operand_type disp16 = OPERAND_TYPE_DISP16;
1469 static const i386_operand_type disp32 = OPERAND_TYPE_DISP32;
1470 static const i386_operand_type disp32s = OPERAND_TYPE_DISP32S;
1471 static const i386_operand_type disp16_32 = OPERAND_TYPE_DISP16_32;
1472 static const i386_operand_type anydisp
1473 = OPERAND_TYPE_ANYDISP;
1474 static const i386_operand_type regxmm = OPERAND_TYPE_REGXMM;
1475 static const i386_operand_type regymm = OPERAND_TYPE_REGYMM;
1476 static const i386_operand_type imm8 = OPERAND_TYPE_IMM8;
1477 static const i386_operand_type imm8s = OPERAND_TYPE_IMM8S;
1478 static const i386_operand_type imm16 = OPERAND_TYPE_IMM16;
1479 static const i386_operand_type imm32 = OPERAND_TYPE_IMM32;
1480 static const i386_operand_type imm32s = OPERAND_TYPE_IMM32S;
1481 static const i386_operand_type imm64 = OPERAND_TYPE_IMM64;
1482 static const i386_operand_type imm16_32 = OPERAND_TYPE_IMM16_32;
1483 static const i386_operand_type imm16_32s = OPERAND_TYPE_IMM16_32S;
1484 static const i386_operand_type imm16_32_32s = OPERAND_TYPE_IMM16_32_32S;
1485 static const i386_operand_type vec_imm4 = OPERAND_TYPE_VEC_IMM4;
1487 enum operand_type
1489 reg,
1490 imm,
1491 disp,
1492 anymem
1495 static INLINE int
1496 operand_type_check (i386_operand_type t, enum operand_type c)
1498 switch (c)
1500 case reg:
1501 return (t.bitfield.reg8
1502 || t.bitfield.reg16
1503 || t.bitfield.reg32
1504 || t.bitfield.reg64);
1506 case imm:
1507 return (t.bitfield.imm8
1508 || t.bitfield.imm8s
1509 || t.bitfield.imm16
1510 || t.bitfield.imm32
1511 || t.bitfield.imm32s
1512 || t.bitfield.imm64);
1514 case disp:
1515 return (t.bitfield.disp8
1516 || t.bitfield.disp16
1517 || t.bitfield.disp32
1518 || t.bitfield.disp32s
1519 || t.bitfield.disp64);
1521 case anymem:
1522 return (t.bitfield.disp8
1523 || t.bitfield.disp16
1524 || t.bitfield.disp32
1525 || t.bitfield.disp32s
1526 || t.bitfield.disp64
1527 || t.bitfield.baseindex);
1529 default:
1530 abort ();
1533 return 0;
1536 /* Return 1 if there is no conflict in 8bit/16bit/32bit/64bit on
1537 operand J for instruction template T. */
1539 static INLINE int
1540 match_reg_size (const insn_template *t, unsigned int j)
1542 return !((i.types[j].bitfield.byte
1543 && !t->operand_types[j].bitfield.byte)
1544 || (i.types[j].bitfield.word
1545 && !t->operand_types[j].bitfield.word)
1546 || (i.types[j].bitfield.dword
1547 && !t->operand_types[j].bitfield.dword)
1548 || (i.types[j].bitfield.qword
1549 && !t->operand_types[j].bitfield.qword));
1552 /* Return 1 if there is no conflict in any size on operand J for
1553 instruction template T. */
1555 static INLINE int
1556 match_mem_size (const insn_template *t, unsigned int j)
1558 return (match_reg_size (t, j)
1559 && !((i.types[j].bitfield.unspecified
1560 && !t->operand_types[j].bitfield.unspecified)
1561 || (i.types[j].bitfield.fword
1562 && !t->operand_types[j].bitfield.fword)
1563 || (i.types[j].bitfield.tbyte
1564 && !t->operand_types[j].bitfield.tbyte)
1565 || (i.types[j].bitfield.xmmword
1566 && !t->operand_types[j].bitfield.xmmword)
1567 || (i.types[j].bitfield.ymmword
1568 && !t->operand_types[j].bitfield.ymmword)));
1571 /* Return 1 if there is no size conflict on any operands for
1572 instruction template T. */
1574 static INLINE int
1575 operand_size_match (const insn_template *t)
1577 unsigned int j;
1578 int match = 1;
1580 /* Don't check jump instructions. */
1581 if (t->opcode_modifier.jump
1582 || t->opcode_modifier.jumpbyte
1583 || t->opcode_modifier.jumpdword
1584 || t->opcode_modifier.jumpintersegment)
1585 return match;
1587 /* Check memory and accumulator operand size. */
1588 for (j = 0; j < i.operands; j++)
1590 if (t->operand_types[j].bitfield.anysize)
1591 continue;
1593 if (t->operand_types[j].bitfield.acc && !match_reg_size (t, j))
1595 match = 0;
1596 break;
1599 if (i.types[j].bitfield.mem && !match_mem_size (t, j))
1601 match = 0;
1602 break;
1606 if (match)
1607 return match;
1608 else if (!t->opcode_modifier.d && !t->opcode_modifier.floatd)
1610 mismatch:
1611 i.error = operand_size_mismatch;
1612 return 0;
1615 /* Check reverse. */
1616 gas_assert (i.operands == 2);
1618 match = 1;
1619 for (j = 0; j < 2; j++)
1621 if (t->operand_types[j].bitfield.acc
1622 && !match_reg_size (t, j ? 0 : 1))
1623 goto mismatch;
1625 if (i.types[j].bitfield.mem
1626 && !match_mem_size (t, j ? 0 : 1))
1627 goto mismatch;
1630 return match;
1633 static INLINE int
1634 operand_type_match (i386_operand_type overlap,
1635 i386_operand_type given)
1637 i386_operand_type temp = overlap;
1639 temp.bitfield.jumpabsolute = 0;
1640 temp.bitfield.unspecified = 0;
1641 temp.bitfield.byte = 0;
1642 temp.bitfield.word = 0;
1643 temp.bitfield.dword = 0;
1644 temp.bitfield.fword = 0;
1645 temp.bitfield.qword = 0;
1646 temp.bitfield.tbyte = 0;
1647 temp.bitfield.xmmword = 0;
1648 temp.bitfield.ymmword = 0;
1649 if (operand_type_all_zero (&temp))
1650 goto mismatch;
1652 if (given.bitfield.baseindex == overlap.bitfield.baseindex
1653 && given.bitfield.jumpabsolute == overlap.bitfield.jumpabsolute)
1654 return 1;
1656 mismatch:
1657 i.error = operand_type_mismatch;
1658 return 0;
1661 /* If given types g0 and g1 are registers they must be of the same type
1662 unless the expected operand type register overlap is null.
1663 Note that Acc in a template matches every size of reg. */
1665 static INLINE int
1666 operand_type_register_match (i386_operand_type m0,
1667 i386_operand_type g0,
1668 i386_operand_type t0,
1669 i386_operand_type m1,
1670 i386_operand_type g1,
1671 i386_operand_type t1)
1673 if (!operand_type_check (g0, reg))
1674 return 1;
1676 if (!operand_type_check (g1, reg))
1677 return 1;
1679 if (g0.bitfield.reg8 == g1.bitfield.reg8
1680 && g0.bitfield.reg16 == g1.bitfield.reg16
1681 && g0.bitfield.reg32 == g1.bitfield.reg32
1682 && g0.bitfield.reg64 == g1.bitfield.reg64)
1683 return 1;
1685 if (m0.bitfield.acc)
1687 t0.bitfield.reg8 = 1;
1688 t0.bitfield.reg16 = 1;
1689 t0.bitfield.reg32 = 1;
1690 t0.bitfield.reg64 = 1;
1693 if (m1.bitfield.acc)
1695 t1.bitfield.reg8 = 1;
1696 t1.bitfield.reg16 = 1;
1697 t1.bitfield.reg32 = 1;
1698 t1.bitfield.reg64 = 1;
1701 if (!(t0.bitfield.reg8 & t1.bitfield.reg8)
1702 && !(t0.bitfield.reg16 & t1.bitfield.reg16)
1703 && !(t0.bitfield.reg32 & t1.bitfield.reg32)
1704 && !(t0.bitfield.reg64 & t1.bitfield.reg64))
1705 return 1;
1707 i.error = register_type_mismatch;
1709 return 0;
1712 static INLINE unsigned int
1713 mode_from_disp_size (i386_operand_type t)
1715 if (t.bitfield.disp8)
1716 return 1;
1717 else if (t.bitfield.disp16
1718 || t.bitfield.disp32
1719 || t.bitfield.disp32s)
1720 return 2;
1721 else
1722 return 0;
1725 static INLINE int
1726 fits_in_signed_byte (offsetT num)
1728 return (num >= -128) && (num <= 127);
1731 static INLINE int
1732 fits_in_unsigned_byte (offsetT num)
1734 return (num & 0xff) == num;
1737 static INLINE int
1738 fits_in_unsigned_word (offsetT num)
1740 return (num & 0xffff) == num;
1743 static INLINE int
1744 fits_in_signed_word (offsetT num)
1746 return (-32768 <= num) && (num <= 32767);
1749 static INLINE int
1750 fits_in_signed_long (offsetT num ATTRIBUTE_UNUSED)
1752 #ifndef BFD64
1753 return 1;
1754 #else
1755 return (!(((offsetT) -1 << 31) & num)
1756 || (((offsetT) -1 << 31) & num) == ((offsetT) -1 << 31));
1757 #endif
1758 } /* fits_in_signed_long() */
1760 static INLINE int
1761 fits_in_unsigned_long (offsetT num ATTRIBUTE_UNUSED)
1763 #ifndef BFD64
1764 return 1;
1765 #else
1766 return (num & (((offsetT) 2 << 31) - 1)) == num;
1767 #endif
1768 } /* fits_in_unsigned_long() */
1770 static INLINE int
1771 fits_in_imm4 (offsetT num)
1773 return (num & 0xf) == num;
1776 static i386_operand_type
1777 smallest_imm_type (offsetT num)
1779 i386_operand_type t;
1781 operand_type_set (&t, 0);
1782 t.bitfield.imm64 = 1;
1784 if (cpu_arch_tune != PROCESSOR_I486 && num == 1)
1786 /* This code is disabled on the 486 because all the Imm1 forms
1787 in the opcode table are slower on the i486. They're the
1788 versions with the implicitly specified single-position
1789 displacement, which has another syntax if you really want to
1790 use that form. */
1791 t.bitfield.imm1 = 1;
1792 t.bitfield.imm8 = 1;
1793 t.bitfield.imm8s = 1;
1794 t.bitfield.imm16 = 1;
1795 t.bitfield.imm32 = 1;
1796 t.bitfield.imm32s = 1;
1798 else if (fits_in_signed_byte (num))
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_unsigned_byte (num))
1808 t.bitfield.imm8 = 1;
1809 t.bitfield.imm16 = 1;
1810 t.bitfield.imm32 = 1;
1811 t.bitfield.imm32s = 1;
1813 else if (fits_in_signed_word (num) || fits_in_unsigned_word (num))
1815 t.bitfield.imm16 = 1;
1816 t.bitfield.imm32 = 1;
1817 t.bitfield.imm32s = 1;
1819 else if (fits_in_signed_long (num))
1821 t.bitfield.imm32 = 1;
1822 t.bitfield.imm32s = 1;
1824 else if (fits_in_unsigned_long (num))
1825 t.bitfield.imm32 = 1;
1827 return t;
1830 static offsetT
1831 offset_in_range (offsetT val, int size)
1833 addressT mask;
1835 switch (size)
1837 case 1: mask = ((addressT) 1 << 8) - 1; break;
1838 case 2: mask = ((addressT) 1 << 16) - 1; break;
1839 case 4: mask = ((addressT) 2 << 31) - 1; break;
1840 #ifdef BFD64
1841 case 8: mask = ((addressT) 2 << 63) - 1; break;
1842 #endif
1843 default: abort ();
1846 #ifdef BFD64
1847 /* If BFD64, sign extend val for 32bit address mode. */
1848 if (flag_code != CODE_64BIT
1849 || i.prefix[ADDR_PREFIX])
1850 if ((val & ~(((addressT) 2 << 31) - 1)) == 0)
1851 val = (val ^ ((addressT) 1 << 31)) - ((addressT) 1 << 31);
1852 #endif
1854 if ((val & ~mask) != 0 && (val & ~mask) != ~mask)
1856 char buf1[40], buf2[40];
1858 sprint_value (buf1, val);
1859 sprint_value (buf2, val & mask);
1860 as_warn (_("%s shortened to %s"), buf1, buf2);
1862 return val & mask;
1865 enum PREFIX_GROUP
1867 PREFIX_EXIST = 0,
1868 PREFIX_LOCK,
1869 PREFIX_REP,
1870 PREFIX_OTHER
1873 /* Returns
1874 a. PREFIX_EXIST if attempting to add a prefix where one from the
1875 same class already exists.
1876 b. PREFIX_LOCK if lock prefix is added.
1877 c. PREFIX_REP if rep/repne prefix is added.
1878 d. PREFIX_OTHER if other prefix is added.
1881 static enum PREFIX_GROUP
1882 add_prefix (unsigned int prefix)
1884 enum PREFIX_GROUP ret = PREFIX_OTHER;
1885 unsigned int q;
1887 if (prefix >= REX_OPCODE && prefix < REX_OPCODE + 16
1888 && flag_code == CODE_64BIT)
1890 if ((i.prefix[REX_PREFIX] & prefix & REX_W)
1891 || ((i.prefix[REX_PREFIX] & (REX_R | REX_X | REX_B))
1892 && (prefix & (REX_R | REX_X | REX_B))))
1893 ret = PREFIX_EXIST;
1894 q = REX_PREFIX;
1896 else
1898 switch (prefix)
1900 default:
1901 abort ();
1903 case CS_PREFIX_OPCODE:
1904 case DS_PREFIX_OPCODE:
1905 case ES_PREFIX_OPCODE:
1906 case FS_PREFIX_OPCODE:
1907 case GS_PREFIX_OPCODE:
1908 case SS_PREFIX_OPCODE:
1909 q = SEG_PREFIX;
1910 break;
1912 case REPNE_PREFIX_OPCODE:
1913 case REPE_PREFIX_OPCODE:
1914 q = REP_PREFIX;
1915 ret = PREFIX_REP;
1916 break;
1918 case LOCK_PREFIX_OPCODE:
1919 q = LOCK_PREFIX;
1920 ret = PREFIX_LOCK;
1921 break;
1923 case FWAIT_OPCODE:
1924 q = WAIT_PREFIX;
1925 break;
1927 case ADDR_PREFIX_OPCODE:
1928 q = ADDR_PREFIX;
1929 break;
1931 case DATA_PREFIX_OPCODE:
1932 q = DATA_PREFIX;
1933 break;
1935 if (i.prefix[q] != 0)
1936 ret = PREFIX_EXIST;
1939 if (ret)
1941 if (!i.prefix[q])
1942 ++i.prefixes;
1943 i.prefix[q] |= prefix;
1945 else
1946 as_bad (_("same type of prefix used twice"));
1948 return ret;
1951 static void
1952 update_code_flag (int value, int check)
1954 PRINTF_LIKE ((*as_error));
1956 flag_code = (enum flag_code) value;
1957 if (flag_code == CODE_64BIT)
1959 cpu_arch_flags.bitfield.cpu64 = 1;
1960 cpu_arch_flags.bitfield.cpuno64 = 0;
1962 else
1964 cpu_arch_flags.bitfield.cpu64 = 0;
1965 cpu_arch_flags.bitfield.cpuno64 = 1;
1967 if (value == CODE_64BIT && !cpu_arch_flags.bitfield.cpulm )
1969 if (check)
1970 as_error = as_fatal;
1971 else
1972 as_error = as_bad;
1973 (*as_error) (_("64bit mode not supported on `%s'."),
1974 cpu_arch_name ? cpu_arch_name : default_arch);
1976 if (value == CODE_32BIT && !cpu_arch_flags.bitfield.cpui386)
1978 if (check)
1979 as_error = as_fatal;
1980 else
1981 as_error = as_bad;
1982 (*as_error) (_("32bit mode not supported on `%s'."),
1983 cpu_arch_name ? cpu_arch_name : default_arch);
1985 stackop_size = '\0';
1988 static void
1989 set_code_flag (int value)
1991 update_code_flag (value, 0);
1994 static void
1995 set_16bit_gcc_code_flag (int new_code_flag)
1997 flag_code = (enum flag_code) new_code_flag;
1998 if (flag_code != CODE_16BIT)
1999 abort ();
2000 cpu_arch_flags.bitfield.cpu64 = 0;
2001 cpu_arch_flags.bitfield.cpuno64 = 1;
2002 stackop_size = LONG_MNEM_SUFFIX;
2005 static void
2006 set_intel_syntax (int syntax_flag)
2008 /* Find out if register prefixing is specified. */
2009 int ask_naked_reg = 0;
2011 SKIP_WHITESPACE ();
2012 if (!is_end_of_line[(unsigned char) *input_line_pointer])
2014 char *string = input_line_pointer;
2015 int e = get_symbol_end ();
2017 if (strcmp (string, "prefix") == 0)
2018 ask_naked_reg = 1;
2019 else if (strcmp (string, "noprefix") == 0)
2020 ask_naked_reg = -1;
2021 else
2022 as_bad (_("bad argument to syntax directive."));
2023 *input_line_pointer = e;
2025 demand_empty_rest_of_line ();
2027 intel_syntax = syntax_flag;
2029 if (ask_naked_reg == 0)
2030 allow_naked_reg = (intel_syntax
2031 && (bfd_get_symbol_leading_char (stdoutput) != '\0'));
2032 else
2033 allow_naked_reg = (ask_naked_reg < 0);
2035 expr_set_rank (O_full_ptr, syntax_flag ? 10 : 0);
2037 identifier_chars['%'] = intel_syntax && allow_naked_reg ? '%' : 0;
2038 identifier_chars['$'] = intel_syntax ? '$' : 0;
2039 register_prefix = allow_naked_reg ? "" : "%";
2042 static void
2043 set_intel_mnemonic (int mnemonic_flag)
2045 intel_mnemonic = mnemonic_flag;
2048 static void
2049 set_allow_index_reg (int flag)
2051 allow_index_reg = flag;
2054 static void
2055 set_sse_check (int dummy ATTRIBUTE_UNUSED)
2057 SKIP_WHITESPACE ();
2059 if (!is_end_of_line[(unsigned char) *input_line_pointer])
2061 char *string = input_line_pointer;
2062 int e = get_symbol_end ();
2064 if (strcmp (string, "none") == 0)
2065 sse_check = sse_check_none;
2066 else if (strcmp (string, "warning") == 0)
2067 sse_check = sse_check_warning;
2068 else if (strcmp (string, "error") == 0)
2069 sse_check = sse_check_error;
2070 else
2071 as_bad (_("bad argument to sse_check directive."));
2072 *input_line_pointer = e;
2074 else
2075 as_bad (_("missing argument for sse_check directive"));
2077 demand_empty_rest_of_line ();
2080 static void
2081 check_cpu_arch_compatible (const char *name ATTRIBUTE_UNUSED,
2082 i386_cpu_flags new_flag ATTRIBUTE_UNUSED)
2084 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
2085 static const char *arch;
2087 /* Intel LIOM is only supported on ELF. */
2088 if (!IS_ELF)
2089 return;
2091 if (!arch)
2093 /* Use cpu_arch_name if it is set in md_parse_option. Otherwise
2094 use default_arch. */
2095 arch = cpu_arch_name;
2096 if (!arch)
2097 arch = default_arch;
2100 /* If we are targeting Intel L1OM, we must enable it. */
2101 if (get_elf_backend_data (stdoutput)->elf_machine_code != EM_L1OM
2102 || new_flag.bitfield.cpul1om)
2103 return;
2105 as_bad (_("`%s' is not supported on `%s'"), name, arch);
2106 #endif
2109 static void
2110 set_cpu_arch (int dummy ATTRIBUTE_UNUSED)
2112 SKIP_WHITESPACE ();
2114 if (!is_end_of_line[(unsigned char) *input_line_pointer])
2116 char *string = input_line_pointer;
2117 int e = get_symbol_end ();
2118 unsigned int j;
2119 i386_cpu_flags flags;
2121 for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
2123 if (strcmp (string, cpu_arch[j].name) == 0)
2125 check_cpu_arch_compatible (string, cpu_arch[j].flags);
2127 if (*string != '.')
2129 cpu_arch_name = cpu_arch[j].name;
2130 cpu_sub_arch_name = NULL;
2131 cpu_arch_flags = cpu_arch[j].flags;
2132 if (flag_code == CODE_64BIT)
2134 cpu_arch_flags.bitfield.cpu64 = 1;
2135 cpu_arch_flags.bitfield.cpuno64 = 0;
2137 else
2139 cpu_arch_flags.bitfield.cpu64 = 0;
2140 cpu_arch_flags.bitfield.cpuno64 = 1;
2142 cpu_arch_isa = cpu_arch[j].type;
2143 cpu_arch_isa_flags = cpu_arch[j].flags;
2144 if (!cpu_arch_tune_set)
2146 cpu_arch_tune = cpu_arch_isa;
2147 cpu_arch_tune_flags = cpu_arch_isa_flags;
2149 break;
2152 if (!cpu_arch[j].negated)
2153 flags = cpu_flags_or (cpu_arch_flags,
2154 cpu_arch[j].flags);
2155 else
2156 flags = cpu_flags_and_not (cpu_arch_flags,
2157 cpu_arch[j].flags);
2158 if (!cpu_flags_equal (&flags, &cpu_arch_flags))
2160 if (cpu_sub_arch_name)
2162 char *name = cpu_sub_arch_name;
2163 cpu_sub_arch_name = concat (name,
2164 cpu_arch[j].name,
2165 (const char *) NULL);
2166 free (name);
2168 else
2169 cpu_sub_arch_name = xstrdup (cpu_arch[j].name);
2170 cpu_arch_flags = flags;
2172 *input_line_pointer = e;
2173 demand_empty_rest_of_line ();
2174 return;
2177 if (j >= ARRAY_SIZE (cpu_arch))
2178 as_bad (_("no such architecture: `%s'"), string);
2180 *input_line_pointer = e;
2182 else
2183 as_bad (_("missing cpu architecture"));
2185 no_cond_jump_promotion = 0;
2186 if (*input_line_pointer == ','
2187 && !is_end_of_line[(unsigned char) input_line_pointer[1]])
2189 char *string = ++input_line_pointer;
2190 int e = get_symbol_end ();
2192 if (strcmp (string, "nojumps") == 0)
2193 no_cond_jump_promotion = 1;
2194 else if (strcmp (string, "jumps") == 0)
2196 else
2197 as_bad (_("no such architecture modifier: `%s'"), string);
2199 *input_line_pointer = e;
2202 demand_empty_rest_of_line ();
2205 enum bfd_architecture
2206 i386_arch (void)
2208 if (cpu_arch_isa == PROCESSOR_L1OM)
2210 if (OUTPUT_FLAVOR != bfd_target_elf_flavour
2211 || flag_code != CODE_64BIT)
2212 as_fatal (_("Intel L1OM is 64bit ELF only"));
2213 return bfd_arch_l1om;
2215 else
2216 return bfd_arch_i386;
2219 unsigned long
2220 i386_mach ()
2222 if (!strncmp (default_arch, "x86_64", 6))
2224 if (cpu_arch_isa == PROCESSOR_L1OM)
2226 if (OUTPUT_FLAVOR != bfd_target_elf_flavour
2227 || default_arch[6] != '\0')
2228 as_fatal (_("Intel L1OM is 64bit ELF only"));
2229 return bfd_mach_l1om;
2231 else if (default_arch[6] == '\0')
2232 return bfd_mach_x86_64;
2233 else
2234 return bfd_mach_x64_32;
2236 else if (!strcmp (default_arch, "i386"))
2237 return bfd_mach_i386_i386;
2238 else
2239 as_fatal (_("Unknown architecture"));
2242 void
2243 md_begin ()
2245 const char *hash_err;
2247 /* Initialize op_hash hash table. */
2248 op_hash = hash_new ();
2251 const insn_template *optab;
2252 templates *core_optab;
2254 /* Setup for loop. */
2255 optab = i386_optab;
2256 core_optab = (templates *) xmalloc (sizeof (templates));
2257 core_optab->start = optab;
2259 while (1)
2261 ++optab;
2262 if (optab->name == NULL
2263 || strcmp (optab->name, (optab - 1)->name) != 0)
2265 /* different name --> ship out current template list;
2266 add to hash table; & begin anew. */
2267 core_optab->end = optab;
2268 hash_err = hash_insert (op_hash,
2269 (optab - 1)->name,
2270 (void *) core_optab);
2271 if (hash_err)
2273 as_fatal (_("Internal Error: Can't hash %s: %s"),
2274 (optab - 1)->name,
2275 hash_err);
2277 if (optab->name == NULL)
2278 break;
2279 core_optab = (templates *) xmalloc (sizeof (templates));
2280 core_optab->start = optab;
2285 /* Initialize reg_hash hash table. */
2286 reg_hash = hash_new ();
2288 const reg_entry *regtab;
2289 unsigned int regtab_size = i386_regtab_size;
2291 for (regtab = i386_regtab; regtab_size--; regtab++)
2293 hash_err = hash_insert (reg_hash, regtab->reg_name, (void *) regtab);
2294 if (hash_err)
2295 as_fatal (_("Internal Error: Can't hash %s: %s"),
2296 regtab->reg_name,
2297 hash_err);
2301 /* Fill in lexical tables: mnemonic_chars, operand_chars. */
2303 int c;
2304 char *p;
2306 for (c = 0; c < 256; c++)
2308 if (ISDIGIT (c))
2310 digit_chars[c] = c;
2311 mnemonic_chars[c] = c;
2312 register_chars[c] = c;
2313 operand_chars[c] = c;
2315 else if (ISLOWER (c))
2317 mnemonic_chars[c] = c;
2318 register_chars[c] = c;
2319 operand_chars[c] = c;
2321 else if (ISUPPER (c))
2323 mnemonic_chars[c] = TOLOWER (c);
2324 register_chars[c] = mnemonic_chars[c];
2325 operand_chars[c] = c;
2328 if (ISALPHA (c) || ISDIGIT (c))
2329 identifier_chars[c] = c;
2330 else if (c >= 128)
2332 identifier_chars[c] = c;
2333 operand_chars[c] = c;
2337 #ifdef LEX_AT
2338 identifier_chars['@'] = '@';
2339 #endif
2340 #ifdef LEX_QM
2341 identifier_chars['?'] = '?';
2342 operand_chars['?'] = '?';
2343 #endif
2344 digit_chars['-'] = '-';
2345 mnemonic_chars['_'] = '_';
2346 mnemonic_chars['-'] = '-';
2347 mnemonic_chars['.'] = '.';
2348 identifier_chars['_'] = '_';
2349 identifier_chars['.'] = '.';
2351 for (p = operand_special_chars; *p != '\0'; p++)
2352 operand_chars[(unsigned char) *p] = *p;
2355 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
2356 if (IS_ELF)
2358 record_alignment (text_section, 2);
2359 record_alignment (data_section, 2);
2360 record_alignment (bss_section, 2);
2362 #endif
2364 if (flag_code == CODE_64BIT)
2366 x86_dwarf2_return_column = 16;
2367 x86_cie_data_alignment = -8;
2369 else
2371 x86_dwarf2_return_column = 8;
2372 x86_cie_data_alignment = -4;
2376 void
2377 i386_print_statistics (FILE *file)
2379 hash_print_statistics (file, "i386 opcode", op_hash);
2380 hash_print_statistics (file, "i386 register", reg_hash);
2383 #ifdef DEBUG386
2385 /* Debugging routines for md_assemble. */
2386 static void pte (insn_template *);
2387 static void pt (i386_operand_type);
2388 static void pe (expressionS *);
2389 static void ps (symbolS *);
2391 static void
2392 pi (char *line, i386_insn *x)
2394 unsigned int j;
2396 fprintf (stdout, "%s: template ", line);
2397 pte (&x->tm);
2398 fprintf (stdout, " address: base %s index %s scale %x\n",
2399 x->base_reg ? x->base_reg->reg_name : "none",
2400 x->index_reg ? x->index_reg->reg_name : "none",
2401 x->log2_scale_factor);
2402 fprintf (stdout, " modrm: mode %x reg %x reg/mem %x\n",
2403 x->rm.mode, x->rm.reg, x->rm.regmem);
2404 fprintf (stdout, " sib: base %x index %x scale %x\n",
2405 x->sib.base, x->sib.index, x->sib.scale);
2406 fprintf (stdout, " rex: 64bit %x extX %x extY %x extZ %x\n",
2407 (x->rex & REX_W) != 0,
2408 (x->rex & REX_R) != 0,
2409 (x->rex & REX_X) != 0,
2410 (x->rex & REX_B) != 0);
2411 for (j = 0; j < x->operands; j++)
2413 fprintf (stdout, " #%d: ", j + 1);
2414 pt (x->types[j]);
2415 fprintf (stdout, "\n");
2416 if (x->types[j].bitfield.reg8
2417 || x->types[j].bitfield.reg16
2418 || x->types[j].bitfield.reg32
2419 || x->types[j].bitfield.reg64
2420 || x->types[j].bitfield.regmmx
2421 || x->types[j].bitfield.regxmm
2422 || x->types[j].bitfield.regymm
2423 || x->types[j].bitfield.sreg2
2424 || x->types[j].bitfield.sreg3
2425 || x->types[j].bitfield.control
2426 || x->types[j].bitfield.debug
2427 || x->types[j].bitfield.test)
2428 fprintf (stdout, "%s\n", x->op[j].regs->reg_name);
2429 if (operand_type_check (x->types[j], imm))
2430 pe (x->op[j].imms);
2431 if (operand_type_check (x->types[j], disp))
2432 pe (x->op[j].disps);
2436 static void
2437 pte (insn_template *t)
2439 unsigned int j;
2440 fprintf (stdout, " %d operands ", t->operands);
2441 fprintf (stdout, "opcode %x ", t->base_opcode);
2442 if (t->extension_opcode != None)
2443 fprintf (stdout, "ext %x ", t->extension_opcode);
2444 if (t->opcode_modifier.d)
2445 fprintf (stdout, "D");
2446 if (t->opcode_modifier.w)
2447 fprintf (stdout, "W");
2448 fprintf (stdout, "\n");
2449 for (j = 0; j < t->operands; j++)
2451 fprintf (stdout, " #%d type ", j + 1);
2452 pt (t->operand_types[j]);
2453 fprintf (stdout, "\n");
2457 static void
2458 pe (expressionS *e)
2460 fprintf (stdout, " operation %d\n", e->X_op);
2461 fprintf (stdout, " add_number %ld (%lx)\n",
2462 (long) e->X_add_number, (long) e->X_add_number);
2463 if (e->X_add_symbol)
2465 fprintf (stdout, " add_symbol ");
2466 ps (e->X_add_symbol);
2467 fprintf (stdout, "\n");
2469 if (e->X_op_symbol)
2471 fprintf (stdout, " op_symbol ");
2472 ps (e->X_op_symbol);
2473 fprintf (stdout, "\n");
2477 static void
2478 ps (symbolS *s)
2480 fprintf (stdout, "%s type %s%s",
2481 S_GET_NAME (s),
2482 S_IS_EXTERNAL (s) ? "EXTERNAL " : "",
2483 segment_name (S_GET_SEGMENT (s)));
2486 static struct type_name
2488 i386_operand_type mask;
2489 const char *name;
2491 const type_names[] =
2493 { OPERAND_TYPE_REG8, "r8" },
2494 { OPERAND_TYPE_REG16, "r16" },
2495 { OPERAND_TYPE_REG32, "r32" },
2496 { OPERAND_TYPE_REG64, "r64" },
2497 { OPERAND_TYPE_IMM8, "i8" },
2498 { OPERAND_TYPE_IMM8, "i8s" },
2499 { OPERAND_TYPE_IMM16, "i16" },
2500 { OPERAND_TYPE_IMM32, "i32" },
2501 { OPERAND_TYPE_IMM32S, "i32s" },
2502 { OPERAND_TYPE_IMM64, "i64" },
2503 { OPERAND_TYPE_IMM1, "i1" },
2504 { OPERAND_TYPE_BASEINDEX, "BaseIndex" },
2505 { OPERAND_TYPE_DISP8, "d8" },
2506 { OPERAND_TYPE_DISP16, "d16" },
2507 { OPERAND_TYPE_DISP32, "d32" },
2508 { OPERAND_TYPE_DISP32S, "d32s" },
2509 { OPERAND_TYPE_DISP64, "d64" },
2510 { OPERAND_TYPE_INOUTPORTREG, "InOutPortReg" },
2511 { OPERAND_TYPE_SHIFTCOUNT, "ShiftCount" },
2512 { OPERAND_TYPE_CONTROL, "control reg" },
2513 { OPERAND_TYPE_TEST, "test reg" },
2514 { OPERAND_TYPE_DEBUG, "debug reg" },
2515 { OPERAND_TYPE_FLOATREG, "FReg" },
2516 { OPERAND_TYPE_FLOATACC, "FAcc" },
2517 { OPERAND_TYPE_SREG2, "SReg2" },
2518 { OPERAND_TYPE_SREG3, "SReg3" },
2519 { OPERAND_TYPE_ACC, "Acc" },
2520 { OPERAND_TYPE_JUMPABSOLUTE, "Jump Absolute" },
2521 { OPERAND_TYPE_REGMMX, "rMMX" },
2522 { OPERAND_TYPE_REGXMM, "rXMM" },
2523 { OPERAND_TYPE_REGYMM, "rYMM" },
2524 { OPERAND_TYPE_ESSEG, "es" },
2527 static void
2528 pt (i386_operand_type t)
2530 unsigned int j;
2531 i386_operand_type a;
2533 for (j = 0; j < ARRAY_SIZE (type_names); j++)
2535 a = operand_type_and (t, type_names[j].mask);
2536 if (!operand_type_all_zero (&a))
2537 fprintf (stdout, "%s, ", type_names[j].name);
2539 fflush (stdout);
2542 #endif /* DEBUG386 */
2544 static bfd_reloc_code_real_type
2545 reloc (unsigned int size,
2546 int pcrel,
2547 int sign,
2548 bfd_reloc_code_real_type other)
2550 if (other != NO_RELOC)
2552 reloc_howto_type *rel;
2554 if (size == 8)
2555 switch (other)
2557 case BFD_RELOC_X86_64_GOT32:
2558 return BFD_RELOC_X86_64_GOT64;
2559 break;
2560 case BFD_RELOC_X86_64_PLTOFF64:
2561 return BFD_RELOC_X86_64_PLTOFF64;
2562 break;
2563 case BFD_RELOC_X86_64_GOTPC32:
2564 other = BFD_RELOC_X86_64_GOTPC64;
2565 break;
2566 case BFD_RELOC_X86_64_GOTPCREL:
2567 other = BFD_RELOC_X86_64_GOTPCREL64;
2568 break;
2569 case BFD_RELOC_X86_64_TPOFF32:
2570 other = BFD_RELOC_X86_64_TPOFF64;
2571 break;
2572 case BFD_RELOC_X86_64_DTPOFF32:
2573 other = BFD_RELOC_X86_64_DTPOFF64;
2574 break;
2575 default:
2576 break;
2579 /* Sign-checking 4-byte relocations in 16-/32-bit code is pointless. */
2580 if (size == 4 && flag_code != CODE_64BIT)
2581 sign = -1;
2583 rel = bfd_reloc_type_lookup (stdoutput, other);
2584 if (!rel)
2585 as_bad (_("unknown relocation (%u)"), other);
2586 else if (size != bfd_get_reloc_size (rel))
2587 as_bad (_("%u-byte relocation cannot be applied to %u-byte field"),
2588 bfd_get_reloc_size (rel),
2589 size);
2590 else if (pcrel && !rel->pc_relative)
2591 as_bad (_("non-pc-relative relocation for pc-relative field"));
2592 else if ((rel->complain_on_overflow == complain_overflow_signed
2593 && !sign)
2594 || (rel->complain_on_overflow == complain_overflow_unsigned
2595 && sign > 0))
2596 as_bad (_("relocated field and relocation type differ in signedness"));
2597 else
2598 return other;
2599 return NO_RELOC;
2602 if (pcrel)
2604 if (!sign)
2605 as_bad (_("there are no unsigned pc-relative relocations"));
2606 switch (size)
2608 case 1: return BFD_RELOC_8_PCREL;
2609 case 2: return BFD_RELOC_16_PCREL;
2610 case 4: return BFD_RELOC_32_PCREL;
2611 case 8: return BFD_RELOC_64_PCREL;
2613 as_bad (_("cannot do %u byte pc-relative relocation"), size);
2615 else
2617 if (sign > 0)
2618 switch (size)
2620 case 4: return BFD_RELOC_X86_64_32S;
2622 else
2623 switch (size)
2625 case 1: return BFD_RELOC_8;
2626 case 2: return BFD_RELOC_16;
2627 case 4: return BFD_RELOC_32;
2628 case 8: return BFD_RELOC_64;
2630 as_bad (_("cannot do %s %u byte relocation"),
2631 sign > 0 ? "signed" : "unsigned", size);
2634 return NO_RELOC;
2637 /* Here we decide which fixups can be adjusted to make them relative to
2638 the beginning of the section instead of the symbol. Basically we need
2639 to make sure that the dynamic relocations are done correctly, so in
2640 some cases we force the original symbol to be used. */
2643 tc_i386_fix_adjustable (fixS *fixP ATTRIBUTE_UNUSED)
2645 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
2646 if (!IS_ELF)
2647 return 1;
2649 /* Don't adjust pc-relative references to merge sections in 64-bit
2650 mode. */
2651 if (use_rela_relocations
2652 && (S_GET_SEGMENT (fixP->fx_addsy)->flags & SEC_MERGE) != 0
2653 && fixP->fx_pcrel)
2654 return 0;
2656 /* The x86_64 GOTPCREL are represented as 32bit PCrel relocations
2657 and changed later by validate_fix. */
2658 if (GOT_symbol && fixP->fx_subsy == GOT_symbol
2659 && fixP->fx_r_type == BFD_RELOC_32_PCREL)
2660 return 0;
2662 /* adjust_reloc_syms doesn't know about the GOT. */
2663 if (fixP->fx_r_type == BFD_RELOC_386_GOTOFF
2664 || fixP->fx_r_type == BFD_RELOC_386_PLT32
2665 || fixP->fx_r_type == BFD_RELOC_386_GOT32
2666 || fixP->fx_r_type == BFD_RELOC_386_TLS_GD
2667 || fixP->fx_r_type == BFD_RELOC_386_TLS_LDM
2668 || fixP->fx_r_type == BFD_RELOC_386_TLS_LDO_32
2669 || fixP->fx_r_type == BFD_RELOC_386_TLS_IE_32
2670 || fixP->fx_r_type == BFD_RELOC_386_TLS_IE
2671 || fixP->fx_r_type == BFD_RELOC_386_TLS_GOTIE
2672 || fixP->fx_r_type == BFD_RELOC_386_TLS_LE_32
2673 || fixP->fx_r_type == BFD_RELOC_386_TLS_LE
2674 || fixP->fx_r_type == BFD_RELOC_386_TLS_GOTDESC
2675 || fixP->fx_r_type == BFD_RELOC_386_TLS_DESC_CALL
2676 || fixP->fx_r_type == BFD_RELOC_X86_64_PLT32
2677 || fixP->fx_r_type == BFD_RELOC_X86_64_GOT32
2678 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTPCREL
2679 || fixP->fx_r_type == BFD_RELOC_X86_64_TLSGD
2680 || fixP->fx_r_type == BFD_RELOC_X86_64_TLSLD
2681 || fixP->fx_r_type == BFD_RELOC_X86_64_DTPOFF32
2682 || fixP->fx_r_type == BFD_RELOC_X86_64_DTPOFF64
2683 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTTPOFF
2684 || fixP->fx_r_type == BFD_RELOC_X86_64_TPOFF32
2685 || fixP->fx_r_type == BFD_RELOC_X86_64_TPOFF64
2686 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTOFF64
2687 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTPC32_TLSDESC
2688 || fixP->fx_r_type == BFD_RELOC_X86_64_TLSDESC_CALL
2689 || fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
2690 || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
2691 return 0;
2692 #endif
2693 return 1;
2696 static int
2697 intel_float_operand (const char *mnemonic)
2699 /* Note that the value returned is meaningful only for opcodes with (memory)
2700 operands, hence the code here is free to improperly handle opcodes that
2701 have no operands (for better performance and smaller code). */
2703 if (mnemonic[0] != 'f')
2704 return 0; /* non-math */
2706 switch (mnemonic[1])
2708 /* fclex, fdecstp, fdisi, femms, feni, fincstp, finit, fsetpm, and
2709 the fs segment override prefix not currently handled because no
2710 call path can make opcodes without operands get here */
2711 case 'i':
2712 return 2 /* integer op */;
2713 case 'l':
2714 if (mnemonic[2] == 'd' && (mnemonic[3] == 'c' || mnemonic[3] == 'e'))
2715 return 3; /* fldcw/fldenv */
2716 break;
2717 case 'n':
2718 if (mnemonic[2] != 'o' /* fnop */)
2719 return 3; /* non-waiting control op */
2720 break;
2721 case 'r':
2722 if (mnemonic[2] == 's')
2723 return 3; /* frstor/frstpm */
2724 break;
2725 case 's':
2726 if (mnemonic[2] == 'a')
2727 return 3; /* fsave */
2728 if (mnemonic[2] == 't')
2730 switch (mnemonic[3])
2732 case 'c': /* fstcw */
2733 case 'd': /* fstdw */
2734 case 'e': /* fstenv */
2735 case 's': /* fsts[gw] */
2736 return 3;
2739 break;
2740 case 'x':
2741 if (mnemonic[2] == 'r' || mnemonic[2] == 's')
2742 return 0; /* fxsave/fxrstor are not really math ops */
2743 break;
2746 return 1;
2749 /* Build the VEX prefix. */
2751 static void
2752 build_vex_prefix (const insn_template *t)
2754 unsigned int register_specifier;
2755 unsigned int implied_prefix;
2756 unsigned int vector_length;
2758 /* Check register specifier. */
2759 if (i.vex.register_specifier)
2761 register_specifier = i.vex.register_specifier->reg_num;
2762 if ((i.vex.register_specifier->reg_flags & RegRex))
2763 register_specifier += 8;
2764 register_specifier = ~register_specifier & 0xf;
2766 else
2767 register_specifier = 0xf;
2769 /* Use 2-byte VEX prefix by swappping destination and source
2770 operand. */
2771 if (!i.swap_operand
2772 && i.operands == i.reg_operands
2773 && i.tm.opcode_modifier.vexopcode == VEX0F
2774 && i.tm.opcode_modifier.s
2775 && i.rex == REX_B)
2777 unsigned int xchg = i.operands - 1;
2778 union i386_op temp_op;
2779 i386_operand_type temp_type;
2781 temp_type = i.types[xchg];
2782 i.types[xchg] = i.types[0];
2783 i.types[0] = temp_type;
2784 temp_op = i.op[xchg];
2785 i.op[xchg] = i.op[0];
2786 i.op[0] = temp_op;
2788 gas_assert (i.rm.mode == 3);
2790 i.rex = REX_R;
2791 xchg = i.rm.regmem;
2792 i.rm.regmem = i.rm.reg;
2793 i.rm.reg = xchg;
2795 /* Use the next insn. */
2796 i.tm = t[1];
2799 if (i.tm.opcode_modifier.vex == VEXScalar)
2800 vector_length = avxscalar;
2801 else
2802 vector_length = i.tm.opcode_modifier.vex == VEX256 ? 1 : 0;
2804 switch ((i.tm.base_opcode >> 8) & 0xff)
2806 case 0:
2807 implied_prefix = 0;
2808 break;
2809 case DATA_PREFIX_OPCODE:
2810 implied_prefix = 1;
2811 break;
2812 case REPE_PREFIX_OPCODE:
2813 implied_prefix = 2;
2814 break;
2815 case REPNE_PREFIX_OPCODE:
2816 implied_prefix = 3;
2817 break;
2818 default:
2819 abort ();
2822 /* Use 2-byte VEX prefix if possible. */
2823 if (i.tm.opcode_modifier.vexopcode == VEX0F
2824 && i.tm.opcode_modifier.vexw != VEXW1
2825 && (i.rex & (REX_W | REX_X | REX_B)) == 0)
2827 /* 2-byte VEX prefix. */
2828 unsigned int r;
2830 i.vex.length = 2;
2831 i.vex.bytes[0] = 0xc5;
2833 /* Check the REX.R bit. */
2834 r = (i.rex & REX_R) ? 0 : 1;
2835 i.vex.bytes[1] = (r << 7
2836 | register_specifier << 3
2837 | vector_length << 2
2838 | implied_prefix);
2840 else
2842 /* 3-byte VEX prefix. */
2843 unsigned int m, w;
2845 i.vex.length = 3;
2847 switch (i.tm.opcode_modifier.vexopcode)
2849 case VEX0F:
2850 m = 0x1;
2851 i.vex.bytes[0] = 0xc4;
2852 break;
2853 case VEX0F38:
2854 m = 0x2;
2855 i.vex.bytes[0] = 0xc4;
2856 break;
2857 case VEX0F3A:
2858 m = 0x3;
2859 i.vex.bytes[0] = 0xc4;
2860 break;
2861 case XOP08:
2862 m = 0x8;
2863 i.vex.bytes[0] = 0x8f;
2864 break;
2865 case XOP09:
2866 m = 0x9;
2867 i.vex.bytes[0] = 0x8f;
2868 break;
2869 case XOP0A:
2870 m = 0xa;
2871 i.vex.bytes[0] = 0x8f;
2872 break;
2873 default:
2874 abort ();
2877 /* The high 3 bits of the second VEX byte are 1's compliment
2878 of RXB bits from REX. */
2879 i.vex.bytes[1] = (~i.rex & 0x7) << 5 | m;
2881 /* Check the REX.W bit. */
2882 w = (i.rex & REX_W) ? 1 : 0;
2883 if (i.tm.opcode_modifier.vexw)
2885 if (w)
2886 abort ();
2888 if (i.tm.opcode_modifier.vexw == VEXW1)
2889 w = 1;
2892 i.vex.bytes[2] = (w << 7
2893 | register_specifier << 3
2894 | vector_length << 2
2895 | implied_prefix);
2899 static void
2900 process_immext (void)
2902 expressionS *exp;
2904 if (i.tm.cpu_flags.bitfield.cpusse3 && i.operands > 0)
2906 /* SSE3 Instructions have the fixed operands with an opcode
2907 suffix which is coded in the same place as an 8-bit immediate
2908 field would be. Here we check those operands and remove them
2909 afterwards. */
2910 unsigned int x;
2912 for (x = 0; x < i.operands; x++)
2913 if (i.op[x].regs->reg_num != x)
2914 as_bad (_("can't use register '%s%s' as operand %d in '%s'."),
2915 register_prefix, i.op[x].regs->reg_name, x + 1,
2916 i.tm.name);
2918 i.operands = 0;
2921 /* These AMD 3DNow! and SSE2 instructions have an opcode suffix
2922 which is coded in the same place as an 8-bit immediate field
2923 would be. Here we fake an 8-bit immediate operand from the
2924 opcode suffix stored in tm.extension_opcode.
2926 AVX instructions also use this encoding, for some of
2927 3 argument instructions. */
2929 gas_assert (i.imm_operands == 0
2930 && (i.operands <= 2
2931 || (i.tm.opcode_modifier.vex
2932 && i.operands <= 4)));
2934 exp = &im_expressions[i.imm_operands++];
2935 i.op[i.operands].imms = exp;
2936 i.types[i.operands] = imm8;
2937 i.operands++;
2938 exp->X_op = O_constant;
2939 exp->X_add_number = i.tm.extension_opcode;
2940 i.tm.extension_opcode = None;
2943 /* This is the guts of the machine-dependent assembler. LINE points to a
2944 machine dependent instruction. This function is supposed to emit
2945 the frags/bytes it assembles to. */
2947 void
2948 md_assemble (char *line)
2950 unsigned int j;
2951 char mnemonic[MAX_MNEM_SIZE];
2952 const insn_template *t;
2954 /* Initialize globals. */
2955 memset (&i, '\0', sizeof (i));
2956 for (j = 0; j < MAX_OPERANDS; j++)
2957 i.reloc[j] = NO_RELOC;
2958 memset (disp_expressions, '\0', sizeof (disp_expressions));
2959 memset (im_expressions, '\0', sizeof (im_expressions));
2960 save_stack_p = save_stack;
2962 /* First parse an instruction mnemonic & call i386_operand for the operands.
2963 We assume that the scrubber has arranged it so that line[0] is the valid
2964 start of a (possibly prefixed) mnemonic. */
2966 line = parse_insn (line, mnemonic);
2967 if (line == NULL)
2968 return;
2970 line = parse_operands (line, mnemonic);
2971 this_operand = -1;
2972 if (line == NULL)
2973 return;
2975 /* Now we've parsed the mnemonic into a set of templates, and have the
2976 operands at hand. */
2978 /* All intel opcodes have reversed operands except for "bound" and
2979 "enter". We also don't reverse intersegment "jmp" and "call"
2980 instructions with 2 immediate operands so that the immediate segment
2981 precedes the offset, as it does when in AT&T mode. */
2982 if (intel_syntax
2983 && i.operands > 1
2984 && (strcmp (mnemonic, "bound") != 0)
2985 && (strcmp (mnemonic, "invlpga") != 0)
2986 && !(operand_type_check (i.types[0], imm)
2987 && operand_type_check (i.types[1], imm)))
2988 swap_operands ();
2990 /* The order of the immediates should be reversed
2991 for 2 immediates extrq and insertq instructions */
2992 if (i.imm_operands == 2
2993 && (strcmp (mnemonic, "extrq") == 0
2994 || strcmp (mnemonic, "insertq") == 0))
2995 swap_2_operands (0, 1);
2997 if (i.imm_operands)
2998 optimize_imm ();
3000 /* Don't optimize displacement for movabs since it only takes 64bit
3001 displacement. */
3002 if (i.disp_operands
3003 && !i.disp32_encoding
3004 && (flag_code != CODE_64BIT
3005 || strcmp (mnemonic, "movabs") != 0))
3006 optimize_disp ();
3008 /* Next, we find a template that matches the given insn,
3009 making sure the overlap of the given operands types is consistent
3010 with the template operand types. */
3012 if (!(t = match_template ()))
3013 return;
3015 if (sse_check != sse_check_none
3016 && !i.tm.opcode_modifier.noavx
3017 && (i.tm.cpu_flags.bitfield.cpusse
3018 || i.tm.cpu_flags.bitfield.cpusse2
3019 || i.tm.cpu_flags.bitfield.cpusse3
3020 || i.tm.cpu_flags.bitfield.cpussse3
3021 || i.tm.cpu_flags.bitfield.cpusse4_1
3022 || i.tm.cpu_flags.bitfield.cpusse4_2))
3024 (sse_check == sse_check_warning
3025 ? as_warn
3026 : as_bad) (_("SSE instruction `%s' is used"), i.tm.name);
3029 /* Zap movzx and movsx suffix. The suffix has been set from
3030 "word ptr" or "byte ptr" on the source operand in Intel syntax
3031 or extracted from mnemonic in AT&T syntax. But we'll use
3032 the destination register to choose the suffix for encoding. */
3033 if ((i.tm.base_opcode & ~9) == 0x0fb6)
3035 /* In Intel syntax, there must be a suffix. In AT&T syntax, if
3036 there is no suffix, the default will be byte extension. */
3037 if (i.reg_operands != 2
3038 && !i.suffix
3039 && intel_syntax)
3040 as_bad (_("ambiguous operand size for `%s'"), i.tm.name);
3042 i.suffix = 0;
3045 if (i.tm.opcode_modifier.fwait)
3046 if (!add_prefix (FWAIT_OPCODE))
3047 return;
3049 /* Check for lock without a lockable instruction. Destination operand
3050 must be memory unless it is xchg (0x86). */
3051 if (i.prefix[LOCK_PREFIX]
3052 && (!i.tm.opcode_modifier.islockable
3053 || i.mem_operands == 0
3054 || (i.tm.base_opcode != 0x86
3055 && !operand_type_check (i.types[i.operands - 1], anymem))))
3057 as_bad (_("expecting lockable instruction after `lock'"));
3058 return;
3061 /* Check string instruction segment overrides. */
3062 if (i.tm.opcode_modifier.isstring && i.mem_operands != 0)
3064 if (!check_string ())
3065 return;
3066 i.disp_operands = 0;
3069 if (!process_suffix ())
3070 return;
3072 /* Update operand types. */
3073 for (j = 0; j < i.operands; j++)
3074 i.types[j] = operand_type_and (i.types[j], i.tm.operand_types[j]);
3076 /* Make still unresolved immediate matches conform to size of immediate
3077 given in i.suffix. */
3078 if (!finalize_imm ())
3079 return;
3081 if (i.types[0].bitfield.imm1)
3082 i.imm_operands = 0; /* kludge for shift insns. */
3084 /* We only need to check those implicit registers for instructions
3085 with 3 operands or less. */
3086 if (i.operands <= 3)
3087 for (j = 0; j < i.operands; j++)
3088 if (i.types[j].bitfield.inoutportreg
3089 || i.types[j].bitfield.shiftcount
3090 || i.types[j].bitfield.acc
3091 || i.types[j].bitfield.floatacc)
3092 i.reg_operands--;
3094 /* ImmExt should be processed after SSE2AVX. */
3095 if (!i.tm.opcode_modifier.sse2avx
3096 && i.tm.opcode_modifier.immext)
3097 process_immext ();
3099 /* For insns with operands there are more diddles to do to the opcode. */
3100 if (i.operands)
3102 if (!process_operands ())
3103 return;
3105 else if (!quiet_warnings && i.tm.opcode_modifier.ugh)
3107 /* UnixWare fsub no args is alias for fsubp, fadd -> faddp, etc. */
3108 as_warn (_("translating to `%sp'"), i.tm.name);
3111 if (i.tm.opcode_modifier.vex)
3112 build_vex_prefix (t);
3114 /* Handle conversion of 'int $3' --> special int3 insn. XOP or FMA4
3115 instructions may define INT_OPCODE as well, so avoid this corner
3116 case for those instructions that use MODRM. */
3117 if (i.tm.base_opcode == INT_OPCODE
3118 && !i.tm.opcode_modifier.modrm
3119 && i.op[0].imms->X_add_number == 3)
3121 i.tm.base_opcode = INT3_OPCODE;
3122 i.imm_operands = 0;
3125 if ((i.tm.opcode_modifier.jump
3126 || i.tm.opcode_modifier.jumpbyte
3127 || i.tm.opcode_modifier.jumpdword)
3128 && i.op[0].disps->X_op == O_constant)
3130 /* Convert "jmp constant" (and "call constant") to a jump (call) to
3131 the absolute address given by the constant. Since ix86 jumps and
3132 calls are pc relative, we need to generate a reloc. */
3133 i.op[0].disps->X_add_symbol = &abs_symbol;
3134 i.op[0].disps->X_op = O_symbol;
3137 if (i.tm.opcode_modifier.rex64)
3138 i.rex |= REX_W;
3140 /* For 8 bit registers we need an empty rex prefix. Also if the
3141 instruction already has a prefix, we need to convert old
3142 registers to new ones. */
3144 if ((i.types[0].bitfield.reg8
3145 && (i.op[0].regs->reg_flags & RegRex64) != 0)
3146 || (i.types[1].bitfield.reg8
3147 && (i.op[1].regs->reg_flags & RegRex64) != 0)
3148 || ((i.types[0].bitfield.reg8
3149 || i.types[1].bitfield.reg8)
3150 && i.rex != 0))
3152 int x;
3154 i.rex |= REX_OPCODE;
3155 for (x = 0; x < 2; x++)
3157 /* Look for 8 bit operand that uses old registers. */
3158 if (i.types[x].bitfield.reg8
3159 && (i.op[x].regs->reg_flags & RegRex64) == 0)
3161 /* In case it is "hi" register, give up. */
3162 if (i.op[x].regs->reg_num > 3)
3163 as_bad (_("can't encode register '%s%s' in an "
3164 "instruction requiring REX prefix."),
3165 register_prefix, i.op[x].regs->reg_name);
3167 /* Otherwise it is equivalent to the extended register.
3168 Since the encoding doesn't change this is merely
3169 cosmetic cleanup for debug output. */
3171 i.op[x].regs = i.op[x].regs + 8;
3176 if (i.rex != 0)
3177 add_prefix (REX_OPCODE | i.rex);
3179 /* We are ready to output the insn. */
3180 output_insn ();
3183 static char *
3184 parse_insn (char *line, char *mnemonic)
3186 char *l = line;
3187 char *token_start = l;
3188 char *mnem_p;
3189 int supported;
3190 const insn_template *t;
3191 char *dot_p = NULL;
3193 /* Non-zero if we found a prefix only acceptable with string insns. */
3194 const char *expecting_string_instruction = NULL;
3196 while (1)
3198 mnem_p = mnemonic;
3199 while ((*mnem_p = mnemonic_chars[(unsigned char) *l]) != 0)
3201 if (*mnem_p == '.')
3202 dot_p = mnem_p;
3203 mnem_p++;
3204 if (mnem_p >= mnemonic + MAX_MNEM_SIZE)
3206 as_bad (_("no such instruction: `%s'"), token_start);
3207 return NULL;
3209 l++;
3211 if (!is_space_char (*l)
3212 && *l != END_OF_INSN
3213 && (intel_syntax
3214 || (*l != PREFIX_SEPARATOR
3215 && *l != ',')))
3217 as_bad (_("invalid character %s in mnemonic"),
3218 output_invalid (*l));
3219 return NULL;
3221 if (token_start == l)
3223 if (!intel_syntax && *l == PREFIX_SEPARATOR)
3224 as_bad (_("expecting prefix; got nothing"));
3225 else
3226 as_bad (_("expecting mnemonic; got nothing"));
3227 return NULL;
3230 /* Look up instruction (or prefix) via hash table. */
3231 current_templates = (const templates *) hash_find (op_hash, mnemonic);
3233 if (*l != END_OF_INSN
3234 && (!is_space_char (*l) || l[1] != END_OF_INSN)
3235 && current_templates
3236 && current_templates->start->opcode_modifier.isprefix)
3238 if (!cpu_flags_check_cpu64 (current_templates->start->cpu_flags))
3240 as_bad ((flag_code != CODE_64BIT
3241 ? _("`%s' is only supported in 64-bit mode")
3242 : _("`%s' is not supported in 64-bit mode")),
3243 current_templates->start->name);
3244 return NULL;
3246 /* If we are in 16-bit mode, do not allow addr16 or data16.
3247 Similarly, in 32-bit mode, do not allow addr32 or data32. */
3248 if ((current_templates->start->opcode_modifier.size16
3249 || current_templates->start->opcode_modifier.size32)
3250 && flag_code != CODE_64BIT
3251 && (current_templates->start->opcode_modifier.size32
3252 ^ (flag_code == CODE_16BIT)))
3254 as_bad (_("redundant %s prefix"),
3255 current_templates->start->name);
3256 return NULL;
3258 /* Add prefix, checking for repeated prefixes. */
3259 switch (add_prefix (current_templates->start->base_opcode))
3261 case PREFIX_EXIST:
3262 return NULL;
3263 case PREFIX_REP:
3264 expecting_string_instruction = current_templates->start->name;
3265 break;
3266 default:
3267 break;
3269 /* Skip past PREFIX_SEPARATOR and reset token_start. */
3270 token_start = ++l;
3272 else
3273 break;
3276 if (!current_templates)
3278 /* Check if we should swap operand or force 32bit displacement in
3279 encoding. */
3280 if (mnem_p - 2 == dot_p && dot_p[1] == 's')
3281 i.swap_operand = 1;
3282 else if (mnem_p - 4 == dot_p
3283 && dot_p[1] == 'd'
3284 && dot_p[2] == '3'
3285 && dot_p[3] == '2')
3286 i.disp32_encoding = 1;
3287 else
3288 goto check_suffix;
3289 mnem_p = dot_p;
3290 *dot_p = '\0';
3291 current_templates = (const templates *) hash_find (op_hash, mnemonic);
3294 if (!current_templates)
3296 check_suffix:
3297 /* See if we can get a match by trimming off a suffix. */
3298 switch (mnem_p[-1])
3300 case WORD_MNEM_SUFFIX:
3301 if (intel_syntax && (intel_float_operand (mnemonic) & 2))
3302 i.suffix = SHORT_MNEM_SUFFIX;
3303 else
3304 case BYTE_MNEM_SUFFIX:
3305 case QWORD_MNEM_SUFFIX:
3306 i.suffix = mnem_p[-1];
3307 mnem_p[-1] = '\0';
3308 current_templates = (const templates *) hash_find (op_hash,
3309 mnemonic);
3310 break;
3311 case SHORT_MNEM_SUFFIX:
3312 case LONG_MNEM_SUFFIX:
3313 if (!intel_syntax)
3315 i.suffix = mnem_p[-1];
3316 mnem_p[-1] = '\0';
3317 current_templates = (const templates *) hash_find (op_hash,
3318 mnemonic);
3320 break;
3322 /* Intel Syntax. */
3323 case 'd':
3324 if (intel_syntax)
3326 if (intel_float_operand (mnemonic) == 1)
3327 i.suffix = SHORT_MNEM_SUFFIX;
3328 else
3329 i.suffix = LONG_MNEM_SUFFIX;
3330 mnem_p[-1] = '\0';
3331 current_templates = (const templates *) hash_find (op_hash,
3332 mnemonic);
3334 break;
3336 if (!current_templates)
3338 as_bad (_("no such instruction: `%s'"), token_start);
3339 return NULL;
3343 if (current_templates->start->opcode_modifier.jump
3344 || current_templates->start->opcode_modifier.jumpbyte)
3346 /* Check for a branch hint. We allow ",pt" and ",pn" for
3347 predict taken and predict not taken respectively.
3348 I'm not sure that branch hints actually do anything on loop
3349 and jcxz insns (JumpByte) for current Pentium4 chips. They
3350 may work in the future and it doesn't hurt to accept them
3351 now. */
3352 if (l[0] == ',' && l[1] == 'p')
3354 if (l[2] == 't')
3356 if (!add_prefix (DS_PREFIX_OPCODE))
3357 return NULL;
3358 l += 3;
3360 else if (l[2] == 'n')
3362 if (!add_prefix (CS_PREFIX_OPCODE))
3363 return NULL;
3364 l += 3;
3368 /* Any other comma loses. */
3369 if (*l == ',')
3371 as_bad (_("invalid character %s in mnemonic"),
3372 output_invalid (*l));
3373 return NULL;
3376 /* Check if instruction is supported on specified architecture. */
3377 supported = 0;
3378 for (t = current_templates->start; t < current_templates->end; ++t)
3380 supported |= cpu_flags_match (t);
3381 if (supported == CPU_FLAGS_PERFECT_MATCH)
3382 goto skip;
3385 if (!(supported & CPU_FLAGS_64BIT_MATCH))
3387 as_bad (flag_code == CODE_64BIT
3388 ? _("`%s' is not supported in 64-bit mode")
3389 : _("`%s' is only supported in 64-bit mode"),
3390 current_templates->start->name);
3391 return NULL;
3393 if (supported != CPU_FLAGS_PERFECT_MATCH)
3395 as_bad (_("`%s' is not supported on `%s%s'"),
3396 current_templates->start->name,
3397 cpu_arch_name ? cpu_arch_name : default_arch,
3398 cpu_sub_arch_name ? cpu_sub_arch_name : "");
3399 return NULL;
3402 skip:
3403 if (!cpu_arch_flags.bitfield.cpui386
3404 && (flag_code != CODE_16BIT))
3406 as_warn (_("use .code16 to ensure correct addressing mode"));
3409 /* Check for rep/repne without a string instruction. */
3410 if (expecting_string_instruction)
3412 static templates override;
3414 for (t = current_templates->start; t < current_templates->end; ++t)
3415 if (t->opcode_modifier.isstring)
3416 break;
3417 if (t >= current_templates->end)
3419 as_bad (_("expecting string instruction after `%s'"),
3420 expecting_string_instruction);
3421 return NULL;
3423 for (override.start = t; t < current_templates->end; ++t)
3424 if (!t->opcode_modifier.isstring)
3425 break;
3426 override.end = t;
3427 current_templates = &override;
3430 return l;
3433 static char *
3434 parse_operands (char *l, const char *mnemonic)
3436 char *token_start;
3438 /* 1 if operand is pending after ','. */
3439 unsigned int expecting_operand = 0;
3441 /* Non-zero if operand parens not balanced. */
3442 unsigned int paren_not_balanced;
3444 while (*l != END_OF_INSN)
3446 /* Skip optional white space before operand. */
3447 if (is_space_char (*l))
3448 ++l;
3449 if (!is_operand_char (*l) && *l != END_OF_INSN)
3451 as_bad (_("invalid character %s before operand %d"),
3452 output_invalid (*l),
3453 i.operands + 1);
3454 return NULL;
3456 token_start = l; /* after white space */
3457 paren_not_balanced = 0;
3458 while (paren_not_balanced || *l != ',')
3460 if (*l == END_OF_INSN)
3462 if (paren_not_balanced)
3464 if (!intel_syntax)
3465 as_bad (_("unbalanced parenthesis in operand %d."),
3466 i.operands + 1);
3467 else
3468 as_bad (_("unbalanced brackets in operand %d."),
3469 i.operands + 1);
3470 return NULL;
3472 else
3473 break; /* we are done */
3475 else if (!is_operand_char (*l) && !is_space_char (*l))
3477 as_bad (_("invalid character %s in operand %d"),
3478 output_invalid (*l),
3479 i.operands + 1);
3480 return NULL;
3482 if (!intel_syntax)
3484 if (*l == '(')
3485 ++paren_not_balanced;
3486 if (*l == ')')
3487 --paren_not_balanced;
3489 else
3491 if (*l == '[')
3492 ++paren_not_balanced;
3493 if (*l == ']')
3494 --paren_not_balanced;
3496 l++;
3498 if (l != token_start)
3499 { /* Yes, we've read in another operand. */
3500 unsigned int operand_ok;
3501 this_operand = i.operands++;
3502 i.types[this_operand].bitfield.unspecified = 1;
3503 if (i.operands > MAX_OPERANDS)
3505 as_bad (_("spurious operands; (%d operands/instruction max)"),
3506 MAX_OPERANDS);
3507 return NULL;
3509 /* Now parse operand adding info to 'i' as we go along. */
3510 END_STRING_AND_SAVE (l);
3512 if (intel_syntax)
3513 operand_ok =
3514 i386_intel_operand (token_start,
3515 intel_float_operand (mnemonic));
3516 else
3517 operand_ok = i386_att_operand (token_start);
3519 RESTORE_END_STRING (l);
3520 if (!operand_ok)
3521 return NULL;
3523 else
3525 if (expecting_operand)
3527 expecting_operand_after_comma:
3528 as_bad (_("expecting operand after ','; got nothing"));
3529 return NULL;
3531 if (*l == ',')
3533 as_bad (_("expecting operand before ','; got nothing"));
3534 return NULL;
3538 /* Now *l must be either ',' or END_OF_INSN. */
3539 if (*l == ',')
3541 if (*++l == END_OF_INSN)
3543 /* Just skip it, if it's \n complain. */
3544 goto expecting_operand_after_comma;
3546 expecting_operand = 1;
3549 return l;
3552 static void
3553 swap_2_operands (int xchg1, int xchg2)
3555 union i386_op temp_op;
3556 i386_operand_type temp_type;
3557 enum bfd_reloc_code_real temp_reloc;
3559 temp_type = i.types[xchg2];
3560 i.types[xchg2] = i.types[xchg1];
3561 i.types[xchg1] = temp_type;
3562 temp_op = i.op[xchg2];
3563 i.op[xchg2] = i.op[xchg1];
3564 i.op[xchg1] = temp_op;
3565 temp_reloc = i.reloc[xchg2];
3566 i.reloc[xchg2] = i.reloc[xchg1];
3567 i.reloc[xchg1] = temp_reloc;
3570 static void
3571 swap_operands (void)
3573 switch (i.operands)
3575 case 5:
3576 case 4:
3577 swap_2_operands (1, i.operands - 2);
3578 case 3:
3579 case 2:
3580 swap_2_operands (0, i.operands - 1);
3581 break;
3582 default:
3583 abort ();
3586 if (i.mem_operands == 2)
3588 const seg_entry *temp_seg;
3589 temp_seg = i.seg[0];
3590 i.seg[0] = i.seg[1];
3591 i.seg[1] = temp_seg;
3595 /* Try to ensure constant immediates are represented in the smallest
3596 opcode possible. */
3597 static void
3598 optimize_imm (void)
3600 char guess_suffix = 0;
3601 int op;
3603 if (i.suffix)
3604 guess_suffix = i.suffix;
3605 else if (i.reg_operands)
3607 /* Figure out a suffix from the last register operand specified.
3608 We can't do this properly yet, ie. excluding InOutPortReg,
3609 but the following works for instructions with immediates.
3610 In any case, we can't set i.suffix yet. */
3611 for (op = i.operands; --op >= 0;)
3612 if (i.types[op].bitfield.reg8)
3614 guess_suffix = BYTE_MNEM_SUFFIX;
3615 break;
3617 else if (i.types[op].bitfield.reg16)
3619 guess_suffix = WORD_MNEM_SUFFIX;
3620 break;
3622 else if (i.types[op].bitfield.reg32)
3624 guess_suffix = LONG_MNEM_SUFFIX;
3625 break;
3627 else if (i.types[op].bitfield.reg64)
3629 guess_suffix = QWORD_MNEM_SUFFIX;
3630 break;
3633 else if ((flag_code == CODE_16BIT) ^ (i.prefix[DATA_PREFIX] != 0))
3634 guess_suffix = WORD_MNEM_SUFFIX;
3636 for (op = i.operands; --op >= 0;)
3637 if (operand_type_check (i.types[op], imm))
3639 switch (i.op[op].imms->X_op)
3641 case O_constant:
3642 /* If a suffix is given, this operand may be shortened. */
3643 switch (guess_suffix)
3645 case LONG_MNEM_SUFFIX:
3646 i.types[op].bitfield.imm32 = 1;
3647 i.types[op].bitfield.imm64 = 1;
3648 break;
3649 case WORD_MNEM_SUFFIX:
3650 i.types[op].bitfield.imm16 = 1;
3651 i.types[op].bitfield.imm32 = 1;
3652 i.types[op].bitfield.imm32s = 1;
3653 i.types[op].bitfield.imm64 = 1;
3654 break;
3655 case BYTE_MNEM_SUFFIX:
3656 i.types[op].bitfield.imm8 = 1;
3657 i.types[op].bitfield.imm8s = 1;
3658 i.types[op].bitfield.imm16 = 1;
3659 i.types[op].bitfield.imm32 = 1;
3660 i.types[op].bitfield.imm32s = 1;
3661 i.types[op].bitfield.imm64 = 1;
3662 break;
3665 /* If this operand is at most 16 bits, convert it
3666 to a signed 16 bit number before trying to see
3667 whether it will fit in an even smaller size.
3668 This allows a 16-bit operand such as $0xffe0 to
3669 be recognised as within Imm8S range. */
3670 if ((i.types[op].bitfield.imm16)
3671 && (i.op[op].imms->X_add_number & ~(offsetT) 0xffff) == 0)
3673 i.op[op].imms->X_add_number =
3674 (((i.op[op].imms->X_add_number & 0xffff) ^ 0x8000) - 0x8000);
3676 if ((i.types[op].bitfield.imm32)
3677 && ((i.op[op].imms->X_add_number & ~(((offsetT) 2 << 31) - 1))
3678 == 0))
3680 i.op[op].imms->X_add_number = ((i.op[op].imms->X_add_number
3681 ^ ((offsetT) 1 << 31))
3682 - ((offsetT) 1 << 31));
3684 i.types[op]
3685 = operand_type_or (i.types[op],
3686 smallest_imm_type (i.op[op].imms->X_add_number));
3688 /* We must avoid matching of Imm32 templates when 64bit
3689 only immediate is available. */
3690 if (guess_suffix == QWORD_MNEM_SUFFIX)
3691 i.types[op].bitfield.imm32 = 0;
3692 break;
3694 case O_absent:
3695 case O_register:
3696 abort ();
3698 /* Symbols and expressions. */
3699 default:
3700 /* Convert symbolic operand to proper sizes for matching, but don't
3701 prevent matching a set of insns that only supports sizes other
3702 than those matching the insn suffix. */
3704 i386_operand_type mask, allowed;
3705 const insn_template *t;
3707 operand_type_set (&mask, 0);
3708 operand_type_set (&allowed, 0);
3710 for (t = current_templates->start;
3711 t < current_templates->end;
3712 ++t)
3713 allowed = operand_type_or (allowed,
3714 t->operand_types[op]);
3715 switch (guess_suffix)
3717 case QWORD_MNEM_SUFFIX:
3718 mask.bitfield.imm64 = 1;
3719 mask.bitfield.imm32s = 1;
3720 break;
3721 case LONG_MNEM_SUFFIX:
3722 mask.bitfield.imm32 = 1;
3723 break;
3724 case WORD_MNEM_SUFFIX:
3725 mask.bitfield.imm16 = 1;
3726 break;
3727 case BYTE_MNEM_SUFFIX:
3728 mask.bitfield.imm8 = 1;
3729 break;
3730 default:
3731 break;
3733 allowed = operand_type_and (mask, allowed);
3734 if (!operand_type_all_zero (&allowed))
3735 i.types[op] = operand_type_and (i.types[op], mask);
3737 break;
3742 /* Try to use the smallest displacement type too. */
3743 static void
3744 optimize_disp (void)
3746 int op;
3748 for (op = i.operands; --op >= 0;)
3749 if (operand_type_check (i.types[op], disp))
3751 if (i.op[op].disps->X_op == O_constant)
3753 offsetT op_disp = i.op[op].disps->X_add_number;
3755 if (i.types[op].bitfield.disp16
3756 && (op_disp & ~(offsetT) 0xffff) == 0)
3758 /* If this operand is at most 16 bits, convert
3759 to a signed 16 bit number and don't use 64bit
3760 displacement. */
3761 op_disp = (((op_disp & 0xffff) ^ 0x8000) - 0x8000);
3762 i.types[op].bitfield.disp64 = 0;
3764 if (i.types[op].bitfield.disp32
3765 && (op_disp & ~(((offsetT) 2 << 31) - 1)) == 0)
3767 /* If this operand is at most 32 bits, convert
3768 to a signed 32 bit number and don't use 64bit
3769 displacement. */
3770 op_disp &= (((offsetT) 2 << 31) - 1);
3771 op_disp = (op_disp ^ ((offsetT) 1 << 31)) - ((addressT) 1 << 31);
3772 i.types[op].bitfield.disp64 = 0;
3774 if (!op_disp && i.types[op].bitfield.baseindex)
3776 i.types[op].bitfield.disp8 = 0;
3777 i.types[op].bitfield.disp16 = 0;
3778 i.types[op].bitfield.disp32 = 0;
3779 i.types[op].bitfield.disp32s = 0;
3780 i.types[op].bitfield.disp64 = 0;
3781 i.op[op].disps = 0;
3782 i.disp_operands--;
3784 else if (flag_code == CODE_64BIT)
3786 if (fits_in_signed_long (op_disp))
3788 i.types[op].bitfield.disp64 = 0;
3789 i.types[op].bitfield.disp32s = 1;
3791 if (i.prefix[ADDR_PREFIX]
3792 && fits_in_unsigned_long (op_disp))
3793 i.types[op].bitfield.disp32 = 1;
3795 if ((i.types[op].bitfield.disp32
3796 || i.types[op].bitfield.disp32s
3797 || i.types[op].bitfield.disp16)
3798 && fits_in_signed_byte (op_disp))
3799 i.types[op].bitfield.disp8 = 1;
3801 else if (i.reloc[op] == BFD_RELOC_386_TLS_DESC_CALL
3802 || i.reloc[op] == BFD_RELOC_X86_64_TLSDESC_CALL)
3804 fix_new_exp (frag_now, frag_more (0) - frag_now->fr_literal, 0,
3805 i.op[op].disps, 0, i.reloc[op]);
3806 i.types[op].bitfield.disp8 = 0;
3807 i.types[op].bitfield.disp16 = 0;
3808 i.types[op].bitfield.disp32 = 0;
3809 i.types[op].bitfield.disp32s = 0;
3810 i.types[op].bitfield.disp64 = 0;
3812 else
3813 /* We only support 64bit displacement on constants. */
3814 i.types[op].bitfield.disp64 = 0;
3818 /* Check if operands are valid for the instruction. Update VEX
3819 operand types. */
3821 static int
3822 VEX_check_operands (const insn_template *t)
3824 if (!t->opcode_modifier.vex)
3825 return 0;
3827 /* Only check VEX_Imm4, which must be the first operand. */
3828 if (t->operand_types[0].bitfield.vec_imm4)
3830 if (i.op[0].imms->X_op != O_constant
3831 || !fits_in_imm4 (i.op[0].imms->X_add_number))
3833 i.error = bad_imm4;
3834 return 1;
3837 /* Turn off Imm8 so that update_imm won't complain. */
3838 i.types[0] = vec_imm4;
3841 return 0;
3844 static const insn_template *
3845 match_template (void)
3847 /* Points to template once we've found it. */
3848 const insn_template *t;
3849 i386_operand_type overlap0, overlap1, overlap2, overlap3;
3850 i386_operand_type overlap4;
3851 unsigned int found_reverse_match;
3852 i386_opcode_modifier suffix_check;
3853 i386_operand_type operand_types [MAX_OPERANDS];
3854 int addr_prefix_disp;
3855 unsigned int j;
3856 unsigned int found_cpu_match;
3857 unsigned int check_register;
3859 #if MAX_OPERANDS != 5
3860 # error "MAX_OPERANDS must be 5."
3861 #endif
3863 found_reverse_match = 0;
3864 addr_prefix_disp = -1;
3866 memset (&suffix_check, 0, sizeof (suffix_check));
3867 if (i.suffix == BYTE_MNEM_SUFFIX)
3868 suffix_check.no_bsuf = 1;
3869 else if (i.suffix == WORD_MNEM_SUFFIX)
3870 suffix_check.no_wsuf = 1;
3871 else if (i.suffix == SHORT_MNEM_SUFFIX)
3872 suffix_check.no_ssuf = 1;
3873 else if (i.suffix == LONG_MNEM_SUFFIX)
3874 suffix_check.no_lsuf = 1;
3875 else if (i.suffix == QWORD_MNEM_SUFFIX)
3876 suffix_check.no_qsuf = 1;
3877 else if (i.suffix == LONG_DOUBLE_MNEM_SUFFIX)
3878 suffix_check.no_ldsuf = 1;
3880 /* Must have right number of operands. */
3881 i.error = number_of_operands_mismatch;
3883 for (t = current_templates->start; t < current_templates->end; t++)
3885 addr_prefix_disp = -1;
3887 if (i.operands != t->operands)
3888 continue;
3890 /* Check processor support. */
3891 i.error = unsupported;
3892 found_cpu_match = (cpu_flags_match (t)
3893 == CPU_FLAGS_PERFECT_MATCH);
3894 if (!found_cpu_match)
3895 continue;
3897 /* Check old gcc support. */
3898 i.error = old_gcc_only;
3899 if (!old_gcc && t->opcode_modifier.oldgcc)
3900 continue;
3902 /* Check AT&T mnemonic. */
3903 i.error = unsupported_with_intel_mnemonic;
3904 if (intel_mnemonic && t->opcode_modifier.attmnemonic)
3905 continue;
3907 /* Check AT&T/Intel syntax. */
3908 i.error = unsupported_syntax;
3909 if ((intel_syntax && t->opcode_modifier.attsyntax)
3910 || (!intel_syntax && t->opcode_modifier.intelsyntax))
3911 continue;
3913 /* Check the suffix, except for some instructions in intel mode. */
3914 i.error = invalid_instruction_suffix;
3915 if ((!intel_syntax || !t->opcode_modifier.ignoresize)
3916 && ((t->opcode_modifier.no_bsuf && suffix_check.no_bsuf)
3917 || (t->opcode_modifier.no_wsuf && suffix_check.no_wsuf)
3918 || (t->opcode_modifier.no_lsuf && suffix_check.no_lsuf)
3919 || (t->opcode_modifier.no_ssuf && suffix_check.no_ssuf)
3920 || (t->opcode_modifier.no_qsuf && suffix_check.no_qsuf)
3921 || (t->opcode_modifier.no_ldsuf && suffix_check.no_ldsuf)))
3922 continue;
3924 if (!operand_size_match (t))
3925 continue;
3927 for (j = 0; j < MAX_OPERANDS; j++)
3928 operand_types[j] = t->operand_types[j];
3930 /* In general, don't allow 64-bit operands in 32-bit mode. */
3931 if (i.suffix == QWORD_MNEM_SUFFIX
3932 && flag_code != CODE_64BIT
3933 && (intel_syntax
3934 ? (!t->opcode_modifier.ignoresize
3935 && !intel_float_operand (t->name))
3936 : intel_float_operand (t->name) != 2)
3937 && ((!operand_types[0].bitfield.regmmx
3938 && !operand_types[0].bitfield.regxmm
3939 && !operand_types[0].bitfield.regymm)
3940 || (!operand_types[t->operands > 1].bitfield.regmmx
3941 && !!operand_types[t->operands > 1].bitfield.regxmm
3942 && !!operand_types[t->operands > 1].bitfield.regymm))
3943 && (t->base_opcode != 0x0fc7
3944 || t->extension_opcode != 1 /* cmpxchg8b */))
3945 continue;
3947 /* In general, don't allow 32-bit operands on pre-386. */
3948 else if (i.suffix == LONG_MNEM_SUFFIX
3949 && !cpu_arch_flags.bitfield.cpui386
3950 && (intel_syntax
3951 ? (!t->opcode_modifier.ignoresize
3952 && !intel_float_operand (t->name))
3953 : intel_float_operand (t->name) != 2)
3954 && ((!operand_types[0].bitfield.regmmx
3955 && !operand_types[0].bitfield.regxmm)
3956 || (!operand_types[t->operands > 1].bitfield.regmmx
3957 && !!operand_types[t->operands > 1].bitfield.regxmm)))
3958 continue;
3960 /* Do not verify operands when there are none. */
3961 else
3963 if (!t->operands)
3964 /* We've found a match; break out of loop. */
3965 break;
3968 /* Address size prefix will turn Disp64/Disp32/Disp16 operand
3969 into Disp32/Disp16/Disp32 operand. */
3970 if (i.prefix[ADDR_PREFIX] != 0)
3972 /* There should be only one Disp operand. */
3973 switch (flag_code)
3975 case CODE_16BIT:
3976 for (j = 0; j < MAX_OPERANDS; j++)
3978 if (operand_types[j].bitfield.disp16)
3980 addr_prefix_disp = j;
3981 operand_types[j].bitfield.disp32 = 1;
3982 operand_types[j].bitfield.disp16 = 0;
3983 break;
3986 break;
3987 case CODE_32BIT:
3988 for (j = 0; j < MAX_OPERANDS; j++)
3990 if (operand_types[j].bitfield.disp32)
3992 addr_prefix_disp = j;
3993 operand_types[j].bitfield.disp32 = 0;
3994 operand_types[j].bitfield.disp16 = 1;
3995 break;
3998 break;
3999 case CODE_64BIT:
4000 for (j = 0; j < MAX_OPERANDS; j++)
4002 if (operand_types[j].bitfield.disp64)
4004 addr_prefix_disp = j;
4005 operand_types[j].bitfield.disp64 = 0;
4006 operand_types[j].bitfield.disp32 = 1;
4007 break;
4010 break;
4014 /* We check register size if needed. */
4015 check_register = t->opcode_modifier.checkregsize;
4016 overlap0 = operand_type_and (i.types[0], operand_types[0]);
4017 switch (t->operands)
4019 case 1:
4020 if (!operand_type_match (overlap0, i.types[0]))
4021 continue;
4022 break;
4023 case 2:
4024 /* xchg %eax, %eax is a special case. It is an aliase for nop
4025 only in 32bit mode and we can use opcode 0x90. In 64bit
4026 mode, we can't use 0x90 for xchg %eax, %eax since it should
4027 zero-extend %eax to %rax. */
4028 if (flag_code == CODE_64BIT
4029 && t->base_opcode == 0x90
4030 && operand_type_equal (&i.types [0], &acc32)
4031 && operand_type_equal (&i.types [1], &acc32))
4032 continue;
4033 if (i.swap_operand)
4035 /* If we swap operand in encoding, we either match
4036 the next one or reverse direction of operands. */
4037 if (t->opcode_modifier.s)
4038 continue;
4039 else if (t->opcode_modifier.d)
4040 goto check_reverse;
4043 case 3:
4044 /* If we swap operand in encoding, we match the next one. */
4045 if (i.swap_operand && t->opcode_modifier.s)
4046 continue;
4047 case 4:
4048 case 5:
4049 overlap1 = operand_type_and (i.types[1], operand_types[1]);
4050 if (!operand_type_match (overlap0, i.types[0])
4051 || !operand_type_match (overlap1, i.types[1])
4052 || (check_register
4053 && !operand_type_register_match (overlap0, i.types[0],
4054 operand_types[0],
4055 overlap1, i.types[1],
4056 operand_types[1])))
4058 /* Check if other direction is valid ... */
4059 if (!t->opcode_modifier.d && !t->opcode_modifier.floatd)
4060 continue;
4062 check_reverse:
4063 /* Try reversing direction of operands. */
4064 overlap0 = operand_type_and (i.types[0], operand_types[1]);
4065 overlap1 = operand_type_and (i.types[1], operand_types[0]);
4066 if (!operand_type_match (overlap0, i.types[0])
4067 || !operand_type_match (overlap1, i.types[1])
4068 || (check_register
4069 && !operand_type_register_match (overlap0,
4070 i.types[0],
4071 operand_types[1],
4072 overlap1,
4073 i.types[1],
4074 operand_types[0])))
4076 /* Does not match either direction. */
4077 continue;
4079 /* found_reverse_match holds which of D or FloatDR
4080 we've found. */
4081 if (t->opcode_modifier.d)
4082 found_reverse_match = Opcode_D;
4083 else if (t->opcode_modifier.floatd)
4084 found_reverse_match = Opcode_FloatD;
4085 else
4086 found_reverse_match = 0;
4087 if (t->opcode_modifier.floatr)
4088 found_reverse_match |= Opcode_FloatR;
4090 else
4092 /* Found a forward 2 operand match here. */
4093 switch (t->operands)
4095 case 5:
4096 overlap4 = operand_type_and (i.types[4],
4097 operand_types[4]);
4098 case 4:
4099 overlap3 = operand_type_and (i.types[3],
4100 operand_types[3]);
4101 case 3:
4102 overlap2 = operand_type_and (i.types[2],
4103 operand_types[2]);
4104 break;
4107 switch (t->operands)
4109 case 5:
4110 if (!operand_type_match (overlap4, i.types[4])
4111 || !operand_type_register_match (overlap3,
4112 i.types[3],
4113 operand_types[3],
4114 overlap4,
4115 i.types[4],
4116 operand_types[4]))
4117 continue;
4118 case 4:
4119 if (!operand_type_match (overlap3, i.types[3])
4120 || (check_register
4121 && !operand_type_register_match (overlap2,
4122 i.types[2],
4123 operand_types[2],
4124 overlap3,
4125 i.types[3],
4126 operand_types[3])))
4127 continue;
4128 case 3:
4129 /* Here we make use of the fact that there are no
4130 reverse match 3 operand instructions, and all 3
4131 operand instructions only need to be checked for
4132 register consistency between operands 2 and 3. */
4133 if (!operand_type_match (overlap2, i.types[2])
4134 || (check_register
4135 && !operand_type_register_match (overlap1,
4136 i.types[1],
4137 operand_types[1],
4138 overlap2,
4139 i.types[2],
4140 operand_types[2])))
4141 continue;
4142 break;
4145 /* Found either forward/reverse 2, 3 or 4 operand match here:
4146 slip through to break. */
4148 if (!found_cpu_match)
4150 found_reverse_match = 0;
4151 continue;
4154 /* Check if VEX operands are valid. */
4155 if (VEX_check_operands (t))
4156 continue;
4158 /* We've found a match; break out of loop. */
4159 break;
4162 if (t == current_templates->end)
4164 /* We found no match. */
4165 const char *err_msg;
4166 switch (i.error)
4168 default:
4169 abort ();
4170 case operand_size_mismatch:
4171 err_msg = _("operand size mismatch");
4172 break;
4173 case operand_type_mismatch:
4174 err_msg = _("operand type mismatch");
4175 break;
4176 case register_type_mismatch:
4177 err_msg = _("register type mismatch");
4178 break;
4179 case number_of_operands_mismatch:
4180 err_msg = _("number of operands mismatch");
4181 break;
4182 case invalid_instruction_suffix:
4183 err_msg = _("invalid instruction suffix");
4184 break;
4185 case bad_imm4:
4186 err_msg = _("Imm4 isn't the first operand");
4187 break;
4188 case old_gcc_only:
4189 err_msg = _("only supported with old gcc");
4190 break;
4191 case unsupported_with_intel_mnemonic:
4192 err_msg = _("unsupported with Intel mnemonic");
4193 break;
4194 case unsupported_syntax:
4195 err_msg = _("unsupported syntax");
4196 break;
4197 case unsupported:
4198 err_msg = _("unsupported");
4199 break;
4201 as_bad (_("%s for `%s'"), err_msg,
4202 current_templates->start->name);
4203 return NULL;
4206 if (!quiet_warnings)
4208 if (!intel_syntax
4209 && (i.types[0].bitfield.jumpabsolute
4210 != operand_types[0].bitfield.jumpabsolute))
4212 as_warn (_("indirect %s without `*'"), t->name);
4215 if (t->opcode_modifier.isprefix
4216 && t->opcode_modifier.ignoresize)
4218 /* Warn them that a data or address size prefix doesn't
4219 affect assembly of the next line of code. */
4220 as_warn (_("stand-alone `%s' prefix"), t->name);
4224 /* Copy the template we found. */
4225 i.tm = *t;
4227 if (addr_prefix_disp != -1)
4228 i.tm.operand_types[addr_prefix_disp]
4229 = operand_types[addr_prefix_disp];
4231 if (found_reverse_match)
4233 /* If we found a reverse match we must alter the opcode
4234 direction bit. found_reverse_match holds bits to change
4235 (different for int & float insns). */
4237 i.tm.base_opcode ^= found_reverse_match;
4239 i.tm.operand_types[0] = operand_types[1];
4240 i.tm.operand_types[1] = operand_types[0];
4243 return t;
4246 static int
4247 check_string (void)
4249 int mem_op = operand_type_check (i.types[0], anymem) ? 0 : 1;
4250 if (i.tm.operand_types[mem_op].bitfield.esseg)
4252 if (i.seg[0] != NULL && i.seg[0] != &es)
4254 as_bad (_("`%s' operand %d must use `%ses' segment"),
4255 i.tm.name,
4256 mem_op + 1,
4257 register_prefix);
4258 return 0;
4260 /* There's only ever one segment override allowed per instruction.
4261 This instruction possibly has a legal segment override on the
4262 second operand, so copy the segment to where non-string
4263 instructions store it, allowing common code. */
4264 i.seg[0] = i.seg[1];
4266 else if (i.tm.operand_types[mem_op + 1].bitfield.esseg)
4268 if (i.seg[1] != NULL && i.seg[1] != &es)
4270 as_bad (_("`%s' operand %d must use `%ses' segment"),
4271 i.tm.name,
4272 mem_op + 2,
4273 register_prefix);
4274 return 0;
4277 return 1;
4280 static int
4281 process_suffix (void)
4283 /* If matched instruction specifies an explicit instruction mnemonic
4284 suffix, use it. */
4285 if (i.tm.opcode_modifier.size16)
4286 i.suffix = WORD_MNEM_SUFFIX;
4287 else if (i.tm.opcode_modifier.size32)
4288 i.suffix = LONG_MNEM_SUFFIX;
4289 else if (i.tm.opcode_modifier.size64)
4290 i.suffix = QWORD_MNEM_SUFFIX;
4291 else if (i.reg_operands)
4293 /* If there's no instruction mnemonic suffix we try to invent one
4294 based on register operands. */
4295 if (!i.suffix)
4297 /* We take i.suffix from the last register operand specified,
4298 Destination register type is more significant than source
4299 register type. crc32 in SSE4.2 prefers source register
4300 type. */
4301 if (i.tm.base_opcode == 0xf20f38f1)
4303 if (i.types[0].bitfield.reg16)
4304 i.suffix = WORD_MNEM_SUFFIX;
4305 else if (i.types[0].bitfield.reg32)
4306 i.suffix = LONG_MNEM_SUFFIX;
4307 else if (i.types[0].bitfield.reg64)
4308 i.suffix = QWORD_MNEM_SUFFIX;
4310 else if (i.tm.base_opcode == 0xf20f38f0)
4312 if (i.types[0].bitfield.reg8)
4313 i.suffix = BYTE_MNEM_SUFFIX;
4316 if (!i.suffix)
4318 int op;
4320 if (i.tm.base_opcode == 0xf20f38f1
4321 || i.tm.base_opcode == 0xf20f38f0)
4323 /* We have to know the operand size for crc32. */
4324 as_bad (_("ambiguous memory operand size for `%s`"),
4325 i.tm.name);
4326 return 0;
4329 for (op = i.operands; --op >= 0;)
4330 if (!i.tm.operand_types[op].bitfield.inoutportreg)
4332 if (i.types[op].bitfield.reg8)
4334 i.suffix = BYTE_MNEM_SUFFIX;
4335 break;
4337 else if (i.types[op].bitfield.reg16)
4339 i.suffix = WORD_MNEM_SUFFIX;
4340 break;
4342 else if (i.types[op].bitfield.reg32)
4344 i.suffix = LONG_MNEM_SUFFIX;
4345 break;
4347 else if (i.types[op].bitfield.reg64)
4349 i.suffix = QWORD_MNEM_SUFFIX;
4350 break;
4355 else if (i.suffix == BYTE_MNEM_SUFFIX)
4357 if (intel_syntax
4358 && i.tm.opcode_modifier.ignoresize
4359 && i.tm.opcode_modifier.no_bsuf)
4360 i.suffix = 0;
4361 else if (!check_byte_reg ())
4362 return 0;
4364 else if (i.suffix == LONG_MNEM_SUFFIX)
4366 if (intel_syntax
4367 && i.tm.opcode_modifier.ignoresize
4368 && i.tm.opcode_modifier.no_lsuf)
4369 i.suffix = 0;
4370 else if (!check_long_reg ())
4371 return 0;
4373 else if (i.suffix == QWORD_MNEM_SUFFIX)
4375 if (intel_syntax
4376 && i.tm.opcode_modifier.ignoresize
4377 && i.tm.opcode_modifier.no_qsuf)
4378 i.suffix = 0;
4379 else if (!check_qword_reg ())
4380 return 0;
4382 else if (i.suffix == WORD_MNEM_SUFFIX)
4384 if (intel_syntax
4385 && i.tm.opcode_modifier.ignoresize
4386 && i.tm.opcode_modifier.no_wsuf)
4387 i.suffix = 0;
4388 else if (!check_word_reg ())
4389 return 0;
4391 else if (i.suffix == XMMWORD_MNEM_SUFFIX
4392 || i.suffix == YMMWORD_MNEM_SUFFIX)
4394 /* Skip if the instruction has x/y suffix. match_template
4395 should check if it is a valid suffix. */
4397 else if (intel_syntax && i.tm.opcode_modifier.ignoresize)
4398 /* Do nothing if the instruction is going to ignore the prefix. */
4400 else
4401 abort ();
4403 else if (i.tm.opcode_modifier.defaultsize
4404 && !i.suffix
4405 /* exclude fldenv/frstor/fsave/fstenv */
4406 && i.tm.opcode_modifier.no_ssuf)
4408 i.suffix = stackop_size;
4410 else if (intel_syntax
4411 && !i.suffix
4412 && (i.tm.operand_types[0].bitfield.jumpabsolute
4413 || i.tm.opcode_modifier.jumpbyte
4414 || i.tm.opcode_modifier.jumpintersegment
4415 || (i.tm.base_opcode == 0x0f01 /* [ls][gi]dt */
4416 && i.tm.extension_opcode <= 3)))
4418 switch (flag_code)
4420 case CODE_64BIT:
4421 if (!i.tm.opcode_modifier.no_qsuf)
4423 i.suffix = QWORD_MNEM_SUFFIX;
4424 break;
4426 case CODE_32BIT:
4427 if (!i.tm.opcode_modifier.no_lsuf)
4428 i.suffix = LONG_MNEM_SUFFIX;
4429 break;
4430 case CODE_16BIT:
4431 if (!i.tm.opcode_modifier.no_wsuf)
4432 i.suffix = WORD_MNEM_SUFFIX;
4433 break;
4437 if (!i.suffix)
4439 if (!intel_syntax)
4441 if (i.tm.opcode_modifier.w)
4443 as_bad (_("no instruction mnemonic suffix given and "
4444 "no register operands; can't size instruction"));
4445 return 0;
4448 else
4450 unsigned int suffixes;
4452 suffixes = !i.tm.opcode_modifier.no_bsuf;
4453 if (!i.tm.opcode_modifier.no_wsuf)
4454 suffixes |= 1 << 1;
4455 if (!i.tm.opcode_modifier.no_lsuf)
4456 suffixes |= 1 << 2;
4457 if (!i.tm.opcode_modifier.no_ldsuf)
4458 suffixes |= 1 << 3;
4459 if (!i.tm.opcode_modifier.no_ssuf)
4460 suffixes |= 1 << 4;
4461 if (!i.tm.opcode_modifier.no_qsuf)
4462 suffixes |= 1 << 5;
4464 /* There are more than suffix matches. */
4465 if (i.tm.opcode_modifier.w
4466 || ((suffixes & (suffixes - 1))
4467 && !i.tm.opcode_modifier.defaultsize
4468 && !i.tm.opcode_modifier.ignoresize))
4470 as_bad (_("ambiguous operand size for `%s'"), i.tm.name);
4471 return 0;
4476 /* Change the opcode based on the operand size given by i.suffix;
4477 We don't need to change things for byte insns. */
4479 if (i.suffix
4480 && i.suffix != BYTE_MNEM_SUFFIX
4481 && i.suffix != XMMWORD_MNEM_SUFFIX
4482 && i.suffix != YMMWORD_MNEM_SUFFIX)
4484 /* It's not a byte, select word/dword operation. */
4485 if (i.tm.opcode_modifier.w)
4487 if (i.tm.opcode_modifier.shortform)
4488 i.tm.base_opcode |= 8;
4489 else
4490 i.tm.base_opcode |= 1;
4493 /* Now select between word & dword operations via the operand
4494 size prefix, except for instructions that will ignore this
4495 prefix anyway. */
4496 if (i.tm.opcode_modifier.addrprefixop0)
4498 /* The address size override prefix changes the size of the
4499 first operand. */
4500 if ((flag_code == CODE_32BIT
4501 && i.op->regs[0].reg_type.bitfield.reg16)
4502 || (flag_code != CODE_32BIT
4503 && i.op->regs[0].reg_type.bitfield.reg32))
4504 if (!add_prefix (ADDR_PREFIX_OPCODE))
4505 return 0;
4507 else if (i.suffix != QWORD_MNEM_SUFFIX
4508 && i.suffix != LONG_DOUBLE_MNEM_SUFFIX
4509 && !i.tm.opcode_modifier.ignoresize
4510 && !i.tm.opcode_modifier.floatmf
4511 && ((i.suffix == LONG_MNEM_SUFFIX) == (flag_code == CODE_16BIT)
4512 || (flag_code == CODE_64BIT
4513 && i.tm.opcode_modifier.jumpbyte)))
4515 unsigned int prefix = DATA_PREFIX_OPCODE;
4517 if (i.tm.opcode_modifier.jumpbyte) /* jcxz, loop */
4518 prefix = ADDR_PREFIX_OPCODE;
4520 if (!add_prefix (prefix))
4521 return 0;
4524 /* Set mode64 for an operand. */
4525 if (i.suffix == QWORD_MNEM_SUFFIX
4526 && flag_code == CODE_64BIT
4527 && !i.tm.opcode_modifier.norex64)
4529 /* Special case for xchg %rax,%rax. It is NOP and doesn't
4530 need rex64. cmpxchg8b is also a special case. */
4531 if (! (i.operands == 2
4532 && i.tm.base_opcode == 0x90
4533 && i.tm.extension_opcode == None
4534 && operand_type_equal (&i.types [0], &acc64)
4535 && operand_type_equal (&i.types [1], &acc64))
4536 && ! (i.operands == 1
4537 && i.tm.base_opcode == 0xfc7
4538 && i.tm.extension_opcode == 1
4539 && !operand_type_check (i.types [0], reg)
4540 && operand_type_check (i.types [0], anymem)))
4541 i.rex |= REX_W;
4544 /* Size floating point instruction. */
4545 if (i.suffix == LONG_MNEM_SUFFIX)
4546 if (i.tm.opcode_modifier.floatmf)
4547 i.tm.base_opcode ^= 4;
4550 return 1;
4553 static int
4554 check_byte_reg (void)
4556 int op;
4558 for (op = i.operands; --op >= 0;)
4560 /* If this is an eight bit register, it's OK. If it's the 16 or
4561 32 bit version of an eight bit register, we will just use the
4562 low portion, and that's OK too. */
4563 if (i.types[op].bitfield.reg8)
4564 continue;
4566 /* crc32 doesn't generate this warning. */
4567 if (i.tm.base_opcode == 0xf20f38f0)
4568 continue;
4570 if ((i.types[op].bitfield.reg16
4571 || i.types[op].bitfield.reg32
4572 || i.types[op].bitfield.reg64)
4573 && i.op[op].regs->reg_num < 4)
4575 /* Prohibit these changes in the 64bit mode, since the
4576 lowering is more complicated. */
4577 if (flag_code == CODE_64BIT
4578 && !i.tm.operand_types[op].bitfield.inoutportreg)
4580 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4581 register_prefix, i.op[op].regs->reg_name,
4582 i.suffix);
4583 return 0;
4585 #if REGISTER_WARNINGS
4586 if (!quiet_warnings
4587 && !i.tm.operand_types[op].bitfield.inoutportreg)
4588 as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
4589 register_prefix,
4590 (i.op[op].regs + (i.types[op].bitfield.reg16
4591 ? REGNAM_AL - REGNAM_AX
4592 : REGNAM_AL - REGNAM_EAX))->reg_name,
4593 register_prefix,
4594 i.op[op].regs->reg_name,
4595 i.suffix);
4596 #endif
4597 continue;
4599 /* Any other register is bad. */
4600 if (i.types[op].bitfield.reg16
4601 || i.types[op].bitfield.reg32
4602 || i.types[op].bitfield.reg64
4603 || i.types[op].bitfield.regmmx
4604 || i.types[op].bitfield.regxmm
4605 || i.types[op].bitfield.regymm
4606 || i.types[op].bitfield.sreg2
4607 || i.types[op].bitfield.sreg3
4608 || i.types[op].bitfield.control
4609 || i.types[op].bitfield.debug
4610 || i.types[op].bitfield.test
4611 || i.types[op].bitfield.floatreg
4612 || i.types[op].bitfield.floatacc)
4614 as_bad (_("`%s%s' not allowed with `%s%c'"),
4615 register_prefix,
4616 i.op[op].regs->reg_name,
4617 i.tm.name,
4618 i.suffix);
4619 return 0;
4622 return 1;
4625 static int
4626 check_long_reg (void)
4628 int op;
4630 for (op = i.operands; --op >= 0;)
4631 /* Reject eight bit registers, except where the template requires
4632 them. (eg. movzb) */
4633 if (i.types[op].bitfield.reg8
4634 && (i.tm.operand_types[op].bitfield.reg16
4635 || i.tm.operand_types[op].bitfield.reg32
4636 || i.tm.operand_types[op].bitfield.acc))
4638 as_bad (_("`%s%s' not allowed with `%s%c'"),
4639 register_prefix,
4640 i.op[op].regs->reg_name,
4641 i.tm.name,
4642 i.suffix);
4643 return 0;
4645 /* Warn if the e prefix on a general reg is missing. */
4646 else if ((!quiet_warnings || flag_code == CODE_64BIT)
4647 && i.types[op].bitfield.reg16
4648 && (i.tm.operand_types[op].bitfield.reg32
4649 || i.tm.operand_types[op].bitfield.acc))
4651 /* Prohibit these changes in the 64bit mode, since the
4652 lowering is more complicated. */
4653 if (flag_code == CODE_64BIT)
4655 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4656 register_prefix, i.op[op].regs->reg_name,
4657 i.suffix);
4658 return 0;
4660 #if REGISTER_WARNINGS
4661 else
4662 as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
4663 register_prefix,
4664 (i.op[op].regs + REGNAM_EAX - REGNAM_AX)->reg_name,
4665 register_prefix,
4666 i.op[op].regs->reg_name,
4667 i.suffix);
4668 #endif
4670 /* Warn if the r prefix on a general reg is missing. */
4671 else if (i.types[op].bitfield.reg64
4672 && (i.tm.operand_types[op].bitfield.reg32
4673 || i.tm.operand_types[op].bitfield.acc))
4675 if (intel_syntax
4676 && i.tm.opcode_modifier.toqword
4677 && !i.types[0].bitfield.regxmm)
4679 /* Convert to QWORD. We want REX byte. */
4680 i.suffix = QWORD_MNEM_SUFFIX;
4682 else
4684 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4685 register_prefix, i.op[op].regs->reg_name,
4686 i.suffix);
4687 return 0;
4690 return 1;
4693 static int
4694 check_qword_reg (void)
4696 int op;
4698 for (op = i.operands; --op >= 0; )
4699 /* Reject eight bit registers, except where the template requires
4700 them. (eg. movzb) */
4701 if (i.types[op].bitfield.reg8
4702 && (i.tm.operand_types[op].bitfield.reg16
4703 || i.tm.operand_types[op].bitfield.reg32
4704 || i.tm.operand_types[op].bitfield.acc))
4706 as_bad (_("`%s%s' not allowed with `%s%c'"),
4707 register_prefix,
4708 i.op[op].regs->reg_name,
4709 i.tm.name,
4710 i.suffix);
4711 return 0;
4713 /* Warn if the e prefix on a general reg is missing. */
4714 else if ((i.types[op].bitfield.reg16
4715 || i.types[op].bitfield.reg32)
4716 && (i.tm.operand_types[op].bitfield.reg32
4717 || i.tm.operand_types[op].bitfield.acc))
4719 /* Prohibit these changes in the 64bit mode, since the
4720 lowering is more complicated. */
4721 if (intel_syntax
4722 && i.tm.opcode_modifier.todword
4723 && !i.types[0].bitfield.regxmm)
4725 /* Convert to DWORD. We don't want REX byte. */
4726 i.suffix = LONG_MNEM_SUFFIX;
4728 else
4730 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4731 register_prefix, i.op[op].regs->reg_name,
4732 i.suffix);
4733 return 0;
4736 return 1;
4739 static int
4740 check_word_reg (void)
4742 int op;
4743 for (op = i.operands; --op >= 0;)
4744 /* Reject eight bit registers, except where the template requires
4745 them. (eg. movzb) */
4746 if (i.types[op].bitfield.reg8
4747 && (i.tm.operand_types[op].bitfield.reg16
4748 || i.tm.operand_types[op].bitfield.reg32
4749 || i.tm.operand_types[op].bitfield.acc))
4751 as_bad (_("`%s%s' not allowed with `%s%c'"),
4752 register_prefix,
4753 i.op[op].regs->reg_name,
4754 i.tm.name,
4755 i.suffix);
4756 return 0;
4758 /* Warn if the e prefix on a general reg is present. */
4759 else if ((!quiet_warnings || flag_code == CODE_64BIT)
4760 && i.types[op].bitfield.reg32
4761 && (i.tm.operand_types[op].bitfield.reg16
4762 || i.tm.operand_types[op].bitfield.acc))
4764 /* Prohibit these changes in the 64bit mode, since the
4765 lowering is more complicated. */
4766 if (flag_code == CODE_64BIT)
4768 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4769 register_prefix, i.op[op].regs->reg_name,
4770 i.suffix);
4771 return 0;
4773 else
4774 #if REGISTER_WARNINGS
4775 as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
4776 register_prefix,
4777 (i.op[op].regs + REGNAM_AX - REGNAM_EAX)->reg_name,
4778 register_prefix,
4779 i.op[op].regs->reg_name,
4780 i.suffix);
4781 #endif
4783 return 1;
4786 static int
4787 update_imm (unsigned int j)
4789 i386_operand_type overlap = i.types[j];
4790 if ((overlap.bitfield.imm8
4791 || overlap.bitfield.imm8s
4792 || overlap.bitfield.imm16
4793 || overlap.bitfield.imm32
4794 || overlap.bitfield.imm32s
4795 || overlap.bitfield.imm64)
4796 && !operand_type_equal (&overlap, &imm8)
4797 && !operand_type_equal (&overlap, &imm8s)
4798 && !operand_type_equal (&overlap, &imm16)
4799 && !operand_type_equal (&overlap, &imm32)
4800 && !operand_type_equal (&overlap, &imm32s)
4801 && !operand_type_equal (&overlap, &imm64))
4803 if (i.suffix)
4805 i386_operand_type temp;
4807 operand_type_set (&temp, 0);
4808 if (i.suffix == BYTE_MNEM_SUFFIX)
4810 temp.bitfield.imm8 = overlap.bitfield.imm8;
4811 temp.bitfield.imm8s = overlap.bitfield.imm8s;
4813 else if (i.suffix == WORD_MNEM_SUFFIX)
4814 temp.bitfield.imm16 = overlap.bitfield.imm16;
4815 else if (i.suffix == QWORD_MNEM_SUFFIX)
4817 temp.bitfield.imm64 = overlap.bitfield.imm64;
4818 temp.bitfield.imm32s = overlap.bitfield.imm32s;
4820 else
4821 temp.bitfield.imm32 = overlap.bitfield.imm32;
4822 overlap = temp;
4824 else if (operand_type_equal (&overlap, &imm16_32_32s)
4825 || operand_type_equal (&overlap, &imm16_32)
4826 || operand_type_equal (&overlap, &imm16_32s))
4828 if ((flag_code == CODE_16BIT) ^ (i.prefix[DATA_PREFIX] != 0))
4829 overlap = imm16;
4830 else
4831 overlap = imm32s;
4833 if (!operand_type_equal (&overlap, &imm8)
4834 && !operand_type_equal (&overlap, &imm8s)
4835 && !operand_type_equal (&overlap, &imm16)
4836 && !operand_type_equal (&overlap, &imm32)
4837 && !operand_type_equal (&overlap, &imm32s)
4838 && !operand_type_equal (&overlap, &imm64))
4840 as_bad (_("no instruction mnemonic suffix given; "
4841 "can't determine immediate size"));
4842 return 0;
4845 i.types[j] = overlap;
4847 return 1;
4850 static int
4851 finalize_imm (void)
4853 unsigned int j, n;
4855 /* Update the first 2 immediate operands. */
4856 n = i.operands > 2 ? 2 : i.operands;
4857 if (n)
4859 for (j = 0; j < n; j++)
4860 if (update_imm (j) == 0)
4861 return 0;
4863 /* The 3rd operand can't be immediate operand. */
4864 gas_assert (operand_type_check (i.types[2], imm) == 0);
4867 return 1;
4870 static int
4871 bad_implicit_operand (int xmm)
4873 const char *ireg = xmm ? "xmm0" : "ymm0";
4875 if (intel_syntax)
4876 as_bad (_("the last operand of `%s' must be `%s%s'"),
4877 i.tm.name, register_prefix, ireg);
4878 else
4879 as_bad (_("the first operand of `%s' must be `%s%s'"),
4880 i.tm.name, register_prefix, ireg);
4881 return 0;
4884 static int
4885 process_operands (void)
4887 /* Default segment register this instruction will use for memory
4888 accesses. 0 means unknown. This is only for optimizing out
4889 unnecessary segment overrides. */
4890 const seg_entry *default_seg = 0;
4892 if (i.tm.opcode_modifier.sse2avx && i.tm.opcode_modifier.vexvvvv)
4894 unsigned int dupl = i.operands;
4895 unsigned int dest = dupl - 1;
4896 unsigned int j;
4898 /* The destination must be an xmm register. */
4899 gas_assert (i.reg_operands
4900 && MAX_OPERANDS > dupl
4901 && operand_type_equal (&i.types[dest], &regxmm));
4903 if (i.tm.opcode_modifier.firstxmm0)
4905 /* The first operand is implicit and must be xmm0. */
4906 gas_assert (operand_type_equal (&i.types[0], &regxmm));
4907 if (i.op[0].regs->reg_num != 0)
4908 return bad_implicit_operand (1);
4910 if (i.tm.opcode_modifier.vexsources == VEX3SOURCES)
4912 /* Keep xmm0 for instructions with VEX prefix and 3
4913 sources. */
4914 goto duplicate;
4916 else
4918 /* We remove the first xmm0 and keep the number of
4919 operands unchanged, which in fact duplicates the
4920 destination. */
4921 for (j = 1; j < i.operands; j++)
4923 i.op[j - 1] = i.op[j];
4924 i.types[j - 1] = i.types[j];
4925 i.tm.operand_types[j - 1] = i.tm.operand_types[j];
4929 else if (i.tm.opcode_modifier.implicit1stxmm0)
4931 gas_assert ((MAX_OPERANDS - 1) > dupl
4932 && (i.tm.opcode_modifier.vexsources
4933 == VEX3SOURCES));
4935 /* Add the implicit xmm0 for instructions with VEX prefix
4936 and 3 sources. */
4937 for (j = i.operands; j > 0; j--)
4939 i.op[j] = i.op[j - 1];
4940 i.types[j] = i.types[j - 1];
4941 i.tm.operand_types[j] = i.tm.operand_types[j - 1];
4943 i.op[0].regs
4944 = (const reg_entry *) hash_find (reg_hash, "xmm0");
4945 i.types[0] = regxmm;
4946 i.tm.operand_types[0] = regxmm;
4948 i.operands += 2;
4949 i.reg_operands += 2;
4950 i.tm.operands += 2;
4952 dupl++;
4953 dest++;
4954 i.op[dupl] = i.op[dest];
4955 i.types[dupl] = i.types[dest];
4956 i.tm.operand_types[dupl] = i.tm.operand_types[dest];
4958 else
4960 duplicate:
4961 i.operands++;
4962 i.reg_operands++;
4963 i.tm.operands++;
4965 i.op[dupl] = i.op[dest];
4966 i.types[dupl] = i.types[dest];
4967 i.tm.operand_types[dupl] = i.tm.operand_types[dest];
4970 if (i.tm.opcode_modifier.immext)
4971 process_immext ();
4973 else if (i.tm.opcode_modifier.firstxmm0)
4975 unsigned int j;
4977 /* The first operand is implicit and must be xmm0/ymm0. */
4978 gas_assert (i.reg_operands
4979 && (operand_type_equal (&i.types[0], &regxmm)
4980 || operand_type_equal (&i.types[0], &regymm)));
4981 if (i.op[0].regs->reg_num != 0)
4982 return bad_implicit_operand (i.types[0].bitfield.regxmm);
4984 for (j = 1; j < i.operands; j++)
4986 i.op[j - 1] = i.op[j];
4987 i.types[j - 1] = i.types[j];
4989 /* We need to adjust fields in i.tm since they are used by
4990 build_modrm_byte. */
4991 i.tm.operand_types [j - 1] = i.tm.operand_types [j];
4994 i.operands--;
4995 i.reg_operands--;
4996 i.tm.operands--;
4998 else if (i.tm.opcode_modifier.regkludge)
5000 /* The imul $imm, %reg instruction is converted into
5001 imul $imm, %reg, %reg, and the clr %reg instruction
5002 is converted into xor %reg, %reg. */
5004 unsigned int first_reg_op;
5006 if (operand_type_check (i.types[0], reg))
5007 first_reg_op = 0;
5008 else
5009 first_reg_op = 1;
5010 /* Pretend we saw the extra register operand. */
5011 gas_assert (i.reg_operands == 1
5012 && i.op[first_reg_op + 1].regs == 0);
5013 i.op[first_reg_op + 1].regs = i.op[first_reg_op].regs;
5014 i.types[first_reg_op + 1] = i.types[first_reg_op];
5015 i.operands++;
5016 i.reg_operands++;
5019 if (i.tm.opcode_modifier.shortform)
5021 if (i.types[0].bitfield.sreg2
5022 || i.types[0].bitfield.sreg3)
5024 if (i.tm.base_opcode == POP_SEG_SHORT
5025 && i.op[0].regs->reg_num == 1)
5027 as_bad (_("you can't `pop %scs'"), register_prefix);
5028 return 0;
5030 i.tm.base_opcode |= (i.op[0].regs->reg_num << 3);
5031 if ((i.op[0].regs->reg_flags & RegRex) != 0)
5032 i.rex |= REX_B;
5034 else
5036 /* The register or float register operand is in operand
5037 0 or 1. */
5038 unsigned int op;
5040 if (i.types[0].bitfield.floatreg
5041 || operand_type_check (i.types[0], reg))
5042 op = 0;
5043 else
5044 op = 1;
5045 /* Register goes in low 3 bits of opcode. */
5046 i.tm.base_opcode |= i.op[op].regs->reg_num;
5047 if ((i.op[op].regs->reg_flags & RegRex) != 0)
5048 i.rex |= REX_B;
5049 if (!quiet_warnings && i.tm.opcode_modifier.ugh)
5051 /* Warn about some common errors, but press on regardless.
5052 The first case can be generated by gcc (<= 2.8.1). */
5053 if (i.operands == 2)
5055 /* Reversed arguments on faddp, fsubp, etc. */
5056 as_warn (_("translating to `%s %s%s,%s%s'"), i.tm.name,
5057 register_prefix, i.op[!intel_syntax].regs->reg_name,
5058 register_prefix, i.op[intel_syntax].regs->reg_name);
5060 else
5062 /* Extraneous `l' suffix on fp insn. */
5063 as_warn (_("translating to `%s %s%s'"), i.tm.name,
5064 register_prefix, i.op[0].regs->reg_name);
5069 else if (i.tm.opcode_modifier.modrm)
5071 /* The opcode is completed (modulo i.tm.extension_opcode which
5072 must be put into the modrm byte). Now, we make the modrm and
5073 index base bytes based on all the info we've collected. */
5075 default_seg = build_modrm_byte ();
5077 else if ((i.tm.base_opcode & ~0x3) == MOV_AX_DISP32)
5079 default_seg = &ds;
5081 else if (i.tm.opcode_modifier.isstring)
5083 /* For the string instructions that allow a segment override
5084 on one of their operands, the default segment is ds. */
5085 default_seg = &ds;
5088 if (i.tm.base_opcode == 0x8d /* lea */
5089 && i.seg[0]
5090 && !quiet_warnings)
5091 as_warn (_("segment override on `%s' is ineffectual"), i.tm.name);
5093 /* If a segment was explicitly specified, and the specified segment
5094 is not the default, use an opcode prefix to select it. If we
5095 never figured out what the default segment is, then default_seg
5096 will be zero at this point, and the specified segment prefix will
5097 always be used. */
5098 if ((i.seg[0]) && (i.seg[0] != default_seg))
5100 if (!add_prefix (i.seg[0]->seg_prefix))
5101 return 0;
5103 return 1;
5106 static const seg_entry *
5107 build_modrm_byte (void)
5109 const seg_entry *default_seg = 0;
5110 unsigned int source, dest;
5111 int vex_3_sources;
5113 /* The first operand of instructions with VEX prefix and 3 sources
5114 must be VEX_Imm4. */
5115 vex_3_sources = i.tm.opcode_modifier.vexsources == VEX3SOURCES;
5116 if (vex_3_sources)
5118 unsigned int nds, reg_slot;
5119 expressionS *exp;
5121 if (i.tm.opcode_modifier.veximmext
5122 && i.tm.opcode_modifier.immext)
5124 dest = i.operands - 2;
5125 gas_assert (dest == 3);
5127 else
5128 dest = i.operands - 1;
5129 nds = dest - 1;
5131 /* There are 2 kinds of instructions:
5132 1. 5 operands: 4 register operands or 3 register operands
5133 plus 1 memory operand plus one Vec_Imm4 operand, VexXDS, and
5134 VexW0 or VexW1. The destination must be either XMM or YMM
5135 register.
5136 2. 4 operands: 4 register operands or 3 register operands
5137 plus 1 memory operand, VexXDS, and VexImmExt */
5138 gas_assert ((i.reg_operands == 4
5139 || (i.reg_operands == 3 && i.mem_operands == 1))
5140 && i.tm.opcode_modifier.vexvvvv == VEXXDS
5141 && (i.tm.opcode_modifier.veximmext
5142 || (i.imm_operands == 1
5143 && i.types[0].bitfield.vec_imm4
5144 && (i.tm.opcode_modifier.vexw == VEXW0
5145 || i.tm.opcode_modifier.vexw == VEXW1)
5146 && (operand_type_equal (&i.tm.operand_types[dest], &regxmm)
5147 || operand_type_equal (&i.tm.operand_types[dest], &regymm)))));
5149 if (i.imm_operands == 0)
5151 /* When there is no immediate operand, generate an 8bit
5152 immediate operand to encode the first operand. */
5153 exp = &im_expressions[i.imm_operands++];
5154 i.op[i.operands].imms = exp;
5155 i.types[i.operands] = imm8;
5156 i.operands++;
5157 /* If VexW1 is set, the first operand is the source and
5158 the second operand is encoded in the immediate operand. */
5159 if (i.tm.opcode_modifier.vexw == VEXW1)
5161 source = 0;
5162 reg_slot = 1;
5164 else
5166 source = 1;
5167 reg_slot = 0;
5170 /* FMA swaps REG and NDS. */
5171 if (i.tm.cpu_flags.bitfield.cpufma)
5173 unsigned int tmp;
5174 tmp = reg_slot;
5175 reg_slot = nds;
5176 nds = tmp;
5179 gas_assert (operand_type_equal (&i.tm.operand_types[reg_slot],
5180 &regxmm)
5181 || operand_type_equal (&i.tm.operand_types[reg_slot],
5182 &regymm));
5183 exp->X_op = O_constant;
5184 exp->X_add_number
5185 = ((i.op[reg_slot].regs->reg_num
5186 + ((i.op[reg_slot].regs->reg_flags & RegRex) ? 8 : 0))
5187 << 4);
5189 else
5191 unsigned int imm_slot;
5193 if (i.tm.opcode_modifier.vexw == VEXW0)
5195 /* If VexW0 is set, the third operand is the source and
5196 the second operand is encoded in the immediate
5197 operand. */
5198 source = 2;
5199 reg_slot = 1;
5201 else
5203 /* VexW1 is set, the second operand is the source and
5204 the third operand is encoded in the immediate
5205 operand. */
5206 source = 1;
5207 reg_slot = 2;
5210 if (i.tm.opcode_modifier.immext)
5212 /* When ImmExt is set, the immdiate byte is the last
5213 operand. */
5214 imm_slot = i.operands - 1;
5215 source--;
5216 reg_slot--;
5218 else
5220 imm_slot = 0;
5222 /* Turn on Imm8 so that output_imm will generate it. */
5223 i.types[imm_slot].bitfield.imm8 = 1;
5226 gas_assert (operand_type_equal (&i.tm.operand_types[reg_slot],
5227 &regxmm)
5228 || operand_type_equal (&i.tm.operand_types[reg_slot],
5229 &regymm));
5230 i.op[imm_slot].imms->X_add_number
5231 |= ((i.op[reg_slot].regs->reg_num
5232 + ((i.op[reg_slot].regs->reg_flags & RegRex) ? 8 : 0))
5233 << 4);
5236 gas_assert (operand_type_equal (&i.tm.operand_types[nds], &regxmm)
5237 || operand_type_equal (&i.tm.operand_types[nds],
5238 &regymm));
5239 i.vex.register_specifier = i.op[nds].regs;
5241 else
5242 source = dest = 0;
5244 /* i.reg_operands MUST be the number of real register operands;
5245 implicit registers do not count. If there are 3 register
5246 operands, it must be a instruction with VexNDS. For a
5247 instruction with VexNDD, the destination register is encoded
5248 in VEX prefix. If there are 4 register operands, it must be
5249 a instruction with VEX prefix and 3 sources. */
5250 if (i.mem_operands == 0
5251 && ((i.reg_operands == 2
5252 && i.tm.opcode_modifier.vexvvvv <= VEXXDS)
5253 || (i.reg_operands == 3
5254 && i.tm.opcode_modifier.vexvvvv == VEXXDS)
5255 || (i.reg_operands == 4 && vex_3_sources)))
5257 switch (i.operands)
5259 case 2:
5260 source = 0;
5261 break;
5262 case 3:
5263 /* When there are 3 operands, one of them may be immediate,
5264 which may be the first or the last operand. Otherwise,
5265 the first operand must be shift count register (cl) or it
5266 is an instruction with VexNDS. */
5267 gas_assert (i.imm_operands == 1
5268 || (i.imm_operands == 0
5269 && (i.tm.opcode_modifier.vexvvvv == VEXXDS
5270 || i.types[0].bitfield.shiftcount)));
5271 if (operand_type_check (i.types[0], imm)
5272 || i.types[0].bitfield.shiftcount)
5273 source = 1;
5274 else
5275 source = 0;
5276 break;
5277 case 4:
5278 /* When there are 4 operands, the first two must be 8bit
5279 immediate operands. The source operand will be the 3rd
5280 one.
5282 For instructions with VexNDS, if the first operand
5283 an imm8, the source operand is the 2nd one. If the last
5284 operand is imm8, the source operand is the first one. */
5285 gas_assert ((i.imm_operands == 2
5286 && i.types[0].bitfield.imm8
5287 && i.types[1].bitfield.imm8)
5288 || (i.tm.opcode_modifier.vexvvvv == VEXXDS
5289 && i.imm_operands == 1
5290 && (i.types[0].bitfield.imm8
5291 || i.types[i.operands - 1].bitfield.imm8)));
5292 if (i.imm_operands == 2)
5293 source = 2;
5294 else
5296 if (i.types[0].bitfield.imm8)
5297 source = 1;
5298 else
5299 source = 0;
5301 break;
5302 case 5:
5303 break;
5304 default:
5305 abort ();
5308 if (!vex_3_sources)
5310 dest = source + 1;
5312 if (i.tm.opcode_modifier.vexvvvv == VEXXDS)
5314 /* For instructions with VexNDS, the register-only
5315 source operand must be 32/64bit integer, XMM or
5316 YMM register. It is encoded in VEX prefix. We
5317 need to clear RegMem bit before calling
5318 operand_type_equal. */
5320 i386_operand_type op;
5321 unsigned int vvvv;
5323 /* Check register-only source operand when two source
5324 operands are swapped. */
5325 if (!i.tm.operand_types[source].bitfield.baseindex
5326 && i.tm.operand_types[dest].bitfield.baseindex)
5328 vvvv = source;
5329 source = dest;
5331 else
5332 vvvv = dest;
5334 op = i.tm.operand_types[vvvv];
5335 op.bitfield.regmem = 0;
5336 if ((dest + 1) >= i.operands
5337 || (op.bitfield.reg32 != 1
5338 && !op.bitfield.reg64 != 1
5339 && !operand_type_equal (&op, &regxmm)
5340 && !operand_type_equal (&op, &regymm)))
5341 abort ();
5342 i.vex.register_specifier = i.op[vvvv].regs;
5343 dest++;
5347 i.rm.mode = 3;
5348 /* One of the register operands will be encoded in the i.tm.reg
5349 field, the other in the combined i.tm.mode and i.tm.regmem
5350 fields. If no form of this instruction supports a memory
5351 destination operand, then we assume the source operand may
5352 sometimes be a memory operand and so we need to store the
5353 destination in the i.rm.reg field. */
5354 if (!i.tm.operand_types[dest].bitfield.regmem
5355 && operand_type_check (i.tm.operand_types[dest], anymem) == 0)
5357 i.rm.reg = i.op[dest].regs->reg_num;
5358 i.rm.regmem = i.op[source].regs->reg_num;
5359 if ((i.op[dest].regs->reg_flags & RegRex) != 0)
5360 i.rex |= REX_R;
5361 if ((i.op[source].regs->reg_flags & RegRex) != 0)
5362 i.rex |= REX_B;
5364 else
5366 i.rm.reg = i.op[source].regs->reg_num;
5367 i.rm.regmem = i.op[dest].regs->reg_num;
5368 if ((i.op[dest].regs->reg_flags & RegRex) != 0)
5369 i.rex |= REX_B;
5370 if ((i.op[source].regs->reg_flags & RegRex) != 0)
5371 i.rex |= REX_R;
5373 if (flag_code != CODE_64BIT && (i.rex & (REX_R | REX_B)))
5375 if (!i.types[0].bitfield.control
5376 && !i.types[1].bitfield.control)
5377 abort ();
5378 i.rex &= ~(REX_R | REX_B);
5379 add_prefix (LOCK_PREFIX_OPCODE);
5382 else
5383 { /* If it's not 2 reg operands... */
5384 unsigned int mem;
5386 if (i.mem_operands)
5388 unsigned int fake_zero_displacement = 0;
5389 unsigned int op;
5391 for (op = 0; op < i.operands; op++)
5392 if (operand_type_check (i.types[op], anymem))
5393 break;
5394 gas_assert (op < i.operands);
5396 default_seg = &ds;
5398 if (i.base_reg == 0)
5400 i.rm.mode = 0;
5401 if (!i.disp_operands)
5402 fake_zero_displacement = 1;
5403 if (i.index_reg == 0)
5405 /* Operand is just <disp> */
5406 if (flag_code == CODE_64BIT)
5408 /* 64bit mode overwrites the 32bit absolute
5409 addressing by RIP relative addressing and
5410 absolute addressing is encoded by one of the
5411 redundant SIB forms. */
5412 i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
5413 i.sib.base = NO_BASE_REGISTER;
5414 i.sib.index = NO_INDEX_REGISTER;
5415 i.types[op] = ((i.prefix[ADDR_PREFIX] == 0)
5416 ? disp32s : disp32);
5418 else if ((flag_code == CODE_16BIT)
5419 ^ (i.prefix[ADDR_PREFIX] != 0))
5421 i.rm.regmem = NO_BASE_REGISTER_16;
5422 i.types[op] = disp16;
5424 else
5426 i.rm.regmem = NO_BASE_REGISTER;
5427 i.types[op] = disp32;
5430 else /* !i.base_reg && i.index_reg */
5432 if (i.index_reg->reg_num == RegEiz
5433 || i.index_reg->reg_num == RegRiz)
5434 i.sib.index = NO_INDEX_REGISTER;
5435 else
5436 i.sib.index = i.index_reg->reg_num;
5437 i.sib.base = NO_BASE_REGISTER;
5438 i.sib.scale = i.log2_scale_factor;
5439 i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
5440 i.types[op].bitfield.disp8 = 0;
5441 i.types[op].bitfield.disp16 = 0;
5442 i.types[op].bitfield.disp64 = 0;
5443 if (flag_code != CODE_64BIT)
5445 /* Must be 32 bit */
5446 i.types[op].bitfield.disp32 = 1;
5447 i.types[op].bitfield.disp32s = 0;
5449 else
5451 i.types[op].bitfield.disp32 = 0;
5452 i.types[op].bitfield.disp32s = 1;
5454 if ((i.index_reg->reg_flags & RegRex) != 0)
5455 i.rex |= REX_X;
5458 /* RIP addressing for 64bit mode. */
5459 else if (i.base_reg->reg_num == RegRip ||
5460 i.base_reg->reg_num == RegEip)
5462 i.rm.regmem = NO_BASE_REGISTER;
5463 i.types[op].bitfield.disp8 = 0;
5464 i.types[op].bitfield.disp16 = 0;
5465 i.types[op].bitfield.disp32 = 0;
5466 i.types[op].bitfield.disp32s = 1;
5467 i.types[op].bitfield.disp64 = 0;
5468 i.flags[op] |= Operand_PCrel;
5469 if (! i.disp_operands)
5470 fake_zero_displacement = 1;
5472 else if (i.base_reg->reg_type.bitfield.reg16)
5474 switch (i.base_reg->reg_num)
5476 case 3: /* (%bx) */
5477 if (i.index_reg == 0)
5478 i.rm.regmem = 7;
5479 else /* (%bx,%si) -> 0, or (%bx,%di) -> 1 */
5480 i.rm.regmem = i.index_reg->reg_num - 6;
5481 break;
5482 case 5: /* (%bp) */
5483 default_seg = &ss;
5484 if (i.index_reg == 0)
5486 i.rm.regmem = 6;
5487 if (operand_type_check (i.types[op], disp) == 0)
5489 /* fake (%bp) into 0(%bp) */
5490 i.types[op].bitfield.disp8 = 1;
5491 fake_zero_displacement = 1;
5494 else /* (%bp,%si) -> 2, or (%bp,%di) -> 3 */
5495 i.rm.regmem = i.index_reg->reg_num - 6 + 2;
5496 break;
5497 default: /* (%si) -> 4 or (%di) -> 5 */
5498 i.rm.regmem = i.base_reg->reg_num - 6 + 4;
5500 i.rm.mode = mode_from_disp_size (i.types[op]);
5502 else /* i.base_reg and 32/64 bit mode */
5504 if (flag_code == CODE_64BIT
5505 && operand_type_check (i.types[op], disp))
5507 i386_operand_type temp;
5508 operand_type_set (&temp, 0);
5509 temp.bitfield.disp8 = i.types[op].bitfield.disp8;
5510 i.types[op] = temp;
5511 if (i.prefix[ADDR_PREFIX] == 0)
5512 i.types[op].bitfield.disp32s = 1;
5513 else
5514 i.types[op].bitfield.disp32 = 1;
5517 i.rm.regmem = i.base_reg->reg_num;
5518 if ((i.base_reg->reg_flags & RegRex) != 0)
5519 i.rex |= REX_B;
5520 i.sib.base = i.base_reg->reg_num;
5521 /* x86-64 ignores REX prefix bit here to avoid decoder
5522 complications. */
5523 if ((i.base_reg->reg_num & 7) == EBP_REG_NUM)
5525 default_seg = &ss;
5526 if (i.disp_operands == 0)
5528 fake_zero_displacement = 1;
5529 i.types[op].bitfield.disp8 = 1;
5532 else if (i.base_reg->reg_num == ESP_REG_NUM)
5534 default_seg = &ss;
5536 i.sib.scale = i.log2_scale_factor;
5537 if (i.index_reg == 0)
5539 /* <disp>(%esp) becomes two byte modrm with no index
5540 register. We've already stored the code for esp
5541 in i.rm.regmem ie. ESCAPE_TO_TWO_BYTE_ADDRESSING.
5542 Any base register besides %esp will not use the
5543 extra modrm byte. */
5544 i.sib.index = NO_INDEX_REGISTER;
5546 else
5548 if (i.index_reg->reg_num == RegEiz
5549 || i.index_reg->reg_num == RegRiz)
5550 i.sib.index = NO_INDEX_REGISTER;
5551 else
5552 i.sib.index = i.index_reg->reg_num;
5553 i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
5554 if ((i.index_reg->reg_flags & RegRex) != 0)
5555 i.rex |= REX_X;
5558 if (i.disp_operands
5559 && (i.reloc[op] == BFD_RELOC_386_TLS_DESC_CALL
5560 || i.reloc[op] == BFD_RELOC_X86_64_TLSDESC_CALL))
5561 i.rm.mode = 0;
5562 else
5563 i.rm.mode = mode_from_disp_size (i.types[op]);
5566 if (fake_zero_displacement)
5568 /* Fakes a zero displacement assuming that i.types[op]
5569 holds the correct displacement size. */
5570 expressionS *exp;
5572 gas_assert (i.op[op].disps == 0);
5573 exp = &disp_expressions[i.disp_operands++];
5574 i.op[op].disps = exp;
5575 exp->X_op = O_constant;
5576 exp->X_add_number = 0;
5577 exp->X_add_symbol = (symbolS *) 0;
5578 exp->X_op_symbol = (symbolS *) 0;
5581 mem = op;
5583 else
5584 mem = ~0;
5586 if (i.tm.opcode_modifier.vexsources == XOP2SOURCES)
5588 if (operand_type_check (i.types[0], imm))
5589 i.vex.register_specifier = NULL;
5590 else
5592 /* VEX.vvvv encodes one of the sources when the first
5593 operand is not an immediate. */
5594 if (i.tm.opcode_modifier.vexw == VEXW0)
5595 i.vex.register_specifier = i.op[0].regs;
5596 else
5597 i.vex.register_specifier = i.op[1].regs;
5600 /* Destination is a XMM register encoded in the ModRM.reg
5601 and VEX.R bit. */
5602 i.rm.reg = i.op[2].regs->reg_num;
5603 if ((i.op[2].regs->reg_flags & RegRex) != 0)
5604 i.rex |= REX_R;
5606 /* ModRM.rm and VEX.B encodes the other source. */
5607 if (!i.mem_operands)
5609 i.rm.mode = 3;
5611 if (i.tm.opcode_modifier.vexw == VEXW0)
5612 i.rm.regmem = i.op[1].regs->reg_num;
5613 else
5614 i.rm.regmem = i.op[0].regs->reg_num;
5616 if ((i.op[1].regs->reg_flags & RegRex) != 0)
5617 i.rex |= REX_B;
5620 else if (i.tm.opcode_modifier.vexvvvv == VEXLWP)
5622 i.vex.register_specifier = i.op[2].regs;
5623 if (!i.mem_operands)
5625 i.rm.mode = 3;
5626 i.rm.regmem = i.op[1].regs->reg_num;
5627 if ((i.op[1].regs->reg_flags & RegRex) != 0)
5628 i.rex |= REX_B;
5631 /* Fill in i.rm.reg or i.rm.regmem field with register operand
5632 (if any) based on i.tm.extension_opcode. Again, we must be
5633 careful to make sure that segment/control/debug/test/MMX
5634 registers are coded into the i.rm.reg field. */
5635 else if (i.reg_operands)
5637 unsigned int op;
5638 unsigned int vex_reg = ~0;
5640 for (op = 0; op < i.operands; op++)
5641 if (i.types[op].bitfield.reg8
5642 || i.types[op].bitfield.reg16
5643 || i.types[op].bitfield.reg32
5644 || i.types[op].bitfield.reg64
5645 || i.types[op].bitfield.regmmx
5646 || i.types[op].bitfield.regxmm
5647 || i.types[op].bitfield.regymm
5648 || i.types[op].bitfield.sreg2
5649 || i.types[op].bitfield.sreg3
5650 || i.types[op].bitfield.control
5651 || i.types[op].bitfield.debug
5652 || i.types[op].bitfield.test)
5653 break;
5655 if (vex_3_sources)
5656 op = dest;
5657 else if (i.tm.opcode_modifier.vexvvvv == VEXXDS)
5659 /* For instructions with VexNDS, the register-only
5660 source operand is encoded in VEX prefix. */
5661 gas_assert (mem != (unsigned int) ~0);
5663 if (op > mem)
5665 vex_reg = op++;
5666 gas_assert (op < i.operands);
5668 else
5670 /* Check register-only source operand when two source
5671 operands are swapped. */
5672 if (!i.tm.operand_types[op].bitfield.baseindex
5673 && i.tm.operand_types[op + 1].bitfield.baseindex)
5675 vex_reg = op;
5676 op += 2;
5677 gas_assert (mem == (vex_reg + 1)
5678 && op < i.operands);
5680 else
5682 vex_reg = op + 1;
5683 gas_assert (vex_reg < i.operands);
5687 else if (i.tm.opcode_modifier.vexvvvv == VEXNDD)
5689 /* For instructions with VexNDD, the register destination
5690 is encoded in VEX prefix. */
5691 if (i.mem_operands == 0)
5693 /* There is no memory operand. */
5694 gas_assert ((op + 2) == i.operands);
5695 vex_reg = op + 1;
5697 else
5699 /* There are only 2 operands. */
5700 gas_assert (op < 2 && i.operands == 2);
5701 vex_reg = 1;
5704 else
5705 gas_assert (op < i.operands);
5707 if (vex_reg != (unsigned int) ~0)
5709 i386_operand_type *type = &i.tm.operand_types[vex_reg];
5711 if (type->bitfield.reg32 != 1
5712 && type->bitfield.reg64 != 1
5713 && !operand_type_equal (type, &regxmm)
5714 && !operand_type_equal (type, &regymm))
5715 abort ();
5717 i.vex.register_specifier = i.op[vex_reg].regs;
5720 /* Don't set OP operand twice. */
5721 if (vex_reg != op)
5723 /* If there is an extension opcode to put here, the
5724 register number must be put into the regmem field. */
5725 if (i.tm.extension_opcode != None)
5727 i.rm.regmem = i.op[op].regs->reg_num;
5728 if ((i.op[op].regs->reg_flags & RegRex) != 0)
5729 i.rex |= REX_B;
5731 else
5733 i.rm.reg = i.op[op].regs->reg_num;
5734 if ((i.op[op].regs->reg_flags & RegRex) != 0)
5735 i.rex |= REX_R;
5739 /* Now, if no memory operand has set i.rm.mode = 0, 1, 2 we
5740 must set it to 3 to indicate this is a register operand
5741 in the regmem field. */
5742 if (!i.mem_operands)
5743 i.rm.mode = 3;
5746 /* Fill in i.rm.reg field with extension opcode (if any). */
5747 if (i.tm.extension_opcode != None)
5748 i.rm.reg = i.tm.extension_opcode;
5750 return default_seg;
5753 static void
5754 output_branch (void)
5756 char *p;
5757 int size;
5758 int code16;
5759 int prefix;
5760 relax_substateT subtype;
5761 symbolS *sym;
5762 offsetT off;
5764 code16 = flag_code == CODE_16BIT ? CODE16 : 0;
5765 size = i.disp32_encoding ? BIG : SMALL;
5767 prefix = 0;
5768 if (i.prefix[DATA_PREFIX] != 0)
5770 prefix = 1;
5771 i.prefixes -= 1;
5772 code16 ^= CODE16;
5774 /* Pentium4 branch hints. */
5775 if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE /* not taken */
5776 || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE /* taken */)
5778 prefix++;
5779 i.prefixes--;
5781 if (i.prefix[REX_PREFIX] != 0)
5783 prefix++;
5784 i.prefixes--;
5787 if (i.prefixes != 0 && !intel_syntax)
5788 as_warn (_("skipping prefixes on this instruction"));
5790 /* It's always a symbol; End frag & setup for relax.
5791 Make sure there is enough room in this frag for the largest
5792 instruction we may generate in md_convert_frag. This is 2
5793 bytes for the opcode and room for the prefix and largest
5794 displacement. */
5795 frag_grow (prefix + 2 + 4);
5796 /* Prefix and 1 opcode byte go in fr_fix. */
5797 p = frag_more (prefix + 1);
5798 if (i.prefix[DATA_PREFIX] != 0)
5799 *p++ = DATA_PREFIX_OPCODE;
5800 if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE
5801 || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE)
5802 *p++ = i.prefix[SEG_PREFIX];
5803 if (i.prefix[REX_PREFIX] != 0)
5804 *p++ = i.prefix[REX_PREFIX];
5805 *p = i.tm.base_opcode;
5807 if ((unsigned char) *p == JUMP_PC_RELATIVE)
5808 subtype = ENCODE_RELAX_STATE (UNCOND_JUMP, size);
5809 else if (cpu_arch_flags.bitfield.cpui386)
5810 subtype = ENCODE_RELAX_STATE (COND_JUMP, size);
5811 else
5812 subtype = ENCODE_RELAX_STATE (COND_JUMP86, size);
5813 subtype |= code16;
5815 sym = i.op[0].disps->X_add_symbol;
5816 off = i.op[0].disps->X_add_number;
5818 if (i.op[0].disps->X_op != O_constant
5819 && i.op[0].disps->X_op != O_symbol)
5821 /* Handle complex expressions. */
5822 sym = make_expr_symbol (i.op[0].disps);
5823 off = 0;
5826 /* 1 possible extra opcode + 4 byte displacement go in var part.
5827 Pass reloc in fr_var. */
5828 frag_var (rs_machine_dependent, 5, i.reloc[0], subtype, sym, off, p);
5831 static void
5832 output_jump (void)
5834 char *p;
5835 int size;
5836 fixS *fixP;
5838 if (i.tm.opcode_modifier.jumpbyte)
5840 /* This is a loop or jecxz type instruction. */
5841 size = 1;
5842 if (i.prefix[ADDR_PREFIX] != 0)
5844 FRAG_APPEND_1_CHAR (ADDR_PREFIX_OPCODE);
5845 i.prefixes -= 1;
5847 /* Pentium4 branch hints. */
5848 if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE /* not taken */
5849 || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE /* taken */)
5851 FRAG_APPEND_1_CHAR (i.prefix[SEG_PREFIX]);
5852 i.prefixes--;
5855 else
5857 int code16;
5859 code16 = 0;
5860 if (flag_code == CODE_16BIT)
5861 code16 = CODE16;
5863 if (i.prefix[DATA_PREFIX] != 0)
5865 FRAG_APPEND_1_CHAR (DATA_PREFIX_OPCODE);
5866 i.prefixes -= 1;
5867 code16 ^= CODE16;
5870 size = 4;
5871 if (code16)
5872 size = 2;
5875 if (i.prefix[REX_PREFIX] != 0)
5877 FRAG_APPEND_1_CHAR (i.prefix[REX_PREFIX]);
5878 i.prefixes -= 1;
5881 if (i.prefixes != 0 && !intel_syntax)
5882 as_warn (_("skipping prefixes on this instruction"));
5884 p = frag_more (1 + size);
5885 *p++ = i.tm.base_opcode;
5887 fixP = fix_new_exp (frag_now, p - frag_now->fr_literal, size,
5888 i.op[0].disps, 1, reloc (size, 1, 1, i.reloc[0]));
5890 /* All jumps handled here are signed, but don't use a signed limit
5891 check for 32 and 16 bit jumps as we want to allow wrap around at
5892 4G and 64k respectively. */
5893 if (size == 1)
5894 fixP->fx_signed = 1;
5897 static void
5898 output_interseg_jump (void)
5900 char *p;
5901 int size;
5902 int prefix;
5903 int code16;
5905 code16 = 0;
5906 if (flag_code == CODE_16BIT)
5907 code16 = CODE16;
5909 prefix = 0;
5910 if (i.prefix[DATA_PREFIX] != 0)
5912 prefix = 1;
5913 i.prefixes -= 1;
5914 code16 ^= CODE16;
5916 if (i.prefix[REX_PREFIX] != 0)
5918 prefix++;
5919 i.prefixes -= 1;
5922 size = 4;
5923 if (code16)
5924 size = 2;
5926 if (i.prefixes != 0 && !intel_syntax)
5927 as_warn (_("skipping prefixes on this instruction"));
5929 /* 1 opcode; 2 segment; offset */
5930 p = frag_more (prefix + 1 + 2 + size);
5932 if (i.prefix[DATA_PREFIX] != 0)
5933 *p++ = DATA_PREFIX_OPCODE;
5935 if (i.prefix[REX_PREFIX] != 0)
5936 *p++ = i.prefix[REX_PREFIX];
5938 *p++ = i.tm.base_opcode;
5939 if (i.op[1].imms->X_op == O_constant)
5941 offsetT n = i.op[1].imms->X_add_number;
5943 if (size == 2
5944 && !fits_in_unsigned_word (n)
5945 && !fits_in_signed_word (n))
5947 as_bad (_("16-bit jump out of range"));
5948 return;
5950 md_number_to_chars (p, n, size);
5952 else
5953 fix_new_exp (frag_now, p - frag_now->fr_literal, size,
5954 i.op[1].imms, 0, reloc (size, 0, 0, i.reloc[1]));
5955 if (i.op[0].imms->X_op != O_constant)
5956 as_bad (_("can't handle non absolute segment in `%s'"),
5957 i.tm.name);
5958 md_number_to_chars (p + size, (valueT) i.op[0].imms->X_add_number, 2);
5961 static void
5962 output_insn (void)
5964 fragS *insn_start_frag;
5965 offsetT insn_start_off;
5967 /* Tie dwarf2 debug info to the address at the start of the insn.
5968 We can't do this after the insn has been output as the current
5969 frag may have been closed off. eg. by frag_var. */
5970 dwarf2_emit_insn (0);
5972 insn_start_frag = frag_now;
5973 insn_start_off = frag_now_fix ();
5975 /* Output jumps. */
5976 if (i.tm.opcode_modifier.jump)
5977 output_branch ();
5978 else if (i.tm.opcode_modifier.jumpbyte
5979 || i.tm.opcode_modifier.jumpdword)
5980 output_jump ();
5981 else if (i.tm.opcode_modifier.jumpintersegment)
5982 output_interseg_jump ();
5983 else
5985 /* Output normal instructions here. */
5986 char *p;
5987 unsigned char *q;
5988 unsigned int j;
5989 unsigned int prefix;
5991 /* Since the VEX prefix contains the implicit prefix, we don't
5992 need the explicit prefix. */
5993 if (!i.tm.opcode_modifier.vex)
5995 switch (i.tm.opcode_length)
5997 case 3:
5998 if (i.tm.base_opcode & 0xff000000)
6000 prefix = (i.tm.base_opcode >> 24) & 0xff;
6001 goto check_prefix;
6003 break;
6004 case 2:
6005 if ((i.tm.base_opcode & 0xff0000) != 0)
6007 prefix = (i.tm.base_opcode >> 16) & 0xff;
6008 if (i.tm.cpu_flags.bitfield.cpupadlock)
6010 check_prefix:
6011 if (prefix != REPE_PREFIX_OPCODE
6012 || (i.prefix[REP_PREFIX]
6013 != REPE_PREFIX_OPCODE))
6014 add_prefix (prefix);
6016 else
6017 add_prefix (prefix);
6019 break;
6020 case 1:
6021 break;
6022 default:
6023 abort ();
6026 /* The prefix bytes. */
6027 for (j = ARRAY_SIZE (i.prefix), q = i.prefix; j > 0; j--, q++)
6028 if (*q)
6029 FRAG_APPEND_1_CHAR (*q);
6032 if (i.tm.opcode_modifier.vex)
6034 for (j = 0, q = i.prefix; j < ARRAY_SIZE (i.prefix); j++, q++)
6035 if (*q)
6036 switch (j)
6038 case REX_PREFIX:
6039 /* REX byte is encoded in VEX prefix. */
6040 break;
6041 case SEG_PREFIX:
6042 case ADDR_PREFIX:
6043 FRAG_APPEND_1_CHAR (*q);
6044 break;
6045 default:
6046 /* There should be no other prefixes for instructions
6047 with VEX prefix. */
6048 abort ();
6051 /* Now the VEX prefix. */
6052 p = frag_more (i.vex.length);
6053 for (j = 0; j < i.vex.length; j++)
6054 p[j] = i.vex.bytes[j];
6057 /* Now the opcode; be careful about word order here! */
6058 if (i.tm.opcode_length == 1)
6060 FRAG_APPEND_1_CHAR (i.tm.base_opcode);
6062 else
6064 switch (i.tm.opcode_length)
6066 case 3:
6067 p = frag_more (3);
6068 *p++ = (i.tm.base_opcode >> 16) & 0xff;
6069 break;
6070 case 2:
6071 p = frag_more (2);
6072 break;
6073 default:
6074 abort ();
6075 break;
6078 /* Put out high byte first: can't use md_number_to_chars! */
6079 *p++ = (i.tm.base_opcode >> 8) & 0xff;
6080 *p = i.tm.base_opcode & 0xff;
6083 /* Now the modrm byte and sib byte (if present). */
6084 if (i.tm.opcode_modifier.modrm)
6086 FRAG_APPEND_1_CHAR ((i.rm.regmem << 0
6087 | i.rm.reg << 3
6088 | i.rm.mode << 6));
6089 /* If i.rm.regmem == ESP (4)
6090 && i.rm.mode != (Register mode)
6091 && not 16 bit
6092 ==> need second modrm byte. */
6093 if (i.rm.regmem == ESCAPE_TO_TWO_BYTE_ADDRESSING
6094 && i.rm.mode != 3
6095 && !(i.base_reg && i.base_reg->reg_type.bitfield.reg16))
6096 FRAG_APPEND_1_CHAR ((i.sib.base << 0
6097 | i.sib.index << 3
6098 | i.sib.scale << 6));
6101 if (i.disp_operands)
6102 output_disp (insn_start_frag, insn_start_off);
6104 if (i.imm_operands)
6105 output_imm (insn_start_frag, insn_start_off);
6108 #ifdef DEBUG386
6109 if (flag_debug)
6111 pi ("" /*line*/, &i);
6113 #endif /* DEBUG386 */
6116 /* Return the size of the displacement operand N. */
6118 static int
6119 disp_size (unsigned int n)
6121 int size = 4;
6122 if (i.types[n].bitfield.disp64)
6123 size = 8;
6124 else if (i.types[n].bitfield.disp8)
6125 size = 1;
6126 else if (i.types[n].bitfield.disp16)
6127 size = 2;
6128 return size;
6131 /* Return the size of the immediate operand N. */
6133 static int
6134 imm_size (unsigned int n)
6136 int size = 4;
6137 if (i.types[n].bitfield.imm64)
6138 size = 8;
6139 else if (i.types[n].bitfield.imm8 || i.types[n].bitfield.imm8s)
6140 size = 1;
6141 else if (i.types[n].bitfield.imm16)
6142 size = 2;
6143 return size;
6146 static void
6147 output_disp (fragS *insn_start_frag, offsetT insn_start_off)
6149 char *p;
6150 unsigned int n;
6152 for (n = 0; n < i.operands; n++)
6154 if (operand_type_check (i.types[n], disp))
6156 if (i.op[n].disps->X_op == O_constant)
6158 int size = disp_size (n);
6159 offsetT val;
6161 val = offset_in_range (i.op[n].disps->X_add_number,
6162 size);
6163 p = frag_more (size);
6164 md_number_to_chars (p, val, size);
6166 else
6168 enum bfd_reloc_code_real reloc_type;
6169 int size = disp_size (n);
6170 int sign = i.types[n].bitfield.disp32s;
6171 int pcrel = (i.flags[n] & Operand_PCrel) != 0;
6173 /* We can't have 8 bit displacement here. */
6174 gas_assert (!i.types[n].bitfield.disp8);
6176 /* The PC relative address is computed relative
6177 to the instruction boundary, so in case immediate
6178 fields follows, we need to adjust the value. */
6179 if (pcrel && i.imm_operands)
6181 unsigned int n1;
6182 int sz = 0;
6184 for (n1 = 0; n1 < i.operands; n1++)
6185 if (operand_type_check (i.types[n1], imm))
6187 /* Only one immediate is allowed for PC
6188 relative address. */
6189 gas_assert (sz == 0);
6190 sz = imm_size (n1);
6191 i.op[n].disps->X_add_number -= sz;
6193 /* We should find the immediate. */
6194 gas_assert (sz != 0);
6197 p = frag_more (size);
6198 reloc_type = reloc (size, pcrel, sign, i.reloc[n]);
6199 if (GOT_symbol
6200 && GOT_symbol == i.op[n].disps->X_add_symbol
6201 && (((reloc_type == BFD_RELOC_32
6202 || reloc_type == BFD_RELOC_X86_64_32S
6203 || (reloc_type == BFD_RELOC_64
6204 && object_64bit))
6205 && (i.op[n].disps->X_op == O_symbol
6206 || (i.op[n].disps->X_op == O_add
6207 && ((symbol_get_value_expression
6208 (i.op[n].disps->X_op_symbol)->X_op)
6209 == O_subtract))))
6210 || reloc_type == BFD_RELOC_32_PCREL))
6212 offsetT add;
6214 if (insn_start_frag == frag_now)
6215 add = (p - frag_now->fr_literal) - insn_start_off;
6216 else
6218 fragS *fr;
6220 add = insn_start_frag->fr_fix - insn_start_off;
6221 for (fr = insn_start_frag->fr_next;
6222 fr && fr != frag_now; fr = fr->fr_next)
6223 add += fr->fr_fix;
6224 add += p - frag_now->fr_literal;
6227 if (!object_64bit)
6229 reloc_type = BFD_RELOC_386_GOTPC;
6230 i.op[n].imms->X_add_number += add;
6232 else if (reloc_type == BFD_RELOC_64)
6233 reloc_type = BFD_RELOC_X86_64_GOTPC64;
6234 else
6235 /* Don't do the adjustment for x86-64, as there
6236 the pcrel addressing is relative to the _next_
6237 insn, and that is taken care of in other code. */
6238 reloc_type = BFD_RELOC_X86_64_GOTPC32;
6240 fix_new_exp (frag_now, p - frag_now->fr_literal, size,
6241 i.op[n].disps, pcrel, reloc_type);
6247 static void
6248 output_imm (fragS *insn_start_frag, offsetT insn_start_off)
6250 char *p;
6251 unsigned int n;
6253 for (n = 0; n < i.operands; n++)
6255 if (operand_type_check (i.types[n], imm))
6257 if (i.op[n].imms->X_op == O_constant)
6259 int size = imm_size (n);
6260 offsetT val;
6262 val = offset_in_range (i.op[n].imms->X_add_number,
6263 size);
6264 p = frag_more (size);
6265 md_number_to_chars (p, val, size);
6267 else
6269 /* Not absolute_section.
6270 Need a 32-bit fixup (don't support 8bit
6271 non-absolute imms). Try to support other
6272 sizes ... */
6273 enum bfd_reloc_code_real reloc_type;
6274 int size = imm_size (n);
6275 int sign;
6277 if (i.types[n].bitfield.imm32s
6278 && (i.suffix == QWORD_MNEM_SUFFIX
6279 || (!i.suffix && i.tm.opcode_modifier.no_lsuf)))
6280 sign = 1;
6281 else
6282 sign = 0;
6284 p = frag_more (size);
6285 reloc_type = reloc (size, 0, sign, i.reloc[n]);
6287 /* This is tough to explain. We end up with this one if we
6288 * have operands that look like
6289 * "_GLOBAL_OFFSET_TABLE_+[.-.L284]". The goal here is to
6290 * obtain the absolute address of the GOT, and it is strongly
6291 * preferable from a performance point of view to avoid using
6292 * a runtime relocation for this. The actual sequence of
6293 * instructions often look something like:
6295 * call .L66
6296 * .L66:
6297 * popl %ebx
6298 * addl $_GLOBAL_OFFSET_TABLE_+[.-.L66],%ebx
6300 * The call and pop essentially return the absolute address
6301 * of the label .L66 and store it in %ebx. The linker itself
6302 * will ultimately change the first operand of the addl so
6303 * that %ebx points to the GOT, but to keep things simple, the
6304 * .o file must have this operand set so that it generates not
6305 * the absolute address of .L66, but the absolute address of
6306 * itself. This allows the linker itself simply treat a GOTPC
6307 * relocation as asking for a pcrel offset to the GOT to be
6308 * added in, and the addend of the relocation is stored in the
6309 * operand field for the instruction itself.
6311 * Our job here is to fix the operand so that it would add
6312 * the correct offset so that %ebx would point to itself. The
6313 * thing that is tricky is that .-.L66 will point to the
6314 * beginning of the instruction, so we need to further modify
6315 * the operand so that it will point to itself. There are
6316 * other cases where you have something like:
6318 * .long $_GLOBAL_OFFSET_TABLE_+[.-.L66]
6320 * and here no correction would be required. Internally in
6321 * the assembler we treat operands of this form as not being
6322 * pcrel since the '.' is explicitly mentioned, and I wonder
6323 * whether it would simplify matters to do it this way. Who
6324 * knows. In earlier versions of the PIC patches, the
6325 * pcrel_adjust field was used to store the correction, but
6326 * since the expression is not pcrel, I felt it would be
6327 * confusing to do it this way. */
6329 if ((reloc_type == BFD_RELOC_32
6330 || reloc_type == BFD_RELOC_X86_64_32S
6331 || reloc_type == BFD_RELOC_64)
6332 && GOT_symbol
6333 && GOT_symbol == i.op[n].imms->X_add_symbol
6334 && (i.op[n].imms->X_op == O_symbol
6335 || (i.op[n].imms->X_op == O_add
6336 && ((symbol_get_value_expression
6337 (i.op[n].imms->X_op_symbol)->X_op)
6338 == O_subtract))))
6340 offsetT add;
6342 if (insn_start_frag == frag_now)
6343 add = (p - frag_now->fr_literal) - insn_start_off;
6344 else
6346 fragS *fr;
6348 add = insn_start_frag->fr_fix - insn_start_off;
6349 for (fr = insn_start_frag->fr_next;
6350 fr && fr != frag_now; fr = fr->fr_next)
6351 add += fr->fr_fix;
6352 add += p - frag_now->fr_literal;
6355 if (!object_64bit)
6356 reloc_type = BFD_RELOC_386_GOTPC;
6357 else if (size == 4)
6358 reloc_type = BFD_RELOC_X86_64_GOTPC32;
6359 else if (size == 8)
6360 reloc_type = BFD_RELOC_X86_64_GOTPC64;
6361 i.op[n].imms->X_add_number += add;
6363 fix_new_exp (frag_now, p - frag_now->fr_literal, size,
6364 i.op[n].imms, 0, reloc_type);
6370 /* x86_cons_fix_new is called via the expression parsing code when a
6371 reloc is needed. We use this hook to get the correct .got reloc. */
6372 static enum bfd_reloc_code_real got_reloc = NO_RELOC;
6373 static int cons_sign = -1;
6375 void
6376 x86_cons_fix_new (fragS *frag, unsigned int off, unsigned int len,
6377 expressionS *exp)
6379 enum bfd_reloc_code_real r = reloc (len, 0, cons_sign, got_reloc);
6381 got_reloc = NO_RELOC;
6383 #ifdef TE_PE
6384 if (exp->X_op == O_secrel)
6386 exp->X_op = O_symbol;
6387 r = BFD_RELOC_32_SECREL;
6389 #endif
6391 fix_new_exp (frag, off, len, exp, 0, r);
6394 #if (!defined (OBJ_ELF) && !defined (OBJ_MAYBE_ELF)) || defined (LEX_AT)
6395 # define lex_got(reloc, adjust, types) NULL
6396 #else
6397 /* Parse operands of the form
6398 <symbol>@GOTOFF+<nnn>
6399 and similar .plt or .got references.
6401 If we find one, set up the correct relocation in RELOC and copy the
6402 input string, minus the `@GOTOFF' into a malloc'd buffer for
6403 parsing by the calling routine. Return this buffer, and if ADJUST
6404 is non-null set it to the length of the string we removed from the
6405 input line. Otherwise return NULL. */
6406 static char *
6407 lex_got (enum bfd_reloc_code_real *rel,
6408 int *adjust,
6409 i386_operand_type *types)
6411 /* Some of the relocations depend on the size of what field is to
6412 be relocated. But in our callers i386_immediate and i386_displacement
6413 we don't yet know the operand size (this will be set by insn
6414 matching). Hence we record the word32 relocation here,
6415 and adjust the reloc according to the real size in reloc(). */
6416 static const struct {
6417 const char *str;
6418 int len;
6419 const enum bfd_reloc_code_real rel[2];
6420 const i386_operand_type types64;
6421 } gotrel[] = {
6422 { STRING_COMMA_LEN ("PLTOFF"), { _dummy_first_bfd_reloc_code_real,
6423 BFD_RELOC_X86_64_PLTOFF64 },
6424 OPERAND_TYPE_IMM64 },
6425 { STRING_COMMA_LEN ("PLT"), { BFD_RELOC_386_PLT32,
6426 BFD_RELOC_X86_64_PLT32 },
6427 OPERAND_TYPE_IMM32_32S_DISP32 },
6428 { STRING_COMMA_LEN ("GOTPLT"), { _dummy_first_bfd_reloc_code_real,
6429 BFD_RELOC_X86_64_GOTPLT64 },
6430 OPERAND_TYPE_IMM64_DISP64 },
6431 { STRING_COMMA_LEN ("GOTOFF"), { BFD_RELOC_386_GOTOFF,
6432 BFD_RELOC_X86_64_GOTOFF64 },
6433 OPERAND_TYPE_IMM64_DISP64 },
6434 { STRING_COMMA_LEN ("GOTPCREL"), { _dummy_first_bfd_reloc_code_real,
6435 BFD_RELOC_X86_64_GOTPCREL },
6436 OPERAND_TYPE_IMM32_32S_DISP32 },
6437 { STRING_COMMA_LEN ("TLSGD"), { BFD_RELOC_386_TLS_GD,
6438 BFD_RELOC_X86_64_TLSGD },
6439 OPERAND_TYPE_IMM32_32S_DISP32 },
6440 { STRING_COMMA_LEN ("TLSLDM"), { BFD_RELOC_386_TLS_LDM,
6441 _dummy_first_bfd_reloc_code_real },
6442 OPERAND_TYPE_NONE },
6443 { STRING_COMMA_LEN ("TLSLD"), { _dummy_first_bfd_reloc_code_real,
6444 BFD_RELOC_X86_64_TLSLD },
6445 OPERAND_TYPE_IMM32_32S_DISP32 },
6446 { STRING_COMMA_LEN ("GOTTPOFF"), { BFD_RELOC_386_TLS_IE_32,
6447 BFD_RELOC_X86_64_GOTTPOFF },
6448 OPERAND_TYPE_IMM32_32S_DISP32 },
6449 { STRING_COMMA_LEN ("TPOFF"), { BFD_RELOC_386_TLS_LE_32,
6450 BFD_RELOC_X86_64_TPOFF32 },
6451 OPERAND_TYPE_IMM32_32S_64_DISP32_64 },
6452 { STRING_COMMA_LEN ("NTPOFF"), { BFD_RELOC_386_TLS_LE,
6453 _dummy_first_bfd_reloc_code_real },
6454 OPERAND_TYPE_NONE },
6455 { STRING_COMMA_LEN ("DTPOFF"), { BFD_RELOC_386_TLS_LDO_32,
6456 BFD_RELOC_X86_64_DTPOFF32 },
6457 OPERAND_TYPE_IMM32_32S_64_DISP32_64 },
6458 { STRING_COMMA_LEN ("GOTNTPOFF"),{ BFD_RELOC_386_TLS_GOTIE,
6459 _dummy_first_bfd_reloc_code_real },
6460 OPERAND_TYPE_NONE },
6461 { STRING_COMMA_LEN ("INDNTPOFF"),{ BFD_RELOC_386_TLS_IE,
6462 _dummy_first_bfd_reloc_code_real },
6463 OPERAND_TYPE_NONE },
6464 { STRING_COMMA_LEN ("GOT"), { BFD_RELOC_386_GOT32,
6465 BFD_RELOC_X86_64_GOT32 },
6466 OPERAND_TYPE_IMM32_32S_64_DISP32 },
6467 { STRING_COMMA_LEN ("TLSDESC"), { BFD_RELOC_386_TLS_GOTDESC,
6468 BFD_RELOC_X86_64_GOTPC32_TLSDESC },
6469 OPERAND_TYPE_IMM32_32S_DISP32 },
6470 { STRING_COMMA_LEN ("TLSCALL"), { BFD_RELOC_386_TLS_DESC_CALL,
6471 BFD_RELOC_X86_64_TLSDESC_CALL },
6472 OPERAND_TYPE_IMM32_32S_DISP32 },
6474 char *cp;
6475 unsigned int j;
6477 if (!IS_ELF)
6478 return NULL;
6480 for (cp = input_line_pointer; *cp != '@'; cp++)
6481 if (is_end_of_line[(unsigned char) *cp] || *cp == ',')
6482 return NULL;
6484 for (j = 0; j < ARRAY_SIZE (gotrel); j++)
6486 int len = gotrel[j].len;
6487 if (strncasecmp (cp + 1, gotrel[j].str, len) == 0)
6489 if (gotrel[j].rel[object_64bit] != 0)
6491 int first, second;
6492 char *tmpbuf, *past_reloc;
6494 *rel = gotrel[j].rel[object_64bit];
6495 if (adjust)
6496 *adjust = len;
6498 if (types)
6500 if (flag_code != CODE_64BIT)
6502 types->bitfield.imm32 = 1;
6503 types->bitfield.disp32 = 1;
6505 else
6506 *types = gotrel[j].types64;
6509 if (GOT_symbol == NULL)
6510 GOT_symbol = symbol_find_or_make (GLOBAL_OFFSET_TABLE_NAME);
6512 /* The length of the first part of our input line. */
6513 first = cp - input_line_pointer;
6515 /* The second part goes from after the reloc token until
6516 (and including) an end_of_line char or comma. */
6517 past_reloc = cp + 1 + len;
6518 cp = past_reloc;
6519 while (!is_end_of_line[(unsigned char) *cp] && *cp != ',')
6520 ++cp;
6521 second = cp + 1 - past_reloc;
6523 /* Allocate and copy string. The trailing NUL shouldn't
6524 be necessary, but be safe. */
6525 tmpbuf = (char *) xmalloc (first + second + 2);
6526 memcpy (tmpbuf, input_line_pointer, first);
6527 if (second != 0 && *past_reloc != ' ')
6528 /* Replace the relocation token with ' ', so that
6529 errors like foo@GOTOFF1 will be detected. */
6530 tmpbuf[first++] = ' ';
6531 memcpy (tmpbuf + first, past_reloc, second);
6532 tmpbuf[first + second] = '\0';
6533 return tmpbuf;
6536 as_bad (_("@%s reloc is not supported with %d-bit output format"),
6537 gotrel[j].str, 1 << (5 + object_64bit));
6538 return NULL;
6542 /* Might be a symbol version string. Don't as_bad here. */
6543 return NULL;
6546 void
6547 x86_cons (expressionS *exp, int size)
6549 intel_syntax = -intel_syntax;
6551 exp->X_md = 0;
6552 if (size == 4 || (object_64bit && size == 8))
6554 /* Handle @GOTOFF and the like in an expression. */
6555 char *save;
6556 char *gotfree_input_line;
6557 int adjust;
6559 save = input_line_pointer;
6560 gotfree_input_line = lex_got (&got_reloc, &adjust, NULL);
6561 if (gotfree_input_line)
6562 input_line_pointer = gotfree_input_line;
6564 expression (exp);
6566 if (gotfree_input_line)
6568 /* expression () has merrily parsed up to the end of line,
6569 or a comma - in the wrong buffer. Transfer how far
6570 input_line_pointer has moved to the right buffer. */
6571 input_line_pointer = (save
6572 + (input_line_pointer - gotfree_input_line)
6573 + adjust);
6574 free (gotfree_input_line);
6575 if (exp->X_op == O_constant
6576 || exp->X_op == O_absent
6577 || exp->X_op == O_illegal
6578 || exp->X_op == O_register
6579 || exp->X_op == O_big)
6581 char c = *input_line_pointer;
6582 *input_line_pointer = 0;
6583 as_bad (_("missing or invalid expression `%s'"), save);
6584 *input_line_pointer = c;
6588 else
6589 expression (exp);
6591 intel_syntax = -intel_syntax;
6593 if (intel_syntax)
6594 i386_intel_simplify (exp);
6596 #endif
6598 static void
6599 signed_cons (int size)
6601 if (flag_code == CODE_64BIT)
6602 cons_sign = 1;
6603 cons (size);
6604 cons_sign = -1;
6607 #ifdef TE_PE
6608 static void
6609 pe_directive_secrel (dummy)
6610 int dummy ATTRIBUTE_UNUSED;
6612 expressionS exp;
6616 expression (&exp);
6617 if (exp.X_op == O_symbol)
6618 exp.X_op = O_secrel;
6620 emit_expr (&exp, 4);
6622 while (*input_line_pointer++ == ',');
6624 input_line_pointer--;
6625 demand_empty_rest_of_line ();
6627 #endif
6629 static int
6630 i386_immediate (char *imm_start)
6632 char *save_input_line_pointer;
6633 char *gotfree_input_line;
6634 segT exp_seg = 0;
6635 expressionS *exp;
6636 i386_operand_type types;
6638 operand_type_set (&types, ~0);
6640 if (i.imm_operands == MAX_IMMEDIATE_OPERANDS)
6642 as_bad (_("at most %d immediate operands are allowed"),
6643 MAX_IMMEDIATE_OPERANDS);
6644 return 0;
6647 exp = &im_expressions[i.imm_operands++];
6648 i.op[this_operand].imms = exp;
6650 if (is_space_char (*imm_start))
6651 ++imm_start;
6653 save_input_line_pointer = input_line_pointer;
6654 input_line_pointer = imm_start;
6656 gotfree_input_line = lex_got (&i.reloc[this_operand], NULL, &types);
6657 if (gotfree_input_line)
6658 input_line_pointer = gotfree_input_line;
6660 exp_seg = expression (exp);
6662 SKIP_WHITESPACE ();
6663 if (*input_line_pointer)
6664 as_bad (_("junk `%s' after expression"), input_line_pointer);
6666 input_line_pointer = save_input_line_pointer;
6667 if (gotfree_input_line)
6669 free (gotfree_input_line);
6671 if (exp->X_op == O_constant || exp->X_op == O_register)
6672 exp->X_op = O_illegal;
6675 return i386_finalize_immediate (exp_seg, exp, types, imm_start);
6678 static int
6679 i386_finalize_immediate (segT exp_seg ATTRIBUTE_UNUSED, expressionS *exp,
6680 i386_operand_type types, const char *imm_start)
6682 if (exp->X_op == O_absent || exp->X_op == O_illegal || exp->X_op == O_big)
6684 if (imm_start)
6685 as_bad (_("missing or invalid immediate expression `%s'"),
6686 imm_start);
6687 return 0;
6689 else if (exp->X_op == O_constant)
6691 /* Size it properly later. */
6692 i.types[this_operand].bitfield.imm64 = 1;
6693 /* If not 64bit, sign extend val. */
6694 if (flag_code != CODE_64BIT
6695 && (exp->X_add_number & ~(((addressT) 2 << 31) - 1)) == 0)
6696 exp->X_add_number
6697 = (exp->X_add_number ^ ((addressT) 1 << 31)) - ((addressT) 1 << 31);
6699 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
6700 else if (OUTPUT_FLAVOR == bfd_target_aout_flavour
6701 && exp_seg != absolute_section
6702 && exp_seg != text_section
6703 && exp_seg != data_section
6704 && exp_seg != bss_section
6705 && exp_seg != undefined_section
6706 && !bfd_is_com_section (exp_seg))
6708 as_bad (_("unimplemented segment %s in operand"), exp_seg->name);
6709 return 0;
6711 #endif
6712 else if (!intel_syntax && exp->X_op == O_register)
6714 if (imm_start)
6715 as_bad (_("illegal immediate register operand %s"), imm_start);
6716 return 0;
6718 else
6720 /* This is an address. The size of the address will be
6721 determined later, depending on destination register,
6722 suffix, or the default for the section. */
6723 i.types[this_operand].bitfield.imm8 = 1;
6724 i.types[this_operand].bitfield.imm16 = 1;
6725 i.types[this_operand].bitfield.imm32 = 1;
6726 i.types[this_operand].bitfield.imm32s = 1;
6727 i.types[this_operand].bitfield.imm64 = 1;
6728 i.types[this_operand] = operand_type_and (i.types[this_operand],
6729 types);
6732 return 1;
6735 static char *
6736 i386_scale (char *scale)
6738 offsetT val;
6739 char *save = input_line_pointer;
6741 input_line_pointer = scale;
6742 val = get_absolute_expression ();
6744 switch (val)
6746 case 1:
6747 i.log2_scale_factor = 0;
6748 break;
6749 case 2:
6750 i.log2_scale_factor = 1;
6751 break;
6752 case 4:
6753 i.log2_scale_factor = 2;
6754 break;
6755 case 8:
6756 i.log2_scale_factor = 3;
6757 break;
6758 default:
6760 char sep = *input_line_pointer;
6762 *input_line_pointer = '\0';
6763 as_bad (_("expecting scale factor of 1, 2, 4, or 8: got `%s'"),
6764 scale);
6765 *input_line_pointer = sep;
6766 input_line_pointer = save;
6767 return NULL;
6770 if (i.log2_scale_factor != 0 && i.index_reg == 0)
6772 as_warn (_("scale factor of %d without an index register"),
6773 1 << i.log2_scale_factor);
6774 i.log2_scale_factor = 0;
6776 scale = input_line_pointer;
6777 input_line_pointer = save;
6778 return scale;
6781 static int
6782 i386_displacement (char *disp_start, char *disp_end)
6784 expressionS *exp;
6785 segT exp_seg = 0;
6786 char *save_input_line_pointer;
6787 char *gotfree_input_line;
6788 int override;
6789 i386_operand_type bigdisp, types = anydisp;
6790 int ret;
6792 if (i.disp_operands == MAX_MEMORY_OPERANDS)
6794 as_bad (_("at most %d displacement operands are allowed"),
6795 MAX_MEMORY_OPERANDS);
6796 return 0;
6799 operand_type_set (&bigdisp, 0);
6800 if ((i.types[this_operand].bitfield.jumpabsolute)
6801 || (!current_templates->start->opcode_modifier.jump
6802 && !current_templates->start->opcode_modifier.jumpdword))
6804 bigdisp.bitfield.disp32 = 1;
6805 override = (i.prefix[ADDR_PREFIX] != 0);
6806 if (flag_code == CODE_64BIT)
6808 if (!override)
6810 bigdisp.bitfield.disp32s = 1;
6811 bigdisp.bitfield.disp64 = 1;
6814 else if ((flag_code == CODE_16BIT) ^ override)
6816 bigdisp.bitfield.disp32 = 0;
6817 bigdisp.bitfield.disp16 = 1;
6820 else
6822 /* For PC-relative branches, the width of the displacement
6823 is dependent upon data size, not address size. */
6824 override = (i.prefix[DATA_PREFIX] != 0);
6825 if (flag_code == CODE_64BIT)
6827 if (override || i.suffix == WORD_MNEM_SUFFIX)
6828 bigdisp.bitfield.disp16 = 1;
6829 else
6831 bigdisp.bitfield.disp32 = 1;
6832 bigdisp.bitfield.disp32s = 1;
6835 else
6837 if (!override)
6838 override = (i.suffix == (flag_code != CODE_16BIT
6839 ? WORD_MNEM_SUFFIX
6840 : LONG_MNEM_SUFFIX));
6841 bigdisp.bitfield.disp32 = 1;
6842 if ((flag_code == CODE_16BIT) ^ override)
6844 bigdisp.bitfield.disp32 = 0;
6845 bigdisp.bitfield.disp16 = 1;
6849 i.types[this_operand] = operand_type_or (i.types[this_operand],
6850 bigdisp);
6852 exp = &disp_expressions[i.disp_operands];
6853 i.op[this_operand].disps = exp;
6854 i.disp_operands++;
6855 save_input_line_pointer = input_line_pointer;
6856 input_line_pointer = disp_start;
6857 END_STRING_AND_SAVE (disp_end);
6859 #ifndef GCC_ASM_O_HACK
6860 #define GCC_ASM_O_HACK 0
6861 #endif
6862 #if GCC_ASM_O_HACK
6863 END_STRING_AND_SAVE (disp_end + 1);
6864 if (i.types[this_operand].bitfield.baseIndex
6865 && displacement_string_end[-1] == '+')
6867 /* This hack is to avoid a warning when using the "o"
6868 constraint within gcc asm statements.
6869 For instance:
6871 #define _set_tssldt_desc(n,addr,limit,type) \
6872 __asm__ __volatile__ ( \
6873 "movw %w2,%0\n\t" \
6874 "movw %w1,2+%0\n\t" \
6875 "rorl $16,%1\n\t" \
6876 "movb %b1,4+%0\n\t" \
6877 "movb %4,5+%0\n\t" \
6878 "movb $0,6+%0\n\t" \
6879 "movb %h1,7+%0\n\t" \
6880 "rorl $16,%1" \
6881 : "=o"(*(n)) : "q" (addr), "ri"(limit), "i"(type))
6883 This works great except that the output assembler ends
6884 up looking a bit weird if it turns out that there is
6885 no offset. You end up producing code that looks like:
6887 #APP
6888 movw $235,(%eax)
6889 movw %dx,2+(%eax)
6890 rorl $16,%edx
6891 movb %dl,4+(%eax)
6892 movb $137,5+(%eax)
6893 movb $0,6+(%eax)
6894 movb %dh,7+(%eax)
6895 rorl $16,%edx
6896 #NO_APP
6898 So here we provide the missing zero. */
6900 *displacement_string_end = '0';
6902 #endif
6903 gotfree_input_line = lex_got (&i.reloc[this_operand], NULL, &types);
6904 if (gotfree_input_line)
6905 input_line_pointer = gotfree_input_line;
6907 exp_seg = expression (exp);
6909 SKIP_WHITESPACE ();
6910 if (*input_line_pointer)
6911 as_bad (_("junk `%s' after expression"), input_line_pointer);
6912 #if GCC_ASM_O_HACK
6913 RESTORE_END_STRING (disp_end + 1);
6914 #endif
6915 input_line_pointer = save_input_line_pointer;
6916 if (gotfree_input_line)
6918 free (gotfree_input_line);
6920 if (exp->X_op == O_constant || exp->X_op == O_register)
6921 exp->X_op = O_illegal;
6924 ret = i386_finalize_displacement (exp_seg, exp, types, disp_start);
6926 RESTORE_END_STRING (disp_end);
6928 return ret;
6931 static int
6932 i386_finalize_displacement (segT exp_seg ATTRIBUTE_UNUSED, expressionS *exp,
6933 i386_operand_type types, const char *disp_start)
6935 i386_operand_type bigdisp;
6936 int ret = 1;
6938 /* We do this to make sure that the section symbol is in
6939 the symbol table. We will ultimately change the relocation
6940 to be relative to the beginning of the section. */
6941 if (i.reloc[this_operand] == BFD_RELOC_386_GOTOFF
6942 || i.reloc[this_operand] == BFD_RELOC_X86_64_GOTPCREL
6943 || i.reloc[this_operand] == BFD_RELOC_X86_64_GOTOFF64)
6945 if (exp->X_op != O_symbol)
6946 goto inv_disp;
6948 if (S_IS_LOCAL (exp->X_add_symbol)
6949 && S_GET_SEGMENT (exp->X_add_symbol) != undefined_section
6950 && S_GET_SEGMENT (exp->X_add_symbol) != expr_section)
6951 section_symbol (S_GET_SEGMENT (exp->X_add_symbol));
6952 exp->X_op = O_subtract;
6953 exp->X_op_symbol = GOT_symbol;
6954 if (i.reloc[this_operand] == BFD_RELOC_X86_64_GOTPCREL)
6955 i.reloc[this_operand] = BFD_RELOC_32_PCREL;
6956 else if (i.reloc[this_operand] == BFD_RELOC_X86_64_GOTOFF64)
6957 i.reloc[this_operand] = BFD_RELOC_64;
6958 else
6959 i.reloc[this_operand] = BFD_RELOC_32;
6962 else if (exp->X_op == O_absent
6963 || exp->X_op == O_illegal
6964 || exp->X_op == O_big)
6966 inv_disp:
6967 as_bad (_("missing or invalid displacement expression `%s'"),
6968 disp_start);
6969 ret = 0;
6972 else if (flag_code == CODE_64BIT
6973 && !i.prefix[ADDR_PREFIX]
6974 && exp->X_op == O_constant)
6976 /* Since displacement is signed extended to 64bit, don't allow
6977 disp32 and turn off disp32s if they are out of range. */
6978 i.types[this_operand].bitfield.disp32 = 0;
6979 if (!fits_in_signed_long (exp->X_add_number))
6981 i.types[this_operand].bitfield.disp32s = 0;
6982 if (i.types[this_operand].bitfield.baseindex)
6984 as_bad (_("0x%lx out range of signed 32bit displacement"),
6985 (long) exp->X_add_number);
6986 ret = 0;
6991 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
6992 else if (exp->X_op != O_constant
6993 && OUTPUT_FLAVOR == bfd_target_aout_flavour
6994 && exp_seg != absolute_section
6995 && exp_seg != text_section
6996 && exp_seg != data_section
6997 && exp_seg != bss_section
6998 && exp_seg != undefined_section
6999 && !bfd_is_com_section (exp_seg))
7001 as_bad (_("unimplemented segment %s in operand"), exp_seg->name);
7002 ret = 0;
7004 #endif
7006 /* Check if this is a displacement only operand. */
7007 bigdisp = i.types[this_operand];
7008 bigdisp.bitfield.disp8 = 0;
7009 bigdisp.bitfield.disp16 = 0;
7010 bigdisp.bitfield.disp32 = 0;
7011 bigdisp.bitfield.disp32s = 0;
7012 bigdisp.bitfield.disp64 = 0;
7013 if (operand_type_all_zero (&bigdisp))
7014 i.types[this_operand] = operand_type_and (i.types[this_operand],
7015 types);
7017 return ret;
7020 /* Make sure the memory operand we've been dealt is valid.
7021 Return 1 on success, 0 on a failure. */
7023 static int
7024 i386_index_check (const char *operand_string)
7026 int ok;
7027 const char *kind = "base/index";
7028 #if INFER_ADDR_PREFIX
7029 int fudged = 0;
7031 tryprefix:
7032 #endif
7033 ok = 1;
7034 if (current_templates->start->opcode_modifier.isstring
7035 && !current_templates->start->opcode_modifier.immext
7036 && (current_templates->end[-1].opcode_modifier.isstring
7037 || i.mem_operands))
7039 /* Memory operands of string insns are special in that they only allow
7040 a single register (rDI, rSI, or rBX) as their memory address. */
7041 unsigned int expected;
7043 kind = "string address";
7045 if (current_templates->start->opcode_modifier.w)
7047 i386_operand_type type = current_templates->end[-1].operand_types[0];
7049 if (!type.bitfield.baseindex
7050 || ((!i.mem_operands != !intel_syntax)
7051 && current_templates->end[-1].operand_types[1]
7052 .bitfield.baseindex))
7053 type = current_templates->end[-1].operand_types[1];
7054 expected = type.bitfield.esseg ? 7 /* rDI */ : 6 /* rSI */;
7056 else
7057 expected = 3 /* rBX */;
7059 if (!i.base_reg || i.index_reg
7060 || operand_type_check (i.types[this_operand], disp))
7061 ok = -1;
7062 else if (!(flag_code == CODE_64BIT
7063 ? i.prefix[ADDR_PREFIX]
7064 ? i.base_reg->reg_type.bitfield.reg32
7065 : i.base_reg->reg_type.bitfield.reg64
7066 : (flag_code == CODE_16BIT) ^ !i.prefix[ADDR_PREFIX]
7067 ? i.base_reg->reg_type.bitfield.reg32
7068 : i.base_reg->reg_type.bitfield.reg16))
7069 ok = 0;
7070 else if (i.base_reg->reg_num != expected)
7071 ok = -1;
7073 if (ok < 0)
7075 unsigned int j;
7077 for (j = 0; j < i386_regtab_size; ++j)
7078 if ((flag_code == CODE_64BIT
7079 ? i.prefix[ADDR_PREFIX]
7080 ? i386_regtab[j].reg_type.bitfield.reg32
7081 : i386_regtab[j].reg_type.bitfield.reg64
7082 : (flag_code == CODE_16BIT) ^ !i.prefix[ADDR_PREFIX]
7083 ? i386_regtab[j].reg_type.bitfield.reg32
7084 : i386_regtab[j].reg_type.bitfield.reg16)
7085 && i386_regtab[j].reg_num == expected)
7086 break;
7087 gas_assert (j < i386_regtab_size);
7088 as_warn (_("`%s' is not valid here (expected `%c%s%s%c')"),
7089 operand_string,
7090 intel_syntax ? '[' : '(',
7091 register_prefix,
7092 i386_regtab[j].reg_name,
7093 intel_syntax ? ']' : ')');
7094 ok = 1;
7097 else if (flag_code == CODE_64BIT)
7099 if ((i.base_reg
7100 && ((i.prefix[ADDR_PREFIX] == 0
7101 && !i.base_reg->reg_type.bitfield.reg64)
7102 || (i.prefix[ADDR_PREFIX]
7103 && !i.base_reg->reg_type.bitfield.reg32))
7104 && (i.index_reg
7105 || i.base_reg->reg_num !=
7106 (i.prefix[ADDR_PREFIX] == 0 ? RegRip : RegEip)))
7107 || (i.index_reg
7108 && (!i.index_reg->reg_type.bitfield.baseindex
7109 || (i.prefix[ADDR_PREFIX] == 0
7110 && i.index_reg->reg_num != RegRiz
7111 && !i.index_reg->reg_type.bitfield.reg64
7113 || (i.prefix[ADDR_PREFIX]
7114 && i.index_reg->reg_num != RegEiz
7115 && !i.index_reg->reg_type.bitfield.reg32))))
7116 ok = 0;
7118 else
7120 if ((flag_code == CODE_16BIT) ^ (i.prefix[ADDR_PREFIX] != 0))
7122 /* 16bit checks. */
7123 if ((i.base_reg
7124 && (!i.base_reg->reg_type.bitfield.reg16
7125 || !i.base_reg->reg_type.bitfield.baseindex))
7126 || (i.index_reg
7127 && (!i.index_reg->reg_type.bitfield.reg16
7128 || !i.index_reg->reg_type.bitfield.baseindex
7129 || !(i.base_reg
7130 && i.base_reg->reg_num < 6
7131 && i.index_reg->reg_num >= 6
7132 && i.log2_scale_factor == 0))))
7133 ok = 0;
7135 else
7137 /* 32bit checks. */
7138 if ((i.base_reg
7139 && !i.base_reg->reg_type.bitfield.reg32)
7140 || (i.index_reg
7141 && ((!i.index_reg->reg_type.bitfield.reg32
7142 && i.index_reg->reg_num != RegEiz)
7143 || !i.index_reg->reg_type.bitfield.baseindex)))
7144 ok = 0;
7147 if (!ok)
7149 #if INFER_ADDR_PREFIX
7150 if (!i.mem_operands && !i.prefix[ADDR_PREFIX])
7152 i.prefix[ADDR_PREFIX] = ADDR_PREFIX_OPCODE;
7153 i.prefixes += 1;
7154 /* Change the size of any displacement too. At most one of
7155 Disp16 or Disp32 is set.
7156 FIXME. There doesn't seem to be any real need for separate
7157 Disp16 and Disp32 flags. The same goes for Imm16 and Imm32.
7158 Removing them would probably clean up the code quite a lot. */
7159 if (flag_code != CODE_64BIT
7160 && (i.types[this_operand].bitfield.disp16
7161 || i.types[this_operand].bitfield.disp32))
7162 i.types[this_operand]
7163 = operand_type_xor (i.types[this_operand], disp16_32);
7164 fudged = 1;
7165 goto tryprefix;
7167 if (fudged)
7168 as_bad (_("`%s' is not a valid %s expression"),
7169 operand_string,
7170 kind);
7171 else
7172 #endif
7173 as_bad (_("`%s' is not a valid %s-bit %s expression"),
7174 operand_string,
7175 flag_code_names[i.prefix[ADDR_PREFIX]
7176 ? flag_code == CODE_32BIT
7177 ? CODE_16BIT
7178 : CODE_32BIT
7179 : flag_code],
7180 kind);
7182 return ok;
7185 /* Parse OPERAND_STRING into the i386_insn structure I. Returns zero
7186 on error. */
7188 static int
7189 i386_att_operand (char *operand_string)
7191 const reg_entry *r;
7192 char *end_op;
7193 char *op_string = operand_string;
7195 if (is_space_char (*op_string))
7196 ++op_string;
7198 /* We check for an absolute prefix (differentiating,
7199 for example, 'jmp pc_relative_label' from 'jmp *absolute_label'. */
7200 if (*op_string == ABSOLUTE_PREFIX)
7202 ++op_string;
7203 if (is_space_char (*op_string))
7204 ++op_string;
7205 i.types[this_operand].bitfield.jumpabsolute = 1;
7208 /* Check if operand is a register. */
7209 if ((r = parse_register (op_string, &end_op)) != NULL)
7211 i386_operand_type temp;
7213 /* Check for a segment override by searching for ':' after a
7214 segment register. */
7215 op_string = end_op;
7216 if (is_space_char (*op_string))
7217 ++op_string;
7218 if (*op_string == ':'
7219 && (r->reg_type.bitfield.sreg2
7220 || r->reg_type.bitfield.sreg3))
7222 switch (r->reg_num)
7224 case 0:
7225 i.seg[i.mem_operands] = &es;
7226 break;
7227 case 1:
7228 i.seg[i.mem_operands] = &cs;
7229 break;
7230 case 2:
7231 i.seg[i.mem_operands] = &ss;
7232 break;
7233 case 3:
7234 i.seg[i.mem_operands] = &ds;
7235 break;
7236 case 4:
7237 i.seg[i.mem_operands] = &fs;
7238 break;
7239 case 5:
7240 i.seg[i.mem_operands] = &gs;
7241 break;
7244 /* Skip the ':' and whitespace. */
7245 ++op_string;
7246 if (is_space_char (*op_string))
7247 ++op_string;
7249 if (!is_digit_char (*op_string)
7250 && !is_identifier_char (*op_string)
7251 && *op_string != '('
7252 && *op_string != ABSOLUTE_PREFIX)
7254 as_bad (_("bad memory operand `%s'"), op_string);
7255 return 0;
7257 /* Handle case of %es:*foo. */
7258 if (*op_string == ABSOLUTE_PREFIX)
7260 ++op_string;
7261 if (is_space_char (*op_string))
7262 ++op_string;
7263 i.types[this_operand].bitfield.jumpabsolute = 1;
7265 goto do_memory_reference;
7267 if (*op_string)
7269 as_bad (_("junk `%s' after register"), op_string);
7270 return 0;
7272 temp = r->reg_type;
7273 temp.bitfield.baseindex = 0;
7274 i.types[this_operand] = operand_type_or (i.types[this_operand],
7275 temp);
7276 i.types[this_operand].bitfield.unspecified = 0;
7277 i.op[this_operand].regs = r;
7278 i.reg_operands++;
7280 else if (*op_string == REGISTER_PREFIX)
7282 as_bad (_("bad register name `%s'"), op_string);
7283 return 0;
7285 else if (*op_string == IMMEDIATE_PREFIX)
7287 ++op_string;
7288 if (i.types[this_operand].bitfield.jumpabsolute)
7290 as_bad (_("immediate operand illegal with absolute jump"));
7291 return 0;
7293 if (!i386_immediate (op_string))
7294 return 0;
7296 else if (is_digit_char (*op_string)
7297 || is_identifier_char (*op_string)
7298 || *op_string == '(')
7300 /* This is a memory reference of some sort. */
7301 char *base_string;
7303 /* Start and end of displacement string expression (if found). */
7304 char *displacement_string_start;
7305 char *displacement_string_end;
7307 do_memory_reference:
7308 if ((i.mem_operands == 1
7309 && !current_templates->start->opcode_modifier.isstring)
7310 || i.mem_operands == 2)
7312 as_bad (_("too many memory references for `%s'"),
7313 current_templates->start->name);
7314 return 0;
7317 /* Check for base index form. We detect the base index form by
7318 looking for an ')' at the end of the operand, searching
7319 for the '(' matching it, and finding a REGISTER_PREFIX or ','
7320 after the '('. */
7321 base_string = op_string + strlen (op_string);
7323 --base_string;
7324 if (is_space_char (*base_string))
7325 --base_string;
7327 /* If we only have a displacement, set-up for it to be parsed later. */
7328 displacement_string_start = op_string;
7329 displacement_string_end = base_string + 1;
7331 if (*base_string == ')')
7333 char *temp_string;
7334 unsigned int parens_balanced = 1;
7335 /* We've already checked that the number of left & right ()'s are
7336 equal, so this loop will not be infinite. */
7339 base_string--;
7340 if (*base_string == ')')
7341 parens_balanced++;
7342 if (*base_string == '(')
7343 parens_balanced--;
7345 while (parens_balanced);
7347 temp_string = base_string;
7349 /* Skip past '(' and whitespace. */
7350 ++base_string;
7351 if (is_space_char (*base_string))
7352 ++base_string;
7354 if (*base_string == ','
7355 || ((i.base_reg = parse_register (base_string, &end_op))
7356 != NULL))
7358 displacement_string_end = temp_string;
7360 i.types[this_operand].bitfield.baseindex = 1;
7362 if (i.base_reg)
7364 base_string = end_op;
7365 if (is_space_char (*base_string))
7366 ++base_string;
7369 /* There may be an index reg or scale factor here. */
7370 if (*base_string == ',')
7372 ++base_string;
7373 if (is_space_char (*base_string))
7374 ++base_string;
7376 if ((i.index_reg = parse_register (base_string, &end_op))
7377 != NULL)
7379 base_string = end_op;
7380 if (is_space_char (*base_string))
7381 ++base_string;
7382 if (*base_string == ',')
7384 ++base_string;
7385 if (is_space_char (*base_string))
7386 ++base_string;
7388 else if (*base_string != ')')
7390 as_bad (_("expecting `,' or `)' "
7391 "after index register in `%s'"),
7392 operand_string);
7393 return 0;
7396 else if (*base_string == REGISTER_PREFIX)
7398 as_bad (_("bad register name `%s'"), base_string);
7399 return 0;
7402 /* Check for scale factor. */
7403 if (*base_string != ')')
7405 char *end_scale = i386_scale (base_string);
7407 if (!end_scale)
7408 return 0;
7410 base_string = end_scale;
7411 if (is_space_char (*base_string))
7412 ++base_string;
7413 if (*base_string != ')')
7415 as_bad (_("expecting `)' "
7416 "after scale factor in `%s'"),
7417 operand_string);
7418 return 0;
7421 else if (!i.index_reg)
7423 as_bad (_("expecting index register or scale factor "
7424 "after `,'; got '%c'"),
7425 *base_string);
7426 return 0;
7429 else if (*base_string != ')')
7431 as_bad (_("expecting `,' or `)' "
7432 "after base register in `%s'"),
7433 operand_string);
7434 return 0;
7437 else if (*base_string == REGISTER_PREFIX)
7439 as_bad (_("bad register name `%s'"), base_string);
7440 return 0;
7444 /* If there's an expression beginning the operand, parse it,
7445 assuming displacement_string_start and
7446 displacement_string_end are meaningful. */
7447 if (displacement_string_start != displacement_string_end)
7449 if (!i386_displacement (displacement_string_start,
7450 displacement_string_end))
7451 return 0;
7454 /* Special case for (%dx) while doing input/output op. */
7455 if (i.base_reg
7456 && operand_type_equal (&i.base_reg->reg_type,
7457 &reg16_inoutportreg)
7458 && i.index_reg == 0
7459 && i.log2_scale_factor == 0
7460 && i.seg[i.mem_operands] == 0
7461 && !operand_type_check (i.types[this_operand], disp))
7463 i.types[this_operand] = inoutportreg;
7464 return 1;
7467 if (i386_index_check (operand_string) == 0)
7468 return 0;
7469 i.types[this_operand].bitfield.mem = 1;
7470 i.mem_operands++;
7472 else
7474 /* It's not a memory operand; argh! */
7475 as_bad (_("invalid char %s beginning operand %d `%s'"),
7476 output_invalid (*op_string),
7477 this_operand + 1,
7478 op_string);
7479 return 0;
7481 return 1; /* Normal return. */
7484 /* md_estimate_size_before_relax()
7486 Called just before relax() for rs_machine_dependent frags. The x86
7487 assembler uses these frags to handle variable size jump
7488 instructions.
7490 Any symbol that is now undefined will not become defined.
7491 Return the correct fr_subtype in the frag.
7492 Return the initial "guess for variable size of frag" to caller.
7493 The guess is actually the growth beyond the fixed part. Whatever
7494 we do to grow the fixed or variable part contributes to our
7495 returned value. */
7498 md_estimate_size_before_relax (fragP, segment)
7499 fragS *fragP;
7500 segT segment;
7502 /* We've already got fragP->fr_subtype right; all we have to do is
7503 check for un-relaxable symbols. On an ELF system, we can't relax
7504 an externally visible symbol, because it may be overridden by a
7505 shared library. */
7506 if (S_GET_SEGMENT (fragP->fr_symbol) != segment
7507 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7508 || (IS_ELF
7509 && (S_IS_EXTERNAL (fragP->fr_symbol)
7510 || S_IS_WEAK (fragP->fr_symbol)
7511 || ((symbol_get_bfdsym (fragP->fr_symbol)->flags
7512 & BSF_GNU_INDIRECT_FUNCTION))))
7513 #endif
7514 #if defined (OBJ_COFF) && defined (TE_PE)
7515 || (OUTPUT_FLAVOR == bfd_target_coff_flavour
7516 && S_IS_WEAK (fragP->fr_symbol))
7517 #endif
7520 /* Symbol is undefined in this segment, or we need to keep a
7521 reloc so that weak symbols can be overridden. */
7522 int size = (fragP->fr_subtype & CODE16) ? 2 : 4;
7523 enum bfd_reloc_code_real reloc_type;
7524 unsigned char *opcode;
7525 int old_fr_fix;
7527 if (fragP->fr_var != NO_RELOC)
7528 reloc_type = (enum bfd_reloc_code_real) fragP->fr_var;
7529 else if (size == 2)
7530 reloc_type = BFD_RELOC_16_PCREL;
7531 else
7532 reloc_type = BFD_RELOC_32_PCREL;
7534 old_fr_fix = fragP->fr_fix;
7535 opcode = (unsigned char *) fragP->fr_opcode;
7537 switch (TYPE_FROM_RELAX_STATE (fragP->fr_subtype))
7539 case UNCOND_JUMP:
7540 /* Make jmp (0xeb) a (d)word displacement jump. */
7541 opcode[0] = 0xe9;
7542 fragP->fr_fix += size;
7543 fix_new (fragP, old_fr_fix, size,
7544 fragP->fr_symbol,
7545 fragP->fr_offset, 1,
7546 reloc_type);
7547 break;
7549 case COND_JUMP86:
7550 if (size == 2
7551 && (!no_cond_jump_promotion || fragP->fr_var != NO_RELOC))
7553 /* Negate the condition, and branch past an
7554 unconditional jump. */
7555 opcode[0] ^= 1;
7556 opcode[1] = 3;
7557 /* Insert an unconditional jump. */
7558 opcode[2] = 0xe9;
7559 /* We added two extra opcode bytes, and have a two byte
7560 offset. */
7561 fragP->fr_fix += 2 + 2;
7562 fix_new (fragP, old_fr_fix + 2, 2,
7563 fragP->fr_symbol,
7564 fragP->fr_offset, 1,
7565 reloc_type);
7566 break;
7568 /* Fall through. */
7570 case COND_JUMP:
7571 if (no_cond_jump_promotion && fragP->fr_var == NO_RELOC)
7573 fixS *fixP;
7575 fragP->fr_fix += 1;
7576 fixP = fix_new (fragP, old_fr_fix, 1,
7577 fragP->fr_symbol,
7578 fragP->fr_offset, 1,
7579 BFD_RELOC_8_PCREL);
7580 fixP->fx_signed = 1;
7581 break;
7584 /* This changes the byte-displacement jump 0x7N
7585 to the (d)word-displacement jump 0x0f,0x8N. */
7586 opcode[1] = opcode[0] + 0x10;
7587 opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
7588 /* We've added an opcode byte. */
7589 fragP->fr_fix += 1 + size;
7590 fix_new (fragP, old_fr_fix + 1, size,
7591 fragP->fr_symbol,
7592 fragP->fr_offset, 1,
7593 reloc_type);
7594 break;
7596 default:
7597 BAD_CASE (fragP->fr_subtype);
7598 break;
7600 frag_wane (fragP);
7601 return fragP->fr_fix - old_fr_fix;
7604 /* Guess size depending on current relax state. Initially the relax
7605 state will correspond to a short jump and we return 1, because
7606 the variable part of the frag (the branch offset) is one byte
7607 long. However, we can relax a section more than once and in that
7608 case we must either set fr_subtype back to the unrelaxed state,
7609 or return the value for the appropriate branch. */
7610 return md_relax_table[fragP->fr_subtype].rlx_length;
7613 /* Called after relax() is finished.
7615 In: Address of frag.
7616 fr_type == rs_machine_dependent.
7617 fr_subtype is what the address relaxed to.
7619 Out: Any fixSs and constants are set up.
7620 Caller will turn frag into a ".space 0". */
7622 void
7623 md_convert_frag (abfd, sec, fragP)
7624 bfd *abfd ATTRIBUTE_UNUSED;
7625 segT sec ATTRIBUTE_UNUSED;
7626 fragS *fragP;
7628 unsigned char *opcode;
7629 unsigned char *where_to_put_displacement = NULL;
7630 offsetT target_address;
7631 offsetT opcode_address;
7632 unsigned int extension = 0;
7633 offsetT displacement_from_opcode_start;
7635 opcode = (unsigned char *) fragP->fr_opcode;
7637 /* Address we want to reach in file space. */
7638 target_address = S_GET_VALUE (fragP->fr_symbol) + fragP->fr_offset;
7640 /* Address opcode resides at in file space. */
7641 opcode_address = fragP->fr_address + fragP->fr_fix;
7643 /* Displacement from opcode start to fill into instruction. */
7644 displacement_from_opcode_start = target_address - opcode_address;
7646 if ((fragP->fr_subtype & BIG) == 0)
7648 /* Don't have to change opcode. */
7649 extension = 1; /* 1 opcode + 1 displacement */
7650 where_to_put_displacement = &opcode[1];
7652 else
7654 if (no_cond_jump_promotion
7655 && TYPE_FROM_RELAX_STATE (fragP->fr_subtype) != UNCOND_JUMP)
7656 as_warn_where (fragP->fr_file, fragP->fr_line,
7657 _("long jump required"));
7659 switch (fragP->fr_subtype)
7661 case ENCODE_RELAX_STATE (UNCOND_JUMP, BIG):
7662 extension = 4; /* 1 opcode + 4 displacement */
7663 opcode[0] = 0xe9;
7664 where_to_put_displacement = &opcode[1];
7665 break;
7667 case ENCODE_RELAX_STATE (UNCOND_JUMP, BIG16):
7668 extension = 2; /* 1 opcode + 2 displacement */
7669 opcode[0] = 0xe9;
7670 where_to_put_displacement = &opcode[1];
7671 break;
7673 case ENCODE_RELAX_STATE (COND_JUMP, BIG):
7674 case ENCODE_RELAX_STATE (COND_JUMP86, BIG):
7675 extension = 5; /* 2 opcode + 4 displacement */
7676 opcode[1] = opcode[0] + 0x10;
7677 opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
7678 where_to_put_displacement = &opcode[2];
7679 break;
7681 case ENCODE_RELAX_STATE (COND_JUMP, BIG16):
7682 extension = 3; /* 2 opcode + 2 displacement */
7683 opcode[1] = opcode[0] + 0x10;
7684 opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
7685 where_to_put_displacement = &opcode[2];
7686 break;
7688 case ENCODE_RELAX_STATE (COND_JUMP86, BIG16):
7689 extension = 4;
7690 opcode[0] ^= 1;
7691 opcode[1] = 3;
7692 opcode[2] = 0xe9;
7693 where_to_put_displacement = &opcode[3];
7694 break;
7696 default:
7697 BAD_CASE (fragP->fr_subtype);
7698 break;
7702 /* If size if less then four we are sure that the operand fits,
7703 but if it's 4, then it could be that the displacement is larger
7704 then -/+ 2GB. */
7705 if (DISP_SIZE_FROM_RELAX_STATE (fragP->fr_subtype) == 4
7706 && object_64bit
7707 && ((addressT) (displacement_from_opcode_start - extension
7708 + ((addressT) 1 << 31))
7709 > (((addressT) 2 << 31) - 1)))
7711 as_bad_where (fragP->fr_file, fragP->fr_line,
7712 _("jump target out of range"));
7713 /* Make us emit 0. */
7714 displacement_from_opcode_start = extension;
7716 /* Now put displacement after opcode. */
7717 md_number_to_chars ((char *) where_to_put_displacement,
7718 (valueT) (displacement_from_opcode_start - extension),
7719 DISP_SIZE_FROM_RELAX_STATE (fragP->fr_subtype));
7720 fragP->fr_fix += extension;
7723 /* Apply a fixup (fixS) to segment data, once it has been determined
7724 by our caller that we have all the info we need to fix it up.
7726 On the 386, immediates, displacements, and data pointers are all in
7727 the same (little-endian) format, so we don't need to care about which
7728 we are handling. */
7730 void
7731 md_apply_fix (fixP, valP, seg)
7732 /* The fix we're to put in. */
7733 fixS *fixP;
7734 /* Pointer to the value of the bits. */
7735 valueT *valP;
7736 /* Segment fix is from. */
7737 segT seg ATTRIBUTE_UNUSED;
7739 char *p = fixP->fx_where + fixP->fx_frag->fr_literal;
7740 valueT value = *valP;
7742 #if !defined (TE_Mach)
7743 if (fixP->fx_pcrel)
7745 switch (fixP->fx_r_type)
7747 default:
7748 break;
7750 case BFD_RELOC_64:
7751 fixP->fx_r_type = BFD_RELOC_64_PCREL;
7752 break;
7753 case BFD_RELOC_32:
7754 case BFD_RELOC_X86_64_32S:
7755 fixP->fx_r_type = BFD_RELOC_32_PCREL;
7756 break;
7757 case BFD_RELOC_16:
7758 fixP->fx_r_type = BFD_RELOC_16_PCREL;
7759 break;
7760 case BFD_RELOC_8:
7761 fixP->fx_r_type = BFD_RELOC_8_PCREL;
7762 break;
7766 if (fixP->fx_addsy != NULL
7767 && (fixP->fx_r_type == BFD_RELOC_32_PCREL
7768 || fixP->fx_r_type == BFD_RELOC_64_PCREL
7769 || fixP->fx_r_type == BFD_RELOC_16_PCREL
7770 || fixP->fx_r_type == BFD_RELOC_8_PCREL)
7771 && !use_rela_relocations)
7773 /* This is a hack. There should be a better way to handle this.
7774 This covers for the fact that bfd_install_relocation will
7775 subtract the current location (for partial_inplace, PC relative
7776 relocations); see more below. */
7777 #ifndef OBJ_AOUT
7778 if (IS_ELF
7779 #ifdef TE_PE
7780 || OUTPUT_FLAVOR == bfd_target_coff_flavour
7781 #endif
7783 value += fixP->fx_where + fixP->fx_frag->fr_address;
7784 #endif
7785 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7786 if (IS_ELF)
7788 segT sym_seg = S_GET_SEGMENT (fixP->fx_addsy);
7790 if ((sym_seg == seg
7791 || (symbol_section_p (fixP->fx_addsy)
7792 && sym_seg != absolute_section))
7793 && !generic_force_reloc (fixP))
7795 /* Yes, we add the values in twice. This is because
7796 bfd_install_relocation subtracts them out again. I think
7797 bfd_install_relocation is broken, but I don't dare change
7798 it. FIXME. */
7799 value += fixP->fx_where + fixP->fx_frag->fr_address;
7802 #endif
7803 #if defined (OBJ_COFF) && defined (TE_PE)
7804 /* For some reason, the PE format does not store a
7805 section address offset for a PC relative symbol. */
7806 if (S_GET_SEGMENT (fixP->fx_addsy) != seg
7807 || S_IS_WEAK (fixP->fx_addsy))
7808 value += md_pcrel_from (fixP);
7809 #endif
7811 #if defined (OBJ_COFF) && defined (TE_PE)
7812 if (fixP->fx_addsy != NULL && S_IS_WEAK (fixP->fx_addsy))
7814 value -= S_GET_VALUE (fixP->fx_addsy);
7816 #endif
7818 /* Fix a few things - the dynamic linker expects certain values here,
7819 and we must not disappoint it. */
7820 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7821 if (IS_ELF && fixP->fx_addsy)
7822 switch (fixP->fx_r_type)
7824 case BFD_RELOC_386_PLT32:
7825 case BFD_RELOC_X86_64_PLT32:
7826 /* Make the jump instruction point to the address of the operand. At
7827 runtime we merely add the offset to the actual PLT entry. */
7828 value = -4;
7829 break;
7831 case BFD_RELOC_386_TLS_GD:
7832 case BFD_RELOC_386_TLS_LDM:
7833 case BFD_RELOC_386_TLS_IE_32:
7834 case BFD_RELOC_386_TLS_IE:
7835 case BFD_RELOC_386_TLS_GOTIE:
7836 case BFD_RELOC_386_TLS_GOTDESC:
7837 case BFD_RELOC_X86_64_TLSGD:
7838 case BFD_RELOC_X86_64_TLSLD:
7839 case BFD_RELOC_X86_64_GOTTPOFF:
7840 case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
7841 value = 0; /* Fully resolved at runtime. No addend. */
7842 /* Fallthrough */
7843 case BFD_RELOC_386_TLS_LE:
7844 case BFD_RELOC_386_TLS_LDO_32:
7845 case BFD_RELOC_386_TLS_LE_32:
7846 case BFD_RELOC_X86_64_DTPOFF32:
7847 case BFD_RELOC_X86_64_DTPOFF64:
7848 case BFD_RELOC_X86_64_TPOFF32:
7849 case BFD_RELOC_X86_64_TPOFF64:
7850 S_SET_THREAD_LOCAL (fixP->fx_addsy);
7851 break;
7853 case BFD_RELOC_386_TLS_DESC_CALL:
7854 case BFD_RELOC_X86_64_TLSDESC_CALL:
7855 value = 0; /* Fully resolved at runtime. No addend. */
7856 S_SET_THREAD_LOCAL (fixP->fx_addsy);
7857 fixP->fx_done = 0;
7858 return;
7860 case BFD_RELOC_386_GOT32:
7861 case BFD_RELOC_X86_64_GOT32:
7862 value = 0; /* Fully resolved at runtime. No addend. */
7863 break;
7865 case BFD_RELOC_VTABLE_INHERIT:
7866 case BFD_RELOC_VTABLE_ENTRY:
7867 fixP->fx_done = 0;
7868 return;
7870 default:
7871 break;
7873 #endif /* defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) */
7874 *valP = value;
7875 #endif /* !defined (TE_Mach) */
7877 /* Are we finished with this relocation now? */
7878 if (fixP->fx_addsy == NULL)
7879 fixP->fx_done = 1;
7880 #if defined (OBJ_COFF) && defined (TE_PE)
7881 else if (fixP->fx_addsy != NULL && S_IS_WEAK (fixP->fx_addsy))
7883 fixP->fx_done = 0;
7884 /* Remember value for tc_gen_reloc. */
7885 fixP->fx_addnumber = value;
7886 /* Clear out the frag for now. */
7887 value = 0;
7889 #endif
7890 else if (use_rela_relocations)
7892 fixP->fx_no_overflow = 1;
7893 /* Remember value for tc_gen_reloc. */
7894 fixP->fx_addnumber = value;
7895 value = 0;
7898 md_number_to_chars (p, value, fixP->fx_size);
7901 char *
7902 md_atof (int type, char *litP, int *sizeP)
7904 /* This outputs the LITTLENUMs in REVERSE order;
7905 in accord with the bigendian 386. */
7906 return ieee_md_atof (type, litP, sizeP, FALSE);
7909 static char output_invalid_buf[sizeof (unsigned char) * 2 + 6];
7911 static char *
7912 output_invalid (int c)
7914 if (ISPRINT (c))
7915 snprintf (output_invalid_buf, sizeof (output_invalid_buf),
7916 "'%c'", c);
7917 else
7918 snprintf (output_invalid_buf, sizeof (output_invalid_buf),
7919 "(0x%x)", (unsigned char) c);
7920 return output_invalid_buf;
7923 /* REG_STRING starts *before* REGISTER_PREFIX. */
7925 static const reg_entry *
7926 parse_real_register (char *reg_string, char **end_op)
7928 char *s = reg_string;
7929 char *p;
7930 char reg_name_given[MAX_REG_NAME_SIZE + 1];
7931 const reg_entry *r;
7933 /* Skip possible REGISTER_PREFIX and possible whitespace. */
7934 if (*s == REGISTER_PREFIX)
7935 ++s;
7937 if (is_space_char (*s))
7938 ++s;
7940 p = reg_name_given;
7941 while ((*p++ = register_chars[(unsigned char) *s]) != '\0')
7943 if (p >= reg_name_given + MAX_REG_NAME_SIZE)
7944 return (const reg_entry *) NULL;
7945 s++;
7948 /* For naked regs, make sure that we are not dealing with an identifier.
7949 This prevents confusing an identifier like `eax_var' with register
7950 `eax'. */
7951 if (allow_naked_reg && identifier_chars[(unsigned char) *s])
7952 return (const reg_entry *) NULL;
7954 *end_op = s;
7956 r = (const reg_entry *) hash_find (reg_hash, reg_name_given);
7958 /* Handle floating point regs, allowing spaces in the (i) part. */
7959 if (r == i386_regtab /* %st is first entry of table */)
7961 if (is_space_char (*s))
7962 ++s;
7963 if (*s == '(')
7965 ++s;
7966 if (is_space_char (*s))
7967 ++s;
7968 if (*s >= '0' && *s <= '7')
7970 int fpr = *s - '0';
7971 ++s;
7972 if (is_space_char (*s))
7973 ++s;
7974 if (*s == ')')
7976 *end_op = s + 1;
7977 r = (const reg_entry *) hash_find (reg_hash, "st(0)");
7978 know (r);
7979 return r + fpr;
7982 /* We have "%st(" then garbage. */
7983 return (const reg_entry *) NULL;
7987 if (r == NULL || allow_pseudo_reg)
7988 return r;
7990 if (operand_type_all_zero (&r->reg_type))
7991 return (const reg_entry *) NULL;
7993 if ((r->reg_type.bitfield.reg32
7994 || r->reg_type.bitfield.sreg3
7995 || r->reg_type.bitfield.control
7996 || r->reg_type.bitfield.debug
7997 || r->reg_type.bitfield.test)
7998 && !cpu_arch_flags.bitfield.cpui386)
7999 return (const reg_entry *) NULL;
8001 if (r->reg_type.bitfield.floatreg
8002 && !cpu_arch_flags.bitfield.cpu8087
8003 && !cpu_arch_flags.bitfield.cpu287
8004 && !cpu_arch_flags.bitfield.cpu387)
8005 return (const reg_entry *) NULL;
8007 if (r->reg_type.bitfield.regmmx && !cpu_arch_flags.bitfield.cpummx)
8008 return (const reg_entry *) NULL;
8010 if (r->reg_type.bitfield.regxmm && !cpu_arch_flags.bitfield.cpusse)
8011 return (const reg_entry *) NULL;
8013 if (r->reg_type.bitfield.regymm && !cpu_arch_flags.bitfield.cpuavx)
8014 return (const reg_entry *) NULL;
8016 /* Don't allow fake index register unless allow_index_reg isn't 0. */
8017 if (!allow_index_reg
8018 && (r->reg_num == RegEiz || r->reg_num == RegRiz))
8019 return (const reg_entry *) NULL;
8021 if (((r->reg_flags & (RegRex64 | RegRex))
8022 || r->reg_type.bitfield.reg64)
8023 && (!cpu_arch_flags.bitfield.cpulm
8024 || !operand_type_equal (&r->reg_type, &control))
8025 && flag_code != CODE_64BIT)
8026 return (const reg_entry *) NULL;
8028 if (r->reg_type.bitfield.sreg3 && r->reg_num == RegFlat && !intel_syntax)
8029 return (const reg_entry *) NULL;
8031 return r;
8034 /* REG_STRING starts *before* REGISTER_PREFIX. */
8036 static const reg_entry *
8037 parse_register (char *reg_string, char **end_op)
8039 const reg_entry *r;
8041 if (*reg_string == REGISTER_PREFIX || allow_naked_reg)
8042 r = parse_real_register (reg_string, end_op);
8043 else
8044 r = NULL;
8045 if (!r)
8047 char *save = input_line_pointer;
8048 char c;
8049 symbolS *symbolP;
8051 input_line_pointer = reg_string;
8052 c = get_symbol_end ();
8053 symbolP = symbol_find (reg_string);
8054 if (symbolP && S_GET_SEGMENT (symbolP) == reg_section)
8056 const expressionS *e = symbol_get_value_expression (symbolP);
8058 know (e->X_op == O_register);
8059 know (e->X_add_number >= 0
8060 && (valueT) e->X_add_number < i386_regtab_size);
8061 r = i386_regtab + e->X_add_number;
8062 *end_op = input_line_pointer;
8064 *input_line_pointer = c;
8065 input_line_pointer = save;
8067 return r;
8071 i386_parse_name (char *name, expressionS *e, char *nextcharP)
8073 const reg_entry *r;
8074 char *end = input_line_pointer;
8076 *end = *nextcharP;
8077 r = parse_register (name, &input_line_pointer);
8078 if (r && end <= input_line_pointer)
8080 *nextcharP = *input_line_pointer;
8081 *input_line_pointer = 0;
8082 e->X_op = O_register;
8083 e->X_add_number = r - i386_regtab;
8084 return 1;
8086 input_line_pointer = end;
8087 *end = 0;
8088 return intel_syntax ? i386_intel_parse_name (name, e) : 0;
8091 void
8092 md_operand (expressionS *e)
8094 char *end;
8095 const reg_entry *r;
8097 switch (*input_line_pointer)
8099 case REGISTER_PREFIX:
8100 r = parse_real_register (input_line_pointer, &end);
8101 if (r)
8103 e->X_op = O_register;
8104 e->X_add_number = r - i386_regtab;
8105 input_line_pointer = end;
8107 break;
8109 case '[':
8110 gas_assert (intel_syntax);
8111 end = input_line_pointer++;
8112 expression (e);
8113 if (*input_line_pointer == ']')
8115 ++input_line_pointer;
8116 e->X_op_symbol = make_expr_symbol (e);
8117 e->X_add_symbol = NULL;
8118 e->X_add_number = 0;
8119 e->X_op = O_index;
8121 else
8123 e->X_op = O_absent;
8124 input_line_pointer = end;
8126 break;
8131 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8132 const char *md_shortopts = "kVQ:sqn";
8133 #else
8134 const char *md_shortopts = "qn";
8135 #endif
8137 #define OPTION_32 (OPTION_MD_BASE + 0)
8138 #define OPTION_64 (OPTION_MD_BASE + 1)
8139 #define OPTION_DIVIDE (OPTION_MD_BASE + 2)
8140 #define OPTION_MARCH (OPTION_MD_BASE + 3)
8141 #define OPTION_MTUNE (OPTION_MD_BASE + 4)
8142 #define OPTION_MMNEMONIC (OPTION_MD_BASE + 5)
8143 #define OPTION_MSYNTAX (OPTION_MD_BASE + 6)
8144 #define OPTION_MINDEX_REG (OPTION_MD_BASE + 7)
8145 #define OPTION_MNAKED_REG (OPTION_MD_BASE + 8)
8146 #define OPTION_MOLD_GCC (OPTION_MD_BASE + 9)
8147 #define OPTION_MSSE2AVX (OPTION_MD_BASE + 10)
8148 #define OPTION_MSSE_CHECK (OPTION_MD_BASE + 11)
8149 #define OPTION_MAVXSCALAR (OPTION_MD_BASE + 12)
8150 #define OPTION_N32 (OPTION_MD_BASE + 13)
8152 struct option md_longopts[] =
8154 {"32", no_argument, NULL, OPTION_32},
8155 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
8156 || defined (TE_PE) || defined (TE_PEP))
8157 {"64", no_argument, NULL, OPTION_64},
8158 #endif
8159 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8160 {"n32", no_argument, NULL, OPTION_N32},
8161 #endif
8162 {"divide", no_argument, NULL, OPTION_DIVIDE},
8163 {"march", required_argument, NULL, OPTION_MARCH},
8164 {"mtune", required_argument, NULL, OPTION_MTUNE},
8165 {"mmnemonic", required_argument, NULL, OPTION_MMNEMONIC},
8166 {"msyntax", required_argument, NULL, OPTION_MSYNTAX},
8167 {"mindex-reg", no_argument, NULL, OPTION_MINDEX_REG},
8168 {"mnaked-reg", no_argument, NULL, OPTION_MNAKED_REG},
8169 {"mold-gcc", no_argument, NULL, OPTION_MOLD_GCC},
8170 {"msse2avx", no_argument, NULL, OPTION_MSSE2AVX},
8171 {"msse-check", required_argument, NULL, OPTION_MSSE_CHECK},
8172 {"mavxscalar", required_argument, NULL, OPTION_MAVXSCALAR},
8173 {NULL, no_argument, NULL, 0}
8175 size_t md_longopts_size = sizeof (md_longopts);
8178 md_parse_option (int c, char *arg)
8180 unsigned int j;
8181 char *arch, *next;
8183 switch (c)
8185 case 'n':
8186 optimize_align_code = 0;
8187 break;
8189 case 'q':
8190 quiet_warnings = 1;
8191 break;
8193 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8194 /* -Qy, -Qn: SVR4 arguments controlling whether a .comment section
8195 should be emitted or not. FIXME: Not implemented. */
8196 case 'Q':
8197 break;
8199 /* -V: SVR4 argument to print version ID. */
8200 case 'V':
8201 print_version_id ();
8202 break;
8204 /* -k: Ignore for FreeBSD compatibility. */
8205 case 'k':
8206 break;
8208 case 's':
8209 /* -s: On i386 Solaris, this tells the native assembler to use
8210 .stab instead of .stab.excl. We always use .stab anyhow. */
8211 break;
8212 #endif
8213 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
8214 || defined (TE_PE) || defined (TE_PEP))
8215 case OPTION_64:
8217 const char **list, **l;
8219 list = bfd_target_list ();
8220 for (l = list; *l != NULL; l++)
8221 if (CONST_STRNEQ (*l, "elf64-x86-64")
8222 || strcmp (*l, "coff-x86-64") == 0
8223 || strcmp (*l, "pe-x86-64") == 0
8224 || strcmp (*l, "pei-x86-64") == 0)
8226 default_arch = "x86_64";
8227 break;
8229 if (*l == NULL)
8230 as_fatal (_("No compiled in support for x86_64"));
8231 free (list);
8233 break;
8234 #endif
8236 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8237 case OPTION_N32:
8238 if (IS_ELF)
8240 const char **list, **l;
8242 list = bfd_target_list ();
8243 for (l = list; *l != NULL; l++)
8244 if (CONST_STRNEQ (*l, "elf32-x86-64"))
8246 default_arch = "x86_64:32";
8247 break;
8249 if (*l == NULL)
8250 as_fatal (_("No compiled in support for 32bit x86_64"));
8251 free (list);
8253 else
8254 as_fatal (_("32bit x86_64 is only supported for ELF"));
8255 break;
8256 #endif
8258 case OPTION_32:
8259 default_arch = "i386";
8260 break;
8262 case OPTION_DIVIDE:
8263 #ifdef SVR4_COMMENT_CHARS
8265 char *n, *t;
8266 const char *s;
8268 n = (char *) xmalloc (strlen (i386_comment_chars) + 1);
8269 t = n;
8270 for (s = i386_comment_chars; *s != '\0'; s++)
8271 if (*s != '/')
8272 *t++ = *s;
8273 *t = '\0';
8274 i386_comment_chars = n;
8276 #endif
8277 break;
8279 case OPTION_MARCH:
8280 arch = xstrdup (arg);
8283 if (*arch == '.')
8284 as_fatal (_("Invalid -march= option: `%s'"), arg);
8285 next = strchr (arch, '+');
8286 if (next)
8287 *next++ = '\0';
8288 for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
8290 if (strcmp (arch, cpu_arch [j].name) == 0)
8292 /* Processor. */
8293 if (! cpu_arch[j].flags.bitfield.cpui386)
8294 continue;
8296 cpu_arch_name = cpu_arch[j].name;
8297 cpu_sub_arch_name = NULL;
8298 cpu_arch_flags = cpu_arch[j].flags;
8299 cpu_arch_isa = cpu_arch[j].type;
8300 cpu_arch_isa_flags = cpu_arch[j].flags;
8301 if (!cpu_arch_tune_set)
8303 cpu_arch_tune = cpu_arch_isa;
8304 cpu_arch_tune_flags = cpu_arch_isa_flags;
8306 break;
8308 else if (*cpu_arch [j].name == '.'
8309 && strcmp (arch, cpu_arch [j].name + 1) == 0)
8311 /* ISA entension. */
8312 i386_cpu_flags flags;
8314 if (!cpu_arch[j].negated)
8315 flags = cpu_flags_or (cpu_arch_flags,
8316 cpu_arch[j].flags);
8317 else
8318 flags = cpu_flags_and_not (cpu_arch_flags,
8319 cpu_arch[j].flags);
8320 if (!cpu_flags_equal (&flags, &cpu_arch_flags))
8322 if (cpu_sub_arch_name)
8324 char *name = cpu_sub_arch_name;
8325 cpu_sub_arch_name = concat (name,
8326 cpu_arch[j].name,
8327 (const char *) NULL);
8328 free (name);
8330 else
8331 cpu_sub_arch_name = xstrdup (cpu_arch[j].name);
8332 cpu_arch_flags = flags;
8334 break;
8338 if (j >= ARRAY_SIZE (cpu_arch))
8339 as_fatal (_("Invalid -march= option: `%s'"), arg);
8341 arch = next;
8343 while (next != NULL );
8344 break;
8346 case OPTION_MTUNE:
8347 if (*arg == '.')
8348 as_fatal (_("Invalid -mtune= option: `%s'"), arg);
8349 for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
8351 if (strcmp (arg, cpu_arch [j].name) == 0)
8353 cpu_arch_tune_set = 1;
8354 cpu_arch_tune = cpu_arch [j].type;
8355 cpu_arch_tune_flags = cpu_arch[j].flags;
8356 break;
8359 if (j >= ARRAY_SIZE (cpu_arch))
8360 as_fatal (_("Invalid -mtune= option: `%s'"), arg);
8361 break;
8363 case OPTION_MMNEMONIC:
8364 if (strcasecmp (arg, "att") == 0)
8365 intel_mnemonic = 0;
8366 else if (strcasecmp (arg, "intel") == 0)
8367 intel_mnemonic = 1;
8368 else
8369 as_fatal (_("Invalid -mmnemonic= option: `%s'"), arg);
8370 break;
8372 case OPTION_MSYNTAX:
8373 if (strcasecmp (arg, "att") == 0)
8374 intel_syntax = 0;
8375 else if (strcasecmp (arg, "intel") == 0)
8376 intel_syntax = 1;
8377 else
8378 as_fatal (_("Invalid -msyntax= option: `%s'"), arg);
8379 break;
8381 case OPTION_MINDEX_REG:
8382 allow_index_reg = 1;
8383 break;
8385 case OPTION_MNAKED_REG:
8386 allow_naked_reg = 1;
8387 break;
8389 case OPTION_MOLD_GCC:
8390 old_gcc = 1;
8391 break;
8393 case OPTION_MSSE2AVX:
8394 sse2avx = 1;
8395 break;
8397 case OPTION_MSSE_CHECK:
8398 if (strcasecmp (arg, "error") == 0)
8399 sse_check = sse_check_error;
8400 else if (strcasecmp (arg, "warning") == 0)
8401 sse_check = sse_check_warning;
8402 else if (strcasecmp (arg, "none") == 0)
8403 sse_check = sse_check_none;
8404 else
8405 as_fatal (_("Invalid -msse-check= option: `%s'"), arg);
8406 break;
8408 case OPTION_MAVXSCALAR:
8409 if (strcasecmp (arg, "128") == 0)
8410 avxscalar = vex128;
8411 else if (strcasecmp (arg, "256") == 0)
8412 avxscalar = vex256;
8413 else
8414 as_fatal (_("Invalid -mavxscalar= option: `%s'"), arg);
8415 break;
8417 default:
8418 return 0;
8420 return 1;
8423 #define MESSAGE_TEMPLATE \
8426 static void
8427 show_arch (FILE *stream, int ext, int check)
8429 static char message[] = MESSAGE_TEMPLATE;
8430 char *start = message + 27;
8431 char *p;
8432 int size = sizeof (MESSAGE_TEMPLATE);
8433 int left;
8434 const char *name;
8435 int len;
8436 unsigned int j;
8438 p = start;
8439 left = size - (start - message);
8440 for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
8442 /* Should it be skipped? */
8443 if (cpu_arch [j].skip)
8444 continue;
8446 name = cpu_arch [j].name;
8447 len = cpu_arch [j].len;
8448 if (*name == '.')
8450 /* It is an extension. Skip if we aren't asked to show it. */
8451 if (ext)
8453 name++;
8454 len--;
8456 else
8457 continue;
8459 else if (ext)
8461 /* It is an processor. Skip if we show only extension. */
8462 continue;
8464 else if (check && ! cpu_arch[j].flags.bitfield.cpui386)
8466 /* It is an impossible processor - skip. */
8467 continue;
8470 /* Reserve 2 spaces for ", " or ",\0" */
8471 left -= len + 2;
8473 /* Check if there is any room. */
8474 if (left >= 0)
8476 if (p != start)
8478 *p++ = ',';
8479 *p++ = ' ';
8481 p = mempcpy (p, name, len);
8483 else
8485 /* Output the current message now and start a new one. */
8486 *p++ = ',';
8487 *p = '\0';
8488 fprintf (stream, "%s\n", message);
8489 p = start;
8490 left = size - (start - message) - len - 2;
8492 gas_assert (left >= 0);
8494 p = mempcpy (p, name, len);
8498 *p = '\0';
8499 fprintf (stream, "%s\n", message);
8502 void
8503 md_show_usage (FILE *stream)
8505 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8506 fprintf (stream, _("\
8507 -Q ignored\n\
8508 -V print assembler version number\n\
8509 -k ignored\n"));
8510 #endif
8511 fprintf (stream, _("\
8512 -n Do not optimize code alignment\n\
8513 -q quieten some warnings\n"));
8514 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8515 fprintf (stream, _("\
8516 -s ignored\n"));
8517 #endif
8518 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
8519 || defined (TE_PE) || defined (TE_PEP))
8520 fprintf (stream, _("\
8521 --32/--64/--n32 generate 32bit/64bit/n32bit code\n"));
8522 #endif
8523 #ifdef SVR4_COMMENT_CHARS
8524 fprintf (stream, _("\
8525 --divide do not treat `/' as a comment character\n"));
8526 #else
8527 fprintf (stream, _("\
8528 --divide ignored\n"));
8529 #endif
8530 fprintf (stream, _("\
8531 -march=CPU[,+EXTENSION...]\n\
8532 generate code for CPU and EXTENSION, CPU is one of:\n"));
8533 show_arch (stream, 0, 1);
8534 fprintf (stream, _("\
8535 EXTENSION is combination of:\n"));
8536 show_arch (stream, 1, 0);
8537 fprintf (stream, _("\
8538 -mtune=CPU optimize for CPU, CPU is one of:\n"));
8539 show_arch (stream, 0, 0);
8540 fprintf (stream, _("\
8541 -msse2avx encode SSE instructions with VEX prefix\n"));
8542 fprintf (stream, _("\
8543 -msse-check=[none|error|warning]\n\
8544 check SSE instructions\n"));
8545 fprintf (stream, _("\
8546 -mavxscalar=[128|256] encode scalar AVX instructions with specific vector\n\
8547 length\n"));
8548 fprintf (stream, _("\
8549 -mmnemonic=[att|intel] use AT&T/Intel mnemonic\n"));
8550 fprintf (stream, _("\
8551 -msyntax=[att|intel] use AT&T/Intel syntax\n"));
8552 fprintf (stream, _("\
8553 -mindex-reg support pseudo index registers\n"));
8554 fprintf (stream, _("\
8555 -mnaked-reg don't require `%%' prefix for registers\n"));
8556 fprintf (stream, _("\
8557 -mold-gcc support old (<= 2.8.1) versions of gcc\n"));
8560 #if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \
8561 || defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
8562 || defined (TE_PE) || defined (TE_PEP) || defined (OBJ_MACH_O))
8564 /* Pick the target format to use. */
8566 const char *
8567 i386_target_format (void)
8569 if (!strncmp (default_arch, "x86_64", 6))
8571 update_code_flag (CODE_64BIT, 1);
8572 if (default_arch[6] == '\0')
8573 x86_elf_abi = X86_64_LP64_ABI;
8574 else
8575 x86_elf_abi = X86_64_ILP32_ABI;
8577 else if (!strcmp (default_arch, "i386"))
8578 update_code_flag (CODE_32BIT, 1);
8579 else
8580 as_fatal (_("Unknown architecture"));
8582 if (cpu_flags_all_zero (&cpu_arch_isa_flags))
8583 cpu_arch_isa_flags = cpu_arch[flag_code == CODE_64BIT].flags;
8584 if (cpu_flags_all_zero (&cpu_arch_tune_flags))
8585 cpu_arch_tune_flags = cpu_arch[flag_code == CODE_64BIT].flags;
8587 switch (OUTPUT_FLAVOR)
8589 #if defined (OBJ_MAYBE_AOUT) || defined (OBJ_AOUT)
8590 case bfd_target_aout_flavour:
8591 return AOUT_TARGET_FORMAT;
8592 #endif
8593 #if defined (OBJ_MAYBE_COFF) || defined (OBJ_COFF)
8594 # if defined (TE_PE) || defined (TE_PEP)
8595 case bfd_target_coff_flavour:
8596 return flag_code == CODE_64BIT ? "pe-x86-64" : "pe-i386";
8597 # elif defined (TE_GO32)
8598 case bfd_target_coff_flavour:
8599 return "coff-go32";
8600 # else
8601 case bfd_target_coff_flavour:
8602 return "coff-i386";
8603 # endif
8604 #endif
8605 #if defined (OBJ_MAYBE_ELF) || defined (OBJ_ELF)
8606 case bfd_target_elf_flavour:
8608 const char *format;
8610 switch (x86_elf_abi)
8612 default:
8613 format = ELF_TARGET_FORMAT;
8614 break;
8615 case X86_64_LP64_ABI:
8616 use_rela_relocations = 1;
8617 object_64bit = 1;
8618 format = ELF_TARGET_FORMAT64;
8619 break;
8620 case X86_64_ILP32_ABI:
8621 use_rela_relocations = 1;
8622 object_64bit = 1;
8623 format = ELF_TARGET_FORMAT32;
8624 break;
8626 if (cpu_arch_isa == PROCESSOR_L1OM)
8628 if (x86_elf_abi != X86_64_LP64_ABI)
8629 as_fatal (_("Intel L1OM is 64bit only"));
8630 return ELF_TARGET_L1OM_FORMAT;
8632 else
8633 return format;
8635 #endif
8636 #if defined (OBJ_MACH_O)
8637 case bfd_target_mach_o_flavour:
8638 return flag_code == CODE_64BIT ? "mach-o-x86-64" : "mach-o-i386";
8639 #endif
8640 default:
8641 abort ();
8642 return NULL;
8646 #endif /* OBJ_MAYBE_ more than one */
8648 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF))
8649 void
8650 i386_elf_emit_arch_note (void)
8652 if (IS_ELF && cpu_arch_name != NULL)
8654 char *p;
8655 asection *seg = now_seg;
8656 subsegT subseg = now_subseg;
8657 Elf_Internal_Note i_note;
8658 Elf_External_Note e_note;
8659 asection *note_secp;
8660 int len;
8662 /* Create the .note section. */
8663 note_secp = subseg_new (".note", 0);
8664 bfd_set_section_flags (stdoutput,
8665 note_secp,
8666 SEC_HAS_CONTENTS | SEC_READONLY);
8668 /* Process the arch string. */
8669 len = strlen (cpu_arch_name);
8671 i_note.namesz = len + 1;
8672 i_note.descsz = 0;
8673 i_note.type = NT_ARCH;
8674 p = frag_more (sizeof (e_note.namesz));
8675 md_number_to_chars (p, (valueT) i_note.namesz, sizeof (e_note.namesz));
8676 p = frag_more (sizeof (e_note.descsz));
8677 md_number_to_chars (p, (valueT) i_note.descsz, sizeof (e_note.descsz));
8678 p = frag_more (sizeof (e_note.type));
8679 md_number_to_chars (p, (valueT) i_note.type, sizeof (e_note.type));
8680 p = frag_more (len + 1);
8681 strcpy (p, cpu_arch_name);
8683 frag_align (2, 0, 0);
8685 subseg_set (seg, subseg);
8688 #endif
8690 symbolS *
8691 md_undefined_symbol (name)
8692 char *name;
8694 if (name[0] == GLOBAL_OFFSET_TABLE_NAME[0]
8695 && name[1] == GLOBAL_OFFSET_TABLE_NAME[1]
8696 && name[2] == GLOBAL_OFFSET_TABLE_NAME[2]
8697 && strcmp (name, GLOBAL_OFFSET_TABLE_NAME) == 0)
8699 if (!GOT_symbol)
8701 if (symbol_find (name))
8702 as_bad (_("GOT already in symbol table"));
8703 GOT_symbol = symbol_new (name, undefined_section,
8704 (valueT) 0, &zero_address_frag);
8706 return GOT_symbol;
8708 return 0;
8711 /* Round up a section size to the appropriate boundary. */
8713 valueT
8714 md_section_align (segment, size)
8715 segT segment ATTRIBUTE_UNUSED;
8716 valueT size;
8718 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
8719 if (OUTPUT_FLAVOR == bfd_target_aout_flavour)
8721 /* For a.out, force the section size to be aligned. If we don't do
8722 this, BFD will align it for us, but it will not write out the
8723 final bytes of the section. This may be a bug in BFD, but it is
8724 easier to fix it here since that is how the other a.out targets
8725 work. */
8726 int align;
8728 align = bfd_get_section_alignment (stdoutput, segment);
8729 size = ((size + (1 << align) - 1) & ((valueT) -1 << align));
8731 #endif
8733 return size;
8736 /* On the i386, PC-relative offsets are relative to the start of the
8737 next instruction. That is, the address of the offset, plus its
8738 size, since the offset is always the last part of the insn. */
8740 long
8741 md_pcrel_from (fixS *fixP)
8743 return fixP->fx_size + fixP->fx_where + fixP->fx_frag->fr_address;
8746 #ifndef I386COFF
8748 static void
8749 s_bss (int ignore ATTRIBUTE_UNUSED)
8751 int temp;
8753 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8754 if (IS_ELF)
8755 obj_elf_section_change_hook ();
8756 #endif
8757 temp = get_absolute_expression ();
8758 subseg_set (bss_section, (subsegT) temp);
8759 demand_empty_rest_of_line ();
8762 #endif
8764 void
8765 i386_validate_fix (fixS *fixp)
8767 if (fixp->fx_subsy && fixp->fx_subsy == GOT_symbol)
8769 if (fixp->fx_r_type == BFD_RELOC_32_PCREL)
8771 if (!object_64bit)
8772 abort ();
8773 fixp->fx_r_type = BFD_RELOC_X86_64_GOTPCREL;
8775 else
8777 if (!object_64bit)
8778 fixp->fx_r_type = BFD_RELOC_386_GOTOFF;
8779 else
8780 fixp->fx_r_type = BFD_RELOC_X86_64_GOTOFF64;
8782 fixp->fx_subsy = 0;
8786 arelent *
8787 tc_gen_reloc (section, fixp)
8788 asection *section ATTRIBUTE_UNUSED;
8789 fixS *fixp;
8791 arelent *rel;
8792 bfd_reloc_code_real_type code;
8794 switch (fixp->fx_r_type)
8796 case BFD_RELOC_X86_64_PLT32:
8797 case BFD_RELOC_X86_64_GOT32:
8798 case BFD_RELOC_X86_64_GOTPCREL:
8799 case BFD_RELOC_386_PLT32:
8800 case BFD_RELOC_386_GOT32:
8801 case BFD_RELOC_386_GOTOFF:
8802 case BFD_RELOC_386_GOTPC:
8803 case BFD_RELOC_386_TLS_GD:
8804 case BFD_RELOC_386_TLS_LDM:
8805 case BFD_RELOC_386_TLS_LDO_32:
8806 case BFD_RELOC_386_TLS_IE_32:
8807 case BFD_RELOC_386_TLS_IE:
8808 case BFD_RELOC_386_TLS_GOTIE:
8809 case BFD_RELOC_386_TLS_LE_32:
8810 case BFD_RELOC_386_TLS_LE:
8811 case BFD_RELOC_386_TLS_GOTDESC:
8812 case BFD_RELOC_386_TLS_DESC_CALL:
8813 case BFD_RELOC_X86_64_TLSGD:
8814 case BFD_RELOC_X86_64_TLSLD:
8815 case BFD_RELOC_X86_64_DTPOFF32:
8816 case BFD_RELOC_X86_64_DTPOFF64:
8817 case BFD_RELOC_X86_64_GOTTPOFF:
8818 case BFD_RELOC_X86_64_TPOFF32:
8819 case BFD_RELOC_X86_64_TPOFF64:
8820 case BFD_RELOC_X86_64_GOTOFF64:
8821 case BFD_RELOC_X86_64_GOTPC32:
8822 case BFD_RELOC_X86_64_GOT64:
8823 case BFD_RELOC_X86_64_GOTPCREL64:
8824 case BFD_RELOC_X86_64_GOTPC64:
8825 case BFD_RELOC_X86_64_GOTPLT64:
8826 case BFD_RELOC_X86_64_PLTOFF64:
8827 case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
8828 case BFD_RELOC_X86_64_TLSDESC_CALL:
8829 case BFD_RELOC_RVA:
8830 case BFD_RELOC_VTABLE_ENTRY:
8831 case BFD_RELOC_VTABLE_INHERIT:
8832 #ifdef TE_PE
8833 case BFD_RELOC_32_SECREL:
8834 #endif
8835 code = fixp->fx_r_type;
8836 break;
8837 case BFD_RELOC_X86_64_32S:
8838 if (!fixp->fx_pcrel)
8840 /* Don't turn BFD_RELOC_X86_64_32S into BFD_RELOC_32. */
8841 code = fixp->fx_r_type;
8842 break;
8844 default:
8845 if (fixp->fx_pcrel)
8847 switch (fixp->fx_size)
8849 default:
8850 as_bad_where (fixp->fx_file, fixp->fx_line,
8851 _("can not do %d byte pc-relative relocation"),
8852 fixp->fx_size);
8853 code = BFD_RELOC_32_PCREL;
8854 break;
8855 case 1: code = BFD_RELOC_8_PCREL; break;
8856 case 2: code = BFD_RELOC_16_PCREL; break;
8857 case 4: code = BFD_RELOC_32_PCREL; break;
8858 #ifdef BFD64
8859 case 8: code = BFD_RELOC_64_PCREL; break;
8860 #endif
8863 else
8865 switch (fixp->fx_size)
8867 default:
8868 as_bad_where (fixp->fx_file, fixp->fx_line,
8869 _("can not do %d byte relocation"),
8870 fixp->fx_size);
8871 code = BFD_RELOC_32;
8872 break;
8873 case 1: code = BFD_RELOC_8; break;
8874 case 2: code = BFD_RELOC_16; break;
8875 case 4: code = BFD_RELOC_32; break;
8876 #ifdef BFD64
8877 case 8: code = BFD_RELOC_64; break;
8878 #endif
8881 break;
8884 if ((code == BFD_RELOC_32
8885 || code == BFD_RELOC_32_PCREL
8886 || code == BFD_RELOC_X86_64_32S)
8887 && GOT_symbol
8888 && fixp->fx_addsy == GOT_symbol)
8890 if (!object_64bit)
8891 code = BFD_RELOC_386_GOTPC;
8892 else
8893 code = BFD_RELOC_X86_64_GOTPC32;
8895 if ((code == BFD_RELOC_64 || code == BFD_RELOC_64_PCREL)
8896 && GOT_symbol
8897 && fixp->fx_addsy == GOT_symbol)
8899 code = BFD_RELOC_X86_64_GOTPC64;
8902 rel = (arelent *) xmalloc (sizeof (arelent));
8903 rel->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
8904 *rel->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
8906 rel->address = fixp->fx_frag->fr_address + fixp->fx_where;
8908 if (!use_rela_relocations)
8910 /* HACK: Since i386 ELF uses Rel instead of Rela, encode the
8911 vtable entry to be used in the relocation's section offset. */
8912 if (fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
8913 rel->address = fixp->fx_offset;
8914 #if defined (OBJ_COFF) && defined (TE_PE)
8915 else if (fixp->fx_addsy && S_IS_WEAK (fixp->fx_addsy))
8916 rel->addend = fixp->fx_addnumber - (S_GET_VALUE (fixp->fx_addsy) * 2);
8917 else
8918 #endif
8919 rel->addend = 0;
8921 /* Use the rela in 64bit mode. */
8922 else
8924 if (!fixp->fx_pcrel)
8925 rel->addend = fixp->fx_offset;
8926 else
8927 switch (code)
8929 case BFD_RELOC_X86_64_PLT32:
8930 case BFD_RELOC_X86_64_GOT32:
8931 case BFD_RELOC_X86_64_GOTPCREL:
8932 case BFD_RELOC_X86_64_TLSGD:
8933 case BFD_RELOC_X86_64_TLSLD:
8934 case BFD_RELOC_X86_64_GOTTPOFF:
8935 case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
8936 case BFD_RELOC_X86_64_TLSDESC_CALL:
8937 rel->addend = fixp->fx_offset - fixp->fx_size;
8938 break;
8939 default:
8940 rel->addend = (section->vma
8941 - fixp->fx_size
8942 + fixp->fx_addnumber
8943 + md_pcrel_from (fixp));
8944 break;
8948 rel->howto = bfd_reloc_type_lookup (stdoutput, code);
8949 if (rel->howto == NULL)
8951 as_bad_where (fixp->fx_file, fixp->fx_line,
8952 _("cannot represent relocation type %s"),
8953 bfd_get_reloc_code_name (code));
8954 /* Set howto to a garbage value so that we can keep going. */
8955 rel->howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_32);
8956 gas_assert (rel->howto != NULL);
8959 return rel;
8962 #include "tc-i386-intel.c"
8964 void
8965 tc_x86_parse_to_dw2regnum (expressionS *exp)
8967 int saved_naked_reg;
8968 char saved_register_dot;
8970 saved_naked_reg = allow_naked_reg;
8971 allow_naked_reg = 1;
8972 saved_register_dot = register_chars['.'];
8973 register_chars['.'] = '.';
8974 allow_pseudo_reg = 1;
8975 expression_and_evaluate (exp);
8976 allow_pseudo_reg = 0;
8977 register_chars['.'] = saved_register_dot;
8978 allow_naked_reg = saved_naked_reg;
8980 if (exp->X_op == O_register && exp->X_add_number >= 0)
8982 if ((addressT) exp->X_add_number < i386_regtab_size)
8984 exp->X_op = O_constant;
8985 exp->X_add_number = i386_regtab[exp->X_add_number]
8986 .dw2_regnum[flag_code >> 1];
8988 else
8989 exp->X_op = O_illegal;
8993 void
8994 tc_x86_frame_initial_instructions (void)
8996 static unsigned int sp_regno[2];
8998 if (!sp_regno[flag_code >> 1])
9000 char *saved_input = input_line_pointer;
9001 char sp[][4] = {"esp", "rsp"};
9002 expressionS exp;
9004 input_line_pointer = sp[flag_code >> 1];
9005 tc_x86_parse_to_dw2regnum (&exp);
9006 gas_assert (exp.X_op == O_constant);
9007 sp_regno[flag_code >> 1] = exp.X_add_number;
9008 input_line_pointer = saved_input;
9011 cfi_add_CFA_def_cfa (sp_regno[flag_code >> 1], -x86_cie_data_alignment);
9012 cfi_add_CFA_offset (x86_dwarf2_return_column, x86_cie_data_alignment);
9016 i386_elf_section_type (const char *str, size_t len)
9018 if (flag_code == CODE_64BIT
9019 && len == sizeof ("unwind") - 1
9020 && strncmp (str, "unwind", 6) == 0)
9021 return SHT_X86_64_UNWIND;
9023 return -1;
9026 #ifdef TE_SOLARIS
9027 void
9028 i386_solaris_fix_up_eh_frame (segT sec)
9030 if (flag_code == CODE_64BIT)
9031 elf_section_type (sec) = SHT_X86_64_UNWIND;
9033 #endif
9035 #ifdef TE_PE
9036 void
9037 tc_pe_dwarf2_emit_offset (symbolS *symbol, unsigned int size)
9039 expressionS exp;
9041 exp.X_op = O_secrel;
9042 exp.X_add_symbol = symbol;
9043 exp.X_add_number = 0;
9044 emit_expr (&exp, size);
9046 #endif
9048 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
9049 /* For ELF on x86-64, add support for SHF_X86_64_LARGE. */
9051 bfd_vma
9052 x86_64_section_letter (int letter, char **ptr_msg)
9054 if (flag_code == CODE_64BIT)
9056 if (letter == 'l')
9057 return SHF_X86_64_LARGE;
9059 *ptr_msg = _("bad .section directive: want a,l,w,x,M,S,G,T in string");
9061 else
9062 *ptr_msg = _("bad .section directive: want a,w,x,M,S,G,T in string");
9063 return -1;
9066 bfd_vma
9067 x86_64_section_word (char *str, size_t len)
9069 if (len == 5 && flag_code == CODE_64BIT && CONST_STRNEQ (str, "large"))
9070 return SHF_X86_64_LARGE;
9072 return -1;
9075 static void
9076 handle_large_common (int small ATTRIBUTE_UNUSED)
9078 if (flag_code != CODE_64BIT)
9080 s_comm_internal (0, elf_common_parse);
9081 as_warn (_(".largecomm supported only in 64bit mode, producing .comm"));
9083 else
9085 static segT lbss_section;
9086 asection *saved_com_section_ptr = elf_com_section_ptr;
9087 asection *saved_bss_section = bss_section;
9089 if (lbss_section == NULL)
9091 flagword applicable;
9092 segT seg = now_seg;
9093 subsegT subseg = now_subseg;
9095 /* The .lbss section is for local .largecomm symbols. */
9096 lbss_section = subseg_new (".lbss", 0);
9097 applicable = bfd_applicable_section_flags (stdoutput);
9098 bfd_set_section_flags (stdoutput, lbss_section,
9099 applicable & SEC_ALLOC);
9100 seg_info (lbss_section)->bss = 1;
9102 subseg_set (seg, subseg);
9105 elf_com_section_ptr = &_bfd_elf_large_com_section;
9106 bss_section = lbss_section;
9108 s_comm_internal (0, elf_common_parse);
9110 elf_com_section_ptr = saved_com_section_ptr;
9111 bss_section = saved_bss_section;
9114 #endif /* OBJ_ELF || OBJ_MAYBE_ELF */