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)
13 GAS is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GAS; see the file COPYING. If not, write to the Free
20 Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
23 /* Intel 80386 machine specific gas.
24 Written by Eliot Dresselhaus (eliot@mgm.mit.edu).
25 x86_64 support by Jan Hubicka (jh@suse.cz)
26 VIA PadLock support by Michal Ludvig (mludvig@suse.cz)
27 Bugs & suggestions are completely welcome. This is free software.
28 Please help us make it better. */
31 #include "safe-ctype.h"
33 #include "dwarf2dbg.h"
34 #include "dw2gencfi.h"
35 #include "elf/x86-64.h"
36 #include "opcodes/i386-init.h"
38 #ifndef REGISTER_WARNINGS
39 #define REGISTER_WARNINGS 1
42 #ifndef INFER_ADDR_PREFIX
43 #define INFER_ADDR_PREFIX 1
47 #define DEFAULT_ARCH "i386"
52 #define INLINE __inline__
58 /* 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. */
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
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)
101 const insn_template
*start
;
102 const insn_template
*end
;
106 /* 386 operand encoding bytes: see 386 book for details of this. */
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 */
115 /* x86-64 extension prefix. */
116 typedef int rex_byte
;
118 /* 386 opcode byte to code indirect addressing. */
127 /* x86 arch names, types and features */
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. */
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);
148 static void pe_directive_secrel (int);
150 static void signed_cons (int);
151 static char *output_invalid (int c
);
152 static int i386_finalize_immediate (segT
, expressionS
*, i386_operand_type
,
154 static int i386_finalize_displacement (segT
, expressionS
*, i386_operand_type
,
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
);
181 static void s_bss (int);
183 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
184 static void handle_large_common (int small ATTRIBUTE_UNUSED
);
187 static const char *default_arch
= DEFAULT_ARCH
;
192 /* VEX prefix is either 2 byte or 3 byte. */
193 unsigned char bytes
[3];
195 /* Destination or source register specifier. */
196 const reg_entry
*register_specifier
;
199 /* 'md_assemble ()' gathers together information and puts it into a
206 const reg_entry
*regs
;
211 operand_size_mismatch
,
212 operand_type_mismatch
,
213 register_type_mismatch
,
214 number_of_operands_mismatch
,
215 invalid_instruction_suffix
,
218 unsupported_with_intel_mnemonic
,
225 /* TM holds the template for the insn were currently assembling. */
228 /* SUFFIX holds the instruction size suffix for byte, word, dword
229 or qword, if given. */
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
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
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. */
277 /* Swap operand in encoding. */
278 unsigned int swap_operand
;
280 /* Force 32bit displacement in encoding. */
281 unsigned int disp32_encoding
;
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
[] = "*%-(["
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 '\\'
315 const char *i386_comment_chars
= "#";
316 #define PREFIX_SEPARATOR '/'
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
333 const char EXP_CHARS
[] = "eE";
335 /* Chars that mean this number is a floating point constant
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. */
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
390 static enum flag_code flag_code
;
391 static unsigned int object_64bit
;
392 static unsigned int disallow_64bit_reloc
;
393 static int use_rela_relocations
= 0;
395 #if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \
396 || defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
397 || defined (TE_PE) || defined (TE_PEP) || defined (OBJ_MACH_O))
399 /* The ELF ABI to use. */
407 static enum x86_elf_abi x86_elf_abi
= I386_ABI
;
410 /* The names used to print error messages. */
411 static const char *flag_code_names
[] =
418 /* 1 for intel syntax,
420 static int intel_syntax
= 0;
422 /* 1 for intel mnemonic,
423 0 if att mnemonic. */
424 static int intel_mnemonic
= !SYSV386_COMPAT
;
426 /* 1 if support old (<= 2.8.1) versions of gcc. */
427 static int old_gcc
= OLDGCC_COMPAT
;
429 /* 1 if pseudo registers are permitted. */
430 static int allow_pseudo_reg
= 0;
432 /* 1 if register prefix % not required. */
433 static int allow_naked_reg
= 0;
435 /* 1 if pseudo index register, eiz/riz, is allowed . */
436 static int allow_index_reg
= 0;
446 /* Register prefix used for error message. */
447 static const char *register_prefix
= "%";
449 /* Used in 16 bit gcc mode to add an l suffix to call, ret, enter,
450 leave, push, and pop instructions so that gcc has the same stack
451 frame as in 32 bit mode. */
452 static char stackop_size
= '\0';
454 /* Non-zero to optimize code alignment. */
455 int optimize_align_code
= 1;
457 /* Non-zero to quieten some warnings. */
458 static int quiet_warnings
= 0;
461 static const char *cpu_arch_name
= NULL
;
462 static char *cpu_sub_arch_name
= NULL
;
464 /* CPU feature flags. */
465 static i386_cpu_flags cpu_arch_flags
= CPU_UNKNOWN_FLAGS
;
467 /* If we have selected a cpu we are generating instructions for. */
468 static int cpu_arch_tune_set
= 0;
470 /* Cpu we are generating instructions for. */
471 enum processor_type cpu_arch_tune
= PROCESSOR_UNKNOWN
;
473 /* CPU feature flags of cpu we are generating instructions for. */
474 static i386_cpu_flags cpu_arch_tune_flags
;
476 /* CPU instruction set architecture used. */
477 enum processor_type cpu_arch_isa
= PROCESSOR_UNKNOWN
;
479 /* CPU feature flags of instruction set architecture used. */
480 i386_cpu_flags cpu_arch_isa_flags
;
482 /* If set, conditional jumps are not automatically promoted to handle
483 larger than a byte offset. */
484 static unsigned int no_cond_jump_promotion
= 0;
486 /* Encode SSE instructions with VEX prefix. */
487 static unsigned int sse2avx
;
489 /* Encode scalar AVX instructions with specific vector length. */
496 /* Pre-defined "_GLOBAL_OFFSET_TABLE_". */
497 static symbolS
*GOT_symbol
;
499 /* The dwarf2 return column, adjusted for 32 or 64 bit. */
500 unsigned int x86_dwarf2_return_column
;
502 /* The dwarf2 data alignment, adjusted for 32 or 64 bit. */
503 int x86_cie_data_alignment
;
505 /* Interface to relax_segment.
506 There are 3 major relax states for 386 jump insns because the
507 different types of jumps add different sizes to frags when we're
508 figuring out what sort of jump to choose to reach a given label. */
511 #define UNCOND_JUMP 0
513 #define COND_JUMP86 2
518 #define SMALL16 (SMALL | CODE16)
520 #define BIG16 (BIG | CODE16)
524 #define INLINE __inline__
530 #define ENCODE_RELAX_STATE(type, size) \
531 ((relax_substateT) (((type) << 2) | (size)))
532 #define TYPE_FROM_RELAX_STATE(s) \
534 #define DISP_SIZE_FROM_RELAX_STATE(s) \
535 ((((s) & 3) == BIG ? 4 : (((s) & 3) == BIG16 ? 2 : 1)))
537 /* This table is used by relax_frag to promote short jumps to long
538 ones where necessary. SMALL (short) jumps may be promoted to BIG
539 (32 bit long) ones, and SMALL16 jumps to BIG16 (16 bit long). We
540 don't allow a short jump in a 32 bit code segment to be promoted to
541 a 16 bit offset jump because it's slower (requires data size
542 prefix), and doesn't work, unless the destination is in the bottom
543 64k of the code segment (The top 16 bits of eip are zeroed). */
545 const relax_typeS md_relax_table
[] =
548 1) most positive reach of this state,
549 2) most negative reach of this state,
550 3) how many bytes this mode will have in the variable part of the frag
551 4) which index into the table to try if we can't fit into this one. */
553 /* UNCOND_JUMP states. */
554 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (UNCOND_JUMP
, BIG
)},
555 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (UNCOND_JUMP
, BIG16
)},
556 /* dword jmp adds 4 bytes to frag:
557 0 extra opcode bytes, 4 displacement bytes. */
559 /* word jmp adds 2 byte2 to frag:
560 0 extra opcode bytes, 2 displacement bytes. */
563 /* COND_JUMP states. */
564 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP
, BIG
)},
565 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP
, BIG16
)},
566 /* dword conditionals adds 5 bytes to frag:
567 1 extra opcode byte, 4 displacement bytes. */
569 /* word conditionals add 3 bytes to frag:
570 1 extra opcode byte, 2 displacement bytes. */
573 /* COND_JUMP86 states. */
574 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP86
, BIG
)},
575 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP86
, BIG16
)},
576 /* dword conditionals adds 5 bytes to frag:
577 1 extra opcode byte, 4 displacement bytes. */
579 /* word conditionals add 4 bytes to frag:
580 1 displacement byte and a 3 byte long branch insn. */
584 static const arch_entry cpu_arch
[] =
586 /* Do not replace the first two entries - i386_target_format()
587 relies on them being there in this order. */
588 { STRING_COMMA_LEN ("generic32"), PROCESSOR_GENERIC32
,
589 CPU_GENERIC32_FLAGS
, 0, 0 },
590 { STRING_COMMA_LEN ("generic64"), PROCESSOR_GENERIC64
,
591 CPU_GENERIC64_FLAGS
, 0, 0 },
592 { STRING_COMMA_LEN ("i8086"), PROCESSOR_UNKNOWN
,
593 CPU_NONE_FLAGS
, 0, 0 },
594 { STRING_COMMA_LEN ("i186"), PROCESSOR_UNKNOWN
,
595 CPU_I186_FLAGS
, 0, 0 },
596 { STRING_COMMA_LEN ("i286"), PROCESSOR_UNKNOWN
,
597 CPU_I286_FLAGS
, 0, 0 },
598 { STRING_COMMA_LEN ("i386"), PROCESSOR_I386
,
599 CPU_I386_FLAGS
, 0, 0 },
600 { STRING_COMMA_LEN ("i486"), PROCESSOR_I486
,
601 CPU_I486_FLAGS
, 0, 0 },
602 { STRING_COMMA_LEN ("i586"), PROCESSOR_PENTIUM
,
603 CPU_I586_FLAGS
, 0, 0 },
604 { STRING_COMMA_LEN ("i686"), PROCESSOR_PENTIUMPRO
,
605 CPU_I686_FLAGS
, 0, 0 },
606 { STRING_COMMA_LEN ("pentium"), PROCESSOR_PENTIUM
,
607 CPU_I586_FLAGS
, 0, 0 },
608 { STRING_COMMA_LEN ("pentiumpro"), PROCESSOR_PENTIUMPRO
,
609 CPU_PENTIUMPRO_FLAGS
, 0, 0 },
610 { STRING_COMMA_LEN ("pentiumii"), PROCESSOR_PENTIUMPRO
,
611 CPU_P2_FLAGS
, 0, 0 },
612 { STRING_COMMA_LEN ("pentiumiii"),PROCESSOR_PENTIUMPRO
,
613 CPU_P3_FLAGS
, 0, 0 },
614 { STRING_COMMA_LEN ("pentium4"), PROCESSOR_PENTIUM4
,
615 CPU_P4_FLAGS
, 0, 0 },
616 { STRING_COMMA_LEN ("prescott"), PROCESSOR_NOCONA
,
617 CPU_CORE_FLAGS
, 0, 0 },
618 { STRING_COMMA_LEN ("nocona"), PROCESSOR_NOCONA
,
619 CPU_NOCONA_FLAGS
, 0, 0 },
620 { STRING_COMMA_LEN ("yonah"), PROCESSOR_CORE
,
621 CPU_CORE_FLAGS
, 1, 0 },
622 { STRING_COMMA_LEN ("core"), PROCESSOR_CORE
,
623 CPU_CORE_FLAGS
, 0, 0 },
624 { STRING_COMMA_LEN ("merom"), PROCESSOR_CORE2
,
625 CPU_CORE2_FLAGS
, 1, 0 },
626 { STRING_COMMA_LEN ("core2"), PROCESSOR_CORE2
,
627 CPU_CORE2_FLAGS
, 0, 0 },
628 { STRING_COMMA_LEN ("corei7"), PROCESSOR_COREI7
,
629 CPU_COREI7_FLAGS
, 0, 0 },
630 { STRING_COMMA_LEN ("l1om"), PROCESSOR_L1OM
,
631 CPU_L1OM_FLAGS
, 0, 0 },
632 { STRING_COMMA_LEN ("k6"), PROCESSOR_K6
,
633 CPU_K6_FLAGS
, 0, 0 },
634 { STRING_COMMA_LEN ("k6_2"), PROCESSOR_K6
,
635 CPU_K6_2_FLAGS
, 0, 0 },
636 { STRING_COMMA_LEN ("athlon"), PROCESSOR_ATHLON
,
637 CPU_ATHLON_FLAGS
, 0, 0 },
638 { STRING_COMMA_LEN ("sledgehammer"), PROCESSOR_K8
,
639 CPU_K8_FLAGS
, 1, 0 },
640 { STRING_COMMA_LEN ("opteron"), PROCESSOR_K8
,
641 CPU_K8_FLAGS
, 0, 0 },
642 { STRING_COMMA_LEN ("k8"), PROCESSOR_K8
,
643 CPU_K8_FLAGS
, 0, 0 },
644 { STRING_COMMA_LEN ("amdfam10"), PROCESSOR_AMDFAM10
,
645 CPU_AMDFAM10_FLAGS
, 0, 0 },
646 { STRING_COMMA_LEN ("bdver1"), PROCESSOR_BDVER1
,
647 CPU_BDVER1_FLAGS
, 0, 0 },
648 { STRING_COMMA_LEN (".8087"), PROCESSOR_UNKNOWN
,
649 CPU_8087_FLAGS
, 0, 0 },
650 { STRING_COMMA_LEN (".287"), PROCESSOR_UNKNOWN
,
651 CPU_287_FLAGS
, 0, 0 },
652 { STRING_COMMA_LEN (".387"), PROCESSOR_UNKNOWN
,
653 CPU_387_FLAGS
, 0, 0 },
654 { STRING_COMMA_LEN (".no87"), PROCESSOR_UNKNOWN
,
655 CPU_ANY87_FLAGS
, 0, 1 },
656 { STRING_COMMA_LEN (".mmx"), PROCESSOR_UNKNOWN
,
657 CPU_MMX_FLAGS
, 0, 0 },
658 { STRING_COMMA_LEN (".nommx"), PROCESSOR_UNKNOWN
,
659 CPU_3DNOWA_FLAGS
, 0, 1 },
660 { STRING_COMMA_LEN (".sse"), PROCESSOR_UNKNOWN
,
661 CPU_SSE_FLAGS
, 0, 0 },
662 { STRING_COMMA_LEN (".sse2"), PROCESSOR_UNKNOWN
,
663 CPU_SSE2_FLAGS
, 0, 0 },
664 { STRING_COMMA_LEN (".sse3"), PROCESSOR_UNKNOWN
,
665 CPU_SSE3_FLAGS
, 0, 0 },
666 { STRING_COMMA_LEN (".ssse3"), PROCESSOR_UNKNOWN
,
667 CPU_SSSE3_FLAGS
, 0, 0 },
668 { STRING_COMMA_LEN (".sse4.1"), PROCESSOR_UNKNOWN
,
669 CPU_SSE4_1_FLAGS
, 0, 0 },
670 { STRING_COMMA_LEN (".sse4.2"), PROCESSOR_UNKNOWN
,
671 CPU_SSE4_2_FLAGS
, 0, 0 },
672 { STRING_COMMA_LEN (".sse4"), PROCESSOR_UNKNOWN
,
673 CPU_SSE4_2_FLAGS
, 0, 0 },
674 { STRING_COMMA_LEN (".nosse"), PROCESSOR_UNKNOWN
,
675 CPU_ANY_SSE_FLAGS
, 0, 1 },
676 { STRING_COMMA_LEN (".avx"), PROCESSOR_UNKNOWN
,
677 CPU_AVX_FLAGS
, 0, 0 },
678 { STRING_COMMA_LEN (".noavx"), PROCESSOR_UNKNOWN
,
679 CPU_ANY_AVX_FLAGS
, 0, 1 },
680 { STRING_COMMA_LEN (".vmx"), PROCESSOR_UNKNOWN
,
681 CPU_VMX_FLAGS
, 0, 0 },
682 { STRING_COMMA_LEN (".smx"), PROCESSOR_UNKNOWN
,
683 CPU_SMX_FLAGS
, 0, 0 },
684 { STRING_COMMA_LEN (".xsave"), PROCESSOR_UNKNOWN
,
685 CPU_XSAVE_FLAGS
, 0, 0 },
686 { STRING_COMMA_LEN (".xsaveopt"), PROCESSOR_UNKNOWN
,
687 CPU_XSAVEOPT_FLAGS
, 0, 0 },
688 { STRING_COMMA_LEN (".aes"), PROCESSOR_UNKNOWN
,
689 CPU_AES_FLAGS
, 0, 0 },
690 { STRING_COMMA_LEN (".pclmul"), PROCESSOR_UNKNOWN
,
691 CPU_PCLMUL_FLAGS
, 0, 0 },
692 { STRING_COMMA_LEN (".clmul"), PROCESSOR_UNKNOWN
,
693 CPU_PCLMUL_FLAGS
, 1, 0 },
694 { STRING_COMMA_LEN (".fsgsbase"), PROCESSOR_UNKNOWN
,
695 CPU_FSGSBASE_FLAGS
, 0, 0 },
696 { STRING_COMMA_LEN (".rdrnd"), PROCESSOR_UNKNOWN
,
697 CPU_RDRND_FLAGS
, 0, 0 },
698 { STRING_COMMA_LEN (".f16c"), PROCESSOR_UNKNOWN
,
699 CPU_F16C_FLAGS
, 0, 0 },
700 { STRING_COMMA_LEN (".fma"), PROCESSOR_UNKNOWN
,
701 CPU_FMA_FLAGS
, 0, 0 },
702 { STRING_COMMA_LEN (".fma4"), PROCESSOR_UNKNOWN
,
703 CPU_FMA4_FLAGS
, 0, 0 },
704 { STRING_COMMA_LEN (".xop"), PROCESSOR_UNKNOWN
,
705 CPU_XOP_FLAGS
, 0, 0 },
706 { STRING_COMMA_LEN (".lwp"), PROCESSOR_UNKNOWN
,
707 CPU_LWP_FLAGS
, 0, 0 },
708 { STRING_COMMA_LEN (".movbe"), PROCESSOR_UNKNOWN
,
709 CPU_MOVBE_FLAGS
, 0, 0 },
710 { STRING_COMMA_LEN (".ept"), PROCESSOR_UNKNOWN
,
711 CPU_EPT_FLAGS
, 0, 0 },
712 { STRING_COMMA_LEN (".clflush"), PROCESSOR_UNKNOWN
,
713 CPU_CLFLUSH_FLAGS
, 0, 0 },
714 { STRING_COMMA_LEN (".nop"), PROCESSOR_UNKNOWN
,
715 CPU_NOP_FLAGS
, 0, 0 },
716 { STRING_COMMA_LEN (".syscall"), PROCESSOR_UNKNOWN
,
717 CPU_SYSCALL_FLAGS
, 0, 0 },
718 { STRING_COMMA_LEN (".rdtscp"), PROCESSOR_UNKNOWN
,
719 CPU_RDTSCP_FLAGS
, 0, 0 },
720 { STRING_COMMA_LEN (".3dnow"), PROCESSOR_UNKNOWN
,
721 CPU_3DNOW_FLAGS
, 0, 0 },
722 { STRING_COMMA_LEN (".3dnowa"), PROCESSOR_UNKNOWN
,
723 CPU_3DNOWA_FLAGS
, 0, 0 },
724 { STRING_COMMA_LEN (".padlock"), PROCESSOR_UNKNOWN
,
725 CPU_PADLOCK_FLAGS
, 0, 0 },
726 { STRING_COMMA_LEN (".pacifica"), PROCESSOR_UNKNOWN
,
727 CPU_SVME_FLAGS
, 1, 0 },
728 { STRING_COMMA_LEN (".svme"), PROCESSOR_UNKNOWN
,
729 CPU_SVME_FLAGS
, 0, 0 },
730 { STRING_COMMA_LEN (".sse4a"), PROCESSOR_UNKNOWN
,
731 CPU_SSE4A_FLAGS
, 0, 0 },
732 { STRING_COMMA_LEN (".abm"), PROCESSOR_UNKNOWN
,
733 CPU_ABM_FLAGS
, 0, 0 },
734 { STRING_COMMA_LEN (".bmi"), PROCESSOR_UNKNOWN
,
735 CPU_BMI_FLAGS
, 0, 0 },
736 { STRING_COMMA_LEN (".tbm"), PROCESSOR_UNKNOWN
,
737 CPU_TBM_FLAGS
, 0, 0 },
741 /* Like s_lcomm_internal in gas/read.c but the alignment string
742 is allowed to be optional. */
745 pe_lcomm_internal (int needs_align
, symbolS
*symbolP
, addressT size
)
752 && *input_line_pointer
== ',')
754 align
= parse_align (needs_align
- 1);
756 if (align
== (addressT
) -1)
771 bss_alloc (symbolP
, size
, align
);
776 pe_lcomm (int needs_align
)
778 s_comm_internal (needs_align
* 2, pe_lcomm_internal
);
782 const pseudo_typeS md_pseudo_table
[] =
784 #if !defined(OBJ_AOUT) && !defined(USE_ALIGN_PTWO)
785 {"align", s_align_bytes
, 0},
787 {"align", s_align_ptwo
, 0},
789 {"arch", set_cpu_arch
, 0},
793 {"lcomm", pe_lcomm
, 1},
795 {"ffloat", float_cons
, 'f'},
796 {"dfloat", float_cons
, 'd'},
797 {"tfloat", float_cons
, 'x'},
799 {"slong", signed_cons
, 4},
800 {"noopt", s_ignore
, 0},
801 {"optim", s_ignore
, 0},
802 {"code16gcc", set_16bit_gcc_code_flag
, CODE_16BIT
},
803 {"code16", set_code_flag
, CODE_16BIT
},
804 {"code32", set_code_flag
, CODE_32BIT
},
805 {"code64", set_code_flag
, CODE_64BIT
},
806 {"intel_syntax", set_intel_syntax
, 1},
807 {"att_syntax", set_intel_syntax
, 0},
808 {"intel_mnemonic", set_intel_mnemonic
, 1},
809 {"att_mnemonic", set_intel_mnemonic
, 0},
810 {"allow_index_reg", set_allow_index_reg
, 1},
811 {"disallow_index_reg", set_allow_index_reg
, 0},
812 {"sse_check", set_sse_check
, 0},
813 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
814 {"largecomm", handle_large_common
, 0},
816 {"file", (void (*) (int)) dwarf2_directive_file
, 0},
817 {"loc", dwarf2_directive_loc
, 0},
818 {"loc_mark_labels", dwarf2_directive_loc_mark_labels
, 0},
821 {"secrel32", pe_directive_secrel
, 0},
826 /* For interface with expression (). */
827 extern char *input_line_pointer
;
829 /* Hash table for instruction mnemonic lookup. */
830 static struct hash_control
*op_hash
;
832 /* Hash table for register lookup. */
833 static struct hash_control
*reg_hash
;
836 i386_align_code (fragS
*fragP
, int count
)
838 /* Various efficient no-op patterns for aligning code labels.
839 Note: Don't try to assemble the instructions in the comments.
840 0L and 0w are not legal. */
841 static const char f32_1
[] =
843 static const char f32_2
[] =
844 {0x66,0x90}; /* xchg %ax,%ax */
845 static const char f32_3
[] =
846 {0x8d,0x76,0x00}; /* leal 0(%esi),%esi */
847 static const char f32_4
[] =
848 {0x8d,0x74,0x26,0x00}; /* leal 0(%esi,1),%esi */
849 static const char f32_5
[] =
851 0x8d,0x74,0x26,0x00}; /* leal 0(%esi,1),%esi */
852 static const char f32_6
[] =
853 {0x8d,0xb6,0x00,0x00,0x00,0x00}; /* leal 0L(%esi),%esi */
854 static const char f32_7
[] =
855 {0x8d,0xb4,0x26,0x00,0x00,0x00,0x00}; /* leal 0L(%esi,1),%esi */
856 static const char f32_8
[] =
858 0x8d,0xb4,0x26,0x00,0x00,0x00,0x00}; /* leal 0L(%esi,1),%esi */
859 static const char f32_9
[] =
860 {0x89,0xf6, /* movl %esi,%esi */
861 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
862 static const char f32_10
[] =
863 {0x8d,0x76,0x00, /* leal 0(%esi),%esi */
864 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
865 static const char f32_11
[] =
866 {0x8d,0x74,0x26,0x00, /* leal 0(%esi,1),%esi */
867 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
868 static const char f32_12
[] =
869 {0x8d,0xb6,0x00,0x00,0x00,0x00, /* leal 0L(%esi),%esi */
870 0x8d,0xbf,0x00,0x00,0x00,0x00}; /* leal 0L(%edi),%edi */
871 static const char f32_13
[] =
872 {0x8d,0xb6,0x00,0x00,0x00,0x00, /* leal 0L(%esi),%esi */
873 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
874 static const char f32_14
[] =
875 {0x8d,0xb4,0x26,0x00,0x00,0x00,0x00, /* leal 0L(%esi,1),%esi */
876 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
877 static const char f16_3
[] =
878 {0x8d,0x74,0x00}; /* lea 0(%esi),%esi */
879 static const char f16_4
[] =
880 {0x8d,0xb4,0x00,0x00}; /* lea 0w(%si),%si */
881 static const char f16_5
[] =
883 0x8d,0xb4,0x00,0x00}; /* lea 0w(%si),%si */
884 static const char f16_6
[] =
885 {0x89,0xf6, /* mov %si,%si */
886 0x8d,0xbd,0x00,0x00}; /* lea 0w(%di),%di */
887 static const char f16_7
[] =
888 {0x8d,0x74,0x00, /* lea 0(%si),%si */
889 0x8d,0xbd,0x00,0x00}; /* lea 0w(%di),%di */
890 static const char f16_8
[] =
891 {0x8d,0xb4,0x00,0x00, /* lea 0w(%si),%si */
892 0x8d,0xbd,0x00,0x00}; /* lea 0w(%di),%di */
893 static const char jump_31
[] =
894 {0xeb,0x1d,0x90,0x90,0x90,0x90,0x90, /* jmp .+31; lotsa nops */
895 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
896 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
897 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90};
898 static const char *const f32_patt
[] = {
899 f32_1
, f32_2
, f32_3
, f32_4
, f32_5
, f32_6
, f32_7
, f32_8
,
900 f32_9
, f32_10
, f32_11
, f32_12
, f32_13
, f32_14
902 static const char *const f16_patt
[] = {
903 f32_1
, f32_2
, f16_3
, f16_4
, f16_5
, f16_6
, f16_7
, f16_8
906 static const char alt_3
[] =
908 /* nopl 0(%[re]ax) */
909 static const char alt_4
[] =
910 {0x0f,0x1f,0x40,0x00};
911 /* nopl 0(%[re]ax,%[re]ax,1) */
912 static const char alt_5
[] =
913 {0x0f,0x1f,0x44,0x00,0x00};
914 /* nopw 0(%[re]ax,%[re]ax,1) */
915 static const char alt_6
[] =
916 {0x66,0x0f,0x1f,0x44,0x00,0x00};
917 /* nopl 0L(%[re]ax) */
918 static const char alt_7
[] =
919 {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
920 /* nopl 0L(%[re]ax,%[re]ax,1) */
921 static const char alt_8
[] =
922 {0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
923 /* nopw 0L(%[re]ax,%[re]ax,1) */
924 static const char alt_9
[] =
925 {0x66,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
926 /* nopw %cs:0L(%[re]ax,%[re]ax,1) */
927 static const char alt_10
[] =
928 {0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
930 nopw %cs:0L(%[re]ax,%[re]ax,1) */
931 static const char alt_long_11
[] =
933 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
936 nopw %cs:0L(%[re]ax,%[re]ax,1) */
937 static const char alt_long_12
[] =
940 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
944 nopw %cs:0L(%[re]ax,%[re]ax,1) */
945 static const char alt_long_13
[] =
949 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
954 nopw %cs:0L(%[re]ax,%[re]ax,1) */
955 static const char alt_long_14
[] =
960 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
966 nopw %cs:0L(%[re]ax,%[re]ax,1) */
967 static const char alt_long_15
[] =
973 0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
974 /* nopl 0(%[re]ax,%[re]ax,1)
975 nopw 0(%[re]ax,%[re]ax,1) */
976 static const char alt_short_11
[] =
977 {0x0f,0x1f,0x44,0x00,0x00,
978 0x66,0x0f,0x1f,0x44,0x00,0x00};
979 /* nopw 0(%[re]ax,%[re]ax,1)
980 nopw 0(%[re]ax,%[re]ax,1) */
981 static const char alt_short_12
[] =
982 {0x66,0x0f,0x1f,0x44,0x00,0x00,
983 0x66,0x0f,0x1f,0x44,0x00,0x00};
984 /* nopw 0(%[re]ax,%[re]ax,1)
986 static const char alt_short_13
[] =
987 {0x66,0x0f,0x1f,0x44,0x00,0x00,
988 0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
991 static const char alt_short_14
[] =
992 {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00,
993 0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
995 nopl 0L(%[re]ax,%[re]ax,1) */
996 static const char alt_short_15
[] =
997 {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00,
998 0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
999 static const char *const alt_short_patt
[] = {
1000 f32_1
, f32_2
, alt_3
, alt_4
, alt_5
, alt_6
, alt_7
, alt_8
,
1001 alt_9
, alt_10
, alt_short_11
, alt_short_12
, alt_short_13
,
1002 alt_short_14
, alt_short_15
1004 static const char *const alt_long_patt
[] = {
1005 f32_1
, f32_2
, alt_3
, alt_4
, alt_5
, alt_6
, alt_7
, alt_8
,
1006 alt_9
, alt_10
, alt_long_11
, alt_long_12
, alt_long_13
,
1007 alt_long_14
, alt_long_15
1010 /* Only align for at least a positive non-zero boundary. */
1011 if (count
<= 0 || count
> MAX_MEM_FOR_RS_ALIGN_CODE
)
1014 /* We need to decide which NOP sequence to use for 32bit and
1015 64bit. When -mtune= is used:
1017 1. For PROCESSOR_I386, PROCESSOR_I486, PROCESSOR_PENTIUM and
1018 PROCESSOR_GENERIC32, f32_patt will be used.
1019 2. For PROCESSOR_PENTIUMPRO, PROCESSOR_PENTIUM4, PROCESSOR_NOCONA,
1020 PROCESSOR_CORE, PROCESSOR_CORE2, PROCESSOR_COREI7, and
1021 PROCESSOR_GENERIC64, alt_long_patt will be used.
1022 3. For PROCESSOR_ATHLON, PROCESSOR_K6, PROCESSOR_K8 and
1023 PROCESSOR_AMDFAM10, and PROCESSOR_BDVER1, alt_short_patt
1026 When -mtune= isn't used, alt_long_patt will be used if
1027 cpu_arch_isa_flags has CpuNop. Otherwise, f32_patt will
1030 When -march= or .arch is used, we can't use anything beyond
1031 cpu_arch_isa_flags. */
1033 if (flag_code
== CODE_16BIT
)
1037 memcpy (fragP
->fr_literal
+ fragP
->fr_fix
,
1039 /* Adjust jump offset. */
1040 fragP
->fr_literal
[fragP
->fr_fix
+ 1] = count
- 2;
1043 memcpy (fragP
->fr_literal
+ fragP
->fr_fix
,
1044 f16_patt
[count
- 1], count
);
1048 const char *const *patt
= NULL
;
1050 if (fragP
->tc_frag_data
.isa
== PROCESSOR_UNKNOWN
)
1052 /* PROCESSOR_UNKNOWN means that all ISAs may be used. */
1053 switch (cpu_arch_tune
)
1055 case PROCESSOR_UNKNOWN
:
1056 /* We use cpu_arch_isa_flags to check if we SHOULD
1057 optimize with nops. */
1058 if (fragP
->tc_frag_data
.isa_flags
.bitfield
.cpunop
)
1059 patt
= alt_long_patt
;
1063 case PROCESSOR_PENTIUM4
:
1064 case PROCESSOR_NOCONA
:
1065 case PROCESSOR_CORE
:
1066 case PROCESSOR_CORE2
:
1067 case PROCESSOR_COREI7
:
1068 case PROCESSOR_L1OM
:
1069 case PROCESSOR_GENERIC64
:
1070 patt
= alt_long_patt
;
1073 case PROCESSOR_ATHLON
:
1075 case PROCESSOR_AMDFAM10
:
1076 case PROCESSOR_BDVER1
:
1077 patt
= alt_short_patt
;
1079 case PROCESSOR_I386
:
1080 case PROCESSOR_I486
:
1081 case PROCESSOR_PENTIUM
:
1082 case PROCESSOR_PENTIUMPRO
:
1083 case PROCESSOR_GENERIC32
:
1090 switch (fragP
->tc_frag_data
.tune
)
1092 case PROCESSOR_UNKNOWN
:
1093 /* When cpu_arch_isa is set, cpu_arch_tune shouldn't be
1094 PROCESSOR_UNKNOWN. */
1098 case PROCESSOR_I386
:
1099 case PROCESSOR_I486
:
1100 case PROCESSOR_PENTIUM
:
1102 case PROCESSOR_ATHLON
:
1104 case PROCESSOR_AMDFAM10
:
1105 case PROCESSOR_BDVER1
:
1106 case PROCESSOR_GENERIC32
:
1107 /* We use cpu_arch_isa_flags to check if we CAN optimize
1109 if (fragP
->tc_frag_data
.isa_flags
.bitfield
.cpunop
)
1110 patt
= alt_short_patt
;
1114 case PROCESSOR_PENTIUMPRO
:
1115 case PROCESSOR_PENTIUM4
:
1116 case PROCESSOR_NOCONA
:
1117 case PROCESSOR_CORE
:
1118 case PROCESSOR_CORE2
:
1119 case PROCESSOR_COREI7
:
1120 case PROCESSOR_L1OM
:
1121 if (fragP
->tc_frag_data
.isa_flags
.bitfield
.cpunop
)
1122 patt
= alt_long_patt
;
1126 case PROCESSOR_GENERIC64
:
1127 patt
= alt_long_patt
;
1132 if (patt
== f32_patt
)
1134 /* If the padding is less than 15 bytes, we use the normal
1135 ones. Otherwise, we use a jump instruction and adjust
1139 /* For 64bit, the limit is 3 bytes. */
1140 if (flag_code
== CODE_64BIT
1141 && fragP
->tc_frag_data
.isa_flags
.bitfield
.cpulm
)
1146 memcpy (fragP
->fr_literal
+ fragP
->fr_fix
,
1147 patt
[count
- 1], count
);
1150 memcpy (fragP
->fr_literal
+ fragP
->fr_fix
,
1152 /* Adjust jump offset. */
1153 fragP
->fr_literal
[fragP
->fr_fix
+ 1] = count
- 2;
1158 /* Maximum length of an instruction is 15 byte. If the
1159 padding is greater than 15 bytes and we don't use jump,
1160 we have to break it into smaller pieces. */
1161 int padding
= count
;
1162 while (padding
> 15)
1165 memcpy (fragP
->fr_literal
+ fragP
->fr_fix
+ padding
,
1170 memcpy (fragP
->fr_literal
+ fragP
->fr_fix
,
1171 patt
[padding
- 1], padding
);
1174 fragP
->fr_var
= count
;
1178 operand_type_all_zero (const union i386_operand_type
*x
)
1180 switch (ARRAY_SIZE(x
->array
))
1189 return !x
->array
[0];
1196 operand_type_set (union i386_operand_type
*x
, unsigned int v
)
1198 switch (ARRAY_SIZE(x
->array
))
1213 operand_type_equal (const union i386_operand_type
*x
,
1214 const union i386_operand_type
*y
)
1216 switch (ARRAY_SIZE(x
->array
))
1219 if (x
->array
[2] != y
->array
[2])
1222 if (x
->array
[1] != y
->array
[1])
1225 return x
->array
[0] == y
->array
[0];
1233 cpu_flags_all_zero (const union i386_cpu_flags
*x
)
1235 switch (ARRAY_SIZE(x
->array
))
1244 return !x
->array
[0];
1251 cpu_flags_set (union i386_cpu_flags
*x
, unsigned int v
)
1253 switch (ARRAY_SIZE(x
->array
))
1268 cpu_flags_equal (const union i386_cpu_flags
*x
,
1269 const union i386_cpu_flags
*y
)
1271 switch (ARRAY_SIZE(x
->array
))
1274 if (x
->array
[2] != y
->array
[2])
1277 if (x
->array
[1] != y
->array
[1])
1280 return x
->array
[0] == y
->array
[0];
1288 cpu_flags_check_cpu64 (i386_cpu_flags f
)
1290 return !((flag_code
== CODE_64BIT
&& f
.bitfield
.cpuno64
)
1291 || (flag_code
!= CODE_64BIT
&& f
.bitfield
.cpu64
));
1294 static INLINE i386_cpu_flags
1295 cpu_flags_and (i386_cpu_flags x
, i386_cpu_flags y
)
1297 switch (ARRAY_SIZE (x
.array
))
1300 x
.array
[2] &= y
.array
[2];
1302 x
.array
[1] &= y
.array
[1];
1304 x
.array
[0] &= y
.array
[0];
1312 static INLINE i386_cpu_flags
1313 cpu_flags_or (i386_cpu_flags x
, i386_cpu_flags y
)
1315 switch (ARRAY_SIZE (x
.array
))
1318 x
.array
[2] |= y
.array
[2];
1320 x
.array
[1] |= y
.array
[1];
1322 x
.array
[0] |= y
.array
[0];
1330 static INLINE i386_cpu_flags
1331 cpu_flags_and_not (i386_cpu_flags x
, i386_cpu_flags y
)
1333 switch (ARRAY_SIZE (x
.array
))
1336 x
.array
[2] &= ~y
.array
[2];
1338 x
.array
[1] &= ~y
.array
[1];
1340 x
.array
[0] &= ~y
.array
[0];
1348 #define CPU_FLAGS_ARCH_MATCH 0x1
1349 #define CPU_FLAGS_64BIT_MATCH 0x2
1350 #define CPU_FLAGS_AES_MATCH 0x4
1351 #define CPU_FLAGS_PCLMUL_MATCH 0x8
1352 #define CPU_FLAGS_AVX_MATCH 0x10
1354 #define CPU_FLAGS_32BIT_MATCH \
1355 (CPU_FLAGS_ARCH_MATCH | CPU_FLAGS_AES_MATCH \
1356 | CPU_FLAGS_PCLMUL_MATCH | CPU_FLAGS_AVX_MATCH)
1357 #define CPU_FLAGS_PERFECT_MATCH \
1358 (CPU_FLAGS_32BIT_MATCH | CPU_FLAGS_64BIT_MATCH)
1360 /* Return CPU flags match bits. */
1363 cpu_flags_match (const insn_template
*t
)
1365 i386_cpu_flags x
= t
->cpu_flags
;
1366 int match
= cpu_flags_check_cpu64 (x
) ? CPU_FLAGS_64BIT_MATCH
: 0;
1368 x
.bitfield
.cpu64
= 0;
1369 x
.bitfield
.cpuno64
= 0;
1371 if (cpu_flags_all_zero (&x
))
1373 /* This instruction is available on all archs. */
1374 match
|= CPU_FLAGS_32BIT_MATCH
;
1378 /* This instruction is available only on some archs. */
1379 i386_cpu_flags cpu
= cpu_arch_flags
;
1381 cpu
.bitfield
.cpu64
= 0;
1382 cpu
.bitfield
.cpuno64
= 0;
1383 cpu
= cpu_flags_and (x
, cpu
);
1384 if (!cpu_flags_all_zero (&cpu
))
1386 if (x
.bitfield
.cpuavx
)
1388 /* We only need to check AES/PCLMUL/SSE2AVX with AVX. */
1389 if (cpu
.bitfield
.cpuavx
)
1391 /* Check SSE2AVX. */
1392 if (!t
->opcode_modifier
.sse2avx
|| sse2avx
)
1394 match
|= (CPU_FLAGS_ARCH_MATCH
1395 | CPU_FLAGS_AVX_MATCH
);
1397 if (!x
.bitfield
.cpuaes
|| cpu
.bitfield
.cpuaes
)
1398 match
|= CPU_FLAGS_AES_MATCH
;
1400 if (!x
.bitfield
.cpupclmul
1401 || cpu
.bitfield
.cpupclmul
)
1402 match
|= CPU_FLAGS_PCLMUL_MATCH
;
1406 match
|= CPU_FLAGS_ARCH_MATCH
;
1409 match
|= CPU_FLAGS_32BIT_MATCH
;
1415 static INLINE i386_operand_type
1416 operand_type_and (i386_operand_type x
, i386_operand_type y
)
1418 switch (ARRAY_SIZE (x
.array
))
1421 x
.array
[2] &= y
.array
[2];
1423 x
.array
[1] &= y
.array
[1];
1425 x
.array
[0] &= y
.array
[0];
1433 static INLINE i386_operand_type
1434 operand_type_or (i386_operand_type x
, i386_operand_type y
)
1436 switch (ARRAY_SIZE (x
.array
))
1439 x
.array
[2] |= y
.array
[2];
1441 x
.array
[1] |= y
.array
[1];
1443 x
.array
[0] |= y
.array
[0];
1451 static INLINE i386_operand_type
1452 operand_type_xor (i386_operand_type x
, i386_operand_type y
)
1454 switch (ARRAY_SIZE (x
.array
))
1457 x
.array
[2] ^= y
.array
[2];
1459 x
.array
[1] ^= y
.array
[1];
1461 x
.array
[0] ^= y
.array
[0];
1469 static const i386_operand_type acc32
= OPERAND_TYPE_ACC32
;
1470 static const i386_operand_type acc64
= OPERAND_TYPE_ACC64
;
1471 static const i386_operand_type control
= OPERAND_TYPE_CONTROL
;
1472 static const i386_operand_type inoutportreg
1473 = OPERAND_TYPE_INOUTPORTREG
;
1474 static const i386_operand_type reg16_inoutportreg
1475 = OPERAND_TYPE_REG16_INOUTPORTREG
;
1476 static const i386_operand_type disp16
= OPERAND_TYPE_DISP16
;
1477 static const i386_operand_type disp32
= OPERAND_TYPE_DISP32
;
1478 static const i386_operand_type disp32s
= OPERAND_TYPE_DISP32S
;
1479 static const i386_operand_type disp16_32
= OPERAND_TYPE_DISP16_32
;
1480 static const i386_operand_type anydisp
1481 = OPERAND_TYPE_ANYDISP
;
1482 static const i386_operand_type regxmm
= OPERAND_TYPE_REGXMM
;
1483 static const i386_operand_type regymm
= OPERAND_TYPE_REGYMM
;
1484 static const i386_operand_type imm8
= OPERAND_TYPE_IMM8
;
1485 static const i386_operand_type imm8s
= OPERAND_TYPE_IMM8S
;
1486 static const i386_operand_type imm16
= OPERAND_TYPE_IMM16
;
1487 static const i386_operand_type imm32
= OPERAND_TYPE_IMM32
;
1488 static const i386_operand_type imm32s
= OPERAND_TYPE_IMM32S
;
1489 static const i386_operand_type imm64
= OPERAND_TYPE_IMM64
;
1490 static const i386_operand_type imm16_32
= OPERAND_TYPE_IMM16_32
;
1491 static const i386_operand_type imm16_32s
= OPERAND_TYPE_IMM16_32S
;
1492 static const i386_operand_type imm16_32_32s
= OPERAND_TYPE_IMM16_32_32S
;
1493 static const i386_operand_type vec_imm4
= OPERAND_TYPE_VEC_IMM4
;
1504 operand_type_check (i386_operand_type t
, enum operand_type c
)
1509 return (t
.bitfield
.reg8
1512 || t
.bitfield
.reg64
);
1515 return (t
.bitfield
.imm8
1519 || t
.bitfield
.imm32s
1520 || t
.bitfield
.imm64
);
1523 return (t
.bitfield
.disp8
1524 || t
.bitfield
.disp16
1525 || t
.bitfield
.disp32
1526 || t
.bitfield
.disp32s
1527 || t
.bitfield
.disp64
);
1530 return (t
.bitfield
.disp8
1531 || t
.bitfield
.disp16
1532 || t
.bitfield
.disp32
1533 || t
.bitfield
.disp32s
1534 || t
.bitfield
.disp64
1535 || t
.bitfield
.baseindex
);
1544 /* Return 1 if there is no conflict in 8bit/16bit/32bit/64bit on
1545 operand J for instruction template T. */
1548 match_reg_size (const insn_template
*t
, unsigned int j
)
1550 return !((i
.types
[j
].bitfield
.byte
1551 && !t
->operand_types
[j
].bitfield
.byte
)
1552 || (i
.types
[j
].bitfield
.word
1553 && !t
->operand_types
[j
].bitfield
.word
)
1554 || (i
.types
[j
].bitfield
.dword
1555 && !t
->operand_types
[j
].bitfield
.dword
)
1556 || (i
.types
[j
].bitfield
.qword
1557 && !t
->operand_types
[j
].bitfield
.qword
));
1560 /* Return 1 if there is no conflict in any size on operand J for
1561 instruction template T. */
1564 match_mem_size (const insn_template
*t
, unsigned int j
)
1566 return (match_reg_size (t
, j
)
1567 && !((i
.types
[j
].bitfield
.unspecified
1568 && !t
->operand_types
[j
].bitfield
.unspecified
)
1569 || (i
.types
[j
].bitfield
.fword
1570 && !t
->operand_types
[j
].bitfield
.fword
)
1571 || (i
.types
[j
].bitfield
.tbyte
1572 && !t
->operand_types
[j
].bitfield
.tbyte
)
1573 || (i
.types
[j
].bitfield
.xmmword
1574 && !t
->operand_types
[j
].bitfield
.xmmword
)
1575 || (i
.types
[j
].bitfield
.ymmword
1576 && !t
->operand_types
[j
].bitfield
.ymmword
)));
1579 /* Return 1 if there is no size conflict on any operands for
1580 instruction template T. */
1583 operand_size_match (const insn_template
*t
)
1588 /* Don't check jump instructions. */
1589 if (t
->opcode_modifier
.jump
1590 || t
->opcode_modifier
.jumpbyte
1591 || t
->opcode_modifier
.jumpdword
1592 || t
->opcode_modifier
.jumpintersegment
)
1595 /* Check memory and accumulator operand size. */
1596 for (j
= 0; j
< i
.operands
; j
++)
1598 if (t
->operand_types
[j
].bitfield
.anysize
)
1601 if (t
->operand_types
[j
].bitfield
.acc
&& !match_reg_size (t
, j
))
1607 if (i
.types
[j
].bitfield
.mem
&& !match_mem_size (t
, j
))
1616 else if (!t
->opcode_modifier
.d
&& !t
->opcode_modifier
.floatd
)
1619 i
.error
= operand_size_mismatch
;
1623 /* Check reverse. */
1624 gas_assert (i
.operands
== 2);
1627 for (j
= 0; j
< 2; j
++)
1629 if (t
->operand_types
[j
].bitfield
.acc
1630 && !match_reg_size (t
, j
? 0 : 1))
1633 if (i
.types
[j
].bitfield
.mem
1634 && !match_mem_size (t
, j
? 0 : 1))
1642 operand_type_match (i386_operand_type overlap
,
1643 i386_operand_type given
)
1645 i386_operand_type temp
= overlap
;
1647 temp
.bitfield
.jumpabsolute
= 0;
1648 temp
.bitfield
.unspecified
= 0;
1649 temp
.bitfield
.byte
= 0;
1650 temp
.bitfield
.word
= 0;
1651 temp
.bitfield
.dword
= 0;
1652 temp
.bitfield
.fword
= 0;
1653 temp
.bitfield
.qword
= 0;
1654 temp
.bitfield
.tbyte
= 0;
1655 temp
.bitfield
.xmmword
= 0;
1656 temp
.bitfield
.ymmword
= 0;
1657 if (operand_type_all_zero (&temp
))
1660 if (given
.bitfield
.baseindex
== overlap
.bitfield
.baseindex
1661 && given
.bitfield
.jumpabsolute
== overlap
.bitfield
.jumpabsolute
)
1665 i
.error
= operand_type_mismatch
;
1669 /* If given types g0 and g1 are registers they must be of the same type
1670 unless the expected operand type register overlap is null.
1671 Note that Acc in a template matches every size of reg. */
1674 operand_type_register_match (i386_operand_type m0
,
1675 i386_operand_type g0
,
1676 i386_operand_type t0
,
1677 i386_operand_type m1
,
1678 i386_operand_type g1
,
1679 i386_operand_type t1
)
1681 if (!operand_type_check (g0
, reg
))
1684 if (!operand_type_check (g1
, reg
))
1687 if (g0
.bitfield
.reg8
== g1
.bitfield
.reg8
1688 && g0
.bitfield
.reg16
== g1
.bitfield
.reg16
1689 && g0
.bitfield
.reg32
== g1
.bitfield
.reg32
1690 && g0
.bitfield
.reg64
== g1
.bitfield
.reg64
)
1693 if (m0
.bitfield
.acc
)
1695 t0
.bitfield
.reg8
= 1;
1696 t0
.bitfield
.reg16
= 1;
1697 t0
.bitfield
.reg32
= 1;
1698 t0
.bitfield
.reg64
= 1;
1701 if (m1
.bitfield
.acc
)
1703 t1
.bitfield
.reg8
= 1;
1704 t1
.bitfield
.reg16
= 1;
1705 t1
.bitfield
.reg32
= 1;
1706 t1
.bitfield
.reg64
= 1;
1709 if (!(t0
.bitfield
.reg8
& t1
.bitfield
.reg8
)
1710 && !(t0
.bitfield
.reg16
& t1
.bitfield
.reg16
)
1711 && !(t0
.bitfield
.reg32
& t1
.bitfield
.reg32
)
1712 && !(t0
.bitfield
.reg64
& t1
.bitfield
.reg64
))
1715 i
.error
= register_type_mismatch
;
1720 static INLINE
unsigned int
1721 mode_from_disp_size (i386_operand_type t
)
1723 if (t
.bitfield
.disp8
)
1725 else if (t
.bitfield
.disp16
1726 || t
.bitfield
.disp32
1727 || t
.bitfield
.disp32s
)
1734 fits_in_signed_byte (offsetT num
)
1736 return (num
>= -128) && (num
<= 127);
1740 fits_in_unsigned_byte (offsetT num
)
1742 return (num
& 0xff) == num
;
1746 fits_in_unsigned_word (offsetT num
)
1748 return (num
& 0xffff) == num
;
1752 fits_in_signed_word (offsetT num
)
1754 return (-32768 <= num
) && (num
<= 32767);
1758 fits_in_signed_long (offsetT num ATTRIBUTE_UNUSED
)
1763 return (!(((offsetT
) -1 << 31) & num
)
1764 || (((offsetT
) -1 << 31) & num
) == ((offsetT
) -1 << 31));
1766 } /* fits_in_signed_long() */
1769 fits_in_unsigned_long (offsetT num ATTRIBUTE_UNUSED
)
1774 return (num
& (((offsetT
) 2 << 31) - 1)) == num
;
1776 } /* fits_in_unsigned_long() */
1779 fits_in_imm4 (offsetT num
)
1781 return (num
& 0xf) == num
;
1784 static i386_operand_type
1785 smallest_imm_type (offsetT num
)
1787 i386_operand_type t
;
1789 operand_type_set (&t
, 0);
1790 t
.bitfield
.imm64
= 1;
1792 if (cpu_arch_tune
!= PROCESSOR_I486
&& num
== 1)
1794 /* This code is disabled on the 486 because all the Imm1 forms
1795 in the opcode table are slower on the i486. They're the
1796 versions with the implicitly specified single-position
1797 displacement, which has another syntax if you really want to
1799 t
.bitfield
.imm1
= 1;
1800 t
.bitfield
.imm8
= 1;
1801 t
.bitfield
.imm8s
= 1;
1802 t
.bitfield
.imm16
= 1;
1803 t
.bitfield
.imm32
= 1;
1804 t
.bitfield
.imm32s
= 1;
1806 else if (fits_in_signed_byte (num
))
1808 t
.bitfield
.imm8
= 1;
1809 t
.bitfield
.imm8s
= 1;
1810 t
.bitfield
.imm16
= 1;
1811 t
.bitfield
.imm32
= 1;
1812 t
.bitfield
.imm32s
= 1;
1814 else if (fits_in_unsigned_byte (num
))
1816 t
.bitfield
.imm8
= 1;
1817 t
.bitfield
.imm16
= 1;
1818 t
.bitfield
.imm32
= 1;
1819 t
.bitfield
.imm32s
= 1;
1821 else if (fits_in_signed_word (num
) || fits_in_unsigned_word (num
))
1823 t
.bitfield
.imm16
= 1;
1824 t
.bitfield
.imm32
= 1;
1825 t
.bitfield
.imm32s
= 1;
1827 else if (fits_in_signed_long (num
))
1829 t
.bitfield
.imm32
= 1;
1830 t
.bitfield
.imm32s
= 1;
1832 else if (fits_in_unsigned_long (num
))
1833 t
.bitfield
.imm32
= 1;
1839 offset_in_range (offsetT val
, int size
)
1845 case 1: mask
= ((addressT
) 1 << 8) - 1; break;
1846 case 2: mask
= ((addressT
) 1 << 16) - 1; break;
1847 case 4: mask
= ((addressT
) 2 << 31) - 1; break;
1849 case 8: mask
= ((addressT
) 2 << 63) - 1; break;
1855 /* If BFD64, sign extend val for 32bit address mode. */
1856 if (flag_code
!= CODE_64BIT
1857 || i
.prefix
[ADDR_PREFIX
])
1858 if ((val
& ~(((addressT
) 2 << 31) - 1)) == 0)
1859 val
= (val
^ ((addressT
) 1 << 31)) - ((addressT
) 1 << 31);
1862 if ((val
& ~mask
) != 0 && (val
& ~mask
) != ~mask
)
1864 char buf1
[40], buf2
[40];
1866 sprint_value (buf1
, val
);
1867 sprint_value (buf2
, val
& mask
);
1868 as_warn (_("%s shortened to %s"), buf1
, buf2
);
1882 a. PREFIX_EXIST if attempting to add a prefix where one from the
1883 same class already exists.
1884 b. PREFIX_LOCK if lock prefix is added.
1885 c. PREFIX_REP if rep/repne prefix is added.
1886 d. PREFIX_OTHER if other prefix is added.
1889 static enum PREFIX_GROUP
1890 add_prefix (unsigned int prefix
)
1892 enum PREFIX_GROUP ret
= PREFIX_OTHER
;
1895 if (prefix
>= REX_OPCODE
&& prefix
< REX_OPCODE
+ 16
1896 && flag_code
== CODE_64BIT
)
1898 if ((i
.prefix
[REX_PREFIX
] & prefix
& REX_W
)
1899 || ((i
.prefix
[REX_PREFIX
] & (REX_R
| REX_X
| REX_B
))
1900 && (prefix
& (REX_R
| REX_X
| REX_B
))))
1911 case CS_PREFIX_OPCODE
:
1912 case DS_PREFIX_OPCODE
:
1913 case ES_PREFIX_OPCODE
:
1914 case FS_PREFIX_OPCODE
:
1915 case GS_PREFIX_OPCODE
:
1916 case SS_PREFIX_OPCODE
:
1920 case REPNE_PREFIX_OPCODE
:
1921 case REPE_PREFIX_OPCODE
:
1926 case LOCK_PREFIX_OPCODE
:
1935 case ADDR_PREFIX_OPCODE
:
1939 case DATA_PREFIX_OPCODE
:
1943 if (i
.prefix
[q
] != 0)
1951 i
.prefix
[q
] |= prefix
;
1954 as_bad (_("same type of prefix used twice"));
1960 update_code_flag (int value
, int check
)
1962 PRINTF_LIKE ((*as_error
));
1964 flag_code
= (enum flag_code
) value
;
1965 if (flag_code
== CODE_64BIT
)
1967 cpu_arch_flags
.bitfield
.cpu64
= 1;
1968 cpu_arch_flags
.bitfield
.cpuno64
= 0;
1972 cpu_arch_flags
.bitfield
.cpu64
= 0;
1973 cpu_arch_flags
.bitfield
.cpuno64
= 1;
1975 if (value
== CODE_64BIT
&& !cpu_arch_flags
.bitfield
.cpulm
)
1978 as_error
= as_fatal
;
1981 (*as_error
) (_("64bit mode not supported on `%s'."),
1982 cpu_arch_name
? cpu_arch_name
: default_arch
);
1984 if (value
== CODE_32BIT
&& !cpu_arch_flags
.bitfield
.cpui386
)
1987 as_error
= as_fatal
;
1990 (*as_error
) (_("32bit mode not supported on `%s'."),
1991 cpu_arch_name
? cpu_arch_name
: default_arch
);
1993 stackop_size
= '\0';
1997 set_code_flag (int value
)
1999 update_code_flag (value
, 0);
2003 set_16bit_gcc_code_flag (int new_code_flag
)
2005 flag_code
= (enum flag_code
) new_code_flag
;
2006 if (flag_code
!= CODE_16BIT
)
2008 cpu_arch_flags
.bitfield
.cpu64
= 0;
2009 cpu_arch_flags
.bitfield
.cpuno64
= 1;
2010 stackop_size
= LONG_MNEM_SUFFIX
;
2014 set_intel_syntax (int syntax_flag
)
2016 /* Find out if register prefixing is specified. */
2017 int ask_naked_reg
= 0;
2020 if (!is_end_of_line
[(unsigned char) *input_line_pointer
])
2022 char *string
= input_line_pointer
;
2023 int e
= get_symbol_end ();
2025 if (strcmp (string
, "prefix") == 0)
2027 else if (strcmp (string
, "noprefix") == 0)
2030 as_bad (_("bad argument to syntax directive."));
2031 *input_line_pointer
= e
;
2033 demand_empty_rest_of_line ();
2035 intel_syntax
= syntax_flag
;
2037 if (ask_naked_reg
== 0)
2038 allow_naked_reg
= (intel_syntax
2039 && (bfd_get_symbol_leading_char (stdoutput
) != '\0'));
2041 allow_naked_reg
= (ask_naked_reg
< 0);
2043 expr_set_rank (O_full_ptr
, syntax_flag
? 10 : 0);
2045 identifier_chars
['%'] = intel_syntax
&& allow_naked_reg
? '%' : 0;
2046 identifier_chars
['$'] = intel_syntax
? '$' : 0;
2047 register_prefix
= allow_naked_reg
? "" : "%";
2051 set_intel_mnemonic (int mnemonic_flag
)
2053 intel_mnemonic
= mnemonic_flag
;
2057 set_allow_index_reg (int flag
)
2059 allow_index_reg
= flag
;
2063 set_sse_check (int dummy ATTRIBUTE_UNUSED
)
2067 if (!is_end_of_line
[(unsigned char) *input_line_pointer
])
2069 char *string
= input_line_pointer
;
2070 int e
= get_symbol_end ();
2072 if (strcmp (string
, "none") == 0)
2073 sse_check
= sse_check_none
;
2074 else if (strcmp (string
, "warning") == 0)
2075 sse_check
= sse_check_warning
;
2076 else if (strcmp (string
, "error") == 0)
2077 sse_check
= sse_check_error
;
2079 as_bad (_("bad argument to sse_check directive."));
2080 *input_line_pointer
= e
;
2083 as_bad (_("missing argument for sse_check directive"));
2085 demand_empty_rest_of_line ();
2089 check_cpu_arch_compatible (const char *name ATTRIBUTE_UNUSED
,
2090 i386_cpu_flags new_flag ATTRIBUTE_UNUSED
)
2092 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
2093 static const char *arch
;
2095 /* Intel LIOM is only supported on ELF. */
2101 /* Use cpu_arch_name if it is set in md_parse_option. Otherwise
2102 use default_arch. */
2103 arch
= cpu_arch_name
;
2105 arch
= default_arch
;
2108 /* If we are targeting Intel L1OM, we must enable it. */
2109 if (get_elf_backend_data (stdoutput
)->elf_machine_code
!= EM_L1OM
2110 || new_flag
.bitfield
.cpul1om
)
2113 as_bad (_("`%s' is not supported on `%s'"), name
, arch
);
2118 set_cpu_arch (int dummy ATTRIBUTE_UNUSED
)
2122 if (!is_end_of_line
[(unsigned char) *input_line_pointer
])
2124 char *string
= input_line_pointer
;
2125 int e
= get_symbol_end ();
2127 i386_cpu_flags flags
;
2129 for (j
= 0; j
< ARRAY_SIZE (cpu_arch
); j
++)
2131 if (strcmp (string
, cpu_arch
[j
].name
) == 0)
2133 check_cpu_arch_compatible (string
, cpu_arch
[j
].flags
);
2137 cpu_arch_name
= cpu_arch
[j
].name
;
2138 cpu_sub_arch_name
= NULL
;
2139 cpu_arch_flags
= cpu_arch
[j
].flags
;
2140 if (flag_code
== CODE_64BIT
)
2142 cpu_arch_flags
.bitfield
.cpu64
= 1;
2143 cpu_arch_flags
.bitfield
.cpuno64
= 0;
2147 cpu_arch_flags
.bitfield
.cpu64
= 0;
2148 cpu_arch_flags
.bitfield
.cpuno64
= 1;
2150 cpu_arch_isa
= cpu_arch
[j
].type
;
2151 cpu_arch_isa_flags
= cpu_arch
[j
].flags
;
2152 if (!cpu_arch_tune_set
)
2154 cpu_arch_tune
= cpu_arch_isa
;
2155 cpu_arch_tune_flags
= cpu_arch_isa_flags
;
2160 if (!cpu_arch
[j
].negated
)
2161 flags
= cpu_flags_or (cpu_arch_flags
,
2164 flags
= cpu_flags_and_not (cpu_arch_flags
,
2166 if (!cpu_flags_equal (&flags
, &cpu_arch_flags
))
2168 if (cpu_sub_arch_name
)
2170 char *name
= cpu_sub_arch_name
;
2171 cpu_sub_arch_name
= concat (name
,
2173 (const char *) NULL
);
2177 cpu_sub_arch_name
= xstrdup (cpu_arch
[j
].name
);
2178 cpu_arch_flags
= flags
;
2179 cpu_arch_isa_flags
= flags
;
2181 *input_line_pointer
= e
;
2182 demand_empty_rest_of_line ();
2186 if (j
>= ARRAY_SIZE (cpu_arch
))
2187 as_bad (_("no such architecture: `%s'"), string
);
2189 *input_line_pointer
= e
;
2192 as_bad (_("missing cpu architecture"));
2194 no_cond_jump_promotion
= 0;
2195 if (*input_line_pointer
== ','
2196 && !is_end_of_line
[(unsigned char) input_line_pointer
[1]])
2198 char *string
= ++input_line_pointer
;
2199 int e
= get_symbol_end ();
2201 if (strcmp (string
, "nojumps") == 0)
2202 no_cond_jump_promotion
= 1;
2203 else if (strcmp (string
, "jumps") == 0)
2206 as_bad (_("no such architecture modifier: `%s'"), string
);
2208 *input_line_pointer
= e
;
2211 demand_empty_rest_of_line ();
2214 enum bfd_architecture
2217 if (cpu_arch_isa
== PROCESSOR_L1OM
)
2219 if (OUTPUT_FLAVOR
!= bfd_target_elf_flavour
2220 || flag_code
!= CODE_64BIT
)
2221 as_fatal (_("Intel L1OM is 64bit ELF only"));
2222 return bfd_arch_l1om
;
2225 return bfd_arch_i386
;
2231 if (!strncmp (default_arch
, "x86_64", 6))
2233 if (cpu_arch_isa
== PROCESSOR_L1OM
)
2235 if (OUTPUT_FLAVOR
!= bfd_target_elf_flavour
2236 || default_arch
[6] != '\0')
2237 as_fatal (_("Intel L1OM is 64bit ELF only"));
2238 return bfd_mach_l1om
;
2240 else if (default_arch
[6] == '\0')
2241 return bfd_mach_x86_64
;
2243 return bfd_mach_x64_32
;
2245 else if (!strcmp (default_arch
, "i386"))
2246 return bfd_mach_i386_i386
;
2248 as_fatal (_("Unknown architecture"));
2254 const char *hash_err
;
2256 /* Initialize op_hash hash table. */
2257 op_hash
= hash_new ();
2260 const insn_template
*optab
;
2261 templates
*core_optab
;
2263 /* Setup for loop. */
2265 core_optab
= (templates
*) xmalloc (sizeof (templates
));
2266 core_optab
->start
= optab
;
2271 if (optab
->name
== NULL
2272 || strcmp (optab
->name
, (optab
- 1)->name
) != 0)
2274 /* different name --> ship out current template list;
2275 add to hash table; & begin anew. */
2276 core_optab
->end
= optab
;
2277 hash_err
= hash_insert (op_hash
,
2279 (void *) core_optab
);
2282 as_fatal (_("Internal Error: Can't hash %s: %s"),
2286 if (optab
->name
== NULL
)
2288 core_optab
= (templates
*) xmalloc (sizeof (templates
));
2289 core_optab
->start
= optab
;
2294 /* Initialize reg_hash hash table. */
2295 reg_hash
= hash_new ();
2297 const reg_entry
*regtab
;
2298 unsigned int regtab_size
= i386_regtab_size
;
2300 for (regtab
= i386_regtab
; regtab_size
--; regtab
++)
2302 hash_err
= hash_insert (reg_hash
, regtab
->reg_name
, (void *) regtab
);
2304 as_fatal (_("Internal Error: Can't hash %s: %s"),
2310 /* Fill in lexical tables: mnemonic_chars, operand_chars. */
2315 for (c
= 0; c
< 256; c
++)
2320 mnemonic_chars
[c
] = c
;
2321 register_chars
[c
] = c
;
2322 operand_chars
[c
] = c
;
2324 else if (ISLOWER (c
))
2326 mnemonic_chars
[c
] = c
;
2327 register_chars
[c
] = c
;
2328 operand_chars
[c
] = c
;
2330 else if (ISUPPER (c
))
2332 mnemonic_chars
[c
] = TOLOWER (c
);
2333 register_chars
[c
] = mnemonic_chars
[c
];
2334 operand_chars
[c
] = c
;
2337 if (ISALPHA (c
) || ISDIGIT (c
))
2338 identifier_chars
[c
] = c
;
2341 identifier_chars
[c
] = c
;
2342 operand_chars
[c
] = c
;
2347 identifier_chars
['@'] = '@';
2350 identifier_chars
['?'] = '?';
2351 operand_chars
['?'] = '?';
2353 digit_chars
['-'] = '-';
2354 mnemonic_chars
['_'] = '_';
2355 mnemonic_chars
['-'] = '-';
2356 mnemonic_chars
['.'] = '.';
2357 identifier_chars
['_'] = '_';
2358 identifier_chars
['.'] = '.';
2360 for (p
= operand_special_chars
; *p
!= '\0'; p
++)
2361 operand_chars
[(unsigned char) *p
] = *p
;
2364 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
2367 record_alignment (text_section
, 2);
2368 record_alignment (data_section
, 2);
2369 record_alignment (bss_section
, 2);
2373 if (flag_code
== CODE_64BIT
)
2375 #if defined (OBJ_COFF) && defined (TE_PE)
2376 x86_dwarf2_return_column
= (OUTPUT_FLAVOR
== bfd_target_coff_flavour
2379 x86_dwarf2_return_column
= 16;
2381 x86_cie_data_alignment
= -8;
2385 x86_dwarf2_return_column
= 8;
2386 x86_cie_data_alignment
= -4;
2391 i386_print_statistics (FILE *file
)
2393 hash_print_statistics (file
, "i386 opcode", op_hash
);
2394 hash_print_statistics (file
, "i386 register", reg_hash
);
2399 /* Debugging routines for md_assemble. */
2400 static void pte (insn_template
*);
2401 static void pt (i386_operand_type
);
2402 static void pe (expressionS
*);
2403 static void ps (symbolS
*);
2406 pi (char *line
, i386_insn
*x
)
2410 fprintf (stdout
, "%s: template ", line
);
2412 fprintf (stdout
, " address: base %s index %s scale %x\n",
2413 x
->base_reg
? x
->base_reg
->reg_name
: "none",
2414 x
->index_reg
? x
->index_reg
->reg_name
: "none",
2415 x
->log2_scale_factor
);
2416 fprintf (stdout
, " modrm: mode %x reg %x reg/mem %x\n",
2417 x
->rm
.mode
, x
->rm
.reg
, x
->rm
.regmem
);
2418 fprintf (stdout
, " sib: base %x index %x scale %x\n",
2419 x
->sib
.base
, x
->sib
.index
, x
->sib
.scale
);
2420 fprintf (stdout
, " rex: 64bit %x extX %x extY %x extZ %x\n",
2421 (x
->rex
& REX_W
) != 0,
2422 (x
->rex
& REX_R
) != 0,
2423 (x
->rex
& REX_X
) != 0,
2424 (x
->rex
& REX_B
) != 0);
2425 for (j
= 0; j
< x
->operands
; j
++)
2427 fprintf (stdout
, " #%d: ", j
+ 1);
2429 fprintf (stdout
, "\n");
2430 if (x
->types
[j
].bitfield
.reg8
2431 || x
->types
[j
].bitfield
.reg16
2432 || x
->types
[j
].bitfield
.reg32
2433 || x
->types
[j
].bitfield
.reg64
2434 || x
->types
[j
].bitfield
.regmmx
2435 || x
->types
[j
].bitfield
.regxmm
2436 || x
->types
[j
].bitfield
.regymm
2437 || x
->types
[j
].bitfield
.sreg2
2438 || x
->types
[j
].bitfield
.sreg3
2439 || x
->types
[j
].bitfield
.control
2440 || x
->types
[j
].bitfield
.debug
2441 || x
->types
[j
].bitfield
.test
)
2442 fprintf (stdout
, "%s\n", x
->op
[j
].regs
->reg_name
);
2443 if (operand_type_check (x
->types
[j
], imm
))
2445 if (operand_type_check (x
->types
[j
], disp
))
2446 pe (x
->op
[j
].disps
);
2451 pte (insn_template
*t
)
2454 fprintf (stdout
, " %d operands ", t
->operands
);
2455 fprintf (stdout
, "opcode %x ", t
->base_opcode
);
2456 if (t
->extension_opcode
!= None
)
2457 fprintf (stdout
, "ext %x ", t
->extension_opcode
);
2458 if (t
->opcode_modifier
.d
)
2459 fprintf (stdout
, "D");
2460 if (t
->opcode_modifier
.w
)
2461 fprintf (stdout
, "W");
2462 fprintf (stdout
, "\n");
2463 for (j
= 0; j
< t
->operands
; j
++)
2465 fprintf (stdout
, " #%d type ", j
+ 1);
2466 pt (t
->operand_types
[j
]);
2467 fprintf (stdout
, "\n");
2474 fprintf (stdout
, " operation %d\n", e
->X_op
);
2475 fprintf (stdout
, " add_number %ld (%lx)\n",
2476 (long) e
->X_add_number
, (long) e
->X_add_number
);
2477 if (e
->X_add_symbol
)
2479 fprintf (stdout
, " add_symbol ");
2480 ps (e
->X_add_symbol
);
2481 fprintf (stdout
, "\n");
2485 fprintf (stdout
, " op_symbol ");
2486 ps (e
->X_op_symbol
);
2487 fprintf (stdout
, "\n");
2494 fprintf (stdout
, "%s type %s%s",
2496 S_IS_EXTERNAL (s
) ? "EXTERNAL " : "",
2497 segment_name (S_GET_SEGMENT (s
)));
2500 static struct type_name
2502 i386_operand_type mask
;
2505 const type_names
[] =
2507 { OPERAND_TYPE_REG8
, "r8" },
2508 { OPERAND_TYPE_REG16
, "r16" },
2509 { OPERAND_TYPE_REG32
, "r32" },
2510 { OPERAND_TYPE_REG64
, "r64" },
2511 { OPERAND_TYPE_IMM8
, "i8" },
2512 { OPERAND_TYPE_IMM8
, "i8s" },
2513 { OPERAND_TYPE_IMM16
, "i16" },
2514 { OPERAND_TYPE_IMM32
, "i32" },
2515 { OPERAND_TYPE_IMM32S
, "i32s" },
2516 { OPERAND_TYPE_IMM64
, "i64" },
2517 { OPERAND_TYPE_IMM1
, "i1" },
2518 { OPERAND_TYPE_BASEINDEX
, "BaseIndex" },
2519 { OPERAND_TYPE_DISP8
, "d8" },
2520 { OPERAND_TYPE_DISP16
, "d16" },
2521 { OPERAND_TYPE_DISP32
, "d32" },
2522 { OPERAND_TYPE_DISP32S
, "d32s" },
2523 { OPERAND_TYPE_DISP64
, "d64" },
2524 { OPERAND_TYPE_INOUTPORTREG
, "InOutPortReg" },
2525 { OPERAND_TYPE_SHIFTCOUNT
, "ShiftCount" },
2526 { OPERAND_TYPE_CONTROL
, "control reg" },
2527 { OPERAND_TYPE_TEST
, "test reg" },
2528 { OPERAND_TYPE_DEBUG
, "debug reg" },
2529 { OPERAND_TYPE_FLOATREG
, "FReg" },
2530 { OPERAND_TYPE_FLOATACC
, "FAcc" },
2531 { OPERAND_TYPE_SREG2
, "SReg2" },
2532 { OPERAND_TYPE_SREG3
, "SReg3" },
2533 { OPERAND_TYPE_ACC
, "Acc" },
2534 { OPERAND_TYPE_JUMPABSOLUTE
, "Jump Absolute" },
2535 { OPERAND_TYPE_REGMMX
, "rMMX" },
2536 { OPERAND_TYPE_REGXMM
, "rXMM" },
2537 { OPERAND_TYPE_REGYMM
, "rYMM" },
2538 { OPERAND_TYPE_ESSEG
, "es" },
2542 pt (i386_operand_type t
)
2545 i386_operand_type a
;
2547 for (j
= 0; j
< ARRAY_SIZE (type_names
); j
++)
2549 a
= operand_type_and (t
, type_names
[j
].mask
);
2550 if (!operand_type_all_zero (&a
))
2551 fprintf (stdout
, "%s, ", type_names
[j
].name
);
2556 #endif /* DEBUG386 */
2558 static bfd_reloc_code_real_type
2559 reloc (unsigned int size
,
2562 bfd_reloc_code_real_type other
)
2564 if (other
!= NO_RELOC
)
2566 reloc_howto_type
*rel
;
2571 case BFD_RELOC_X86_64_GOT32
:
2572 return BFD_RELOC_X86_64_GOT64
;
2574 case BFD_RELOC_X86_64_PLTOFF64
:
2575 return BFD_RELOC_X86_64_PLTOFF64
;
2577 case BFD_RELOC_X86_64_GOTPC32
:
2578 other
= BFD_RELOC_X86_64_GOTPC64
;
2580 case BFD_RELOC_X86_64_GOTPCREL
:
2581 other
= BFD_RELOC_X86_64_GOTPCREL64
;
2583 case BFD_RELOC_X86_64_TPOFF32
:
2584 other
= BFD_RELOC_X86_64_TPOFF64
;
2586 case BFD_RELOC_X86_64_DTPOFF32
:
2587 other
= BFD_RELOC_X86_64_DTPOFF64
;
2593 /* Sign-checking 4-byte relocations in 16-/32-bit code is pointless. */
2594 if (size
== 4 && (flag_code
!= CODE_64BIT
|| disallow_64bit_reloc
))
2597 rel
= bfd_reloc_type_lookup (stdoutput
, other
);
2599 as_bad (_("unknown relocation (%u)"), other
);
2600 else if (size
!= bfd_get_reloc_size (rel
))
2601 as_bad (_("%u-byte relocation cannot be applied to %u-byte field"),
2602 bfd_get_reloc_size (rel
),
2604 else if (pcrel
&& !rel
->pc_relative
)
2605 as_bad (_("non-pc-relative relocation for pc-relative field"));
2606 else if ((rel
->complain_on_overflow
== complain_overflow_signed
2608 || (rel
->complain_on_overflow
== complain_overflow_unsigned
2610 as_bad (_("relocated field and relocation type differ in signedness"));
2619 as_bad (_("there are no unsigned pc-relative relocations"));
2622 case 1: return BFD_RELOC_8_PCREL
;
2623 case 2: return BFD_RELOC_16_PCREL
;
2624 case 4: return BFD_RELOC_32_PCREL
;
2625 case 8: return BFD_RELOC_64_PCREL
;
2627 as_bad (_("cannot do %u byte pc-relative relocation"), size
);
2634 case 4: return BFD_RELOC_X86_64_32S
;
2639 case 1: return BFD_RELOC_8
;
2640 case 2: return BFD_RELOC_16
;
2641 case 4: return BFD_RELOC_32
;
2642 case 8: return BFD_RELOC_64
;
2644 as_bad (_("cannot do %s %u byte relocation"),
2645 sign
> 0 ? "signed" : "unsigned", size
);
2651 /* Here we decide which fixups can be adjusted to make them relative to
2652 the beginning of the section instead of the symbol. Basically we need
2653 to make sure that the dynamic relocations are done correctly, so in
2654 some cases we force the original symbol to be used. */
2657 tc_i386_fix_adjustable (fixS
*fixP ATTRIBUTE_UNUSED
)
2659 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
2663 /* Don't adjust pc-relative references to merge sections in 64-bit
2665 if (use_rela_relocations
2666 && (S_GET_SEGMENT (fixP
->fx_addsy
)->flags
& SEC_MERGE
) != 0
2670 /* The x86_64 GOTPCREL are represented as 32bit PCrel relocations
2671 and changed later by validate_fix. */
2672 if (GOT_symbol
&& fixP
->fx_subsy
== GOT_symbol
2673 && fixP
->fx_r_type
== BFD_RELOC_32_PCREL
)
2676 /* adjust_reloc_syms doesn't know about the GOT. */
2677 if (fixP
->fx_r_type
== BFD_RELOC_386_GOTOFF
2678 || fixP
->fx_r_type
== BFD_RELOC_386_PLT32
2679 || fixP
->fx_r_type
== BFD_RELOC_386_GOT32
2680 || fixP
->fx_r_type
== BFD_RELOC_386_TLS_GD
2681 || fixP
->fx_r_type
== BFD_RELOC_386_TLS_LDM
2682 || fixP
->fx_r_type
== BFD_RELOC_386_TLS_LDO_32
2683 || fixP
->fx_r_type
== BFD_RELOC_386_TLS_IE_32
2684 || fixP
->fx_r_type
== BFD_RELOC_386_TLS_IE
2685 || fixP
->fx_r_type
== BFD_RELOC_386_TLS_GOTIE
2686 || fixP
->fx_r_type
== BFD_RELOC_386_TLS_LE_32
2687 || fixP
->fx_r_type
== BFD_RELOC_386_TLS_LE
2688 || fixP
->fx_r_type
== BFD_RELOC_386_TLS_GOTDESC
2689 || fixP
->fx_r_type
== BFD_RELOC_386_TLS_DESC_CALL
2690 || fixP
->fx_r_type
== BFD_RELOC_X86_64_PLT32
2691 || fixP
->fx_r_type
== BFD_RELOC_X86_64_GOT32
2692 || fixP
->fx_r_type
== BFD_RELOC_X86_64_GOTPCREL
2693 || fixP
->fx_r_type
== BFD_RELOC_X86_64_TLSGD
2694 || fixP
->fx_r_type
== BFD_RELOC_X86_64_TLSLD
2695 || fixP
->fx_r_type
== BFD_RELOC_X86_64_DTPOFF32
2696 || fixP
->fx_r_type
== BFD_RELOC_X86_64_DTPOFF64
2697 || fixP
->fx_r_type
== BFD_RELOC_X86_64_GOTTPOFF
2698 || fixP
->fx_r_type
== BFD_RELOC_X86_64_TPOFF32
2699 || fixP
->fx_r_type
== BFD_RELOC_X86_64_TPOFF64
2700 || fixP
->fx_r_type
== BFD_RELOC_X86_64_GOTOFF64
2701 || fixP
->fx_r_type
== BFD_RELOC_X86_64_GOTPC32_TLSDESC
2702 || fixP
->fx_r_type
== BFD_RELOC_X86_64_TLSDESC_CALL
2703 || fixP
->fx_r_type
== BFD_RELOC_VTABLE_INHERIT
2704 || fixP
->fx_r_type
== BFD_RELOC_VTABLE_ENTRY
)
2711 intel_float_operand (const char *mnemonic
)
2713 /* Note that the value returned is meaningful only for opcodes with (memory)
2714 operands, hence the code here is free to improperly handle opcodes that
2715 have no operands (for better performance and smaller code). */
2717 if (mnemonic
[0] != 'f')
2718 return 0; /* non-math */
2720 switch (mnemonic
[1])
2722 /* fclex, fdecstp, fdisi, femms, feni, fincstp, finit, fsetpm, and
2723 the fs segment override prefix not currently handled because no
2724 call path can make opcodes without operands get here */
2726 return 2 /* integer op */;
2728 if (mnemonic
[2] == 'd' && (mnemonic
[3] == 'c' || mnemonic
[3] == 'e'))
2729 return 3; /* fldcw/fldenv */
2732 if (mnemonic
[2] != 'o' /* fnop */)
2733 return 3; /* non-waiting control op */
2736 if (mnemonic
[2] == 's')
2737 return 3; /* frstor/frstpm */
2740 if (mnemonic
[2] == 'a')
2741 return 3; /* fsave */
2742 if (mnemonic
[2] == 't')
2744 switch (mnemonic
[3])
2746 case 'c': /* fstcw */
2747 case 'd': /* fstdw */
2748 case 'e': /* fstenv */
2749 case 's': /* fsts[gw] */
2755 if (mnemonic
[2] == 'r' || mnemonic
[2] == 's')
2756 return 0; /* fxsave/fxrstor are not really math ops */
2763 /* Build the VEX prefix. */
2766 build_vex_prefix (const insn_template
*t
)
2768 unsigned int register_specifier
;
2769 unsigned int implied_prefix
;
2770 unsigned int vector_length
;
2772 /* Check register specifier. */
2773 if (i
.vex
.register_specifier
)
2775 register_specifier
= i
.vex
.register_specifier
->reg_num
;
2776 if ((i
.vex
.register_specifier
->reg_flags
& RegRex
))
2777 register_specifier
+= 8;
2778 register_specifier
= ~register_specifier
& 0xf;
2781 register_specifier
= 0xf;
2783 /* Use 2-byte VEX prefix by swappping destination and source
2786 && i
.operands
== i
.reg_operands
2787 && i
.tm
.opcode_modifier
.vexopcode
== VEX0F
2788 && i
.tm
.opcode_modifier
.s
2791 unsigned int xchg
= i
.operands
- 1;
2792 union i386_op temp_op
;
2793 i386_operand_type temp_type
;
2795 temp_type
= i
.types
[xchg
];
2796 i
.types
[xchg
] = i
.types
[0];
2797 i
.types
[0] = temp_type
;
2798 temp_op
= i
.op
[xchg
];
2799 i
.op
[xchg
] = i
.op
[0];
2802 gas_assert (i
.rm
.mode
== 3);
2806 i
.rm
.regmem
= i
.rm
.reg
;
2809 /* Use the next insn. */
2813 if (i
.tm
.opcode_modifier
.vex
== VEXScalar
)
2814 vector_length
= avxscalar
;
2816 vector_length
= i
.tm
.opcode_modifier
.vex
== VEX256
? 1 : 0;
2818 switch ((i
.tm
.base_opcode
>> 8) & 0xff)
2823 case DATA_PREFIX_OPCODE
:
2826 case REPE_PREFIX_OPCODE
:
2829 case REPNE_PREFIX_OPCODE
:
2836 /* Use 2-byte VEX prefix if possible. */
2837 if (i
.tm
.opcode_modifier
.vexopcode
== VEX0F
2838 && i
.tm
.opcode_modifier
.vexw
!= VEXW1
2839 && (i
.rex
& (REX_W
| REX_X
| REX_B
)) == 0)
2841 /* 2-byte VEX prefix. */
2845 i
.vex
.bytes
[0] = 0xc5;
2847 /* Check the REX.R bit. */
2848 r
= (i
.rex
& REX_R
) ? 0 : 1;
2849 i
.vex
.bytes
[1] = (r
<< 7
2850 | register_specifier
<< 3
2851 | vector_length
<< 2
2856 /* 3-byte VEX prefix. */
2861 switch (i
.tm
.opcode_modifier
.vexopcode
)
2865 i
.vex
.bytes
[0] = 0xc4;
2869 i
.vex
.bytes
[0] = 0xc4;
2873 i
.vex
.bytes
[0] = 0xc4;
2877 i
.vex
.bytes
[0] = 0x8f;
2881 i
.vex
.bytes
[0] = 0x8f;
2885 i
.vex
.bytes
[0] = 0x8f;
2891 /* The high 3 bits of the second VEX byte are 1's compliment
2892 of RXB bits from REX. */
2893 i
.vex
.bytes
[1] = (~i
.rex
& 0x7) << 5 | m
;
2895 /* Check the REX.W bit. */
2896 w
= (i
.rex
& REX_W
) ? 1 : 0;
2897 if (i
.tm
.opcode_modifier
.vexw
)
2902 if (i
.tm
.opcode_modifier
.vexw
== VEXW1
)
2906 i
.vex
.bytes
[2] = (w
<< 7
2907 | register_specifier
<< 3
2908 | vector_length
<< 2
2914 process_immext (void)
2918 if (i
.tm
.cpu_flags
.bitfield
.cpusse3
&& i
.operands
> 0)
2920 /* SSE3 Instructions have the fixed operands with an opcode
2921 suffix which is coded in the same place as an 8-bit immediate
2922 field would be. Here we check those operands and remove them
2926 for (x
= 0; x
< i
.operands
; x
++)
2927 if (i
.op
[x
].regs
->reg_num
!= x
)
2928 as_bad (_("can't use register '%s%s' as operand %d in '%s'."),
2929 register_prefix
, i
.op
[x
].regs
->reg_name
, x
+ 1,
2935 /* These AMD 3DNow! and SSE2 instructions have an opcode suffix
2936 which is coded in the same place as an 8-bit immediate field
2937 would be. Here we fake an 8-bit immediate operand from the
2938 opcode suffix stored in tm.extension_opcode.
2940 AVX instructions also use this encoding, for some of
2941 3 argument instructions. */
2943 gas_assert (i
.imm_operands
== 0
2945 || (i
.tm
.opcode_modifier
.vex
2946 && i
.operands
<= 4)));
2948 exp
= &im_expressions
[i
.imm_operands
++];
2949 i
.op
[i
.operands
].imms
= exp
;
2950 i
.types
[i
.operands
] = imm8
;
2952 exp
->X_op
= O_constant
;
2953 exp
->X_add_number
= i
.tm
.extension_opcode
;
2954 i
.tm
.extension_opcode
= None
;
2957 /* This is the guts of the machine-dependent assembler. LINE points to a
2958 machine dependent instruction. This function is supposed to emit
2959 the frags/bytes it assembles to. */
2962 md_assemble (char *line
)
2965 char mnemonic
[MAX_MNEM_SIZE
];
2966 const insn_template
*t
;
2968 /* Initialize globals. */
2969 memset (&i
, '\0', sizeof (i
));
2970 for (j
= 0; j
< MAX_OPERANDS
; j
++)
2971 i
.reloc
[j
] = NO_RELOC
;
2972 memset (disp_expressions
, '\0', sizeof (disp_expressions
));
2973 memset (im_expressions
, '\0', sizeof (im_expressions
));
2974 save_stack_p
= save_stack
;
2976 /* First parse an instruction mnemonic & call i386_operand for the operands.
2977 We assume that the scrubber has arranged it so that line[0] is the valid
2978 start of a (possibly prefixed) mnemonic. */
2980 line
= parse_insn (line
, mnemonic
);
2984 line
= parse_operands (line
, mnemonic
);
2989 /* Now we've parsed the mnemonic into a set of templates, and have the
2990 operands at hand. */
2992 /* All intel opcodes have reversed operands except for "bound" and
2993 "enter". We also don't reverse intersegment "jmp" and "call"
2994 instructions with 2 immediate operands so that the immediate segment
2995 precedes the offset, as it does when in AT&T mode. */
2998 && (strcmp (mnemonic
, "bound") != 0)
2999 && (strcmp (mnemonic
, "invlpga") != 0)
3000 && !(operand_type_check (i
.types
[0], imm
)
3001 && operand_type_check (i
.types
[1], imm
)))
3004 /* The order of the immediates should be reversed
3005 for 2 immediates extrq and insertq instructions */
3006 if (i
.imm_operands
== 2
3007 && (strcmp (mnemonic
, "extrq") == 0
3008 || strcmp (mnemonic
, "insertq") == 0))
3009 swap_2_operands (0, 1);
3014 /* Don't optimize displacement for movabs since it only takes 64bit
3017 && !i
.disp32_encoding
3018 && (flag_code
!= CODE_64BIT
3019 || strcmp (mnemonic
, "movabs") != 0))
3022 /* Next, we find a template that matches the given insn,
3023 making sure the overlap of the given operands types is consistent
3024 with the template operand types. */
3026 if (!(t
= match_template ()))
3029 if (sse_check
!= sse_check_none
3030 && !i
.tm
.opcode_modifier
.noavx
3031 && (i
.tm
.cpu_flags
.bitfield
.cpusse
3032 || i
.tm
.cpu_flags
.bitfield
.cpusse2
3033 || i
.tm
.cpu_flags
.bitfield
.cpusse3
3034 || i
.tm
.cpu_flags
.bitfield
.cpussse3
3035 || i
.tm
.cpu_flags
.bitfield
.cpusse4_1
3036 || i
.tm
.cpu_flags
.bitfield
.cpusse4_2
))
3038 (sse_check
== sse_check_warning
3040 : as_bad
) (_("SSE instruction `%s' is used"), i
.tm
.name
);
3043 /* Zap movzx and movsx suffix. The suffix has been set from
3044 "word ptr" or "byte ptr" on the source operand in Intel syntax
3045 or extracted from mnemonic in AT&T syntax. But we'll use
3046 the destination register to choose the suffix for encoding. */
3047 if ((i
.tm
.base_opcode
& ~9) == 0x0fb6)
3049 /* In Intel syntax, there must be a suffix. In AT&T syntax, if
3050 there is no suffix, the default will be byte extension. */
3051 if (i
.reg_operands
!= 2
3054 as_bad (_("ambiguous operand size for `%s'"), i
.tm
.name
);
3059 if (i
.tm
.opcode_modifier
.fwait
)
3060 if (!add_prefix (FWAIT_OPCODE
))
3063 /* Check for lock without a lockable instruction. Destination operand
3064 must be memory unless it is xchg (0x86). */
3065 if (i
.prefix
[LOCK_PREFIX
]
3066 && (!i
.tm
.opcode_modifier
.islockable
3067 || i
.mem_operands
== 0
3068 || (i
.tm
.base_opcode
!= 0x86
3069 && !operand_type_check (i
.types
[i
.operands
- 1], anymem
))))
3071 as_bad (_("expecting lockable instruction after `lock'"));
3075 /* Check string instruction segment overrides. */
3076 if (i
.tm
.opcode_modifier
.isstring
&& i
.mem_operands
!= 0)
3078 if (!check_string ())
3080 i
.disp_operands
= 0;
3083 if (!process_suffix ())
3086 /* Update operand types. */
3087 for (j
= 0; j
< i
.operands
; j
++)
3088 i
.types
[j
] = operand_type_and (i
.types
[j
], i
.tm
.operand_types
[j
]);
3090 /* Make still unresolved immediate matches conform to size of immediate
3091 given in i.suffix. */
3092 if (!finalize_imm ())
3095 if (i
.types
[0].bitfield
.imm1
)
3096 i
.imm_operands
= 0; /* kludge for shift insns. */
3098 /* We only need to check those implicit registers for instructions
3099 with 3 operands or less. */
3100 if (i
.operands
<= 3)
3101 for (j
= 0; j
< i
.operands
; j
++)
3102 if (i
.types
[j
].bitfield
.inoutportreg
3103 || i
.types
[j
].bitfield
.shiftcount
3104 || i
.types
[j
].bitfield
.acc
3105 || i
.types
[j
].bitfield
.floatacc
)
3108 /* ImmExt should be processed after SSE2AVX. */
3109 if (!i
.tm
.opcode_modifier
.sse2avx
3110 && i
.tm
.opcode_modifier
.immext
)
3113 /* For insns with operands there are more diddles to do to the opcode. */
3116 if (!process_operands ())
3119 else if (!quiet_warnings
&& i
.tm
.opcode_modifier
.ugh
)
3121 /* UnixWare fsub no args is alias for fsubp, fadd -> faddp, etc. */
3122 as_warn (_("translating to `%sp'"), i
.tm
.name
);
3125 if (i
.tm
.opcode_modifier
.vex
)
3126 build_vex_prefix (t
);
3128 /* Handle conversion of 'int $3' --> special int3 insn. XOP or FMA4
3129 instructions may define INT_OPCODE as well, so avoid this corner
3130 case for those instructions that use MODRM. */
3131 if (i
.tm
.base_opcode
== INT_OPCODE
3132 && !i
.tm
.opcode_modifier
.modrm
3133 && i
.op
[0].imms
->X_add_number
== 3)
3135 i
.tm
.base_opcode
= INT3_OPCODE
;
3139 if ((i
.tm
.opcode_modifier
.jump
3140 || i
.tm
.opcode_modifier
.jumpbyte
3141 || i
.tm
.opcode_modifier
.jumpdword
)
3142 && i
.op
[0].disps
->X_op
== O_constant
)
3144 /* Convert "jmp constant" (and "call constant") to a jump (call) to
3145 the absolute address given by the constant. Since ix86 jumps and
3146 calls are pc relative, we need to generate a reloc. */
3147 i
.op
[0].disps
->X_add_symbol
= &abs_symbol
;
3148 i
.op
[0].disps
->X_op
= O_symbol
;
3151 if (i
.tm
.opcode_modifier
.rex64
)
3154 /* For 8 bit registers we need an empty rex prefix. Also if the
3155 instruction already has a prefix, we need to convert old
3156 registers to new ones. */
3158 if ((i
.types
[0].bitfield
.reg8
3159 && (i
.op
[0].regs
->reg_flags
& RegRex64
) != 0)
3160 || (i
.types
[1].bitfield
.reg8
3161 && (i
.op
[1].regs
->reg_flags
& RegRex64
) != 0)
3162 || ((i
.types
[0].bitfield
.reg8
3163 || i
.types
[1].bitfield
.reg8
)
3168 i
.rex
|= REX_OPCODE
;
3169 for (x
= 0; x
< 2; x
++)
3171 /* Look for 8 bit operand that uses old registers. */
3172 if (i
.types
[x
].bitfield
.reg8
3173 && (i
.op
[x
].regs
->reg_flags
& RegRex64
) == 0)
3175 /* In case it is "hi" register, give up. */
3176 if (i
.op
[x
].regs
->reg_num
> 3)
3177 as_bad (_("can't encode register '%s%s' in an "
3178 "instruction requiring REX prefix."),
3179 register_prefix
, i
.op
[x
].regs
->reg_name
);
3181 /* Otherwise it is equivalent to the extended register.
3182 Since the encoding doesn't change this is merely
3183 cosmetic cleanup for debug output. */
3185 i
.op
[x
].regs
= i
.op
[x
].regs
+ 8;
3191 add_prefix (REX_OPCODE
| i
.rex
);
3193 /* We are ready to output the insn. */
3198 parse_insn (char *line
, char *mnemonic
)
3201 char *token_start
= l
;
3204 const insn_template
*t
;
3207 /* Non-zero if we found a prefix only acceptable with string insns. */
3208 const char *expecting_string_instruction
= NULL
;
3213 while ((*mnem_p
= mnemonic_chars
[(unsigned char) *l
]) != 0)
3218 if (mnem_p
>= mnemonic
+ MAX_MNEM_SIZE
)
3220 as_bad (_("no such instruction: `%s'"), token_start
);
3225 if (!is_space_char (*l
)
3226 && *l
!= END_OF_INSN
3228 || (*l
!= PREFIX_SEPARATOR
3231 as_bad (_("invalid character %s in mnemonic"),
3232 output_invalid (*l
));
3235 if (token_start
== l
)
3237 if (!intel_syntax
&& *l
== PREFIX_SEPARATOR
)
3238 as_bad (_("expecting prefix; got nothing"));
3240 as_bad (_("expecting mnemonic; got nothing"));
3244 /* Look up instruction (or prefix) via hash table. */
3245 current_templates
= (const templates
*) hash_find (op_hash
, mnemonic
);
3247 if (*l
!= END_OF_INSN
3248 && (!is_space_char (*l
) || l
[1] != END_OF_INSN
)
3249 && current_templates
3250 && current_templates
->start
->opcode_modifier
.isprefix
)
3252 if (!cpu_flags_check_cpu64 (current_templates
->start
->cpu_flags
))
3254 as_bad ((flag_code
!= CODE_64BIT
3255 ? _("`%s' is only supported in 64-bit mode")
3256 : _("`%s' is not supported in 64-bit mode")),
3257 current_templates
->start
->name
);
3260 /* If we are in 16-bit mode, do not allow addr16 or data16.
3261 Similarly, in 32-bit mode, do not allow addr32 or data32. */
3262 if ((current_templates
->start
->opcode_modifier
.size16
3263 || current_templates
->start
->opcode_modifier
.size32
)
3264 && flag_code
!= CODE_64BIT
3265 && (current_templates
->start
->opcode_modifier
.size32
3266 ^ (flag_code
== CODE_16BIT
)))
3268 as_bad (_("redundant %s prefix"),
3269 current_templates
->start
->name
);
3272 /* Add prefix, checking for repeated prefixes. */
3273 switch (add_prefix (current_templates
->start
->base_opcode
))
3278 expecting_string_instruction
= current_templates
->start
->name
;
3283 /* Skip past PREFIX_SEPARATOR and reset token_start. */
3290 if (!current_templates
)
3292 /* Check if we should swap operand or force 32bit displacement in
3294 if (mnem_p
- 2 == dot_p
&& dot_p
[1] == 's')
3296 else if (mnem_p
- 4 == dot_p
3300 i
.disp32_encoding
= 1;
3305 current_templates
= (const templates
*) hash_find (op_hash
, mnemonic
);
3308 if (!current_templates
)
3311 /* See if we can get a match by trimming off a suffix. */
3314 case WORD_MNEM_SUFFIX
:
3315 if (intel_syntax
&& (intel_float_operand (mnemonic
) & 2))
3316 i
.suffix
= SHORT_MNEM_SUFFIX
;
3318 case BYTE_MNEM_SUFFIX
:
3319 case QWORD_MNEM_SUFFIX
:
3320 i
.suffix
= mnem_p
[-1];
3322 current_templates
= (const templates
*) hash_find (op_hash
,
3325 case SHORT_MNEM_SUFFIX
:
3326 case LONG_MNEM_SUFFIX
:
3329 i
.suffix
= mnem_p
[-1];
3331 current_templates
= (const templates
*) hash_find (op_hash
,
3340 if (intel_float_operand (mnemonic
) == 1)
3341 i
.suffix
= SHORT_MNEM_SUFFIX
;
3343 i
.suffix
= LONG_MNEM_SUFFIX
;
3345 current_templates
= (const templates
*) hash_find (op_hash
,
3350 if (!current_templates
)
3352 as_bad (_("no such instruction: `%s'"), token_start
);
3357 if (current_templates
->start
->opcode_modifier
.jump
3358 || current_templates
->start
->opcode_modifier
.jumpbyte
)
3360 /* Check for a branch hint. We allow ",pt" and ",pn" for
3361 predict taken and predict not taken respectively.
3362 I'm not sure that branch hints actually do anything on loop
3363 and jcxz insns (JumpByte) for current Pentium4 chips. They
3364 may work in the future and it doesn't hurt to accept them
3366 if (l
[0] == ',' && l
[1] == 'p')
3370 if (!add_prefix (DS_PREFIX_OPCODE
))
3374 else if (l
[2] == 'n')
3376 if (!add_prefix (CS_PREFIX_OPCODE
))
3382 /* Any other comma loses. */
3385 as_bad (_("invalid character %s in mnemonic"),
3386 output_invalid (*l
));
3390 /* Check if instruction is supported on specified architecture. */
3392 for (t
= current_templates
->start
; t
< current_templates
->end
; ++t
)
3394 supported
|= cpu_flags_match (t
);
3395 if (supported
== CPU_FLAGS_PERFECT_MATCH
)
3399 if (!(supported
& CPU_FLAGS_64BIT_MATCH
))
3401 as_bad (flag_code
== CODE_64BIT
3402 ? _("`%s' is not supported in 64-bit mode")
3403 : _("`%s' is only supported in 64-bit mode"),
3404 current_templates
->start
->name
);
3407 if (supported
!= CPU_FLAGS_PERFECT_MATCH
)
3409 as_bad (_("`%s' is not supported on `%s%s'"),
3410 current_templates
->start
->name
,
3411 cpu_arch_name
? cpu_arch_name
: default_arch
,
3412 cpu_sub_arch_name
? cpu_sub_arch_name
: "");
3417 if (!cpu_arch_flags
.bitfield
.cpui386
3418 && (flag_code
!= CODE_16BIT
))
3420 as_warn (_("use .code16 to ensure correct addressing mode"));
3423 /* Check for rep/repne without a string instruction. */
3424 if (expecting_string_instruction
)
3426 static templates override
;
3428 for (t
= current_templates
->start
; t
< current_templates
->end
; ++t
)
3429 if (t
->opcode_modifier
.isstring
)
3431 if (t
>= current_templates
->end
)
3433 as_bad (_("expecting string instruction after `%s'"),
3434 expecting_string_instruction
);
3437 for (override
.start
= t
; t
< current_templates
->end
; ++t
)
3438 if (!t
->opcode_modifier
.isstring
)
3441 current_templates
= &override
;
3448 parse_operands (char *l
, const char *mnemonic
)
3452 /* 1 if operand is pending after ','. */
3453 unsigned int expecting_operand
= 0;
3455 /* Non-zero if operand parens not balanced. */
3456 unsigned int paren_not_balanced
;
3458 while (*l
!= END_OF_INSN
)
3460 /* Skip optional white space before operand. */
3461 if (is_space_char (*l
))
3463 if (!is_operand_char (*l
) && *l
!= END_OF_INSN
)
3465 as_bad (_("invalid character %s before operand %d"),
3466 output_invalid (*l
),
3470 token_start
= l
; /* after white space */
3471 paren_not_balanced
= 0;
3472 while (paren_not_balanced
|| *l
!= ',')
3474 if (*l
== END_OF_INSN
)
3476 if (paren_not_balanced
)
3479 as_bad (_("unbalanced parenthesis in operand %d."),
3482 as_bad (_("unbalanced brackets in operand %d."),
3487 break; /* we are done */
3489 else if (!is_operand_char (*l
) && !is_space_char (*l
))
3491 as_bad (_("invalid character %s in operand %d"),
3492 output_invalid (*l
),
3499 ++paren_not_balanced
;
3501 --paren_not_balanced
;
3506 ++paren_not_balanced
;
3508 --paren_not_balanced
;
3512 if (l
!= token_start
)
3513 { /* Yes, we've read in another operand. */
3514 unsigned int operand_ok
;
3515 this_operand
= i
.operands
++;
3516 i
.types
[this_operand
].bitfield
.unspecified
= 1;
3517 if (i
.operands
> MAX_OPERANDS
)
3519 as_bad (_("spurious operands; (%d operands/instruction max)"),
3523 /* Now parse operand adding info to 'i' as we go along. */
3524 END_STRING_AND_SAVE (l
);
3528 i386_intel_operand (token_start
,
3529 intel_float_operand (mnemonic
));
3531 operand_ok
= i386_att_operand (token_start
);
3533 RESTORE_END_STRING (l
);
3539 if (expecting_operand
)
3541 expecting_operand_after_comma
:
3542 as_bad (_("expecting operand after ','; got nothing"));
3547 as_bad (_("expecting operand before ','; got nothing"));
3552 /* Now *l must be either ',' or END_OF_INSN. */
3555 if (*++l
== END_OF_INSN
)
3557 /* Just skip it, if it's \n complain. */
3558 goto expecting_operand_after_comma
;
3560 expecting_operand
= 1;
3567 swap_2_operands (int xchg1
, int xchg2
)
3569 union i386_op temp_op
;
3570 i386_operand_type temp_type
;
3571 enum bfd_reloc_code_real temp_reloc
;
3573 temp_type
= i
.types
[xchg2
];
3574 i
.types
[xchg2
] = i
.types
[xchg1
];
3575 i
.types
[xchg1
] = temp_type
;
3576 temp_op
= i
.op
[xchg2
];
3577 i
.op
[xchg2
] = i
.op
[xchg1
];
3578 i
.op
[xchg1
] = temp_op
;
3579 temp_reloc
= i
.reloc
[xchg2
];
3580 i
.reloc
[xchg2
] = i
.reloc
[xchg1
];
3581 i
.reloc
[xchg1
] = temp_reloc
;
3585 swap_operands (void)
3591 swap_2_operands (1, i
.operands
- 2);
3594 swap_2_operands (0, i
.operands
- 1);
3600 if (i
.mem_operands
== 2)
3602 const seg_entry
*temp_seg
;
3603 temp_seg
= i
.seg
[0];
3604 i
.seg
[0] = i
.seg
[1];
3605 i
.seg
[1] = temp_seg
;
3609 /* Try to ensure constant immediates are represented in the smallest
3614 char guess_suffix
= 0;
3618 guess_suffix
= i
.suffix
;
3619 else if (i
.reg_operands
)
3621 /* Figure out a suffix from the last register operand specified.
3622 We can't do this properly yet, ie. excluding InOutPortReg,
3623 but the following works for instructions with immediates.
3624 In any case, we can't set i.suffix yet. */
3625 for (op
= i
.operands
; --op
>= 0;)
3626 if (i
.types
[op
].bitfield
.reg8
)
3628 guess_suffix
= BYTE_MNEM_SUFFIX
;
3631 else if (i
.types
[op
].bitfield
.reg16
)
3633 guess_suffix
= WORD_MNEM_SUFFIX
;
3636 else if (i
.types
[op
].bitfield
.reg32
)
3638 guess_suffix
= LONG_MNEM_SUFFIX
;
3641 else if (i
.types
[op
].bitfield
.reg64
)
3643 guess_suffix
= QWORD_MNEM_SUFFIX
;
3647 else if ((flag_code
== CODE_16BIT
) ^ (i
.prefix
[DATA_PREFIX
] != 0))
3648 guess_suffix
= WORD_MNEM_SUFFIX
;
3650 for (op
= i
.operands
; --op
>= 0;)
3651 if (operand_type_check (i
.types
[op
], imm
))
3653 switch (i
.op
[op
].imms
->X_op
)
3656 /* If a suffix is given, this operand may be shortened. */
3657 switch (guess_suffix
)
3659 case LONG_MNEM_SUFFIX
:
3660 i
.types
[op
].bitfield
.imm32
= 1;
3661 i
.types
[op
].bitfield
.imm64
= 1;
3663 case WORD_MNEM_SUFFIX
:
3664 i
.types
[op
].bitfield
.imm16
= 1;
3665 i
.types
[op
].bitfield
.imm32
= 1;
3666 i
.types
[op
].bitfield
.imm32s
= 1;
3667 i
.types
[op
].bitfield
.imm64
= 1;
3669 case BYTE_MNEM_SUFFIX
:
3670 i
.types
[op
].bitfield
.imm8
= 1;
3671 i
.types
[op
].bitfield
.imm8s
= 1;
3672 i
.types
[op
].bitfield
.imm16
= 1;
3673 i
.types
[op
].bitfield
.imm32
= 1;
3674 i
.types
[op
].bitfield
.imm32s
= 1;
3675 i
.types
[op
].bitfield
.imm64
= 1;
3679 /* If this operand is at most 16 bits, convert it
3680 to a signed 16 bit number before trying to see
3681 whether it will fit in an even smaller size.
3682 This allows a 16-bit operand such as $0xffe0 to
3683 be recognised as within Imm8S range. */
3684 if ((i
.types
[op
].bitfield
.imm16
)
3685 && (i
.op
[op
].imms
->X_add_number
& ~(offsetT
) 0xffff) == 0)
3687 i
.op
[op
].imms
->X_add_number
=
3688 (((i
.op
[op
].imms
->X_add_number
& 0xffff) ^ 0x8000) - 0x8000);
3690 if ((i
.types
[op
].bitfield
.imm32
)
3691 && ((i
.op
[op
].imms
->X_add_number
& ~(((offsetT
) 2 << 31) - 1))
3694 i
.op
[op
].imms
->X_add_number
= ((i
.op
[op
].imms
->X_add_number
3695 ^ ((offsetT
) 1 << 31))
3696 - ((offsetT
) 1 << 31));
3699 = operand_type_or (i
.types
[op
],
3700 smallest_imm_type (i
.op
[op
].imms
->X_add_number
));
3702 /* We must avoid matching of Imm32 templates when 64bit
3703 only immediate is available. */
3704 if (guess_suffix
== QWORD_MNEM_SUFFIX
)
3705 i
.types
[op
].bitfield
.imm32
= 0;
3712 /* Symbols and expressions. */
3714 /* Convert symbolic operand to proper sizes for matching, but don't
3715 prevent matching a set of insns that only supports sizes other
3716 than those matching the insn suffix. */
3718 i386_operand_type mask
, allowed
;
3719 const insn_template
*t
;
3721 operand_type_set (&mask
, 0);
3722 operand_type_set (&allowed
, 0);
3724 for (t
= current_templates
->start
;
3725 t
< current_templates
->end
;
3727 allowed
= operand_type_or (allowed
,
3728 t
->operand_types
[op
]);
3729 switch (guess_suffix
)
3731 case QWORD_MNEM_SUFFIX
:
3732 mask
.bitfield
.imm64
= 1;
3733 mask
.bitfield
.imm32s
= 1;
3735 case LONG_MNEM_SUFFIX
:
3736 mask
.bitfield
.imm32
= 1;
3738 case WORD_MNEM_SUFFIX
:
3739 mask
.bitfield
.imm16
= 1;
3741 case BYTE_MNEM_SUFFIX
:
3742 mask
.bitfield
.imm8
= 1;
3747 allowed
= operand_type_and (mask
, allowed
);
3748 if (!operand_type_all_zero (&allowed
))
3749 i
.types
[op
] = operand_type_and (i
.types
[op
], mask
);
3756 /* Try to use the smallest displacement type too. */
3758 optimize_disp (void)
3762 for (op
= i
.operands
; --op
>= 0;)
3763 if (operand_type_check (i
.types
[op
], disp
))
3765 if (i
.op
[op
].disps
->X_op
== O_constant
)
3767 offsetT op_disp
= i
.op
[op
].disps
->X_add_number
;
3769 if (i
.types
[op
].bitfield
.disp16
3770 && (op_disp
& ~(offsetT
) 0xffff) == 0)
3772 /* If this operand is at most 16 bits, convert
3773 to a signed 16 bit number and don't use 64bit
3775 op_disp
= (((op_disp
& 0xffff) ^ 0x8000) - 0x8000);
3776 i
.types
[op
].bitfield
.disp64
= 0;
3778 if (i
.types
[op
].bitfield
.disp32
3779 && (op_disp
& ~(((offsetT
) 2 << 31) - 1)) == 0)
3781 /* If this operand is at most 32 bits, convert
3782 to a signed 32 bit number and don't use 64bit
3784 op_disp
&= (((offsetT
) 2 << 31) - 1);
3785 op_disp
= (op_disp
^ ((offsetT
) 1 << 31)) - ((addressT
) 1 << 31);
3786 i
.types
[op
].bitfield
.disp64
= 0;
3788 if (!op_disp
&& i
.types
[op
].bitfield
.baseindex
)
3790 i
.types
[op
].bitfield
.disp8
= 0;
3791 i
.types
[op
].bitfield
.disp16
= 0;
3792 i
.types
[op
].bitfield
.disp32
= 0;
3793 i
.types
[op
].bitfield
.disp32s
= 0;
3794 i
.types
[op
].bitfield
.disp64
= 0;
3798 else if (flag_code
== CODE_64BIT
)
3800 if (fits_in_signed_long (op_disp
))
3802 i
.types
[op
].bitfield
.disp64
= 0;
3803 i
.types
[op
].bitfield
.disp32s
= 1;
3805 if (i
.prefix
[ADDR_PREFIX
]
3806 && fits_in_unsigned_long (op_disp
))
3807 i
.types
[op
].bitfield
.disp32
= 1;
3809 if ((i
.types
[op
].bitfield
.disp32
3810 || i
.types
[op
].bitfield
.disp32s
3811 || i
.types
[op
].bitfield
.disp16
)
3812 && fits_in_signed_byte (op_disp
))
3813 i
.types
[op
].bitfield
.disp8
= 1;
3815 else if (i
.reloc
[op
] == BFD_RELOC_386_TLS_DESC_CALL
3816 || i
.reloc
[op
] == BFD_RELOC_X86_64_TLSDESC_CALL
)
3818 fix_new_exp (frag_now
, frag_more (0) - frag_now
->fr_literal
, 0,
3819 i
.op
[op
].disps
, 0, i
.reloc
[op
]);
3820 i
.types
[op
].bitfield
.disp8
= 0;
3821 i
.types
[op
].bitfield
.disp16
= 0;
3822 i
.types
[op
].bitfield
.disp32
= 0;
3823 i
.types
[op
].bitfield
.disp32s
= 0;
3824 i
.types
[op
].bitfield
.disp64
= 0;
3827 /* We only support 64bit displacement on constants. */
3828 i
.types
[op
].bitfield
.disp64
= 0;
3832 /* Check if operands are valid for the instruction. Update VEX
3836 VEX_check_operands (const insn_template
*t
)
3838 if (!t
->opcode_modifier
.vex
)
3841 /* Only check VEX_Imm4, which must be the first operand. */
3842 if (t
->operand_types
[0].bitfield
.vec_imm4
)
3844 if (i
.op
[0].imms
->X_op
!= O_constant
3845 || !fits_in_imm4 (i
.op
[0].imms
->X_add_number
))
3851 /* Turn off Imm8 so that update_imm won't complain. */
3852 i
.types
[0] = vec_imm4
;
3858 static const insn_template
*
3859 match_template (void)
3861 /* Points to template once we've found it. */
3862 const insn_template
*t
;
3863 i386_operand_type overlap0
, overlap1
, overlap2
, overlap3
;
3864 i386_operand_type overlap4
;
3865 unsigned int found_reverse_match
;
3866 i386_opcode_modifier suffix_check
;
3867 i386_operand_type operand_types
[MAX_OPERANDS
];
3868 int addr_prefix_disp
;
3870 unsigned int found_cpu_match
;
3871 unsigned int check_register
;
3873 #if MAX_OPERANDS != 5
3874 # error "MAX_OPERANDS must be 5."
3877 found_reverse_match
= 0;
3878 addr_prefix_disp
= -1;
3880 memset (&suffix_check
, 0, sizeof (suffix_check
));
3881 if (i
.suffix
== BYTE_MNEM_SUFFIX
)
3882 suffix_check
.no_bsuf
= 1;
3883 else if (i
.suffix
== WORD_MNEM_SUFFIX
)
3884 suffix_check
.no_wsuf
= 1;
3885 else if (i
.suffix
== SHORT_MNEM_SUFFIX
)
3886 suffix_check
.no_ssuf
= 1;
3887 else if (i
.suffix
== LONG_MNEM_SUFFIX
)
3888 suffix_check
.no_lsuf
= 1;
3889 else if (i
.suffix
== QWORD_MNEM_SUFFIX
)
3890 suffix_check
.no_qsuf
= 1;
3891 else if (i
.suffix
== LONG_DOUBLE_MNEM_SUFFIX
)
3892 suffix_check
.no_ldsuf
= 1;
3894 /* Must have right number of operands. */
3895 i
.error
= number_of_operands_mismatch
;
3897 for (t
= current_templates
->start
; t
< current_templates
->end
; t
++)
3899 addr_prefix_disp
= -1;
3901 if (i
.operands
!= t
->operands
)
3904 /* Check processor support. */
3905 i
.error
= unsupported
;
3906 found_cpu_match
= (cpu_flags_match (t
)
3907 == CPU_FLAGS_PERFECT_MATCH
);
3908 if (!found_cpu_match
)
3911 /* Check old gcc support. */
3912 i
.error
= old_gcc_only
;
3913 if (!old_gcc
&& t
->opcode_modifier
.oldgcc
)
3916 /* Check AT&T mnemonic. */
3917 i
.error
= unsupported_with_intel_mnemonic
;
3918 if (intel_mnemonic
&& t
->opcode_modifier
.attmnemonic
)
3921 /* Check AT&T/Intel syntax. */
3922 i
.error
= unsupported_syntax
;
3923 if ((intel_syntax
&& t
->opcode_modifier
.attsyntax
)
3924 || (!intel_syntax
&& t
->opcode_modifier
.intelsyntax
))
3927 /* Check the suffix, except for some instructions in intel mode. */
3928 i
.error
= invalid_instruction_suffix
;
3929 if ((!intel_syntax
|| !t
->opcode_modifier
.ignoresize
)
3930 && ((t
->opcode_modifier
.no_bsuf
&& suffix_check
.no_bsuf
)
3931 || (t
->opcode_modifier
.no_wsuf
&& suffix_check
.no_wsuf
)
3932 || (t
->opcode_modifier
.no_lsuf
&& suffix_check
.no_lsuf
)
3933 || (t
->opcode_modifier
.no_ssuf
&& suffix_check
.no_ssuf
)
3934 || (t
->opcode_modifier
.no_qsuf
&& suffix_check
.no_qsuf
)
3935 || (t
->opcode_modifier
.no_ldsuf
&& suffix_check
.no_ldsuf
)))
3938 if (!operand_size_match (t
))
3941 for (j
= 0; j
< MAX_OPERANDS
; j
++)
3942 operand_types
[j
] = t
->operand_types
[j
];
3944 /* In general, don't allow 64-bit operands in 32-bit mode. */
3945 if (i
.suffix
== QWORD_MNEM_SUFFIX
3946 && flag_code
!= CODE_64BIT
3948 ? (!t
->opcode_modifier
.ignoresize
3949 && !intel_float_operand (t
->name
))
3950 : intel_float_operand (t
->name
) != 2)
3951 && ((!operand_types
[0].bitfield
.regmmx
3952 && !operand_types
[0].bitfield
.regxmm
3953 && !operand_types
[0].bitfield
.regymm
)
3954 || (!operand_types
[t
->operands
> 1].bitfield
.regmmx
3955 && !!operand_types
[t
->operands
> 1].bitfield
.regxmm
3956 && !!operand_types
[t
->operands
> 1].bitfield
.regymm
))
3957 && (t
->base_opcode
!= 0x0fc7
3958 || t
->extension_opcode
!= 1 /* cmpxchg8b */))
3961 /* In general, don't allow 32-bit operands on pre-386. */
3962 else if (i
.suffix
== LONG_MNEM_SUFFIX
3963 && !cpu_arch_flags
.bitfield
.cpui386
3965 ? (!t
->opcode_modifier
.ignoresize
3966 && !intel_float_operand (t
->name
))
3967 : intel_float_operand (t
->name
) != 2)
3968 && ((!operand_types
[0].bitfield
.regmmx
3969 && !operand_types
[0].bitfield
.regxmm
)
3970 || (!operand_types
[t
->operands
> 1].bitfield
.regmmx
3971 && !!operand_types
[t
->operands
> 1].bitfield
.regxmm
)))
3974 /* Do not verify operands when there are none. */
3978 /* We've found a match; break out of loop. */
3982 /* Address size prefix will turn Disp64/Disp32/Disp16 operand
3983 into Disp32/Disp16/Disp32 operand. */
3984 if (i
.prefix
[ADDR_PREFIX
] != 0)
3986 /* There should be only one Disp operand. */
3990 for (j
= 0; j
< MAX_OPERANDS
; j
++)
3992 if (operand_types
[j
].bitfield
.disp16
)
3994 addr_prefix_disp
= j
;
3995 operand_types
[j
].bitfield
.disp32
= 1;
3996 operand_types
[j
].bitfield
.disp16
= 0;
4002 for (j
= 0; j
< MAX_OPERANDS
; j
++)
4004 if (operand_types
[j
].bitfield
.disp32
)
4006 addr_prefix_disp
= j
;
4007 operand_types
[j
].bitfield
.disp32
= 0;
4008 operand_types
[j
].bitfield
.disp16
= 1;
4014 for (j
= 0; j
< MAX_OPERANDS
; j
++)
4016 if (operand_types
[j
].bitfield
.disp64
)
4018 addr_prefix_disp
= j
;
4019 operand_types
[j
].bitfield
.disp64
= 0;
4020 operand_types
[j
].bitfield
.disp32
= 1;
4028 /* We check register size if needed. */
4029 check_register
= t
->opcode_modifier
.checkregsize
;
4030 overlap0
= operand_type_and (i
.types
[0], operand_types
[0]);
4031 switch (t
->operands
)
4034 if (!operand_type_match (overlap0
, i
.types
[0]))
4038 /* xchg %eax, %eax is a special case. It is an aliase for nop
4039 only in 32bit mode and we can use opcode 0x90. In 64bit
4040 mode, we can't use 0x90 for xchg %eax, %eax since it should
4041 zero-extend %eax to %rax. */
4042 if (flag_code
== CODE_64BIT
4043 && t
->base_opcode
== 0x90
4044 && operand_type_equal (&i
.types
[0], &acc32
)
4045 && operand_type_equal (&i
.types
[1], &acc32
))
4049 /* If we swap operand in encoding, we either match
4050 the next one or reverse direction of operands. */
4051 if (t
->opcode_modifier
.s
)
4053 else if (t
->opcode_modifier
.d
)
4058 /* If we swap operand in encoding, we match the next one. */
4059 if (i
.swap_operand
&& t
->opcode_modifier
.s
)
4063 overlap1
= operand_type_and (i
.types
[1], operand_types
[1]);
4064 if (!operand_type_match (overlap0
, i
.types
[0])
4065 || !operand_type_match (overlap1
, i
.types
[1])
4067 && !operand_type_register_match (overlap0
, i
.types
[0],
4069 overlap1
, i
.types
[1],
4072 /* Check if other direction is valid ... */
4073 if (!t
->opcode_modifier
.d
&& !t
->opcode_modifier
.floatd
)
4077 /* Try reversing direction of operands. */
4078 overlap0
= operand_type_and (i
.types
[0], operand_types
[1]);
4079 overlap1
= operand_type_and (i
.types
[1], operand_types
[0]);
4080 if (!operand_type_match (overlap0
, i
.types
[0])
4081 || !operand_type_match (overlap1
, i
.types
[1])
4083 && !operand_type_register_match (overlap0
,
4090 /* Does not match either direction. */
4093 /* found_reverse_match holds which of D or FloatDR
4095 if (t
->opcode_modifier
.d
)
4096 found_reverse_match
= Opcode_D
;
4097 else if (t
->opcode_modifier
.floatd
)
4098 found_reverse_match
= Opcode_FloatD
;
4100 found_reverse_match
= 0;
4101 if (t
->opcode_modifier
.floatr
)
4102 found_reverse_match
|= Opcode_FloatR
;
4106 /* Found a forward 2 operand match here. */
4107 switch (t
->operands
)
4110 overlap4
= operand_type_and (i
.types
[4],
4113 overlap3
= operand_type_and (i
.types
[3],
4116 overlap2
= operand_type_and (i
.types
[2],
4121 switch (t
->operands
)
4124 if (!operand_type_match (overlap4
, i
.types
[4])
4125 || !operand_type_register_match (overlap3
,
4133 if (!operand_type_match (overlap3
, i
.types
[3])
4135 && !operand_type_register_match (overlap2
,
4143 /* Here we make use of the fact that there are no
4144 reverse match 3 operand instructions, and all 3
4145 operand instructions only need to be checked for
4146 register consistency between operands 2 and 3. */
4147 if (!operand_type_match (overlap2
, i
.types
[2])
4149 && !operand_type_register_match (overlap1
,
4159 /* Found either forward/reverse 2, 3 or 4 operand match here:
4160 slip through to break. */
4162 if (!found_cpu_match
)
4164 found_reverse_match
= 0;
4168 /* Check if VEX operands are valid. */
4169 if (VEX_check_operands (t
))
4172 /* We've found a match; break out of loop. */
4176 if (t
== current_templates
->end
)
4178 /* We found no match. */
4179 const char *err_msg
;
4184 case operand_size_mismatch
:
4185 err_msg
= _("operand size mismatch");
4187 case operand_type_mismatch
:
4188 err_msg
= _("operand type mismatch");
4190 case register_type_mismatch
:
4191 err_msg
= _("register type mismatch");
4193 case number_of_operands_mismatch
:
4194 err_msg
= _("number of operands mismatch");
4196 case invalid_instruction_suffix
:
4197 err_msg
= _("invalid instruction suffix");
4200 err_msg
= _("Imm4 isn't the first operand");
4203 err_msg
= _("only supported with old gcc");
4205 case unsupported_with_intel_mnemonic
:
4206 err_msg
= _("unsupported with Intel mnemonic");
4208 case unsupported_syntax
:
4209 err_msg
= _("unsupported syntax");
4212 err_msg
= _("unsupported");
4215 as_bad (_("%s for `%s'"), err_msg
,
4216 current_templates
->start
->name
);
4220 if (!quiet_warnings
)
4223 && (i
.types
[0].bitfield
.jumpabsolute
4224 != operand_types
[0].bitfield
.jumpabsolute
))
4226 as_warn (_("indirect %s without `*'"), t
->name
);
4229 if (t
->opcode_modifier
.isprefix
4230 && t
->opcode_modifier
.ignoresize
)
4232 /* Warn them that a data or address size prefix doesn't
4233 affect assembly of the next line of code. */
4234 as_warn (_("stand-alone `%s' prefix"), t
->name
);
4238 /* Copy the template we found. */
4241 if (addr_prefix_disp
!= -1)
4242 i
.tm
.operand_types
[addr_prefix_disp
]
4243 = operand_types
[addr_prefix_disp
];
4245 if (found_reverse_match
)
4247 /* If we found a reverse match we must alter the opcode
4248 direction bit. found_reverse_match holds bits to change
4249 (different for int & float insns). */
4251 i
.tm
.base_opcode
^= found_reverse_match
;
4253 i
.tm
.operand_types
[0] = operand_types
[1];
4254 i
.tm
.operand_types
[1] = operand_types
[0];
4263 int mem_op
= operand_type_check (i
.types
[0], anymem
) ? 0 : 1;
4264 if (i
.tm
.operand_types
[mem_op
].bitfield
.esseg
)
4266 if (i
.seg
[0] != NULL
&& i
.seg
[0] != &es
)
4268 as_bad (_("`%s' operand %d must use `%ses' segment"),
4274 /* There's only ever one segment override allowed per instruction.
4275 This instruction possibly has a legal segment override on the
4276 second operand, so copy the segment to where non-string
4277 instructions store it, allowing common code. */
4278 i
.seg
[0] = i
.seg
[1];
4280 else if (i
.tm
.operand_types
[mem_op
+ 1].bitfield
.esseg
)
4282 if (i
.seg
[1] != NULL
&& i
.seg
[1] != &es
)
4284 as_bad (_("`%s' operand %d must use `%ses' segment"),
4295 process_suffix (void)
4297 /* If matched instruction specifies an explicit instruction mnemonic
4299 if (i
.tm
.opcode_modifier
.size16
)
4300 i
.suffix
= WORD_MNEM_SUFFIX
;
4301 else if (i
.tm
.opcode_modifier
.size32
)
4302 i
.suffix
= LONG_MNEM_SUFFIX
;
4303 else if (i
.tm
.opcode_modifier
.size64
)
4304 i
.suffix
= QWORD_MNEM_SUFFIX
;
4305 else if (i
.reg_operands
)
4307 /* If there's no instruction mnemonic suffix we try to invent one
4308 based on register operands. */
4311 /* We take i.suffix from the last register operand specified,
4312 Destination register type is more significant than source
4313 register type. crc32 in SSE4.2 prefers source register
4315 if (i
.tm
.base_opcode
== 0xf20f38f1)
4317 if (i
.types
[0].bitfield
.reg16
)
4318 i
.suffix
= WORD_MNEM_SUFFIX
;
4319 else if (i
.types
[0].bitfield
.reg32
)
4320 i
.suffix
= LONG_MNEM_SUFFIX
;
4321 else if (i
.types
[0].bitfield
.reg64
)
4322 i
.suffix
= QWORD_MNEM_SUFFIX
;
4324 else if (i
.tm
.base_opcode
== 0xf20f38f0)
4326 if (i
.types
[0].bitfield
.reg8
)
4327 i
.suffix
= BYTE_MNEM_SUFFIX
;
4334 if (i
.tm
.base_opcode
== 0xf20f38f1
4335 || i
.tm
.base_opcode
== 0xf20f38f0)
4337 /* We have to know the operand size for crc32. */
4338 as_bad (_("ambiguous memory operand size for `%s`"),
4343 for (op
= i
.operands
; --op
>= 0;)
4344 if (!i
.tm
.operand_types
[op
].bitfield
.inoutportreg
)
4346 if (i
.types
[op
].bitfield
.reg8
)
4348 i
.suffix
= BYTE_MNEM_SUFFIX
;
4351 else if (i
.types
[op
].bitfield
.reg16
)
4353 i
.suffix
= WORD_MNEM_SUFFIX
;
4356 else if (i
.types
[op
].bitfield
.reg32
)
4358 i
.suffix
= LONG_MNEM_SUFFIX
;
4361 else if (i
.types
[op
].bitfield
.reg64
)
4363 i
.suffix
= QWORD_MNEM_SUFFIX
;
4369 else if (i
.suffix
== BYTE_MNEM_SUFFIX
)
4372 && i
.tm
.opcode_modifier
.ignoresize
4373 && i
.tm
.opcode_modifier
.no_bsuf
)
4375 else if (!check_byte_reg ())
4378 else if (i
.suffix
== LONG_MNEM_SUFFIX
)
4381 && i
.tm
.opcode_modifier
.ignoresize
4382 && i
.tm
.opcode_modifier
.no_lsuf
)
4384 else if (!check_long_reg ())
4387 else if (i
.suffix
== QWORD_MNEM_SUFFIX
)
4390 && i
.tm
.opcode_modifier
.ignoresize
4391 && i
.tm
.opcode_modifier
.no_qsuf
)
4393 else if (!check_qword_reg ())
4396 else if (i
.suffix
== WORD_MNEM_SUFFIX
)
4399 && i
.tm
.opcode_modifier
.ignoresize
4400 && i
.tm
.opcode_modifier
.no_wsuf
)
4402 else if (!check_word_reg ())
4405 else if (i
.suffix
== XMMWORD_MNEM_SUFFIX
4406 || i
.suffix
== YMMWORD_MNEM_SUFFIX
)
4408 /* Skip if the instruction has x/y suffix. match_template
4409 should check if it is a valid suffix. */
4411 else if (intel_syntax
&& i
.tm
.opcode_modifier
.ignoresize
)
4412 /* Do nothing if the instruction is going to ignore the prefix. */
4417 else if (i
.tm
.opcode_modifier
.defaultsize
4419 /* exclude fldenv/frstor/fsave/fstenv */
4420 && i
.tm
.opcode_modifier
.no_ssuf
)
4422 i
.suffix
= stackop_size
;
4424 else if (intel_syntax
4426 && (i
.tm
.operand_types
[0].bitfield
.jumpabsolute
4427 || i
.tm
.opcode_modifier
.jumpbyte
4428 || i
.tm
.opcode_modifier
.jumpintersegment
4429 || (i
.tm
.base_opcode
== 0x0f01 /* [ls][gi]dt */
4430 && i
.tm
.extension_opcode
<= 3)))
4435 if (!i
.tm
.opcode_modifier
.no_qsuf
)
4437 i
.suffix
= QWORD_MNEM_SUFFIX
;
4441 if (!i
.tm
.opcode_modifier
.no_lsuf
)
4442 i
.suffix
= LONG_MNEM_SUFFIX
;
4445 if (!i
.tm
.opcode_modifier
.no_wsuf
)
4446 i
.suffix
= WORD_MNEM_SUFFIX
;
4455 if (i
.tm
.opcode_modifier
.w
)
4457 as_bad (_("no instruction mnemonic suffix given and "
4458 "no register operands; can't size instruction"));
4464 unsigned int suffixes
;
4466 suffixes
= !i
.tm
.opcode_modifier
.no_bsuf
;
4467 if (!i
.tm
.opcode_modifier
.no_wsuf
)
4469 if (!i
.tm
.opcode_modifier
.no_lsuf
)
4471 if (!i
.tm
.opcode_modifier
.no_ldsuf
)
4473 if (!i
.tm
.opcode_modifier
.no_ssuf
)
4475 if (!i
.tm
.opcode_modifier
.no_qsuf
)
4478 /* There are more than suffix matches. */
4479 if (i
.tm
.opcode_modifier
.w
4480 || ((suffixes
& (suffixes
- 1))
4481 && !i
.tm
.opcode_modifier
.defaultsize
4482 && !i
.tm
.opcode_modifier
.ignoresize
))
4484 as_bad (_("ambiguous operand size for `%s'"), i
.tm
.name
);
4490 /* Change the opcode based on the operand size given by i.suffix;
4491 We don't need to change things for byte insns. */
4494 && i
.suffix
!= BYTE_MNEM_SUFFIX
4495 && i
.suffix
!= XMMWORD_MNEM_SUFFIX
4496 && i
.suffix
!= YMMWORD_MNEM_SUFFIX
)
4498 /* It's not a byte, select word/dword operation. */
4499 if (i
.tm
.opcode_modifier
.w
)
4501 if (i
.tm
.opcode_modifier
.shortform
)
4502 i
.tm
.base_opcode
|= 8;
4504 i
.tm
.base_opcode
|= 1;
4507 /* Now select between word & dword operations via the operand
4508 size prefix, except for instructions that will ignore this
4510 if (i
.tm
.opcode_modifier
.addrprefixop0
)
4512 /* The address size override prefix changes the size of the
4514 if ((flag_code
== CODE_32BIT
4515 && i
.op
->regs
[0].reg_type
.bitfield
.reg16
)
4516 || (flag_code
!= CODE_32BIT
4517 && i
.op
->regs
[0].reg_type
.bitfield
.reg32
))
4518 if (!add_prefix (ADDR_PREFIX_OPCODE
))
4521 else if (i
.suffix
!= QWORD_MNEM_SUFFIX
4522 && i
.suffix
!= LONG_DOUBLE_MNEM_SUFFIX
4523 && !i
.tm
.opcode_modifier
.ignoresize
4524 && !i
.tm
.opcode_modifier
.floatmf
4525 && ((i
.suffix
== LONG_MNEM_SUFFIX
) == (flag_code
== CODE_16BIT
)
4526 || (flag_code
== CODE_64BIT
4527 && i
.tm
.opcode_modifier
.jumpbyte
)))
4529 unsigned int prefix
= DATA_PREFIX_OPCODE
;
4531 if (i
.tm
.opcode_modifier
.jumpbyte
) /* jcxz, loop */
4532 prefix
= ADDR_PREFIX_OPCODE
;
4534 if (!add_prefix (prefix
))
4538 /* Set mode64 for an operand. */
4539 if (i
.suffix
== QWORD_MNEM_SUFFIX
4540 && flag_code
== CODE_64BIT
4541 && !i
.tm
.opcode_modifier
.norex64
)
4543 /* Special case for xchg %rax,%rax. It is NOP and doesn't
4544 need rex64. cmpxchg8b is also a special case. */
4545 if (! (i
.operands
== 2
4546 && i
.tm
.base_opcode
== 0x90
4547 && i
.tm
.extension_opcode
== None
4548 && operand_type_equal (&i
.types
[0], &acc64
)
4549 && operand_type_equal (&i
.types
[1], &acc64
))
4550 && ! (i
.operands
== 1
4551 && i
.tm
.base_opcode
== 0xfc7
4552 && i
.tm
.extension_opcode
== 1
4553 && !operand_type_check (i
.types
[0], reg
)
4554 && operand_type_check (i
.types
[0], anymem
)))
4558 /* Size floating point instruction. */
4559 if (i
.suffix
== LONG_MNEM_SUFFIX
)
4560 if (i
.tm
.opcode_modifier
.floatmf
)
4561 i
.tm
.base_opcode
^= 4;
4568 check_byte_reg (void)
4572 for (op
= i
.operands
; --op
>= 0;)
4574 /* If this is an eight bit register, it's OK. If it's the 16 or
4575 32 bit version of an eight bit register, we will just use the
4576 low portion, and that's OK too. */
4577 if (i
.types
[op
].bitfield
.reg8
)
4580 /* crc32 doesn't generate this warning. */
4581 if (i
.tm
.base_opcode
== 0xf20f38f0)
4584 if ((i
.types
[op
].bitfield
.reg16
4585 || i
.types
[op
].bitfield
.reg32
4586 || i
.types
[op
].bitfield
.reg64
)
4587 && i
.op
[op
].regs
->reg_num
< 4)
4589 /* Prohibit these changes in the 64bit mode, since the
4590 lowering is more complicated. */
4591 if (flag_code
== CODE_64BIT
4592 && !i
.tm
.operand_types
[op
].bitfield
.inoutportreg
)
4594 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4595 register_prefix
, i
.op
[op
].regs
->reg_name
,
4599 #if REGISTER_WARNINGS
4601 && !i
.tm
.operand_types
[op
].bitfield
.inoutportreg
)
4602 as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
4604 (i
.op
[op
].regs
+ (i
.types
[op
].bitfield
.reg16
4605 ? REGNAM_AL
- REGNAM_AX
4606 : REGNAM_AL
- REGNAM_EAX
))->reg_name
,
4608 i
.op
[op
].regs
->reg_name
,
4613 /* Any other register is bad. */
4614 if (i
.types
[op
].bitfield
.reg16
4615 || i
.types
[op
].bitfield
.reg32
4616 || i
.types
[op
].bitfield
.reg64
4617 || i
.types
[op
].bitfield
.regmmx
4618 || i
.types
[op
].bitfield
.regxmm
4619 || i
.types
[op
].bitfield
.regymm
4620 || i
.types
[op
].bitfield
.sreg2
4621 || i
.types
[op
].bitfield
.sreg3
4622 || i
.types
[op
].bitfield
.control
4623 || i
.types
[op
].bitfield
.debug
4624 || i
.types
[op
].bitfield
.test
4625 || i
.types
[op
].bitfield
.floatreg
4626 || i
.types
[op
].bitfield
.floatacc
)
4628 as_bad (_("`%s%s' not allowed with `%s%c'"),
4630 i
.op
[op
].regs
->reg_name
,
4640 check_long_reg (void)
4644 for (op
= i
.operands
; --op
>= 0;)
4645 /* Reject eight bit registers, except where the template requires
4646 them. (eg. movzb) */
4647 if (i
.types
[op
].bitfield
.reg8
4648 && (i
.tm
.operand_types
[op
].bitfield
.reg16
4649 || i
.tm
.operand_types
[op
].bitfield
.reg32
4650 || i
.tm
.operand_types
[op
].bitfield
.acc
))
4652 as_bad (_("`%s%s' not allowed with `%s%c'"),
4654 i
.op
[op
].regs
->reg_name
,
4659 /* Warn if the e prefix on a general reg is missing. */
4660 else if ((!quiet_warnings
|| flag_code
== CODE_64BIT
)
4661 && i
.types
[op
].bitfield
.reg16
4662 && (i
.tm
.operand_types
[op
].bitfield
.reg32
4663 || i
.tm
.operand_types
[op
].bitfield
.acc
))
4665 /* Prohibit these changes in the 64bit mode, since the
4666 lowering is more complicated. */
4667 if (flag_code
== CODE_64BIT
)
4669 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4670 register_prefix
, i
.op
[op
].regs
->reg_name
,
4674 #if REGISTER_WARNINGS
4676 as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
4678 (i
.op
[op
].regs
+ REGNAM_EAX
- REGNAM_AX
)->reg_name
,
4680 i
.op
[op
].regs
->reg_name
,
4684 /* Warn if the r prefix on a general reg is missing. */
4685 else if (i
.types
[op
].bitfield
.reg64
4686 && (i
.tm
.operand_types
[op
].bitfield
.reg32
4687 || i
.tm
.operand_types
[op
].bitfield
.acc
))
4690 && i
.tm
.opcode_modifier
.toqword
4691 && !i
.types
[0].bitfield
.regxmm
)
4693 /* Convert to QWORD. We want REX byte. */
4694 i
.suffix
= QWORD_MNEM_SUFFIX
;
4698 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4699 register_prefix
, i
.op
[op
].regs
->reg_name
,
4708 check_qword_reg (void)
4712 for (op
= i
.operands
; --op
>= 0; )
4713 /* Reject eight bit registers, except where the template requires
4714 them. (eg. movzb) */
4715 if (i
.types
[op
].bitfield
.reg8
4716 && (i
.tm
.operand_types
[op
].bitfield
.reg16
4717 || i
.tm
.operand_types
[op
].bitfield
.reg32
4718 || i
.tm
.operand_types
[op
].bitfield
.acc
))
4720 as_bad (_("`%s%s' not allowed with `%s%c'"),
4722 i
.op
[op
].regs
->reg_name
,
4727 /* Warn if the e prefix on a general reg is missing. */
4728 else if ((i
.types
[op
].bitfield
.reg16
4729 || i
.types
[op
].bitfield
.reg32
)
4730 && (i
.tm
.operand_types
[op
].bitfield
.reg32
4731 || i
.tm
.operand_types
[op
].bitfield
.acc
))
4733 /* Prohibit these changes in the 64bit mode, since the
4734 lowering is more complicated. */
4736 && i
.tm
.opcode_modifier
.todword
4737 && !i
.types
[0].bitfield
.regxmm
)
4739 /* Convert to DWORD. We don't want REX byte. */
4740 i
.suffix
= LONG_MNEM_SUFFIX
;
4744 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4745 register_prefix
, i
.op
[op
].regs
->reg_name
,
4754 check_word_reg (void)
4757 for (op
= i
.operands
; --op
>= 0;)
4758 /* Reject eight bit registers, except where the template requires
4759 them. (eg. movzb) */
4760 if (i
.types
[op
].bitfield
.reg8
4761 && (i
.tm
.operand_types
[op
].bitfield
.reg16
4762 || i
.tm
.operand_types
[op
].bitfield
.reg32
4763 || i
.tm
.operand_types
[op
].bitfield
.acc
))
4765 as_bad (_("`%s%s' not allowed with `%s%c'"),
4767 i
.op
[op
].regs
->reg_name
,
4772 /* Warn if the e prefix on a general reg is present. */
4773 else if ((!quiet_warnings
|| flag_code
== CODE_64BIT
)
4774 && i
.types
[op
].bitfield
.reg32
4775 && (i
.tm
.operand_types
[op
].bitfield
.reg16
4776 || i
.tm
.operand_types
[op
].bitfield
.acc
))
4778 /* Prohibit these changes in the 64bit mode, since the
4779 lowering is more complicated. */
4780 if (flag_code
== CODE_64BIT
)
4782 as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
4783 register_prefix
, i
.op
[op
].regs
->reg_name
,
4788 #if REGISTER_WARNINGS
4789 as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
4791 (i
.op
[op
].regs
+ REGNAM_AX
- REGNAM_EAX
)->reg_name
,
4793 i
.op
[op
].regs
->reg_name
,
4801 update_imm (unsigned int j
)
4803 i386_operand_type overlap
= i
.types
[j
];
4804 if ((overlap
.bitfield
.imm8
4805 || overlap
.bitfield
.imm8s
4806 || overlap
.bitfield
.imm16
4807 || overlap
.bitfield
.imm32
4808 || overlap
.bitfield
.imm32s
4809 || overlap
.bitfield
.imm64
)
4810 && !operand_type_equal (&overlap
, &imm8
)
4811 && !operand_type_equal (&overlap
, &imm8s
)
4812 && !operand_type_equal (&overlap
, &imm16
)
4813 && !operand_type_equal (&overlap
, &imm32
)
4814 && !operand_type_equal (&overlap
, &imm32s
)
4815 && !operand_type_equal (&overlap
, &imm64
))
4819 i386_operand_type temp
;
4821 operand_type_set (&temp
, 0);
4822 if (i
.suffix
== BYTE_MNEM_SUFFIX
)
4824 temp
.bitfield
.imm8
= overlap
.bitfield
.imm8
;
4825 temp
.bitfield
.imm8s
= overlap
.bitfield
.imm8s
;
4827 else if (i
.suffix
== WORD_MNEM_SUFFIX
)
4828 temp
.bitfield
.imm16
= overlap
.bitfield
.imm16
;
4829 else if (i
.suffix
== QWORD_MNEM_SUFFIX
)
4831 temp
.bitfield
.imm64
= overlap
.bitfield
.imm64
;
4832 temp
.bitfield
.imm32s
= overlap
.bitfield
.imm32s
;
4835 temp
.bitfield
.imm32
= overlap
.bitfield
.imm32
;
4838 else if (operand_type_equal (&overlap
, &imm16_32_32s
)
4839 || operand_type_equal (&overlap
, &imm16_32
)
4840 || operand_type_equal (&overlap
, &imm16_32s
))
4842 if ((flag_code
== CODE_16BIT
) ^ (i
.prefix
[DATA_PREFIX
] != 0))
4847 if (!operand_type_equal (&overlap
, &imm8
)
4848 && !operand_type_equal (&overlap
, &imm8s
)
4849 && !operand_type_equal (&overlap
, &imm16
)
4850 && !operand_type_equal (&overlap
, &imm32
)
4851 && !operand_type_equal (&overlap
, &imm32s
)
4852 && !operand_type_equal (&overlap
, &imm64
))
4854 as_bad (_("no instruction mnemonic suffix given; "
4855 "can't determine immediate size"));
4859 i
.types
[j
] = overlap
;
4869 /* Update the first 2 immediate operands. */
4870 n
= i
.operands
> 2 ? 2 : i
.operands
;
4873 for (j
= 0; j
< n
; j
++)
4874 if (update_imm (j
) == 0)
4877 /* The 3rd operand can't be immediate operand. */
4878 gas_assert (operand_type_check (i
.types
[2], imm
) == 0);
4885 bad_implicit_operand (int xmm
)
4887 const char *ireg
= xmm
? "xmm0" : "ymm0";
4890 as_bad (_("the last operand of `%s' must be `%s%s'"),
4891 i
.tm
.name
, register_prefix
, ireg
);
4893 as_bad (_("the first operand of `%s' must be `%s%s'"),
4894 i
.tm
.name
, register_prefix
, ireg
);
4899 process_operands (void)
4901 /* Default segment register this instruction will use for memory
4902 accesses. 0 means unknown. This is only for optimizing out
4903 unnecessary segment overrides. */
4904 const seg_entry
*default_seg
= 0;
4906 if (i
.tm
.opcode_modifier
.sse2avx
&& i
.tm
.opcode_modifier
.vexvvvv
)
4908 unsigned int dupl
= i
.operands
;
4909 unsigned int dest
= dupl
- 1;
4912 /* The destination must be an xmm register. */
4913 gas_assert (i
.reg_operands
4914 && MAX_OPERANDS
> dupl
4915 && operand_type_equal (&i
.types
[dest
], ®xmm
));
4917 if (i
.tm
.opcode_modifier
.firstxmm0
)
4919 /* The first operand is implicit and must be xmm0. */
4920 gas_assert (operand_type_equal (&i
.types
[0], ®xmm
));
4921 if (i
.op
[0].regs
->reg_num
!= 0)
4922 return bad_implicit_operand (1);
4924 if (i
.tm
.opcode_modifier
.vexsources
== VEX3SOURCES
)
4926 /* Keep xmm0 for instructions with VEX prefix and 3
4932 /* We remove the first xmm0 and keep the number of
4933 operands unchanged, which in fact duplicates the
4935 for (j
= 1; j
< i
.operands
; j
++)
4937 i
.op
[j
- 1] = i
.op
[j
];
4938 i
.types
[j
- 1] = i
.types
[j
];
4939 i
.tm
.operand_types
[j
- 1] = i
.tm
.operand_types
[j
];
4943 else if (i
.tm
.opcode_modifier
.implicit1stxmm0
)
4945 gas_assert ((MAX_OPERANDS
- 1) > dupl
4946 && (i
.tm
.opcode_modifier
.vexsources
4949 /* Add the implicit xmm0 for instructions with VEX prefix
4951 for (j
= i
.operands
; j
> 0; j
--)
4953 i
.op
[j
] = i
.op
[j
- 1];
4954 i
.types
[j
] = i
.types
[j
- 1];
4955 i
.tm
.operand_types
[j
] = i
.tm
.operand_types
[j
- 1];
4958 = (const reg_entry
*) hash_find (reg_hash
, "xmm0");
4959 i
.types
[0] = regxmm
;
4960 i
.tm
.operand_types
[0] = regxmm
;
4963 i
.reg_operands
+= 2;
4968 i
.op
[dupl
] = i
.op
[dest
];
4969 i
.types
[dupl
] = i
.types
[dest
];
4970 i
.tm
.operand_types
[dupl
] = i
.tm
.operand_types
[dest
];
4979 i
.op
[dupl
] = i
.op
[dest
];
4980 i
.types
[dupl
] = i
.types
[dest
];
4981 i
.tm
.operand_types
[dupl
] = i
.tm
.operand_types
[dest
];
4984 if (i
.tm
.opcode_modifier
.immext
)
4987 else if (i
.tm
.opcode_modifier
.firstxmm0
)
4991 /* The first operand is implicit and must be xmm0/ymm0. */
4992 gas_assert (i
.reg_operands
4993 && (operand_type_equal (&i
.types
[0], ®xmm
)
4994 || operand_type_equal (&i
.types
[0], ®ymm
)));
4995 if (i
.op
[0].regs
->reg_num
!= 0)
4996 return bad_implicit_operand (i
.types
[0].bitfield
.regxmm
);
4998 for (j
= 1; j
< i
.operands
; j
++)
5000 i
.op
[j
- 1] = i
.op
[j
];
5001 i
.types
[j
- 1] = i
.types
[j
];
5003 /* We need to adjust fields in i.tm since they are used by
5004 build_modrm_byte. */
5005 i
.tm
.operand_types
[j
- 1] = i
.tm
.operand_types
[j
];
5012 else if (i
.tm
.opcode_modifier
.regkludge
)
5014 /* The imul $imm, %reg instruction is converted into
5015 imul $imm, %reg, %reg, and the clr %reg instruction
5016 is converted into xor %reg, %reg. */
5018 unsigned int first_reg_op
;
5020 if (operand_type_check (i
.types
[0], reg
))
5024 /* Pretend we saw the extra register operand. */
5025 gas_assert (i
.reg_operands
== 1
5026 && i
.op
[first_reg_op
+ 1].regs
== 0);
5027 i
.op
[first_reg_op
+ 1].regs
= i
.op
[first_reg_op
].regs
;
5028 i
.types
[first_reg_op
+ 1] = i
.types
[first_reg_op
];
5033 if (i
.tm
.opcode_modifier
.shortform
)
5035 if (i
.types
[0].bitfield
.sreg2
5036 || i
.types
[0].bitfield
.sreg3
)
5038 if (i
.tm
.base_opcode
== POP_SEG_SHORT
5039 && i
.op
[0].regs
->reg_num
== 1)
5041 as_bad (_("you can't `pop %scs'"), register_prefix
);
5044 i
.tm
.base_opcode
|= (i
.op
[0].regs
->reg_num
<< 3);
5045 if ((i
.op
[0].regs
->reg_flags
& RegRex
) != 0)
5050 /* The register or float register operand is in operand
5054 if (i
.types
[0].bitfield
.floatreg
5055 || operand_type_check (i
.types
[0], reg
))
5059 /* Register goes in low 3 bits of opcode. */
5060 i
.tm
.base_opcode
|= i
.op
[op
].regs
->reg_num
;
5061 if ((i
.op
[op
].regs
->reg_flags
& RegRex
) != 0)
5063 if (!quiet_warnings
&& i
.tm
.opcode_modifier
.ugh
)
5065 /* Warn about some common errors, but press on regardless.
5066 The first case can be generated by gcc (<= 2.8.1). */
5067 if (i
.operands
== 2)
5069 /* Reversed arguments on faddp, fsubp, etc. */
5070 as_warn (_("translating to `%s %s%s,%s%s'"), i
.tm
.name
,
5071 register_prefix
, i
.op
[!intel_syntax
].regs
->reg_name
,
5072 register_prefix
, i
.op
[intel_syntax
].regs
->reg_name
);
5076 /* Extraneous `l' suffix on fp insn. */
5077 as_warn (_("translating to `%s %s%s'"), i
.tm
.name
,
5078 register_prefix
, i
.op
[0].regs
->reg_name
);
5083 else if (i
.tm
.opcode_modifier
.modrm
)
5085 /* The opcode is completed (modulo i.tm.extension_opcode which
5086 must be put into the modrm byte). Now, we make the modrm and
5087 index base bytes based on all the info we've collected. */
5089 default_seg
= build_modrm_byte ();
5091 else if ((i
.tm
.base_opcode
& ~0x3) == MOV_AX_DISP32
)
5095 else if (i
.tm
.opcode_modifier
.isstring
)
5097 /* For the string instructions that allow a segment override
5098 on one of their operands, the default segment is ds. */
5102 if (i
.tm
.base_opcode
== 0x8d /* lea */
5105 as_warn (_("segment override on `%s' is ineffectual"), i
.tm
.name
);
5107 /* If a segment was explicitly specified, and the specified segment
5108 is not the default, use an opcode prefix to select it. If we
5109 never figured out what the default segment is, then default_seg
5110 will be zero at this point, and the specified segment prefix will
5112 if ((i
.seg
[0]) && (i
.seg
[0] != default_seg
))
5114 if (!add_prefix (i
.seg
[0]->seg_prefix
))
5120 static const seg_entry
*
5121 build_modrm_byte (void)
5123 const seg_entry
*default_seg
= 0;
5124 unsigned int source
, dest
;
5127 /* The first operand of instructions with VEX prefix and 3 sources
5128 must be VEX_Imm4. */
5129 vex_3_sources
= i
.tm
.opcode_modifier
.vexsources
== VEX3SOURCES
;
5132 unsigned int nds
, reg_slot
;
5135 if (i
.tm
.opcode_modifier
.veximmext
5136 && i
.tm
.opcode_modifier
.immext
)
5138 dest
= i
.operands
- 2;
5139 gas_assert (dest
== 3);
5142 dest
= i
.operands
- 1;
5145 /* There are 2 kinds of instructions:
5146 1. 5 operands: 4 register operands or 3 register operands
5147 plus 1 memory operand plus one Vec_Imm4 operand, VexXDS, and
5148 VexW0 or VexW1. The destination must be either XMM or YMM
5150 2. 4 operands: 4 register operands or 3 register operands
5151 plus 1 memory operand, VexXDS, and VexImmExt */
5152 gas_assert ((i
.reg_operands
== 4
5153 || (i
.reg_operands
== 3 && i
.mem_operands
== 1))
5154 && i
.tm
.opcode_modifier
.vexvvvv
== VEXXDS
5155 && (i
.tm
.opcode_modifier
.veximmext
5156 || (i
.imm_operands
== 1
5157 && i
.types
[0].bitfield
.vec_imm4
5158 && (i
.tm
.opcode_modifier
.vexw
== VEXW0
5159 || i
.tm
.opcode_modifier
.vexw
== VEXW1
)
5160 && (operand_type_equal (&i
.tm
.operand_types
[dest
], ®xmm
)
5161 || operand_type_equal (&i
.tm
.operand_types
[dest
], ®ymm
)))));
5163 if (i
.imm_operands
== 0)
5165 /* When there is no immediate operand, generate an 8bit
5166 immediate operand to encode the first operand. */
5167 exp
= &im_expressions
[i
.imm_operands
++];
5168 i
.op
[i
.operands
].imms
= exp
;
5169 i
.types
[i
.operands
] = imm8
;
5171 /* If VexW1 is set, the first operand is the source and
5172 the second operand is encoded in the immediate operand. */
5173 if (i
.tm
.opcode_modifier
.vexw
== VEXW1
)
5184 /* FMA swaps REG and NDS. */
5185 if (i
.tm
.cpu_flags
.bitfield
.cpufma
)
5193 gas_assert (operand_type_equal (&i
.tm
.operand_types
[reg_slot
],
5195 || operand_type_equal (&i
.tm
.operand_types
[reg_slot
],
5197 exp
->X_op
= O_constant
;
5199 = ((i
.op
[reg_slot
].regs
->reg_num
5200 + ((i
.op
[reg_slot
].regs
->reg_flags
& RegRex
) ? 8 : 0))
5205 unsigned int imm_slot
;
5207 if (i
.tm
.opcode_modifier
.vexw
== VEXW0
)
5209 /* If VexW0 is set, the third operand is the source and
5210 the second operand is encoded in the immediate
5217 /* VexW1 is set, the second operand is the source and
5218 the third operand is encoded in the immediate
5224 if (i
.tm
.opcode_modifier
.immext
)
5226 /* When ImmExt is set, the immdiate byte is the last
5228 imm_slot
= i
.operands
- 1;
5236 /* Turn on Imm8 so that output_imm will generate it. */
5237 i
.types
[imm_slot
].bitfield
.imm8
= 1;
5240 gas_assert (operand_type_equal (&i
.tm
.operand_types
[reg_slot
],
5242 || operand_type_equal (&i
.tm
.operand_types
[reg_slot
],
5244 i
.op
[imm_slot
].imms
->X_add_number
5245 |= ((i
.op
[reg_slot
].regs
->reg_num
5246 + ((i
.op
[reg_slot
].regs
->reg_flags
& RegRex
) ? 8 : 0))
5250 gas_assert (operand_type_equal (&i
.tm
.operand_types
[nds
], ®xmm
)
5251 || operand_type_equal (&i
.tm
.operand_types
[nds
],
5253 i
.vex
.register_specifier
= i
.op
[nds
].regs
;
5258 /* i.reg_operands MUST be the number of real register operands;
5259 implicit registers do not count. If there are 3 register
5260 operands, it must be a instruction with VexNDS. For a
5261 instruction with VexNDD, the destination register is encoded
5262 in VEX prefix. If there are 4 register operands, it must be
5263 a instruction with VEX prefix and 3 sources. */
5264 if (i
.mem_operands
== 0
5265 && ((i
.reg_operands
== 2
5266 && i
.tm
.opcode_modifier
.vexvvvv
<= VEXXDS
)
5267 || (i
.reg_operands
== 3
5268 && i
.tm
.opcode_modifier
.vexvvvv
== VEXXDS
)
5269 || (i
.reg_operands
== 4 && vex_3_sources
)))
5277 /* When there are 3 operands, one of them may be immediate,
5278 which may be the first or the last operand. Otherwise,
5279 the first operand must be shift count register (cl) or it
5280 is an instruction with VexNDS. */
5281 gas_assert (i
.imm_operands
== 1
5282 || (i
.imm_operands
== 0
5283 && (i
.tm
.opcode_modifier
.vexvvvv
== VEXXDS
5284 || i
.types
[0].bitfield
.shiftcount
)));
5285 if (operand_type_check (i
.types
[0], imm
)
5286 || i
.types
[0].bitfield
.shiftcount
)
5292 /* When there are 4 operands, the first two must be 8bit
5293 immediate operands. The source operand will be the 3rd
5296 For instructions with VexNDS, if the first operand
5297 an imm8, the source operand is the 2nd one. If the last
5298 operand is imm8, the source operand is the first one. */
5299 gas_assert ((i
.imm_operands
== 2
5300 && i
.types
[0].bitfield
.imm8
5301 && i
.types
[1].bitfield
.imm8
)
5302 || (i
.tm
.opcode_modifier
.vexvvvv
== VEXXDS
5303 && i
.imm_operands
== 1
5304 && (i
.types
[0].bitfield
.imm8
5305 || i
.types
[i
.operands
- 1].bitfield
.imm8
)));
5306 if (i
.imm_operands
== 2)
5310 if (i
.types
[0].bitfield
.imm8
)
5326 if (i
.tm
.opcode_modifier
.vexvvvv
== VEXXDS
)
5328 /* For instructions with VexNDS, the register-only
5329 source operand must be 32/64bit integer, XMM or
5330 YMM register. It is encoded in VEX prefix. We
5331 need to clear RegMem bit before calling
5332 operand_type_equal. */
5334 i386_operand_type op
;
5337 /* Check register-only source operand when two source
5338 operands are swapped. */
5339 if (!i
.tm
.operand_types
[source
].bitfield
.baseindex
5340 && i
.tm
.operand_types
[dest
].bitfield
.baseindex
)
5348 op
= i
.tm
.operand_types
[vvvv
];
5349 op
.bitfield
.regmem
= 0;
5350 if ((dest
+ 1) >= i
.operands
5351 || (op
.bitfield
.reg32
!= 1
5352 && !op
.bitfield
.reg64
!= 1
5353 && !operand_type_equal (&op
, ®xmm
)
5354 && !operand_type_equal (&op
, ®ymm
)))
5356 i
.vex
.register_specifier
= i
.op
[vvvv
].regs
;
5362 /* One of the register operands will be encoded in the i.tm.reg
5363 field, the other in the combined i.tm.mode and i.tm.regmem
5364 fields. If no form of this instruction supports a memory
5365 destination operand, then we assume the source operand may
5366 sometimes be a memory operand and so we need to store the
5367 destination in the i.rm.reg field. */
5368 if (!i
.tm
.operand_types
[dest
].bitfield
.regmem
5369 && operand_type_check (i
.tm
.operand_types
[dest
], anymem
) == 0)
5371 i
.rm
.reg
= i
.op
[dest
].regs
->reg_num
;
5372 i
.rm
.regmem
= i
.op
[source
].regs
->reg_num
;
5373 if ((i
.op
[dest
].regs
->reg_flags
& RegRex
) != 0)
5375 if ((i
.op
[source
].regs
->reg_flags
& RegRex
) != 0)
5380 i
.rm
.reg
= i
.op
[source
].regs
->reg_num
;
5381 i
.rm
.regmem
= i
.op
[dest
].regs
->reg_num
;
5382 if ((i
.op
[dest
].regs
->reg_flags
& RegRex
) != 0)
5384 if ((i
.op
[source
].regs
->reg_flags
& RegRex
) != 0)
5387 if (flag_code
!= CODE_64BIT
&& (i
.rex
& (REX_R
| REX_B
)))
5389 if (!i
.types
[0].bitfield
.control
5390 && !i
.types
[1].bitfield
.control
)
5392 i
.rex
&= ~(REX_R
| REX_B
);
5393 add_prefix (LOCK_PREFIX_OPCODE
);
5397 { /* If it's not 2 reg operands... */
5402 unsigned int fake_zero_displacement
= 0;
5405 for (op
= 0; op
< i
.operands
; op
++)
5406 if (operand_type_check (i
.types
[op
], anymem
))
5408 gas_assert (op
< i
.operands
);
5412 if (i
.base_reg
== 0)
5415 if (!i
.disp_operands
)
5416 fake_zero_displacement
= 1;
5417 if (i
.index_reg
== 0)
5419 /* Operand is just <disp> */
5420 if (flag_code
== CODE_64BIT
)
5422 /* 64bit mode overwrites the 32bit absolute
5423 addressing by RIP relative addressing and
5424 absolute addressing is encoded by one of the
5425 redundant SIB forms. */
5426 i
.rm
.regmem
= ESCAPE_TO_TWO_BYTE_ADDRESSING
;
5427 i
.sib
.base
= NO_BASE_REGISTER
;
5428 i
.sib
.index
= NO_INDEX_REGISTER
;
5429 i
.types
[op
] = ((i
.prefix
[ADDR_PREFIX
] == 0)
5430 ? disp32s
: disp32
);
5432 else if ((flag_code
== CODE_16BIT
)
5433 ^ (i
.prefix
[ADDR_PREFIX
] != 0))
5435 i
.rm
.regmem
= NO_BASE_REGISTER_16
;
5436 i
.types
[op
] = disp16
;
5440 i
.rm
.regmem
= NO_BASE_REGISTER
;
5441 i
.types
[op
] = disp32
;
5444 else /* !i.base_reg && i.index_reg */
5446 if (i
.index_reg
->reg_num
== RegEiz
5447 || i
.index_reg
->reg_num
== RegRiz
)
5448 i
.sib
.index
= NO_INDEX_REGISTER
;
5450 i
.sib
.index
= i
.index_reg
->reg_num
;
5451 i
.sib
.base
= NO_BASE_REGISTER
;
5452 i
.sib
.scale
= i
.log2_scale_factor
;
5453 i
.rm
.regmem
= ESCAPE_TO_TWO_BYTE_ADDRESSING
;
5454 i
.types
[op
].bitfield
.disp8
= 0;
5455 i
.types
[op
].bitfield
.disp16
= 0;
5456 i
.types
[op
].bitfield
.disp64
= 0;
5457 if (flag_code
!= CODE_64BIT
)
5459 /* Must be 32 bit */
5460 i
.types
[op
].bitfield
.disp32
= 1;
5461 i
.types
[op
].bitfield
.disp32s
= 0;
5465 i
.types
[op
].bitfield
.disp32
= 0;
5466 i
.types
[op
].bitfield
.disp32s
= 1;
5468 if ((i
.index_reg
->reg_flags
& RegRex
) != 0)
5472 /* RIP addressing for 64bit mode. */
5473 else if (i
.base_reg
->reg_num
== RegRip
||
5474 i
.base_reg
->reg_num
== RegEip
)
5476 i
.rm
.regmem
= NO_BASE_REGISTER
;
5477 i
.types
[op
].bitfield
.disp8
= 0;
5478 i
.types
[op
].bitfield
.disp16
= 0;
5479 i
.types
[op
].bitfield
.disp32
= 0;
5480 i
.types
[op
].bitfield
.disp32s
= 1;
5481 i
.types
[op
].bitfield
.disp64
= 0;
5482 i
.flags
[op
] |= Operand_PCrel
;
5483 if (! i
.disp_operands
)
5484 fake_zero_displacement
= 1;
5486 else if (i
.base_reg
->reg_type
.bitfield
.reg16
)
5488 switch (i
.base_reg
->reg_num
)
5491 if (i
.index_reg
== 0)
5493 else /* (%bx,%si) -> 0, or (%bx,%di) -> 1 */
5494 i
.rm
.regmem
= i
.index_reg
->reg_num
- 6;
5498 if (i
.index_reg
== 0)
5501 if (operand_type_check (i
.types
[op
], disp
) == 0)
5503 /* fake (%bp) into 0(%bp) */
5504 i
.types
[op
].bitfield
.disp8
= 1;
5505 fake_zero_displacement
= 1;
5508 else /* (%bp,%si) -> 2, or (%bp,%di) -> 3 */
5509 i
.rm
.regmem
= i
.index_reg
->reg_num
- 6 + 2;
5511 default: /* (%si) -> 4 or (%di) -> 5 */
5512 i
.rm
.regmem
= i
.base_reg
->reg_num
- 6 + 4;
5514 i
.rm
.mode
= mode_from_disp_size (i
.types
[op
]);
5516 else /* i.base_reg and 32/64 bit mode */
5518 if (flag_code
== CODE_64BIT
5519 && operand_type_check (i
.types
[op
], disp
))
5521 i386_operand_type temp
;
5522 operand_type_set (&temp
, 0);
5523 temp
.bitfield
.disp8
= i
.types
[op
].bitfield
.disp8
;
5525 if (i
.prefix
[ADDR_PREFIX
] == 0)
5526 i
.types
[op
].bitfield
.disp32s
= 1;
5528 i
.types
[op
].bitfield
.disp32
= 1;
5531 i
.rm
.regmem
= i
.base_reg
->reg_num
;
5532 if ((i
.base_reg
->reg_flags
& RegRex
) != 0)
5534 i
.sib
.base
= i
.base_reg
->reg_num
;
5535 /* x86-64 ignores REX prefix bit here to avoid decoder
5537 if ((i
.base_reg
->reg_num
& 7) == EBP_REG_NUM
)
5540 if (i
.disp_operands
== 0)
5542 fake_zero_displacement
= 1;
5543 i
.types
[op
].bitfield
.disp8
= 1;
5546 else if (i
.base_reg
->reg_num
== ESP_REG_NUM
)
5550 i
.sib
.scale
= i
.log2_scale_factor
;
5551 if (i
.index_reg
== 0)
5553 /* <disp>(%esp) becomes two byte modrm with no index
5554 register. We've already stored the code for esp
5555 in i.rm.regmem ie. ESCAPE_TO_TWO_BYTE_ADDRESSING.
5556 Any base register besides %esp will not use the
5557 extra modrm byte. */
5558 i
.sib
.index
= NO_INDEX_REGISTER
;
5562 if (i
.index_reg
->reg_num
== RegEiz
5563 || i
.index_reg
->reg_num
== RegRiz
)
5564 i
.sib
.index
= NO_INDEX_REGISTER
;
5566 i
.sib
.index
= i
.index_reg
->reg_num
;
5567 i
.rm
.regmem
= ESCAPE_TO_TWO_BYTE_ADDRESSING
;
5568 if ((i
.index_reg
->reg_flags
& RegRex
) != 0)
5573 && (i
.reloc
[op
] == BFD_RELOC_386_TLS_DESC_CALL
5574 || i
.reloc
[op
] == BFD_RELOC_X86_64_TLSDESC_CALL
))
5577 i
.rm
.mode
= mode_from_disp_size (i
.types
[op
]);
5580 if (fake_zero_displacement
)
5582 /* Fakes a zero displacement assuming that i.types[op]
5583 holds the correct displacement size. */
5586 gas_assert (i
.op
[op
].disps
== 0);
5587 exp
= &disp_expressions
[i
.disp_operands
++];
5588 i
.op
[op
].disps
= exp
;
5589 exp
->X_op
= O_constant
;
5590 exp
->X_add_number
= 0;
5591 exp
->X_add_symbol
= (symbolS
*) 0;
5592 exp
->X_op_symbol
= (symbolS
*) 0;
5600 if (i
.tm
.opcode_modifier
.vexsources
== XOP2SOURCES
)
5602 if (operand_type_check (i
.types
[0], imm
))
5603 i
.vex
.register_specifier
= NULL
;
5606 /* VEX.vvvv encodes one of the sources when the first
5607 operand is not an immediate. */
5608 if (i
.tm
.opcode_modifier
.vexw
== VEXW0
)
5609 i
.vex
.register_specifier
= i
.op
[0].regs
;
5611 i
.vex
.register_specifier
= i
.op
[1].regs
;
5614 /* Destination is a XMM register encoded in the ModRM.reg
5616 i
.rm
.reg
= i
.op
[2].regs
->reg_num
;
5617 if ((i
.op
[2].regs
->reg_flags
& RegRex
) != 0)
5620 /* ModRM.rm and VEX.B encodes the other source. */
5621 if (!i
.mem_operands
)
5625 if (i
.tm
.opcode_modifier
.vexw
== VEXW0
)
5626 i
.rm
.regmem
= i
.op
[1].regs
->reg_num
;
5628 i
.rm
.regmem
= i
.op
[0].regs
->reg_num
;
5630 if ((i
.op
[1].regs
->reg_flags
& RegRex
) != 0)
5634 else if (i
.tm
.opcode_modifier
.vexvvvv
== VEXLWP
)
5636 i
.vex
.register_specifier
= i
.op
[2].regs
;
5637 if (!i
.mem_operands
)
5640 i
.rm
.regmem
= i
.op
[1].regs
->reg_num
;
5641 if ((i
.op
[1].regs
->reg_flags
& RegRex
) != 0)
5645 /* Fill in i.rm.reg or i.rm.regmem field with register operand
5646 (if any) based on i.tm.extension_opcode. Again, we must be
5647 careful to make sure that segment/control/debug/test/MMX
5648 registers are coded into the i.rm.reg field. */
5649 else if (i
.reg_operands
)
5652 unsigned int vex_reg
= ~0;
5654 for (op
= 0; op
< i
.operands
; op
++)
5655 if (i
.types
[op
].bitfield
.reg8
5656 || i
.types
[op
].bitfield
.reg16
5657 || i
.types
[op
].bitfield
.reg32
5658 || i
.types
[op
].bitfield
.reg64
5659 || i
.types
[op
].bitfield
.regmmx
5660 || i
.types
[op
].bitfield
.regxmm
5661 || i
.types
[op
].bitfield
.regymm
5662 || i
.types
[op
].bitfield
.sreg2
5663 || i
.types
[op
].bitfield
.sreg3
5664 || i
.types
[op
].bitfield
.control
5665 || i
.types
[op
].bitfield
.debug
5666 || i
.types
[op
].bitfield
.test
)
5671 else if (i
.tm
.opcode_modifier
.vexvvvv
== VEXXDS
)
5673 /* For instructions with VexNDS, the register-only
5674 source operand is encoded in VEX prefix. */
5675 gas_assert (mem
!= (unsigned int) ~0);
5680 gas_assert (op
< i
.operands
);
5684 /* Check register-only source operand when two source
5685 operands are swapped. */
5686 if (!i
.tm
.operand_types
[op
].bitfield
.baseindex
5687 && i
.tm
.operand_types
[op
+ 1].bitfield
.baseindex
)
5691 gas_assert (mem
== (vex_reg
+ 1)
5692 && op
< i
.operands
);
5697 gas_assert (vex_reg
< i
.operands
);
5701 else if (i
.tm
.opcode_modifier
.vexvvvv
== VEXNDD
)
5703 /* For instructions with VexNDD, the register destination
5704 is encoded in VEX prefix. */
5705 if (i
.mem_operands
== 0)
5707 /* There is no memory operand. */
5708 gas_assert ((op
+ 2) == i
.operands
);
5713 /* There are only 2 operands. */
5714 gas_assert (op
< 2 && i
.operands
== 2);
5719 gas_assert (op
< i
.operands
);
5721 if (vex_reg
!= (unsigned int) ~0)
5723 i386_operand_type
*type
= &i
.tm
.operand_types
[vex_reg
];
5725 if (type
->bitfield
.reg32
!= 1
5726 && type
->bitfield
.reg64
!= 1
5727 && !operand_type_equal (type
, ®xmm
)
5728 && !operand_type_equal (type
, ®ymm
))
5731 i
.vex
.register_specifier
= i
.op
[vex_reg
].regs
;
5734 /* Don't set OP operand twice. */
5737 /* If there is an extension opcode to put here, the
5738 register number must be put into the regmem field. */
5739 if (i
.tm
.extension_opcode
!= None
)
5741 i
.rm
.regmem
= i
.op
[op
].regs
->reg_num
;
5742 if ((i
.op
[op
].regs
->reg_flags
& RegRex
) != 0)
5747 i
.rm
.reg
= i
.op
[op
].regs
->reg_num
;
5748 if ((i
.op
[op
].regs
->reg_flags
& RegRex
) != 0)
5753 /* Now, if no memory operand has set i.rm.mode = 0, 1, 2 we
5754 must set it to 3 to indicate this is a register operand
5755 in the regmem field. */
5756 if (!i
.mem_operands
)
5760 /* Fill in i.rm.reg field with extension opcode (if any). */
5761 if (i
.tm
.extension_opcode
!= None
)
5762 i
.rm
.reg
= i
.tm
.extension_opcode
;
5768 output_branch (void)
5774 relax_substateT subtype
;
5778 code16
= flag_code
== CODE_16BIT
? CODE16
: 0;
5779 size
= i
.disp32_encoding
? BIG
: SMALL
;
5782 if (i
.prefix
[DATA_PREFIX
] != 0)
5788 /* Pentium4 branch hints. */
5789 if (i
.prefix
[SEG_PREFIX
] == CS_PREFIX_OPCODE
/* not taken */
5790 || i
.prefix
[SEG_PREFIX
] == DS_PREFIX_OPCODE
/* taken */)
5795 if (i
.prefix
[REX_PREFIX
] != 0)
5801 if (i
.prefixes
!= 0 && !intel_syntax
)
5802 as_warn (_("skipping prefixes on this instruction"));
5804 /* It's always a symbol; End frag & setup for relax.
5805 Make sure there is enough room in this frag for the largest
5806 instruction we may generate in md_convert_frag. This is 2
5807 bytes for the opcode and room for the prefix and largest
5809 frag_grow (prefix
+ 2 + 4);
5810 /* Prefix and 1 opcode byte go in fr_fix. */
5811 p
= frag_more (prefix
+ 1);
5812 if (i
.prefix
[DATA_PREFIX
] != 0)
5813 *p
++ = DATA_PREFIX_OPCODE
;
5814 if (i
.prefix
[SEG_PREFIX
] == CS_PREFIX_OPCODE
5815 || i
.prefix
[SEG_PREFIX
] == DS_PREFIX_OPCODE
)
5816 *p
++ = i
.prefix
[SEG_PREFIX
];
5817 if (i
.prefix
[REX_PREFIX
] != 0)
5818 *p
++ = i
.prefix
[REX_PREFIX
];
5819 *p
= i
.tm
.base_opcode
;
5821 if ((unsigned char) *p
== JUMP_PC_RELATIVE
)
5822 subtype
= ENCODE_RELAX_STATE (UNCOND_JUMP
, size
);
5823 else if (cpu_arch_flags
.bitfield
.cpui386
)
5824 subtype
= ENCODE_RELAX_STATE (COND_JUMP
, size
);
5826 subtype
= ENCODE_RELAX_STATE (COND_JUMP86
, size
);
5829 sym
= i
.op
[0].disps
->X_add_symbol
;
5830 off
= i
.op
[0].disps
->X_add_number
;
5832 if (i
.op
[0].disps
->X_op
!= O_constant
5833 && i
.op
[0].disps
->X_op
!= O_symbol
)
5835 /* Handle complex expressions. */
5836 sym
= make_expr_symbol (i
.op
[0].disps
);
5840 /* 1 possible extra opcode + 4 byte displacement go in var part.
5841 Pass reloc in fr_var. */
5842 frag_var (rs_machine_dependent
, 5, i
.reloc
[0], subtype
, sym
, off
, p
);
5852 if (i
.tm
.opcode_modifier
.jumpbyte
)
5854 /* This is a loop or jecxz type instruction. */
5856 if (i
.prefix
[ADDR_PREFIX
] != 0)
5858 FRAG_APPEND_1_CHAR (ADDR_PREFIX_OPCODE
);
5861 /* Pentium4 branch hints. */
5862 if (i
.prefix
[SEG_PREFIX
] == CS_PREFIX_OPCODE
/* not taken */
5863 || i
.prefix
[SEG_PREFIX
] == DS_PREFIX_OPCODE
/* taken */)
5865 FRAG_APPEND_1_CHAR (i
.prefix
[SEG_PREFIX
]);
5874 if (flag_code
== CODE_16BIT
)
5877 if (i
.prefix
[DATA_PREFIX
] != 0)
5879 FRAG_APPEND_1_CHAR (DATA_PREFIX_OPCODE
);
5889 if (i
.prefix
[REX_PREFIX
] != 0)
5891 FRAG_APPEND_1_CHAR (i
.prefix
[REX_PREFIX
]);
5895 if (i
.prefixes
!= 0 && !intel_syntax
)
5896 as_warn (_("skipping prefixes on this instruction"));
5898 p
= frag_more (1 + size
);
5899 *p
++ = i
.tm
.base_opcode
;
5901 fixP
= fix_new_exp (frag_now
, p
- frag_now
->fr_literal
, size
,
5902 i
.op
[0].disps
, 1, reloc (size
, 1, 1, i
.reloc
[0]));
5904 /* All jumps handled here are signed, but don't use a signed limit
5905 check for 32 and 16 bit jumps as we want to allow wrap around at
5906 4G and 64k respectively. */
5908 fixP
->fx_signed
= 1;
5912 output_interseg_jump (void)
5920 if (flag_code
== CODE_16BIT
)
5924 if (i
.prefix
[DATA_PREFIX
] != 0)
5930 if (i
.prefix
[REX_PREFIX
] != 0)
5940 if (i
.prefixes
!= 0 && !intel_syntax
)
5941 as_warn (_("skipping prefixes on this instruction"));
5943 /* 1 opcode; 2 segment; offset */
5944 p
= frag_more (prefix
+ 1 + 2 + size
);
5946 if (i
.prefix
[DATA_PREFIX
] != 0)
5947 *p
++ = DATA_PREFIX_OPCODE
;
5949 if (i
.prefix
[REX_PREFIX
] != 0)
5950 *p
++ = i
.prefix
[REX_PREFIX
];
5952 *p
++ = i
.tm
.base_opcode
;
5953 if (i
.op
[1].imms
->X_op
== O_constant
)
5955 offsetT n
= i
.op
[1].imms
->X_add_number
;
5958 && !fits_in_unsigned_word (n
)
5959 && !fits_in_signed_word (n
))
5961 as_bad (_("16-bit jump out of range"));
5964 md_number_to_chars (p
, n
, size
);
5967 fix_new_exp (frag_now
, p
- frag_now
->fr_literal
, size
,
5968 i
.op
[1].imms
, 0, reloc (size
, 0, 0, i
.reloc
[1]));
5969 if (i
.op
[0].imms
->X_op
!= O_constant
)
5970 as_bad (_("can't handle non absolute segment in `%s'"),
5972 md_number_to_chars (p
+ size
, (valueT
) i
.op
[0].imms
->X_add_number
, 2);
5978 fragS
*insn_start_frag
;
5979 offsetT insn_start_off
;
5981 /* Tie dwarf2 debug info to the address at the start of the insn.
5982 We can't do this after the insn has been output as the current
5983 frag may have been closed off. eg. by frag_var. */
5984 dwarf2_emit_insn (0);
5986 insn_start_frag
= frag_now
;
5987 insn_start_off
= frag_now_fix ();
5990 if (i
.tm
.opcode_modifier
.jump
)
5992 else if (i
.tm
.opcode_modifier
.jumpbyte
5993 || i
.tm
.opcode_modifier
.jumpdword
)
5995 else if (i
.tm
.opcode_modifier
.jumpintersegment
)
5996 output_interseg_jump ();
5999 /* Output normal instructions here. */
6003 unsigned int prefix
;
6005 /* Since the VEX prefix contains the implicit prefix, we don't
6006 need the explicit prefix. */
6007 if (!i
.tm
.opcode_modifier
.vex
)
6009 switch (i
.tm
.opcode_length
)
6012 if (i
.tm
.base_opcode
& 0xff000000)
6014 prefix
= (i
.tm
.base_opcode
>> 24) & 0xff;
6019 if ((i
.tm
.base_opcode
& 0xff0000) != 0)
6021 prefix
= (i
.tm
.base_opcode
>> 16) & 0xff;
6022 if (i
.tm
.cpu_flags
.bitfield
.cpupadlock
)
6025 if (prefix
!= REPE_PREFIX_OPCODE
6026 || (i
.prefix
[REP_PREFIX
]
6027 != REPE_PREFIX_OPCODE
))
6028 add_prefix (prefix
);
6031 add_prefix (prefix
);
6040 /* The prefix bytes. */
6041 for (j
= ARRAY_SIZE (i
.prefix
), q
= i
.prefix
; j
> 0; j
--, q
++)
6043 FRAG_APPEND_1_CHAR (*q
);
6046 if (i
.tm
.opcode_modifier
.vex
)
6048 for (j
= 0, q
= i
.prefix
; j
< ARRAY_SIZE (i
.prefix
); j
++, q
++)
6053 /* REX byte is encoded in VEX prefix. */
6057 FRAG_APPEND_1_CHAR (*q
);
6060 /* There should be no other prefixes for instructions
6065 /* Now the VEX prefix. */
6066 p
= frag_more (i
.vex
.length
);
6067 for (j
= 0; j
< i
.vex
.length
; j
++)
6068 p
[j
] = i
.vex
.bytes
[j
];
6071 /* Now the opcode; be careful about word order here! */
6072 if (i
.tm
.opcode_length
== 1)
6074 FRAG_APPEND_1_CHAR (i
.tm
.base_opcode
);
6078 switch (i
.tm
.opcode_length
)
6082 *p
++ = (i
.tm
.base_opcode
>> 16) & 0xff;
6092 /* Put out high byte first: can't use md_number_to_chars! */
6093 *p
++ = (i
.tm
.base_opcode
>> 8) & 0xff;
6094 *p
= i
.tm
.base_opcode
& 0xff;
6097 /* Now the modrm byte and sib byte (if present). */
6098 if (i
.tm
.opcode_modifier
.modrm
)
6100 FRAG_APPEND_1_CHAR ((i
.rm
.regmem
<< 0
6103 /* If i.rm.regmem == ESP (4)
6104 && i.rm.mode != (Register mode)
6106 ==> need second modrm byte. */
6107 if (i
.rm
.regmem
== ESCAPE_TO_TWO_BYTE_ADDRESSING
6109 && !(i
.base_reg
&& i
.base_reg
->reg_type
.bitfield
.reg16
))
6110 FRAG_APPEND_1_CHAR ((i
.sib
.base
<< 0
6112 | i
.sib
.scale
<< 6));
6115 if (i
.disp_operands
)
6116 output_disp (insn_start_frag
, insn_start_off
);
6119 output_imm (insn_start_frag
, insn_start_off
);
6125 pi ("" /*line*/, &i
);
6127 #endif /* DEBUG386 */
6130 /* Return the size of the displacement operand N. */
6133 disp_size (unsigned int n
)
6136 if (i
.types
[n
].bitfield
.disp64
)
6138 else if (i
.types
[n
].bitfield
.disp8
)
6140 else if (i
.types
[n
].bitfield
.disp16
)
6145 /* Return the size of the immediate operand N. */
6148 imm_size (unsigned int n
)
6151 if (i
.types
[n
].bitfield
.imm64
)
6153 else if (i
.types
[n
].bitfield
.imm8
|| i
.types
[n
].bitfield
.imm8s
)
6155 else if (i
.types
[n
].bitfield
.imm16
)
6161 output_disp (fragS
*insn_start_frag
, offsetT insn_start_off
)
6166 for (n
= 0; n
< i
.operands
; n
++)
6168 if (operand_type_check (i
.types
[n
], disp
))
6170 if (i
.op
[n
].disps
->X_op
== O_constant
)
6172 int size
= disp_size (n
);
6175 val
= offset_in_range (i
.op
[n
].disps
->X_add_number
,
6177 p
= frag_more (size
);
6178 md_number_to_chars (p
, val
, size
);
6182 enum bfd_reloc_code_real reloc_type
;
6183 int size
= disp_size (n
);
6184 int sign
= i
.types
[n
].bitfield
.disp32s
;
6185 int pcrel
= (i
.flags
[n
] & Operand_PCrel
) != 0;
6187 /* We can't have 8 bit displacement here. */
6188 gas_assert (!i
.types
[n
].bitfield
.disp8
);
6190 /* The PC relative address is computed relative
6191 to the instruction boundary, so in case immediate
6192 fields follows, we need to adjust the value. */
6193 if (pcrel
&& i
.imm_operands
)
6198 for (n1
= 0; n1
< i
.operands
; n1
++)
6199 if (operand_type_check (i
.types
[n1
], imm
))
6201 /* Only one immediate is allowed for PC
6202 relative address. */
6203 gas_assert (sz
== 0);
6205 i
.op
[n
].disps
->X_add_number
-= sz
;
6207 /* We should find the immediate. */
6208 gas_assert (sz
!= 0);
6211 p
= frag_more (size
);
6212 reloc_type
= reloc (size
, pcrel
, sign
, i
.reloc
[n
]);
6214 && GOT_symbol
== i
.op
[n
].disps
->X_add_symbol
6215 && (((reloc_type
== BFD_RELOC_32
6216 || reloc_type
== BFD_RELOC_X86_64_32S
6217 || (reloc_type
== BFD_RELOC_64
6219 && (i
.op
[n
].disps
->X_op
== O_symbol
6220 || (i
.op
[n
].disps
->X_op
== O_add
6221 && ((symbol_get_value_expression
6222 (i
.op
[n
].disps
->X_op_symbol
)->X_op
)
6224 || reloc_type
== BFD_RELOC_32_PCREL
))
6228 if (insn_start_frag
== frag_now
)
6229 add
= (p
- frag_now
->fr_literal
) - insn_start_off
;
6234 add
= insn_start_frag
->fr_fix
- insn_start_off
;
6235 for (fr
= insn_start_frag
->fr_next
;
6236 fr
&& fr
!= frag_now
; fr
= fr
->fr_next
)
6238 add
+= p
- frag_now
->fr_literal
;
6243 reloc_type
= BFD_RELOC_386_GOTPC
;
6244 i
.op
[n
].imms
->X_add_number
+= add
;
6246 else if (reloc_type
== BFD_RELOC_64
)
6247 reloc_type
= BFD_RELOC_X86_64_GOTPC64
;
6249 /* Don't do the adjustment for x86-64, as there
6250 the pcrel addressing is relative to the _next_
6251 insn, and that is taken care of in other code. */
6252 reloc_type
= BFD_RELOC_X86_64_GOTPC32
;
6254 fix_new_exp (frag_now
, p
- frag_now
->fr_literal
, size
,
6255 i
.op
[n
].disps
, pcrel
, reloc_type
);
6262 output_imm (fragS
*insn_start_frag
, offsetT insn_start_off
)
6267 for (n
= 0; n
< i
.operands
; n
++)
6269 if (operand_type_check (i
.types
[n
], imm
))
6271 if (i
.op
[n
].imms
->X_op
== O_constant
)
6273 int size
= imm_size (n
);
6276 val
= offset_in_range (i
.op
[n
].imms
->X_add_number
,
6278 p
= frag_more (size
);
6279 md_number_to_chars (p
, val
, size
);
6283 /* Not absolute_section.
6284 Need a 32-bit fixup (don't support 8bit
6285 non-absolute imms). Try to support other
6287 enum bfd_reloc_code_real reloc_type
;
6288 int size
= imm_size (n
);
6291 if (i
.types
[n
].bitfield
.imm32s
6292 && (i
.suffix
== QWORD_MNEM_SUFFIX
6293 || (!i
.suffix
&& i
.tm
.opcode_modifier
.no_lsuf
)))
6298 p
= frag_more (size
);
6299 reloc_type
= reloc (size
, 0, sign
, i
.reloc
[n
]);
6301 /* This is tough to explain. We end up with this one if we
6302 * have operands that look like
6303 * "_GLOBAL_OFFSET_TABLE_+[.-.L284]". The goal here is to
6304 * obtain the absolute address of the GOT, and it is strongly
6305 * preferable from a performance point of view to avoid using
6306 * a runtime relocation for this. The actual sequence of
6307 * instructions often look something like:
6312 * addl $_GLOBAL_OFFSET_TABLE_+[.-.L66],%ebx
6314 * The call and pop essentially return the absolute address
6315 * of the label .L66 and store it in %ebx. The linker itself
6316 * will ultimately change the first operand of the addl so
6317 * that %ebx points to the GOT, but to keep things simple, the
6318 * .o file must have this operand set so that it generates not
6319 * the absolute address of .L66, but the absolute address of
6320 * itself. This allows the linker itself simply treat a GOTPC
6321 * relocation as asking for a pcrel offset to the GOT to be
6322 * added in, and the addend of the relocation is stored in the
6323 * operand field for the instruction itself.
6325 * Our job here is to fix the operand so that it would add
6326 * the correct offset so that %ebx would point to itself. The
6327 * thing that is tricky is that .-.L66 will point to the
6328 * beginning of the instruction, so we need to further modify
6329 * the operand so that it will point to itself. There are
6330 * other cases where you have something like:
6332 * .long $_GLOBAL_OFFSET_TABLE_+[.-.L66]
6334 * and here no correction would be required. Internally in
6335 * the assembler we treat operands of this form as not being
6336 * pcrel since the '.' is explicitly mentioned, and I wonder
6337 * whether it would simplify matters to do it this way. Who
6338 * knows. In earlier versions of the PIC patches, the
6339 * pcrel_adjust field was used to store the correction, but
6340 * since the expression is not pcrel, I felt it would be
6341 * confusing to do it this way. */
6343 if ((reloc_type
== BFD_RELOC_32
6344 || reloc_type
== BFD_RELOC_X86_64_32S
6345 || reloc_type
== BFD_RELOC_64
)
6347 && GOT_symbol
== i
.op
[n
].imms
->X_add_symbol
6348 && (i
.op
[n
].imms
->X_op
== O_symbol
6349 || (i
.op
[n
].imms
->X_op
== O_add
6350 && ((symbol_get_value_expression
6351 (i
.op
[n
].imms
->X_op_symbol
)->X_op
)
6356 if (insn_start_frag
== frag_now
)
6357 add
= (p
- frag_now
->fr_literal
) - insn_start_off
;
6362 add
= insn_start_frag
->fr_fix
- insn_start_off
;
6363 for (fr
= insn_start_frag
->fr_next
;
6364 fr
&& fr
!= frag_now
; fr
= fr
->fr_next
)
6366 add
+= p
- frag_now
->fr_literal
;
6370 reloc_type
= BFD_RELOC_386_GOTPC
;
6372 reloc_type
= BFD_RELOC_X86_64_GOTPC32
;
6374 reloc_type
= BFD_RELOC_X86_64_GOTPC64
;
6375 i
.op
[n
].imms
->X_add_number
+= add
;
6377 fix_new_exp (frag_now
, p
- frag_now
->fr_literal
, size
,
6378 i
.op
[n
].imms
, 0, reloc_type
);
6384 /* x86_cons_fix_new is called via the expression parsing code when a
6385 reloc is needed. We use this hook to get the correct .got reloc. */
6386 static enum bfd_reloc_code_real got_reloc
= NO_RELOC
;
6387 static int cons_sign
= -1;
6390 x86_cons_fix_new (fragS
*frag
, unsigned int off
, unsigned int len
,
6393 enum bfd_reloc_code_real r
= reloc (len
, 0, cons_sign
, got_reloc
);
6395 got_reloc
= NO_RELOC
;
6398 if (exp
->X_op
== O_secrel
)
6400 exp
->X_op
= O_symbol
;
6401 r
= BFD_RELOC_32_SECREL
;
6405 fix_new_exp (frag
, off
, len
, exp
, 0, r
);
6408 #if (!defined (OBJ_ELF) && !defined (OBJ_MAYBE_ELF)) || defined (LEX_AT)
6409 # define lex_got(reloc, adjust, types) NULL
6411 /* Parse operands of the form
6412 <symbol>@GOTOFF+<nnn>
6413 and similar .plt or .got references.
6415 If we find one, set up the correct relocation in RELOC and copy the
6416 input string, minus the `@GOTOFF' into a malloc'd buffer for
6417 parsing by the calling routine. Return this buffer, and if ADJUST
6418 is non-null set it to the length of the string we removed from the
6419 input line. Otherwise return NULL. */
6421 lex_got (enum bfd_reloc_code_real
*rel
,
6423 i386_operand_type
*types
)
6425 /* Some of the relocations depend on the size of what field is to
6426 be relocated. But in our callers i386_immediate and i386_displacement
6427 we don't yet know the operand size (this will be set by insn
6428 matching). Hence we record the word32 relocation here,
6429 and adjust the reloc according to the real size in reloc(). */
6430 static const struct {
6433 const enum bfd_reloc_code_real rel
[2];
6434 const i386_operand_type types64
;
6436 { STRING_COMMA_LEN ("PLTOFF"), { _dummy_first_bfd_reloc_code_real
,
6437 BFD_RELOC_X86_64_PLTOFF64
},
6438 OPERAND_TYPE_IMM64
},
6439 { STRING_COMMA_LEN ("PLT"), { BFD_RELOC_386_PLT32
,
6440 BFD_RELOC_X86_64_PLT32
},
6441 OPERAND_TYPE_IMM32_32S_DISP32
},
6442 { STRING_COMMA_LEN ("GOTPLT"), { _dummy_first_bfd_reloc_code_real
,
6443 BFD_RELOC_X86_64_GOTPLT64
},
6444 OPERAND_TYPE_IMM64_DISP64
},
6445 { STRING_COMMA_LEN ("GOTOFF"), { BFD_RELOC_386_GOTOFF
,
6446 BFD_RELOC_X86_64_GOTOFF64
},
6447 OPERAND_TYPE_IMM64_DISP64
},
6448 { STRING_COMMA_LEN ("GOTPCREL"), { _dummy_first_bfd_reloc_code_real
,
6449 BFD_RELOC_X86_64_GOTPCREL
},
6450 OPERAND_TYPE_IMM32_32S_DISP32
},
6451 { STRING_COMMA_LEN ("TLSGD"), { BFD_RELOC_386_TLS_GD
,
6452 BFD_RELOC_X86_64_TLSGD
},
6453 OPERAND_TYPE_IMM32_32S_DISP32
},
6454 { STRING_COMMA_LEN ("TLSLDM"), { BFD_RELOC_386_TLS_LDM
,
6455 _dummy_first_bfd_reloc_code_real
},
6456 OPERAND_TYPE_NONE
},
6457 { STRING_COMMA_LEN ("TLSLD"), { _dummy_first_bfd_reloc_code_real
,
6458 BFD_RELOC_X86_64_TLSLD
},
6459 OPERAND_TYPE_IMM32_32S_DISP32
},
6460 { STRING_COMMA_LEN ("GOTTPOFF"), { BFD_RELOC_386_TLS_IE_32
,
6461 BFD_RELOC_X86_64_GOTTPOFF
},
6462 OPERAND_TYPE_IMM32_32S_DISP32
},
6463 { STRING_COMMA_LEN ("TPOFF"), { BFD_RELOC_386_TLS_LE_32
,
6464 BFD_RELOC_X86_64_TPOFF32
},
6465 OPERAND_TYPE_IMM32_32S_64_DISP32_64
},
6466 { STRING_COMMA_LEN ("NTPOFF"), { BFD_RELOC_386_TLS_LE
,
6467 _dummy_first_bfd_reloc_code_real
},
6468 OPERAND_TYPE_NONE
},
6469 { STRING_COMMA_LEN ("DTPOFF"), { BFD_RELOC_386_TLS_LDO_32
,
6470 BFD_RELOC_X86_64_DTPOFF32
},
6471 OPERAND_TYPE_IMM32_32S_64_DISP32_64
},
6472 { STRING_COMMA_LEN ("GOTNTPOFF"),{ BFD_RELOC_386_TLS_GOTIE
,
6473 _dummy_first_bfd_reloc_code_real
},
6474 OPERAND_TYPE_NONE
},
6475 { STRING_COMMA_LEN ("INDNTPOFF"),{ BFD_RELOC_386_TLS_IE
,
6476 _dummy_first_bfd_reloc_code_real
},
6477 OPERAND_TYPE_NONE
},
6478 { STRING_COMMA_LEN ("GOT"), { BFD_RELOC_386_GOT32
,
6479 BFD_RELOC_X86_64_GOT32
},
6480 OPERAND_TYPE_IMM32_32S_64_DISP32
},
6481 { STRING_COMMA_LEN ("TLSDESC"), { BFD_RELOC_386_TLS_GOTDESC
,
6482 BFD_RELOC_X86_64_GOTPC32_TLSDESC
},
6483 OPERAND_TYPE_IMM32_32S_DISP32
},
6484 { STRING_COMMA_LEN ("TLSCALL"), { BFD_RELOC_386_TLS_DESC_CALL
,
6485 BFD_RELOC_X86_64_TLSDESC_CALL
},
6486 OPERAND_TYPE_IMM32_32S_DISP32
},
6494 for (cp
= input_line_pointer
; *cp
!= '@'; cp
++)
6495 if (is_end_of_line
[(unsigned char) *cp
] || *cp
== ',')
6498 for (j
= 0; j
< ARRAY_SIZE (gotrel
); j
++)
6500 int len
= gotrel
[j
].len
;
6501 if (strncasecmp (cp
+ 1, gotrel
[j
].str
, len
) == 0)
6503 if (gotrel
[j
].rel
[object_64bit
] != 0)
6506 char *tmpbuf
, *past_reloc
;
6508 *rel
= gotrel
[j
].rel
[object_64bit
];
6514 if (flag_code
!= CODE_64BIT
)
6516 types
->bitfield
.imm32
= 1;
6517 types
->bitfield
.disp32
= 1;
6520 *types
= gotrel
[j
].types64
;
6523 if (GOT_symbol
== NULL
)
6524 GOT_symbol
= symbol_find_or_make (GLOBAL_OFFSET_TABLE_NAME
);
6526 /* The length of the first part of our input line. */
6527 first
= cp
- input_line_pointer
;
6529 /* The second part goes from after the reloc token until
6530 (and including) an end_of_line char or comma. */
6531 past_reloc
= cp
+ 1 + len
;
6533 while (!is_end_of_line
[(unsigned char) *cp
] && *cp
!= ',')
6535 second
= cp
+ 1 - past_reloc
;
6537 /* Allocate and copy string. The trailing NUL shouldn't
6538 be necessary, but be safe. */
6539 tmpbuf
= (char *) xmalloc (first
+ second
+ 2);
6540 memcpy (tmpbuf
, input_line_pointer
, first
);
6541 if (second
!= 0 && *past_reloc
!= ' ')
6542 /* Replace the relocation token with ' ', so that
6543 errors like foo@GOTOFF1 will be detected. */
6544 tmpbuf
[first
++] = ' ';
6545 memcpy (tmpbuf
+ first
, past_reloc
, second
);
6546 tmpbuf
[first
+ second
] = '\0';
6550 as_bad (_("@%s reloc is not supported with %d-bit output format"),
6551 gotrel
[j
].str
, 1 << (5 + object_64bit
));
6556 /* Might be a symbol version string. Don't as_bad here. */
6561 x86_cons (expressionS
*exp
, int size
)
6563 intel_syntax
= -intel_syntax
;
6566 if (size
== 4 || (object_64bit
&& size
== 8))
6568 /* Handle @GOTOFF and the like in an expression. */
6570 char *gotfree_input_line
;
6573 save
= input_line_pointer
;
6574 gotfree_input_line
= lex_got (&got_reloc
, &adjust
, NULL
);
6575 if (gotfree_input_line
)
6576 input_line_pointer
= gotfree_input_line
;
6580 if (gotfree_input_line
)
6582 /* expression () has merrily parsed up to the end of line,
6583 or a comma - in the wrong buffer. Transfer how far
6584 input_line_pointer has moved to the right buffer. */
6585 input_line_pointer
= (save
6586 + (input_line_pointer
- gotfree_input_line
)
6588 free (gotfree_input_line
);
6589 if (exp
->X_op
== O_constant
6590 || exp
->X_op
== O_absent
6591 || exp
->X_op
== O_illegal
6592 || exp
->X_op
== O_register
6593 || exp
->X_op
== O_big
)
6595 char c
= *input_line_pointer
;
6596 *input_line_pointer
= 0;
6597 as_bad (_("missing or invalid expression `%s'"), save
);
6598 *input_line_pointer
= c
;
6605 intel_syntax
= -intel_syntax
;
6608 i386_intel_simplify (exp
);
6613 signed_cons (int size
)
6615 if (flag_code
== CODE_64BIT
)
6623 pe_directive_secrel (dummy
)
6624 int dummy ATTRIBUTE_UNUSED
;
6631 if (exp
.X_op
== O_symbol
)
6632 exp
.X_op
= O_secrel
;
6634 emit_expr (&exp
, 4);
6636 while (*input_line_pointer
++ == ',');
6638 input_line_pointer
--;
6639 demand_empty_rest_of_line ();
6644 i386_immediate (char *imm_start
)
6646 char *save_input_line_pointer
;
6647 char *gotfree_input_line
;
6650 i386_operand_type types
;
6652 operand_type_set (&types
, ~0);
6654 if (i
.imm_operands
== MAX_IMMEDIATE_OPERANDS
)
6656 as_bad (_("at most %d immediate operands are allowed"),
6657 MAX_IMMEDIATE_OPERANDS
);
6661 exp
= &im_expressions
[i
.imm_operands
++];
6662 i
.op
[this_operand
].imms
= exp
;
6664 if (is_space_char (*imm_start
))
6667 save_input_line_pointer
= input_line_pointer
;
6668 input_line_pointer
= imm_start
;
6670 gotfree_input_line
= lex_got (&i
.reloc
[this_operand
], NULL
, &types
);
6671 if (gotfree_input_line
)
6672 input_line_pointer
= gotfree_input_line
;
6674 exp_seg
= expression (exp
);
6677 if (*input_line_pointer
)
6678 as_bad (_("junk `%s' after expression"), input_line_pointer
);
6680 input_line_pointer
= save_input_line_pointer
;
6681 if (gotfree_input_line
)
6683 free (gotfree_input_line
);
6685 if (exp
->X_op
== O_constant
|| exp
->X_op
== O_register
)
6686 exp
->X_op
= O_illegal
;
6689 return i386_finalize_immediate (exp_seg
, exp
, types
, imm_start
);
6693 i386_finalize_immediate (segT exp_seg ATTRIBUTE_UNUSED
, expressionS
*exp
,
6694 i386_operand_type types
, const char *imm_start
)
6696 if (exp
->X_op
== O_absent
|| exp
->X_op
== O_illegal
|| exp
->X_op
== O_big
)
6699 as_bad (_("missing or invalid immediate expression `%s'"),
6703 else if (exp
->X_op
== O_constant
)
6705 /* Size it properly later. */
6706 i
.types
[this_operand
].bitfield
.imm64
= 1;
6707 /* If not 64bit, sign extend val. */
6708 if (flag_code
!= CODE_64BIT
6709 && (exp
->X_add_number
& ~(((addressT
) 2 << 31) - 1)) == 0)
6711 = (exp
->X_add_number
^ ((addressT
) 1 << 31)) - ((addressT
) 1 << 31);
6713 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
6714 else if (OUTPUT_FLAVOR
== bfd_target_aout_flavour
6715 && exp_seg
!= absolute_section
6716 && exp_seg
!= text_section
6717 && exp_seg
!= data_section
6718 && exp_seg
!= bss_section
6719 && exp_seg
!= undefined_section
6720 && !bfd_is_com_section (exp_seg
))
6722 as_bad (_("unimplemented segment %s in operand"), exp_seg
->name
);
6726 else if (!intel_syntax
&& exp
->X_op
== O_register
)
6729 as_bad (_("illegal immediate register operand %s"), imm_start
);
6734 /* This is an address. The size of the address will be
6735 determined later, depending on destination register,
6736 suffix, or the default for the section. */
6737 i
.types
[this_operand
].bitfield
.imm8
= 1;
6738 i
.types
[this_operand
].bitfield
.imm16
= 1;
6739 i
.types
[this_operand
].bitfield
.imm32
= 1;
6740 i
.types
[this_operand
].bitfield
.imm32s
= 1;
6741 i
.types
[this_operand
].bitfield
.imm64
= 1;
6742 i
.types
[this_operand
] = operand_type_and (i
.types
[this_operand
],
6750 i386_scale (char *scale
)
6753 char *save
= input_line_pointer
;
6755 input_line_pointer
= scale
;
6756 val
= get_absolute_expression ();
6761 i
.log2_scale_factor
= 0;
6764 i
.log2_scale_factor
= 1;
6767 i
.log2_scale_factor
= 2;
6770 i
.log2_scale_factor
= 3;
6774 char sep
= *input_line_pointer
;
6776 *input_line_pointer
= '\0';
6777 as_bad (_("expecting scale factor of 1, 2, 4, or 8: got `%s'"),
6779 *input_line_pointer
= sep
;
6780 input_line_pointer
= save
;
6784 if (i
.log2_scale_factor
!= 0 && i
.index_reg
== 0)
6786 as_warn (_("scale factor of %d without an index register"),
6787 1 << i
.log2_scale_factor
);
6788 i
.log2_scale_factor
= 0;
6790 scale
= input_line_pointer
;
6791 input_line_pointer
= save
;
6796 i386_displacement (char *disp_start
, char *disp_end
)
6800 char *save_input_line_pointer
;
6801 char *gotfree_input_line
;
6803 i386_operand_type bigdisp
, types
= anydisp
;
6806 if (i
.disp_operands
== MAX_MEMORY_OPERANDS
)
6808 as_bad (_("at most %d displacement operands are allowed"),
6809 MAX_MEMORY_OPERANDS
);
6813 operand_type_set (&bigdisp
, 0);
6814 if ((i
.types
[this_operand
].bitfield
.jumpabsolute
)
6815 || (!current_templates
->start
->opcode_modifier
.jump
6816 && !current_templates
->start
->opcode_modifier
.jumpdword
))
6818 bigdisp
.bitfield
.disp32
= 1;
6819 override
= (i
.prefix
[ADDR_PREFIX
] != 0);
6820 if (flag_code
== CODE_64BIT
)
6824 bigdisp
.bitfield
.disp32s
= 1;
6825 bigdisp
.bitfield
.disp64
= 1;
6828 else if ((flag_code
== CODE_16BIT
) ^ override
)
6830 bigdisp
.bitfield
.disp32
= 0;
6831 bigdisp
.bitfield
.disp16
= 1;
6836 /* For PC-relative branches, the width of the displacement
6837 is dependent upon data size, not address size. */
6838 override
= (i
.prefix
[DATA_PREFIX
] != 0);
6839 if (flag_code
== CODE_64BIT
)
6841 if (override
|| i
.suffix
== WORD_MNEM_SUFFIX
)
6842 bigdisp
.bitfield
.disp16
= 1;
6845 bigdisp
.bitfield
.disp32
= 1;
6846 bigdisp
.bitfield
.disp32s
= 1;
6852 override
= (i
.suffix
== (flag_code
!= CODE_16BIT
6854 : LONG_MNEM_SUFFIX
));
6855 bigdisp
.bitfield
.disp32
= 1;
6856 if ((flag_code
== CODE_16BIT
) ^ override
)
6858 bigdisp
.bitfield
.disp32
= 0;
6859 bigdisp
.bitfield
.disp16
= 1;
6863 i
.types
[this_operand
] = operand_type_or (i
.types
[this_operand
],
6866 exp
= &disp_expressions
[i
.disp_operands
];
6867 i
.op
[this_operand
].disps
= exp
;
6869 save_input_line_pointer
= input_line_pointer
;
6870 input_line_pointer
= disp_start
;
6871 END_STRING_AND_SAVE (disp_end
);
6873 #ifndef GCC_ASM_O_HACK
6874 #define GCC_ASM_O_HACK 0
6877 END_STRING_AND_SAVE (disp_end
+ 1);
6878 if (i
.types
[this_operand
].bitfield
.baseIndex
6879 && displacement_string_end
[-1] == '+')
6881 /* This hack is to avoid a warning when using the "o"
6882 constraint within gcc asm statements.
6885 #define _set_tssldt_desc(n,addr,limit,type) \
6886 __asm__ __volatile__ ( \
6888 "movw %w1,2+%0\n\t" \
6890 "movb %b1,4+%0\n\t" \
6891 "movb %4,5+%0\n\t" \
6892 "movb $0,6+%0\n\t" \
6893 "movb %h1,7+%0\n\t" \
6895 : "=o"(*(n)) : "q" (addr), "ri"(limit), "i"(type))
6897 This works great except that the output assembler ends
6898 up looking a bit weird if it turns out that there is
6899 no offset. You end up producing code that looks like:
6912 So here we provide the missing zero. */
6914 *displacement_string_end
= '0';
6917 gotfree_input_line
= lex_got (&i
.reloc
[this_operand
], NULL
, &types
);
6918 if (gotfree_input_line
)
6919 input_line_pointer
= gotfree_input_line
;
6921 exp_seg
= expression (exp
);
6924 if (*input_line_pointer
)
6925 as_bad (_("junk `%s' after expression"), input_line_pointer
);
6927 RESTORE_END_STRING (disp_end
+ 1);
6929 input_line_pointer
= save_input_line_pointer
;
6930 if (gotfree_input_line
)
6932 free (gotfree_input_line
);
6934 if (exp
->X_op
== O_constant
|| exp
->X_op
== O_register
)
6935 exp
->X_op
= O_illegal
;
6938 ret
= i386_finalize_displacement (exp_seg
, exp
, types
, disp_start
);
6940 RESTORE_END_STRING (disp_end
);
6946 i386_finalize_displacement (segT exp_seg ATTRIBUTE_UNUSED
, expressionS
*exp
,
6947 i386_operand_type types
, const char *disp_start
)
6949 i386_operand_type bigdisp
;
6952 /* We do this to make sure that the section symbol is in
6953 the symbol table. We will ultimately change the relocation
6954 to be relative to the beginning of the section. */
6955 if (i
.reloc
[this_operand
] == BFD_RELOC_386_GOTOFF
6956 || i
.reloc
[this_operand
] == BFD_RELOC_X86_64_GOTPCREL
6957 || i
.reloc
[this_operand
] == BFD_RELOC_X86_64_GOTOFF64
)
6959 if (exp
->X_op
!= O_symbol
)
6962 if (S_IS_LOCAL (exp
->X_add_symbol
)
6963 && S_GET_SEGMENT (exp
->X_add_symbol
) != undefined_section
6964 && S_GET_SEGMENT (exp
->X_add_symbol
) != expr_section
)
6965 section_symbol (S_GET_SEGMENT (exp
->X_add_symbol
));
6966 exp
->X_op
= O_subtract
;
6967 exp
->X_op_symbol
= GOT_symbol
;
6968 if (i
.reloc
[this_operand
] == BFD_RELOC_X86_64_GOTPCREL
)
6969 i
.reloc
[this_operand
] = BFD_RELOC_32_PCREL
;
6970 else if (i
.reloc
[this_operand
] == BFD_RELOC_X86_64_GOTOFF64
)
6971 i
.reloc
[this_operand
] = BFD_RELOC_64
;
6973 i
.reloc
[this_operand
] = BFD_RELOC_32
;
6976 else if (exp
->X_op
== O_absent
6977 || exp
->X_op
== O_illegal
6978 || exp
->X_op
== O_big
)
6981 as_bad (_("missing or invalid displacement expression `%s'"),
6986 else if (flag_code
== CODE_64BIT
6987 && !i
.prefix
[ADDR_PREFIX
]
6988 && exp
->X_op
== O_constant
)
6990 /* Since displacement is signed extended to 64bit, don't allow
6991 disp32 and turn off disp32s if they are out of range. */
6992 i
.types
[this_operand
].bitfield
.disp32
= 0;
6993 if (!fits_in_signed_long (exp
->X_add_number
))
6995 i
.types
[this_operand
].bitfield
.disp32s
= 0;
6996 if (i
.types
[this_operand
].bitfield
.baseindex
)
6998 as_bad (_("0x%lx out range of signed 32bit displacement"),
6999 (long) exp
->X_add_number
);
7005 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
7006 else if (exp
->X_op
!= O_constant
7007 && OUTPUT_FLAVOR
== bfd_target_aout_flavour
7008 && exp_seg
!= absolute_section
7009 && exp_seg
!= text_section
7010 && exp_seg
!= data_section
7011 && exp_seg
!= bss_section
7012 && exp_seg
!= undefined_section
7013 && !bfd_is_com_section (exp_seg
))
7015 as_bad (_("unimplemented segment %s in operand"), exp_seg
->name
);
7020 /* Check if this is a displacement only operand. */
7021 bigdisp
= i
.types
[this_operand
];
7022 bigdisp
.bitfield
.disp8
= 0;
7023 bigdisp
.bitfield
.disp16
= 0;
7024 bigdisp
.bitfield
.disp32
= 0;
7025 bigdisp
.bitfield
.disp32s
= 0;
7026 bigdisp
.bitfield
.disp64
= 0;
7027 if (operand_type_all_zero (&bigdisp
))
7028 i
.types
[this_operand
] = operand_type_and (i
.types
[this_operand
],
7034 /* Make sure the memory operand we've been dealt is valid.
7035 Return 1 on success, 0 on a failure. */
7038 i386_index_check (const char *operand_string
)
7041 const char *kind
= "base/index";
7042 #if INFER_ADDR_PREFIX
7048 if (current_templates
->start
->opcode_modifier
.isstring
7049 && !current_templates
->start
->opcode_modifier
.immext
7050 && (current_templates
->end
[-1].opcode_modifier
.isstring
7053 /* Memory operands of string insns are special in that they only allow
7054 a single register (rDI, rSI, or rBX) as their memory address. */
7055 unsigned int expected
;
7057 kind
= "string address";
7059 if (current_templates
->start
->opcode_modifier
.w
)
7061 i386_operand_type type
= current_templates
->end
[-1].operand_types
[0];
7063 if (!type
.bitfield
.baseindex
7064 || ((!i
.mem_operands
!= !intel_syntax
)
7065 && current_templates
->end
[-1].operand_types
[1]
7066 .bitfield
.baseindex
))
7067 type
= current_templates
->end
[-1].operand_types
[1];
7068 expected
= type
.bitfield
.esseg
? 7 /* rDI */ : 6 /* rSI */;
7071 expected
= 3 /* rBX */;
7073 if (!i
.base_reg
|| i
.index_reg
7074 || operand_type_check (i
.types
[this_operand
], disp
))
7076 else if (!(flag_code
== CODE_64BIT
7077 ? i
.prefix
[ADDR_PREFIX
]
7078 ? i
.base_reg
->reg_type
.bitfield
.reg32
7079 : i
.base_reg
->reg_type
.bitfield
.reg64
7080 : (flag_code
== CODE_16BIT
) ^ !i
.prefix
[ADDR_PREFIX
]
7081 ? i
.base_reg
->reg_type
.bitfield
.reg32
7082 : i
.base_reg
->reg_type
.bitfield
.reg16
))
7084 else if (i
.base_reg
->reg_num
!= expected
)
7091 for (j
= 0; j
< i386_regtab_size
; ++j
)
7092 if ((flag_code
== CODE_64BIT
7093 ? i
.prefix
[ADDR_PREFIX
]
7094 ? i386_regtab
[j
].reg_type
.bitfield
.reg32
7095 : i386_regtab
[j
].reg_type
.bitfield
.reg64
7096 : (flag_code
== CODE_16BIT
) ^ !i
.prefix
[ADDR_PREFIX
]
7097 ? i386_regtab
[j
].reg_type
.bitfield
.reg32
7098 : i386_regtab
[j
].reg_type
.bitfield
.reg16
)
7099 && i386_regtab
[j
].reg_num
== expected
)
7101 gas_assert (j
< i386_regtab_size
);
7102 as_warn (_("`%s' is not valid here (expected `%c%s%s%c')"),
7104 intel_syntax
? '[' : '(',
7106 i386_regtab
[j
].reg_name
,
7107 intel_syntax
? ']' : ')');
7111 else if (flag_code
== CODE_64BIT
)
7114 && ((i
.prefix
[ADDR_PREFIX
] == 0
7115 && !i
.base_reg
->reg_type
.bitfield
.reg64
)
7116 || (i
.prefix
[ADDR_PREFIX
]
7117 && !i
.base_reg
->reg_type
.bitfield
.reg32
))
7119 || i
.base_reg
->reg_num
!=
7120 (i
.prefix
[ADDR_PREFIX
] == 0 ? RegRip
: RegEip
)))
7122 && (!i
.index_reg
->reg_type
.bitfield
.baseindex
7123 || (i
.prefix
[ADDR_PREFIX
] == 0
7124 && i
.index_reg
->reg_num
!= RegRiz
7125 && !i
.index_reg
->reg_type
.bitfield
.reg64
7127 || (i
.prefix
[ADDR_PREFIX
]
7128 && i
.index_reg
->reg_num
!= RegEiz
7129 && !i
.index_reg
->reg_type
.bitfield
.reg32
))))
7134 if ((flag_code
== CODE_16BIT
) ^ (i
.prefix
[ADDR_PREFIX
] != 0))
7138 && (!i
.base_reg
->reg_type
.bitfield
.reg16
7139 || !i
.base_reg
->reg_type
.bitfield
.baseindex
))
7141 && (!i
.index_reg
->reg_type
.bitfield
.reg16
7142 || !i
.index_reg
->reg_type
.bitfield
.baseindex
7144 && i
.base_reg
->reg_num
< 6
7145 && i
.index_reg
->reg_num
>= 6
7146 && i
.log2_scale_factor
== 0))))
7153 && !i
.base_reg
->reg_type
.bitfield
.reg32
)
7155 && ((!i
.index_reg
->reg_type
.bitfield
.reg32
7156 && i
.index_reg
->reg_num
!= RegEiz
)
7157 || !i
.index_reg
->reg_type
.bitfield
.baseindex
)))
7163 #if INFER_ADDR_PREFIX
7164 if (!i
.mem_operands
&& !i
.prefix
[ADDR_PREFIX
])
7166 i
.prefix
[ADDR_PREFIX
] = ADDR_PREFIX_OPCODE
;
7168 /* Change the size of any displacement too. At most one of
7169 Disp16 or Disp32 is set.
7170 FIXME. There doesn't seem to be any real need for separate
7171 Disp16 and Disp32 flags. The same goes for Imm16 and Imm32.
7172 Removing them would probably clean up the code quite a lot. */
7173 if (flag_code
!= CODE_64BIT
7174 && (i
.types
[this_operand
].bitfield
.disp16
7175 || i
.types
[this_operand
].bitfield
.disp32
))
7176 i
.types
[this_operand
]
7177 = operand_type_xor (i
.types
[this_operand
], disp16_32
);
7182 as_bad (_("`%s' is not a valid %s expression"),
7187 as_bad (_("`%s' is not a valid %s-bit %s expression"),
7189 flag_code_names
[i
.prefix
[ADDR_PREFIX
]
7190 ? flag_code
== CODE_32BIT
7199 /* Parse OPERAND_STRING into the i386_insn structure I. Returns zero
7203 i386_att_operand (char *operand_string
)
7207 char *op_string
= operand_string
;
7209 if (is_space_char (*op_string
))
7212 /* We check for an absolute prefix (differentiating,
7213 for example, 'jmp pc_relative_label' from 'jmp *absolute_label'. */
7214 if (*op_string
== ABSOLUTE_PREFIX
)
7217 if (is_space_char (*op_string
))
7219 i
.types
[this_operand
].bitfield
.jumpabsolute
= 1;
7222 /* Check if operand is a register. */
7223 if ((r
= parse_register (op_string
, &end_op
)) != NULL
)
7225 i386_operand_type temp
;
7227 /* Check for a segment override by searching for ':' after a
7228 segment register. */
7230 if (is_space_char (*op_string
))
7232 if (*op_string
== ':'
7233 && (r
->reg_type
.bitfield
.sreg2
7234 || r
->reg_type
.bitfield
.sreg3
))
7239 i
.seg
[i
.mem_operands
] = &es
;
7242 i
.seg
[i
.mem_operands
] = &cs
;
7245 i
.seg
[i
.mem_operands
] = &ss
;
7248 i
.seg
[i
.mem_operands
] = &ds
;
7251 i
.seg
[i
.mem_operands
] = &fs
;
7254 i
.seg
[i
.mem_operands
] = &gs
;
7258 /* Skip the ':' and whitespace. */
7260 if (is_space_char (*op_string
))
7263 if (!is_digit_char (*op_string
)
7264 && !is_identifier_char (*op_string
)
7265 && *op_string
!= '('
7266 && *op_string
!= ABSOLUTE_PREFIX
)
7268 as_bad (_("bad memory operand `%s'"), op_string
);
7271 /* Handle case of %es:*foo. */
7272 if (*op_string
== ABSOLUTE_PREFIX
)
7275 if (is_space_char (*op_string
))
7277 i
.types
[this_operand
].bitfield
.jumpabsolute
= 1;
7279 goto do_memory_reference
;
7283 as_bad (_("junk `%s' after register"), op_string
);
7287 temp
.bitfield
.baseindex
= 0;
7288 i
.types
[this_operand
] = operand_type_or (i
.types
[this_operand
],
7290 i
.types
[this_operand
].bitfield
.unspecified
= 0;
7291 i
.op
[this_operand
].regs
= r
;
7294 else if (*op_string
== REGISTER_PREFIX
)
7296 as_bad (_("bad register name `%s'"), op_string
);
7299 else if (*op_string
== IMMEDIATE_PREFIX
)
7302 if (i
.types
[this_operand
].bitfield
.jumpabsolute
)
7304 as_bad (_("immediate operand illegal with absolute jump"));
7307 if (!i386_immediate (op_string
))
7310 else if (is_digit_char (*op_string
)
7311 || is_identifier_char (*op_string
)
7312 || *op_string
== '(')
7314 /* This is a memory reference of some sort. */
7317 /* Start and end of displacement string expression (if found). */
7318 char *displacement_string_start
;
7319 char *displacement_string_end
;
7321 do_memory_reference
:
7322 if ((i
.mem_operands
== 1
7323 && !current_templates
->start
->opcode_modifier
.isstring
)
7324 || i
.mem_operands
== 2)
7326 as_bad (_("too many memory references for `%s'"),
7327 current_templates
->start
->name
);
7331 /* Check for base index form. We detect the base index form by
7332 looking for an ')' at the end of the operand, searching
7333 for the '(' matching it, and finding a REGISTER_PREFIX or ','
7335 base_string
= op_string
+ strlen (op_string
);
7338 if (is_space_char (*base_string
))
7341 /* If we only have a displacement, set-up for it to be parsed later. */
7342 displacement_string_start
= op_string
;
7343 displacement_string_end
= base_string
+ 1;
7345 if (*base_string
== ')')
7348 unsigned int parens_balanced
= 1;
7349 /* We've already checked that the number of left & right ()'s are
7350 equal, so this loop will not be infinite. */
7354 if (*base_string
== ')')
7356 if (*base_string
== '(')
7359 while (parens_balanced
);
7361 temp_string
= base_string
;
7363 /* Skip past '(' and whitespace. */
7365 if (is_space_char (*base_string
))
7368 if (*base_string
== ','
7369 || ((i
.base_reg
= parse_register (base_string
, &end_op
))
7372 displacement_string_end
= temp_string
;
7374 i
.types
[this_operand
].bitfield
.baseindex
= 1;
7378 base_string
= end_op
;
7379 if (is_space_char (*base_string
))
7383 /* There may be an index reg or scale factor here. */
7384 if (*base_string
== ',')
7387 if (is_space_char (*base_string
))
7390 if ((i
.index_reg
= parse_register (base_string
, &end_op
))
7393 base_string
= end_op
;
7394 if (is_space_char (*base_string
))
7396 if (*base_string
== ',')
7399 if (is_space_char (*base_string
))
7402 else if (*base_string
!= ')')
7404 as_bad (_("expecting `,' or `)' "
7405 "after index register in `%s'"),
7410 else if (*base_string
== REGISTER_PREFIX
)
7412 as_bad (_("bad register name `%s'"), base_string
);
7416 /* Check for scale factor. */
7417 if (*base_string
!= ')')
7419 char *end_scale
= i386_scale (base_string
);
7424 base_string
= end_scale
;
7425 if (is_space_char (*base_string
))
7427 if (*base_string
!= ')')
7429 as_bad (_("expecting `)' "
7430 "after scale factor in `%s'"),
7435 else if (!i
.index_reg
)
7437 as_bad (_("expecting index register or scale factor "
7438 "after `,'; got '%c'"),
7443 else if (*base_string
!= ')')
7445 as_bad (_("expecting `,' or `)' "
7446 "after base register in `%s'"),
7451 else if (*base_string
== REGISTER_PREFIX
)
7453 as_bad (_("bad register name `%s'"), base_string
);
7458 /* If there's an expression beginning the operand, parse it,
7459 assuming displacement_string_start and
7460 displacement_string_end are meaningful. */
7461 if (displacement_string_start
!= displacement_string_end
)
7463 if (!i386_displacement (displacement_string_start
,
7464 displacement_string_end
))
7468 /* Special case for (%dx) while doing input/output op. */
7470 && operand_type_equal (&i
.base_reg
->reg_type
,
7471 ®16_inoutportreg
)
7473 && i
.log2_scale_factor
== 0
7474 && i
.seg
[i
.mem_operands
] == 0
7475 && !operand_type_check (i
.types
[this_operand
], disp
))
7477 i
.types
[this_operand
] = inoutportreg
;
7481 if (i386_index_check (operand_string
) == 0)
7483 i
.types
[this_operand
].bitfield
.mem
= 1;
7488 /* It's not a memory operand; argh! */
7489 as_bad (_("invalid char %s beginning operand %d `%s'"),
7490 output_invalid (*op_string
),
7495 return 1; /* Normal return. */
7498 /* md_estimate_size_before_relax()
7500 Called just before relax() for rs_machine_dependent frags. The x86
7501 assembler uses these frags to handle variable size jump
7504 Any symbol that is now undefined will not become defined.
7505 Return the correct fr_subtype in the frag.
7506 Return the initial "guess for variable size of frag" to caller.
7507 The guess is actually the growth beyond the fixed part. Whatever
7508 we do to grow the fixed or variable part contributes to our
7512 md_estimate_size_before_relax (fragP
, segment
)
7516 /* We've already got fragP->fr_subtype right; all we have to do is
7517 check for un-relaxable symbols. On an ELF system, we can't relax
7518 an externally visible symbol, because it may be overridden by a
7520 if (S_GET_SEGMENT (fragP
->fr_symbol
) != segment
7521 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7523 && (S_IS_EXTERNAL (fragP
->fr_symbol
)
7524 || S_IS_WEAK (fragP
->fr_symbol
)
7525 || ((symbol_get_bfdsym (fragP
->fr_symbol
)->flags
7526 & BSF_GNU_INDIRECT_FUNCTION
))))
7528 #if defined (OBJ_COFF) && defined (TE_PE)
7529 || (OUTPUT_FLAVOR
== bfd_target_coff_flavour
7530 && S_IS_WEAK (fragP
->fr_symbol
))
7534 /* Symbol is undefined in this segment, or we need to keep a
7535 reloc so that weak symbols can be overridden. */
7536 int size
= (fragP
->fr_subtype
& CODE16
) ? 2 : 4;
7537 enum bfd_reloc_code_real reloc_type
;
7538 unsigned char *opcode
;
7541 if (fragP
->fr_var
!= NO_RELOC
)
7542 reloc_type
= (enum bfd_reloc_code_real
) fragP
->fr_var
;
7544 reloc_type
= BFD_RELOC_16_PCREL
;
7546 reloc_type
= BFD_RELOC_32_PCREL
;
7548 old_fr_fix
= fragP
->fr_fix
;
7549 opcode
= (unsigned char *) fragP
->fr_opcode
;
7551 switch (TYPE_FROM_RELAX_STATE (fragP
->fr_subtype
))
7554 /* Make jmp (0xeb) a (d)word displacement jump. */
7556 fragP
->fr_fix
+= size
;
7557 fix_new (fragP
, old_fr_fix
, size
,
7559 fragP
->fr_offset
, 1,
7565 && (!no_cond_jump_promotion
|| fragP
->fr_var
!= NO_RELOC
))
7567 /* Negate the condition, and branch past an
7568 unconditional jump. */
7571 /* Insert an unconditional jump. */
7573 /* We added two extra opcode bytes, and have a two byte
7575 fragP
->fr_fix
+= 2 + 2;
7576 fix_new (fragP
, old_fr_fix
+ 2, 2,
7578 fragP
->fr_offset
, 1,
7585 if (no_cond_jump_promotion
&& fragP
->fr_var
== NO_RELOC
)
7590 fixP
= fix_new (fragP
, old_fr_fix
, 1,
7592 fragP
->fr_offset
, 1,
7594 fixP
->fx_signed
= 1;
7598 /* This changes the byte-displacement jump 0x7N
7599 to the (d)word-displacement jump 0x0f,0x8N. */
7600 opcode
[1] = opcode
[0] + 0x10;
7601 opcode
[0] = TWO_BYTE_OPCODE_ESCAPE
;
7602 /* We've added an opcode byte. */
7603 fragP
->fr_fix
+= 1 + size
;
7604 fix_new (fragP
, old_fr_fix
+ 1, size
,
7606 fragP
->fr_offset
, 1,
7611 BAD_CASE (fragP
->fr_subtype
);
7615 return fragP
->fr_fix
- old_fr_fix
;
7618 /* Guess size depending on current relax state. Initially the relax
7619 state will correspond to a short jump and we return 1, because
7620 the variable part of the frag (the branch offset) is one byte
7621 long. However, we can relax a section more than once and in that
7622 case we must either set fr_subtype back to the unrelaxed state,
7623 or return the value for the appropriate branch. */
7624 return md_relax_table
[fragP
->fr_subtype
].rlx_length
;
7627 /* Called after relax() is finished.
7629 In: Address of frag.
7630 fr_type == rs_machine_dependent.
7631 fr_subtype is what the address relaxed to.
7633 Out: Any fixSs and constants are set up.
7634 Caller will turn frag into a ".space 0". */
7637 md_convert_frag (abfd
, sec
, fragP
)
7638 bfd
*abfd ATTRIBUTE_UNUSED
;
7639 segT sec ATTRIBUTE_UNUSED
;
7642 unsigned char *opcode
;
7643 unsigned char *where_to_put_displacement
= NULL
;
7644 offsetT target_address
;
7645 offsetT opcode_address
;
7646 unsigned int extension
= 0;
7647 offsetT displacement_from_opcode_start
;
7649 opcode
= (unsigned char *) fragP
->fr_opcode
;
7651 /* Address we want to reach in file space. */
7652 target_address
= S_GET_VALUE (fragP
->fr_symbol
) + fragP
->fr_offset
;
7654 /* Address opcode resides at in file space. */
7655 opcode_address
= fragP
->fr_address
+ fragP
->fr_fix
;
7657 /* Displacement from opcode start to fill into instruction. */
7658 displacement_from_opcode_start
= target_address
- opcode_address
;
7660 if ((fragP
->fr_subtype
& BIG
) == 0)
7662 /* Don't have to change opcode. */
7663 extension
= 1; /* 1 opcode + 1 displacement */
7664 where_to_put_displacement
= &opcode
[1];
7668 if (no_cond_jump_promotion
7669 && TYPE_FROM_RELAX_STATE (fragP
->fr_subtype
) != UNCOND_JUMP
)
7670 as_warn_where (fragP
->fr_file
, fragP
->fr_line
,
7671 _("long jump required"));
7673 switch (fragP
->fr_subtype
)
7675 case ENCODE_RELAX_STATE (UNCOND_JUMP
, BIG
):
7676 extension
= 4; /* 1 opcode + 4 displacement */
7678 where_to_put_displacement
= &opcode
[1];
7681 case ENCODE_RELAX_STATE (UNCOND_JUMP
, BIG16
):
7682 extension
= 2; /* 1 opcode + 2 displacement */
7684 where_to_put_displacement
= &opcode
[1];
7687 case ENCODE_RELAX_STATE (COND_JUMP
, BIG
):
7688 case ENCODE_RELAX_STATE (COND_JUMP86
, BIG
):
7689 extension
= 5; /* 2 opcode + 4 displacement */
7690 opcode
[1] = opcode
[0] + 0x10;
7691 opcode
[0] = TWO_BYTE_OPCODE_ESCAPE
;
7692 where_to_put_displacement
= &opcode
[2];
7695 case ENCODE_RELAX_STATE (COND_JUMP
, BIG16
):
7696 extension
= 3; /* 2 opcode + 2 displacement */
7697 opcode
[1] = opcode
[0] + 0x10;
7698 opcode
[0] = TWO_BYTE_OPCODE_ESCAPE
;
7699 where_to_put_displacement
= &opcode
[2];
7702 case ENCODE_RELAX_STATE (COND_JUMP86
, BIG16
):
7707 where_to_put_displacement
= &opcode
[3];
7711 BAD_CASE (fragP
->fr_subtype
);
7716 /* If size if less then four we are sure that the operand fits,
7717 but if it's 4, then it could be that the displacement is larger
7719 if (DISP_SIZE_FROM_RELAX_STATE (fragP
->fr_subtype
) == 4
7721 && ((addressT
) (displacement_from_opcode_start
- extension
7722 + ((addressT
) 1 << 31))
7723 > (((addressT
) 2 << 31) - 1)))
7725 as_bad_where (fragP
->fr_file
, fragP
->fr_line
,
7726 _("jump target out of range"));
7727 /* Make us emit 0. */
7728 displacement_from_opcode_start
= extension
;
7730 /* Now put displacement after opcode. */
7731 md_number_to_chars ((char *) where_to_put_displacement
,
7732 (valueT
) (displacement_from_opcode_start
- extension
),
7733 DISP_SIZE_FROM_RELAX_STATE (fragP
->fr_subtype
));
7734 fragP
->fr_fix
+= extension
;
7737 /* Apply a fixup (fixS) to segment data, once it has been determined
7738 by our caller that we have all the info we need to fix it up.
7740 On the 386, immediates, displacements, and data pointers are all in
7741 the same (little-endian) format, so we don't need to care about which
7745 md_apply_fix (fixP
, valP
, seg
)
7746 /* The fix we're to put in. */
7748 /* Pointer to the value of the bits. */
7750 /* Segment fix is from. */
7751 segT seg ATTRIBUTE_UNUSED
;
7753 char *p
= fixP
->fx_where
+ fixP
->fx_frag
->fr_literal
;
7754 valueT value
= *valP
;
7756 #if !defined (TE_Mach)
7759 switch (fixP
->fx_r_type
)
7765 fixP
->fx_r_type
= BFD_RELOC_64_PCREL
;
7768 case BFD_RELOC_X86_64_32S
:
7769 fixP
->fx_r_type
= BFD_RELOC_32_PCREL
;
7772 fixP
->fx_r_type
= BFD_RELOC_16_PCREL
;
7775 fixP
->fx_r_type
= BFD_RELOC_8_PCREL
;
7780 if (fixP
->fx_addsy
!= NULL
7781 && (fixP
->fx_r_type
== BFD_RELOC_32_PCREL
7782 || fixP
->fx_r_type
== BFD_RELOC_64_PCREL
7783 || fixP
->fx_r_type
== BFD_RELOC_16_PCREL
7784 || fixP
->fx_r_type
== BFD_RELOC_8_PCREL
)
7785 && !use_rela_relocations
)
7787 /* This is a hack. There should be a better way to handle this.
7788 This covers for the fact that bfd_install_relocation will
7789 subtract the current location (for partial_inplace, PC relative
7790 relocations); see more below. */
7794 || OUTPUT_FLAVOR
== bfd_target_coff_flavour
7797 value
+= fixP
->fx_where
+ fixP
->fx_frag
->fr_address
;
7799 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7802 segT sym_seg
= S_GET_SEGMENT (fixP
->fx_addsy
);
7805 || (symbol_section_p (fixP
->fx_addsy
)
7806 && sym_seg
!= absolute_section
))
7807 && !generic_force_reloc (fixP
))
7809 /* Yes, we add the values in twice. This is because
7810 bfd_install_relocation subtracts them out again. I think
7811 bfd_install_relocation is broken, but I don't dare change
7813 value
+= fixP
->fx_where
+ fixP
->fx_frag
->fr_address
;
7817 #if defined (OBJ_COFF) && defined (TE_PE)
7818 /* For some reason, the PE format does not store a
7819 section address offset for a PC relative symbol. */
7820 if (S_GET_SEGMENT (fixP
->fx_addsy
) != seg
7821 || S_IS_WEAK (fixP
->fx_addsy
))
7822 value
+= md_pcrel_from (fixP
);
7825 #if defined (OBJ_COFF) && defined (TE_PE)
7826 if (fixP
->fx_addsy
!= NULL
&& S_IS_WEAK (fixP
->fx_addsy
))
7828 value
-= S_GET_VALUE (fixP
->fx_addsy
);
7832 /* Fix a few things - the dynamic linker expects certain values here,
7833 and we must not disappoint it. */
7834 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7835 if (IS_ELF
&& fixP
->fx_addsy
)
7836 switch (fixP
->fx_r_type
)
7838 case BFD_RELOC_386_PLT32
:
7839 case BFD_RELOC_X86_64_PLT32
:
7840 /* Make the jump instruction point to the address of the operand. At
7841 runtime we merely add the offset to the actual PLT entry. */
7845 case BFD_RELOC_386_TLS_GD
:
7846 case BFD_RELOC_386_TLS_LDM
:
7847 case BFD_RELOC_386_TLS_IE_32
:
7848 case BFD_RELOC_386_TLS_IE
:
7849 case BFD_RELOC_386_TLS_GOTIE
:
7850 case BFD_RELOC_386_TLS_GOTDESC
:
7851 case BFD_RELOC_X86_64_TLSGD
:
7852 case BFD_RELOC_X86_64_TLSLD
:
7853 case BFD_RELOC_X86_64_GOTTPOFF
:
7854 case BFD_RELOC_X86_64_GOTPC32_TLSDESC
:
7855 value
= 0; /* Fully resolved at runtime. No addend. */
7857 case BFD_RELOC_386_TLS_LE
:
7858 case BFD_RELOC_386_TLS_LDO_32
:
7859 case BFD_RELOC_386_TLS_LE_32
:
7860 case BFD_RELOC_X86_64_DTPOFF32
:
7861 case BFD_RELOC_X86_64_DTPOFF64
:
7862 case BFD_RELOC_X86_64_TPOFF32
:
7863 case BFD_RELOC_X86_64_TPOFF64
:
7864 S_SET_THREAD_LOCAL (fixP
->fx_addsy
);
7867 case BFD_RELOC_386_TLS_DESC_CALL
:
7868 case BFD_RELOC_X86_64_TLSDESC_CALL
:
7869 value
= 0; /* Fully resolved at runtime. No addend. */
7870 S_SET_THREAD_LOCAL (fixP
->fx_addsy
);
7874 case BFD_RELOC_386_GOT32
:
7875 case BFD_RELOC_X86_64_GOT32
:
7876 value
= 0; /* Fully resolved at runtime. No addend. */
7879 case BFD_RELOC_VTABLE_INHERIT
:
7880 case BFD_RELOC_VTABLE_ENTRY
:
7887 #endif /* defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) */
7889 #endif /* !defined (TE_Mach) */
7891 /* Are we finished with this relocation now? */
7892 if (fixP
->fx_addsy
== NULL
)
7894 #if defined (OBJ_COFF) && defined (TE_PE)
7895 else if (fixP
->fx_addsy
!= NULL
&& S_IS_WEAK (fixP
->fx_addsy
))
7898 /* Remember value for tc_gen_reloc. */
7899 fixP
->fx_addnumber
= value
;
7900 /* Clear out the frag for now. */
7904 else if (use_rela_relocations
)
7906 fixP
->fx_no_overflow
= 1;
7907 /* Remember value for tc_gen_reloc. */
7908 fixP
->fx_addnumber
= value
;
7912 md_number_to_chars (p
, value
, fixP
->fx_size
);
7916 md_atof (int type
, char *litP
, int *sizeP
)
7918 /* This outputs the LITTLENUMs in REVERSE order;
7919 in accord with the bigendian 386. */
7920 return ieee_md_atof (type
, litP
, sizeP
, FALSE
);
7923 static char output_invalid_buf
[sizeof (unsigned char) * 2 + 6];
7926 output_invalid (int c
)
7929 snprintf (output_invalid_buf
, sizeof (output_invalid_buf
),
7932 snprintf (output_invalid_buf
, sizeof (output_invalid_buf
),
7933 "(0x%x)", (unsigned char) c
);
7934 return output_invalid_buf
;
7937 /* REG_STRING starts *before* REGISTER_PREFIX. */
7939 static const reg_entry
*
7940 parse_real_register (char *reg_string
, char **end_op
)
7942 char *s
= reg_string
;
7944 char reg_name_given
[MAX_REG_NAME_SIZE
+ 1];
7947 /* Skip possible REGISTER_PREFIX and possible whitespace. */
7948 if (*s
== REGISTER_PREFIX
)
7951 if (is_space_char (*s
))
7955 while ((*p
++ = register_chars
[(unsigned char) *s
]) != '\0')
7957 if (p
>= reg_name_given
+ MAX_REG_NAME_SIZE
)
7958 return (const reg_entry
*) NULL
;
7962 /* For naked regs, make sure that we are not dealing with an identifier.
7963 This prevents confusing an identifier like `eax_var' with register
7965 if (allow_naked_reg
&& identifier_chars
[(unsigned char) *s
])
7966 return (const reg_entry
*) NULL
;
7970 r
= (const reg_entry
*) hash_find (reg_hash
, reg_name_given
);
7972 /* Handle floating point regs, allowing spaces in the (i) part. */
7973 if (r
== i386_regtab
/* %st is first entry of table */)
7975 if (is_space_char (*s
))
7980 if (is_space_char (*s
))
7982 if (*s
>= '0' && *s
<= '7')
7986 if (is_space_char (*s
))
7991 r
= (const reg_entry
*) hash_find (reg_hash
, "st(0)");
7996 /* We have "%st(" then garbage. */
7997 return (const reg_entry
*) NULL
;
8001 if (r
== NULL
|| allow_pseudo_reg
)
8004 if (operand_type_all_zero (&r
->reg_type
))
8005 return (const reg_entry
*) NULL
;
8007 if ((r
->reg_type
.bitfield
.reg32
8008 || r
->reg_type
.bitfield
.sreg3
8009 || r
->reg_type
.bitfield
.control
8010 || r
->reg_type
.bitfield
.debug
8011 || r
->reg_type
.bitfield
.test
)
8012 && !cpu_arch_flags
.bitfield
.cpui386
)
8013 return (const reg_entry
*) NULL
;
8015 if (r
->reg_type
.bitfield
.floatreg
8016 && !cpu_arch_flags
.bitfield
.cpu8087
8017 && !cpu_arch_flags
.bitfield
.cpu287
8018 && !cpu_arch_flags
.bitfield
.cpu387
)
8019 return (const reg_entry
*) NULL
;
8021 if (r
->reg_type
.bitfield
.regmmx
&& !cpu_arch_flags
.bitfield
.cpummx
)
8022 return (const reg_entry
*) NULL
;
8024 if (r
->reg_type
.bitfield
.regxmm
&& !cpu_arch_flags
.bitfield
.cpusse
)
8025 return (const reg_entry
*) NULL
;
8027 if (r
->reg_type
.bitfield
.regymm
&& !cpu_arch_flags
.bitfield
.cpuavx
)
8028 return (const reg_entry
*) NULL
;
8030 /* Don't allow fake index register unless allow_index_reg isn't 0. */
8031 if (!allow_index_reg
8032 && (r
->reg_num
== RegEiz
|| r
->reg_num
== RegRiz
))
8033 return (const reg_entry
*) NULL
;
8035 if (((r
->reg_flags
& (RegRex64
| RegRex
))
8036 || r
->reg_type
.bitfield
.reg64
)
8037 && (!cpu_arch_flags
.bitfield
.cpulm
8038 || !operand_type_equal (&r
->reg_type
, &control
))
8039 && flag_code
!= CODE_64BIT
)
8040 return (const reg_entry
*) NULL
;
8042 if (r
->reg_type
.bitfield
.sreg3
&& r
->reg_num
== RegFlat
&& !intel_syntax
)
8043 return (const reg_entry
*) NULL
;
8048 /* REG_STRING starts *before* REGISTER_PREFIX. */
8050 static const reg_entry
*
8051 parse_register (char *reg_string
, char **end_op
)
8055 if (*reg_string
== REGISTER_PREFIX
|| allow_naked_reg
)
8056 r
= parse_real_register (reg_string
, end_op
);
8061 char *save
= input_line_pointer
;
8065 input_line_pointer
= reg_string
;
8066 c
= get_symbol_end ();
8067 symbolP
= symbol_find (reg_string
);
8068 if (symbolP
&& S_GET_SEGMENT (symbolP
) == reg_section
)
8070 const expressionS
*e
= symbol_get_value_expression (symbolP
);
8072 know (e
->X_op
== O_register
);
8073 know (e
->X_add_number
>= 0
8074 && (valueT
) e
->X_add_number
< i386_regtab_size
);
8075 r
= i386_regtab
+ e
->X_add_number
;
8076 *end_op
= input_line_pointer
;
8078 *input_line_pointer
= c
;
8079 input_line_pointer
= save
;
8085 i386_parse_name (char *name
, expressionS
*e
, char *nextcharP
)
8088 char *end
= input_line_pointer
;
8091 r
= parse_register (name
, &input_line_pointer
);
8092 if (r
&& end
<= input_line_pointer
)
8094 *nextcharP
= *input_line_pointer
;
8095 *input_line_pointer
= 0;
8096 e
->X_op
= O_register
;
8097 e
->X_add_number
= r
- i386_regtab
;
8100 input_line_pointer
= end
;
8102 return intel_syntax
? i386_intel_parse_name (name
, e
) : 0;
8106 md_operand (expressionS
*e
)
8111 switch (*input_line_pointer
)
8113 case REGISTER_PREFIX
:
8114 r
= parse_real_register (input_line_pointer
, &end
);
8117 e
->X_op
= O_register
;
8118 e
->X_add_number
= r
- i386_regtab
;
8119 input_line_pointer
= end
;
8124 gas_assert (intel_syntax
);
8125 end
= input_line_pointer
++;
8127 if (*input_line_pointer
== ']')
8129 ++input_line_pointer
;
8130 e
->X_op_symbol
= make_expr_symbol (e
);
8131 e
->X_add_symbol
= NULL
;
8132 e
->X_add_number
= 0;
8138 input_line_pointer
= end
;
8145 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8146 const char *md_shortopts
= "kVQ:sqn";
8148 const char *md_shortopts
= "qn";
8151 #define OPTION_32 (OPTION_MD_BASE + 0)
8152 #define OPTION_64 (OPTION_MD_BASE + 1)
8153 #define OPTION_DIVIDE (OPTION_MD_BASE + 2)
8154 #define OPTION_MARCH (OPTION_MD_BASE + 3)
8155 #define OPTION_MTUNE (OPTION_MD_BASE + 4)
8156 #define OPTION_MMNEMONIC (OPTION_MD_BASE + 5)
8157 #define OPTION_MSYNTAX (OPTION_MD_BASE + 6)
8158 #define OPTION_MINDEX_REG (OPTION_MD_BASE + 7)
8159 #define OPTION_MNAKED_REG (OPTION_MD_BASE + 8)
8160 #define OPTION_MOLD_GCC (OPTION_MD_BASE + 9)
8161 #define OPTION_MSSE2AVX (OPTION_MD_BASE + 10)
8162 #define OPTION_MSSE_CHECK (OPTION_MD_BASE + 11)
8163 #define OPTION_MAVXSCALAR (OPTION_MD_BASE + 12)
8164 #define OPTION_X32 (OPTION_MD_BASE + 13)
8166 struct option md_longopts
[] =
8168 {"32", no_argument
, NULL
, OPTION_32
},
8169 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
8170 || defined (TE_PE) || defined (TE_PEP))
8171 {"64", no_argument
, NULL
, OPTION_64
},
8173 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8174 {"x32", no_argument
, NULL
, OPTION_X32
},
8176 {"divide", no_argument
, NULL
, OPTION_DIVIDE
},
8177 {"march", required_argument
, NULL
, OPTION_MARCH
},
8178 {"mtune", required_argument
, NULL
, OPTION_MTUNE
},
8179 {"mmnemonic", required_argument
, NULL
, OPTION_MMNEMONIC
},
8180 {"msyntax", required_argument
, NULL
, OPTION_MSYNTAX
},
8181 {"mindex-reg", no_argument
, NULL
, OPTION_MINDEX_REG
},
8182 {"mnaked-reg", no_argument
, NULL
, OPTION_MNAKED_REG
},
8183 {"mold-gcc", no_argument
, NULL
, OPTION_MOLD_GCC
},
8184 {"msse2avx", no_argument
, NULL
, OPTION_MSSE2AVX
},
8185 {"msse-check", required_argument
, NULL
, OPTION_MSSE_CHECK
},
8186 {"mavxscalar", required_argument
, NULL
, OPTION_MAVXSCALAR
},
8187 {NULL
, no_argument
, NULL
, 0}
8189 size_t md_longopts_size
= sizeof (md_longopts
);
8192 md_parse_option (int c
, char *arg
)
8200 optimize_align_code
= 0;
8207 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8208 /* -Qy, -Qn: SVR4 arguments controlling whether a .comment section
8209 should be emitted or not. FIXME: Not implemented. */
8213 /* -V: SVR4 argument to print version ID. */
8215 print_version_id ();
8218 /* -k: Ignore for FreeBSD compatibility. */
8223 /* -s: On i386 Solaris, this tells the native assembler to use
8224 .stab instead of .stab.excl. We always use .stab anyhow. */
8227 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
8228 || defined (TE_PE) || defined (TE_PEP))
8231 const char **list
, **l
;
8233 list
= bfd_target_list ();
8234 for (l
= list
; *l
!= NULL
; l
++)
8235 if (CONST_STRNEQ (*l
, "elf64-x86-64")
8236 || strcmp (*l
, "coff-x86-64") == 0
8237 || strcmp (*l
, "pe-x86-64") == 0
8238 || strcmp (*l
, "pei-x86-64") == 0)
8240 default_arch
= "x86_64";
8244 as_fatal (_("No compiled in support for x86_64"));
8250 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8254 const char **list
, **l
;
8256 list
= bfd_target_list ();
8257 for (l
= list
; *l
!= NULL
; l
++)
8258 if (CONST_STRNEQ (*l
, "elf32-x86-64"))
8260 default_arch
= "x86_64:32";
8264 as_fatal (_("No compiled in support for 32bit x86_64"));
8268 as_fatal (_("32bit x86_64 is only supported for ELF"));
8273 default_arch
= "i386";
8277 #ifdef SVR4_COMMENT_CHARS
8282 n
= (char *) xmalloc (strlen (i386_comment_chars
) + 1);
8284 for (s
= i386_comment_chars
; *s
!= '\0'; s
++)
8288 i386_comment_chars
= n
;
8294 arch
= xstrdup (arg
);
8298 as_fatal (_("Invalid -march= option: `%s'"), arg
);
8299 next
= strchr (arch
, '+');
8302 for (j
= 0; j
< ARRAY_SIZE (cpu_arch
); j
++)
8304 if (strcmp (arch
, cpu_arch
[j
].name
) == 0)
8307 if (! cpu_arch
[j
].flags
.bitfield
.cpui386
)
8310 cpu_arch_name
= cpu_arch
[j
].name
;
8311 cpu_sub_arch_name
= NULL
;
8312 cpu_arch_flags
= cpu_arch
[j
].flags
;
8313 cpu_arch_isa
= cpu_arch
[j
].type
;
8314 cpu_arch_isa_flags
= cpu_arch
[j
].flags
;
8315 if (!cpu_arch_tune_set
)
8317 cpu_arch_tune
= cpu_arch_isa
;
8318 cpu_arch_tune_flags
= cpu_arch_isa_flags
;
8322 else if (*cpu_arch
[j
].name
== '.'
8323 && strcmp (arch
, cpu_arch
[j
].name
+ 1) == 0)
8325 /* ISA entension. */
8326 i386_cpu_flags flags
;
8328 if (!cpu_arch
[j
].negated
)
8329 flags
= cpu_flags_or (cpu_arch_flags
,
8332 flags
= cpu_flags_and_not (cpu_arch_flags
,
8334 if (!cpu_flags_equal (&flags
, &cpu_arch_flags
))
8336 if (cpu_sub_arch_name
)
8338 char *name
= cpu_sub_arch_name
;
8339 cpu_sub_arch_name
= concat (name
,
8341 (const char *) NULL
);
8345 cpu_sub_arch_name
= xstrdup (cpu_arch
[j
].name
);
8346 cpu_arch_flags
= flags
;
8347 cpu_arch_isa_flags
= flags
;
8353 if (j
>= ARRAY_SIZE (cpu_arch
))
8354 as_fatal (_("Invalid -march= option: `%s'"), arg
);
8358 while (next
!= NULL
);
8363 as_fatal (_("Invalid -mtune= option: `%s'"), arg
);
8364 for (j
= 0; j
< ARRAY_SIZE (cpu_arch
); j
++)
8366 if (strcmp (arg
, cpu_arch
[j
].name
) == 0)
8368 cpu_arch_tune_set
= 1;
8369 cpu_arch_tune
= cpu_arch
[j
].type
;
8370 cpu_arch_tune_flags
= cpu_arch
[j
].flags
;
8374 if (j
>= ARRAY_SIZE (cpu_arch
))
8375 as_fatal (_("Invalid -mtune= option: `%s'"), arg
);
8378 case OPTION_MMNEMONIC
:
8379 if (strcasecmp (arg
, "att") == 0)
8381 else if (strcasecmp (arg
, "intel") == 0)
8384 as_fatal (_("Invalid -mmnemonic= option: `%s'"), arg
);
8387 case OPTION_MSYNTAX
:
8388 if (strcasecmp (arg
, "att") == 0)
8390 else if (strcasecmp (arg
, "intel") == 0)
8393 as_fatal (_("Invalid -msyntax= option: `%s'"), arg
);
8396 case OPTION_MINDEX_REG
:
8397 allow_index_reg
= 1;
8400 case OPTION_MNAKED_REG
:
8401 allow_naked_reg
= 1;
8404 case OPTION_MOLD_GCC
:
8408 case OPTION_MSSE2AVX
:
8412 case OPTION_MSSE_CHECK
:
8413 if (strcasecmp (arg
, "error") == 0)
8414 sse_check
= sse_check_error
;
8415 else if (strcasecmp (arg
, "warning") == 0)
8416 sse_check
= sse_check_warning
;
8417 else if (strcasecmp (arg
, "none") == 0)
8418 sse_check
= sse_check_none
;
8420 as_fatal (_("Invalid -msse-check= option: `%s'"), arg
);
8423 case OPTION_MAVXSCALAR
:
8424 if (strcasecmp (arg
, "128") == 0)
8426 else if (strcasecmp (arg
, "256") == 0)
8429 as_fatal (_("Invalid -mavxscalar= option: `%s'"), arg
);
8438 #define MESSAGE_TEMPLATE \
8442 show_arch (FILE *stream
, int ext
, int check
)
8444 static char message
[] = MESSAGE_TEMPLATE
;
8445 char *start
= message
+ 27;
8447 int size
= sizeof (MESSAGE_TEMPLATE
);
8454 left
= size
- (start
- message
);
8455 for (j
= 0; j
< ARRAY_SIZE (cpu_arch
); j
++)
8457 /* Should it be skipped? */
8458 if (cpu_arch
[j
].skip
)
8461 name
= cpu_arch
[j
].name
;
8462 len
= cpu_arch
[j
].len
;
8465 /* It is an extension. Skip if we aren't asked to show it. */
8476 /* It is an processor. Skip if we show only extension. */
8479 else if (check
&& ! cpu_arch
[j
].flags
.bitfield
.cpui386
)
8481 /* It is an impossible processor - skip. */
8485 /* Reserve 2 spaces for ", " or ",\0" */
8488 /* Check if there is any room. */
8496 p
= mempcpy (p
, name
, len
);
8500 /* Output the current message now and start a new one. */
8503 fprintf (stream
, "%s\n", message
);
8505 left
= size
- (start
- message
) - len
- 2;
8507 gas_assert (left
>= 0);
8509 p
= mempcpy (p
, name
, len
);
8514 fprintf (stream
, "%s\n", message
);
8518 md_show_usage (FILE *stream
)
8520 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8521 fprintf (stream
, _("\
8523 -V print assembler version number\n\
8526 fprintf (stream
, _("\
8527 -n Do not optimize code alignment\n\
8528 -q quieten some warnings\n"));
8529 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8530 fprintf (stream
, _("\
8533 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
8534 || defined (TE_PE) || defined (TE_PEP))
8535 fprintf (stream
, _("\
8536 --32/--64/--x32 generate 32bit/64bit/x32 code\n"));
8538 #ifdef SVR4_COMMENT_CHARS
8539 fprintf (stream
, _("\
8540 --divide do not treat `/' as a comment character\n"));
8542 fprintf (stream
, _("\
8543 --divide ignored\n"));
8545 fprintf (stream
, _("\
8546 -march=CPU[,+EXTENSION...]\n\
8547 generate code for CPU and EXTENSION, CPU is one of:\n"));
8548 show_arch (stream
, 0, 1);
8549 fprintf (stream
, _("\
8550 EXTENSION is combination of:\n"));
8551 show_arch (stream
, 1, 0);
8552 fprintf (stream
, _("\
8553 -mtune=CPU optimize for CPU, CPU is one of:\n"));
8554 show_arch (stream
, 0, 0);
8555 fprintf (stream
, _("\
8556 -msse2avx encode SSE instructions with VEX prefix\n"));
8557 fprintf (stream
, _("\
8558 -msse-check=[none|error|warning]\n\
8559 check SSE instructions\n"));
8560 fprintf (stream
, _("\
8561 -mavxscalar=[128|256] encode scalar AVX instructions with specific vector\n\
8563 fprintf (stream
, _("\
8564 -mmnemonic=[att|intel] use AT&T/Intel mnemonic\n"));
8565 fprintf (stream
, _("\
8566 -msyntax=[att|intel] use AT&T/Intel syntax\n"));
8567 fprintf (stream
, _("\
8568 -mindex-reg support pseudo index registers\n"));
8569 fprintf (stream
, _("\
8570 -mnaked-reg don't require `%%' prefix for registers\n"));
8571 fprintf (stream
, _("\
8572 -mold-gcc support old (<= 2.8.1) versions of gcc\n"));
8575 #if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \
8576 || defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
8577 || defined (TE_PE) || defined (TE_PEP) || defined (OBJ_MACH_O))
8579 /* Pick the target format to use. */
8582 i386_target_format (void)
8584 if (!strncmp (default_arch
, "x86_64", 6))
8586 update_code_flag (CODE_64BIT
, 1);
8587 if (default_arch
[6] == '\0')
8588 x86_elf_abi
= X86_64_ABI
;
8590 x86_elf_abi
= X86_64_X32_ABI
;
8592 else if (!strcmp (default_arch
, "i386"))
8593 update_code_flag (CODE_32BIT
, 1);
8595 as_fatal (_("Unknown architecture"));
8597 if (cpu_flags_all_zero (&cpu_arch_isa_flags
))
8598 cpu_arch_isa_flags
= cpu_arch
[flag_code
== CODE_64BIT
].flags
;
8599 if (cpu_flags_all_zero (&cpu_arch_tune_flags
))
8600 cpu_arch_tune_flags
= cpu_arch
[flag_code
== CODE_64BIT
].flags
;
8602 switch (OUTPUT_FLAVOR
)
8604 #if defined (OBJ_MAYBE_AOUT) || defined (OBJ_AOUT)
8605 case bfd_target_aout_flavour
:
8606 return AOUT_TARGET_FORMAT
;
8608 #if defined (OBJ_MAYBE_COFF) || defined (OBJ_COFF)
8609 # if defined (TE_PE) || defined (TE_PEP)
8610 case bfd_target_coff_flavour
:
8611 return flag_code
== CODE_64BIT
? "pe-x86-64" : "pe-i386";
8612 # elif defined (TE_GO32)
8613 case bfd_target_coff_flavour
:
8616 case bfd_target_coff_flavour
:
8620 #if defined (OBJ_MAYBE_ELF) || defined (OBJ_ELF)
8621 case bfd_target_elf_flavour
:
8625 switch (x86_elf_abi
)
8628 format
= ELF_TARGET_FORMAT
;
8631 use_rela_relocations
= 1;
8633 format
= ELF_TARGET_FORMAT64
;
8635 case X86_64_X32_ABI
:
8636 use_rela_relocations
= 1;
8638 disallow_64bit_reloc
= 1;
8639 format
= ELF_TARGET_FORMAT32
;
8642 if (cpu_arch_isa
== PROCESSOR_L1OM
)
8644 if (x86_elf_abi
!= X86_64_ABI
)
8645 as_fatal (_("Intel L1OM is 64bit only"));
8646 return ELF_TARGET_L1OM_FORMAT
;
8652 #if defined (OBJ_MACH_O)
8653 case bfd_target_mach_o_flavour
:
8654 return flag_code
== CODE_64BIT
? "mach-o-x86-64" : "mach-o-i386";
8662 #endif /* OBJ_MAYBE_ more than one */
8664 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF))
8666 i386_elf_emit_arch_note (void)
8668 if (IS_ELF
&& cpu_arch_name
!= NULL
)
8671 asection
*seg
= now_seg
;
8672 subsegT subseg
= now_subseg
;
8673 Elf_Internal_Note i_note
;
8674 Elf_External_Note e_note
;
8675 asection
*note_secp
;
8678 /* Create the .note section. */
8679 note_secp
= subseg_new (".note", 0);
8680 bfd_set_section_flags (stdoutput
,
8682 SEC_HAS_CONTENTS
| SEC_READONLY
);
8684 /* Process the arch string. */
8685 len
= strlen (cpu_arch_name
);
8687 i_note
.namesz
= len
+ 1;
8689 i_note
.type
= NT_ARCH
;
8690 p
= frag_more (sizeof (e_note
.namesz
));
8691 md_number_to_chars (p
, (valueT
) i_note
.namesz
, sizeof (e_note
.namesz
));
8692 p
= frag_more (sizeof (e_note
.descsz
));
8693 md_number_to_chars (p
, (valueT
) i_note
.descsz
, sizeof (e_note
.descsz
));
8694 p
= frag_more (sizeof (e_note
.type
));
8695 md_number_to_chars (p
, (valueT
) i_note
.type
, sizeof (e_note
.type
));
8696 p
= frag_more (len
+ 1);
8697 strcpy (p
, cpu_arch_name
);
8699 frag_align (2, 0, 0);
8701 subseg_set (seg
, subseg
);
8707 md_undefined_symbol (name
)
8710 if (name
[0] == GLOBAL_OFFSET_TABLE_NAME
[0]
8711 && name
[1] == GLOBAL_OFFSET_TABLE_NAME
[1]
8712 && name
[2] == GLOBAL_OFFSET_TABLE_NAME
[2]
8713 && strcmp (name
, GLOBAL_OFFSET_TABLE_NAME
) == 0)
8717 if (symbol_find (name
))
8718 as_bad (_("GOT already in symbol table"));
8719 GOT_symbol
= symbol_new (name
, undefined_section
,
8720 (valueT
) 0, &zero_address_frag
);
8727 /* Round up a section size to the appropriate boundary. */
8730 md_section_align (segment
, size
)
8731 segT segment ATTRIBUTE_UNUSED
;
8734 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
8735 if (OUTPUT_FLAVOR
== bfd_target_aout_flavour
)
8737 /* For a.out, force the section size to be aligned. If we don't do
8738 this, BFD will align it for us, but it will not write out the
8739 final bytes of the section. This may be a bug in BFD, but it is
8740 easier to fix it here since that is how the other a.out targets
8744 align
= bfd_get_section_alignment (stdoutput
, segment
);
8745 size
= ((size
+ (1 << align
) - 1) & ((valueT
) -1 << align
));
8752 /* On the i386, PC-relative offsets are relative to the start of the
8753 next instruction. That is, the address of the offset, plus its
8754 size, since the offset is always the last part of the insn. */
8757 md_pcrel_from (fixS
*fixP
)
8759 return fixP
->fx_size
+ fixP
->fx_where
+ fixP
->fx_frag
->fr_address
;
8765 s_bss (int ignore ATTRIBUTE_UNUSED
)
8769 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8771 obj_elf_section_change_hook ();
8773 temp
= get_absolute_expression ();
8774 subseg_set (bss_section
, (subsegT
) temp
);
8775 demand_empty_rest_of_line ();
8781 i386_validate_fix (fixS
*fixp
)
8783 if (fixp
->fx_subsy
&& fixp
->fx_subsy
== GOT_symbol
)
8785 if (fixp
->fx_r_type
== BFD_RELOC_32_PCREL
)
8789 fixp
->fx_r_type
= BFD_RELOC_X86_64_GOTPCREL
;
8794 fixp
->fx_r_type
= BFD_RELOC_386_GOTOFF
;
8796 fixp
->fx_r_type
= BFD_RELOC_X86_64_GOTOFF64
;
8803 tc_gen_reloc (section
, fixp
)
8804 asection
*section ATTRIBUTE_UNUSED
;
8808 bfd_reloc_code_real_type code
;
8810 switch (fixp
->fx_r_type
)
8812 case BFD_RELOC_X86_64_PLT32
:
8813 case BFD_RELOC_X86_64_GOT32
:
8814 case BFD_RELOC_X86_64_GOTPCREL
:
8815 case BFD_RELOC_386_PLT32
:
8816 case BFD_RELOC_386_GOT32
:
8817 case BFD_RELOC_386_GOTOFF
:
8818 case BFD_RELOC_386_GOTPC
:
8819 case BFD_RELOC_386_TLS_GD
:
8820 case BFD_RELOC_386_TLS_LDM
:
8821 case BFD_RELOC_386_TLS_LDO_32
:
8822 case BFD_RELOC_386_TLS_IE_32
:
8823 case BFD_RELOC_386_TLS_IE
:
8824 case BFD_RELOC_386_TLS_GOTIE
:
8825 case BFD_RELOC_386_TLS_LE_32
:
8826 case BFD_RELOC_386_TLS_LE
:
8827 case BFD_RELOC_386_TLS_GOTDESC
:
8828 case BFD_RELOC_386_TLS_DESC_CALL
:
8829 case BFD_RELOC_X86_64_TLSGD
:
8830 case BFD_RELOC_X86_64_TLSLD
:
8831 case BFD_RELOC_X86_64_DTPOFF32
:
8832 case BFD_RELOC_X86_64_DTPOFF64
:
8833 case BFD_RELOC_X86_64_GOTTPOFF
:
8834 case BFD_RELOC_X86_64_TPOFF32
:
8835 case BFD_RELOC_X86_64_TPOFF64
:
8836 case BFD_RELOC_X86_64_GOTOFF64
:
8837 case BFD_RELOC_X86_64_GOTPC32
:
8838 case BFD_RELOC_X86_64_GOT64
:
8839 case BFD_RELOC_X86_64_GOTPCREL64
:
8840 case BFD_RELOC_X86_64_GOTPC64
:
8841 case BFD_RELOC_X86_64_GOTPLT64
:
8842 case BFD_RELOC_X86_64_PLTOFF64
:
8843 case BFD_RELOC_X86_64_GOTPC32_TLSDESC
:
8844 case BFD_RELOC_X86_64_TLSDESC_CALL
:
8846 case BFD_RELOC_VTABLE_ENTRY
:
8847 case BFD_RELOC_VTABLE_INHERIT
:
8849 case BFD_RELOC_32_SECREL
:
8851 code
= fixp
->fx_r_type
;
8853 case BFD_RELOC_X86_64_32S
:
8854 if (!fixp
->fx_pcrel
)
8856 /* Don't turn BFD_RELOC_X86_64_32S into BFD_RELOC_32. */
8857 code
= fixp
->fx_r_type
;
8863 switch (fixp
->fx_size
)
8866 as_bad_where (fixp
->fx_file
, fixp
->fx_line
,
8867 _("can not do %d byte pc-relative relocation"),
8869 code
= BFD_RELOC_32_PCREL
;
8871 case 1: code
= BFD_RELOC_8_PCREL
; break;
8872 case 2: code
= BFD_RELOC_16_PCREL
; break;
8873 case 4: code
= BFD_RELOC_32_PCREL
; break;
8875 case 8: code
= BFD_RELOC_64_PCREL
; break;
8881 switch (fixp
->fx_size
)
8884 as_bad_where (fixp
->fx_file
, fixp
->fx_line
,
8885 _("can not do %d byte relocation"),
8887 code
= BFD_RELOC_32
;
8889 case 1: code
= BFD_RELOC_8
; break;
8890 case 2: code
= BFD_RELOC_16
; break;
8891 case 4: code
= BFD_RELOC_32
; break;
8893 case 8: code
= BFD_RELOC_64
; break;
8900 if ((code
== BFD_RELOC_32
8901 || code
== BFD_RELOC_32_PCREL
8902 || code
== BFD_RELOC_X86_64_32S
)
8904 && fixp
->fx_addsy
== GOT_symbol
)
8907 code
= BFD_RELOC_386_GOTPC
;
8909 code
= BFD_RELOC_X86_64_GOTPC32
;
8911 if ((code
== BFD_RELOC_64
|| code
== BFD_RELOC_64_PCREL
)
8913 && fixp
->fx_addsy
== GOT_symbol
)
8915 code
= BFD_RELOC_X86_64_GOTPC64
;
8918 rel
= (arelent
*) xmalloc (sizeof (arelent
));
8919 rel
->sym_ptr_ptr
= (asymbol
**) xmalloc (sizeof (asymbol
*));
8920 *rel
->sym_ptr_ptr
= symbol_get_bfdsym (fixp
->fx_addsy
);
8922 rel
->address
= fixp
->fx_frag
->fr_address
+ fixp
->fx_where
;
8924 if (!use_rela_relocations
)
8926 /* HACK: Since i386 ELF uses Rel instead of Rela, encode the
8927 vtable entry to be used in the relocation's section offset. */
8928 if (fixp
->fx_r_type
== BFD_RELOC_VTABLE_ENTRY
)
8929 rel
->address
= fixp
->fx_offset
;
8930 #if defined (OBJ_COFF) && defined (TE_PE)
8931 else if (fixp
->fx_addsy
&& S_IS_WEAK (fixp
->fx_addsy
))
8932 rel
->addend
= fixp
->fx_addnumber
- (S_GET_VALUE (fixp
->fx_addsy
) * 2);
8937 /* Use the rela in 64bit mode. */
8940 if (disallow_64bit_reloc
)
8944 case BFD_RELOC_X86_64_DTPOFF64
:
8945 case BFD_RELOC_X86_64_TPOFF64
:
8946 case BFD_RELOC_64_PCREL
:
8947 case BFD_RELOC_X86_64_GOTOFF64
:
8948 case BFD_RELOC_X86_64_GOT64
:
8949 case BFD_RELOC_X86_64_GOTPCREL64
:
8950 case BFD_RELOC_X86_64_GOTPC64
:
8951 case BFD_RELOC_X86_64_GOTPLT64
:
8952 case BFD_RELOC_X86_64_PLTOFF64
:
8953 as_bad_where (fixp
->fx_file
, fixp
->fx_line
,
8954 _("cannot represent relocation type %s in x32 mode"),
8955 bfd_get_reloc_code_name (code
));
8961 if (!fixp
->fx_pcrel
)
8962 rel
->addend
= fixp
->fx_offset
;
8966 case BFD_RELOC_X86_64_PLT32
:
8967 case BFD_RELOC_X86_64_GOT32
:
8968 case BFD_RELOC_X86_64_GOTPCREL
:
8969 case BFD_RELOC_X86_64_TLSGD
:
8970 case BFD_RELOC_X86_64_TLSLD
:
8971 case BFD_RELOC_X86_64_GOTTPOFF
:
8972 case BFD_RELOC_X86_64_GOTPC32_TLSDESC
:
8973 case BFD_RELOC_X86_64_TLSDESC_CALL
:
8974 rel
->addend
= fixp
->fx_offset
- fixp
->fx_size
;
8977 rel
->addend
= (section
->vma
8979 + fixp
->fx_addnumber
8980 + md_pcrel_from (fixp
));
8985 rel
->howto
= bfd_reloc_type_lookup (stdoutput
, code
);
8986 if (rel
->howto
== NULL
)
8988 as_bad_where (fixp
->fx_file
, fixp
->fx_line
,
8989 _("cannot represent relocation type %s"),
8990 bfd_get_reloc_code_name (code
));
8991 /* Set howto to a garbage value so that we can keep going. */
8992 rel
->howto
= bfd_reloc_type_lookup (stdoutput
, BFD_RELOC_32
);
8993 gas_assert (rel
->howto
!= NULL
);
8999 #include "tc-i386-intel.c"
9002 tc_x86_parse_to_dw2regnum (expressionS
*exp
)
9004 int saved_naked_reg
;
9005 char saved_register_dot
;
9007 saved_naked_reg
= allow_naked_reg
;
9008 allow_naked_reg
= 1;
9009 saved_register_dot
= register_chars
['.'];
9010 register_chars
['.'] = '.';
9011 allow_pseudo_reg
= 1;
9012 expression_and_evaluate (exp
);
9013 allow_pseudo_reg
= 0;
9014 register_chars
['.'] = saved_register_dot
;
9015 allow_naked_reg
= saved_naked_reg
;
9017 if (exp
->X_op
== O_register
&& exp
->X_add_number
>= 0)
9019 if ((addressT
) exp
->X_add_number
< i386_regtab_size
)
9021 exp
->X_op
= O_constant
;
9022 exp
->X_add_number
= i386_regtab
[exp
->X_add_number
]
9023 .dw2_regnum
[flag_code
>> 1];
9026 exp
->X_op
= O_illegal
;
9031 tc_x86_frame_initial_instructions (void)
9033 static unsigned int sp_regno
[2];
9035 if (!sp_regno
[flag_code
>> 1])
9037 char *saved_input
= input_line_pointer
;
9038 char sp
[][4] = {"esp", "rsp"};
9041 input_line_pointer
= sp
[flag_code
>> 1];
9042 tc_x86_parse_to_dw2regnum (&exp
);
9043 gas_assert (exp
.X_op
== O_constant
);
9044 sp_regno
[flag_code
>> 1] = exp
.X_add_number
;
9045 input_line_pointer
= saved_input
;
9048 cfi_add_CFA_def_cfa (sp_regno
[flag_code
>> 1], -x86_cie_data_alignment
);
9049 cfi_add_CFA_offset (x86_dwarf2_return_column
, x86_cie_data_alignment
);
9053 i386_elf_section_type (const char *str
, size_t len
)
9055 if (flag_code
== CODE_64BIT
9056 && len
== sizeof ("unwind") - 1
9057 && strncmp (str
, "unwind", 6) == 0)
9058 return SHT_X86_64_UNWIND
;
9065 i386_solaris_fix_up_eh_frame (segT sec
)
9067 if (flag_code
== CODE_64BIT
)
9068 elf_section_type (sec
) = SHT_X86_64_UNWIND
;
9074 tc_pe_dwarf2_emit_offset (symbolS
*symbol
, unsigned int size
)
9078 exp
.X_op
= O_secrel
;
9079 exp
.X_add_symbol
= symbol
;
9080 exp
.X_add_number
= 0;
9081 emit_expr (&exp
, size
);
9085 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
9086 /* For ELF on x86-64, add support for SHF_X86_64_LARGE. */
9089 x86_64_section_letter (int letter
, char **ptr_msg
)
9091 if (flag_code
== CODE_64BIT
)
9094 return SHF_X86_64_LARGE
;
9096 *ptr_msg
= _("bad .section directive: want a,l,w,x,M,S,G,T in string");
9099 *ptr_msg
= _("bad .section directive: want a,w,x,M,S,G,T in string");
9104 x86_64_section_word (char *str
, size_t len
)
9106 if (len
== 5 && flag_code
== CODE_64BIT
&& CONST_STRNEQ (str
, "large"))
9107 return SHF_X86_64_LARGE
;
9113 handle_large_common (int small ATTRIBUTE_UNUSED
)
9115 if (flag_code
!= CODE_64BIT
)
9117 s_comm_internal (0, elf_common_parse
);
9118 as_warn (_(".largecomm supported only in 64bit mode, producing .comm"));
9122 static segT lbss_section
;
9123 asection
*saved_com_section_ptr
= elf_com_section_ptr
;
9124 asection
*saved_bss_section
= bss_section
;
9126 if (lbss_section
== NULL
)
9128 flagword applicable
;
9130 subsegT subseg
= now_subseg
;
9132 /* The .lbss section is for local .largecomm symbols. */
9133 lbss_section
= subseg_new (".lbss", 0);
9134 applicable
= bfd_applicable_section_flags (stdoutput
);
9135 bfd_set_section_flags (stdoutput
, lbss_section
,
9136 applicable
& SEC_ALLOC
);
9137 seg_info (lbss_section
)->bss
= 1;
9139 subseg_set (seg
, subseg
);
9142 elf_com_section_ptr
= &_bfd_elf_large_com_section
;
9143 bss_section
= lbss_section
;
9145 s_comm_internal (0, elf_common_parse
);
9147 elf_com_section_ptr
= saved_com_section_ptr
;
9148 bss_section
= saved_bss_section
;
9151 #endif /* OBJ_ELF || OBJ_MAYBE_ELF */