x86: drop {,reg16_}inoutportreg variables
[deliverable/binutils-gdb.git] / gas / config / tc-i386.c
1 /* tc-i386.c -- Assemble code for the Intel 80386
2 Copyright (C) 1989-2018 Free Software Foundation, Inc.
3
4 This file is part of GAS, the GNU Assembler.
5
6 GAS is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3, or (at your option)
9 any later version.
10
11 GAS is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GAS; see the file COPYING. If not, write to the Free
18 Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
19 02110-1301, USA. */
20
21 /* Intel 80386 machine specific gas.
22 Written by Eliot Dresselhaus (eliot@mgm.mit.edu).
23 x86_64 support by Jan Hubicka (jh@suse.cz)
24 VIA PadLock support by Michal Ludvig (mludvig@suse.cz)
25 Bugs & suggestions are completely welcome. This is free software.
26 Please help us make it better. */
27
28 #include "as.h"
29 #include "safe-ctype.h"
30 #include "subsegs.h"
31 #include "dwarf2dbg.h"
32 #include "dw2gencfi.h"
33 #include "elf/x86-64.h"
34 #include "opcodes/i386-init.h"
35
36 #ifndef REGISTER_WARNINGS
37 #define REGISTER_WARNINGS 1
38 #endif
39
40 #ifndef INFER_ADDR_PREFIX
41 #define INFER_ADDR_PREFIX 1
42 #endif
43
44 #ifndef DEFAULT_ARCH
45 #define DEFAULT_ARCH "i386"
46 #endif
47
48 #ifndef INLINE
49 #if __GNUC__ >= 2
50 #define INLINE __inline__
51 #else
52 #define INLINE
53 #endif
54 #endif
55
56 /* Prefixes will be emitted in the order defined below.
57 WAIT_PREFIX must be the first prefix since FWAIT is really is an
58 instruction, and so must come before any prefixes.
59 The preferred prefix order is SEG_PREFIX, ADDR_PREFIX, DATA_PREFIX,
60 REP_PREFIX/HLE_PREFIX, LOCK_PREFIX. */
61 #define WAIT_PREFIX 0
62 #define SEG_PREFIX 1
63 #define ADDR_PREFIX 2
64 #define DATA_PREFIX 3
65 #define REP_PREFIX 4
66 #define HLE_PREFIX REP_PREFIX
67 #define BND_PREFIX REP_PREFIX
68 #define LOCK_PREFIX 5
69 #define REX_PREFIX 6 /* must come last. */
70 #define MAX_PREFIXES 7 /* max prefixes per opcode */
71
72 /* we define the syntax here (modulo base,index,scale syntax) */
73 #define REGISTER_PREFIX '%'
74 #define IMMEDIATE_PREFIX '$'
75 #define ABSOLUTE_PREFIX '*'
76
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 /* Intel Syntax. Use a non-ascii letter since since it never appears
85 in instructions. */
86 #define LONG_DOUBLE_MNEM_SUFFIX '\1'
87
88 #define END_OF_INSN '\0'
89
90 /*
91 'templates' is for grouping together 'template' structures for opcodes
92 of the same name. This is only used for storing the insns in the grand
93 ole hash table of insns.
94 The templates themselves start at START and range up to (but not including)
95 END.
96 */
97 typedef struct
98 {
99 const insn_template *start;
100 const insn_template *end;
101 }
102 templates;
103
104 /* 386 operand encoding bytes: see 386 book for details of this. */
105 typedef struct
106 {
107 unsigned int regmem; /* codes register or memory operand */
108 unsigned int reg; /* codes register operand (or extended opcode) */
109 unsigned int mode; /* how to interpret regmem & reg */
110 }
111 modrm_byte;
112
113 /* x86-64 extension prefix. */
114 typedef int rex_byte;
115
116 /* 386 opcode byte to code indirect addressing. */
117 typedef struct
118 {
119 unsigned base;
120 unsigned index;
121 unsigned scale;
122 }
123 sib_byte;
124
125 /* x86 arch names, types and features */
126 typedef struct
127 {
128 const char *name; /* arch name */
129 unsigned int len; /* arch string length */
130 enum processor_type type; /* arch type */
131 i386_cpu_flags flags; /* cpu feature flags */
132 unsigned int skip; /* show_arch should skip this. */
133 }
134 arch_entry;
135
136 /* Used to turn off indicated flags. */
137 typedef struct
138 {
139 const char *name; /* arch name */
140 unsigned int len; /* arch string length */
141 i386_cpu_flags flags; /* cpu feature flags */
142 }
143 noarch_entry;
144
145 static void update_code_flag (int, int);
146 static void set_code_flag (int);
147 static void set_16bit_gcc_code_flag (int);
148 static void set_intel_syntax (int);
149 static void set_intel_mnemonic (int);
150 static void set_allow_index_reg (int);
151 static void set_check (int);
152 static void set_cpu_arch (int);
153 #ifdef TE_PE
154 static void pe_directive_secrel (int);
155 #endif
156 static void signed_cons (int);
157 static char *output_invalid (int c);
158 static int i386_finalize_immediate (segT, expressionS *, i386_operand_type,
159 const char *);
160 static int i386_finalize_displacement (segT, expressionS *, i386_operand_type,
161 const char *);
162 static int i386_att_operand (char *);
163 static int i386_intel_operand (char *, int);
164 static int i386_intel_simplify (expressionS *);
165 static int i386_intel_parse_name (const char *, expressionS *);
166 static const reg_entry *parse_register (char *, char **);
167 static char *parse_insn (char *, char *);
168 static char *parse_operands (char *, const char *);
169 static void swap_operands (void);
170 static void swap_2_operands (int, int);
171 static void optimize_imm (void);
172 static void optimize_disp (void);
173 static const insn_template *match_template (char);
174 static int check_string (void);
175 static int process_suffix (void);
176 static int check_byte_reg (void);
177 static int check_long_reg (void);
178 static int check_qword_reg (void);
179 static int check_word_reg (void);
180 static int finalize_imm (void);
181 static int process_operands (void);
182 static const seg_entry *build_modrm_byte (void);
183 static void output_insn (void);
184 static void output_imm (fragS *, offsetT);
185 static void output_disp (fragS *, offsetT);
186 #ifndef I386COFF
187 static void s_bss (int);
188 #endif
189 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
190 static void handle_large_common (int small ATTRIBUTE_UNUSED);
191 #endif
192
193 static const char *default_arch = DEFAULT_ARCH;
194
195 /* This struct describes rounding control and SAE in the instruction. */
196 struct RC_Operation
197 {
198 enum rc_type
199 {
200 rne = 0,
201 rd,
202 ru,
203 rz,
204 saeonly
205 } type;
206 int operand;
207 };
208
209 static struct RC_Operation rc_op;
210
211 /* The struct describes masking, applied to OPERAND in the instruction.
212 MASK is a pointer to the corresponding mask register. ZEROING tells
213 whether merging or zeroing mask is used. */
214 struct Mask_Operation
215 {
216 const reg_entry *mask;
217 unsigned int zeroing;
218 /* The operand where this operation is associated. */
219 int operand;
220 };
221
222 static struct Mask_Operation mask_op;
223
224 /* The struct describes broadcasting, applied to OPERAND. FACTOR is
225 broadcast factor. */
226 struct Broadcast_Operation
227 {
228 /* Type of broadcast: {1to2}, {1to4}, {1to8}, or {1to16}. */
229 int type;
230
231 /* Index of broadcasted operand. */
232 int operand;
233 };
234
235 static struct Broadcast_Operation broadcast_op;
236
237 /* VEX prefix. */
238 typedef struct
239 {
240 /* VEX prefix is either 2 byte or 3 byte. EVEX is 4 byte. */
241 unsigned char bytes[4];
242 unsigned int length;
243 /* Destination or source register specifier. */
244 const reg_entry *register_specifier;
245 } vex_prefix;
246
247 /* 'md_assemble ()' gathers together information and puts it into a
248 i386_insn. */
249
250 union i386_op
251 {
252 expressionS *disps;
253 expressionS *imms;
254 const reg_entry *regs;
255 };
256
257 enum i386_error
258 {
259 operand_size_mismatch,
260 operand_type_mismatch,
261 register_type_mismatch,
262 number_of_operands_mismatch,
263 invalid_instruction_suffix,
264 bad_imm4,
265 unsupported_with_intel_mnemonic,
266 unsupported_syntax,
267 unsupported,
268 invalid_vsib_address,
269 invalid_vector_register_set,
270 unsupported_vector_index_register,
271 unsupported_broadcast,
272 broadcast_not_on_src_operand,
273 broadcast_needed,
274 unsupported_masking,
275 mask_not_on_destination,
276 no_default_mask,
277 unsupported_rc_sae,
278 rc_sae_operand_not_last_imm,
279 invalid_register_operand,
280 };
281
282 struct _i386_insn
283 {
284 /* TM holds the template for the insn were currently assembling. */
285 insn_template tm;
286
287 /* SUFFIX holds the instruction size suffix for byte, word, dword
288 or qword, if given. */
289 char suffix;
290
291 /* OPERANDS gives the number of given operands. */
292 unsigned int operands;
293
294 /* REG_OPERANDS, DISP_OPERANDS, MEM_OPERANDS, IMM_OPERANDS give the number
295 of given register, displacement, memory operands and immediate
296 operands. */
297 unsigned int reg_operands, disp_operands, mem_operands, imm_operands;
298
299 /* TYPES [i] is the type (see above #defines) which tells us how to
300 use OP[i] for the corresponding operand. */
301 i386_operand_type types[MAX_OPERANDS];
302
303 /* Displacement expression, immediate expression, or register for each
304 operand. */
305 union i386_op op[MAX_OPERANDS];
306
307 /* Flags for operands. */
308 unsigned int flags[MAX_OPERANDS];
309 #define Operand_PCrel 1
310
311 /* Relocation type for operand */
312 enum bfd_reloc_code_real reloc[MAX_OPERANDS];
313
314 /* BASE_REG, INDEX_REG, and LOG2_SCALE_FACTOR are used to encode
315 the base index byte below. */
316 const reg_entry *base_reg;
317 const reg_entry *index_reg;
318 unsigned int log2_scale_factor;
319
320 /* SEG gives the seg_entries of this insn. They are zero unless
321 explicit segment overrides are given. */
322 const seg_entry *seg[2];
323
324 /* Copied first memory operand string, for re-checking. */
325 char *memop1_string;
326
327 /* PREFIX holds all the given prefix opcodes (usually null).
328 PREFIXES is the number of prefix opcodes. */
329 unsigned int prefixes;
330 unsigned char prefix[MAX_PREFIXES];
331
332 /* RM and SIB are the modrm byte and the sib byte where the
333 addressing modes of this insn are encoded. */
334 modrm_byte rm;
335 rex_byte rex;
336 rex_byte vrex;
337 sib_byte sib;
338 vex_prefix vex;
339
340 /* Masking attributes. */
341 struct Mask_Operation *mask;
342
343 /* Rounding control and SAE attributes. */
344 struct RC_Operation *rounding;
345
346 /* Broadcasting attributes. */
347 struct Broadcast_Operation *broadcast;
348
349 /* Compressed disp8*N attribute. */
350 unsigned int memshift;
351
352 /* Prefer load or store in encoding. */
353 enum
354 {
355 dir_encoding_default = 0,
356 dir_encoding_load,
357 dir_encoding_store
358 } dir_encoding;
359
360 /* Prefer 8bit or 32bit displacement in encoding. */
361 enum
362 {
363 disp_encoding_default = 0,
364 disp_encoding_8bit,
365 disp_encoding_32bit
366 } disp_encoding;
367
368 /* Prefer the REX byte in encoding. */
369 bfd_boolean rex_encoding;
370
371 /* Disable instruction size optimization. */
372 bfd_boolean no_optimize;
373
374 /* How to encode vector instructions. */
375 enum
376 {
377 vex_encoding_default = 0,
378 vex_encoding_vex2,
379 vex_encoding_vex3,
380 vex_encoding_evex
381 } vec_encoding;
382
383 /* REP prefix. */
384 const char *rep_prefix;
385
386 /* HLE prefix. */
387 const char *hle_prefix;
388
389 /* Have BND prefix. */
390 const char *bnd_prefix;
391
392 /* Have NOTRACK prefix. */
393 const char *notrack_prefix;
394
395 /* Error message. */
396 enum i386_error error;
397 };
398
399 typedef struct _i386_insn i386_insn;
400
401 /* Link RC type with corresponding string, that'll be looked for in
402 asm. */
403 struct RC_name
404 {
405 enum rc_type type;
406 const char *name;
407 unsigned int len;
408 };
409
410 static const struct RC_name RC_NamesTable[] =
411 {
412 { rne, STRING_COMMA_LEN ("rn-sae") },
413 { rd, STRING_COMMA_LEN ("rd-sae") },
414 { ru, STRING_COMMA_LEN ("ru-sae") },
415 { rz, STRING_COMMA_LEN ("rz-sae") },
416 { saeonly, STRING_COMMA_LEN ("sae") },
417 };
418
419 /* List of chars besides those in app.c:symbol_chars that can start an
420 operand. Used to prevent the scrubber eating vital white-space. */
421 const char extra_symbol_chars[] = "*%-([{}"
422 #ifdef LEX_AT
423 "@"
424 #endif
425 #ifdef LEX_QM
426 "?"
427 #endif
428 ;
429
430 #if (defined (TE_I386AIX) \
431 || ((defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)) \
432 && !defined (TE_GNU) \
433 && !defined (TE_LINUX) \
434 && !defined (TE_NACL) \
435 && !defined (TE_FreeBSD) \
436 && !defined (TE_DragonFly) \
437 && !defined (TE_NetBSD)))
438 /* This array holds the chars that always start a comment. If the
439 pre-processor is disabled, these aren't very useful. The option
440 --divide will remove '/' from this list. */
441 const char *i386_comment_chars = "#/";
442 #define SVR4_COMMENT_CHARS 1
443 #define PREFIX_SEPARATOR '\\'
444
445 #else
446 const char *i386_comment_chars = "#";
447 #define PREFIX_SEPARATOR '/'
448 #endif
449
450 /* This array holds the chars that only start a comment at the beginning of
451 a line. If the line seems to have the form '# 123 filename'
452 .line and .file directives will appear in the pre-processed output.
453 Note that input_file.c hand checks for '#' at the beginning of the
454 first line of the input file. This is because the compiler outputs
455 #NO_APP at the beginning of its output.
456 Also note that comments started like this one will always work if
457 '/' isn't otherwise defined. */
458 const char line_comment_chars[] = "#/";
459
460 const char line_separator_chars[] = ";";
461
462 /* Chars that can be used to separate mant from exp in floating point
463 nums. */
464 const char EXP_CHARS[] = "eE";
465
466 /* Chars that mean this number is a floating point constant
467 As in 0f12.456
468 or 0d1.2345e12. */
469 const char FLT_CHARS[] = "fFdDxX";
470
471 /* Tables for lexical analysis. */
472 static char mnemonic_chars[256];
473 static char register_chars[256];
474 static char operand_chars[256];
475 static char identifier_chars[256];
476 static char digit_chars[256];
477
478 /* Lexical macros. */
479 #define is_mnemonic_char(x) (mnemonic_chars[(unsigned char) x])
480 #define is_operand_char(x) (operand_chars[(unsigned char) x])
481 #define is_register_char(x) (register_chars[(unsigned char) x])
482 #define is_space_char(x) ((x) == ' ')
483 #define is_identifier_char(x) (identifier_chars[(unsigned char) x])
484 #define is_digit_char(x) (digit_chars[(unsigned char) x])
485
486 /* All non-digit non-letter characters that may occur in an operand. */
487 static char operand_special_chars[] = "%$-+(,)*._~/<>|&^!:[@]";
488
489 /* md_assemble() always leaves the strings it's passed unaltered. To
490 effect this we maintain a stack of saved characters that we've smashed
491 with '\0's (indicating end of strings for various sub-fields of the
492 assembler instruction). */
493 static char save_stack[32];
494 static char *save_stack_p;
495 #define END_STRING_AND_SAVE(s) \
496 do { *save_stack_p++ = *(s); *(s) = '\0'; } while (0)
497 #define RESTORE_END_STRING(s) \
498 do { *(s) = *--save_stack_p; } while (0)
499
500 /* The instruction we're assembling. */
501 static i386_insn i;
502
503 /* Possible templates for current insn. */
504 static const templates *current_templates;
505
506 /* Per instruction expressionS buffers: max displacements & immediates. */
507 static expressionS disp_expressions[MAX_MEMORY_OPERANDS];
508 static expressionS im_expressions[MAX_IMMEDIATE_OPERANDS];
509
510 /* Current operand we are working on. */
511 static int this_operand = -1;
512
513 /* We support four different modes. FLAG_CODE variable is used to distinguish
514 these. */
515
516 enum flag_code {
517 CODE_32BIT,
518 CODE_16BIT,
519 CODE_64BIT };
520
521 static enum flag_code flag_code;
522 static unsigned int object_64bit;
523 static unsigned int disallow_64bit_reloc;
524 static int use_rela_relocations = 0;
525
526 #if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \
527 || defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
528 || defined (TE_PE) || defined (TE_PEP) || defined (OBJ_MACH_O))
529
530 /* The ELF ABI to use. */
531 enum x86_elf_abi
532 {
533 I386_ABI,
534 X86_64_ABI,
535 X86_64_X32_ABI
536 };
537
538 static enum x86_elf_abi x86_elf_abi = I386_ABI;
539 #endif
540
541 #if defined (TE_PE) || defined (TE_PEP)
542 /* Use big object file format. */
543 static int use_big_obj = 0;
544 #endif
545
546 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
547 /* 1 if generating code for a shared library. */
548 static int shared = 0;
549 #endif
550
551 /* 1 for intel syntax,
552 0 if att syntax. */
553 static int intel_syntax = 0;
554
555 /* 1 for Intel64 ISA,
556 0 if AMD64 ISA. */
557 static int intel64;
558
559 /* 1 for intel mnemonic,
560 0 if att mnemonic. */
561 static int intel_mnemonic = !SYSV386_COMPAT;
562
563 /* 1 if pseudo registers are permitted. */
564 static int allow_pseudo_reg = 0;
565
566 /* 1 if register prefix % not required. */
567 static int allow_naked_reg = 0;
568
569 /* 1 if the assembler should add BND prefix for all control-transferring
570 instructions supporting it, even if this prefix wasn't specified
571 explicitly. */
572 static int add_bnd_prefix = 0;
573
574 /* 1 if pseudo index register, eiz/riz, is allowed . */
575 static int allow_index_reg = 0;
576
577 /* 1 if the assembler should ignore LOCK prefix, even if it was
578 specified explicitly. */
579 static int omit_lock_prefix = 0;
580
581 /* 1 if the assembler should encode lfence, mfence, and sfence as
582 "lock addl $0, (%{re}sp)". */
583 static int avoid_fence = 0;
584
585 /* 1 if the assembler should generate relax relocations. */
586
587 static int generate_relax_relocations
588 = DEFAULT_GENERATE_X86_RELAX_RELOCATIONS;
589
590 static enum check_kind
591 {
592 check_none = 0,
593 check_warning,
594 check_error
595 }
596 sse_check, operand_check = check_warning;
597
598 /* Optimization:
599 1. Clear the REX_W bit with register operand if possible.
600 2. Above plus use 128bit vector instruction to clear the full vector
601 register.
602 */
603 static int optimize = 0;
604
605 /* Optimization:
606 1. Clear the REX_W bit with register operand if possible.
607 2. Above plus use 128bit vector instruction to clear the full vector
608 register.
609 3. Above plus optimize "test{q,l,w} $imm8,%r{64,32,16}" to
610 "testb $imm7,%r8".
611 */
612 static int optimize_for_space = 0;
613
614 /* Register prefix used for error message. */
615 static const char *register_prefix = "%";
616
617 /* Used in 16 bit gcc mode to add an l suffix to call, ret, enter,
618 leave, push, and pop instructions so that gcc has the same stack
619 frame as in 32 bit mode. */
620 static char stackop_size = '\0';
621
622 /* Non-zero to optimize code alignment. */
623 int optimize_align_code = 1;
624
625 /* Non-zero to quieten some warnings. */
626 static int quiet_warnings = 0;
627
628 /* CPU name. */
629 static const char *cpu_arch_name = NULL;
630 static char *cpu_sub_arch_name = NULL;
631
632 /* CPU feature flags. */
633 static i386_cpu_flags cpu_arch_flags = CPU_UNKNOWN_FLAGS;
634
635 /* If we have selected a cpu we are generating instructions for. */
636 static int cpu_arch_tune_set = 0;
637
638 /* Cpu we are generating instructions for. */
639 enum processor_type cpu_arch_tune = PROCESSOR_UNKNOWN;
640
641 /* CPU feature flags of cpu we are generating instructions for. */
642 static i386_cpu_flags cpu_arch_tune_flags;
643
644 /* CPU instruction set architecture used. */
645 enum processor_type cpu_arch_isa = PROCESSOR_UNKNOWN;
646
647 /* CPU feature flags of instruction set architecture used. */
648 i386_cpu_flags cpu_arch_isa_flags;
649
650 /* If set, conditional jumps are not automatically promoted to handle
651 larger than a byte offset. */
652 static unsigned int no_cond_jump_promotion = 0;
653
654 /* Encode SSE instructions with VEX prefix. */
655 static unsigned int sse2avx;
656
657 /* Encode scalar AVX instructions with specific vector length. */
658 static enum
659 {
660 vex128 = 0,
661 vex256
662 } avxscalar;
663
664 /* Encode scalar EVEX LIG instructions with specific vector length. */
665 static enum
666 {
667 evexl128 = 0,
668 evexl256,
669 evexl512
670 } evexlig;
671
672 /* Encode EVEX WIG instructions with specific evex.w. */
673 static enum
674 {
675 evexw0 = 0,
676 evexw1
677 } evexwig;
678
679 /* Value to encode in EVEX RC bits, for SAE-only instructions. */
680 static enum rc_type evexrcig = rne;
681
682 /* Pre-defined "_GLOBAL_OFFSET_TABLE_". */
683 static symbolS *GOT_symbol;
684
685 /* The dwarf2 return column, adjusted for 32 or 64 bit. */
686 unsigned int x86_dwarf2_return_column;
687
688 /* The dwarf2 data alignment, adjusted for 32 or 64 bit. */
689 int x86_cie_data_alignment;
690
691 /* Interface to relax_segment.
692 There are 3 major relax states for 386 jump insns because the
693 different types of jumps add different sizes to frags when we're
694 figuring out what sort of jump to choose to reach a given label. */
695
696 /* Types. */
697 #define UNCOND_JUMP 0
698 #define COND_JUMP 1
699 #define COND_JUMP86 2
700
701 /* Sizes. */
702 #define CODE16 1
703 #define SMALL 0
704 #define SMALL16 (SMALL | CODE16)
705 #define BIG 2
706 #define BIG16 (BIG | CODE16)
707
708 #ifndef INLINE
709 #ifdef __GNUC__
710 #define INLINE __inline__
711 #else
712 #define INLINE
713 #endif
714 #endif
715
716 #define ENCODE_RELAX_STATE(type, size) \
717 ((relax_substateT) (((type) << 2) | (size)))
718 #define TYPE_FROM_RELAX_STATE(s) \
719 ((s) >> 2)
720 #define DISP_SIZE_FROM_RELAX_STATE(s) \
721 ((((s) & 3) == BIG ? 4 : (((s) & 3) == BIG16 ? 2 : 1)))
722
723 /* This table is used by relax_frag to promote short jumps to long
724 ones where necessary. SMALL (short) jumps may be promoted to BIG
725 (32 bit long) ones, and SMALL16 jumps to BIG16 (16 bit long). We
726 don't allow a short jump in a 32 bit code segment to be promoted to
727 a 16 bit offset jump because it's slower (requires data size
728 prefix), and doesn't work, unless the destination is in the bottom
729 64k of the code segment (The top 16 bits of eip are zeroed). */
730
731 const relax_typeS md_relax_table[] =
732 {
733 /* The fields are:
734 1) most positive reach of this state,
735 2) most negative reach of this state,
736 3) how many bytes this mode will have in the variable part of the frag
737 4) which index into the table to try if we can't fit into this one. */
738
739 /* UNCOND_JUMP states. */
740 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (UNCOND_JUMP, BIG)},
741 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (UNCOND_JUMP, BIG16)},
742 /* dword jmp adds 4 bytes to frag:
743 0 extra opcode bytes, 4 displacement bytes. */
744 {0, 0, 4, 0},
745 /* word jmp adds 2 byte2 to frag:
746 0 extra opcode bytes, 2 displacement bytes. */
747 {0, 0, 2, 0},
748
749 /* COND_JUMP states. */
750 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP, BIG)},
751 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP, BIG16)},
752 /* dword conditionals adds 5 bytes to frag:
753 1 extra opcode byte, 4 displacement bytes. */
754 {0, 0, 5, 0},
755 /* word conditionals add 3 bytes to frag:
756 1 extra opcode byte, 2 displacement bytes. */
757 {0, 0, 3, 0},
758
759 /* COND_JUMP86 states. */
760 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP86, BIG)},
761 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP86, BIG16)},
762 /* dword conditionals adds 5 bytes to frag:
763 1 extra opcode byte, 4 displacement bytes. */
764 {0, 0, 5, 0},
765 /* word conditionals add 4 bytes to frag:
766 1 displacement byte and a 3 byte long branch insn. */
767 {0, 0, 4, 0}
768 };
769
770 static const arch_entry cpu_arch[] =
771 {
772 /* Do not replace the first two entries - i386_target_format()
773 relies on them being there in this order. */
774 { STRING_COMMA_LEN ("generic32"), PROCESSOR_GENERIC32,
775 CPU_GENERIC32_FLAGS, 0 },
776 { STRING_COMMA_LEN ("generic64"), PROCESSOR_GENERIC64,
777 CPU_GENERIC64_FLAGS, 0 },
778 { STRING_COMMA_LEN ("i8086"), PROCESSOR_UNKNOWN,
779 CPU_NONE_FLAGS, 0 },
780 { STRING_COMMA_LEN ("i186"), PROCESSOR_UNKNOWN,
781 CPU_I186_FLAGS, 0 },
782 { STRING_COMMA_LEN ("i286"), PROCESSOR_UNKNOWN,
783 CPU_I286_FLAGS, 0 },
784 { STRING_COMMA_LEN ("i386"), PROCESSOR_I386,
785 CPU_I386_FLAGS, 0 },
786 { STRING_COMMA_LEN ("i486"), PROCESSOR_I486,
787 CPU_I486_FLAGS, 0 },
788 { STRING_COMMA_LEN ("i586"), PROCESSOR_PENTIUM,
789 CPU_I586_FLAGS, 0 },
790 { STRING_COMMA_LEN ("i686"), PROCESSOR_PENTIUMPRO,
791 CPU_I686_FLAGS, 0 },
792 { STRING_COMMA_LEN ("pentium"), PROCESSOR_PENTIUM,
793 CPU_I586_FLAGS, 0 },
794 { STRING_COMMA_LEN ("pentiumpro"), PROCESSOR_PENTIUMPRO,
795 CPU_PENTIUMPRO_FLAGS, 0 },
796 { STRING_COMMA_LEN ("pentiumii"), PROCESSOR_PENTIUMPRO,
797 CPU_P2_FLAGS, 0 },
798 { STRING_COMMA_LEN ("pentiumiii"),PROCESSOR_PENTIUMPRO,
799 CPU_P3_FLAGS, 0 },
800 { STRING_COMMA_LEN ("pentium4"), PROCESSOR_PENTIUM4,
801 CPU_P4_FLAGS, 0 },
802 { STRING_COMMA_LEN ("prescott"), PROCESSOR_NOCONA,
803 CPU_CORE_FLAGS, 0 },
804 { STRING_COMMA_LEN ("nocona"), PROCESSOR_NOCONA,
805 CPU_NOCONA_FLAGS, 0 },
806 { STRING_COMMA_LEN ("yonah"), PROCESSOR_CORE,
807 CPU_CORE_FLAGS, 1 },
808 { STRING_COMMA_LEN ("core"), PROCESSOR_CORE,
809 CPU_CORE_FLAGS, 0 },
810 { STRING_COMMA_LEN ("merom"), PROCESSOR_CORE2,
811 CPU_CORE2_FLAGS, 1 },
812 { STRING_COMMA_LEN ("core2"), PROCESSOR_CORE2,
813 CPU_CORE2_FLAGS, 0 },
814 { STRING_COMMA_LEN ("corei7"), PROCESSOR_COREI7,
815 CPU_COREI7_FLAGS, 0 },
816 { STRING_COMMA_LEN ("l1om"), PROCESSOR_L1OM,
817 CPU_L1OM_FLAGS, 0 },
818 { STRING_COMMA_LEN ("k1om"), PROCESSOR_K1OM,
819 CPU_K1OM_FLAGS, 0 },
820 { STRING_COMMA_LEN ("iamcu"), PROCESSOR_IAMCU,
821 CPU_IAMCU_FLAGS, 0 },
822 { STRING_COMMA_LEN ("k6"), PROCESSOR_K6,
823 CPU_K6_FLAGS, 0 },
824 { STRING_COMMA_LEN ("k6_2"), PROCESSOR_K6,
825 CPU_K6_2_FLAGS, 0 },
826 { STRING_COMMA_LEN ("athlon"), PROCESSOR_ATHLON,
827 CPU_ATHLON_FLAGS, 0 },
828 { STRING_COMMA_LEN ("sledgehammer"), PROCESSOR_K8,
829 CPU_K8_FLAGS, 1 },
830 { STRING_COMMA_LEN ("opteron"), PROCESSOR_K8,
831 CPU_K8_FLAGS, 0 },
832 { STRING_COMMA_LEN ("k8"), PROCESSOR_K8,
833 CPU_K8_FLAGS, 0 },
834 { STRING_COMMA_LEN ("amdfam10"), PROCESSOR_AMDFAM10,
835 CPU_AMDFAM10_FLAGS, 0 },
836 { STRING_COMMA_LEN ("bdver1"), PROCESSOR_BD,
837 CPU_BDVER1_FLAGS, 0 },
838 { STRING_COMMA_LEN ("bdver2"), PROCESSOR_BD,
839 CPU_BDVER2_FLAGS, 0 },
840 { STRING_COMMA_LEN ("bdver3"), PROCESSOR_BD,
841 CPU_BDVER3_FLAGS, 0 },
842 { STRING_COMMA_LEN ("bdver4"), PROCESSOR_BD,
843 CPU_BDVER4_FLAGS, 0 },
844 { STRING_COMMA_LEN ("znver1"), PROCESSOR_ZNVER,
845 CPU_ZNVER1_FLAGS, 0 },
846 { STRING_COMMA_LEN ("znver2"), PROCESSOR_ZNVER,
847 CPU_ZNVER2_FLAGS, 0 },
848 { STRING_COMMA_LEN ("btver1"), PROCESSOR_BT,
849 CPU_BTVER1_FLAGS, 0 },
850 { STRING_COMMA_LEN ("btver2"), PROCESSOR_BT,
851 CPU_BTVER2_FLAGS, 0 },
852 { STRING_COMMA_LEN (".8087"), PROCESSOR_UNKNOWN,
853 CPU_8087_FLAGS, 0 },
854 { STRING_COMMA_LEN (".287"), PROCESSOR_UNKNOWN,
855 CPU_287_FLAGS, 0 },
856 { STRING_COMMA_LEN (".387"), PROCESSOR_UNKNOWN,
857 CPU_387_FLAGS, 0 },
858 { STRING_COMMA_LEN (".687"), PROCESSOR_UNKNOWN,
859 CPU_687_FLAGS, 0 },
860 { STRING_COMMA_LEN (".mmx"), PROCESSOR_UNKNOWN,
861 CPU_MMX_FLAGS, 0 },
862 { STRING_COMMA_LEN (".sse"), PROCESSOR_UNKNOWN,
863 CPU_SSE_FLAGS, 0 },
864 { STRING_COMMA_LEN (".sse2"), PROCESSOR_UNKNOWN,
865 CPU_SSE2_FLAGS, 0 },
866 { STRING_COMMA_LEN (".sse3"), PROCESSOR_UNKNOWN,
867 CPU_SSE3_FLAGS, 0 },
868 { STRING_COMMA_LEN (".ssse3"), PROCESSOR_UNKNOWN,
869 CPU_SSSE3_FLAGS, 0 },
870 { STRING_COMMA_LEN (".sse4.1"), PROCESSOR_UNKNOWN,
871 CPU_SSE4_1_FLAGS, 0 },
872 { STRING_COMMA_LEN (".sse4.2"), PROCESSOR_UNKNOWN,
873 CPU_SSE4_2_FLAGS, 0 },
874 { STRING_COMMA_LEN (".sse4"), PROCESSOR_UNKNOWN,
875 CPU_SSE4_2_FLAGS, 0 },
876 { STRING_COMMA_LEN (".avx"), PROCESSOR_UNKNOWN,
877 CPU_AVX_FLAGS, 0 },
878 { STRING_COMMA_LEN (".avx2"), PROCESSOR_UNKNOWN,
879 CPU_AVX2_FLAGS, 0 },
880 { STRING_COMMA_LEN (".avx512f"), PROCESSOR_UNKNOWN,
881 CPU_AVX512F_FLAGS, 0 },
882 { STRING_COMMA_LEN (".avx512cd"), PROCESSOR_UNKNOWN,
883 CPU_AVX512CD_FLAGS, 0 },
884 { STRING_COMMA_LEN (".avx512er"), PROCESSOR_UNKNOWN,
885 CPU_AVX512ER_FLAGS, 0 },
886 { STRING_COMMA_LEN (".avx512pf"), PROCESSOR_UNKNOWN,
887 CPU_AVX512PF_FLAGS, 0 },
888 { STRING_COMMA_LEN (".avx512dq"), PROCESSOR_UNKNOWN,
889 CPU_AVX512DQ_FLAGS, 0 },
890 { STRING_COMMA_LEN (".avx512bw"), PROCESSOR_UNKNOWN,
891 CPU_AVX512BW_FLAGS, 0 },
892 { STRING_COMMA_LEN (".avx512vl"), PROCESSOR_UNKNOWN,
893 CPU_AVX512VL_FLAGS, 0 },
894 { STRING_COMMA_LEN (".vmx"), PROCESSOR_UNKNOWN,
895 CPU_VMX_FLAGS, 0 },
896 { STRING_COMMA_LEN (".vmfunc"), PROCESSOR_UNKNOWN,
897 CPU_VMFUNC_FLAGS, 0 },
898 { STRING_COMMA_LEN (".smx"), PROCESSOR_UNKNOWN,
899 CPU_SMX_FLAGS, 0 },
900 { STRING_COMMA_LEN (".xsave"), PROCESSOR_UNKNOWN,
901 CPU_XSAVE_FLAGS, 0 },
902 { STRING_COMMA_LEN (".xsaveopt"), PROCESSOR_UNKNOWN,
903 CPU_XSAVEOPT_FLAGS, 0 },
904 { STRING_COMMA_LEN (".xsavec"), PROCESSOR_UNKNOWN,
905 CPU_XSAVEC_FLAGS, 0 },
906 { STRING_COMMA_LEN (".xsaves"), PROCESSOR_UNKNOWN,
907 CPU_XSAVES_FLAGS, 0 },
908 { STRING_COMMA_LEN (".aes"), PROCESSOR_UNKNOWN,
909 CPU_AES_FLAGS, 0 },
910 { STRING_COMMA_LEN (".pclmul"), PROCESSOR_UNKNOWN,
911 CPU_PCLMUL_FLAGS, 0 },
912 { STRING_COMMA_LEN (".clmul"), PROCESSOR_UNKNOWN,
913 CPU_PCLMUL_FLAGS, 1 },
914 { STRING_COMMA_LEN (".fsgsbase"), PROCESSOR_UNKNOWN,
915 CPU_FSGSBASE_FLAGS, 0 },
916 { STRING_COMMA_LEN (".rdrnd"), PROCESSOR_UNKNOWN,
917 CPU_RDRND_FLAGS, 0 },
918 { STRING_COMMA_LEN (".f16c"), PROCESSOR_UNKNOWN,
919 CPU_F16C_FLAGS, 0 },
920 { STRING_COMMA_LEN (".bmi2"), PROCESSOR_UNKNOWN,
921 CPU_BMI2_FLAGS, 0 },
922 { STRING_COMMA_LEN (".fma"), PROCESSOR_UNKNOWN,
923 CPU_FMA_FLAGS, 0 },
924 { STRING_COMMA_LEN (".fma4"), PROCESSOR_UNKNOWN,
925 CPU_FMA4_FLAGS, 0 },
926 { STRING_COMMA_LEN (".xop"), PROCESSOR_UNKNOWN,
927 CPU_XOP_FLAGS, 0 },
928 { STRING_COMMA_LEN (".lwp"), PROCESSOR_UNKNOWN,
929 CPU_LWP_FLAGS, 0 },
930 { STRING_COMMA_LEN (".movbe"), PROCESSOR_UNKNOWN,
931 CPU_MOVBE_FLAGS, 0 },
932 { STRING_COMMA_LEN (".cx16"), PROCESSOR_UNKNOWN,
933 CPU_CX16_FLAGS, 0 },
934 { STRING_COMMA_LEN (".ept"), PROCESSOR_UNKNOWN,
935 CPU_EPT_FLAGS, 0 },
936 { STRING_COMMA_LEN (".lzcnt"), PROCESSOR_UNKNOWN,
937 CPU_LZCNT_FLAGS, 0 },
938 { STRING_COMMA_LEN (".hle"), PROCESSOR_UNKNOWN,
939 CPU_HLE_FLAGS, 0 },
940 { STRING_COMMA_LEN (".rtm"), PROCESSOR_UNKNOWN,
941 CPU_RTM_FLAGS, 0 },
942 { STRING_COMMA_LEN (".invpcid"), PROCESSOR_UNKNOWN,
943 CPU_INVPCID_FLAGS, 0 },
944 { STRING_COMMA_LEN (".clflush"), PROCESSOR_UNKNOWN,
945 CPU_CLFLUSH_FLAGS, 0 },
946 { STRING_COMMA_LEN (".nop"), PROCESSOR_UNKNOWN,
947 CPU_NOP_FLAGS, 0 },
948 { STRING_COMMA_LEN (".syscall"), PROCESSOR_UNKNOWN,
949 CPU_SYSCALL_FLAGS, 0 },
950 { STRING_COMMA_LEN (".rdtscp"), PROCESSOR_UNKNOWN,
951 CPU_RDTSCP_FLAGS, 0 },
952 { STRING_COMMA_LEN (".3dnow"), PROCESSOR_UNKNOWN,
953 CPU_3DNOW_FLAGS, 0 },
954 { STRING_COMMA_LEN (".3dnowa"), PROCESSOR_UNKNOWN,
955 CPU_3DNOWA_FLAGS, 0 },
956 { STRING_COMMA_LEN (".padlock"), PROCESSOR_UNKNOWN,
957 CPU_PADLOCK_FLAGS, 0 },
958 { STRING_COMMA_LEN (".pacifica"), PROCESSOR_UNKNOWN,
959 CPU_SVME_FLAGS, 1 },
960 { STRING_COMMA_LEN (".svme"), PROCESSOR_UNKNOWN,
961 CPU_SVME_FLAGS, 0 },
962 { STRING_COMMA_LEN (".sse4a"), PROCESSOR_UNKNOWN,
963 CPU_SSE4A_FLAGS, 0 },
964 { STRING_COMMA_LEN (".abm"), PROCESSOR_UNKNOWN,
965 CPU_ABM_FLAGS, 0 },
966 { STRING_COMMA_LEN (".bmi"), PROCESSOR_UNKNOWN,
967 CPU_BMI_FLAGS, 0 },
968 { STRING_COMMA_LEN (".tbm"), PROCESSOR_UNKNOWN,
969 CPU_TBM_FLAGS, 0 },
970 { STRING_COMMA_LEN (".adx"), PROCESSOR_UNKNOWN,
971 CPU_ADX_FLAGS, 0 },
972 { STRING_COMMA_LEN (".rdseed"), PROCESSOR_UNKNOWN,
973 CPU_RDSEED_FLAGS, 0 },
974 { STRING_COMMA_LEN (".prfchw"), PROCESSOR_UNKNOWN,
975 CPU_PRFCHW_FLAGS, 0 },
976 { STRING_COMMA_LEN (".smap"), PROCESSOR_UNKNOWN,
977 CPU_SMAP_FLAGS, 0 },
978 { STRING_COMMA_LEN (".mpx"), PROCESSOR_UNKNOWN,
979 CPU_MPX_FLAGS, 0 },
980 { STRING_COMMA_LEN (".sha"), PROCESSOR_UNKNOWN,
981 CPU_SHA_FLAGS, 0 },
982 { STRING_COMMA_LEN (".clflushopt"), PROCESSOR_UNKNOWN,
983 CPU_CLFLUSHOPT_FLAGS, 0 },
984 { STRING_COMMA_LEN (".prefetchwt1"), PROCESSOR_UNKNOWN,
985 CPU_PREFETCHWT1_FLAGS, 0 },
986 { STRING_COMMA_LEN (".se1"), PROCESSOR_UNKNOWN,
987 CPU_SE1_FLAGS, 0 },
988 { STRING_COMMA_LEN (".clwb"), PROCESSOR_UNKNOWN,
989 CPU_CLWB_FLAGS, 0 },
990 { STRING_COMMA_LEN (".avx512ifma"), PROCESSOR_UNKNOWN,
991 CPU_AVX512IFMA_FLAGS, 0 },
992 { STRING_COMMA_LEN (".avx512vbmi"), PROCESSOR_UNKNOWN,
993 CPU_AVX512VBMI_FLAGS, 0 },
994 { STRING_COMMA_LEN (".avx512_4fmaps"), PROCESSOR_UNKNOWN,
995 CPU_AVX512_4FMAPS_FLAGS, 0 },
996 { STRING_COMMA_LEN (".avx512_4vnniw"), PROCESSOR_UNKNOWN,
997 CPU_AVX512_4VNNIW_FLAGS, 0 },
998 { STRING_COMMA_LEN (".avx512_vpopcntdq"), PROCESSOR_UNKNOWN,
999 CPU_AVX512_VPOPCNTDQ_FLAGS, 0 },
1000 { STRING_COMMA_LEN (".avx512_vbmi2"), PROCESSOR_UNKNOWN,
1001 CPU_AVX512_VBMI2_FLAGS, 0 },
1002 { STRING_COMMA_LEN (".avx512_vnni"), PROCESSOR_UNKNOWN,
1003 CPU_AVX512_VNNI_FLAGS, 0 },
1004 { STRING_COMMA_LEN (".avx512_bitalg"), PROCESSOR_UNKNOWN,
1005 CPU_AVX512_BITALG_FLAGS, 0 },
1006 { STRING_COMMA_LEN (".clzero"), PROCESSOR_UNKNOWN,
1007 CPU_CLZERO_FLAGS, 0 },
1008 { STRING_COMMA_LEN (".mwaitx"), PROCESSOR_UNKNOWN,
1009 CPU_MWAITX_FLAGS, 0 },
1010 { STRING_COMMA_LEN (".ospke"), PROCESSOR_UNKNOWN,
1011 CPU_OSPKE_FLAGS, 0 },
1012 { STRING_COMMA_LEN (".rdpid"), PROCESSOR_UNKNOWN,
1013 CPU_RDPID_FLAGS, 0 },
1014 { STRING_COMMA_LEN (".ptwrite"), PROCESSOR_UNKNOWN,
1015 CPU_PTWRITE_FLAGS, 0 },
1016 { STRING_COMMA_LEN (".ibt"), PROCESSOR_UNKNOWN,
1017 CPU_IBT_FLAGS, 0 },
1018 { STRING_COMMA_LEN (".shstk"), PROCESSOR_UNKNOWN,
1019 CPU_SHSTK_FLAGS, 0 },
1020 { STRING_COMMA_LEN (".gfni"), PROCESSOR_UNKNOWN,
1021 CPU_GFNI_FLAGS, 0 },
1022 { STRING_COMMA_LEN (".vaes"), PROCESSOR_UNKNOWN,
1023 CPU_VAES_FLAGS, 0 },
1024 { STRING_COMMA_LEN (".vpclmulqdq"), PROCESSOR_UNKNOWN,
1025 CPU_VPCLMULQDQ_FLAGS, 0 },
1026 { STRING_COMMA_LEN (".wbnoinvd"), PROCESSOR_UNKNOWN,
1027 CPU_WBNOINVD_FLAGS, 0 },
1028 { STRING_COMMA_LEN (".pconfig"), PROCESSOR_UNKNOWN,
1029 CPU_PCONFIG_FLAGS, 0 },
1030 { STRING_COMMA_LEN (".waitpkg"), PROCESSOR_UNKNOWN,
1031 CPU_WAITPKG_FLAGS, 0 },
1032 { STRING_COMMA_LEN (".cldemote"), PROCESSOR_UNKNOWN,
1033 CPU_CLDEMOTE_FLAGS, 0 },
1034 { STRING_COMMA_LEN (".movdiri"), PROCESSOR_UNKNOWN,
1035 CPU_MOVDIRI_FLAGS, 0 },
1036 { STRING_COMMA_LEN (".movdir64b"), PROCESSOR_UNKNOWN,
1037 CPU_MOVDIR64B_FLAGS, 0 },
1038 };
1039
1040 static const noarch_entry cpu_noarch[] =
1041 {
1042 { STRING_COMMA_LEN ("no87"), CPU_ANY_X87_FLAGS },
1043 { STRING_COMMA_LEN ("no287"), CPU_ANY_287_FLAGS },
1044 { STRING_COMMA_LEN ("no387"), CPU_ANY_387_FLAGS },
1045 { STRING_COMMA_LEN ("no687"), CPU_ANY_687_FLAGS },
1046 { STRING_COMMA_LEN ("nommx"), CPU_ANY_MMX_FLAGS },
1047 { STRING_COMMA_LEN ("nosse"), CPU_ANY_SSE_FLAGS },
1048 { STRING_COMMA_LEN ("nosse2"), CPU_ANY_SSE2_FLAGS },
1049 { STRING_COMMA_LEN ("nosse3"), CPU_ANY_SSE3_FLAGS },
1050 { STRING_COMMA_LEN ("nossse3"), CPU_ANY_SSSE3_FLAGS },
1051 { STRING_COMMA_LEN ("nosse4.1"), CPU_ANY_SSE4_1_FLAGS },
1052 { STRING_COMMA_LEN ("nosse4.2"), CPU_ANY_SSE4_2_FLAGS },
1053 { STRING_COMMA_LEN ("nosse4"), CPU_ANY_SSE4_1_FLAGS },
1054 { STRING_COMMA_LEN ("noavx"), CPU_ANY_AVX_FLAGS },
1055 { STRING_COMMA_LEN ("noavx2"), CPU_ANY_AVX2_FLAGS },
1056 { STRING_COMMA_LEN ("noavx512f"), CPU_ANY_AVX512F_FLAGS },
1057 { STRING_COMMA_LEN ("noavx512cd"), CPU_ANY_AVX512CD_FLAGS },
1058 { STRING_COMMA_LEN ("noavx512er"), CPU_ANY_AVX512ER_FLAGS },
1059 { STRING_COMMA_LEN ("noavx512pf"), CPU_ANY_AVX512PF_FLAGS },
1060 { STRING_COMMA_LEN ("noavx512dq"), CPU_ANY_AVX512DQ_FLAGS },
1061 { STRING_COMMA_LEN ("noavx512bw"), CPU_ANY_AVX512BW_FLAGS },
1062 { STRING_COMMA_LEN ("noavx512vl"), CPU_ANY_AVX512VL_FLAGS },
1063 { STRING_COMMA_LEN ("noavx512ifma"), CPU_ANY_AVX512IFMA_FLAGS },
1064 { STRING_COMMA_LEN ("noavx512vbmi"), CPU_ANY_AVX512VBMI_FLAGS },
1065 { STRING_COMMA_LEN ("noavx512_4fmaps"), CPU_ANY_AVX512_4FMAPS_FLAGS },
1066 { STRING_COMMA_LEN ("noavx512_4vnniw"), CPU_ANY_AVX512_4VNNIW_FLAGS },
1067 { STRING_COMMA_LEN ("noavx512_vpopcntdq"), CPU_ANY_AVX512_VPOPCNTDQ_FLAGS },
1068 { STRING_COMMA_LEN ("noavx512_vbmi2"), CPU_ANY_AVX512_VBMI2_FLAGS },
1069 { STRING_COMMA_LEN ("noavx512_vnni"), CPU_ANY_AVX512_VNNI_FLAGS },
1070 { STRING_COMMA_LEN ("noavx512_bitalg"), CPU_ANY_AVX512_BITALG_FLAGS },
1071 { STRING_COMMA_LEN ("noibt"), CPU_ANY_IBT_FLAGS },
1072 { STRING_COMMA_LEN ("noshstk"), CPU_ANY_SHSTK_FLAGS },
1073 { STRING_COMMA_LEN ("nomovdiri"), CPU_ANY_MOVDIRI_FLAGS },
1074 { STRING_COMMA_LEN ("nomovdir64b"), CPU_ANY_MOVDIR64B_FLAGS },
1075 };
1076
1077 #ifdef I386COFF
1078 /* Like s_lcomm_internal in gas/read.c but the alignment string
1079 is allowed to be optional. */
1080
1081 static symbolS *
1082 pe_lcomm_internal (int needs_align, symbolS *symbolP, addressT size)
1083 {
1084 addressT align = 0;
1085
1086 SKIP_WHITESPACE ();
1087
1088 if (needs_align
1089 && *input_line_pointer == ',')
1090 {
1091 align = parse_align (needs_align - 1);
1092
1093 if (align == (addressT) -1)
1094 return NULL;
1095 }
1096 else
1097 {
1098 if (size >= 8)
1099 align = 3;
1100 else if (size >= 4)
1101 align = 2;
1102 else if (size >= 2)
1103 align = 1;
1104 else
1105 align = 0;
1106 }
1107
1108 bss_alloc (symbolP, size, align);
1109 return symbolP;
1110 }
1111
1112 static void
1113 pe_lcomm (int needs_align)
1114 {
1115 s_comm_internal (needs_align * 2, pe_lcomm_internal);
1116 }
1117 #endif
1118
1119 const pseudo_typeS md_pseudo_table[] =
1120 {
1121 #if !defined(OBJ_AOUT) && !defined(USE_ALIGN_PTWO)
1122 {"align", s_align_bytes, 0},
1123 #else
1124 {"align", s_align_ptwo, 0},
1125 #endif
1126 {"arch", set_cpu_arch, 0},
1127 #ifndef I386COFF
1128 {"bss", s_bss, 0},
1129 #else
1130 {"lcomm", pe_lcomm, 1},
1131 #endif
1132 {"ffloat", float_cons, 'f'},
1133 {"dfloat", float_cons, 'd'},
1134 {"tfloat", float_cons, 'x'},
1135 {"value", cons, 2},
1136 {"slong", signed_cons, 4},
1137 {"noopt", s_ignore, 0},
1138 {"optim", s_ignore, 0},
1139 {"code16gcc", set_16bit_gcc_code_flag, CODE_16BIT},
1140 {"code16", set_code_flag, CODE_16BIT},
1141 {"code32", set_code_flag, CODE_32BIT},
1142 #ifdef BFD64
1143 {"code64", set_code_flag, CODE_64BIT},
1144 #endif
1145 {"intel_syntax", set_intel_syntax, 1},
1146 {"att_syntax", set_intel_syntax, 0},
1147 {"intel_mnemonic", set_intel_mnemonic, 1},
1148 {"att_mnemonic", set_intel_mnemonic, 0},
1149 {"allow_index_reg", set_allow_index_reg, 1},
1150 {"disallow_index_reg", set_allow_index_reg, 0},
1151 {"sse_check", set_check, 0},
1152 {"operand_check", set_check, 1},
1153 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
1154 {"largecomm", handle_large_common, 0},
1155 #else
1156 {"file", dwarf2_directive_file, 0},
1157 {"loc", dwarf2_directive_loc, 0},
1158 {"loc_mark_labels", dwarf2_directive_loc_mark_labels, 0},
1159 #endif
1160 #ifdef TE_PE
1161 {"secrel32", pe_directive_secrel, 0},
1162 #endif
1163 {0, 0, 0}
1164 };
1165
1166 /* For interface with expression (). */
1167 extern char *input_line_pointer;
1168
1169 /* Hash table for instruction mnemonic lookup. */
1170 static struct hash_control *op_hash;
1171
1172 /* Hash table for register lookup. */
1173 static struct hash_control *reg_hash;
1174 \f
1175 /* Various efficient no-op patterns for aligning code labels.
1176 Note: Don't try to assemble the instructions in the comments.
1177 0L and 0w are not legal. */
1178 static const unsigned char f32_1[] =
1179 {0x90}; /* nop */
1180 static const unsigned char f32_2[] =
1181 {0x66,0x90}; /* xchg %ax,%ax */
1182 static const unsigned char f32_3[] =
1183 {0x8d,0x76,0x00}; /* leal 0(%esi),%esi */
1184 static const unsigned char f32_4[] =
1185 {0x8d,0x74,0x26,0x00}; /* leal 0(%esi,1),%esi */
1186 static const unsigned char f32_6[] =
1187 {0x8d,0xb6,0x00,0x00,0x00,0x00}; /* leal 0L(%esi),%esi */
1188 static const unsigned char f32_7[] =
1189 {0x8d,0xb4,0x26,0x00,0x00,0x00,0x00}; /* leal 0L(%esi,1),%esi */
1190 static const unsigned char f16_3[] =
1191 {0x8d,0x74,0x00}; /* lea 0(%si),%si */
1192 static const unsigned char f16_4[] =
1193 {0x8d,0xb4,0x00,0x00}; /* lea 0W(%si),%si */
1194 static const unsigned char jump_disp8[] =
1195 {0xeb}; /* jmp disp8 */
1196 static const unsigned char jump32_disp32[] =
1197 {0xe9}; /* jmp disp32 */
1198 static const unsigned char jump16_disp32[] =
1199 {0x66,0xe9}; /* jmp disp32 */
1200 /* 32-bit NOPs patterns. */
1201 static const unsigned char *const f32_patt[] = {
1202 f32_1, f32_2, f32_3, f32_4, NULL, f32_6, f32_7
1203 };
1204 /* 16-bit NOPs patterns. */
1205 static const unsigned char *const f16_patt[] = {
1206 f32_1, f32_2, f16_3, f16_4
1207 };
1208 /* nopl (%[re]ax) */
1209 static const unsigned char alt_3[] =
1210 {0x0f,0x1f,0x00};
1211 /* nopl 0(%[re]ax) */
1212 static const unsigned char alt_4[] =
1213 {0x0f,0x1f,0x40,0x00};
1214 /* nopl 0(%[re]ax,%[re]ax,1) */
1215 static const unsigned char alt_5[] =
1216 {0x0f,0x1f,0x44,0x00,0x00};
1217 /* nopw 0(%[re]ax,%[re]ax,1) */
1218 static const unsigned char alt_6[] =
1219 {0x66,0x0f,0x1f,0x44,0x00,0x00};
1220 /* nopl 0L(%[re]ax) */
1221 static const unsigned char alt_7[] =
1222 {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
1223 /* nopl 0L(%[re]ax,%[re]ax,1) */
1224 static const unsigned char alt_8[] =
1225 {0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
1226 /* nopw 0L(%[re]ax,%[re]ax,1) */
1227 static const unsigned char alt_9[] =
1228 {0x66,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
1229 /* nopw %cs:0L(%[re]ax,%[re]ax,1) */
1230 static const unsigned char alt_10[] =
1231 {0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
1232 /* data16 nopw %cs:0L(%eax,%eax,1) */
1233 static const unsigned char alt_11[] =
1234 {0x66,0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
1235 /* 32-bit and 64-bit NOPs patterns. */
1236 static const unsigned char *const alt_patt[] = {
1237 f32_1, f32_2, alt_3, alt_4, alt_5, alt_6, alt_7, alt_8,
1238 alt_9, alt_10, alt_11
1239 };
1240
1241 /* Genenerate COUNT bytes of NOPs to WHERE from PATT with the maximum
1242 size of a single NOP instruction MAX_SINGLE_NOP_SIZE. */
1243
1244 static void
1245 i386_output_nops (char *where, const unsigned char *const *patt,
1246 int count, int max_single_nop_size)
1247
1248 {
1249 /* Place the longer NOP first. */
1250 int last;
1251 int offset;
1252 const unsigned char *nops = patt[max_single_nop_size - 1];
1253
1254 /* Use the smaller one if the requsted one isn't available. */
1255 if (nops == NULL)
1256 {
1257 max_single_nop_size--;
1258 nops = patt[max_single_nop_size - 1];
1259 }
1260
1261 last = count % max_single_nop_size;
1262
1263 count -= last;
1264 for (offset = 0; offset < count; offset += max_single_nop_size)
1265 memcpy (where + offset, nops, max_single_nop_size);
1266
1267 if (last)
1268 {
1269 nops = patt[last - 1];
1270 if (nops == NULL)
1271 {
1272 /* Use the smaller one plus one-byte NOP if the needed one
1273 isn't available. */
1274 last--;
1275 nops = patt[last - 1];
1276 memcpy (where + offset, nops, last);
1277 where[offset + last] = *patt[0];
1278 }
1279 else
1280 memcpy (where + offset, nops, last);
1281 }
1282 }
1283
1284 static INLINE int
1285 fits_in_imm7 (offsetT num)
1286 {
1287 return (num & 0x7f) == num;
1288 }
1289
1290 static INLINE int
1291 fits_in_imm31 (offsetT num)
1292 {
1293 return (num & 0x7fffffff) == num;
1294 }
1295
1296 /* Genenerate COUNT bytes of NOPs to WHERE with the maximum size of a
1297 single NOP instruction LIMIT. */
1298
1299 void
1300 i386_generate_nops (fragS *fragP, char *where, offsetT count, int limit)
1301 {
1302 const unsigned char *const *patt = NULL;
1303 int max_single_nop_size;
1304 /* Maximum number of NOPs before switching to jump over NOPs. */
1305 int max_number_of_nops;
1306
1307 switch (fragP->fr_type)
1308 {
1309 case rs_fill_nop:
1310 case rs_align_code:
1311 break;
1312 default:
1313 return;
1314 }
1315
1316 /* We need to decide which NOP sequence to use for 32bit and
1317 64bit. When -mtune= is used:
1318
1319 1. For PROCESSOR_I386, PROCESSOR_I486, PROCESSOR_PENTIUM and
1320 PROCESSOR_GENERIC32, f32_patt will be used.
1321 2. For the rest, alt_patt will be used.
1322
1323 When -mtune= isn't used, alt_patt will be used if
1324 cpu_arch_isa_flags has CpuNop. Otherwise, f32_patt will
1325 be used.
1326
1327 When -march= or .arch is used, we can't use anything beyond
1328 cpu_arch_isa_flags. */
1329
1330 if (flag_code == CODE_16BIT)
1331 {
1332 patt = f16_patt;
1333 max_single_nop_size = sizeof (f16_patt) / sizeof (f16_patt[0]);
1334 /* Limit number of NOPs to 2 in 16-bit mode. */
1335 max_number_of_nops = 2;
1336 }
1337 else
1338 {
1339 if (fragP->tc_frag_data.isa == PROCESSOR_UNKNOWN)
1340 {
1341 /* PROCESSOR_UNKNOWN means that all ISAs may be used. */
1342 switch (cpu_arch_tune)
1343 {
1344 case PROCESSOR_UNKNOWN:
1345 /* We use cpu_arch_isa_flags to check if we SHOULD
1346 optimize with nops. */
1347 if (fragP->tc_frag_data.isa_flags.bitfield.cpunop)
1348 patt = alt_patt;
1349 else
1350 patt = f32_patt;
1351 break;
1352 case PROCESSOR_PENTIUM4:
1353 case PROCESSOR_NOCONA:
1354 case PROCESSOR_CORE:
1355 case PROCESSOR_CORE2:
1356 case PROCESSOR_COREI7:
1357 case PROCESSOR_L1OM:
1358 case PROCESSOR_K1OM:
1359 case PROCESSOR_GENERIC64:
1360 case PROCESSOR_K6:
1361 case PROCESSOR_ATHLON:
1362 case PROCESSOR_K8:
1363 case PROCESSOR_AMDFAM10:
1364 case PROCESSOR_BD:
1365 case PROCESSOR_ZNVER:
1366 case PROCESSOR_BT:
1367 patt = alt_patt;
1368 break;
1369 case PROCESSOR_I386:
1370 case PROCESSOR_I486:
1371 case PROCESSOR_PENTIUM:
1372 case PROCESSOR_PENTIUMPRO:
1373 case PROCESSOR_IAMCU:
1374 case PROCESSOR_GENERIC32:
1375 patt = f32_patt;
1376 break;
1377 }
1378 }
1379 else
1380 {
1381 switch (fragP->tc_frag_data.tune)
1382 {
1383 case PROCESSOR_UNKNOWN:
1384 /* When cpu_arch_isa is set, cpu_arch_tune shouldn't be
1385 PROCESSOR_UNKNOWN. */
1386 abort ();
1387 break;
1388
1389 case PROCESSOR_I386:
1390 case PROCESSOR_I486:
1391 case PROCESSOR_PENTIUM:
1392 case PROCESSOR_IAMCU:
1393 case PROCESSOR_K6:
1394 case PROCESSOR_ATHLON:
1395 case PROCESSOR_K8:
1396 case PROCESSOR_AMDFAM10:
1397 case PROCESSOR_BD:
1398 case PROCESSOR_ZNVER:
1399 case PROCESSOR_BT:
1400 case PROCESSOR_GENERIC32:
1401 /* We use cpu_arch_isa_flags to check if we CAN optimize
1402 with nops. */
1403 if (fragP->tc_frag_data.isa_flags.bitfield.cpunop)
1404 patt = alt_patt;
1405 else
1406 patt = f32_patt;
1407 break;
1408 case PROCESSOR_PENTIUMPRO:
1409 case PROCESSOR_PENTIUM4:
1410 case PROCESSOR_NOCONA:
1411 case PROCESSOR_CORE:
1412 case PROCESSOR_CORE2:
1413 case PROCESSOR_COREI7:
1414 case PROCESSOR_L1OM:
1415 case PROCESSOR_K1OM:
1416 if (fragP->tc_frag_data.isa_flags.bitfield.cpunop)
1417 patt = alt_patt;
1418 else
1419 patt = f32_patt;
1420 break;
1421 case PROCESSOR_GENERIC64:
1422 patt = alt_patt;
1423 break;
1424 }
1425 }
1426
1427 if (patt == f32_patt)
1428 {
1429 max_single_nop_size = sizeof (f32_patt) / sizeof (f32_patt[0]);
1430 /* Limit number of NOPs to 2 for older processors. */
1431 max_number_of_nops = 2;
1432 }
1433 else
1434 {
1435 max_single_nop_size = sizeof (alt_patt) / sizeof (alt_patt[0]);
1436 /* Limit number of NOPs to 7 for newer processors. */
1437 max_number_of_nops = 7;
1438 }
1439 }
1440
1441 if (limit == 0)
1442 limit = max_single_nop_size;
1443
1444 if (fragP->fr_type == rs_fill_nop)
1445 {
1446 /* Output NOPs for .nop directive. */
1447 if (limit > max_single_nop_size)
1448 {
1449 as_bad_where (fragP->fr_file, fragP->fr_line,
1450 _("invalid single nop size: %d "
1451 "(expect within [0, %d])"),
1452 limit, max_single_nop_size);
1453 return;
1454 }
1455 }
1456 else
1457 fragP->fr_var = count;
1458
1459 if ((count / max_single_nop_size) > max_number_of_nops)
1460 {
1461 /* Generate jump over NOPs. */
1462 offsetT disp = count - 2;
1463 if (fits_in_imm7 (disp))
1464 {
1465 /* Use "jmp disp8" if possible. */
1466 count = disp;
1467 where[0] = jump_disp8[0];
1468 where[1] = count;
1469 where += 2;
1470 }
1471 else
1472 {
1473 unsigned int size_of_jump;
1474
1475 if (flag_code == CODE_16BIT)
1476 {
1477 where[0] = jump16_disp32[0];
1478 where[1] = jump16_disp32[1];
1479 size_of_jump = 2;
1480 }
1481 else
1482 {
1483 where[0] = jump32_disp32[0];
1484 size_of_jump = 1;
1485 }
1486
1487 count -= size_of_jump + 4;
1488 if (!fits_in_imm31 (count))
1489 {
1490 as_bad_where (fragP->fr_file, fragP->fr_line,
1491 _("jump over nop padding out of range"));
1492 return;
1493 }
1494
1495 md_number_to_chars (where + size_of_jump, count, 4);
1496 where += size_of_jump + 4;
1497 }
1498 }
1499
1500 /* Generate multiple NOPs. */
1501 i386_output_nops (where, patt, count, limit);
1502 }
1503
1504 static INLINE int
1505 operand_type_all_zero (const union i386_operand_type *x)
1506 {
1507 switch (ARRAY_SIZE(x->array))
1508 {
1509 case 3:
1510 if (x->array[2])
1511 return 0;
1512 /* Fall through. */
1513 case 2:
1514 if (x->array[1])
1515 return 0;
1516 /* Fall through. */
1517 case 1:
1518 return !x->array[0];
1519 default:
1520 abort ();
1521 }
1522 }
1523
1524 static INLINE void
1525 operand_type_set (union i386_operand_type *x, unsigned int v)
1526 {
1527 switch (ARRAY_SIZE(x->array))
1528 {
1529 case 3:
1530 x->array[2] = v;
1531 /* Fall through. */
1532 case 2:
1533 x->array[1] = v;
1534 /* Fall through. */
1535 case 1:
1536 x->array[0] = v;
1537 /* Fall through. */
1538 break;
1539 default:
1540 abort ();
1541 }
1542 }
1543
1544 static INLINE int
1545 operand_type_equal (const union i386_operand_type *x,
1546 const union i386_operand_type *y)
1547 {
1548 switch (ARRAY_SIZE(x->array))
1549 {
1550 case 3:
1551 if (x->array[2] != y->array[2])
1552 return 0;
1553 /* Fall through. */
1554 case 2:
1555 if (x->array[1] != y->array[1])
1556 return 0;
1557 /* Fall through. */
1558 case 1:
1559 return x->array[0] == y->array[0];
1560 break;
1561 default:
1562 abort ();
1563 }
1564 }
1565
1566 static INLINE int
1567 cpu_flags_all_zero (const union i386_cpu_flags *x)
1568 {
1569 switch (ARRAY_SIZE(x->array))
1570 {
1571 case 4:
1572 if (x->array[3])
1573 return 0;
1574 /* Fall through. */
1575 case 3:
1576 if (x->array[2])
1577 return 0;
1578 /* Fall through. */
1579 case 2:
1580 if (x->array[1])
1581 return 0;
1582 /* Fall through. */
1583 case 1:
1584 return !x->array[0];
1585 default:
1586 abort ();
1587 }
1588 }
1589
1590 static INLINE int
1591 cpu_flags_equal (const union i386_cpu_flags *x,
1592 const union i386_cpu_flags *y)
1593 {
1594 switch (ARRAY_SIZE(x->array))
1595 {
1596 case 4:
1597 if (x->array[3] != y->array[3])
1598 return 0;
1599 /* Fall through. */
1600 case 3:
1601 if (x->array[2] != y->array[2])
1602 return 0;
1603 /* Fall through. */
1604 case 2:
1605 if (x->array[1] != y->array[1])
1606 return 0;
1607 /* Fall through. */
1608 case 1:
1609 return x->array[0] == y->array[0];
1610 break;
1611 default:
1612 abort ();
1613 }
1614 }
1615
1616 static INLINE int
1617 cpu_flags_check_cpu64 (i386_cpu_flags f)
1618 {
1619 return !((flag_code == CODE_64BIT && f.bitfield.cpuno64)
1620 || (flag_code != CODE_64BIT && f.bitfield.cpu64));
1621 }
1622
1623 static INLINE i386_cpu_flags
1624 cpu_flags_and (i386_cpu_flags x, i386_cpu_flags y)
1625 {
1626 switch (ARRAY_SIZE (x.array))
1627 {
1628 case 4:
1629 x.array [3] &= y.array [3];
1630 /* Fall through. */
1631 case 3:
1632 x.array [2] &= y.array [2];
1633 /* Fall through. */
1634 case 2:
1635 x.array [1] &= y.array [1];
1636 /* Fall through. */
1637 case 1:
1638 x.array [0] &= y.array [0];
1639 break;
1640 default:
1641 abort ();
1642 }
1643 return x;
1644 }
1645
1646 static INLINE i386_cpu_flags
1647 cpu_flags_or (i386_cpu_flags x, i386_cpu_flags y)
1648 {
1649 switch (ARRAY_SIZE (x.array))
1650 {
1651 case 4:
1652 x.array [3] |= y.array [3];
1653 /* Fall through. */
1654 case 3:
1655 x.array [2] |= y.array [2];
1656 /* Fall through. */
1657 case 2:
1658 x.array [1] |= y.array [1];
1659 /* Fall through. */
1660 case 1:
1661 x.array [0] |= y.array [0];
1662 break;
1663 default:
1664 abort ();
1665 }
1666 return x;
1667 }
1668
1669 static INLINE i386_cpu_flags
1670 cpu_flags_and_not (i386_cpu_flags x, i386_cpu_flags y)
1671 {
1672 switch (ARRAY_SIZE (x.array))
1673 {
1674 case 4:
1675 x.array [3] &= ~y.array [3];
1676 /* Fall through. */
1677 case 3:
1678 x.array [2] &= ~y.array [2];
1679 /* Fall through. */
1680 case 2:
1681 x.array [1] &= ~y.array [1];
1682 /* Fall through. */
1683 case 1:
1684 x.array [0] &= ~y.array [0];
1685 break;
1686 default:
1687 abort ();
1688 }
1689 return x;
1690 }
1691
1692 #define CPU_FLAGS_ARCH_MATCH 0x1
1693 #define CPU_FLAGS_64BIT_MATCH 0x2
1694
1695 #define CPU_FLAGS_PERFECT_MATCH \
1696 (CPU_FLAGS_ARCH_MATCH | CPU_FLAGS_64BIT_MATCH)
1697
1698 /* Return CPU flags match bits. */
1699
1700 static int
1701 cpu_flags_match (const insn_template *t)
1702 {
1703 i386_cpu_flags x = t->cpu_flags;
1704 int match = cpu_flags_check_cpu64 (x) ? CPU_FLAGS_64BIT_MATCH : 0;
1705
1706 x.bitfield.cpu64 = 0;
1707 x.bitfield.cpuno64 = 0;
1708
1709 if (cpu_flags_all_zero (&x))
1710 {
1711 /* This instruction is available on all archs. */
1712 match |= CPU_FLAGS_ARCH_MATCH;
1713 }
1714 else
1715 {
1716 /* This instruction is available only on some archs. */
1717 i386_cpu_flags cpu = cpu_arch_flags;
1718
1719 /* AVX512VL is no standalone feature - match it and then strip it. */
1720 if (x.bitfield.cpuavx512vl && !cpu.bitfield.cpuavx512vl)
1721 return match;
1722 x.bitfield.cpuavx512vl = 0;
1723
1724 cpu = cpu_flags_and (x, cpu);
1725 if (!cpu_flags_all_zero (&cpu))
1726 {
1727 if (x.bitfield.cpuavx)
1728 {
1729 /* We need to check a few extra flags with AVX. */
1730 if (cpu.bitfield.cpuavx
1731 && (!t->opcode_modifier.sse2avx || sse2avx)
1732 && (!x.bitfield.cpuaes || cpu.bitfield.cpuaes)
1733 && (!x.bitfield.cpugfni || cpu.bitfield.cpugfni)
1734 && (!x.bitfield.cpupclmul || cpu.bitfield.cpupclmul))
1735 match |= CPU_FLAGS_ARCH_MATCH;
1736 }
1737 else if (x.bitfield.cpuavx512f)
1738 {
1739 /* We need to check a few extra flags with AVX512F. */
1740 if (cpu.bitfield.cpuavx512f
1741 && (!x.bitfield.cpugfni || cpu.bitfield.cpugfni)
1742 && (!x.bitfield.cpuvaes || cpu.bitfield.cpuvaes)
1743 && (!x.bitfield.cpuvpclmulqdq || cpu.bitfield.cpuvpclmulqdq))
1744 match |= CPU_FLAGS_ARCH_MATCH;
1745 }
1746 else
1747 match |= CPU_FLAGS_ARCH_MATCH;
1748 }
1749 }
1750 return match;
1751 }
1752
1753 static INLINE i386_operand_type
1754 operand_type_and (i386_operand_type x, i386_operand_type y)
1755 {
1756 switch (ARRAY_SIZE (x.array))
1757 {
1758 case 3:
1759 x.array [2] &= y.array [2];
1760 /* Fall through. */
1761 case 2:
1762 x.array [1] &= y.array [1];
1763 /* Fall through. */
1764 case 1:
1765 x.array [0] &= y.array [0];
1766 break;
1767 default:
1768 abort ();
1769 }
1770 return x;
1771 }
1772
1773 static INLINE i386_operand_type
1774 operand_type_and_not (i386_operand_type x, i386_operand_type y)
1775 {
1776 switch (ARRAY_SIZE (x.array))
1777 {
1778 case 3:
1779 x.array [2] &= ~y.array [2];
1780 /* Fall through. */
1781 case 2:
1782 x.array [1] &= ~y.array [1];
1783 /* Fall through. */
1784 case 1:
1785 x.array [0] &= ~y.array [0];
1786 break;
1787 default:
1788 abort ();
1789 }
1790 return x;
1791 }
1792
1793 static INLINE i386_operand_type
1794 operand_type_or (i386_operand_type x, i386_operand_type y)
1795 {
1796 switch (ARRAY_SIZE (x.array))
1797 {
1798 case 3:
1799 x.array [2] |= y.array [2];
1800 /* Fall through. */
1801 case 2:
1802 x.array [1] |= y.array [1];
1803 /* Fall through. */
1804 case 1:
1805 x.array [0] |= y.array [0];
1806 break;
1807 default:
1808 abort ();
1809 }
1810 return x;
1811 }
1812
1813 static INLINE i386_operand_type
1814 operand_type_xor (i386_operand_type x, i386_operand_type y)
1815 {
1816 switch (ARRAY_SIZE (x.array))
1817 {
1818 case 3:
1819 x.array [2] ^= y.array [2];
1820 /* Fall through. */
1821 case 2:
1822 x.array [1] ^= y.array [1];
1823 /* Fall through. */
1824 case 1:
1825 x.array [0] ^= y.array [0];
1826 break;
1827 default:
1828 abort ();
1829 }
1830 return x;
1831 }
1832
1833 static const i386_operand_type acc32 = OPERAND_TYPE_ACC32;
1834 static const i386_operand_type acc64 = OPERAND_TYPE_ACC64;
1835 static const i386_operand_type disp16 = OPERAND_TYPE_DISP16;
1836 static const i386_operand_type disp32 = OPERAND_TYPE_DISP32;
1837 static const i386_operand_type disp32s = OPERAND_TYPE_DISP32S;
1838 static const i386_operand_type disp16_32 = OPERAND_TYPE_DISP16_32;
1839 static const i386_operand_type anydisp
1840 = OPERAND_TYPE_ANYDISP;
1841 static const i386_operand_type regxmm = OPERAND_TYPE_REGXMM;
1842 static const i386_operand_type regmask = OPERAND_TYPE_REGMASK;
1843 static const i386_operand_type imm8 = OPERAND_TYPE_IMM8;
1844 static const i386_operand_type imm8s = OPERAND_TYPE_IMM8S;
1845 static const i386_operand_type imm16 = OPERAND_TYPE_IMM16;
1846 static const i386_operand_type imm32 = OPERAND_TYPE_IMM32;
1847 static const i386_operand_type imm32s = OPERAND_TYPE_IMM32S;
1848 static const i386_operand_type imm64 = OPERAND_TYPE_IMM64;
1849 static const i386_operand_type imm16_32 = OPERAND_TYPE_IMM16_32;
1850 static const i386_operand_type imm16_32s = OPERAND_TYPE_IMM16_32S;
1851 static const i386_operand_type imm16_32_32s = OPERAND_TYPE_IMM16_32_32S;
1852 static const i386_operand_type vec_imm4 = OPERAND_TYPE_VEC_IMM4;
1853
1854 enum operand_type
1855 {
1856 reg,
1857 imm,
1858 disp,
1859 anymem
1860 };
1861
1862 static INLINE int
1863 operand_type_check (i386_operand_type t, enum operand_type c)
1864 {
1865 switch (c)
1866 {
1867 case reg:
1868 return t.bitfield.reg;
1869
1870 case imm:
1871 return (t.bitfield.imm8
1872 || t.bitfield.imm8s
1873 || t.bitfield.imm16
1874 || t.bitfield.imm32
1875 || t.bitfield.imm32s
1876 || t.bitfield.imm64);
1877
1878 case disp:
1879 return (t.bitfield.disp8
1880 || t.bitfield.disp16
1881 || t.bitfield.disp32
1882 || t.bitfield.disp32s
1883 || t.bitfield.disp64);
1884
1885 case anymem:
1886 return (t.bitfield.disp8
1887 || t.bitfield.disp16
1888 || t.bitfield.disp32
1889 || t.bitfield.disp32s
1890 || t.bitfield.disp64
1891 || t.bitfield.baseindex);
1892
1893 default:
1894 abort ();
1895 }
1896
1897 return 0;
1898 }
1899
1900 /* Return 1 if there is no conflict in 8bit/16bit/32bit/64bit/80bit on
1901 operand J for instruction template T. */
1902
1903 static INLINE int
1904 match_reg_size (const insn_template *t, unsigned int j)
1905 {
1906 return !((i.types[j].bitfield.byte
1907 && !t->operand_types[j].bitfield.byte)
1908 || (i.types[j].bitfield.word
1909 && !t->operand_types[j].bitfield.word)
1910 || (i.types[j].bitfield.dword
1911 && !t->operand_types[j].bitfield.dword)
1912 || (i.types[j].bitfield.qword
1913 && !t->operand_types[j].bitfield.qword)
1914 || (i.types[j].bitfield.tbyte
1915 && !t->operand_types[j].bitfield.tbyte));
1916 }
1917
1918 /* Return 1 if there is no conflict in SIMD register on
1919 operand J for instruction template T. */
1920
1921 static INLINE int
1922 match_simd_size (const insn_template *t, unsigned int j)
1923 {
1924 return !((i.types[j].bitfield.xmmword
1925 && !t->operand_types[j].bitfield.xmmword)
1926 || (i.types[j].bitfield.ymmword
1927 && !t->operand_types[j].bitfield.ymmword)
1928 || (i.types[j].bitfield.zmmword
1929 && !t->operand_types[j].bitfield.zmmword));
1930 }
1931
1932 /* Return 1 if there is no conflict in any size on operand J for
1933 instruction template T. */
1934
1935 static INLINE int
1936 match_mem_size (const insn_template *t, unsigned int j)
1937 {
1938 return (match_reg_size (t, j)
1939 && !((i.types[j].bitfield.unspecified
1940 && !i.broadcast
1941 && !t->operand_types[j].bitfield.unspecified)
1942 || (i.types[j].bitfield.fword
1943 && !t->operand_types[j].bitfield.fword)
1944 /* For scalar opcode templates to allow register and memory
1945 operands at the same time, some special casing is needed
1946 here. Also for v{,p}broadcast*, {,v}pmov{s,z}*, and
1947 down-conversion vpmov*. */
1948 || ((t->operand_types[j].bitfield.regsimd
1949 && !t->opcode_modifier.broadcast
1950 && (t->operand_types[j].bitfield.byte
1951 || t->operand_types[j].bitfield.word
1952 || t->operand_types[j].bitfield.dword
1953 || t->operand_types[j].bitfield.qword))
1954 ? (i.types[j].bitfield.xmmword
1955 || i.types[j].bitfield.ymmword
1956 || i.types[j].bitfield.zmmword)
1957 : !match_simd_size(t, j))));
1958 }
1959
1960 /* Return 1 if there is no size conflict on any operands for
1961 instruction template T. */
1962
1963 static INLINE int
1964 operand_size_match (const insn_template *t)
1965 {
1966 unsigned int j;
1967 int match = 1;
1968
1969 /* Don't check jump instructions. */
1970 if (t->opcode_modifier.jump
1971 || t->opcode_modifier.jumpbyte
1972 || t->opcode_modifier.jumpdword
1973 || t->opcode_modifier.jumpintersegment)
1974 return match;
1975
1976 /* Check memory and accumulator operand size. */
1977 for (j = 0; j < i.operands; j++)
1978 {
1979 if (!i.types[j].bitfield.reg && !i.types[j].bitfield.regsimd
1980 && t->operand_types[j].bitfield.anysize)
1981 continue;
1982
1983 if (t->operand_types[j].bitfield.reg
1984 && !match_reg_size (t, j))
1985 {
1986 match = 0;
1987 break;
1988 }
1989
1990 if (t->operand_types[j].bitfield.regsimd
1991 && !match_simd_size (t, j))
1992 {
1993 match = 0;
1994 break;
1995 }
1996
1997 if (t->operand_types[j].bitfield.acc
1998 && (!match_reg_size (t, j) || !match_simd_size (t, j)))
1999 {
2000 match = 0;
2001 break;
2002 }
2003
2004 if (i.types[j].bitfield.mem && !match_mem_size (t, j))
2005 {
2006 match = 0;
2007 break;
2008 }
2009 }
2010
2011 if (match)
2012 return match;
2013 else if (!t->opcode_modifier.d)
2014 {
2015 mismatch:
2016 i.error = operand_size_mismatch;
2017 return 0;
2018 }
2019
2020 /* Check reverse. */
2021 gas_assert (i.operands == 2);
2022
2023 match = 1;
2024 for (j = 0; j < 2; j++)
2025 {
2026 if ((t->operand_types[j].bitfield.reg
2027 || t->operand_types[j].bitfield.acc)
2028 && !match_reg_size (t, j ? 0 : 1))
2029 goto mismatch;
2030
2031 if (i.types[j].bitfield.mem
2032 && !match_mem_size (t, j ? 0 : 1))
2033 goto mismatch;
2034 }
2035
2036 return match;
2037 }
2038
2039 static INLINE int
2040 operand_type_match (i386_operand_type overlap,
2041 i386_operand_type given)
2042 {
2043 i386_operand_type temp = overlap;
2044
2045 temp.bitfield.jumpabsolute = 0;
2046 temp.bitfield.unspecified = 0;
2047 temp.bitfield.byte = 0;
2048 temp.bitfield.word = 0;
2049 temp.bitfield.dword = 0;
2050 temp.bitfield.fword = 0;
2051 temp.bitfield.qword = 0;
2052 temp.bitfield.tbyte = 0;
2053 temp.bitfield.xmmword = 0;
2054 temp.bitfield.ymmword = 0;
2055 temp.bitfield.zmmword = 0;
2056 if (operand_type_all_zero (&temp))
2057 goto mismatch;
2058
2059 if (given.bitfield.baseindex == overlap.bitfield.baseindex
2060 && given.bitfield.jumpabsolute == overlap.bitfield.jumpabsolute)
2061 return 1;
2062
2063 mismatch:
2064 i.error = operand_type_mismatch;
2065 return 0;
2066 }
2067
2068 /* If given types g0 and g1 are registers they must be of the same type
2069 unless the expected operand type register overlap is null.
2070 Memory operand size of certain SIMD instructions is also being checked
2071 here. */
2072
2073 static INLINE int
2074 operand_type_register_match (i386_operand_type g0,
2075 i386_operand_type t0,
2076 i386_operand_type g1,
2077 i386_operand_type t1)
2078 {
2079 if (!g0.bitfield.reg
2080 && !g0.bitfield.regsimd
2081 && (!operand_type_check (g0, anymem)
2082 || g0.bitfield.unspecified
2083 || !t0.bitfield.regsimd))
2084 return 1;
2085
2086 if (!g1.bitfield.reg
2087 && !g1.bitfield.regsimd
2088 && (!operand_type_check (g1, anymem)
2089 || g1.bitfield.unspecified
2090 || !t1.bitfield.regsimd))
2091 return 1;
2092
2093 if (g0.bitfield.byte == g1.bitfield.byte
2094 && g0.bitfield.word == g1.bitfield.word
2095 && g0.bitfield.dword == g1.bitfield.dword
2096 && g0.bitfield.qword == g1.bitfield.qword
2097 && g0.bitfield.xmmword == g1.bitfield.xmmword
2098 && g0.bitfield.ymmword == g1.bitfield.ymmword
2099 && g0.bitfield.zmmword == g1.bitfield.zmmword)
2100 return 1;
2101
2102 if (!(t0.bitfield.byte & t1.bitfield.byte)
2103 && !(t0.bitfield.word & t1.bitfield.word)
2104 && !(t0.bitfield.dword & t1.bitfield.dword)
2105 && !(t0.bitfield.qword & t1.bitfield.qword)
2106 && !(t0.bitfield.xmmword & t1.bitfield.xmmword)
2107 && !(t0.bitfield.ymmword & t1.bitfield.ymmword)
2108 && !(t0.bitfield.zmmword & t1.bitfield.zmmword))
2109 return 1;
2110
2111 i.error = register_type_mismatch;
2112
2113 return 0;
2114 }
2115
2116 static INLINE unsigned int
2117 register_number (const reg_entry *r)
2118 {
2119 unsigned int nr = r->reg_num;
2120
2121 if (r->reg_flags & RegRex)
2122 nr += 8;
2123
2124 if (r->reg_flags & RegVRex)
2125 nr += 16;
2126
2127 return nr;
2128 }
2129
2130 static INLINE unsigned int
2131 mode_from_disp_size (i386_operand_type t)
2132 {
2133 if (t.bitfield.disp8)
2134 return 1;
2135 else if (t.bitfield.disp16
2136 || t.bitfield.disp32
2137 || t.bitfield.disp32s)
2138 return 2;
2139 else
2140 return 0;
2141 }
2142
2143 static INLINE int
2144 fits_in_signed_byte (addressT num)
2145 {
2146 return num + 0x80 <= 0xff;
2147 }
2148
2149 static INLINE int
2150 fits_in_unsigned_byte (addressT num)
2151 {
2152 return num <= 0xff;
2153 }
2154
2155 static INLINE int
2156 fits_in_unsigned_word (addressT num)
2157 {
2158 return num <= 0xffff;
2159 }
2160
2161 static INLINE int
2162 fits_in_signed_word (addressT num)
2163 {
2164 return num + 0x8000 <= 0xffff;
2165 }
2166
2167 static INLINE int
2168 fits_in_signed_long (addressT num ATTRIBUTE_UNUSED)
2169 {
2170 #ifndef BFD64
2171 return 1;
2172 #else
2173 return num + 0x80000000 <= 0xffffffff;
2174 #endif
2175 } /* fits_in_signed_long() */
2176
2177 static INLINE int
2178 fits_in_unsigned_long (addressT num ATTRIBUTE_UNUSED)
2179 {
2180 #ifndef BFD64
2181 return 1;
2182 #else
2183 return num <= 0xffffffff;
2184 #endif
2185 } /* fits_in_unsigned_long() */
2186
2187 static INLINE int
2188 fits_in_disp8 (offsetT num)
2189 {
2190 int shift = i.memshift;
2191 unsigned int mask;
2192
2193 if (shift == -1)
2194 abort ();
2195
2196 mask = (1 << shift) - 1;
2197
2198 /* Return 0 if NUM isn't properly aligned. */
2199 if ((num & mask))
2200 return 0;
2201
2202 /* Check if NUM will fit in 8bit after shift. */
2203 return fits_in_signed_byte (num >> shift);
2204 }
2205
2206 static INLINE int
2207 fits_in_imm4 (offsetT num)
2208 {
2209 return (num & 0xf) == num;
2210 }
2211
2212 static i386_operand_type
2213 smallest_imm_type (offsetT num)
2214 {
2215 i386_operand_type t;
2216
2217 operand_type_set (&t, 0);
2218 t.bitfield.imm64 = 1;
2219
2220 if (cpu_arch_tune != PROCESSOR_I486 && num == 1)
2221 {
2222 /* This code is disabled on the 486 because all the Imm1 forms
2223 in the opcode table are slower on the i486. They're the
2224 versions with the implicitly specified single-position
2225 displacement, which has another syntax if you really want to
2226 use that form. */
2227 t.bitfield.imm1 = 1;
2228 t.bitfield.imm8 = 1;
2229 t.bitfield.imm8s = 1;
2230 t.bitfield.imm16 = 1;
2231 t.bitfield.imm32 = 1;
2232 t.bitfield.imm32s = 1;
2233 }
2234 else if (fits_in_signed_byte (num))
2235 {
2236 t.bitfield.imm8 = 1;
2237 t.bitfield.imm8s = 1;
2238 t.bitfield.imm16 = 1;
2239 t.bitfield.imm32 = 1;
2240 t.bitfield.imm32s = 1;
2241 }
2242 else if (fits_in_unsigned_byte (num))
2243 {
2244 t.bitfield.imm8 = 1;
2245 t.bitfield.imm16 = 1;
2246 t.bitfield.imm32 = 1;
2247 t.bitfield.imm32s = 1;
2248 }
2249 else if (fits_in_signed_word (num) || fits_in_unsigned_word (num))
2250 {
2251 t.bitfield.imm16 = 1;
2252 t.bitfield.imm32 = 1;
2253 t.bitfield.imm32s = 1;
2254 }
2255 else if (fits_in_signed_long (num))
2256 {
2257 t.bitfield.imm32 = 1;
2258 t.bitfield.imm32s = 1;
2259 }
2260 else if (fits_in_unsigned_long (num))
2261 t.bitfield.imm32 = 1;
2262
2263 return t;
2264 }
2265
2266 static offsetT
2267 offset_in_range (offsetT val, int size)
2268 {
2269 addressT mask;
2270
2271 switch (size)
2272 {
2273 case 1: mask = ((addressT) 1 << 8) - 1; break;
2274 case 2: mask = ((addressT) 1 << 16) - 1; break;
2275 case 4: mask = ((addressT) 2 << 31) - 1; break;
2276 #ifdef BFD64
2277 case 8: mask = ((addressT) 2 << 63) - 1; break;
2278 #endif
2279 default: abort ();
2280 }
2281
2282 #ifdef BFD64
2283 /* If BFD64, sign extend val for 32bit address mode. */
2284 if (flag_code != CODE_64BIT
2285 || i.prefix[ADDR_PREFIX])
2286 if ((val & ~(((addressT) 2 << 31) - 1)) == 0)
2287 val = (val ^ ((addressT) 1 << 31)) - ((addressT) 1 << 31);
2288 #endif
2289
2290 if ((val & ~mask) != 0 && (val & ~mask) != ~mask)
2291 {
2292 char buf1[40], buf2[40];
2293
2294 sprint_value (buf1, val);
2295 sprint_value (buf2, val & mask);
2296 as_warn (_("%s shortened to %s"), buf1, buf2);
2297 }
2298 return val & mask;
2299 }
2300
2301 enum PREFIX_GROUP
2302 {
2303 PREFIX_EXIST = 0,
2304 PREFIX_LOCK,
2305 PREFIX_REP,
2306 PREFIX_DS,
2307 PREFIX_OTHER
2308 };
2309
2310 /* Returns
2311 a. PREFIX_EXIST if attempting to add a prefix where one from the
2312 same class already exists.
2313 b. PREFIX_LOCK if lock prefix is added.
2314 c. PREFIX_REP if rep/repne prefix is added.
2315 d. PREFIX_DS if ds prefix is added.
2316 e. PREFIX_OTHER if other prefix is added.
2317 */
2318
2319 static enum PREFIX_GROUP
2320 add_prefix (unsigned int prefix)
2321 {
2322 enum PREFIX_GROUP ret = PREFIX_OTHER;
2323 unsigned int q;
2324
2325 if (prefix >= REX_OPCODE && prefix < REX_OPCODE + 16
2326 && flag_code == CODE_64BIT)
2327 {
2328 if ((i.prefix[REX_PREFIX] & prefix & REX_W)
2329 || (i.prefix[REX_PREFIX] & prefix & REX_R)
2330 || (i.prefix[REX_PREFIX] & prefix & REX_X)
2331 || (i.prefix[REX_PREFIX] & prefix & REX_B))
2332 ret = PREFIX_EXIST;
2333 q = REX_PREFIX;
2334 }
2335 else
2336 {
2337 switch (prefix)
2338 {
2339 default:
2340 abort ();
2341
2342 case DS_PREFIX_OPCODE:
2343 ret = PREFIX_DS;
2344 /* Fall through. */
2345 case CS_PREFIX_OPCODE:
2346 case ES_PREFIX_OPCODE:
2347 case FS_PREFIX_OPCODE:
2348 case GS_PREFIX_OPCODE:
2349 case SS_PREFIX_OPCODE:
2350 q = SEG_PREFIX;
2351 break;
2352
2353 case REPNE_PREFIX_OPCODE:
2354 case REPE_PREFIX_OPCODE:
2355 q = REP_PREFIX;
2356 ret = PREFIX_REP;
2357 break;
2358
2359 case LOCK_PREFIX_OPCODE:
2360 q = LOCK_PREFIX;
2361 ret = PREFIX_LOCK;
2362 break;
2363
2364 case FWAIT_OPCODE:
2365 q = WAIT_PREFIX;
2366 break;
2367
2368 case ADDR_PREFIX_OPCODE:
2369 q = ADDR_PREFIX;
2370 break;
2371
2372 case DATA_PREFIX_OPCODE:
2373 q = DATA_PREFIX;
2374 break;
2375 }
2376 if (i.prefix[q] != 0)
2377 ret = PREFIX_EXIST;
2378 }
2379
2380 if (ret)
2381 {
2382 if (!i.prefix[q])
2383 ++i.prefixes;
2384 i.prefix[q] |= prefix;
2385 }
2386 else
2387 as_bad (_("same type of prefix used twice"));
2388
2389 return ret;
2390 }
2391
2392 static void
2393 update_code_flag (int value, int check)
2394 {
2395 PRINTF_LIKE ((*as_error));
2396
2397 flag_code = (enum flag_code) value;
2398 if (flag_code == CODE_64BIT)
2399 {
2400 cpu_arch_flags.bitfield.cpu64 = 1;
2401 cpu_arch_flags.bitfield.cpuno64 = 0;
2402 }
2403 else
2404 {
2405 cpu_arch_flags.bitfield.cpu64 = 0;
2406 cpu_arch_flags.bitfield.cpuno64 = 1;
2407 }
2408 if (value == CODE_64BIT && !cpu_arch_flags.bitfield.cpulm )
2409 {
2410 if (check)
2411 as_error = as_fatal;
2412 else
2413 as_error = as_bad;
2414 (*as_error) (_("64bit mode not supported on `%s'."),
2415 cpu_arch_name ? cpu_arch_name : default_arch);
2416 }
2417 if (value == CODE_32BIT && !cpu_arch_flags.bitfield.cpui386)
2418 {
2419 if (check)
2420 as_error = as_fatal;
2421 else
2422 as_error = as_bad;
2423 (*as_error) (_("32bit mode not supported on `%s'."),
2424 cpu_arch_name ? cpu_arch_name : default_arch);
2425 }
2426 stackop_size = '\0';
2427 }
2428
2429 static void
2430 set_code_flag (int value)
2431 {
2432 update_code_flag (value, 0);
2433 }
2434
2435 static void
2436 set_16bit_gcc_code_flag (int new_code_flag)
2437 {
2438 flag_code = (enum flag_code) new_code_flag;
2439 if (flag_code != CODE_16BIT)
2440 abort ();
2441 cpu_arch_flags.bitfield.cpu64 = 0;
2442 cpu_arch_flags.bitfield.cpuno64 = 1;
2443 stackop_size = LONG_MNEM_SUFFIX;
2444 }
2445
2446 static void
2447 set_intel_syntax (int syntax_flag)
2448 {
2449 /* Find out if register prefixing is specified. */
2450 int ask_naked_reg = 0;
2451
2452 SKIP_WHITESPACE ();
2453 if (!is_end_of_line[(unsigned char) *input_line_pointer])
2454 {
2455 char *string;
2456 int e = get_symbol_name (&string);
2457
2458 if (strcmp (string, "prefix") == 0)
2459 ask_naked_reg = 1;
2460 else if (strcmp (string, "noprefix") == 0)
2461 ask_naked_reg = -1;
2462 else
2463 as_bad (_("bad argument to syntax directive."));
2464 (void) restore_line_pointer (e);
2465 }
2466 demand_empty_rest_of_line ();
2467
2468 intel_syntax = syntax_flag;
2469
2470 if (ask_naked_reg == 0)
2471 allow_naked_reg = (intel_syntax
2472 && (bfd_get_symbol_leading_char (stdoutput) != '\0'));
2473 else
2474 allow_naked_reg = (ask_naked_reg < 0);
2475
2476 expr_set_rank (O_full_ptr, syntax_flag ? 10 : 0);
2477
2478 identifier_chars['%'] = intel_syntax && allow_naked_reg ? '%' : 0;
2479 identifier_chars['$'] = intel_syntax ? '$' : 0;
2480 register_prefix = allow_naked_reg ? "" : "%";
2481 }
2482
2483 static void
2484 set_intel_mnemonic (int mnemonic_flag)
2485 {
2486 intel_mnemonic = mnemonic_flag;
2487 }
2488
2489 static void
2490 set_allow_index_reg (int flag)
2491 {
2492 allow_index_reg = flag;
2493 }
2494
2495 static void
2496 set_check (int what)
2497 {
2498 enum check_kind *kind;
2499 const char *str;
2500
2501 if (what)
2502 {
2503 kind = &operand_check;
2504 str = "operand";
2505 }
2506 else
2507 {
2508 kind = &sse_check;
2509 str = "sse";
2510 }
2511
2512 SKIP_WHITESPACE ();
2513
2514 if (!is_end_of_line[(unsigned char) *input_line_pointer])
2515 {
2516 char *string;
2517 int e = get_symbol_name (&string);
2518
2519 if (strcmp (string, "none") == 0)
2520 *kind = check_none;
2521 else if (strcmp (string, "warning") == 0)
2522 *kind = check_warning;
2523 else if (strcmp (string, "error") == 0)
2524 *kind = check_error;
2525 else
2526 as_bad (_("bad argument to %s_check directive."), str);
2527 (void) restore_line_pointer (e);
2528 }
2529 else
2530 as_bad (_("missing argument for %s_check directive"), str);
2531
2532 demand_empty_rest_of_line ();
2533 }
2534
2535 static void
2536 check_cpu_arch_compatible (const char *name ATTRIBUTE_UNUSED,
2537 i386_cpu_flags new_flag ATTRIBUTE_UNUSED)
2538 {
2539 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
2540 static const char *arch;
2541
2542 /* Intel LIOM is only supported on ELF. */
2543 if (!IS_ELF)
2544 return;
2545
2546 if (!arch)
2547 {
2548 /* Use cpu_arch_name if it is set in md_parse_option. Otherwise
2549 use default_arch. */
2550 arch = cpu_arch_name;
2551 if (!arch)
2552 arch = default_arch;
2553 }
2554
2555 /* If we are targeting Intel MCU, we must enable it. */
2556 if (get_elf_backend_data (stdoutput)->elf_machine_code != EM_IAMCU
2557 || new_flag.bitfield.cpuiamcu)
2558 return;
2559
2560 /* If we are targeting Intel L1OM, we must enable it. */
2561 if (get_elf_backend_data (stdoutput)->elf_machine_code != EM_L1OM
2562 || new_flag.bitfield.cpul1om)
2563 return;
2564
2565 /* If we are targeting Intel K1OM, we must enable it. */
2566 if (get_elf_backend_data (stdoutput)->elf_machine_code != EM_K1OM
2567 || new_flag.bitfield.cpuk1om)
2568 return;
2569
2570 as_bad (_("`%s' is not supported on `%s'"), name, arch);
2571 #endif
2572 }
2573
2574 static void
2575 set_cpu_arch (int dummy ATTRIBUTE_UNUSED)
2576 {
2577 SKIP_WHITESPACE ();
2578
2579 if (!is_end_of_line[(unsigned char) *input_line_pointer])
2580 {
2581 char *string;
2582 int e = get_symbol_name (&string);
2583 unsigned int j;
2584 i386_cpu_flags flags;
2585
2586 for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
2587 {
2588 if (strcmp (string, cpu_arch[j].name) == 0)
2589 {
2590 check_cpu_arch_compatible (string, cpu_arch[j].flags);
2591
2592 if (*string != '.')
2593 {
2594 cpu_arch_name = cpu_arch[j].name;
2595 cpu_sub_arch_name = NULL;
2596 cpu_arch_flags = cpu_arch[j].flags;
2597 if (flag_code == CODE_64BIT)
2598 {
2599 cpu_arch_flags.bitfield.cpu64 = 1;
2600 cpu_arch_flags.bitfield.cpuno64 = 0;
2601 }
2602 else
2603 {
2604 cpu_arch_flags.bitfield.cpu64 = 0;
2605 cpu_arch_flags.bitfield.cpuno64 = 1;
2606 }
2607 cpu_arch_isa = cpu_arch[j].type;
2608 cpu_arch_isa_flags = cpu_arch[j].flags;
2609 if (!cpu_arch_tune_set)
2610 {
2611 cpu_arch_tune = cpu_arch_isa;
2612 cpu_arch_tune_flags = cpu_arch_isa_flags;
2613 }
2614 break;
2615 }
2616
2617 flags = cpu_flags_or (cpu_arch_flags,
2618 cpu_arch[j].flags);
2619
2620 if (!cpu_flags_equal (&flags, &cpu_arch_flags))
2621 {
2622 if (cpu_sub_arch_name)
2623 {
2624 char *name = cpu_sub_arch_name;
2625 cpu_sub_arch_name = concat (name,
2626 cpu_arch[j].name,
2627 (const char *) NULL);
2628 free (name);
2629 }
2630 else
2631 cpu_sub_arch_name = xstrdup (cpu_arch[j].name);
2632 cpu_arch_flags = flags;
2633 cpu_arch_isa_flags = flags;
2634 }
2635 else
2636 cpu_arch_isa_flags
2637 = cpu_flags_or (cpu_arch_isa_flags,
2638 cpu_arch[j].flags);
2639 (void) restore_line_pointer (e);
2640 demand_empty_rest_of_line ();
2641 return;
2642 }
2643 }
2644
2645 if (*string == '.' && j >= ARRAY_SIZE (cpu_arch))
2646 {
2647 /* Disable an ISA extension. */
2648 for (j = 0; j < ARRAY_SIZE (cpu_noarch); j++)
2649 if (strcmp (string + 1, cpu_noarch [j].name) == 0)
2650 {
2651 flags = cpu_flags_and_not (cpu_arch_flags,
2652 cpu_noarch[j].flags);
2653 if (!cpu_flags_equal (&flags, &cpu_arch_flags))
2654 {
2655 if (cpu_sub_arch_name)
2656 {
2657 char *name = cpu_sub_arch_name;
2658 cpu_sub_arch_name = concat (name, string,
2659 (const char *) NULL);
2660 free (name);
2661 }
2662 else
2663 cpu_sub_arch_name = xstrdup (string);
2664 cpu_arch_flags = flags;
2665 cpu_arch_isa_flags = flags;
2666 }
2667 (void) restore_line_pointer (e);
2668 demand_empty_rest_of_line ();
2669 return;
2670 }
2671
2672 j = ARRAY_SIZE (cpu_arch);
2673 }
2674
2675 if (j >= ARRAY_SIZE (cpu_arch))
2676 as_bad (_("no such architecture: `%s'"), string);
2677
2678 *input_line_pointer = e;
2679 }
2680 else
2681 as_bad (_("missing cpu architecture"));
2682
2683 no_cond_jump_promotion = 0;
2684 if (*input_line_pointer == ','
2685 && !is_end_of_line[(unsigned char) input_line_pointer[1]])
2686 {
2687 char *string;
2688 char e;
2689
2690 ++input_line_pointer;
2691 e = get_symbol_name (&string);
2692
2693 if (strcmp (string, "nojumps") == 0)
2694 no_cond_jump_promotion = 1;
2695 else if (strcmp (string, "jumps") == 0)
2696 ;
2697 else
2698 as_bad (_("no such architecture modifier: `%s'"), string);
2699
2700 (void) restore_line_pointer (e);
2701 }
2702
2703 demand_empty_rest_of_line ();
2704 }
2705
2706 enum bfd_architecture
2707 i386_arch (void)
2708 {
2709 if (cpu_arch_isa == PROCESSOR_L1OM)
2710 {
2711 if (OUTPUT_FLAVOR != bfd_target_elf_flavour
2712 || flag_code != CODE_64BIT)
2713 as_fatal (_("Intel L1OM is 64bit ELF only"));
2714 return bfd_arch_l1om;
2715 }
2716 else if (cpu_arch_isa == PROCESSOR_K1OM)
2717 {
2718 if (OUTPUT_FLAVOR != bfd_target_elf_flavour
2719 || flag_code != CODE_64BIT)
2720 as_fatal (_("Intel K1OM is 64bit ELF only"));
2721 return bfd_arch_k1om;
2722 }
2723 else if (cpu_arch_isa == PROCESSOR_IAMCU)
2724 {
2725 if (OUTPUT_FLAVOR != bfd_target_elf_flavour
2726 || flag_code == CODE_64BIT)
2727 as_fatal (_("Intel MCU is 32bit ELF only"));
2728 return bfd_arch_iamcu;
2729 }
2730 else
2731 return bfd_arch_i386;
2732 }
2733
2734 unsigned long
2735 i386_mach (void)
2736 {
2737 if (!strncmp (default_arch, "x86_64", 6))
2738 {
2739 if (cpu_arch_isa == PROCESSOR_L1OM)
2740 {
2741 if (OUTPUT_FLAVOR != bfd_target_elf_flavour
2742 || default_arch[6] != '\0')
2743 as_fatal (_("Intel L1OM is 64bit ELF only"));
2744 return bfd_mach_l1om;
2745 }
2746 else if (cpu_arch_isa == PROCESSOR_K1OM)
2747 {
2748 if (OUTPUT_FLAVOR != bfd_target_elf_flavour
2749 || default_arch[6] != '\0')
2750 as_fatal (_("Intel K1OM is 64bit ELF only"));
2751 return bfd_mach_k1om;
2752 }
2753 else if (default_arch[6] == '\0')
2754 return bfd_mach_x86_64;
2755 else
2756 return bfd_mach_x64_32;
2757 }
2758 else if (!strcmp (default_arch, "i386")
2759 || !strcmp (default_arch, "iamcu"))
2760 {
2761 if (cpu_arch_isa == PROCESSOR_IAMCU)
2762 {
2763 if (OUTPUT_FLAVOR != bfd_target_elf_flavour)
2764 as_fatal (_("Intel MCU is 32bit ELF only"));
2765 return bfd_mach_i386_iamcu;
2766 }
2767 else
2768 return bfd_mach_i386_i386;
2769 }
2770 else
2771 as_fatal (_("unknown architecture"));
2772 }
2773 \f
2774 void
2775 md_begin (void)
2776 {
2777 const char *hash_err;
2778
2779 /* Support pseudo prefixes like {disp32}. */
2780 lex_type ['{'] = LEX_BEGIN_NAME;
2781
2782 /* Initialize op_hash hash table. */
2783 op_hash = hash_new ();
2784
2785 {
2786 const insn_template *optab;
2787 templates *core_optab;
2788
2789 /* Setup for loop. */
2790 optab = i386_optab;
2791 core_optab = XNEW (templates);
2792 core_optab->start = optab;
2793
2794 while (1)
2795 {
2796 ++optab;
2797 if (optab->name == NULL
2798 || strcmp (optab->name, (optab - 1)->name) != 0)
2799 {
2800 /* different name --> ship out current template list;
2801 add to hash table; & begin anew. */
2802 core_optab->end = optab;
2803 hash_err = hash_insert (op_hash,
2804 (optab - 1)->name,
2805 (void *) core_optab);
2806 if (hash_err)
2807 {
2808 as_fatal (_("can't hash %s: %s"),
2809 (optab - 1)->name,
2810 hash_err);
2811 }
2812 if (optab->name == NULL)
2813 break;
2814 core_optab = XNEW (templates);
2815 core_optab->start = optab;
2816 }
2817 }
2818 }
2819
2820 /* Initialize reg_hash hash table. */
2821 reg_hash = hash_new ();
2822 {
2823 const reg_entry *regtab;
2824 unsigned int regtab_size = i386_regtab_size;
2825
2826 for (regtab = i386_regtab; regtab_size--; regtab++)
2827 {
2828 hash_err = hash_insert (reg_hash, regtab->reg_name, (void *) regtab);
2829 if (hash_err)
2830 as_fatal (_("can't hash %s: %s"),
2831 regtab->reg_name,
2832 hash_err);
2833 }
2834 }
2835
2836 /* Fill in lexical tables: mnemonic_chars, operand_chars. */
2837 {
2838 int c;
2839 char *p;
2840
2841 for (c = 0; c < 256; c++)
2842 {
2843 if (ISDIGIT (c))
2844 {
2845 digit_chars[c] = c;
2846 mnemonic_chars[c] = c;
2847 register_chars[c] = c;
2848 operand_chars[c] = c;
2849 }
2850 else if (ISLOWER (c))
2851 {
2852 mnemonic_chars[c] = c;
2853 register_chars[c] = c;
2854 operand_chars[c] = c;
2855 }
2856 else if (ISUPPER (c))
2857 {
2858 mnemonic_chars[c] = TOLOWER (c);
2859 register_chars[c] = mnemonic_chars[c];
2860 operand_chars[c] = c;
2861 }
2862 else if (c == '{' || c == '}')
2863 {
2864 mnemonic_chars[c] = c;
2865 operand_chars[c] = c;
2866 }
2867
2868 if (ISALPHA (c) || ISDIGIT (c))
2869 identifier_chars[c] = c;
2870 else if (c >= 128)
2871 {
2872 identifier_chars[c] = c;
2873 operand_chars[c] = c;
2874 }
2875 }
2876
2877 #ifdef LEX_AT
2878 identifier_chars['@'] = '@';
2879 #endif
2880 #ifdef LEX_QM
2881 identifier_chars['?'] = '?';
2882 operand_chars['?'] = '?';
2883 #endif
2884 digit_chars['-'] = '-';
2885 mnemonic_chars['_'] = '_';
2886 mnemonic_chars['-'] = '-';
2887 mnemonic_chars['.'] = '.';
2888 identifier_chars['_'] = '_';
2889 identifier_chars['.'] = '.';
2890
2891 for (p = operand_special_chars; *p != '\0'; p++)
2892 operand_chars[(unsigned char) *p] = *p;
2893 }
2894
2895 if (flag_code == CODE_64BIT)
2896 {
2897 #if defined (OBJ_COFF) && defined (TE_PE)
2898 x86_dwarf2_return_column = (OUTPUT_FLAVOR == bfd_target_coff_flavour
2899 ? 32 : 16);
2900 #else
2901 x86_dwarf2_return_column = 16;
2902 #endif
2903 x86_cie_data_alignment = -8;
2904 }
2905 else
2906 {
2907 x86_dwarf2_return_column = 8;
2908 x86_cie_data_alignment = -4;
2909 }
2910 }
2911
2912 void
2913 i386_print_statistics (FILE *file)
2914 {
2915 hash_print_statistics (file, "i386 opcode", op_hash);
2916 hash_print_statistics (file, "i386 register", reg_hash);
2917 }
2918 \f
2919 #ifdef DEBUG386
2920
2921 /* Debugging routines for md_assemble. */
2922 static void pte (insn_template *);
2923 static void pt (i386_operand_type);
2924 static void pe (expressionS *);
2925 static void ps (symbolS *);
2926
2927 static void
2928 pi (char *line, i386_insn *x)
2929 {
2930 unsigned int j;
2931
2932 fprintf (stdout, "%s: template ", line);
2933 pte (&x->tm);
2934 fprintf (stdout, " address: base %s index %s scale %x\n",
2935 x->base_reg ? x->base_reg->reg_name : "none",
2936 x->index_reg ? x->index_reg->reg_name : "none",
2937 x->log2_scale_factor);
2938 fprintf (stdout, " modrm: mode %x reg %x reg/mem %x\n",
2939 x->rm.mode, x->rm.reg, x->rm.regmem);
2940 fprintf (stdout, " sib: base %x index %x scale %x\n",
2941 x->sib.base, x->sib.index, x->sib.scale);
2942 fprintf (stdout, " rex: 64bit %x extX %x extY %x extZ %x\n",
2943 (x->rex & REX_W) != 0,
2944 (x->rex & REX_R) != 0,
2945 (x->rex & REX_X) != 0,
2946 (x->rex & REX_B) != 0);
2947 for (j = 0; j < x->operands; j++)
2948 {
2949 fprintf (stdout, " #%d: ", j + 1);
2950 pt (x->types[j]);
2951 fprintf (stdout, "\n");
2952 if (x->types[j].bitfield.reg
2953 || x->types[j].bitfield.regmmx
2954 || x->types[j].bitfield.regsimd
2955 || x->types[j].bitfield.sreg2
2956 || x->types[j].bitfield.sreg3
2957 || x->types[j].bitfield.control
2958 || x->types[j].bitfield.debug
2959 || x->types[j].bitfield.test)
2960 fprintf (stdout, "%s\n", x->op[j].regs->reg_name);
2961 if (operand_type_check (x->types[j], imm))
2962 pe (x->op[j].imms);
2963 if (operand_type_check (x->types[j], disp))
2964 pe (x->op[j].disps);
2965 }
2966 }
2967
2968 static void
2969 pte (insn_template *t)
2970 {
2971 unsigned int j;
2972 fprintf (stdout, " %d operands ", t->operands);
2973 fprintf (stdout, "opcode %x ", t->base_opcode);
2974 if (t->extension_opcode != None)
2975 fprintf (stdout, "ext %x ", t->extension_opcode);
2976 if (t->opcode_modifier.d)
2977 fprintf (stdout, "D");
2978 if (t->opcode_modifier.w)
2979 fprintf (stdout, "W");
2980 fprintf (stdout, "\n");
2981 for (j = 0; j < t->operands; j++)
2982 {
2983 fprintf (stdout, " #%d type ", j + 1);
2984 pt (t->operand_types[j]);
2985 fprintf (stdout, "\n");
2986 }
2987 }
2988
2989 static void
2990 pe (expressionS *e)
2991 {
2992 fprintf (stdout, " operation %d\n", e->X_op);
2993 fprintf (stdout, " add_number %ld (%lx)\n",
2994 (long) e->X_add_number, (long) e->X_add_number);
2995 if (e->X_add_symbol)
2996 {
2997 fprintf (stdout, " add_symbol ");
2998 ps (e->X_add_symbol);
2999 fprintf (stdout, "\n");
3000 }
3001 if (e->X_op_symbol)
3002 {
3003 fprintf (stdout, " op_symbol ");
3004 ps (e->X_op_symbol);
3005 fprintf (stdout, "\n");
3006 }
3007 }
3008
3009 static void
3010 ps (symbolS *s)
3011 {
3012 fprintf (stdout, "%s type %s%s",
3013 S_GET_NAME (s),
3014 S_IS_EXTERNAL (s) ? "EXTERNAL " : "",
3015 segment_name (S_GET_SEGMENT (s)));
3016 }
3017
3018 static struct type_name
3019 {
3020 i386_operand_type mask;
3021 const char *name;
3022 }
3023 const type_names[] =
3024 {
3025 { OPERAND_TYPE_REG8, "r8" },
3026 { OPERAND_TYPE_REG16, "r16" },
3027 { OPERAND_TYPE_REG32, "r32" },
3028 { OPERAND_TYPE_REG64, "r64" },
3029 { OPERAND_TYPE_IMM8, "i8" },
3030 { OPERAND_TYPE_IMM8, "i8s" },
3031 { OPERAND_TYPE_IMM16, "i16" },
3032 { OPERAND_TYPE_IMM32, "i32" },
3033 { OPERAND_TYPE_IMM32S, "i32s" },
3034 { OPERAND_TYPE_IMM64, "i64" },
3035 { OPERAND_TYPE_IMM1, "i1" },
3036 { OPERAND_TYPE_BASEINDEX, "BaseIndex" },
3037 { OPERAND_TYPE_DISP8, "d8" },
3038 { OPERAND_TYPE_DISP16, "d16" },
3039 { OPERAND_TYPE_DISP32, "d32" },
3040 { OPERAND_TYPE_DISP32S, "d32s" },
3041 { OPERAND_TYPE_DISP64, "d64" },
3042 { OPERAND_TYPE_INOUTPORTREG, "InOutPortReg" },
3043 { OPERAND_TYPE_SHIFTCOUNT, "ShiftCount" },
3044 { OPERAND_TYPE_CONTROL, "control reg" },
3045 { OPERAND_TYPE_TEST, "test reg" },
3046 { OPERAND_TYPE_DEBUG, "debug reg" },
3047 { OPERAND_TYPE_FLOATREG, "FReg" },
3048 { OPERAND_TYPE_FLOATACC, "FAcc" },
3049 { OPERAND_TYPE_SREG2, "SReg2" },
3050 { OPERAND_TYPE_SREG3, "SReg3" },
3051 { OPERAND_TYPE_ACC, "Acc" },
3052 { OPERAND_TYPE_JUMPABSOLUTE, "Jump Absolute" },
3053 { OPERAND_TYPE_REGMMX, "rMMX" },
3054 { OPERAND_TYPE_REGXMM, "rXMM" },
3055 { OPERAND_TYPE_REGYMM, "rYMM" },
3056 { OPERAND_TYPE_REGZMM, "rZMM" },
3057 { OPERAND_TYPE_REGMASK, "Mask reg" },
3058 { OPERAND_TYPE_ESSEG, "es" },
3059 };
3060
3061 static void
3062 pt (i386_operand_type t)
3063 {
3064 unsigned int j;
3065 i386_operand_type a;
3066
3067 for (j = 0; j < ARRAY_SIZE (type_names); j++)
3068 {
3069 a = operand_type_and (t, type_names[j].mask);
3070 if (!operand_type_all_zero (&a))
3071 fprintf (stdout, "%s, ", type_names[j].name);
3072 }
3073 fflush (stdout);
3074 }
3075
3076 #endif /* DEBUG386 */
3077 \f
3078 static bfd_reloc_code_real_type
3079 reloc (unsigned int size,
3080 int pcrel,
3081 int sign,
3082 bfd_reloc_code_real_type other)
3083 {
3084 if (other != NO_RELOC)
3085 {
3086 reloc_howto_type *rel;
3087
3088 if (size == 8)
3089 switch (other)
3090 {
3091 case BFD_RELOC_X86_64_GOT32:
3092 return BFD_RELOC_X86_64_GOT64;
3093 break;
3094 case BFD_RELOC_X86_64_GOTPLT64:
3095 return BFD_RELOC_X86_64_GOTPLT64;
3096 break;
3097 case BFD_RELOC_X86_64_PLTOFF64:
3098 return BFD_RELOC_X86_64_PLTOFF64;
3099 break;
3100 case BFD_RELOC_X86_64_GOTPC32:
3101 other = BFD_RELOC_X86_64_GOTPC64;
3102 break;
3103 case BFD_RELOC_X86_64_GOTPCREL:
3104 other = BFD_RELOC_X86_64_GOTPCREL64;
3105 break;
3106 case BFD_RELOC_X86_64_TPOFF32:
3107 other = BFD_RELOC_X86_64_TPOFF64;
3108 break;
3109 case BFD_RELOC_X86_64_DTPOFF32:
3110 other = BFD_RELOC_X86_64_DTPOFF64;
3111 break;
3112 default:
3113 break;
3114 }
3115
3116 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
3117 if (other == BFD_RELOC_SIZE32)
3118 {
3119 if (size == 8)
3120 other = BFD_RELOC_SIZE64;
3121 if (pcrel)
3122 {
3123 as_bad (_("there are no pc-relative size relocations"));
3124 return NO_RELOC;
3125 }
3126 }
3127 #endif
3128
3129 /* Sign-checking 4-byte relocations in 16-/32-bit code is pointless. */
3130 if (size == 4 && (flag_code != CODE_64BIT || disallow_64bit_reloc))
3131 sign = -1;
3132
3133 rel = bfd_reloc_type_lookup (stdoutput, other);
3134 if (!rel)
3135 as_bad (_("unknown relocation (%u)"), other);
3136 else if (size != bfd_get_reloc_size (rel))
3137 as_bad (_("%u-byte relocation cannot be applied to %u-byte field"),
3138 bfd_get_reloc_size (rel),
3139 size);
3140 else if (pcrel && !rel->pc_relative)
3141 as_bad (_("non-pc-relative relocation for pc-relative field"));
3142 else if ((rel->complain_on_overflow == complain_overflow_signed
3143 && !sign)
3144 || (rel->complain_on_overflow == complain_overflow_unsigned
3145 && sign > 0))
3146 as_bad (_("relocated field and relocation type differ in signedness"));
3147 else
3148 return other;
3149 return NO_RELOC;
3150 }
3151
3152 if (pcrel)
3153 {
3154 if (!sign)
3155 as_bad (_("there are no unsigned pc-relative relocations"));
3156 switch (size)
3157 {
3158 case 1: return BFD_RELOC_8_PCREL;
3159 case 2: return BFD_RELOC_16_PCREL;
3160 case 4: return BFD_RELOC_32_PCREL;
3161 case 8: return BFD_RELOC_64_PCREL;
3162 }
3163 as_bad (_("cannot do %u byte pc-relative relocation"), size);
3164 }
3165 else
3166 {
3167 if (sign > 0)
3168 switch (size)
3169 {
3170 case 4: return BFD_RELOC_X86_64_32S;
3171 }
3172 else
3173 switch (size)
3174 {
3175 case 1: return BFD_RELOC_8;
3176 case 2: return BFD_RELOC_16;
3177 case 4: return BFD_RELOC_32;
3178 case 8: return BFD_RELOC_64;
3179 }
3180 as_bad (_("cannot do %s %u byte relocation"),
3181 sign > 0 ? "signed" : "unsigned", size);
3182 }
3183
3184 return NO_RELOC;
3185 }
3186
3187 /* Here we decide which fixups can be adjusted to make them relative to
3188 the beginning of the section instead of the symbol. Basically we need
3189 to make sure that the dynamic relocations are done correctly, so in
3190 some cases we force the original symbol to be used. */
3191
3192 int
3193 tc_i386_fix_adjustable (fixS *fixP ATTRIBUTE_UNUSED)
3194 {
3195 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
3196 if (!IS_ELF)
3197 return 1;
3198
3199 /* Don't adjust pc-relative references to merge sections in 64-bit
3200 mode. */
3201 if (use_rela_relocations
3202 && (S_GET_SEGMENT (fixP->fx_addsy)->flags & SEC_MERGE) != 0
3203 && fixP->fx_pcrel)
3204 return 0;
3205
3206 /* The x86_64 GOTPCREL are represented as 32bit PCrel relocations
3207 and changed later by validate_fix. */
3208 if (GOT_symbol && fixP->fx_subsy == GOT_symbol
3209 && fixP->fx_r_type == BFD_RELOC_32_PCREL)
3210 return 0;
3211
3212 /* Adjust_reloc_syms doesn't know about the GOT. Need to keep symbol
3213 for size relocations. */
3214 if (fixP->fx_r_type == BFD_RELOC_SIZE32
3215 || fixP->fx_r_type == BFD_RELOC_SIZE64
3216 || fixP->fx_r_type == BFD_RELOC_386_GOTOFF
3217 || fixP->fx_r_type == BFD_RELOC_386_PLT32
3218 || fixP->fx_r_type == BFD_RELOC_386_GOT32
3219 || fixP->fx_r_type == BFD_RELOC_386_GOT32X
3220 || fixP->fx_r_type == BFD_RELOC_386_TLS_GD
3221 || fixP->fx_r_type == BFD_RELOC_386_TLS_LDM
3222 || fixP->fx_r_type == BFD_RELOC_386_TLS_LDO_32
3223 || fixP->fx_r_type == BFD_RELOC_386_TLS_IE_32
3224 || fixP->fx_r_type == BFD_RELOC_386_TLS_IE
3225 || fixP->fx_r_type == BFD_RELOC_386_TLS_GOTIE
3226 || fixP->fx_r_type == BFD_RELOC_386_TLS_LE_32
3227 || fixP->fx_r_type == BFD_RELOC_386_TLS_LE
3228 || fixP->fx_r_type == BFD_RELOC_386_TLS_GOTDESC
3229 || fixP->fx_r_type == BFD_RELOC_386_TLS_DESC_CALL
3230 || fixP->fx_r_type == BFD_RELOC_X86_64_PLT32
3231 || fixP->fx_r_type == BFD_RELOC_X86_64_GOT32
3232 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTPCREL
3233 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTPCRELX
3234 || fixP->fx_r_type == BFD_RELOC_X86_64_REX_GOTPCRELX
3235 || fixP->fx_r_type == BFD_RELOC_X86_64_TLSGD
3236 || fixP->fx_r_type == BFD_RELOC_X86_64_TLSLD
3237 || fixP->fx_r_type == BFD_RELOC_X86_64_DTPOFF32
3238 || fixP->fx_r_type == BFD_RELOC_X86_64_DTPOFF64
3239 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTTPOFF
3240 || fixP->fx_r_type == BFD_RELOC_X86_64_TPOFF32
3241 || fixP->fx_r_type == BFD_RELOC_X86_64_TPOFF64
3242 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTOFF64
3243 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTPC32_TLSDESC
3244 || fixP->fx_r_type == BFD_RELOC_X86_64_TLSDESC_CALL
3245 || fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
3246 || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
3247 return 0;
3248 #endif
3249 return 1;
3250 }
3251
3252 static int
3253 intel_float_operand (const char *mnemonic)
3254 {
3255 /* Note that the value returned is meaningful only for opcodes with (memory)
3256 operands, hence the code here is free to improperly handle opcodes that
3257 have no operands (for better performance and smaller code). */
3258
3259 if (mnemonic[0] != 'f')
3260 return 0; /* non-math */
3261
3262 switch (mnemonic[1])
3263 {
3264 /* fclex, fdecstp, fdisi, femms, feni, fincstp, finit, fsetpm, and
3265 the fs segment override prefix not currently handled because no
3266 call path can make opcodes without operands get here */
3267 case 'i':
3268 return 2 /* integer op */;
3269 case 'l':
3270 if (mnemonic[2] == 'd' && (mnemonic[3] == 'c' || mnemonic[3] == 'e'))
3271 return 3; /* fldcw/fldenv */
3272 break;
3273 case 'n':
3274 if (mnemonic[2] != 'o' /* fnop */)
3275 return 3; /* non-waiting control op */
3276 break;
3277 case 'r':
3278 if (mnemonic[2] == 's')
3279 return 3; /* frstor/frstpm */
3280 break;
3281 case 's':
3282 if (mnemonic[2] == 'a')
3283 return 3; /* fsave */
3284 if (mnemonic[2] == 't')
3285 {
3286 switch (mnemonic[3])
3287 {
3288 case 'c': /* fstcw */
3289 case 'd': /* fstdw */
3290 case 'e': /* fstenv */
3291 case 's': /* fsts[gw] */
3292 return 3;
3293 }
3294 }
3295 break;
3296 case 'x':
3297 if (mnemonic[2] == 'r' || mnemonic[2] == 's')
3298 return 0; /* fxsave/fxrstor are not really math ops */
3299 break;
3300 }
3301
3302 return 1;
3303 }
3304
3305 /* Build the VEX prefix. */
3306
3307 static void
3308 build_vex_prefix (const insn_template *t)
3309 {
3310 unsigned int register_specifier;
3311 unsigned int implied_prefix;
3312 unsigned int vector_length;
3313
3314 /* Check register specifier. */
3315 if (i.vex.register_specifier)
3316 {
3317 register_specifier =
3318 ~register_number (i.vex.register_specifier) & 0xf;
3319 gas_assert ((i.vex.register_specifier->reg_flags & RegVRex) == 0);
3320 }
3321 else
3322 register_specifier = 0xf;
3323
3324 /* Use 2-byte VEX prefix by swapping destination and source
3325 operand. */
3326 if (i.vec_encoding != vex_encoding_vex3
3327 && i.dir_encoding == dir_encoding_default
3328 && i.operands == i.reg_operands
3329 && i.tm.opcode_modifier.vexopcode == VEX0F
3330 && i.tm.opcode_modifier.load
3331 && i.rex == REX_B)
3332 {
3333 unsigned int xchg = i.operands - 1;
3334 union i386_op temp_op;
3335 i386_operand_type temp_type;
3336
3337 temp_type = i.types[xchg];
3338 i.types[xchg] = i.types[0];
3339 i.types[0] = temp_type;
3340 temp_op = i.op[xchg];
3341 i.op[xchg] = i.op[0];
3342 i.op[0] = temp_op;
3343
3344 gas_assert (i.rm.mode == 3);
3345
3346 i.rex = REX_R;
3347 xchg = i.rm.regmem;
3348 i.rm.regmem = i.rm.reg;
3349 i.rm.reg = xchg;
3350
3351 /* Use the next insn. */
3352 i.tm = t[1];
3353 }
3354
3355 if (i.tm.opcode_modifier.vex == VEXScalar)
3356 vector_length = avxscalar;
3357 else if (i.tm.opcode_modifier.vex == VEX256)
3358 vector_length = 1;
3359 else
3360 {
3361 unsigned int op;
3362
3363 vector_length = 0;
3364 for (op = 0; op < t->operands; ++op)
3365 if (t->operand_types[op].bitfield.xmmword
3366 && t->operand_types[op].bitfield.ymmword
3367 && i.types[op].bitfield.ymmword)
3368 {
3369 vector_length = 1;
3370 break;
3371 }
3372 }
3373
3374 switch ((i.tm.base_opcode >> 8) & 0xff)
3375 {
3376 case 0:
3377 implied_prefix = 0;
3378 break;
3379 case DATA_PREFIX_OPCODE:
3380 implied_prefix = 1;
3381 break;
3382 case REPE_PREFIX_OPCODE:
3383 implied_prefix = 2;
3384 break;
3385 case REPNE_PREFIX_OPCODE:
3386 implied_prefix = 3;
3387 break;
3388 default:
3389 abort ();
3390 }
3391
3392 /* Use 2-byte VEX prefix if possible. */
3393 if (i.vec_encoding != vex_encoding_vex3
3394 && i.tm.opcode_modifier.vexopcode == VEX0F
3395 && i.tm.opcode_modifier.vexw != VEXW1
3396 && (i.rex & (REX_W | REX_X | REX_B)) == 0)
3397 {
3398 /* 2-byte VEX prefix. */
3399 unsigned int r;
3400
3401 i.vex.length = 2;
3402 i.vex.bytes[0] = 0xc5;
3403
3404 /* Check the REX.R bit. */
3405 r = (i.rex & REX_R) ? 0 : 1;
3406 i.vex.bytes[1] = (r << 7
3407 | register_specifier << 3
3408 | vector_length << 2
3409 | implied_prefix);
3410 }
3411 else
3412 {
3413 /* 3-byte VEX prefix. */
3414 unsigned int m, w;
3415
3416 i.vex.length = 3;
3417
3418 switch (i.tm.opcode_modifier.vexopcode)
3419 {
3420 case VEX0F:
3421 m = 0x1;
3422 i.vex.bytes[0] = 0xc4;
3423 break;
3424 case VEX0F38:
3425 m = 0x2;
3426 i.vex.bytes[0] = 0xc4;
3427 break;
3428 case VEX0F3A:
3429 m = 0x3;
3430 i.vex.bytes[0] = 0xc4;
3431 break;
3432 case XOP08:
3433 m = 0x8;
3434 i.vex.bytes[0] = 0x8f;
3435 break;
3436 case XOP09:
3437 m = 0x9;
3438 i.vex.bytes[0] = 0x8f;
3439 break;
3440 case XOP0A:
3441 m = 0xa;
3442 i.vex.bytes[0] = 0x8f;
3443 break;
3444 default:
3445 abort ();
3446 }
3447
3448 /* The high 3 bits of the second VEX byte are 1's compliment
3449 of RXB bits from REX. */
3450 i.vex.bytes[1] = (~i.rex & 0x7) << 5 | m;
3451
3452 /* Check the REX.W bit. */
3453 w = (i.rex & REX_W) ? 1 : 0;
3454 if (i.tm.opcode_modifier.vexw == VEXW1)
3455 w = 1;
3456
3457 i.vex.bytes[2] = (w << 7
3458 | register_specifier << 3
3459 | vector_length << 2
3460 | implied_prefix);
3461 }
3462 }
3463
3464 static INLINE bfd_boolean
3465 is_evex_encoding (const insn_template *t)
3466 {
3467 return t->opcode_modifier.evex
3468 || t->opcode_modifier.broadcast || t->opcode_modifier.masking
3469 || t->opcode_modifier.staticrounding || t->opcode_modifier.sae;
3470 }
3471
3472 /* Build the EVEX prefix. */
3473
3474 static void
3475 build_evex_prefix (void)
3476 {
3477 unsigned int register_specifier;
3478 unsigned int implied_prefix;
3479 unsigned int m, w;
3480 rex_byte vrex_used = 0;
3481
3482 /* Check register specifier. */
3483 if (i.vex.register_specifier)
3484 {
3485 gas_assert ((i.vrex & REX_X) == 0);
3486
3487 register_specifier = i.vex.register_specifier->reg_num;
3488 if ((i.vex.register_specifier->reg_flags & RegRex))
3489 register_specifier += 8;
3490 /* The upper 16 registers are encoded in the fourth byte of the
3491 EVEX prefix. */
3492 if (!(i.vex.register_specifier->reg_flags & RegVRex))
3493 i.vex.bytes[3] = 0x8;
3494 register_specifier = ~register_specifier & 0xf;
3495 }
3496 else
3497 {
3498 register_specifier = 0xf;
3499
3500 /* Encode upper 16 vector index register in the fourth byte of
3501 the EVEX prefix. */
3502 if (!(i.vrex & REX_X))
3503 i.vex.bytes[3] = 0x8;
3504 else
3505 vrex_used |= REX_X;
3506 }
3507
3508 switch ((i.tm.base_opcode >> 8) & 0xff)
3509 {
3510 case 0:
3511 implied_prefix = 0;
3512 break;
3513 case DATA_PREFIX_OPCODE:
3514 implied_prefix = 1;
3515 break;
3516 case REPE_PREFIX_OPCODE:
3517 implied_prefix = 2;
3518 break;
3519 case REPNE_PREFIX_OPCODE:
3520 implied_prefix = 3;
3521 break;
3522 default:
3523 abort ();
3524 }
3525
3526 /* 4 byte EVEX prefix. */
3527 i.vex.length = 4;
3528 i.vex.bytes[0] = 0x62;
3529
3530 /* mmmm bits. */
3531 switch (i.tm.opcode_modifier.vexopcode)
3532 {
3533 case VEX0F:
3534 m = 1;
3535 break;
3536 case VEX0F38:
3537 m = 2;
3538 break;
3539 case VEX0F3A:
3540 m = 3;
3541 break;
3542 default:
3543 abort ();
3544 break;
3545 }
3546
3547 /* The high 3 bits of the second EVEX byte are 1's compliment of RXB
3548 bits from REX. */
3549 i.vex.bytes[1] = (~i.rex & 0x7) << 5 | m;
3550
3551 /* The fifth bit of the second EVEX byte is 1's compliment of the
3552 REX_R bit in VREX. */
3553 if (!(i.vrex & REX_R))
3554 i.vex.bytes[1] |= 0x10;
3555 else
3556 vrex_used |= REX_R;
3557
3558 if ((i.reg_operands + i.imm_operands) == i.operands)
3559 {
3560 /* When all operands are registers, the REX_X bit in REX is not
3561 used. We reuse it to encode the upper 16 registers, which is
3562 indicated by the REX_B bit in VREX. The REX_X bit is encoded
3563 as 1's compliment. */
3564 if ((i.vrex & REX_B))
3565 {
3566 vrex_used |= REX_B;
3567 i.vex.bytes[1] &= ~0x40;
3568 }
3569 }
3570
3571 /* EVEX instructions shouldn't need the REX prefix. */
3572 i.vrex &= ~vrex_used;
3573 gas_assert (i.vrex == 0);
3574
3575 /* Check the REX.W bit. */
3576 w = (i.rex & REX_W) ? 1 : 0;
3577 if (i.tm.opcode_modifier.vexw)
3578 {
3579 if (i.tm.opcode_modifier.vexw == VEXW1)
3580 w = 1;
3581 }
3582 /* If w is not set it means we are dealing with WIG instruction. */
3583 else if (!w)
3584 {
3585 if (evexwig == evexw1)
3586 w = 1;
3587 }
3588
3589 /* Encode the U bit. */
3590 implied_prefix |= 0x4;
3591
3592 /* The third byte of the EVEX prefix. */
3593 i.vex.bytes[2] = (w << 7 | register_specifier << 3 | implied_prefix);
3594
3595 /* The fourth byte of the EVEX prefix. */
3596 /* The zeroing-masking bit. */
3597 if (i.mask && i.mask->zeroing)
3598 i.vex.bytes[3] |= 0x80;
3599
3600 /* Don't always set the broadcast bit if there is no RC. */
3601 if (!i.rounding)
3602 {
3603 /* Encode the vector length. */
3604 unsigned int vec_length;
3605
3606 if (!i.tm.opcode_modifier.evex
3607 || i.tm.opcode_modifier.evex == EVEXDYN)
3608 {
3609 unsigned int op;
3610
3611 vec_length = 0;
3612 for (op = 0; op < i.tm.operands; ++op)
3613 if (i.tm.operand_types[op].bitfield.xmmword
3614 + i.tm.operand_types[op].bitfield.ymmword
3615 + i.tm.operand_types[op].bitfield.zmmword > 1)
3616 {
3617 if (i.types[op].bitfield.zmmword)
3618 i.tm.opcode_modifier.evex = EVEX512;
3619 else if (i.types[op].bitfield.ymmword)
3620 i.tm.opcode_modifier.evex = EVEX256;
3621 else if (i.types[op].bitfield.xmmword)
3622 i.tm.opcode_modifier.evex = EVEX128;
3623 else
3624 continue;
3625 break;
3626 }
3627 }
3628
3629 switch (i.tm.opcode_modifier.evex)
3630 {
3631 case EVEXLIG: /* LL' is ignored */
3632 vec_length = evexlig << 5;
3633 break;
3634 case EVEX128:
3635 vec_length = 0 << 5;
3636 break;
3637 case EVEX256:
3638 vec_length = 1 << 5;
3639 break;
3640 case EVEX512:
3641 vec_length = 2 << 5;
3642 break;
3643 default:
3644 abort ();
3645 break;
3646 }
3647 i.vex.bytes[3] |= vec_length;
3648 /* Encode the broadcast bit. */
3649 if (i.broadcast)
3650 i.vex.bytes[3] |= 0x10;
3651 }
3652 else
3653 {
3654 if (i.rounding->type != saeonly)
3655 i.vex.bytes[3] |= 0x10 | (i.rounding->type << 5);
3656 else
3657 i.vex.bytes[3] |= 0x10 | (evexrcig << 5);
3658 }
3659
3660 if (i.mask && i.mask->mask)
3661 i.vex.bytes[3] |= i.mask->mask->reg_num;
3662 }
3663
3664 static void
3665 process_immext (void)
3666 {
3667 expressionS *exp;
3668
3669 if ((i.tm.cpu_flags.bitfield.cpusse3 || i.tm.cpu_flags.bitfield.cpusvme)
3670 && i.operands > 0)
3671 {
3672 /* MONITOR/MWAIT as well as SVME instructions have fixed operands
3673 with an opcode suffix which is coded in the same place as an
3674 8-bit immediate field would be.
3675 Here we check those operands and remove them afterwards. */
3676 unsigned int x;
3677
3678 for (x = 0; x < i.operands; x++)
3679 if (register_number (i.op[x].regs) != x)
3680 as_bad (_("can't use register '%s%s' as operand %d in '%s'."),
3681 register_prefix, i.op[x].regs->reg_name, x + 1,
3682 i.tm.name);
3683
3684 i.operands = 0;
3685 }
3686
3687 if (i.tm.cpu_flags.bitfield.cpumwaitx && i.operands > 0)
3688 {
3689 /* MONITORX/MWAITX instructions have fixed operands with an opcode
3690 suffix which is coded in the same place as an 8-bit immediate
3691 field would be.
3692 Here we check those operands and remove them afterwards. */
3693 unsigned int x;
3694
3695 if (i.operands != 3)
3696 abort();
3697
3698 for (x = 0; x < 2; x++)
3699 if (register_number (i.op[x].regs) != x)
3700 goto bad_register_operand;
3701
3702 /* Check for third operand for mwaitx/monitorx insn. */
3703 if (register_number (i.op[x].regs)
3704 != (x + (i.tm.extension_opcode == 0xfb)))
3705 {
3706 bad_register_operand:
3707 as_bad (_("can't use register '%s%s' as operand %d in '%s'."),
3708 register_prefix, i.op[x].regs->reg_name, x+1,
3709 i.tm.name);
3710 }
3711
3712 i.operands = 0;
3713 }
3714
3715 /* These AMD 3DNow! and SSE2 instructions have an opcode suffix
3716 which is coded in the same place as an 8-bit immediate field
3717 would be. Here we fake an 8-bit immediate operand from the
3718 opcode suffix stored in tm.extension_opcode.
3719
3720 AVX instructions also use this encoding, for some of
3721 3 argument instructions. */
3722
3723 gas_assert (i.imm_operands <= 1
3724 && (i.operands <= 2
3725 || ((i.tm.opcode_modifier.vex
3726 || i.tm.opcode_modifier.vexopcode
3727 || is_evex_encoding (&i.tm))
3728 && i.operands <= 4)));
3729
3730 exp = &im_expressions[i.imm_operands++];
3731 i.op[i.operands].imms = exp;
3732 i.types[i.operands] = imm8;
3733 i.operands++;
3734 exp->X_op = O_constant;
3735 exp->X_add_number = i.tm.extension_opcode;
3736 i.tm.extension_opcode = None;
3737 }
3738
3739
3740 static int
3741 check_hle (void)
3742 {
3743 switch (i.tm.opcode_modifier.hleprefixok)
3744 {
3745 default:
3746 abort ();
3747 case HLEPrefixNone:
3748 as_bad (_("invalid instruction `%s' after `%s'"),
3749 i.tm.name, i.hle_prefix);
3750 return 0;
3751 case HLEPrefixLock:
3752 if (i.prefix[LOCK_PREFIX])
3753 return 1;
3754 as_bad (_("missing `lock' with `%s'"), i.hle_prefix);
3755 return 0;
3756 case HLEPrefixAny:
3757 return 1;
3758 case HLEPrefixRelease:
3759 if (i.prefix[HLE_PREFIX] != XRELEASE_PREFIX_OPCODE)
3760 {
3761 as_bad (_("instruction `%s' after `xacquire' not allowed"),
3762 i.tm.name);
3763 return 0;
3764 }
3765 if (i.mem_operands == 0
3766 || !operand_type_check (i.types[i.operands - 1], anymem))
3767 {
3768 as_bad (_("memory destination needed for instruction `%s'"
3769 " after `xrelease'"), i.tm.name);
3770 return 0;
3771 }
3772 return 1;
3773 }
3774 }
3775
3776 /* Try the shortest encoding by shortening operand size. */
3777
3778 static void
3779 optimize_encoding (void)
3780 {
3781 int j;
3782
3783 if (optimize_for_space
3784 && i.reg_operands == 1
3785 && i.imm_operands == 1
3786 && !i.types[1].bitfield.byte
3787 && i.op[0].imms->X_op == O_constant
3788 && fits_in_imm7 (i.op[0].imms->X_add_number)
3789 && ((i.tm.base_opcode == 0xa8
3790 && i.tm.extension_opcode == None)
3791 || (i.tm.base_opcode == 0xf6
3792 && i.tm.extension_opcode == 0x0)))
3793 {
3794 /* Optimize: -Os:
3795 test $imm7, %r64/%r32/%r16 -> test $imm7, %r8
3796 */
3797 unsigned int base_regnum = i.op[1].regs->reg_num;
3798 if (flag_code == CODE_64BIT || base_regnum < 4)
3799 {
3800 i.types[1].bitfield.byte = 1;
3801 /* Ignore the suffix. */
3802 i.suffix = 0;
3803 if (base_regnum >= 4
3804 && !(i.op[1].regs->reg_flags & RegRex))
3805 {
3806 /* Handle SP, BP, SI and DI registers. */
3807 if (i.types[1].bitfield.word)
3808 j = 16;
3809 else if (i.types[1].bitfield.dword)
3810 j = 32;
3811 else
3812 j = 48;
3813 i.op[1].regs -= j;
3814 }
3815 }
3816 }
3817 else if (flag_code == CODE_64BIT
3818 && ((i.types[1].bitfield.qword
3819 && i.reg_operands == 1
3820 && i.imm_operands == 1
3821 && i.op[0].imms->X_op == O_constant
3822 && ((i.tm.base_opcode == 0xb0
3823 && i.tm.extension_opcode == None
3824 && fits_in_unsigned_long (i.op[0].imms->X_add_number))
3825 || (fits_in_imm31 (i.op[0].imms->X_add_number)
3826 && (((i.tm.base_opcode == 0x24
3827 || i.tm.base_opcode == 0xa8)
3828 && i.tm.extension_opcode == None)
3829 || (i.tm.base_opcode == 0x80
3830 && i.tm.extension_opcode == 0x4)
3831 || ((i.tm.base_opcode == 0xf6
3832 || i.tm.base_opcode == 0xc6)
3833 && i.tm.extension_opcode == 0x0)))))
3834 || (i.types[0].bitfield.qword
3835 && ((i.reg_operands == 2
3836 && i.op[0].regs == i.op[1].regs
3837 && ((i.tm.base_opcode == 0x30
3838 || i.tm.base_opcode == 0x28)
3839 && i.tm.extension_opcode == None))
3840 || (i.reg_operands == 1
3841 && i.operands == 1
3842 && i.tm.base_opcode == 0x30
3843 && i.tm.extension_opcode == None)))))
3844 {
3845 /* Optimize: -O:
3846 andq $imm31, %r64 -> andl $imm31, %r32
3847 testq $imm31, %r64 -> testl $imm31, %r32
3848 xorq %r64, %r64 -> xorl %r32, %r32
3849 subq %r64, %r64 -> subl %r32, %r32
3850 movq $imm31, %r64 -> movl $imm31, %r32
3851 movq $imm32, %r64 -> movl $imm32, %r32
3852 */
3853 i.tm.opcode_modifier.norex64 = 1;
3854 if (i.tm.base_opcode == 0xb0 || i.tm.base_opcode == 0xc6)
3855 {
3856 /* Handle
3857 movq $imm31, %r64 -> movl $imm31, %r32
3858 movq $imm32, %r64 -> movl $imm32, %r32
3859 */
3860 i.tm.operand_types[0].bitfield.imm32 = 1;
3861 i.tm.operand_types[0].bitfield.imm32s = 0;
3862 i.tm.operand_types[0].bitfield.imm64 = 0;
3863 i.types[0].bitfield.imm32 = 1;
3864 i.types[0].bitfield.imm32s = 0;
3865 i.types[0].bitfield.imm64 = 0;
3866 i.types[1].bitfield.dword = 1;
3867 i.types[1].bitfield.qword = 0;
3868 if (i.tm.base_opcode == 0xc6)
3869 {
3870 /* Handle
3871 movq $imm31, %r64 -> movl $imm31, %r32
3872 */
3873 i.tm.base_opcode = 0xb0;
3874 i.tm.extension_opcode = None;
3875 i.tm.opcode_modifier.shortform = 1;
3876 i.tm.opcode_modifier.modrm = 0;
3877 }
3878 }
3879 }
3880 else if (optimize > 1
3881 && i.reg_operands == 3
3882 && i.op[0].regs == i.op[1].regs
3883 && !i.types[2].bitfield.xmmword
3884 && (i.tm.opcode_modifier.vex
3885 || ((!i.mask || i.mask->zeroing)
3886 && !i.rounding
3887 && is_evex_encoding (&i.tm)
3888 && (i.vec_encoding != vex_encoding_evex
3889 || i.tm.cpu_flags.bitfield.cpuavx512vl
3890 || cpu_arch_isa_flags.bitfield.cpuavx512vl)))
3891 && ((i.tm.base_opcode == 0x55
3892 || i.tm.base_opcode == 0x6655
3893 || i.tm.base_opcode == 0x66df
3894 || i.tm.base_opcode == 0x57
3895 || i.tm.base_opcode == 0x6657
3896 || i.tm.base_opcode == 0x66ef
3897 || i.tm.base_opcode == 0x66f8
3898 || i.tm.base_opcode == 0x66f9
3899 || i.tm.base_opcode == 0x66fa
3900 || i.tm.base_opcode == 0x66fb)
3901 && i.tm.extension_opcode == None))
3902 {
3903 /* Optimize: -O2:
3904 VOP, one of vandnps, vandnpd, vxorps, vxorpd, vpsubb, vpsubd,
3905 vpsubq and vpsubw:
3906 EVEX VOP %zmmM, %zmmM, %zmmN
3907 -> VEX VOP %xmmM, %xmmM, %xmmN (M and N < 16)
3908 -> EVEX VOP %xmmM, %xmmM, %xmmN (M || N >= 16)
3909 EVEX VOP %ymmM, %ymmM, %ymmN
3910 -> VEX VOP %xmmM, %xmmM, %xmmN (M and N < 16)
3911 -> EVEX VOP %xmmM, %xmmM, %xmmN (M || N >= 16)
3912 VEX VOP %ymmM, %ymmM, %ymmN
3913 -> VEX VOP %xmmM, %xmmM, %xmmN
3914 VOP, one of vpandn and vpxor:
3915 VEX VOP %ymmM, %ymmM, %ymmN
3916 -> VEX VOP %xmmM, %xmmM, %xmmN
3917 VOP, one of vpandnd and vpandnq:
3918 EVEX VOP %zmmM, %zmmM, %zmmN
3919 -> VEX vpandn %xmmM, %xmmM, %xmmN (M and N < 16)
3920 -> EVEX VOP %xmmM, %xmmM, %xmmN (M || N >= 16)
3921 EVEX VOP %ymmM, %ymmM, %ymmN
3922 -> VEX vpandn %xmmM, %xmmM, %xmmN (M and N < 16)
3923 -> EVEX VOP %xmmM, %xmmM, %xmmN (M || N >= 16)
3924 VOP, one of vpxord and vpxorq:
3925 EVEX VOP %zmmM, %zmmM, %zmmN
3926 -> VEX vpxor %xmmM, %xmmM, %xmmN (M and N < 16)
3927 -> EVEX VOP %xmmM, %xmmM, %xmmN (M || N >= 16)
3928 EVEX VOP %ymmM, %ymmM, %ymmN
3929 -> VEX vpxor %xmmM, %xmmM, %xmmN (M and N < 16)
3930 -> EVEX VOP %xmmM, %xmmM, %xmmN (M || N >= 16)
3931 */
3932 if (is_evex_encoding (&i.tm))
3933 {
3934 if (i.vec_encoding == vex_encoding_evex)
3935 i.tm.opcode_modifier.evex = EVEX128;
3936 else
3937 {
3938 i.tm.opcode_modifier.vex = VEX128;
3939 i.tm.opcode_modifier.vexw = VEXW0;
3940 i.tm.opcode_modifier.evex = 0;
3941 }
3942 }
3943 else
3944 i.tm.opcode_modifier.vex = VEX128;
3945
3946 if (i.tm.opcode_modifier.vex)
3947 for (j = 0; j < 3; j++)
3948 {
3949 i.types[j].bitfield.xmmword = 1;
3950 i.types[j].bitfield.ymmword = 0;
3951 }
3952 }
3953 }
3954
3955 /* This is the guts of the machine-dependent assembler. LINE points to a
3956 machine dependent instruction. This function is supposed to emit
3957 the frags/bytes it assembles to. */
3958
3959 void
3960 md_assemble (char *line)
3961 {
3962 unsigned int j;
3963 char mnemonic[MAX_MNEM_SIZE], mnem_suffix;
3964 const insn_template *t;
3965
3966 /* Initialize globals. */
3967 memset (&i, '\0', sizeof (i));
3968 for (j = 0; j < MAX_OPERANDS; j++)
3969 i.reloc[j] = NO_RELOC;
3970 memset (disp_expressions, '\0', sizeof (disp_expressions));
3971 memset (im_expressions, '\0', sizeof (im_expressions));
3972 save_stack_p = save_stack;
3973
3974 /* First parse an instruction mnemonic & call i386_operand for the operands.
3975 We assume that the scrubber has arranged it so that line[0] is the valid
3976 start of a (possibly prefixed) mnemonic. */
3977
3978 line = parse_insn (line, mnemonic);
3979 if (line == NULL)
3980 return;
3981 mnem_suffix = i.suffix;
3982
3983 line = parse_operands (line, mnemonic);
3984 this_operand = -1;
3985 xfree (i.memop1_string);
3986 i.memop1_string = NULL;
3987 if (line == NULL)
3988 return;
3989
3990 /* Now we've parsed the mnemonic into a set of templates, and have the
3991 operands at hand. */
3992
3993 /* All intel opcodes have reversed operands except for "bound" and
3994 "enter". We also don't reverse intersegment "jmp" and "call"
3995 instructions with 2 immediate operands so that the immediate segment
3996 precedes the offset, as it does when in AT&T mode. */
3997 if (intel_syntax
3998 && i.operands > 1
3999 && (strcmp (mnemonic, "bound") != 0)
4000 && (strcmp (mnemonic, "invlpga") != 0)
4001 && !(operand_type_check (i.types[0], imm)
4002 && operand_type_check (i.types[1], imm)))
4003 swap_operands ();
4004
4005 /* The order of the immediates should be reversed
4006 for 2 immediates extrq and insertq instructions */
4007 if (i.imm_operands == 2
4008 && (strcmp (mnemonic, "extrq") == 0
4009 || strcmp (mnemonic, "insertq") == 0))
4010 swap_2_operands (0, 1);
4011
4012 if (i.imm_operands)
4013 optimize_imm ();
4014
4015 /* Don't optimize displacement for movabs since it only takes 64bit
4016 displacement. */
4017 if (i.disp_operands
4018 && i.disp_encoding != disp_encoding_32bit
4019 && (flag_code != CODE_64BIT
4020 || strcmp (mnemonic, "movabs") != 0))
4021 optimize_disp ();
4022
4023 /* Next, we find a template that matches the given insn,
4024 making sure the overlap of the given operands types is consistent
4025 with the template operand types. */
4026
4027 if (!(t = match_template (mnem_suffix)))
4028 return;
4029
4030 if (sse_check != check_none
4031 && !i.tm.opcode_modifier.noavx
4032 && !i.tm.cpu_flags.bitfield.cpuavx
4033 && (i.tm.cpu_flags.bitfield.cpusse
4034 || i.tm.cpu_flags.bitfield.cpusse2
4035 || i.tm.cpu_flags.bitfield.cpusse3
4036 || i.tm.cpu_flags.bitfield.cpussse3
4037 || i.tm.cpu_flags.bitfield.cpusse4_1
4038 || i.tm.cpu_flags.bitfield.cpusse4_2
4039 || i.tm.cpu_flags.bitfield.cpupclmul
4040 || i.tm.cpu_flags.bitfield.cpuaes
4041 || i.tm.cpu_flags.bitfield.cpugfni))
4042 {
4043 (sse_check == check_warning
4044 ? as_warn
4045 : as_bad) (_("SSE instruction `%s' is used"), i.tm.name);
4046 }
4047
4048 /* Zap movzx and movsx suffix. The suffix has been set from
4049 "word ptr" or "byte ptr" on the source operand in Intel syntax
4050 or extracted from mnemonic in AT&T syntax. But we'll use
4051 the destination register to choose the suffix for encoding. */
4052 if ((i.tm.base_opcode & ~9) == 0x0fb6)
4053 {
4054 /* In Intel syntax, there must be a suffix. In AT&T syntax, if
4055 there is no suffix, the default will be byte extension. */
4056 if (i.reg_operands != 2
4057 && !i.suffix
4058 && intel_syntax)
4059 as_bad (_("ambiguous operand size for `%s'"), i.tm.name);
4060
4061 i.suffix = 0;
4062 }
4063
4064 if (i.tm.opcode_modifier.fwait)
4065 if (!add_prefix (FWAIT_OPCODE))
4066 return;
4067
4068 /* Check if REP prefix is OK. */
4069 if (i.rep_prefix && !i.tm.opcode_modifier.repprefixok)
4070 {
4071 as_bad (_("invalid instruction `%s' after `%s'"),
4072 i.tm.name, i.rep_prefix);
4073 return;
4074 }
4075
4076 /* Check for lock without a lockable instruction. Destination operand
4077 must be memory unless it is xchg (0x86). */
4078 if (i.prefix[LOCK_PREFIX]
4079 && (!i.tm.opcode_modifier.islockable
4080 || i.mem_operands == 0
4081 || (i.tm.base_opcode != 0x86
4082 && !operand_type_check (i.types[i.operands - 1], anymem))))
4083 {
4084 as_bad (_("expecting lockable instruction after `lock'"));
4085 return;
4086 }
4087
4088 /* Check if HLE prefix is OK. */
4089 if (i.hle_prefix && !check_hle ())
4090 return;
4091
4092 /* Check BND prefix. */
4093 if (i.bnd_prefix && !i.tm.opcode_modifier.bndprefixok)
4094 as_bad (_("expecting valid branch instruction after `bnd'"));
4095
4096 /* Check NOTRACK prefix. */
4097 if (i.notrack_prefix && !i.tm.opcode_modifier.notrackprefixok)
4098 as_bad (_("expecting indirect branch instruction after `notrack'"));
4099
4100 if (i.tm.cpu_flags.bitfield.cpumpx)
4101 {
4102 if (flag_code == CODE_64BIT && i.prefix[ADDR_PREFIX])
4103 as_bad (_("32-bit address isn't allowed in 64-bit MPX instructions."));
4104 else if (flag_code != CODE_16BIT
4105 ? i.prefix[ADDR_PREFIX]
4106 : i.mem_operands && !i.prefix[ADDR_PREFIX])
4107 as_bad (_("16-bit address isn't allowed in MPX instructions"));
4108 }
4109
4110 /* Insert BND prefix. */
4111 if (add_bnd_prefix && i.tm.opcode_modifier.bndprefixok)
4112 {
4113 if (!i.prefix[BND_PREFIX])
4114 add_prefix (BND_PREFIX_OPCODE);
4115 else if (i.prefix[BND_PREFIX] != BND_PREFIX_OPCODE)
4116 {
4117 as_warn (_("replacing `rep'/`repe' prefix by `bnd'"));
4118 i.prefix[BND_PREFIX] = BND_PREFIX_OPCODE;
4119 }
4120 }
4121
4122 /* Check string instruction segment overrides. */
4123 if (i.tm.opcode_modifier.isstring && i.mem_operands != 0)
4124 {
4125 if (!check_string ())
4126 return;
4127 i.disp_operands = 0;
4128 }
4129
4130 if (optimize && !i.no_optimize && i.tm.opcode_modifier.optimize)
4131 optimize_encoding ();
4132
4133 if (!process_suffix ())
4134 return;
4135
4136 /* Update operand types. */
4137 for (j = 0; j < i.operands; j++)
4138 i.types[j] = operand_type_and (i.types[j], i.tm.operand_types[j]);
4139
4140 /* Make still unresolved immediate matches conform to size of immediate
4141 given in i.suffix. */
4142 if (!finalize_imm ())
4143 return;
4144
4145 if (i.types[0].bitfield.imm1)
4146 i.imm_operands = 0; /* kludge for shift insns. */
4147
4148 /* We only need to check those implicit registers for instructions
4149 with 3 operands or less. */
4150 if (i.operands <= 3)
4151 for (j = 0; j < i.operands; j++)
4152 if (i.types[j].bitfield.inoutportreg
4153 || i.types[j].bitfield.shiftcount
4154 || (i.types[j].bitfield.acc && !i.types[j].bitfield.xmmword))
4155 i.reg_operands--;
4156
4157 /* ImmExt should be processed after SSE2AVX. */
4158 if (!i.tm.opcode_modifier.sse2avx
4159 && i.tm.opcode_modifier.immext)
4160 process_immext ();
4161
4162 /* For insns with operands there are more diddles to do to the opcode. */
4163 if (i.operands)
4164 {
4165 if (!process_operands ())
4166 return;
4167 }
4168 else if (!quiet_warnings && i.tm.opcode_modifier.ugh)
4169 {
4170 /* UnixWare fsub no args is alias for fsubp, fadd -> faddp, etc. */
4171 as_warn (_("translating to `%sp'"), i.tm.name);
4172 }
4173
4174 if (i.tm.opcode_modifier.vex || i.tm.opcode_modifier.vexopcode
4175 || is_evex_encoding (&i.tm))
4176 {
4177 if (flag_code == CODE_16BIT)
4178 {
4179 as_bad (_("instruction `%s' isn't supported in 16-bit mode."),
4180 i.tm.name);
4181 return;
4182 }
4183
4184 if (i.tm.opcode_modifier.vex)
4185 build_vex_prefix (t);
4186 else
4187 build_evex_prefix ();
4188 }
4189
4190 /* Handle conversion of 'int $3' --> special int3 insn. XOP or FMA4
4191 instructions may define INT_OPCODE as well, so avoid this corner
4192 case for those instructions that use MODRM. */
4193 if (i.tm.base_opcode == INT_OPCODE
4194 && !i.tm.opcode_modifier.modrm
4195 && i.op[0].imms->X_add_number == 3)
4196 {
4197 i.tm.base_opcode = INT3_OPCODE;
4198 i.imm_operands = 0;
4199 }
4200
4201 if ((i.tm.opcode_modifier.jump
4202 || i.tm.opcode_modifier.jumpbyte
4203 || i.tm.opcode_modifier.jumpdword)
4204 && i.op[0].disps->X_op == O_constant)
4205 {
4206 /* Convert "jmp constant" (and "call constant") to a jump (call) to
4207 the absolute address given by the constant. Since ix86 jumps and
4208 calls are pc relative, we need to generate a reloc. */
4209 i.op[0].disps->X_add_symbol = &abs_symbol;
4210 i.op[0].disps->X_op = O_symbol;
4211 }
4212
4213 if (i.tm.opcode_modifier.rex64)
4214 i.rex |= REX_W;
4215
4216 /* For 8 bit registers we need an empty rex prefix. Also if the
4217 instruction already has a prefix, we need to convert old
4218 registers to new ones. */
4219
4220 if ((i.types[0].bitfield.reg && i.types[0].bitfield.byte
4221 && (i.op[0].regs->reg_flags & RegRex64) != 0)
4222 || (i.types[1].bitfield.reg && i.types[1].bitfield.byte
4223 && (i.op[1].regs->reg_flags & RegRex64) != 0)
4224 || (((i.types[0].bitfield.reg && i.types[0].bitfield.byte)
4225 || (i.types[1].bitfield.reg && i.types[1].bitfield.byte))
4226 && i.rex != 0))
4227 {
4228 int x;
4229
4230 i.rex |= REX_OPCODE;
4231 for (x = 0; x < 2; x++)
4232 {
4233 /* Look for 8 bit operand that uses old registers. */
4234 if (i.types[x].bitfield.reg && i.types[x].bitfield.byte
4235 && (i.op[x].regs->reg_flags & RegRex64) == 0)
4236 {
4237 /* In case it is "hi" register, give up. */
4238 if (i.op[x].regs->reg_num > 3)
4239 as_bad (_("can't encode register '%s%s' in an "
4240 "instruction requiring REX prefix."),
4241 register_prefix, i.op[x].regs->reg_name);
4242
4243 /* Otherwise it is equivalent to the extended register.
4244 Since the encoding doesn't change this is merely
4245 cosmetic cleanup for debug output. */
4246
4247 i.op[x].regs = i.op[x].regs + 8;
4248 }
4249 }
4250 }
4251
4252 if (i.rex == 0 && i.rex_encoding)
4253 {
4254 /* Check if we can add a REX_OPCODE byte. Look for 8 bit operand
4255 that uses legacy register. If it is "hi" register, don't add
4256 the REX_OPCODE byte. */
4257 int x;
4258 for (x = 0; x < 2; x++)
4259 if (i.types[x].bitfield.reg
4260 && i.types[x].bitfield.byte
4261 && (i.op[x].regs->reg_flags & RegRex64) == 0
4262 && i.op[x].regs->reg_num > 3)
4263 {
4264 i.rex_encoding = FALSE;
4265 break;
4266 }
4267
4268 if (i.rex_encoding)
4269 i.rex = REX_OPCODE;
4270 }
4271
4272 if (i.rex != 0)
4273 add_prefix (REX_OPCODE | i.rex);
4274
4275 /* We are ready to output the insn. */
4276 output_insn ();
4277 }
4278
4279 static char *
4280 parse_insn (char *line, char *mnemonic)
4281 {
4282 char *l = line;
4283 char *token_start = l;
4284 char *mnem_p;
4285 int supported;
4286 const insn_template *t;
4287 char *dot_p = NULL;
4288
4289 while (1)
4290 {
4291 mnem_p = mnemonic;
4292 while ((*mnem_p = mnemonic_chars[(unsigned char) *l]) != 0)
4293 {
4294 if (*mnem_p == '.')
4295 dot_p = mnem_p;
4296 mnem_p++;
4297 if (mnem_p >= mnemonic + MAX_MNEM_SIZE)
4298 {
4299 as_bad (_("no such instruction: `%s'"), token_start);
4300 return NULL;
4301 }
4302 l++;
4303 }
4304 if (!is_space_char (*l)
4305 && *l != END_OF_INSN
4306 && (intel_syntax
4307 || (*l != PREFIX_SEPARATOR
4308 && *l != ',')))
4309 {
4310 as_bad (_("invalid character %s in mnemonic"),
4311 output_invalid (*l));
4312 return NULL;
4313 }
4314 if (token_start == l)
4315 {
4316 if (!intel_syntax && *l == PREFIX_SEPARATOR)
4317 as_bad (_("expecting prefix; got nothing"));
4318 else
4319 as_bad (_("expecting mnemonic; got nothing"));
4320 return NULL;
4321 }
4322
4323 /* Look up instruction (or prefix) via hash table. */
4324 current_templates = (const templates *) hash_find (op_hash, mnemonic);
4325
4326 if (*l != END_OF_INSN
4327 && (!is_space_char (*l) || l[1] != END_OF_INSN)
4328 && current_templates
4329 && current_templates->start->opcode_modifier.isprefix)
4330 {
4331 if (!cpu_flags_check_cpu64 (current_templates->start->cpu_flags))
4332 {
4333 as_bad ((flag_code != CODE_64BIT
4334 ? _("`%s' is only supported in 64-bit mode")
4335 : _("`%s' is not supported in 64-bit mode")),
4336 current_templates->start->name);
4337 return NULL;
4338 }
4339 /* If we are in 16-bit mode, do not allow addr16 or data16.
4340 Similarly, in 32-bit mode, do not allow addr32 or data32. */
4341 if ((current_templates->start->opcode_modifier.size16
4342 || current_templates->start->opcode_modifier.size32)
4343 && flag_code != CODE_64BIT
4344 && (current_templates->start->opcode_modifier.size32
4345 ^ (flag_code == CODE_16BIT)))
4346 {
4347 as_bad (_("redundant %s prefix"),
4348 current_templates->start->name);
4349 return NULL;
4350 }
4351 if (current_templates->start->opcode_length == 0)
4352 {
4353 /* Handle pseudo prefixes. */
4354 switch (current_templates->start->base_opcode)
4355 {
4356 case 0x0:
4357 /* {disp8} */
4358 i.disp_encoding = disp_encoding_8bit;
4359 break;
4360 case 0x1:
4361 /* {disp32} */
4362 i.disp_encoding = disp_encoding_32bit;
4363 break;
4364 case 0x2:
4365 /* {load} */
4366 i.dir_encoding = dir_encoding_load;
4367 break;
4368 case 0x3:
4369 /* {store} */
4370 i.dir_encoding = dir_encoding_store;
4371 break;
4372 case 0x4:
4373 /* {vex2} */
4374 i.vec_encoding = vex_encoding_vex2;
4375 break;
4376 case 0x5:
4377 /* {vex3} */
4378 i.vec_encoding = vex_encoding_vex3;
4379 break;
4380 case 0x6:
4381 /* {evex} */
4382 i.vec_encoding = vex_encoding_evex;
4383 break;
4384 case 0x7:
4385 /* {rex} */
4386 i.rex_encoding = TRUE;
4387 break;
4388 case 0x8:
4389 /* {nooptimize} */
4390 i.no_optimize = TRUE;
4391 break;
4392 default:
4393 abort ();
4394 }
4395 }
4396 else
4397 {
4398 /* Add prefix, checking for repeated prefixes. */
4399 switch (add_prefix (current_templates->start->base_opcode))
4400 {
4401 case PREFIX_EXIST:
4402 return NULL;
4403 case PREFIX_DS:
4404 if (current_templates->start->cpu_flags.bitfield.cpuibt)
4405 i.notrack_prefix = current_templates->start->name;
4406 break;
4407 case PREFIX_REP:
4408 if (current_templates->start->cpu_flags.bitfield.cpuhle)
4409 i.hle_prefix = current_templates->start->name;
4410 else if (current_templates->start->cpu_flags.bitfield.cpumpx)
4411 i.bnd_prefix = current_templates->start->name;
4412 else
4413 i.rep_prefix = current_templates->start->name;
4414 break;
4415 default:
4416 break;
4417 }
4418 }
4419 /* Skip past PREFIX_SEPARATOR and reset token_start. */
4420 token_start = ++l;
4421 }
4422 else
4423 break;
4424 }
4425
4426 if (!current_templates)
4427 {
4428 /* Check if we should swap operand or force 32bit displacement in
4429 encoding. */
4430 if (mnem_p - 2 == dot_p && dot_p[1] == 's')
4431 i.dir_encoding = dir_encoding_store;
4432 else if (mnem_p - 3 == dot_p
4433 && dot_p[1] == 'd'
4434 && dot_p[2] == '8')
4435 i.disp_encoding = disp_encoding_8bit;
4436 else if (mnem_p - 4 == dot_p
4437 && dot_p[1] == 'd'
4438 && dot_p[2] == '3'
4439 && dot_p[3] == '2')
4440 i.disp_encoding = disp_encoding_32bit;
4441 else
4442 goto check_suffix;
4443 mnem_p = dot_p;
4444 *dot_p = '\0';
4445 current_templates = (const templates *) hash_find (op_hash, mnemonic);
4446 }
4447
4448 if (!current_templates)
4449 {
4450 check_suffix:
4451 /* See if we can get a match by trimming off a suffix. */
4452 switch (mnem_p[-1])
4453 {
4454 case WORD_MNEM_SUFFIX:
4455 if (intel_syntax && (intel_float_operand (mnemonic) & 2))
4456 i.suffix = SHORT_MNEM_SUFFIX;
4457 else
4458 /* Fall through. */
4459 case BYTE_MNEM_SUFFIX:
4460 case QWORD_MNEM_SUFFIX:
4461 i.suffix = mnem_p[-1];
4462 mnem_p[-1] = '\0';
4463 current_templates = (const templates *) hash_find (op_hash,
4464 mnemonic);
4465 break;
4466 case SHORT_MNEM_SUFFIX:
4467 case LONG_MNEM_SUFFIX:
4468 if (!intel_syntax)
4469 {
4470 i.suffix = mnem_p[-1];
4471 mnem_p[-1] = '\0';
4472 current_templates = (const templates *) hash_find (op_hash,
4473 mnemonic);
4474 }
4475 break;
4476
4477 /* Intel Syntax. */
4478 case 'd':
4479 if (intel_syntax)
4480 {
4481 if (intel_float_operand (mnemonic) == 1)
4482 i.suffix = SHORT_MNEM_SUFFIX;
4483 else
4484 i.suffix = LONG_MNEM_SUFFIX;
4485 mnem_p[-1] = '\0';
4486 current_templates = (const templates *) hash_find (op_hash,
4487 mnemonic);
4488 }
4489 break;
4490 }
4491 if (!current_templates)
4492 {
4493 as_bad (_("no such instruction: `%s'"), token_start);
4494 return NULL;
4495 }
4496 }
4497
4498 if (current_templates->start->opcode_modifier.jump
4499 || current_templates->start->opcode_modifier.jumpbyte)
4500 {
4501 /* Check for a branch hint. We allow ",pt" and ",pn" for
4502 predict taken and predict not taken respectively.
4503 I'm not sure that branch hints actually do anything on loop
4504 and jcxz insns (JumpByte) for current Pentium4 chips. They
4505 may work in the future and it doesn't hurt to accept them
4506 now. */
4507 if (l[0] == ',' && l[1] == 'p')
4508 {
4509 if (l[2] == 't')
4510 {
4511 if (!add_prefix (DS_PREFIX_OPCODE))
4512 return NULL;
4513 l += 3;
4514 }
4515 else if (l[2] == 'n')
4516 {
4517 if (!add_prefix (CS_PREFIX_OPCODE))
4518 return NULL;
4519 l += 3;
4520 }
4521 }
4522 }
4523 /* Any other comma loses. */
4524 if (*l == ',')
4525 {
4526 as_bad (_("invalid character %s in mnemonic"),
4527 output_invalid (*l));
4528 return NULL;
4529 }
4530
4531 /* Check if instruction is supported on specified architecture. */
4532 supported = 0;
4533 for (t = current_templates->start; t < current_templates->end; ++t)
4534 {
4535 supported |= cpu_flags_match (t);
4536 if (supported == CPU_FLAGS_PERFECT_MATCH)
4537 {
4538 if (!cpu_arch_flags.bitfield.cpui386 && (flag_code != CODE_16BIT))
4539 as_warn (_("use .code16 to ensure correct addressing mode"));
4540
4541 return l;
4542 }
4543 }
4544
4545 if (!(supported & CPU_FLAGS_64BIT_MATCH))
4546 as_bad (flag_code == CODE_64BIT
4547 ? _("`%s' is not supported in 64-bit mode")
4548 : _("`%s' is only supported in 64-bit mode"),
4549 current_templates->start->name);
4550 else
4551 as_bad (_("`%s' is not supported on `%s%s'"),
4552 current_templates->start->name,
4553 cpu_arch_name ? cpu_arch_name : default_arch,
4554 cpu_sub_arch_name ? cpu_sub_arch_name : "");
4555
4556 return NULL;
4557 }
4558
4559 static char *
4560 parse_operands (char *l, const char *mnemonic)
4561 {
4562 char *token_start;
4563
4564 /* 1 if operand is pending after ','. */
4565 unsigned int expecting_operand = 0;
4566
4567 /* Non-zero if operand parens not balanced. */
4568 unsigned int paren_not_balanced;
4569
4570 while (*l != END_OF_INSN)
4571 {
4572 /* Skip optional white space before operand. */
4573 if (is_space_char (*l))
4574 ++l;
4575 if (!is_operand_char (*l) && *l != END_OF_INSN && *l != '"')
4576 {
4577 as_bad (_("invalid character %s before operand %d"),
4578 output_invalid (*l),
4579 i.operands + 1);
4580 return NULL;
4581 }
4582 token_start = l; /* After white space. */
4583 paren_not_balanced = 0;
4584 while (paren_not_balanced || *l != ',')
4585 {
4586 if (*l == END_OF_INSN)
4587 {
4588 if (paren_not_balanced)
4589 {
4590 if (!intel_syntax)
4591 as_bad (_("unbalanced parenthesis in operand %d."),
4592 i.operands + 1);
4593 else
4594 as_bad (_("unbalanced brackets in operand %d."),
4595 i.operands + 1);
4596 return NULL;
4597 }
4598 else
4599 break; /* we are done */
4600 }
4601 else if (!is_operand_char (*l) && !is_space_char (*l) && *l != '"')
4602 {
4603 as_bad (_("invalid character %s in operand %d"),
4604 output_invalid (*l),
4605 i.operands + 1);
4606 return NULL;
4607 }
4608 if (!intel_syntax)
4609 {
4610 if (*l == '(')
4611 ++paren_not_balanced;
4612 if (*l == ')')
4613 --paren_not_balanced;
4614 }
4615 else
4616 {
4617 if (*l == '[')
4618 ++paren_not_balanced;
4619 if (*l == ']')
4620 --paren_not_balanced;
4621 }
4622 l++;
4623 }
4624 if (l != token_start)
4625 { /* Yes, we've read in another operand. */
4626 unsigned int operand_ok;
4627 this_operand = i.operands++;
4628 if (i.operands > MAX_OPERANDS)
4629 {
4630 as_bad (_("spurious operands; (%d operands/instruction max)"),
4631 MAX_OPERANDS);
4632 return NULL;
4633 }
4634 i.types[this_operand].bitfield.unspecified = 1;
4635 /* Now parse operand adding info to 'i' as we go along. */
4636 END_STRING_AND_SAVE (l);
4637
4638 if (intel_syntax)
4639 operand_ok =
4640 i386_intel_operand (token_start,
4641 intel_float_operand (mnemonic));
4642 else
4643 operand_ok = i386_att_operand (token_start);
4644
4645 RESTORE_END_STRING (l);
4646 if (!operand_ok)
4647 return NULL;
4648 }
4649 else
4650 {
4651 if (expecting_operand)
4652 {
4653 expecting_operand_after_comma:
4654 as_bad (_("expecting operand after ','; got nothing"));
4655 return NULL;
4656 }
4657 if (*l == ',')
4658 {
4659 as_bad (_("expecting operand before ','; got nothing"));
4660 return NULL;
4661 }
4662 }
4663
4664 /* Now *l must be either ',' or END_OF_INSN. */
4665 if (*l == ',')
4666 {
4667 if (*++l == END_OF_INSN)
4668 {
4669 /* Just skip it, if it's \n complain. */
4670 goto expecting_operand_after_comma;
4671 }
4672 expecting_operand = 1;
4673 }
4674 }
4675 return l;
4676 }
4677
4678 static void
4679 swap_2_operands (int xchg1, int xchg2)
4680 {
4681 union i386_op temp_op;
4682 i386_operand_type temp_type;
4683 enum bfd_reloc_code_real temp_reloc;
4684
4685 temp_type = i.types[xchg2];
4686 i.types[xchg2] = i.types[xchg1];
4687 i.types[xchg1] = temp_type;
4688 temp_op = i.op[xchg2];
4689 i.op[xchg2] = i.op[xchg1];
4690 i.op[xchg1] = temp_op;
4691 temp_reloc = i.reloc[xchg2];
4692 i.reloc[xchg2] = i.reloc[xchg1];
4693 i.reloc[xchg1] = temp_reloc;
4694
4695 if (i.mask)
4696 {
4697 if (i.mask->operand == xchg1)
4698 i.mask->operand = xchg2;
4699 else if (i.mask->operand == xchg2)
4700 i.mask->operand = xchg1;
4701 }
4702 if (i.broadcast)
4703 {
4704 if (i.broadcast->operand == xchg1)
4705 i.broadcast->operand = xchg2;
4706 else if (i.broadcast->operand == xchg2)
4707 i.broadcast->operand = xchg1;
4708 }
4709 if (i.rounding)
4710 {
4711 if (i.rounding->operand == xchg1)
4712 i.rounding->operand = xchg2;
4713 else if (i.rounding->operand == xchg2)
4714 i.rounding->operand = xchg1;
4715 }
4716 }
4717
4718 static void
4719 swap_operands (void)
4720 {
4721 switch (i.operands)
4722 {
4723 case 5:
4724 case 4:
4725 swap_2_operands (1, i.operands - 2);
4726 /* Fall through. */
4727 case 3:
4728 case 2:
4729 swap_2_operands (0, i.operands - 1);
4730 break;
4731 default:
4732 abort ();
4733 }
4734
4735 if (i.mem_operands == 2)
4736 {
4737 const seg_entry *temp_seg;
4738 temp_seg = i.seg[0];
4739 i.seg[0] = i.seg[1];
4740 i.seg[1] = temp_seg;
4741 }
4742 }
4743
4744 /* Try to ensure constant immediates are represented in the smallest
4745 opcode possible. */
4746 static void
4747 optimize_imm (void)
4748 {
4749 char guess_suffix = 0;
4750 int op;
4751
4752 if (i.suffix)
4753 guess_suffix = i.suffix;
4754 else if (i.reg_operands)
4755 {
4756 /* Figure out a suffix from the last register operand specified.
4757 We can't do this properly yet, ie. excluding InOutPortReg,
4758 but the following works for instructions with immediates.
4759 In any case, we can't set i.suffix yet. */
4760 for (op = i.operands; --op >= 0;)
4761 if (i.types[op].bitfield.reg && i.types[op].bitfield.byte)
4762 {
4763 guess_suffix = BYTE_MNEM_SUFFIX;
4764 break;
4765 }
4766 else if (i.types[op].bitfield.reg && i.types[op].bitfield.word)
4767 {
4768 guess_suffix = WORD_MNEM_SUFFIX;
4769 break;
4770 }
4771 else if (i.types[op].bitfield.reg && i.types[op].bitfield.dword)
4772 {
4773 guess_suffix = LONG_MNEM_SUFFIX;
4774 break;
4775 }
4776 else if (i.types[op].bitfield.reg && i.types[op].bitfield.qword)
4777 {
4778 guess_suffix = QWORD_MNEM_SUFFIX;
4779 break;
4780 }
4781 }
4782 else if ((flag_code == CODE_16BIT) ^ (i.prefix[DATA_PREFIX] != 0))
4783 guess_suffix = WORD_MNEM_SUFFIX;
4784
4785 for (op = i.operands; --op >= 0;)
4786 if (operand_type_check (i.types[op], imm))
4787 {
4788 switch (i.op[op].imms->X_op)
4789 {
4790 case O_constant:
4791 /* If a suffix is given, this operand may be shortened. */
4792 switch (guess_suffix)
4793 {
4794 case LONG_MNEM_SUFFIX:
4795 i.types[op].bitfield.imm32 = 1;
4796 i.types[op].bitfield.imm64 = 1;
4797 break;
4798 case WORD_MNEM_SUFFIX:
4799 i.types[op].bitfield.imm16 = 1;
4800 i.types[op].bitfield.imm32 = 1;
4801 i.types[op].bitfield.imm32s = 1;
4802 i.types[op].bitfield.imm64 = 1;
4803 break;
4804 case BYTE_MNEM_SUFFIX:
4805 i.types[op].bitfield.imm8 = 1;
4806 i.types[op].bitfield.imm8s = 1;
4807 i.types[op].bitfield.imm16 = 1;
4808 i.types[op].bitfield.imm32 = 1;
4809 i.types[op].bitfield.imm32s = 1;
4810 i.types[op].bitfield.imm64 = 1;
4811 break;
4812 }
4813
4814 /* If this operand is at most 16 bits, convert it
4815 to a signed 16 bit number before trying to see
4816 whether it will fit in an even smaller size.
4817 This allows a 16-bit operand such as $0xffe0 to
4818 be recognised as within Imm8S range. */
4819 if ((i.types[op].bitfield.imm16)
4820 && (i.op[op].imms->X_add_number & ~(offsetT) 0xffff) == 0)
4821 {
4822 i.op[op].imms->X_add_number =
4823 (((i.op[op].imms->X_add_number & 0xffff) ^ 0x8000) - 0x8000);
4824 }
4825 #ifdef BFD64
4826 /* Store 32-bit immediate in 64-bit for 64-bit BFD. */
4827 if ((i.types[op].bitfield.imm32)
4828 && ((i.op[op].imms->X_add_number & ~(((offsetT) 2 << 31) - 1))
4829 == 0))
4830 {
4831 i.op[op].imms->X_add_number = ((i.op[op].imms->X_add_number
4832 ^ ((offsetT) 1 << 31))
4833 - ((offsetT) 1 << 31));
4834 }
4835 #endif
4836 i.types[op]
4837 = operand_type_or (i.types[op],
4838 smallest_imm_type (i.op[op].imms->X_add_number));
4839
4840 /* We must avoid matching of Imm32 templates when 64bit
4841 only immediate is available. */
4842 if (guess_suffix == QWORD_MNEM_SUFFIX)
4843 i.types[op].bitfield.imm32 = 0;
4844 break;
4845
4846 case O_absent:
4847 case O_register:
4848 abort ();
4849
4850 /* Symbols and expressions. */
4851 default:
4852 /* Convert symbolic operand to proper sizes for matching, but don't
4853 prevent matching a set of insns that only supports sizes other
4854 than those matching the insn suffix. */
4855 {
4856 i386_operand_type mask, allowed;
4857 const insn_template *t;
4858
4859 operand_type_set (&mask, 0);
4860 operand_type_set (&allowed, 0);
4861
4862 for (t = current_templates->start;
4863 t < current_templates->end;
4864 ++t)
4865 allowed = operand_type_or (allowed,
4866 t->operand_types[op]);
4867 switch (guess_suffix)
4868 {
4869 case QWORD_MNEM_SUFFIX:
4870 mask.bitfield.imm64 = 1;
4871 mask.bitfield.imm32s = 1;
4872 break;
4873 case LONG_MNEM_SUFFIX:
4874 mask.bitfield.imm32 = 1;
4875 break;
4876 case WORD_MNEM_SUFFIX:
4877 mask.bitfield.imm16 = 1;
4878 break;
4879 case BYTE_MNEM_SUFFIX:
4880 mask.bitfield.imm8 = 1;
4881 break;
4882 default:
4883 break;
4884 }
4885 allowed = operand_type_and (mask, allowed);
4886 if (!operand_type_all_zero (&allowed))
4887 i.types[op] = operand_type_and (i.types[op], mask);
4888 }
4889 break;
4890 }
4891 }
4892 }
4893
4894 /* Try to use the smallest displacement type too. */
4895 static void
4896 optimize_disp (void)
4897 {
4898 int op;
4899
4900 for (op = i.operands; --op >= 0;)
4901 if (operand_type_check (i.types[op], disp))
4902 {
4903 if (i.op[op].disps->X_op == O_constant)
4904 {
4905 offsetT op_disp = i.op[op].disps->X_add_number;
4906
4907 if (i.types[op].bitfield.disp16
4908 && (op_disp & ~(offsetT) 0xffff) == 0)
4909 {
4910 /* If this operand is at most 16 bits, convert
4911 to a signed 16 bit number and don't use 64bit
4912 displacement. */
4913 op_disp = (((op_disp & 0xffff) ^ 0x8000) - 0x8000);
4914 i.types[op].bitfield.disp64 = 0;
4915 }
4916 #ifdef BFD64
4917 /* Optimize 64-bit displacement to 32-bit for 64-bit BFD. */
4918 if (i.types[op].bitfield.disp32
4919 && (op_disp & ~(((offsetT) 2 << 31) - 1)) == 0)
4920 {
4921 /* If this operand is at most 32 bits, convert
4922 to a signed 32 bit number and don't use 64bit
4923 displacement. */
4924 op_disp &= (((offsetT) 2 << 31) - 1);
4925 op_disp = (op_disp ^ ((offsetT) 1 << 31)) - ((addressT) 1 << 31);
4926 i.types[op].bitfield.disp64 = 0;
4927 }
4928 #endif
4929 if (!op_disp && i.types[op].bitfield.baseindex)
4930 {
4931 i.types[op].bitfield.disp8 = 0;
4932 i.types[op].bitfield.disp16 = 0;
4933 i.types[op].bitfield.disp32 = 0;
4934 i.types[op].bitfield.disp32s = 0;
4935 i.types[op].bitfield.disp64 = 0;
4936 i.op[op].disps = 0;
4937 i.disp_operands--;
4938 }
4939 else if (flag_code == CODE_64BIT)
4940 {
4941 if (fits_in_signed_long (op_disp))
4942 {
4943 i.types[op].bitfield.disp64 = 0;
4944 i.types[op].bitfield.disp32s = 1;
4945 }
4946 if (i.prefix[ADDR_PREFIX]
4947 && fits_in_unsigned_long (op_disp))
4948 i.types[op].bitfield.disp32 = 1;
4949 }
4950 if ((i.types[op].bitfield.disp32
4951 || i.types[op].bitfield.disp32s
4952 || i.types[op].bitfield.disp16)
4953 && fits_in_disp8 (op_disp))
4954 i.types[op].bitfield.disp8 = 1;
4955 }
4956 else if (i.reloc[op] == BFD_RELOC_386_TLS_DESC_CALL
4957 || i.reloc[op] == BFD_RELOC_X86_64_TLSDESC_CALL)
4958 {
4959 fix_new_exp (frag_now, frag_more (0) - frag_now->fr_literal, 0,
4960 i.op[op].disps, 0, i.reloc[op]);
4961 i.types[op].bitfield.disp8 = 0;
4962 i.types[op].bitfield.disp16 = 0;
4963 i.types[op].bitfield.disp32 = 0;
4964 i.types[op].bitfield.disp32s = 0;
4965 i.types[op].bitfield.disp64 = 0;
4966 }
4967 else
4968 /* We only support 64bit displacement on constants. */
4969 i.types[op].bitfield.disp64 = 0;
4970 }
4971 }
4972
4973 /* Check if operands are valid for the instruction. */
4974
4975 static int
4976 check_VecOperands (const insn_template *t)
4977 {
4978 unsigned int op;
4979 i386_cpu_flags cpu;
4980 static const i386_cpu_flags avx512 = CPU_ANY_AVX512F_FLAGS;
4981
4982 /* Templates allowing for ZMMword as well as YMMword and/or XMMword for
4983 any one operand are implicity requiring AVX512VL support if the actual
4984 operand size is YMMword or XMMword. Since this function runs after
4985 template matching, there's no need to check for YMMword/XMMword in
4986 the template. */
4987 cpu = cpu_flags_and (t->cpu_flags, avx512);
4988 if (!cpu_flags_all_zero (&cpu)
4989 && !t->cpu_flags.bitfield.cpuavx512vl
4990 && !cpu_arch_flags.bitfield.cpuavx512vl)
4991 {
4992 for (op = 0; op < t->operands; ++op)
4993 {
4994 if (t->operand_types[op].bitfield.zmmword
4995 && (i.types[op].bitfield.ymmword
4996 || i.types[op].bitfield.xmmword))
4997 {
4998 i.error = unsupported;
4999 return 1;
5000 }
5001 }
5002 }
5003
5004 /* Without VSIB byte, we can't have a vector register for index. */
5005 if (!t->opcode_modifier.vecsib
5006 && i.index_reg
5007 && (i.index_reg->reg_type.bitfield.xmmword
5008 || i.index_reg->reg_type.bitfield.ymmword
5009 || i.index_reg->reg_type.bitfield.zmmword))
5010 {
5011 i.error = unsupported_vector_index_register;
5012 return 1;
5013 }
5014
5015 /* Check if default mask is allowed. */
5016 if (t->opcode_modifier.nodefmask
5017 && (!i.mask || i.mask->mask->reg_num == 0))
5018 {
5019 i.error = no_default_mask;
5020 return 1;
5021 }
5022
5023 /* For VSIB byte, we need a vector register for index, and all vector
5024 registers must be distinct. */
5025 if (t->opcode_modifier.vecsib)
5026 {
5027 if (!i.index_reg
5028 || !((t->opcode_modifier.vecsib == VecSIB128
5029 && i.index_reg->reg_type.bitfield.xmmword)
5030 || (t->opcode_modifier.vecsib == VecSIB256
5031 && i.index_reg->reg_type.bitfield.ymmword)
5032 || (t->opcode_modifier.vecsib == VecSIB512
5033 && i.index_reg->reg_type.bitfield.zmmword)))
5034 {
5035 i.error = invalid_vsib_address;
5036 return 1;
5037 }
5038
5039 gas_assert (i.reg_operands == 2 || i.mask);
5040 if (i.reg_operands == 2 && !i.mask)
5041 {
5042 gas_assert (i.types[0].bitfield.regsimd);
5043 gas_assert (i.types[0].bitfield.xmmword
5044 || i.types[0].bitfield.ymmword);
5045 gas_assert (i.types[2].bitfield.regsimd);
5046 gas_assert (i.types[2].bitfield.xmmword
5047 || i.types[2].bitfield.ymmword);
5048 if (operand_check == check_none)
5049 return 0;
5050 if (register_number (i.op[0].regs)
5051 != register_number (i.index_reg)
5052 && register_number (i.op[2].regs)
5053 != register_number (i.index_reg)
5054 && register_number (i.op[0].regs)
5055 != register_number (i.op[2].regs))
5056 return 0;
5057 if (operand_check == check_error)
5058 {
5059 i.error = invalid_vector_register_set;
5060 return 1;
5061 }
5062 as_warn (_("mask, index, and destination registers should be distinct"));
5063 }
5064 else if (i.reg_operands == 1 && i.mask)
5065 {
5066 if (i.types[1].bitfield.regsimd
5067 && (i.types[1].bitfield.xmmword
5068 || i.types[1].bitfield.ymmword
5069 || i.types[1].bitfield.zmmword)
5070 && (register_number (i.op[1].regs)
5071 == register_number (i.index_reg)))
5072 {
5073 if (operand_check == check_error)
5074 {
5075 i.error = invalid_vector_register_set;
5076 return 1;
5077 }
5078 if (operand_check != check_none)
5079 as_warn (_("index and destination registers should be distinct"));
5080 }
5081 }
5082 }
5083
5084 /* Check if broadcast is supported by the instruction and is applied
5085 to the memory operand. */
5086 if (i.broadcast)
5087 {
5088 i386_operand_type type, overlap;
5089
5090 /* Check if specified broadcast is supported in this instruction,
5091 and it's applied to memory operand of DWORD or QWORD type. */
5092 op = i.broadcast->operand;
5093 if (!t->opcode_modifier.broadcast
5094 || !i.types[op].bitfield.mem
5095 || (!i.types[op].bitfield.unspecified
5096 && (t->operand_types[op].bitfield.dword
5097 ? !i.types[op].bitfield.dword
5098 : !i.types[op].bitfield.qword)))
5099 {
5100 bad_broadcast:
5101 i.error = unsupported_broadcast;
5102 return 1;
5103 }
5104
5105 operand_type_set (&type, 0);
5106 switch ((t->operand_types[op].bitfield.dword ? 4 : 8) * i.broadcast->type)
5107 {
5108 case 8:
5109 type.bitfield.qword = 1;
5110 break;
5111 case 16:
5112 type.bitfield.xmmword = 1;
5113 break;
5114 case 32:
5115 type.bitfield.ymmword = 1;
5116 break;
5117 case 64:
5118 type.bitfield.zmmword = 1;
5119 break;
5120 default:
5121 goto bad_broadcast;
5122 }
5123
5124 overlap = operand_type_and (type, t->operand_types[op]);
5125 if (operand_type_all_zero (&overlap))
5126 goto bad_broadcast;
5127
5128 if (t->opcode_modifier.checkregsize)
5129 {
5130 unsigned int j;
5131
5132 type.bitfield.baseindex = 1;
5133 for (j = 0; j < i.operands; ++j)
5134 {
5135 if (j != op
5136 && !operand_type_register_match(i.types[j],
5137 t->operand_types[j],
5138 type,
5139 t->operand_types[op]))
5140 goto bad_broadcast;
5141 }
5142 }
5143 }
5144 /* If broadcast is supported in this instruction, we need to check if
5145 operand of one-element size isn't specified without broadcast. */
5146 else if (t->opcode_modifier.broadcast && i.mem_operands)
5147 {
5148 /* Find memory operand. */
5149 for (op = 0; op < i.operands; op++)
5150 if (operand_type_check (i.types[op], anymem))
5151 break;
5152 gas_assert (op < i.operands);
5153 /* Check size of the memory operand. */
5154 if (t->operand_types[op].bitfield.dword
5155 ? i.types[op].bitfield.dword
5156 : i.types[op].bitfield.qword)
5157 {
5158 i.error = broadcast_needed;
5159 return 1;
5160 }
5161 }
5162 else
5163 op = MAX_OPERANDS - 1; /* Avoid uninitialized variable warning. */
5164
5165 /* Check if requested masking is supported. */
5166 if (i.mask
5167 && (!t->opcode_modifier.masking
5168 || (i.mask->zeroing
5169 && t->opcode_modifier.masking == MERGING_MASKING)))
5170 {
5171 i.error = unsupported_masking;
5172 return 1;
5173 }
5174
5175 /* Check if masking is applied to dest operand. */
5176 if (i.mask && (i.mask->operand != (int) (i.operands - 1)))
5177 {
5178 i.error = mask_not_on_destination;
5179 return 1;
5180 }
5181
5182 /* Check RC/SAE. */
5183 if (i.rounding)
5184 {
5185 if ((i.rounding->type != saeonly
5186 && !t->opcode_modifier.staticrounding)
5187 || (i.rounding->type == saeonly
5188 && (t->opcode_modifier.staticrounding
5189 || !t->opcode_modifier.sae)))
5190 {
5191 i.error = unsupported_rc_sae;
5192 return 1;
5193 }
5194 /* If the instruction has several immediate operands and one of
5195 them is rounding, the rounding operand should be the last
5196 immediate operand. */
5197 if (i.imm_operands > 1
5198 && i.rounding->operand != (int) (i.imm_operands - 1))
5199 {
5200 i.error = rc_sae_operand_not_last_imm;
5201 return 1;
5202 }
5203 }
5204
5205 /* Check vector Disp8 operand. */
5206 if (t->opcode_modifier.disp8memshift
5207 && i.disp_encoding != disp_encoding_32bit)
5208 {
5209 if (i.broadcast)
5210 i.memshift = t->operand_types[op].bitfield.dword ? 2 : 3;
5211 else
5212 i.memshift = t->opcode_modifier.disp8memshift;
5213
5214 for (op = 0; op < i.operands; op++)
5215 if (operand_type_check (i.types[op], disp)
5216 && i.op[op].disps->X_op == O_constant)
5217 {
5218 if (fits_in_disp8 (i.op[op].disps->X_add_number))
5219 {
5220 i.types[op].bitfield.disp8 = 1;
5221 return 0;
5222 }
5223 i.types[op].bitfield.disp8 = 0;
5224 }
5225 }
5226
5227 i.memshift = 0;
5228
5229 return 0;
5230 }
5231
5232 /* Check if operands are valid for the instruction. Update VEX
5233 operand types. */
5234
5235 static int
5236 VEX_check_operands (const insn_template *t)
5237 {
5238 if (i.vec_encoding == vex_encoding_evex)
5239 {
5240 /* This instruction must be encoded with EVEX prefix. */
5241 if (!is_evex_encoding (t))
5242 {
5243 i.error = unsupported;
5244 return 1;
5245 }
5246 return 0;
5247 }
5248
5249 if (!t->opcode_modifier.vex)
5250 {
5251 /* This instruction template doesn't have VEX prefix. */
5252 if (i.vec_encoding != vex_encoding_default)
5253 {
5254 i.error = unsupported;
5255 return 1;
5256 }
5257 return 0;
5258 }
5259
5260 /* Only check VEX_Imm4, which must be the first operand. */
5261 if (t->operand_types[0].bitfield.vec_imm4)
5262 {
5263 if (i.op[0].imms->X_op != O_constant
5264 || !fits_in_imm4 (i.op[0].imms->X_add_number))
5265 {
5266 i.error = bad_imm4;
5267 return 1;
5268 }
5269
5270 /* Turn off Imm8 so that update_imm won't complain. */
5271 i.types[0] = vec_imm4;
5272 }
5273
5274 return 0;
5275 }
5276
5277 static const insn_template *
5278 match_template (char mnem_suffix)
5279 {
5280 /* Points to template once we've found it. */
5281 const insn_template *t;
5282 i386_operand_type overlap0, overlap1, overlap2, overlap3;
5283 i386_operand_type overlap4;
5284 unsigned int found_reverse_match;
5285 i386_opcode_modifier suffix_check, mnemsuf_check;
5286 i386_operand_type operand_types [MAX_OPERANDS];
5287 int addr_prefix_disp;
5288 unsigned int j;
5289 unsigned int found_cpu_match;
5290 unsigned int check_register;
5291 enum i386_error specific_error = 0;
5292
5293 #if MAX_OPERANDS != 5
5294 # error "MAX_OPERANDS must be 5."
5295 #endif
5296
5297 found_reverse_match = 0;
5298 addr_prefix_disp = -1;
5299
5300 memset (&suffix_check, 0, sizeof (suffix_check));
5301 if (intel_syntax && i.broadcast)
5302 /* nothing */;
5303 else if (i.suffix == BYTE_MNEM_SUFFIX)
5304 suffix_check.no_bsuf = 1;
5305 else if (i.suffix == WORD_MNEM_SUFFIX)
5306 suffix_check.no_wsuf = 1;
5307 else if (i.suffix == SHORT_MNEM_SUFFIX)
5308 suffix_check.no_ssuf = 1;
5309 else if (i.suffix == LONG_MNEM_SUFFIX)
5310 suffix_check.no_lsuf = 1;
5311 else if (i.suffix == QWORD_MNEM_SUFFIX)
5312 suffix_check.no_qsuf = 1;
5313 else if (i.suffix == LONG_DOUBLE_MNEM_SUFFIX)
5314 suffix_check.no_ldsuf = 1;
5315
5316 memset (&mnemsuf_check, 0, sizeof (mnemsuf_check));
5317 if (intel_syntax)
5318 {
5319 switch (mnem_suffix)
5320 {
5321 case BYTE_MNEM_SUFFIX: mnemsuf_check.no_bsuf = 1; break;
5322 case WORD_MNEM_SUFFIX: mnemsuf_check.no_wsuf = 1; break;
5323 case SHORT_MNEM_SUFFIX: mnemsuf_check.no_ssuf = 1; break;
5324 case LONG_MNEM_SUFFIX: mnemsuf_check.no_lsuf = 1; break;
5325 case QWORD_MNEM_SUFFIX: mnemsuf_check.no_qsuf = 1; break;
5326 }
5327 }
5328
5329 /* Must have right number of operands. */
5330 i.error = number_of_operands_mismatch;
5331
5332 for (t = current_templates->start; t < current_templates->end; t++)
5333 {
5334 addr_prefix_disp = -1;
5335
5336 if (i.operands != t->operands)
5337 continue;
5338
5339 /* Check processor support. */
5340 i.error = unsupported;
5341 found_cpu_match = (cpu_flags_match (t)
5342 == CPU_FLAGS_PERFECT_MATCH);
5343 if (!found_cpu_match)
5344 continue;
5345
5346 /* Check AT&T mnemonic. */
5347 i.error = unsupported_with_intel_mnemonic;
5348 if (intel_mnemonic && t->opcode_modifier.attmnemonic)
5349 continue;
5350
5351 /* Check AT&T/Intel syntax and Intel64/AMD64 ISA. */
5352 i.error = unsupported_syntax;
5353 if ((intel_syntax && t->opcode_modifier.attsyntax)
5354 || (!intel_syntax && t->opcode_modifier.intelsyntax)
5355 || (intel64 && t->opcode_modifier.amd64)
5356 || (!intel64 && t->opcode_modifier.intel64))
5357 continue;
5358
5359 /* Check the suffix, except for some instructions in intel mode. */
5360 i.error = invalid_instruction_suffix;
5361 if ((!intel_syntax || !t->opcode_modifier.ignoresize)
5362 && ((t->opcode_modifier.no_bsuf && suffix_check.no_bsuf)
5363 || (t->opcode_modifier.no_wsuf && suffix_check.no_wsuf)
5364 || (t->opcode_modifier.no_lsuf && suffix_check.no_lsuf)
5365 || (t->opcode_modifier.no_ssuf && suffix_check.no_ssuf)
5366 || (t->opcode_modifier.no_qsuf && suffix_check.no_qsuf)
5367 || (t->opcode_modifier.no_ldsuf && suffix_check.no_ldsuf)))
5368 continue;
5369 /* In Intel mode all mnemonic suffixes must be explicitly allowed. */
5370 if ((t->opcode_modifier.no_bsuf && mnemsuf_check.no_bsuf)
5371 || (t->opcode_modifier.no_wsuf && mnemsuf_check.no_wsuf)
5372 || (t->opcode_modifier.no_lsuf && mnemsuf_check.no_lsuf)
5373 || (t->opcode_modifier.no_ssuf && mnemsuf_check.no_ssuf)
5374 || (t->opcode_modifier.no_qsuf && mnemsuf_check.no_qsuf)
5375 || (t->opcode_modifier.no_ldsuf && mnemsuf_check.no_ldsuf))
5376 continue;
5377
5378 if (!operand_size_match (t))
5379 continue;
5380
5381 for (j = 0; j < MAX_OPERANDS; j++)
5382 operand_types[j] = t->operand_types[j];
5383
5384 /* In general, don't allow 64-bit operands in 32-bit mode. */
5385 if (i.suffix == QWORD_MNEM_SUFFIX
5386 && flag_code != CODE_64BIT
5387 && (intel_syntax
5388 ? (!t->opcode_modifier.ignoresize
5389 && !intel_float_operand (t->name))
5390 : intel_float_operand (t->name) != 2)
5391 && ((!operand_types[0].bitfield.regmmx
5392 && !operand_types[0].bitfield.regsimd)
5393 || (!operand_types[t->operands > 1].bitfield.regmmx
5394 && !operand_types[t->operands > 1].bitfield.regsimd))
5395 && (t->base_opcode != 0x0fc7
5396 || t->extension_opcode != 1 /* cmpxchg8b */))
5397 continue;
5398
5399 /* In general, don't allow 32-bit operands on pre-386. */
5400 else if (i.suffix == LONG_MNEM_SUFFIX
5401 && !cpu_arch_flags.bitfield.cpui386
5402 && (intel_syntax
5403 ? (!t->opcode_modifier.ignoresize
5404 && !intel_float_operand (t->name))
5405 : intel_float_operand (t->name) != 2)
5406 && ((!operand_types[0].bitfield.regmmx
5407 && !operand_types[0].bitfield.regsimd)
5408 || (!operand_types[t->operands > 1].bitfield.regmmx
5409 && !operand_types[t->operands > 1].bitfield.regsimd)))
5410 continue;
5411
5412 /* Do not verify operands when there are none. */
5413 else
5414 {
5415 if (!t->operands)
5416 /* We've found a match; break out of loop. */
5417 break;
5418 }
5419
5420 /* Address size prefix will turn Disp64/Disp32/Disp16 operand
5421 into Disp32/Disp16/Disp32 operand. */
5422 if (i.prefix[ADDR_PREFIX] != 0)
5423 {
5424 /* There should be only one Disp operand. */
5425 switch (flag_code)
5426 {
5427 case CODE_16BIT:
5428 for (j = 0; j < MAX_OPERANDS; j++)
5429 {
5430 if (operand_types[j].bitfield.disp16)
5431 {
5432 addr_prefix_disp = j;
5433 operand_types[j].bitfield.disp32 = 1;
5434 operand_types[j].bitfield.disp16 = 0;
5435 break;
5436 }
5437 }
5438 break;
5439 case CODE_32BIT:
5440 for (j = 0; j < MAX_OPERANDS; j++)
5441 {
5442 if (operand_types[j].bitfield.disp32)
5443 {
5444 addr_prefix_disp = j;
5445 operand_types[j].bitfield.disp32 = 0;
5446 operand_types[j].bitfield.disp16 = 1;
5447 break;
5448 }
5449 }
5450 break;
5451 case CODE_64BIT:
5452 for (j = 0; j < MAX_OPERANDS; j++)
5453 {
5454 if (operand_types[j].bitfield.disp64)
5455 {
5456 addr_prefix_disp = j;
5457 operand_types[j].bitfield.disp64 = 0;
5458 operand_types[j].bitfield.disp32 = 1;
5459 break;
5460 }
5461 }
5462 break;
5463 }
5464 }
5465
5466 /* Force 0x8b encoding for "mov foo@GOT, %eax". */
5467 if (i.reloc[0] == BFD_RELOC_386_GOT32 && t->base_opcode == 0xa0)
5468 continue;
5469
5470 /* We check register size if needed. */
5471 if (t->opcode_modifier.checkregsize)
5472 {
5473 check_register = (1 << t->operands) - 1;
5474 if (i.broadcast)
5475 check_register &= ~(1 << i.broadcast->operand);
5476 }
5477 else
5478 check_register = 0;
5479
5480 overlap0 = operand_type_and (i.types[0], operand_types[0]);
5481 switch (t->operands)
5482 {
5483 case 1:
5484 if (!operand_type_match (overlap0, i.types[0]))
5485 continue;
5486 break;
5487 case 2:
5488 /* xchg %eax, %eax is a special case. It is an alias for nop
5489 only in 32bit mode and we can use opcode 0x90. In 64bit
5490 mode, we can't use 0x90 for xchg %eax, %eax since it should
5491 zero-extend %eax to %rax. */
5492 if (flag_code == CODE_64BIT
5493 && t->base_opcode == 0x90
5494 && operand_type_equal (&i.types [0], &acc32)
5495 && operand_type_equal (&i.types [1], &acc32))
5496 continue;
5497 /* xrelease mov %eax, <disp> is another special case. It must not
5498 match the accumulator-only encoding of mov. */
5499 if (flag_code != CODE_64BIT
5500 && i.hle_prefix
5501 && t->base_opcode == 0xa0
5502 && i.types[0].bitfield.acc
5503 && operand_type_check (i.types[1], anymem))
5504 continue;
5505 /* If we want store form, we reverse direction of operands. */
5506 if (i.dir_encoding == dir_encoding_store
5507 && t->opcode_modifier.d)
5508 goto check_reverse;
5509 /* Fall through. */
5510
5511 case 3:
5512 /* If we want store form, we skip the current load. */
5513 if (i.dir_encoding == dir_encoding_store
5514 && i.mem_operands == 0
5515 && t->opcode_modifier.load)
5516 continue;
5517 /* Fall through. */
5518 case 4:
5519 case 5:
5520 overlap1 = operand_type_and (i.types[1], operand_types[1]);
5521 if (!operand_type_match (overlap0, i.types[0])
5522 || !operand_type_match (overlap1, i.types[1])
5523 || ((check_register & 3) == 3
5524 && !operand_type_register_match (i.types[0],
5525 operand_types[0],
5526 i.types[1],
5527 operand_types[1])))
5528 {
5529 /* Check if other direction is valid ... */
5530 if (!t->opcode_modifier.d)
5531 continue;
5532
5533 check_reverse:
5534 /* Try reversing direction of operands. */
5535 overlap0 = operand_type_and (i.types[0], operand_types[1]);
5536 overlap1 = operand_type_and (i.types[1], operand_types[0]);
5537 if (!operand_type_match (overlap0, i.types[0])
5538 || !operand_type_match (overlap1, i.types[1])
5539 || (check_register
5540 && !operand_type_register_match (i.types[0],
5541 operand_types[1],
5542 i.types[1],
5543 operand_types[0])))
5544 {
5545 /* Does not match either direction. */
5546 continue;
5547 }
5548 /* found_reverse_match holds which of D or FloatR
5549 we've found. */
5550 if (!t->opcode_modifier.d)
5551 found_reverse_match = 0;
5552 else if (operand_types[0].bitfield.tbyte)
5553 found_reverse_match = Opcode_FloatD;
5554 else
5555 found_reverse_match = Opcode_D;
5556 if (t->opcode_modifier.floatr)
5557 found_reverse_match |= Opcode_FloatR;
5558 }
5559 else
5560 {
5561 /* Found a forward 2 operand match here. */
5562 switch (t->operands)
5563 {
5564 case 5:
5565 overlap4 = operand_type_and (i.types[4],
5566 operand_types[4]);
5567 /* Fall through. */
5568 case 4:
5569 overlap3 = operand_type_and (i.types[3],
5570 operand_types[3]);
5571 /* Fall through. */
5572 case 3:
5573 overlap2 = operand_type_and (i.types[2],
5574 operand_types[2]);
5575 break;
5576 }
5577
5578 switch (t->operands)
5579 {
5580 case 5:
5581 if (!operand_type_match (overlap4, i.types[4])
5582 || !operand_type_register_match (i.types[3],
5583 operand_types[3],
5584 i.types[4],
5585 operand_types[4]))
5586 continue;
5587 /* Fall through. */
5588 case 4:
5589 if (!operand_type_match (overlap3, i.types[3])
5590 || ((check_register & 0xa) == 0xa
5591 && !operand_type_register_match (i.types[1],
5592 operand_types[1],
5593 i.types[3],
5594 operand_types[3]))
5595 || ((check_register & 0xc) == 0xc
5596 && !operand_type_register_match (i.types[2],
5597 operand_types[2],
5598 i.types[3],
5599 operand_types[3])))
5600 continue;
5601 /* Fall through. */
5602 case 3:
5603 /* Here we make use of the fact that there are no
5604 reverse match 3 operand instructions. */
5605 if (!operand_type_match (overlap2, i.types[2])
5606 || ((check_register & 5) == 5
5607 && !operand_type_register_match (i.types[0],
5608 operand_types[0],
5609 i.types[2],
5610 operand_types[2]))
5611 || ((check_register & 6) == 6
5612 && !operand_type_register_match (i.types[1],
5613 operand_types[1],
5614 i.types[2],
5615 operand_types[2])))
5616 continue;
5617 break;
5618 }
5619 }
5620 /* Found either forward/reverse 2, 3 or 4 operand match here:
5621 slip through to break. */
5622 }
5623 if (!found_cpu_match)
5624 {
5625 found_reverse_match = 0;
5626 continue;
5627 }
5628
5629 /* Check if vector and VEX operands are valid. */
5630 if (check_VecOperands (t) || VEX_check_operands (t))
5631 {
5632 specific_error = i.error;
5633 continue;
5634 }
5635
5636 /* We've found a match; break out of loop. */
5637 break;
5638 }
5639
5640 if (t == current_templates->end)
5641 {
5642 /* We found no match. */
5643 const char *err_msg;
5644 switch (specific_error ? specific_error : i.error)
5645 {
5646 default:
5647 abort ();
5648 case operand_size_mismatch:
5649 err_msg = _("operand size mismatch");
5650 break;
5651 case operand_type_mismatch:
5652 err_msg = _("operand type mismatch");
5653 break;
5654 case register_type_mismatch:
5655 err_msg = _("register type mismatch");
5656 break;
5657 case number_of_operands_mismatch:
5658 err_msg = _("number of operands mismatch");
5659 break;
5660 case invalid_instruction_suffix:
5661 err_msg = _("invalid instruction suffix");
5662 break;
5663 case bad_imm4:
5664 err_msg = _("constant doesn't fit in 4 bits");
5665 break;
5666 case unsupported_with_intel_mnemonic:
5667 err_msg = _("unsupported with Intel mnemonic");
5668 break;
5669 case unsupported_syntax:
5670 err_msg = _("unsupported syntax");
5671 break;
5672 case unsupported:
5673 as_bad (_("unsupported instruction `%s'"),
5674 current_templates->start->name);
5675 return NULL;
5676 case invalid_vsib_address:
5677 err_msg = _("invalid VSIB address");
5678 break;
5679 case invalid_vector_register_set:
5680 err_msg = _("mask, index, and destination registers must be distinct");
5681 break;
5682 case unsupported_vector_index_register:
5683 err_msg = _("unsupported vector index register");
5684 break;
5685 case unsupported_broadcast:
5686 err_msg = _("unsupported broadcast");
5687 break;
5688 case broadcast_not_on_src_operand:
5689 err_msg = _("broadcast not on source memory operand");
5690 break;
5691 case broadcast_needed:
5692 err_msg = _("broadcast is needed for operand of such type");
5693 break;
5694 case unsupported_masking:
5695 err_msg = _("unsupported masking");
5696 break;
5697 case mask_not_on_destination:
5698 err_msg = _("mask not on destination operand");
5699 break;
5700 case no_default_mask:
5701 err_msg = _("default mask isn't allowed");
5702 break;
5703 case unsupported_rc_sae:
5704 err_msg = _("unsupported static rounding/sae");
5705 break;
5706 case rc_sae_operand_not_last_imm:
5707 if (intel_syntax)
5708 err_msg = _("RC/SAE operand must precede immediate operands");
5709 else
5710 err_msg = _("RC/SAE operand must follow immediate operands");
5711 break;
5712 case invalid_register_operand:
5713 err_msg = _("invalid register operand");
5714 break;
5715 }
5716 as_bad (_("%s for `%s'"), err_msg,
5717 current_templates->start->name);
5718 return NULL;
5719 }
5720
5721 if (!quiet_warnings)
5722 {
5723 if (!intel_syntax
5724 && (i.types[0].bitfield.jumpabsolute
5725 != operand_types[0].bitfield.jumpabsolute))
5726 {
5727 as_warn (_("indirect %s without `*'"), t->name);
5728 }
5729
5730 if (t->opcode_modifier.isprefix
5731 && t->opcode_modifier.ignoresize)
5732 {
5733 /* Warn them that a data or address size prefix doesn't
5734 affect assembly of the next line of code. */
5735 as_warn (_("stand-alone `%s' prefix"), t->name);
5736 }
5737 }
5738
5739 /* Copy the template we found. */
5740 i.tm = *t;
5741
5742 if (addr_prefix_disp != -1)
5743 i.tm.operand_types[addr_prefix_disp]
5744 = operand_types[addr_prefix_disp];
5745
5746 if (found_reverse_match)
5747 {
5748 /* If we found a reverse match we must alter the opcode
5749 direction bit. found_reverse_match holds bits to change
5750 (different for int & float insns). */
5751
5752 i.tm.base_opcode ^= found_reverse_match;
5753
5754 i.tm.operand_types[0] = operand_types[1];
5755 i.tm.operand_types[1] = operand_types[0];
5756 }
5757
5758 return t;
5759 }
5760
5761 static int
5762 check_string (void)
5763 {
5764 int mem_op = operand_type_check (i.types[0], anymem) ? 0 : 1;
5765 if (i.tm.operand_types[mem_op].bitfield.esseg)
5766 {
5767 if (i.seg[0] != NULL && i.seg[0] != &es)
5768 {
5769 as_bad (_("`%s' operand %d must use `%ses' segment"),
5770 i.tm.name,
5771 mem_op + 1,
5772 register_prefix);
5773 return 0;
5774 }
5775 /* There's only ever one segment override allowed per instruction.
5776 This instruction possibly has a legal segment override on the
5777 second operand, so copy the segment to where non-string
5778 instructions store it, allowing common code. */
5779 i.seg[0] = i.seg[1];
5780 }
5781 else if (i.tm.operand_types[mem_op + 1].bitfield.esseg)
5782 {
5783 if (i.seg[1] != NULL && i.seg[1] != &es)
5784 {
5785 as_bad (_("`%s' operand %d must use `%ses' segment"),
5786 i.tm.name,
5787 mem_op + 2,
5788 register_prefix);
5789 return 0;
5790 }
5791 }
5792 return 1;
5793 }
5794
5795 static int
5796 process_suffix (void)
5797 {
5798 /* If matched instruction specifies an explicit instruction mnemonic
5799 suffix, use it. */
5800 if (i.tm.opcode_modifier.size16)
5801 i.suffix = WORD_MNEM_SUFFIX;
5802 else if (i.tm.opcode_modifier.size32)
5803 i.suffix = LONG_MNEM_SUFFIX;
5804 else if (i.tm.opcode_modifier.size64)
5805 i.suffix = QWORD_MNEM_SUFFIX;
5806 else if (i.reg_operands)
5807 {
5808 /* If there's no instruction mnemonic suffix we try to invent one
5809 based on register operands. */
5810 if (!i.suffix)
5811 {
5812 /* We take i.suffix from the last register operand specified,
5813 Destination register type is more significant than source
5814 register type. crc32 in SSE4.2 prefers source register
5815 type. */
5816 if (i.tm.base_opcode == 0xf20f38f1)
5817 {
5818 if (i.types[0].bitfield.reg && i.types[0].bitfield.word)
5819 i.suffix = WORD_MNEM_SUFFIX;
5820 else if (i.types[0].bitfield.reg && i.types[0].bitfield.dword)
5821 i.suffix = LONG_MNEM_SUFFIX;
5822 else if (i.types[0].bitfield.reg && i.types[0].bitfield.qword)
5823 i.suffix = QWORD_MNEM_SUFFIX;
5824 }
5825 else if (i.tm.base_opcode == 0xf20f38f0)
5826 {
5827 if (i.types[0].bitfield.reg && i.types[0].bitfield.byte)
5828 i.suffix = BYTE_MNEM_SUFFIX;
5829 }
5830
5831 if (!i.suffix)
5832 {
5833 int op;
5834
5835 if (i.tm.base_opcode == 0xf20f38f1
5836 || i.tm.base_opcode == 0xf20f38f0)
5837 {
5838 /* We have to know the operand size for crc32. */
5839 as_bad (_("ambiguous memory operand size for `%s`"),
5840 i.tm.name);
5841 return 0;
5842 }
5843
5844 for (op = i.operands; --op >= 0;)
5845 if (!i.tm.operand_types[op].bitfield.inoutportreg
5846 && !i.tm.operand_types[op].bitfield.shiftcount)
5847 {
5848 if (!i.types[op].bitfield.reg)
5849 continue;
5850 if (i.types[op].bitfield.byte)
5851 i.suffix = BYTE_MNEM_SUFFIX;
5852 else if (i.types[op].bitfield.word)
5853 i.suffix = WORD_MNEM_SUFFIX;
5854 else if (i.types[op].bitfield.dword)
5855 i.suffix = LONG_MNEM_SUFFIX;
5856 else if (i.types[op].bitfield.qword)
5857 i.suffix = QWORD_MNEM_SUFFIX;
5858 else
5859 continue;
5860 break;
5861 }
5862 }
5863 }
5864 else if (i.suffix == BYTE_MNEM_SUFFIX)
5865 {
5866 if (intel_syntax
5867 && i.tm.opcode_modifier.ignoresize
5868 && i.tm.opcode_modifier.no_bsuf)
5869 i.suffix = 0;
5870 else if (!check_byte_reg ())
5871 return 0;
5872 }
5873 else if (i.suffix == LONG_MNEM_SUFFIX)
5874 {
5875 if (intel_syntax
5876 && i.tm.opcode_modifier.ignoresize
5877 && i.tm.opcode_modifier.no_lsuf
5878 && !i.tm.opcode_modifier.todword
5879 && !i.tm.opcode_modifier.toqword)
5880 i.suffix = 0;
5881 else if (!check_long_reg ())
5882 return 0;
5883 }
5884 else if (i.suffix == QWORD_MNEM_SUFFIX)
5885 {
5886 if (intel_syntax
5887 && i.tm.opcode_modifier.ignoresize
5888 && i.tm.opcode_modifier.no_qsuf
5889 && !i.tm.opcode_modifier.todword
5890 && !i.tm.opcode_modifier.toqword)
5891 i.suffix = 0;
5892 else if (!check_qword_reg ())
5893 return 0;
5894 }
5895 else if (i.suffix == WORD_MNEM_SUFFIX)
5896 {
5897 if (intel_syntax
5898 && i.tm.opcode_modifier.ignoresize
5899 && i.tm.opcode_modifier.no_wsuf)
5900 i.suffix = 0;
5901 else if (!check_word_reg ())
5902 return 0;
5903 }
5904 else if (intel_syntax && i.tm.opcode_modifier.ignoresize)
5905 /* Do nothing if the instruction is going to ignore the prefix. */
5906 ;
5907 else
5908 abort ();
5909 }
5910 else if (i.tm.opcode_modifier.defaultsize
5911 && !i.suffix
5912 /* exclude fldenv/frstor/fsave/fstenv */
5913 && i.tm.opcode_modifier.no_ssuf)
5914 {
5915 i.suffix = stackop_size;
5916 }
5917 else if (intel_syntax
5918 && !i.suffix
5919 && (i.tm.operand_types[0].bitfield.jumpabsolute
5920 || i.tm.opcode_modifier.jumpbyte
5921 || i.tm.opcode_modifier.jumpintersegment
5922 || (i.tm.base_opcode == 0x0f01 /* [ls][gi]dt */
5923 && i.tm.extension_opcode <= 3)))
5924 {
5925 switch (flag_code)
5926 {
5927 case CODE_64BIT:
5928 if (!i.tm.opcode_modifier.no_qsuf)
5929 {
5930 i.suffix = QWORD_MNEM_SUFFIX;
5931 break;
5932 }
5933 /* Fall through. */
5934 case CODE_32BIT:
5935 if (!i.tm.opcode_modifier.no_lsuf)
5936 i.suffix = LONG_MNEM_SUFFIX;
5937 break;
5938 case CODE_16BIT:
5939 if (!i.tm.opcode_modifier.no_wsuf)
5940 i.suffix = WORD_MNEM_SUFFIX;
5941 break;
5942 }
5943 }
5944
5945 if (!i.suffix)
5946 {
5947 if (!intel_syntax)
5948 {
5949 if (i.tm.opcode_modifier.w)
5950 {
5951 as_bad (_("no instruction mnemonic suffix given and "
5952 "no register operands; can't size instruction"));
5953 return 0;
5954 }
5955 }
5956 else
5957 {
5958 unsigned int suffixes;
5959
5960 suffixes = !i.tm.opcode_modifier.no_bsuf;
5961 if (!i.tm.opcode_modifier.no_wsuf)
5962 suffixes |= 1 << 1;
5963 if (!i.tm.opcode_modifier.no_lsuf)
5964 suffixes |= 1 << 2;
5965 if (!i.tm.opcode_modifier.no_ldsuf)
5966 suffixes |= 1 << 3;
5967 if (!i.tm.opcode_modifier.no_ssuf)
5968 suffixes |= 1 << 4;
5969 if (flag_code == CODE_64BIT && !i.tm.opcode_modifier.no_qsuf)
5970 suffixes |= 1 << 5;
5971
5972 /* There are more than suffix matches. */
5973 if (i.tm.opcode_modifier.w
5974 || ((suffixes & (suffixes - 1))
5975 && !i.tm.opcode_modifier.defaultsize
5976 && !i.tm.opcode_modifier.ignoresize))
5977 {
5978 as_bad (_("ambiguous operand size for `%s'"), i.tm.name);
5979 return 0;
5980 }
5981 }
5982 }
5983
5984 /* Change the opcode based on the operand size given by i.suffix. */
5985 switch (i.suffix)
5986 {
5987 /* Size floating point instruction. */
5988 case LONG_MNEM_SUFFIX:
5989 if (i.tm.opcode_modifier.floatmf)
5990 {
5991 i.tm.base_opcode ^= 4;
5992 break;
5993 }
5994 /* fall through */
5995 case WORD_MNEM_SUFFIX:
5996 case QWORD_MNEM_SUFFIX:
5997 /* It's not a byte, select word/dword operation. */
5998 if (i.tm.opcode_modifier.w)
5999 {
6000 if (i.tm.opcode_modifier.shortform)
6001 i.tm.base_opcode |= 8;
6002 else
6003 i.tm.base_opcode |= 1;
6004 }
6005 /* fall through */
6006 case SHORT_MNEM_SUFFIX:
6007 /* Now select between word & dword operations via the operand
6008 size prefix, except for instructions that will ignore this
6009 prefix anyway. */
6010 if (i.reg_operands > 0
6011 && i.types[0].bitfield.reg
6012 && i.tm.opcode_modifier.addrprefixopreg
6013 && (i.tm.opcode_modifier.immext
6014 || i.operands == 1))
6015 {
6016 /* The address size override prefix changes the size of the
6017 first operand. */
6018 if ((flag_code == CODE_32BIT
6019 && i.op[0].regs->reg_type.bitfield.word)
6020 || (flag_code != CODE_32BIT
6021 && i.op[0].regs->reg_type.bitfield.dword))
6022 if (!add_prefix (ADDR_PREFIX_OPCODE))
6023 return 0;
6024 }
6025 else if (i.suffix != QWORD_MNEM_SUFFIX
6026 && !i.tm.opcode_modifier.ignoresize
6027 && !i.tm.opcode_modifier.floatmf
6028 && ((i.suffix == LONG_MNEM_SUFFIX) == (flag_code == CODE_16BIT)
6029 || (flag_code == CODE_64BIT
6030 && i.tm.opcode_modifier.jumpbyte)))
6031 {
6032 unsigned int prefix = DATA_PREFIX_OPCODE;
6033
6034 if (i.tm.opcode_modifier.jumpbyte) /* jcxz, loop */
6035 prefix = ADDR_PREFIX_OPCODE;
6036
6037 if (!add_prefix (prefix))
6038 return 0;
6039 }
6040
6041 /* Set mode64 for an operand. */
6042 if (i.suffix == QWORD_MNEM_SUFFIX
6043 && flag_code == CODE_64BIT
6044 && !i.tm.opcode_modifier.norex64
6045 /* Special case for xchg %rax,%rax. It is NOP and doesn't
6046 need rex64. */
6047 && ! (i.operands == 2
6048 && i.tm.base_opcode == 0x90
6049 && i.tm.extension_opcode == None
6050 && operand_type_equal (&i.types [0], &acc64)
6051 && operand_type_equal (&i.types [1], &acc64)))
6052 i.rex |= REX_W;
6053
6054 break;
6055 }
6056
6057 if (i.reg_operands != 0
6058 && i.operands > 1
6059 && i.tm.opcode_modifier.addrprefixopreg
6060 && !i.tm.opcode_modifier.immext)
6061 {
6062 /* Check invalid register operand when the address size override
6063 prefix changes the size of register operands. */
6064 unsigned int op;
6065 enum { need_word, need_dword, need_qword } need;
6066
6067 if (flag_code == CODE_32BIT)
6068 need = i.prefix[ADDR_PREFIX] ? need_word : need_dword;
6069 else
6070 {
6071 if (i.prefix[ADDR_PREFIX])
6072 need = need_dword;
6073 else
6074 need = flag_code == CODE_64BIT ? need_qword : need_word;
6075 }
6076
6077 for (op = 0; op < i.operands; op++)
6078 if (i.types[op].bitfield.reg
6079 && ((need == need_word
6080 && !i.op[op].regs->reg_type.bitfield.word)
6081 || (need == need_dword
6082 && !i.op[op].regs->reg_type.bitfield.dword)
6083 || (need == need_qword
6084 && !i.op[op].regs->reg_type.bitfield.qword)))
6085 {
6086 as_bad (_("invalid register operand size for `%s'"),
6087 i.tm.name);
6088 return 0;
6089 }
6090 }
6091
6092 return 1;
6093 }
6094
6095 static int
6096 check_byte_reg (void)
6097 {
6098 int op;
6099
6100 for (op = i.operands; --op >= 0;)
6101 {
6102 /* Skip non-register operands. */
6103 if (!i.types[op].bitfield.reg)
6104 continue;
6105
6106 /* If this is an eight bit register, it's OK. If it's the 16 or
6107 32 bit version of an eight bit register, we will just use the
6108 low portion, and that's OK too. */
6109 if (i.types[op].bitfield.byte)
6110 continue;
6111
6112 /* I/O port address operands are OK too. */
6113 if (i.tm.operand_types[op].bitfield.inoutportreg)
6114 continue;
6115
6116 /* crc32 doesn't generate this warning. */
6117 if (i.tm.base_opcode == 0xf20f38f0)
6118 continue;
6119
6120 if ((i.types[op].bitfield.word
6121 || i.types[op].bitfield.dword
6122 || i.types[op].bitfield.qword)
6123 && i.op[op].regs->reg_num < 4
6124 /* Prohibit these changes in 64bit mode, since the lowering
6125 would be more complicated. */
6126 && flag_code != CODE_64BIT)
6127 {
6128 #if REGISTER_WARNINGS
6129 if (!quiet_warnings)
6130 as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
6131 register_prefix,
6132 (i.op[op].regs + (i.types[op].bitfield.word
6133 ? REGNAM_AL - REGNAM_AX
6134 : REGNAM_AL - REGNAM_EAX))->reg_name,
6135 register_prefix,
6136 i.op[op].regs->reg_name,
6137 i.suffix);
6138 #endif
6139 continue;
6140 }
6141 /* Any other register is bad. */
6142 if (i.types[op].bitfield.reg
6143 || i.types[op].bitfield.regmmx
6144 || i.types[op].bitfield.regsimd
6145 || i.types[op].bitfield.sreg2
6146 || i.types[op].bitfield.sreg3
6147 || i.types[op].bitfield.control
6148 || i.types[op].bitfield.debug
6149 || i.types[op].bitfield.test)
6150 {
6151 as_bad (_("`%s%s' not allowed with `%s%c'"),
6152 register_prefix,
6153 i.op[op].regs->reg_name,
6154 i.tm.name,
6155 i.suffix);
6156 return 0;
6157 }
6158 }
6159 return 1;
6160 }
6161
6162 static int
6163 check_long_reg (void)
6164 {
6165 int op;
6166
6167 for (op = i.operands; --op >= 0;)
6168 /* Skip non-register operands. */
6169 if (!i.types[op].bitfield.reg)
6170 continue;
6171 /* Reject eight bit registers, except where the template requires
6172 them. (eg. movzb) */
6173 else if (i.types[op].bitfield.byte
6174 && (i.tm.operand_types[op].bitfield.reg
6175 || i.tm.operand_types[op].bitfield.acc)
6176 && (i.tm.operand_types[op].bitfield.word
6177 || i.tm.operand_types[op].bitfield.dword))
6178 {
6179 as_bad (_("`%s%s' not allowed with `%s%c'"),
6180 register_prefix,
6181 i.op[op].regs->reg_name,
6182 i.tm.name,
6183 i.suffix);
6184 return 0;
6185 }
6186 /* Warn if the e prefix on a general reg is missing. */
6187 else if ((!quiet_warnings || flag_code == CODE_64BIT)
6188 && i.types[op].bitfield.word
6189 && (i.tm.operand_types[op].bitfield.reg
6190 || i.tm.operand_types[op].bitfield.acc)
6191 && i.tm.operand_types[op].bitfield.dword)
6192 {
6193 /* Prohibit these changes in the 64bit mode, since the
6194 lowering is more complicated. */
6195 if (flag_code == CODE_64BIT)
6196 {
6197 as_bad (_("incorrect register `%s%s' used with `%c' suffix"),
6198 register_prefix, i.op[op].regs->reg_name,
6199 i.suffix);
6200 return 0;
6201 }
6202 #if REGISTER_WARNINGS
6203 as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
6204 register_prefix,
6205 (i.op[op].regs + REGNAM_EAX - REGNAM_AX)->reg_name,
6206 register_prefix, i.op[op].regs->reg_name, i.suffix);
6207 #endif
6208 }
6209 /* Warn if the r prefix on a general reg is present. */
6210 else if (i.types[op].bitfield.qword
6211 && (i.tm.operand_types[op].bitfield.reg
6212 || i.tm.operand_types[op].bitfield.acc)
6213 && i.tm.operand_types[op].bitfield.dword)
6214 {
6215 if (intel_syntax
6216 && i.tm.opcode_modifier.toqword
6217 && !i.types[0].bitfield.regsimd)
6218 {
6219 /* Convert to QWORD. We want REX byte. */
6220 i.suffix = QWORD_MNEM_SUFFIX;
6221 }
6222 else
6223 {
6224 as_bad (_("incorrect register `%s%s' used with `%c' suffix"),
6225 register_prefix, i.op[op].regs->reg_name,
6226 i.suffix);
6227 return 0;
6228 }
6229 }
6230 return 1;
6231 }
6232
6233 static int
6234 check_qword_reg (void)
6235 {
6236 int op;
6237
6238 for (op = i.operands; --op >= 0; )
6239 /* Skip non-register operands. */
6240 if (!i.types[op].bitfield.reg)
6241 continue;
6242 /* Reject eight bit registers, except where the template requires
6243 them. (eg. movzb) */
6244 else if (i.types[op].bitfield.byte
6245 && (i.tm.operand_types[op].bitfield.reg
6246 || i.tm.operand_types[op].bitfield.acc)
6247 && (i.tm.operand_types[op].bitfield.word
6248 || i.tm.operand_types[op].bitfield.dword))
6249 {
6250 as_bad (_("`%s%s' not allowed with `%s%c'"),
6251 register_prefix,
6252 i.op[op].regs->reg_name,
6253 i.tm.name,
6254 i.suffix);
6255 return 0;
6256 }
6257 /* Warn if the r prefix on a general reg is missing. */
6258 else if ((i.types[op].bitfield.word
6259 || i.types[op].bitfield.dword)
6260 && (i.tm.operand_types[op].bitfield.reg
6261 || i.tm.operand_types[op].bitfield.acc)
6262 && i.tm.operand_types[op].bitfield.qword)
6263 {
6264 /* Prohibit these changes in the 64bit mode, since the
6265 lowering is more complicated. */
6266 if (intel_syntax
6267 && i.tm.opcode_modifier.todword
6268 && !i.types[0].bitfield.regsimd)
6269 {
6270 /* Convert to DWORD. We don't want REX byte. */
6271 i.suffix = LONG_MNEM_SUFFIX;
6272 }
6273 else
6274 {
6275 as_bad (_("incorrect register `%s%s' used with `%c' suffix"),
6276 register_prefix, i.op[op].regs->reg_name,
6277 i.suffix);
6278 return 0;
6279 }
6280 }
6281 return 1;
6282 }
6283
6284 static int
6285 check_word_reg (void)
6286 {
6287 int op;
6288 for (op = i.operands; --op >= 0;)
6289 /* Skip non-register operands. */
6290 if (!i.types[op].bitfield.reg)
6291 continue;
6292 /* Reject eight bit registers, except where the template requires
6293 them. (eg. movzb) */
6294 else if (i.types[op].bitfield.byte
6295 && (i.tm.operand_types[op].bitfield.reg
6296 || i.tm.operand_types[op].bitfield.acc)
6297 && (i.tm.operand_types[op].bitfield.word
6298 || i.tm.operand_types[op].bitfield.dword))
6299 {
6300 as_bad (_("`%s%s' not allowed with `%s%c'"),
6301 register_prefix,
6302 i.op[op].regs->reg_name,
6303 i.tm.name,
6304 i.suffix);
6305 return 0;
6306 }
6307 /* Warn if the e or r prefix on a general reg is present. */
6308 else if ((!quiet_warnings || flag_code == CODE_64BIT)
6309 && (i.types[op].bitfield.dword
6310 || i.types[op].bitfield.qword)
6311 && (i.tm.operand_types[op].bitfield.reg
6312 || i.tm.operand_types[op].bitfield.acc)
6313 && i.tm.operand_types[op].bitfield.word)
6314 {
6315 /* Prohibit these changes in the 64bit mode, since the
6316 lowering is more complicated. */
6317 if (flag_code == CODE_64BIT)
6318 {
6319 as_bad (_("incorrect register `%s%s' used with `%c' suffix"),
6320 register_prefix, i.op[op].regs->reg_name,
6321 i.suffix);
6322 return 0;
6323 }
6324 #if REGISTER_WARNINGS
6325 as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
6326 register_prefix,
6327 (i.op[op].regs + REGNAM_AX - REGNAM_EAX)->reg_name,
6328 register_prefix, i.op[op].regs->reg_name, i.suffix);
6329 #endif
6330 }
6331 return 1;
6332 }
6333
6334 static int
6335 update_imm (unsigned int j)
6336 {
6337 i386_operand_type overlap = i.types[j];
6338 if ((overlap.bitfield.imm8
6339 || overlap.bitfield.imm8s
6340 || overlap.bitfield.imm16
6341 || overlap.bitfield.imm32
6342 || overlap.bitfield.imm32s
6343 || overlap.bitfield.imm64)
6344 && !operand_type_equal (&overlap, &imm8)
6345 && !operand_type_equal (&overlap, &imm8s)
6346 && !operand_type_equal (&overlap, &imm16)
6347 && !operand_type_equal (&overlap, &imm32)
6348 && !operand_type_equal (&overlap, &imm32s)
6349 && !operand_type_equal (&overlap, &imm64))
6350 {
6351 if (i.suffix)
6352 {
6353 i386_operand_type temp;
6354
6355 operand_type_set (&temp, 0);
6356 if (i.suffix == BYTE_MNEM_SUFFIX)
6357 {
6358 temp.bitfield.imm8 = overlap.bitfield.imm8;
6359 temp.bitfield.imm8s = overlap.bitfield.imm8s;
6360 }
6361 else if (i.suffix == WORD_MNEM_SUFFIX)
6362 temp.bitfield.imm16 = overlap.bitfield.imm16;
6363 else if (i.suffix == QWORD_MNEM_SUFFIX)
6364 {
6365 temp.bitfield.imm64 = overlap.bitfield.imm64;
6366 temp.bitfield.imm32s = overlap.bitfield.imm32s;
6367 }
6368 else
6369 temp.bitfield.imm32 = overlap.bitfield.imm32;
6370 overlap = temp;
6371 }
6372 else if (operand_type_equal (&overlap, &imm16_32_32s)
6373 || operand_type_equal (&overlap, &imm16_32)
6374 || operand_type_equal (&overlap, &imm16_32s))
6375 {
6376 if ((flag_code == CODE_16BIT) ^ (i.prefix[DATA_PREFIX] != 0))
6377 overlap = imm16;
6378 else
6379 overlap = imm32s;
6380 }
6381 if (!operand_type_equal (&overlap, &imm8)
6382 && !operand_type_equal (&overlap, &imm8s)
6383 && !operand_type_equal (&overlap, &imm16)
6384 && !operand_type_equal (&overlap, &imm32)
6385 && !operand_type_equal (&overlap, &imm32s)
6386 && !operand_type_equal (&overlap, &imm64))
6387 {
6388 as_bad (_("no instruction mnemonic suffix given; "
6389 "can't determine immediate size"));
6390 return 0;
6391 }
6392 }
6393 i.types[j] = overlap;
6394
6395 return 1;
6396 }
6397
6398 static int
6399 finalize_imm (void)
6400 {
6401 unsigned int j, n;
6402
6403 /* Update the first 2 immediate operands. */
6404 n = i.operands > 2 ? 2 : i.operands;
6405 if (n)
6406 {
6407 for (j = 0; j < n; j++)
6408 if (update_imm (j) == 0)
6409 return 0;
6410
6411 /* The 3rd operand can't be immediate operand. */
6412 gas_assert (operand_type_check (i.types[2], imm) == 0);
6413 }
6414
6415 return 1;
6416 }
6417
6418 static int
6419 process_operands (void)
6420 {
6421 /* Default segment register this instruction will use for memory
6422 accesses. 0 means unknown. This is only for optimizing out
6423 unnecessary segment overrides. */
6424 const seg_entry *default_seg = 0;
6425
6426 if (i.tm.opcode_modifier.sse2avx && i.tm.opcode_modifier.vexvvvv)
6427 {
6428 unsigned int dupl = i.operands;
6429 unsigned int dest = dupl - 1;
6430 unsigned int j;
6431
6432 /* The destination must be an xmm register. */
6433 gas_assert (i.reg_operands
6434 && MAX_OPERANDS > dupl
6435 && operand_type_equal (&i.types[dest], &regxmm));
6436
6437 if (i.tm.operand_types[0].bitfield.acc
6438 && i.tm.operand_types[0].bitfield.xmmword)
6439 {
6440 if (i.tm.opcode_modifier.vexsources == VEX3SOURCES)
6441 {
6442 /* Keep xmm0 for instructions with VEX prefix and 3
6443 sources. */
6444 i.tm.operand_types[0].bitfield.acc = 0;
6445 i.tm.operand_types[0].bitfield.regsimd = 1;
6446 goto duplicate;
6447 }
6448 else
6449 {
6450 /* We remove the first xmm0 and keep the number of
6451 operands unchanged, which in fact duplicates the
6452 destination. */
6453 for (j = 1; j < i.operands; j++)
6454 {
6455 i.op[j - 1] = i.op[j];
6456 i.types[j - 1] = i.types[j];
6457 i.tm.operand_types[j - 1] = i.tm.operand_types[j];
6458 }
6459 }
6460 }
6461 else if (i.tm.opcode_modifier.implicit1stxmm0)
6462 {
6463 gas_assert ((MAX_OPERANDS - 1) > dupl
6464 && (i.tm.opcode_modifier.vexsources
6465 == VEX3SOURCES));
6466
6467 /* Add the implicit xmm0 for instructions with VEX prefix
6468 and 3 sources. */
6469 for (j = i.operands; j > 0; j--)
6470 {
6471 i.op[j] = i.op[j - 1];
6472 i.types[j] = i.types[j - 1];
6473 i.tm.operand_types[j] = i.tm.operand_types[j - 1];
6474 }
6475 i.op[0].regs
6476 = (const reg_entry *) hash_find (reg_hash, "xmm0");
6477 i.types[0] = regxmm;
6478 i.tm.operand_types[0] = regxmm;
6479
6480 i.operands += 2;
6481 i.reg_operands += 2;
6482 i.tm.operands += 2;
6483
6484 dupl++;
6485 dest++;
6486 i.op[dupl] = i.op[dest];
6487 i.types[dupl] = i.types[dest];
6488 i.tm.operand_types[dupl] = i.tm.operand_types[dest];
6489 }
6490 else
6491 {
6492 duplicate:
6493 i.operands++;
6494 i.reg_operands++;
6495 i.tm.operands++;
6496
6497 i.op[dupl] = i.op[dest];
6498 i.types[dupl] = i.types[dest];
6499 i.tm.operand_types[dupl] = i.tm.operand_types[dest];
6500 }
6501
6502 if (i.tm.opcode_modifier.immext)
6503 process_immext ();
6504 }
6505 else if (i.tm.operand_types[0].bitfield.acc
6506 && i.tm.operand_types[0].bitfield.xmmword)
6507 {
6508 unsigned int j;
6509
6510 for (j = 1; j < i.operands; j++)
6511 {
6512 i.op[j - 1] = i.op[j];
6513 i.types[j - 1] = i.types[j];
6514
6515 /* We need to adjust fields in i.tm since they are used by
6516 build_modrm_byte. */
6517 i.tm.operand_types [j - 1] = i.tm.operand_types [j];
6518 }
6519
6520 i.operands--;
6521 i.reg_operands--;
6522 i.tm.operands--;
6523 }
6524 else if (i.tm.opcode_modifier.implicitquadgroup)
6525 {
6526 unsigned int regnum, first_reg_in_group, last_reg_in_group;
6527
6528 /* The second operand must be {x,y,z}mmN, where N is a multiple of 4. */
6529 gas_assert (i.operands >= 2 && i.types[1].bitfield.regsimd);
6530 regnum = register_number (i.op[1].regs);
6531 first_reg_in_group = regnum & ~3;
6532 last_reg_in_group = first_reg_in_group + 3;
6533 if (regnum != first_reg_in_group)
6534 as_warn (_("source register `%s%s' implicitly denotes"
6535 " `%s%.3s%u' to `%s%.3s%u' source group in `%s'"),
6536 register_prefix, i.op[1].regs->reg_name,
6537 register_prefix, i.op[1].regs->reg_name, first_reg_in_group,
6538 register_prefix, i.op[1].regs->reg_name, last_reg_in_group,
6539 i.tm.name);
6540 }
6541 else if (i.tm.opcode_modifier.regkludge)
6542 {
6543 /* The imul $imm, %reg instruction is converted into
6544 imul $imm, %reg, %reg, and the clr %reg instruction
6545 is converted into xor %reg, %reg. */
6546
6547 unsigned int first_reg_op;
6548
6549 if (operand_type_check (i.types[0], reg))
6550 first_reg_op = 0;
6551 else
6552 first_reg_op = 1;
6553 /* Pretend we saw the extra register operand. */
6554 gas_assert (i.reg_operands == 1
6555 && i.op[first_reg_op + 1].regs == 0);
6556 i.op[first_reg_op + 1].regs = i.op[first_reg_op].regs;
6557 i.types[first_reg_op + 1] = i.types[first_reg_op];
6558 i.operands++;
6559 i.reg_operands++;
6560 }
6561
6562 if (i.tm.opcode_modifier.shortform)
6563 {
6564 if (i.types[0].bitfield.sreg2
6565 || i.types[0].bitfield.sreg3)
6566 {
6567 if (i.tm.base_opcode == POP_SEG_SHORT
6568 && i.op[0].regs->reg_num == 1)
6569 {
6570 as_bad (_("you can't `pop %scs'"), register_prefix);
6571 return 0;
6572 }
6573 i.tm.base_opcode |= (i.op[0].regs->reg_num << 3);
6574 if ((i.op[0].regs->reg_flags & RegRex) != 0)
6575 i.rex |= REX_B;
6576 }
6577 else
6578 {
6579 /* The register or float register operand is in operand
6580 0 or 1. */
6581 unsigned int op;
6582
6583 if ((i.types[0].bitfield.reg && i.types[0].bitfield.tbyte)
6584 || operand_type_check (i.types[0], reg))
6585 op = 0;
6586 else
6587 op = 1;
6588 /* Register goes in low 3 bits of opcode. */
6589 i.tm.base_opcode |= i.op[op].regs->reg_num;
6590 if ((i.op[op].regs->reg_flags & RegRex) != 0)
6591 i.rex |= REX_B;
6592 if (!quiet_warnings && i.tm.opcode_modifier.ugh)
6593 {
6594 /* Warn about some common errors, but press on regardless.
6595 The first case can be generated by gcc (<= 2.8.1). */
6596 if (i.operands == 2)
6597 {
6598 /* Reversed arguments on faddp, fsubp, etc. */
6599 as_warn (_("translating to `%s %s%s,%s%s'"), i.tm.name,
6600 register_prefix, i.op[!intel_syntax].regs->reg_name,
6601 register_prefix, i.op[intel_syntax].regs->reg_name);
6602 }
6603 else
6604 {
6605 /* Extraneous `l' suffix on fp insn. */
6606 as_warn (_("translating to `%s %s%s'"), i.tm.name,
6607 register_prefix, i.op[0].regs->reg_name);
6608 }
6609 }
6610 }
6611 }
6612 else if (i.tm.opcode_modifier.modrm)
6613 {
6614 /* The opcode is completed (modulo i.tm.extension_opcode which
6615 must be put into the modrm byte). Now, we make the modrm and
6616 index base bytes based on all the info we've collected. */
6617
6618 default_seg = build_modrm_byte ();
6619 }
6620 else if ((i.tm.base_opcode & ~0x3) == MOV_AX_DISP32)
6621 {
6622 default_seg = &ds;
6623 }
6624 else if (i.tm.opcode_modifier.isstring)
6625 {
6626 /* For the string instructions that allow a segment override
6627 on one of their operands, the default segment is ds. */
6628 default_seg = &ds;
6629 }
6630
6631 if (i.tm.base_opcode == 0x8d /* lea */
6632 && i.seg[0]
6633 && !quiet_warnings)
6634 as_warn (_("segment override on `%s' is ineffectual"), i.tm.name);
6635
6636 /* If a segment was explicitly specified, and the specified segment
6637 is not the default, use an opcode prefix to select it. If we
6638 never figured out what the default segment is, then default_seg
6639 will be zero at this point, and the specified segment prefix will
6640 always be used. */
6641 if ((i.seg[0]) && (i.seg[0] != default_seg))
6642 {
6643 if (!add_prefix (i.seg[0]->seg_prefix))
6644 return 0;
6645 }
6646 return 1;
6647 }
6648
6649 static const seg_entry *
6650 build_modrm_byte (void)
6651 {
6652 const seg_entry *default_seg = 0;
6653 unsigned int source, dest;
6654 int vex_3_sources;
6655
6656 vex_3_sources = i.tm.opcode_modifier.vexsources == VEX3SOURCES;
6657 if (vex_3_sources)
6658 {
6659 unsigned int nds, reg_slot;
6660 expressionS *exp;
6661
6662 dest = i.operands - 1;
6663 nds = dest - 1;
6664
6665 /* There are 2 kinds of instructions:
6666 1. 5 operands: 4 register operands or 3 register operands
6667 plus 1 memory operand plus one Vec_Imm4 operand, VexXDS, and
6668 VexW0 or VexW1. The destination must be either XMM, YMM or
6669 ZMM register.
6670 2. 4 operands: 4 register operands or 3 register operands
6671 plus 1 memory operand, with VexXDS. */
6672 gas_assert ((i.reg_operands == 4
6673 || (i.reg_operands == 3 && i.mem_operands == 1))
6674 && i.tm.opcode_modifier.vexvvvv == VEXXDS
6675 && i.tm.opcode_modifier.vexw
6676 && i.tm.operand_types[dest].bitfield.regsimd);
6677
6678 /* If VexW1 is set, the first non-immediate operand is the source and
6679 the second non-immediate one is encoded in the immediate operand. */
6680 if (i.tm.opcode_modifier.vexw == VEXW1)
6681 {
6682 source = i.imm_operands;
6683 reg_slot = i.imm_operands + 1;
6684 }
6685 else
6686 {
6687 source = i.imm_operands + 1;
6688 reg_slot = i.imm_operands;
6689 }
6690
6691 if (i.imm_operands == 0)
6692 {
6693 /* When there is no immediate operand, generate an 8bit
6694 immediate operand to encode the first operand. */
6695 exp = &im_expressions[i.imm_operands++];
6696 i.op[i.operands].imms = exp;
6697 i.types[i.operands] = imm8;
6698 i.operands++;
6699
6700 gas_assert (i.tm.operand_types[reg_slot].bitfield.regsimd);
6701 exp->X_op = O_constant;
6702 exp->X_add_number = register_number (i.op[reg_slot].regs) << 4;
6703 gas_assert ((i.op[reg_slot].regs->reg_flags & RegVRex) == 0);
6704 }
6705 else
6706 {
6707 unsigned int imm_slot;
6708
6709 gas_assert (i.imm_operands == 1 && i.types[0].bitfield.vec_imm4);
6710
6711 if (i.tm.opcode_modifier.immext)
6712 {
6713 /* When ImmExt is set, the immediate byte is the last
6714 operand. */
6715 imm_slot = i.operands - 1;
6716 source--;
6717 reg_slot--;
6718 }
6719 else
6720 {
6721 imm_slot = 0;
6722
6723 /* Turn on Imm8 so that output_imm will generate it. */
6724 i.types[imm_slot].bitfield.imm8 = 1;
6725 }
6726
6727 gas_assert (i.tm.operand_types[reg_slot].bitfield.regsimd);
6728 i.op[imm_slot].imms->X_add_number
6729 |= register_number (i.op[reg_slot].regs) << 4;
6730 gas_assert ((i.op[reg_slot].regs->reg_flags & RegVRex) == 0);
6731 }
6732
6733 gas_assert (i.tm.operand_types[nds].bitfield.regsimd);
6734 i.vex.register_specifier = i.op[nds].regs;
6735 }
6736 else
6737 source = dest = 0;
6738
6739 /* i.reg_operands MUST be the number of real register operands;
6740 implicit registers do not count. If there are 3 register
6741 operands, it must be a instruction with VexNDS. For a
6742 instruction with VexNDD, the destination register is encoded
6743 in VEX prefix. If there are 4 register operands, it must be
6744 a instruction with VEX prefix and 3 sources. */
6745 if (i.mem_operands == 0
6746 && ((i.reg_operands == 2
6747 && i.tm.opcode_modifier.vexvvvv <= VEXXDS)
6748 || (i.reg_operands == 3
6749 && i.tm.opcode_modifier.vexvvvv == VEXXDS)
6750 || (i.reg_operands == 4 && vex_3_sources)))
6751 {
6752 switch (i.operands)
6753 {
6754 case 2:
6755 source = 0;
6756 break;
6757 case 3:
6758 /* When there are 3 operands, one of them may be immediate,
6759 which may be the first or the last operand. Otherwise,
6760 the first operand must be shift count register (cl) or it
6761 is an instruction with VexNDS. */
6762 gas_assert (i.imm_operands == 1
6763 || (i.imm_operands == 0
6764 && (i.tm.opcode_modifier.vexvvvv == VEXXDS
6765 || i.types[0].bitfield.shiftcount)));
6766 if (operand_type_check (i.types[0], imm)
6767 || i.types[0].bitfield.shiftcount)
6768 source = 1;
6769 else
6770 source = 0;
6771 break;
6772 case 4:
6773 /* When there are 4 operands, the first two must be 8bit
6774 immediate operands. The source operand will be the 3rd
6775 one.
6776
6777 For instructions with VexNDS, if the first operand
6778 an imm8, the source operand is the 2nd one. If the last
6779 operand is imm8, the source operand is the first one. */
6780 gas_assert ((i.imm_operands == 2
6781 && i.types[0].bitfield.imm8
6782 && i.types[1].bitfield.imm8)
6783 || (i.tm.opcode_modifier.vexvvvv == VEXXDS
6784 && i.imm_operands == 1
6785 && (i.types[0].bitfield.imm8
6786 || i.types[i.operands - 1].bitfield.imm8
6787 || i.rounding)));
6788 if (i.imm_operands == 2)
6789 source = 2;
6790 else
6791 {
6792 if (i.types[0].bitfield.imm8)
6793 source = 1;
6794 else
6795 source = 0;
6796 }
6797 break;
6798 case 5:
6799 if (is_evex_encoding (&i.tm))
6800 {
6801 /* For EVEX instructions, when there are 5 operands, the
6802 first one must be immediate operand. If the second one
6803 is immediate operand, the source operand is the 3th
6804 one. If the last one is immediate operand, the source
6805 operand is the 2nd one. */
6806 gas_assert (i.imm_operands == 2
6807 && i.tm.opcode_modifier.sae
6808 && operand_type_check (i.types[0], imm));
6809 if (operand_type_check (i.types[1], imm))
6810 source = 2;
6811 else if (operand_type_check (i.types[4], imm))
6812 source = 1;
6813 else
6814 abort ();
6815 }
6816 break;
6817 default:
6818 abort ();
6819 }
6820
6821 if (!vex_3_sources)
6822 {
6823 dest = source + 1;
6824
6825 /* RC/SAE operand could be between DEST and SRC. That happens
6826 when one operand is GPR and the other one is XMM/YMM/ZMM
6827 register. */
6828 if (i.rounding && i.rounding->operand == (int) dest)
6829 dest++;
6830
6831 if (i.tm.opcode_modifier.vexvvvv == VEXXDS)
6832 {
6833 /* For instructions with VexNDS, the register-only source
6834 operand must be a 32/64bit integer, XMM, YMM, ZMM, or mask
6835 register. It is encoded in VEX prefix. We need to
6836 clear RegMem bit before calling operand_type_equal. */
6837
6838 i386_operand_type op;
6839 unsigned int vvvv;
6840
6841 /* Check register-only source operand when two source
6842 operands are swapped. */
6843 if (!i.tm.operand_types[source].bitfield.baseindex
6844 && i.tm.operand_types[dest].bitfield.baseindex)
6845 {
6846 vvvv = source;
6847 source = dest;
6848 }
6849 else
6850 vvvv = dest;
6851
6852 op = i.tm.operand_types[vvvv];
6853 op.bitfield.regmem = 0;
6854 if ((dest + 1) >= i.operands
6855 || ((!op.bitfield.reg
6856 || (!op.bitfield.dword && !op.bitfield.qword))
6857 && !op.bitfield.regsimd
6858 && !operand_type_equal (&op, &regmask)))
6859 abort ();
6860 i.vex.register_specifier = i.op[vvvv].regs;
6861 dest++;
6862 }
6863 }
6864
6865 i.rm.mode = 3;
6866 /* One of the register operands will be encoded in the i.tm.reg
6867 field, the other in the combined i.tm.mode and i.tm.regmem
6868 fields. If no form of this instruction supports a memory
6869 destination operand, then we assume the source operand may
6870 sometimes be a memory operand and so we need to store the
6871 destination in the i.rm.reg field. */
6872 if (!i.tm.operand_types[dest].bitfield.regmem
6873 && operand_type_check (i.tm.operand_types[dest], anymem) == 0)
6874 {
6875 i.rm.reg = i.op[dest].regs->reg_num;
6876 i.rm.regmem = i.op[source].regs->reg_num;
6877 if ((i.op[dest].regs->reg_flags & RegRex) != 0)
6878 i.rex |= REX_R;
6879 if ((i.op[dest].regs->reg_flags & RegVRex) != 0)
6880 i.vrex |= REX_R;
6881 if ((i.op[source].regs->reg_flags & RegRex) != 0)
6882 i.rex |= REX_B;
6883 if ((i.op[source].regs->reg_flags & RegVRex) != 0)
6884 i.vrex |= REX_B;
6885 }
6886 else
6887 {
6888 i.rm.reg = i.op[source].regs->reg_num;
6889 i.rm.regmem = i.op[dest].regs->reg_num;
6890 if ((i.op[dest].regs->reg_flags & RegRex) != 0)
6891 i.rex |= REX_B;
6892 if ((i.op[dest].regs->reg_flags & RegVRex) != 0)
6893 i.vrex |= REX_B;
6894 if ((i.op[source].regs->reg_flags & RegRex) != 0)
6895 i.rex |= REX_R;
6896 if ((i.op[source].regs->reg_flags & RegVRex) != 0)
6897 i.vrex |= REX_R;
6898 }
6899 if (flag_code != CODE_64BIT && (i.rex & REX_R))
6900 {
6901 if (!i.types[i.tm.operand_types[0].bitfield.regmem].bitfield.control)
6902 abort ();
6903 i.rex &= ~REX_R;
6904 add_prefix (LOCK_PREFIX_OPCODE);
6905 }
6906 }
6907 else
6908 { /* If it's not 2 reg operands... */
6909 unsigned int mem;
6910
6911 if (i.mem_operands)
6912 {
6913 unsigned int fake_zero_displacement = 0;
6914 unsigned int op;
6915
6916 for (op = 0; op < i.operands; op++)
6917 if (operand_type_check (i.types[op], anymem))
6918 break;
6919 gas_assert (op < i.operands);
6920
6921 if (i.tm.opcode_modifier.vecsib)
6922 {
6923 if (i.index_reg->reg_num == RegEiz
6924 || i.index_reg->reg_num == RegRiz)
6925 abort ();
6926
6927 i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
6928 if (!i.base_reg)
6929 {
6930 i.sib.base = NO_BASE_REGISTER;
6931 i.sib.scale = i.log2_scale_factor;
6932 i.types[op].bitfield.disp8 = 0;
6933 i.types[op].bitfield.disp16 = 0;
6934 i.types[op].bitfield.disp64 = 0;
6935 if (flag_code != CODE_64BIT || i.prefix[ADDR_PREFIX])
6936 {
6937 /* Must be 32 bit */
6938 i.types[op].bitfield.disp32 = 1;
6939 i.types[op].bitfield.disp32s = 0;
6940 }
6941 else
6942 {
6943 i.types[op].bitfield.disp32 = 0;
6944 i.types[op].bitfield.disp32s = 1;
6945 }
6946 }
6947 i.sib.index = i.index_reg->reg_num;
6948 if ((i.index_reg->reg_flags & RegRex) != 0)
6949 i.rex |= REX_X;
6950 if ((i.index_reg->reg_flags & RegVRex) != 0)
6951 i.vrex |= REX_X;
6952 }
6953
6954 default_seg = &ds;
6955
6956 if (i.base_reg == 0)
6957 {
6958 i.rm.mode = 0;
6959 if (!i.disp_operands)
6960 fake_zero_displacement = 1;
6961 if (i.index_reg == 0)
6962 {
6963 i386_operand_type newdisp;
6964
6965 gas_assert (!i.tm.opcode_modifier.vecsib);
6966 /* Operand is just <disp> */
6967 if (flag_code == CODE_64BIT)
6968 {
6969 /* 64bit mode overwrites the 32bit absolute
6970 addressing by RIP relative addressing and
6971 absolute addressing is encoded by one of the
6972 redundant SIB forms. */
6973 i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
6974 i.sib.base = NO_BASE_REGISTER;
6975 i.sib.index = NO_INDEX_REGISTER;
6976 newdisp = (!i.prefix[ADDR_PREFIX] ? disp32s : disp32);
6977 }
6978 else if ((flag_code == CODE_16BIT)
6979 ^ (i.prefix[ADDR_PREFIX] != 0))
6980 {
6981 i.rm.regmem = NO_BASE_REGISTER_16;
6982 newdisp = disp16;
6983 }
6984 else
6985 {
6986 i.rm.regmem = NO_BASE_REGISTER;
6987 newdisp = disp32;
6988 }
6989 i.types[op] = operand_type_and_not (i.types[op], anydisp);
6990 i.types[op] = operand_type_or (i.types[op], newdisp);
6991 }
6992 else if (!i.tm.opcode_modifier.vecsib)
6993 {
6994 /* !i.base_reg && i.index_reg */
6995 if (i.index_reg->reg_num == RegEiz
6996 || i.index_reg->reg_num == RegRiz)
6997 i.sib.index = NO_INDEX_REGISTER;
6998 else
6999 i.sib.index = i.index_reg->reg_num;
7000 i.sib.base = NO_BASE_REGISTER;
7001 i.sib.scale = i.log2_scale_factor;
7002 i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
7003 i.types[op].bitfield.disp8 = 0;
7004 i.types[op].bitfield.disp16 = 0;
7005 i.types[op].bitfield.disp64 = 0;
7006 if (flag_code != CODE_64BIT || i.prefix[ADDR_PREFIX])
7007 {
7008 /* Must be 32 bit */
7009 i.types[op].bitfield.disp32 = 1;
7010 i.types[op].bitfield.disp32s = 0;
7011 }
7012 else
7013 {
7014 i.types[op].bitfield.disp32 = 0;
7015 i.types[op].bitfield.disp32s = 1;
7016 }
7017 if ((i.index_reg->reg_flags & RegRex) != 0)
7018 i.rex |= REX_X;
7019 }
7020 }
7021 /* RIP addressing for 64bit mode. */
7022 else if (i.base_reg->reg_num == RegRip ||
7023 i.base_reg->reg_num == RegEip)
7024 {
7025 gas_assert (!i.tm.opcode_modifier.vecsib);
7026 i.rm.regmem = NO_BASE_REGISTER;
7027 i.types[op].bitfield.disp8 = 0;
7028 i.types[op].bitfield.disp16 = 0;
7029 i.types[op].bitfield.disp32 = 0;
7030 i.types[op].bitfield.disp32s = 1;
7031 i.types[op].bitfield.disp64 = 0;
7032 i.flags[op] |= Operand_PCrel;
7033 if (! i.disp_operands)
7034 fake_zero_displacement = 1;
7035 }
7036 else if (i.base_reg->reg_type.bitfield.word)
7037 {
7038 gas_assert (!i.tm.opcode_modifier.vecsib);
7039 switch (i.base_reg->reg_num)
7040 {
7041 case 3: /* (%bx) */
7042 if (i.index_reg == 0)
7043 i.rm.regmem = 7;
7044 else /* (%bx,%si) -> 0, or (%bx,%di) -> 1 */
7045 i.rm.regmem = i.index_reg->reg_num - 6;
7046 break;
7047 case 5: /* (%bp) */
7048 default_seg = &ss;
7049 if (i.index_reg == 0)
7050 {
7051 i.rm.regmem = 6;
7052 if (operand_type_check (i.types[op], disp) == 0)
7053 {
7054 /* fake (%bp) into 0(%bp) */
7055 i.types[op].bitfield.disp8 = 1;
7056 fake_zero_displacement = 1;
7057 }
7058 }
7059 else /* (%bp,%si) -> 2, or (%bp,%di) -> 3 */
7060 i.rm.regmem = i.index_reg->reg_num - 6 + 2;
7061 break;
7062 default: /* (%si) -> 4 or (%di) -> 5 */
7063 i.rm.regmem = i.base_reg->reg_num - 6 + 4;
7064 }
7065 i.rm.mode = mode_from_disp_size (i.types[op]);
7066 }
7067 else /* i.base_reg and 32/64 bit mode */
7068 {
7069 if (flag_code == CODE_64BIT
7070 && operand_type_check (i.types[op], disp))
7071 {
7072 i.types[op].bitfield.disp16 = 0;
7073 i.types[op].bitfield.disp64 = 0;
7074 if (i.prefix[ADDR_PREFIX] == 0)
7075 {
7076 i.types[op].bitfield.disp32 = 0;
7077 i.types[op].bitfield.disp32s = 1;
7078 }
7079 else
7080 {
7081 i.types[op].bitfield.disp32 = 1;
7082 i.types[op].bitfield.disp32s = 0;
7083 }
7084 }
7085
7086 if (!i.tm.opcode_modifier.vecsib)
7087 i.rm.regmem = i.base_reg->reg_num;
7088 if ((i.base_reg->reg_flags & RegRex) != 0)
7089 i.rex |= REX_B;
7090 i.sib.base = i.base_reg->reg_num;
7091 /* x86-64 ignores REX prefix bit here to avoid decoder
7092 complications. */
7093 if (!(i.base_reg->reg_flags & RegRex)
7094 && (i.base_reg->reg_num == EBP_REG_NUM
7095 || i.base_reg->reg_num == ESP_REG_NUM))
7096 default_seg = &ss;
7097 if (i.base_reg->reg_num == 5 && i.disp_operands == 0)
7098 {
7099 fake_zero_displacement = 1;
7100 i.types[op].bitfield.disp8 = 1;
7101 }
7102 i.sib.scale = i.log2_scale_factor;
7103 if (i.index_reg == 0)
7104 {
7105 gas_assert (!i.tm.opcode_modifier.vecsib);
7106 /* <disp>(%esp) becomes two byte modrm with no index
7107 register. We've already stored the code for esp
7108 in i.rm.regmem ie. ESCAPE_TO_TWO_BYTE_ADDRESSING.
7109 Any base register besides %esp will not use the
7110 extra modrm byte. */
7111 i.sib.index = NO_INDEX_REGISTER;
7112 }
7113 else if (!i.tm.opcode_modifier.vecsib)
7114 {
7115 if (i.index_reg->reg_num == RegEiz
7116 || i.index_reg->reg_num == RegRiz)
7117 i.sib.index = NO_INDEX_REGISTER;
7118 else
7119 i.sib.index = i.index_reg->reg_num;
7120 i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
7121 if ((i.index_reg->reg_flags & RegRex) != 0)
7122 i.rex |= REX_X;
7123 }
7124
7125 if (i.disp_operands
7126 && (i.reloc[op] == BFD_RELOC_386_TLS_DESC_CALL
7127 || i.reloc[op] == BFD_RELOC_X86_64_TLSDESC_CALL))
7128 i.rm.mode = 0;
7129 else
7130 {
7131 if (!fake_zero_displacement
7132 && !i.disp_operands
7133 && i.disp_encoding)
7134 {
7135 fake_zero_displacement = 1;
7136 if (i.disp_encoding == disp_encoding_8bit)
7137 i.types[op].bitfield.disp8 = 1;
7138 else
7139 i.types[op].bitfield.disp32 = 1;
7140 }
7141 i.rm.mode = mode_from_disp_size (i.types[op]);
7142 }
7143 }
7144
7145 if (fake_zero_displacement)
7146 {
7147 /* Fakes a zero displacement assuming that i.types[op]
7148 holds the correct displacement size. */
7149 expressionS *exp;
7150
7151 gas_assert (i.op[op].disps == 0);
7152 exp = &disp_expressions[i.disp_operands++];
7153 i.op[op].disps = exp;
7154 exp->X_op = O_constant;
7155 exp->X_add_number = 0;
7156 exp->X_add_symbol = (symbolS *) 0;
7157 exp->X_op_symbol = (symbolS *) 0;
7158 }
7159
7160 mem = op;
7161 }
7162 else
7163 mem = ~0;
7164
7165 if (i.tm.opcode_modifier.vexsources == XOP2SOURCES)
7166 {
7167 if (operand_type_check (i.types[0], imm))
7168 i.vex.register_specifier = NULL;
7169 else
7170 {
7171 /* VEX.vvvv encodes one of the sources when the first
7172 operand is not an immediate. */
7173 if (i.tm.opcode_modifier.vexw == VEXW0)
7174 i.vex.register_specifier = i.op[0].regs;
7175 else
7176 i.vex.register_specifier = i.op[1].regs;
7177 }
7178
7179 /* Destination is a XMM register encoded in the ModRM.reg
7180 and VEX.R bit. */
7181 i.rm.reg = i.op[2].regs->reg_num;
7182 if ((i.op[2].regs->reg_flags & RegRex) != 0)
7183 i.rex |= REX_R;
7184
7185 /* ModRM.rm and VEX.B encodes the other source. */
7186 if (!i.mem_operands)
7187 {
7188 i.rm.mode = 3;
7189
7190 if (i.tm.opcode_modifier.vexw == VEXW0)
7191 i.rm.regmem = i.op[1].regs->reg_num;
7192 else
7193 i.rm.regmem = i.op[0].regs->reg_num;
7194
7195 if ((i.op[1].regs->reg_flags & RegRex) != 0)
7196 i.rex |= REX_B;
7197 }
7198 }
7199 else if (i.tm.opcode_modifier.vexvvvv == VEXLWP)
7200 {
7201 i.vex.register_specifier = i.op[2].regs;
7202 if (!i.mem_operands)
7203 {
7204 i.rm.mode = 3;
7205 i.rm.regmem = i.op[1].regs->reg_num;
7206 if ((i.op[1].regs->reg_flags & RegRex) != 0)
7207 i.rex |= REX_B;
7208 }
7209 }
7210 /* Fill in i.rm.reg or i.rm.regmem field with register operand
7211 (if any) based on i.tm.extension_opcode. Again, we must be
7212 careful to make sure that segment/control/debug/test/MMX
7213 registers are coded into the i.rm.reg field. */
7214 else if (i.reg_operands)
7215 {
7216 unsigned int op;
7217 unsigned int vex_reg = ~0;
7218
7219 for (op = 0; op < i.operands; op++)
7220 if (i.types[op].bitfield.reg
7221 || i.types[op].bitfield.regmmx
7222 || i.types[op].bitfield.regsimd
7223 || i.types[op].bitfield.regbnd
7224 || i.types[op].bitfield.regmask
7225 || i.types[op].bitfield.sreg2
7226 || i.types[op].bitfield.sreg3
7227 || i.types[op].bitfield.control
7228 || i.types[op].bitfield.debug
7229 || i.types[op].bitfield.test)
7230 break;
7231
7232 if (vex_3_sources)
7233 op = dest;
7234 else if (i.tm.opcode_modifier.vexvvvv == VEXXDS)
7235 {
7236 /* For instructions with VexNDS, the register-only
7237 source operand is encoded in VEX prefix. */
7238 gas_assert (mem != (unsigned int) ~0);
7239
7240 if (op > mem)
7241 {
7242 vex_reg = op++;
7243 gas_assert (op < i.operands);
7244 }
7245 else
7246 {
7247 /* Check register-only source operand when two source
7248 operands are swapped. */
7249 if (!i.tm.operand_types[op].bitfield.baseindex
7250 && i.tm.operand_types[op + 1].bitfield.baseindex)
7251 {
7252 vex_reg = op;
7253 op += 2;
7254 gas_assert (mem == (vex_reg + 1)
7255 && op < i.operands);
7256 }
7257 else
7258 {
7259 vex_reg = op + 1;
7260 gas_assert (vex_reg < i.operands);
7261 }
7262 }
7263 }
7264 else if (i.tm.opcode_modifier.vexvvvv == VEXNDD)
7265 {
7266 /* For instructions with VexNDD, the register destination
7267 is encoded in VEX prefix. */
7268 if (i.mem_operands == 0)
7269 {
7270 /* There is no memory operand. */
7271 gas_assert ((op + 2) == i.operands);
7272 vex_reg = op + 1;
7273 }
7274 else
7275 {
7276 /* There are only 2 non-immediate operands. */
7277 gas_assert (op < i.imm_operands + 2
7278 && i.operands == i.imm_operands + 2);
7279 vex_reg = i.imm_operands + 1;
7280 }
7281 }
7282 else
7283 gas_assert (op < i.operands);
7284
7285 if (vex_reg != (unsigned int) ~0)
7286 {
7287 i386_operand_type *type = &i.tm.operand_types[vex_reg];
7288
7289 if ((!type->bitfield.reg
7290 || (!type->bitfield.dword && !type->bitfield.qword))
7291 && !type->bitfield.regsimd
7292 && !operand_type_equal (type, &regmask))
7293 abort ();
7294
7295 i.vex.register_specifier = i.op[vex_reg].regs;
7296 }
7297
7298 /* Don't set OP operand twice. */
7299 if (vex_reg != op)
7300 {
7301 /* If there is an extension opcode to put here, the
7302 register number must be put into the regmem field. */
7303 if (i.tm.extension_opcode != None)
7304 {
7305 i.rm.regmem = i.op[op].regs->reg_num;
7306 if ((i.op[op].regs->reg_flags & RegRex) != 0)
7307 i.rex |= REX_B;
7308 if ((i.op[op].regs->reg_flags & RegVRex) != 0)
7309 i.vrex |= REX_B;
7310 }
7311 else
7312 {
7313 i.rm.reg = i.op[op].regs->reg_num;
7314 if ((i.op[op].regs->reg_flags & RegRex) != 0)
7315 i.rex |= REX_R;
7316 if ((i.op[op].regs->reg_flags & RegVRex) != 0)
7317 i.vrex |= REX_R;
7318 }
7319 }
7320
7321 /* Now, if no memory operand has set i.rm.mode = 0, 1, 2 we
7322 must set it to 3 to indicate this is a register operand
7323 in the regmem field. */
7324 if (!i.mem_operands)
7325 i.rm.mode = 3;
7326 }
7327
7328 /* Fill in i.rm.reg field with extension opcode (if any). */
7329 if (i.tm.extension_opcode != None)
7330 i.rm.reg = i.tm.extension_opcode;
7331 }
7332 return default_seg;
7333 }
7334
7335 static void
7336 output_branch (void)
7337 {
7338 char *p;
7339 int size;
7340 int code16;
7341 int prefix;
7342 relax_substateT subtype;
7343 symbolS *sym;
7344 offsetT off;
7345
7346 code16 = flag_code == CODE_16BIT ? CODE16 : 0;
7347 size = i.disp_encoding == disp_encoding_32bit ? BIG : SMALL;
7348
7349 prefix = 0;
7350 if (i.prefix[DATA_PREFIX] != 0)
7351 {
7352 prefix = 1;
7353 i.prefixes -= 1;
7354 code16 ^= CODE16;
7355 }
7356 /* Pentium4 branch hints. */
7357 if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE /* not taken */
7358 || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE /* taken */)
7359 {
7360 prefix++;
7361 i.prefixes--;
7362 }
7363 if (i.prefix[REX_PREFIX] != 0)
7364 {
7365 prefix++;
7366 i.prefixes--;
7367 }
7368
7369 /* BND prefixed jump. */
7370 if (i.prefix[BND_PREFIX] != 0)
7371 {
7372 FRAG_APPEND_1_CHAR (i.prefix[BND_PREFIX]);
7373 i.prefixes -= 1;
7374 }
7375
7376 if (i.prefixes != 0 && !intel_syntax)
7377 as_warn (_("skipping prefixes on this instruction"));
7378
7379 /* It's always a symbol; End frag & setup for relax.
7380 Make sure there is enough room in this frag for the largest
7381 instruction we may generate in md_convert_frag. This is 2
7382 bytes for the opcode and room for the prefix and largest
7383 displacement. */
7384 frag_grow (prefix + 2 + 4);
7385 /* Prefix and 1 opcode byte go in fr_fix. */
7386 p = frag_more (prefix + 1);
7387 if (i.prefix[DATA_PREFIX] != 0)
7388 *p++ = DATA_PREFIX_OPCODE;
7389 if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE
7390 || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE)
7391 *p++ = i.prefix[SEG_PREFIX];
7392 if (i.prefix[REX_PREFIX] != 0)
7393 *p++ = i.prefix[REX_PREFIX];
7394 *p = i.tm.base_opcode;
7395
7396 if ((unsigned char) *p == JUMP_PC_RELATIVE)
7397 subtype = ENCODE_RELAX_STATE (UNCOND_JUMP, size);
7398 else if (cpu_arch_flags.bitfield.cpui386)
7399 subtype = ENCODE_RELAX_STATE (COND_JUMP, size);
7400 else
7401 subtype = ENCODE_RELAX_STATE (COND_JUMP86, size);
7402 subtype |= code16;
7403
7404 sym = i.op[0].disps->X_add_symbol;
7405 off = i.op[0].disps->X_add_number;
7406
7407 if (i.op[0].disps->X_op != O_constant
7408 && i.op[0].disps->X_op != O_symbol)
7409 {
7410 /* Handle complex expressions. */
7411 sym = make_expr_symbol (i.op[0].disps);
7412 off = 0;
7413 }
7414
7415 /* 1 possible extra opcode + 4 byte displacement go in var part.
7416 Pass reloc in fr_var. */
7417 frag_var (rs_machine_dependent, 5, i.reloc[0], subtype, sym, off, p);
7418 }
7419
7420 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7421 /* Return TRUE iff PLT32 relocation should be used for branching to
7422 symbol S. */
7423
7424 static bfd_boolean
7425 need_plt32_p (symbolS *s)
7426 {
7427 /* PLT32 relocation is ELF only. */
7428 if (!IS_ELF)
7429 return FALSE;
7430
7431 /* Since there is no need to prepare for PLT branch on x86-64, we
7432 can generate R_X86_64_PLT32, instead of R_X86_64_PC32, which can
7433 be used as a marker for 32-bit PC-relative branches. */
7434 if (!object_64bit)
7435 return FALSE;
7436
7437 /* Weak or undefined symbol need PLT32 relocation. */
7438 if (S_IS_WEAK (s) || !S_IS_DEFINED (s))
7439 return TRUE;
7440
7441 /* Non-global symbol doesn't need PLT32 relocation. */
7442 if (! S_IS_EXTERNAL (s))
7443 return FALSE;
7444
7445 /* Other global symbols need PLT32 relocation. NB: Symbol with
7446 non-default visibilities are treated as normal global symbol
7447 so that PLT32 relocation can be used as a marker for 32-bit
7448 PC-relative branches. It is useful for linker relaxation. */
7449 return TRUE;
7450 }
7451 #endif
7452
7453 static void
7454 output_jump (void)
7455 {
7456 char *p;
7457 int size;
7458 fixS *fixP;
7459 bfd_reloc_code_real_type jump_reloc = i.reloc[0];
7460
7461 if (i.tm.opcode_modifier.jumpbyte)
7462 {
7463 /* This is a loop or jecxz type instruction. */
7464 size = 1;
7465 if (i.prefix[ADDR_PREFIX] != 0)
7466 {
7467 FRAG_APPEND_1_CHAR (ADDR_PREFIX_OPCODE);
7468 i.prefixes -= 1;
7469 }
7470 /* Pentium4 branch hints. */
7471 if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE /* not taken */
7472 || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE /* taken */)
7473 {
7474 FRAG_APPEND_1_CHAR (i.prefix[SEG_PREFIX]);
7475 i.prefixes--;
7476 }
7477 }
7478 else
7479 {
7480 int code16;
7481
7482 code16 = 0;
7483 if (flag_code == CODE_16BIT)
7484 code16 = CODE16;
7485
7486 if (i.prefix[DATA_PREFIX] != 0)
7487 {
7488 FRAG_APPEND_1_CHAR (DATA_PREFIX_OPCODE);
7489 i.prefixes -= 1;
7490 code16 ^= CODE16;
7491 }
7492
7493 size = 4;
7494 if (code16)
7495 size = 2;
7496 }
7497
7498 if (i.prefix[REX_PREFIX] != 0)
7499 {
7500 FRAG_APPEND_1_CHAR (i.prefix[REX_PREFIX]);
7501 i.prefixes -= 1;
7502 }
7503
7504 /* BND prefixed jump. */
7505 if (i.prefix[BND_PREFIX] != 0)
7506 {
7507 FRAG_APPEND_1_CHAR (i.prefix[BND_PREFIX]);
7508 i.prefixes -= 1;
7509 }
7510
7511 if (i.prefixes != 0 && !intel_syntax)
7512 as_warn (_("skipping prefixes on this instruction"));
7513
7514 p = frag_more (i.tm.opcode_length + size);
7515 switch (i.tm.opcode_length)
7516 {
7517 case 2:
7518 *p++ = i.tm.base_opcode >> 8;
7519 /* Fall through. */
7520 case 1:
7521 *p++ = i.tm.base_opcode;
7522 break;
7523 default:
7524 abort ();
7525 }
7526
7527 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
7528 if (size == 4
7529 && jump_reloc == NO_RELOC
7530 && need_plt32_p (i.op[0].disps->X_add_symbol))
7531 jump_reloc = BFD_RELOC_X86_64_PLT32;
7532 #endif
7533
7534 jump_reloc = reloc (size, 1, 1, jump_reloc);
7535
7536 fixP = fix_new_exp (frag_now, p - frag_now->fr_literal, size,
7537 i.op[0].disps, 1, jump_reloc);
7538
7539 /* All jumps handled here are signed, but don't use a signed limit
7540 check for 32 and 16 bit jumps as we want to allow wrap around at
7541 4G and 64k respectively. */
7542 if (size == 1)
7543 fixP->fx_signed = 1;
7544 }
7545
7546 static void
7547 output_interseg_jump (void)
7548 {
7549 char *p;
7550 int size;
7551 int prefix;
7552 int code16;
7553
7554 code16 = 0;
7555 if (flag_code == CODE_16BIT)
7556 code16 = CODE16;
7557
7558 prefix = 0;
7559 if (i.prefix[DATA_PREFIX] != 0)
7560 {
7561 prefix = 1;
7562 i.prefixes -= 1;
7563 code16 ^= CODE16;
7564 }
7565 if (i.prefix[REX_PREFIX] != 0)
7566 {
7567 prefix++;
7568 i.prefixes -= 1;
7569 }
7570
7571 size = 4;
7572 if (code16)
7573 size = 2;
7574
7575 if (i.prefixes != 0 && !intel_syntax)
7576 as_warn (_("skipping prefixes on this instruction"));
7577
7578 /* 1 opcode; 2 segment; offset */
7579 p = frag_more (prefix + 1 + 2 + size);
7580
7581 if (i.prefix[DATA_PREFIX] != 0)
7582 *p++ = DATA_PREFIX_OPCODE;
7583
7584 if (i.prefix[REX_PREFIX] != 0)
7585 *p++ = i.prefix[REX_PREFIX];
7586
7587 *p++ = i.tm.base_opcode;
7588 if (i.op[1].imms->X_op == O_constant)
7589 {
7590 offsetT n = i.op[1].imms->X_add_number;
7591
7592 if (size == 2
7593 && !fits_in_unsigned_word (n)
7594 && !fits_in_signed_word (n))
7595 {
7596 as_bad (_("16-bit jump out of range"));
7597 return;
7598 }
7599 md_number_to_chars (p, n, size);
7600 }
7601 else
7602 fix_new_exp (frag_now, p - frag_now->fr_literal, size,
7603 i.op[1].imms, 0, reloc (size, 0, 0, i.reloc[1]));
7604 if (i.op[0].imms->X_op != O_constant)
7605 as_bad (_("can't handle non absolute segment in `%s'"),
7606 i.tm.name);
7607 md_number_to_chars (p + size, (valueT) i.op[0].imms->X_add_number, 2);
7608 }
7609
7610 static void
7611 output_insn (void)
7612 {
7613 fragS *insn_start_frag;
7614 offsetT insn_start_off;
7615
7616 /* Tie dwarf2 debug info to the address at the start of the insn.
7617 We can't do this after the insn has been output as the current
7618 frag may have been closed off. eg. by frag_var. */
7619 dwarf2_emit_insn (0);
7620
7621 insn_start_frag = frag_now;
7622 insn_start_off = frag_now_fix ();
7623
7624 /* Output jumps. */
7625 if (i.tm.opcode_modifier.jump)
7626 output_branch ();
7627 else if (i.tm.opcode_modifier.jumpbyte
7628 || i.tm.opcode_modifier.jumpdword)
7629 output_jump ();
7630 else if (i.tm.opcode_modifier.jumpintersegment)
7631 output_interseg_jump ();
7632 else
7633 {
7634 /* Output normal instructions here. */
7635 char *p;
7636 unsigned char *q;
7637 unsigned int j;
7638 unsigned int prefix;
7639
7640 if (avoid_fence
7641 && i.tm.base_opcode == 0xfae
7642 && i.operands == 1
7643 && i.imm_operands == 1
7644 && (i.op[0].imms->X_add_number == 0xe8
7645 || i.op[0].imms->X_add_number == 0xf0
7646 || i.op[0].imms->X_add_number == 0xf8))
7647 {
7648 /* Encode lfence, mfence, and sfence as
7649 f0 83 04 24 00 lock addl $0x0, (%{re}sp). */
7650 offsetT val = 0x240483f0ULL;
7651 p = frag_more (5);
7652 md_number_to_chars (p, val, 5);
7653 return;
7654 }
7655
7656 /* Some processors fail on LOCK prefix. This options makes
7657 assembler ignore LOCK prefix and serves as a workaround. */
7658 if (omit_lock_prefix)
7659 {
7660 if (i.tm.base_opcode == LOCK_PREFIX_OPCODE)
7661 return;
7662 i.prefix[LOCK_PREFIX] = 0;
7663 }
7664
7665 /* Since the VEX/EVEX prefix contains the implicit prefix, we
7666 don't need the explicit prefix. */
7667 if (!i.tm.opcode_modifier.vex && !i.tm.opcode_modifier.evex)
7668 {
7669 switch (i.tm.opcode_length)
7670 {
7671 case 3:
7672 if (i.tm.base_opcode & 0xff000000)
7673 {
7674 prefix = (i.tm.base_opcode >> 24) & 0xff;
7675 add_prefix (prefix);
7676 }
7677 break;
7678 case 2:
7679 if ((i.tm.base_opcode & 0xff0000) != 0)
7680 {
7681 prefix = (i.tm.base_opcode >> 16) & 0xff;
7682 if (!i.tm.cpu_flags.bitfield.cpupadlock
7683 || prefix != REPE_PREFIX_OPCODE
7684 || (i.prefix[REP_PREFIX] != REPE_PREFIX_OPCODE))
7685 add_prefix (prefix);
7686 }
7687 break;
7688 case 1:
7689 break;
7690 case 0:
7691 /* Check for pseudo prefixes. */
7692 as_bad_where (insn_start_frag->fr_file,
7693 insn_start_frag->fr_line,
7694 _("pseudo prefix without instruction"));
7695 return;
7696 default:
7697 abort ();
7698 }
7699
7700 #if defined (OBJ_MAYBE_ELF) || defined (OBJ_ELF)
7701 /* For x32, add a dummy REX_OPCODE prefix for mov/add with
7702 R_X86_64_GOTTPOFF relocation so that linker can safely
7703 perform IE->LE optimization. */
7704 if (x86_elf_abi == X86_64_X32_ABI
7705 && i.operands == 2
7706 && i.reloc[0] == BFD_RELOC_X86_64_GOTTPOFF
7707 && i.prefix[REX_PREFIX] == 0)
7708 add_prefix (REX_OPCODE);
7709 #endif
7710
7711 /* The prefix bytes. */
7712 for (j = ARRAY_SIZE (i.prefix), q = i.prefix; j > 0; j--, q++)
7713 if (*q)
7714 FRAG_APPEND_1_CHAR (*q);
7715 }
7716 else
7717 {
7718 for (j = 0, q = i.prefix; j < ARRAY_SIZE (i.prefix); j++, q++)
7719 if (*q)
7720 switch (j)
7721 {
7722 case REX_PREFIX:
7723 /* REX byte is encoded in VEX prefix. */
7724 break;
7725 case SEG_PREFIX:
7726 case ADDR_PREFIX:
7727 FRAG_APPEND_1_CHAR (*q);
7728 break;
7729 default:
7730 /* There should be no other prefixes for instructions
7731 with VEX prefix. */
7732 abort ();
7733 }
7734
7735 /* For EVEX instructions i.vrex should become 0 after
7736 build_evex_prefix. For VEX instructions upper 16 registers
7737 aren't available, so VREX should be 0. */
7738 if (i.vrex)
7739 abort ();
7740 /* Now the VEX prefix. */
7741 p = frag_more (i.vex.length);
7742 for (j = 0; j < i.vex.length; j++)
7743 p[j] = i.vex.bytes[j];
7744 }
7745
7746 /* Now the opcode; be careful about word order here! */
7747 if (i.tm.opcode_length == 1)
7748 {
7749 FRAG_APPEND_1_CHAR (i.tm.base_opcode);
7750 }
7751 else
7752 {
7753 switch (i.tm.opcode_length)
7754 {
7755 case 4:
7756 p = frag_more (4);
7757 *p++ = (i.tm.base_opcode >> 24) & 0xff;
7758 *p++ = (i.tm.base_opcode >> 16) & 0xff;
7759 break;
7760 case 3:
7761 p = frag_more (3);
7762 *p++ = (i.tm.base_opcode >> 16) & 0xff;
7763 break;
7764 case 2:
7765 p = frag_more (2);
7766 break;
7767 default:
7768 abort ();
7769 break;
7770 }
7771
7772 /* Put out high byte first: can't use md_number_to_chars! */
7773 *p++ = (i.tm.base_opcode >> 8) & 0xff;
7774 *p = i.tm.base_opcode & 0xff;
7775 }
7776
7777 /* Now the modrm byte and sib byte (if present). */
7778 if (i.tm.opcode_modifier.modrm)
7779 {
7780 FRAG_APPEND_1_CHAR ((i.rm.regmem << 0
7781 | i.rm.reg << 3
7782 | i.rm.mode << 6));
7783 /* If i.rm.regmem == ESP (4)
7784 && i.rm.mode != (Register mode)
7785 && not 16 bit
7786 ==> need second modrm byte. */
7787 if (i.rm.regmem == ESCAPE_TO_TWO_BYTE_ADDRESSING
7788 && i.rm.mode != 3
7789 && !(i.base_reg && i.base_reg->reg_type.bitfield.word))
7790 FRAG_APPEND_1_CHAR ((i.sib.base << 0
7791 | i.sib.index << 3
7792 | i.sib.scale << 6));
7793 }
7794
7795 if (i.disp_operands)
7796 output_disp (insn_start_frag, insn_start_off);
7797
7798 if (i.imm_operands)
7799 output_imm (insn_start_frag, insn_start_off);
7800 }
7801
7802 #ifdef DEBUG386
7803 if (flag_debug)
7804 {
7805 pi ("" /*line*/, &i);
7806 }
7807 #endif /* DEBUG386 */
7808 }
7809
7810 /* Return the size of the displacement operand N. */
7811
7812 static int
7813 disp_size (unsigned int n)
7814 {
7815 int size = 4;
7816
7817 if (i.types[n].bitfield.disp64)
7818 size = 8;
7819 else if (i.types[n].bitfield.disp8)
7820 size = 1;
7821 else if (i.types[n].bitfield.disp16)
7822 size = 2;
7823 return size;
7824 }
7825
7826 /* Return the size of the immediate operand N. */
7827
7828 static int
7829 imm_size (unsigned int n)
7830 {
7831 int size = 4;
7832 if (i.types[n].bitfield.imm64)
7833 size = 8;
7834 else if (i.types[n].bitfield.imm8 || i.types[n].bitfield.imm8s)
7835 size = 1;
7836 else if (i.types[n].bitfield.imm16)
7837 size = 2;
7838 return size;
7839 }
7840
7841 static void
7842 output_disp (fragS *insn_start_frag, offsetT insn_start_off)
7843 {
7844 char *p;
7845 unsigned int n;
7846
7847 for (n = 0; n < i.operands; n++)
7848 {
7849 if (operand_type_check (i.types[n], disp))
7850 {
7851 if (i.op[n].disps->X_op == O_constant)
7852 {
7853 int size = disp_size (n);
7854 offsetT val = i.op[n].disps->X_add_number;
7855
7856 val = offset_in_range (val >> i.memshift, size);
7857 p = frag_more (size);
7858 md_number_to_chars (p, val, size);
7859 }
7860 else
7861 {
7862 enum bfd_reloc_code_real reloc_type;
7863 int size = disp_size (n);
7864 int sign = i.types[n].bitfield.disp32s;
7865 int pcrel = (i.flags[n] & Operand_PCrel) != 0;
7866 fixS *fixP;
7867
7868 /* We can't have 8 bit displacement here. */
7869 gas_assert (!i.types[n].bitfield.disp8);
7870
7871 /* The PC relative address is computed relative
7872 to the instruction boundary, so in case immediate
7873 fields follows, we need to adjust the value. */
7874 if (pcrel && i.imm_operands)
7875 {
7876 unsigned int n1;
7877 int sz = 0;
7878
7879 for (n1 = 0; n1 < i.operands; n1++)
7880 if (operand_type_check (i.types[n1], imm))
7881 {
7882 /* Only one immediate is allowed for PC
7883 relative address. */
7884 gas_assert (sz == 0);
7885 sz = imm_size (n1);
7886 i.op[n].disps->X_add_number -= sz;
7887 }
7888 /* We should find the immediate. */
7889 gas_assert (sz != 0);
7890 }
7891
7892 p = frag_more (size);
7893 reloc_type = reloc (size, pcrel, sign, i.reloc[n]);
7894 if (GOT_symbol
7895 && GOT_symbol == i.op[n].disps->X_add_symbol
7896 && (((reloc_type == BFD_RELOC_32
7897 || reloc_type == BFD_RELOC_X86_64_32S
7898 || (reloc_type == BFD_RELOC_64
7899 && object_64bit))
7900 && (i.op[n].disps->X_op == O_symbol
7901 || (i.op[n].disps->X_op == O_add
7902 && ((symbol_get_value_expression
7903 (i.op[n].disps->X_op_symbol)->X_op)
7904 == O_subtract))))
7905 || reloc_type == BFD_RELOC_32_PCREL))
7906 {
7907 offsetT add;
7908
7909 if (insn_start_frag == frag_now)
7910 add = (p - frag_now->fr_literal) - insn_start_off;
7911 else
7912 {
7913 fragS *fr;
7914
7915 add = insn_start_frag->fr_fix - insn_start_off;
7916 for (fr = insn_start_frag->fr_next;
7917 fr && fr != frag_now; fr = fr->fr_next)
7918 add += fr->fr_fix;
7919 add += p - frag_now->fr_literal;
7920 }
7921
7922 if (!object_64bit)
7923 {
7924 reloc_type = BFD_RELOC_386_GOTPC;
7925 i.op[n].imms->X_add_number += add;
7926 }
7927 else if (reloc_type == BFD_RELOC_64)
7928 reloc_type = BFD_RELOC_X86_64_GOTPC64;
7929 else
7930 /* Don't do the adjustment for x86-64, as there
7931 the pcrel addressing is relative to the _next_
7932 insn, and that is taken care of in other code. */
7933 reloc_type = BFD_RELOC_X86_64_GOTPC32;
7934 }
7935 fixP = fix_new_exp (frag_now, p - frag_now->fr_literal,
7936 size, i.op[n].disps, pcrel,
7937 reloc_type);
7938 /* Check for "call/jmp *mem", "mov mem, %reg",
7939 "test %reg, mem" and "binop mem, %reg" where binop
7940 is one of adc, add, and, cmp, or, sbb, sub, xor
7941 instructions. Always generate R_386_GOT32X for
7942 "sym*GOT" operand in 32-bit mode. */
7943 if ((generate_relax_relocations
7944 || (!object_64bit
7945 && i.rm.mode == 0
7946 && i.rm.regmem == 5))
7947 && (i.rm.mode == 2
7948 || (i.rm.mode == 0 && i.rm.regmem == 5))
7949 && ((i.operands == 1
7950 && i.tm.base_opcode == 0xff
7951 && (i.rm.reg == 2 || i.rm.reg == 4))
7952 || (i.operands == 2
7953 && (i.tm.base_opcode == 0x8b
7954 || i.tm.base_opcode == 0x85
7955 || (i.tm.base_opcode & 0xc7) == 0x03))))
7956 {
7957 if (object_64bit)
7958 {
7959 fixP->fx_tcbit = i.rex != 0;
7960 if (i.base_reg
7961 && (i.base_reg->reg_num == RegRip
7962 || i.base_reg->reg_num == RegEip))
7963 fixP->fx_tcbit2 = 1;
7964 }
7965 else
7966 fixP->fx_tcbit2 = 1;
7967 }
7968 }
7969 }
7970 }
7971 }
7972
7973 static void
7974 output_imm (fragS *insn_start_frag, offsetT insn_start_off)
7975 {
7976 char *p;
7977 unsigned int n;
7978
7979 for (n = 0; n < i.operands; n++)
7980 {
7981 /* Skip SAE/RC Imm operand in EVEX. They are already handled. */
7982 if (i.rounding && (int) n == i.rounding->operand)
7983 continue;
7984
7985 if (operand_type_check (i.types[n], imm))
7986 {
7987 if (i.op[n].imms->X_op == O_constant)
7988 {
7989 int size = imm_size (n);
7990 offsetT val;
7991
7992 val = offset_in_range (i.op[n].imms->X_add_number,
7993 size);
7994 p = frag_more (size);
7995 md_number_to_chars (p, val, size);
7996 }
7997 else
7998 {
7999 /* Not absolute_section.
8000 Need a 32-bit fixup (don't support 8bit
8001 non-absolute imms). Try to support other
8002 sizes ... */
8003 enum bfd_reloc_code_real reloc_type;
8004 int size = imm_size (n);
8005 int sign;
8006
8007 if (i.types[n].bitfield.imm32s
8008 && (i.suffix == QWORD_MNEM_SUFFIX
8009 || (!i.suffix && i.tm.opcode_modifier.no_lsuf)))
8010 sign = 1;
8011 else
8012 sign = 0;
8013
8014 p = frag_more (size);
8015 reloc_type = reloc (size, 0, sign, i.reloc[n]);
8016
8017 /* This is tough to explain. We end up with this one if we
8018 * have operands that look like
8019 * "_GLOBAL_OFFSET_TABLE_+[.-.L284]". The goal here is to
8020 * obtain the absolute address of the GOT, and it is strongly
8021 * preferable from a performance point of view to avoid using
8022 * a runtime relocation for this. The actual sequence of
8023 * instructions often look something like:
8024 *
8025 * call .L66
8026 * .L66:
8027 * popl %ebx
8028 * addl $_GLOBAL_OFFSET_TABLE_+[.-.L66],%ebx
8029 *
8030 * The call and pop essentially return the absolute address
8031 * of the label .L66 and store it in %ebx. The linker itself
8032 * will ultimately change the first operand of the addl so
8033 * that %ebx points to the GOT, but to keep things simple, the
8034 * .o file must have this operand set so that it generates not
8035 * the absolute address of .L66, but the absolute address of
8036 * itself. This allows the linker itself simply treat a GOTPC
8037 * relocation as asking for a pcrel offset to the GOT to be
8038 * added in, and the addend of the relocation is stored in the
8039 * operand field for the instruction itself.
8040 *
8041 * Our job here is to fix the operand so that it would add
8042 * the correct offset so that %ebx would point to itself. The
8043 * thing that is tricky is that .-.L66 will point to the
8044 * beginning of the instruction, so we need to further modify
8045 * the operand so that it will point to itself. There are
8046 * other cases where you have something like:
8047 *
8048 * .long $_GLOBAL_OFFSET_TABLE_+[.-.L66]
8049 *
8050 * and here no correction would be required. Internally in
8051 * the assembler we treat operands of this form as not being
8052 * pcrel since the '.' is explicitly mentioned, and I wonder
8053 * whether it would simplify matters to do it this way. Who
8054 * knows. In earlier versions of the PIC patches, the
8055 * pcrel_adjust field was used to store the correction, but
8056 * since the expression is not pcrel, I felt it would be
8057 * confusing to do it this way. */
8058
8059 if ((reloc_type == BFD_RELOC_32
8060 || reloc_type == BFD_RELOC_X86_64_32S
8061 || reloc_type == BFD_RELOC_64)
8062 && GOT_symbol
8063 && GOT_symbol == i.op[n].imms->X_add_symbol
8064 && (i.op[n].imms->X_op == O_symbol
8065 || (i.op[n].imms->X_op == O_add
8066 && ((symbol_get_value_expression
8067 (i.op[n].imms->X_op_symbol)->X_op)
8068 == O_subtract))))
8069 {
8070 offsetT add;
8071
8072 if (insn_start_frag == frag_now)
8073 add = (p - frag_now->fr_literal) - insn_start_off;
8074 else
8075 {
8076 fragS *fr;
8077
8078 add = insn_start_frag->fr_fix - insn_start_off;
8079 for (fr = insn_start_frag->fr_next;
8080 fr && fr != frag_now; fr = fr->fr_next)
8081 add += fr->fr_fix;
8082 add += p - frag_now->fr_literal;
8083 }
8084
8085 if (!object_64bit)
8086 reloc_type = BFD_RELOC_386_GOTPC;
8087 else if (size == 4)
8088 reloc_type = BFD_RELOC_X86_64_GOTPC32;
8089 else if (size == 8)
8090 reloc_type = BFD_RELOC_X86_64_GOTPC64;
8091 i.op[n].imms->X_add_number += add;
8092 }
8093 fix_new_exp (frag_now, p - frag_now->fr_literal, size,
8094 i.op[n].imms, 0, reloc_type);
8095 }
8096 }
8097 }
8098 }
8099 \f
8100 /* x86_cons_fix_new is called via the expression parsing code when a
8101 reloc is needed. We use this hook to get the correct .got reloc. */
8102 static int cons_sign = -1;
8103
8104 void
8105 x86_cons_fix_new (fragS *frag, unsigned int off, unsigned int len,
8106 expressionS *exp, bfd_reloc_code_real_type r)
8107 {
8108 r = reloc (len, 0, cons_sign, r);
8109
8110 #ifdef TE_PE
8111 if (exp->X_op == O_secrel)
8112 {
8113 exp->X_op = O_symbol;
8114 r = BFD_RELOC_32_SECREL;
8115 }
8116 #endif
8117
8118 fix_new_exp (frag, off, len, exp, 0, r);
8119 }
8120
8121 /* Export the ABI address size for use by TC_ADDRESS_BYTES for the
8122 purpose of the `.dc.a' internal pseudo-op. */
8123
8124 int
8125 x86_address_bytes (void)
8126 {
8127 if ((stdoutput->arch_info->mach & bfd_mach_x64_32))
8128 return 4;
8129 return stdoutput->arch_info->bits_per_address / 8;
8130 }
8131
8132 #if !(defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) || defined (OBJ_MACH_O)) \
8133 || defined (LEX_AT)
8134 # define lex_got(reloc, adjust, types) NULL
8135 #else
8136 /* Parse operands of the form
8137 <symbol>@GOTOFF+<nnn>
8138 and similar .plt or .got references.
8139
8140 If we find one, set up the correct relocation in RELOC and copy the
8141 input string, minus the `@GOTOFF' into a malloc'd buffer for
8142 parsing by the calling routine. Return this buffer, and if ADJUST
8143 is non-null set it to the length of the string we removed from the
8144 input line. Otherwise return NULL. */
8145 static char *
8146 lex_got (enum bfd_reloc_code_real *rel,
8147 int *adjust,
8148 i386_operand_type *types)
8149 {
8150 /* Some of the relocations depend on the size of what field is to
8151 be relocated. But in our callers i386_immediate and i386_displacement
8152 we don't yet know the operand size (this will be set by insn
8153 matching). Hence we record the word32 relocation here,
8154 and adjust the reloc according to the real size in reloc(). */
8155 static const struct {
8156 const char *str;
8157 int len;
8158 const enum bfd_reloc_code_real rel[2];
8159 const i386_operand_type types64;
8160 } gotrel[] = {
8161 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8162 { STRING_COMMA_LEN ("SIZE"), { BFD_RELOC_SIZE32,
8163 BFD_RELOC_SIZE32 },
8164 OPERAND_TYPE_IMM32_64 },
8165 #endif
8166 { STRING_COMMA_LEN ("PLTOFF"), { _dummy_first_bfd_reloc_code_real,
8167 BFD_RELOC_X86_64_PLTOFF64 },
8168 OPERAND_TYPE_IMM64 },
8169 { STRING_COMMA_LEN ("PLT"), { BFD_RELOC_386_PLT32,
8170 BFD_RELOC_X86_64_PLT32 },
8171 OPERAND_TYPE_IMM32_32S_DISP32 },
8172 { STRING_COMMA_LEN ("GOTPLT"), { _dummy_first_bfd_reloc_code_real,
8173 BFD_RELOC_X86_64_GOTPLT64 },
8174 OPERAND_TYPE_IMM64_DISP64 },
8175 { STRING_COMMA_LEN ("GOTOFF"), { BFD_RELOC_386_GOTOFF,
8176 BFD_RELOC_X86_64_GOTOFF64 },
8177 OPERAND_TYPE_IMM64_DISP64 },
8178 { STRING_COMMA_LEN ("GOTPCREL"), { _dummy_first_bfd_reloc_code_real,
8179 BFD_RELOC_X86_64_GOTPCREL },
8180 OPERAND_TYPE_IMM32_32S_DISP32 },
8181 { STRING_COMMA_LEN ("TLSGD"), { BFD_RELOC_386_TLS_GD,
8182 BFD_RELOC_X86_64_TLSGD },
8183 OPERAND_TYPE_IMM32_32S_DISP32 },
8184 { STRING_COMMA_LEN ("TLSLDM"), { BFD_RELOC_386_TLS_LDM,
8185 _dummy_first_bfd_reloc_code_real },
8186 OPERAND_TYPE_NONE },
8187 { STRING_COMMA_LEN ("TLSLD"), { _dummy_first_bfd_reloc_code_real,
8188 BFD_RELOC_X86_64_TLSLD },
8189 OPERAND_TYPE_IMM32_32S_DISP32 },
8190 { STRING_COMMA_LEN ("GOTTPOFF"), { BFD_RELOC_386_TLS_IE_32,
8191 BFD_RELOC_X86_64_GOTTPOFF },
8192 OPERAND_TYPE_IMM32_32S_DISP32 },
8193 { STRING_COMMA_LEN ("TPOFF"), { BFD_RELOC_386_TLS_LE_32,
8194 BFD_RELOC_X86_64_TPOFF32 },
8195 OPERAND_TYPE_IMM32_32S_64_DISP32_64 },
8196 { STRING_COMMA_LEN ("NTPOFF"), { BFD_RELOC_386_TLS_LE,
8197 _dummy_first_bfd_reloc_code_real },
8198 OPERAND_TYPE_NONE },
8199 { STRING_COMMA_LEN ("DTPOFF"), { BFD_RELOC_386_TLS_LDO_32,
8200 BFD_RELOC_X86_64_DTPOFF32 },
8201 OPERAND_TYPE_IMM32_32S_64_DISP32_64 },
8202 { STRING_COMMA_LEN ("GOTNTPOFF"),{ BFD_RELOC_386_TLS_GOTIE,
8203 _dummy_first_bfd_reloc_code_real },
8204 OPERAND_TYPE_NONE },
8205 { STRING_COMMA_LEN ("INDNTPOFF"),{ BFD_RELOC_386_TLS_IE,
8206 _dummy_first_bfd_reloc_code_real },
8207 OPERAND_TYPE_NONE },
8208 { STRING_COMMA_LEN ("GOT"), { BFD_RELOC_386_GOT32,
8209 BFD_RELOC_X86_64_GOT32 },
8210 OPERAND_TYPE_IMM32_32S_64_DISP32 },
8211 { STRING_COMMA_LEN ("TLSDESC"), { BFD_RELOC_386_TLS_GOTDESC,
8212 BFD_RELOC_X86_64_GOTPC32_TLSDESC },
8213 OPERAND_TYPE_IMM32_32S_DISP32 },
8214 { STRING_COMMA_LEN ("TLSCALL"), { BFD_RELOC_386_TLS_DESC_CALL,
8215 BFD_RELOC_X86_64_TLSDESC_CALL },
8216 OPERAND_TYPE_IMM32_32S_DISP32 },
8217 };
8218 char *cp;
8219 unsigned int j;
8220
8221 #if defined (OBJ_MAYBE_ELF)
8222 if (!IS_ELF)
8223 return NULL;
8224 #endif
8225
8226 for (cp = input_line_pointer; *cp != '@'; cp++)
8227 if (is_end_of_line[(unsigned char) *cp] || *cp == ',')
8228 return NULL;
8229
8230 for (j = 0; j < ARRAY_SIZE (gotrel); j++)
8231 {
8232 int len = gotrel[j].len;
8233 if (strncasecmp (cp + 1, gotrel[j].str, len) == 0)
8234 {
8235 if (gotrel[j].rel[object_64bit] != 0)
8236 {
8237 int first, second;
8238 char *tmpbuf, *past_reloc;
8239
8240 *rel = gotrel[j].rel[object_64bit];
8241
8242 if (types)
8243 {
8244 if (flag_code != CODE_64BIT)
8245 {
8246 types->bitfield.imm32 = 1;
8247 types->bitfield.disp32 = 1;
8248 }
8249 else
8250 *types = gotrel[j].types64;
8251 }
8252
8253 if (j != 0 && GOT_symbol == NULL)
8254 GOT_symbol = symbol_find_or_make (GLOBAL_OFFSET_TABLE_NAME);
8255
8256 /* The length of the first part of our input line. */
8257 first = cp - input_line_pointer;
8258
8259 /* The second part goes from after the reloc token until
8260 (and including) an end_of_line char or comma. */
8261 past_reloc = cp + 1 + len;
8262 cp = past_reloc;
8263 while (!is_end_of_line[(unsigned char) *cp] && *cp != ',')
8264 ++cp;
8265 second = cp + 1 - past_reloc;
8266
8267 /* Allocate and copy string. The trailing NUL shouldn't
8268 be necessary, but be safe. */
8269 tmpbuf = XNEWVEC (char, first + second + 2);
8270 memcpy (tmpbuf, input_line_pointer, first);
8271 if (second != 0 && *past_reloc != ' ')
8272 /* Replace the relocation token with ' ', so that
8273 errors like foo@GOTOFF1 will be detected. */
8274 tmpbuf[first++] = ' ';
8275 else
8276 /* Increment length by 1 if the relocation token is
8277 removed. */
8278 len++;
8279 if (adjust)
8280 *adjust = len;
8281 memcpy (tmpbuf + first, past_reloc, second);
8282 tmpbuf[first + second] = '\0';
8283 return tmpbuf;
8284 }
8285
8286 as_bad (_("@%s reloc is not supported with %d-bit output format"),
8287 gotrel[j].str, 1 << (5 + object_64bit));
8288 return NULL;
8289 }
8290 }
8291
8292 /* Might be a symbol version string. Don't as_bad here. */
8293 return NULL;
8294 }
8295 #endif
8296
8297 #ifdef TE_PE
8298 #ifdef lex_got
8299 #undef lex_got
8300 #endif
8301 /* Parse operands of the form
8302 <symbol>@SECREL32+<nnn>
8303
8304 If we find one, set up the correct relocation in RELOC and copy the
8305 input string, minus the `@SECREL32' into a malloc'd buffer for
8306 parsing by the calling routine. Return this buffer, and if ADJUST
8307 is non-null set it to the length of the string we removed from the
8308 input line. Otherwise return NULL.
8309
8310 This function is copied from the ELF version above adjusted for PE targets. */
8311
8312 static char *
8313 lex_got (enum bfd_reloc_code_real *rel ATTRIBUTE_UNUSED,
8314 int *adjust ATTRIBUTE_UNUSED,
8315 i386_operand_type *types)
8316 {
8317 static const struct
8318 {
8319 const char *str;
8320 int len;
8321 const enum bfd_reloc_code_real rel[2];
8322 const i386_operand_type types64;
8323 }
8324 gotrel[] =
8325 {
8326 { STRING_COMMA_LEN ("SECREL32"), { BFD_RELOC_32_SECREL,
8327 BFD_RELOC_32_SECREL },
8328 OPERAND_TYPE_IMM32_32S_64_DISP32_64 },
8329 };
8330
8331 char *cp;
8332 unsigned j;
8333
8334 for (cp = input_line_pointer; *cp != '@'; cp++)
8335 if (is_end_of_line[(unsigned char) *cp] || *cp == ',')
8336 return NULL;
8337
8338 for (j = 0; j < ARRAY_SIZE (gotrel); j++)
8339 {
8340 int len = gotrel[j].len;
8341
8342 if (strncasecmp (cp + 1, gotrel[j].str, len) == 0)
8343 {
8344 if (gotrel[j].rel[object_64bit] != 0)
8345 {
8346 int first, second;
8347 char *tmpbuf, *past_reloc;
8348
8349 *rel = gotrel[j].rel[object_64bit];
8350 if (adjust)
8351 *adjust = len;
8352
8353 if (types)
8354 {
8355 if (flag_code != CODE_64BIT)
8356 {
8357 types->bitfield.imm32 = 1;
8358 types->bitfield.disp32 = 1;
8359 }
8360 else
8361 *types = gotrel[j].types64;
8362 }
8363
8364 /* The length of the first part of our input line. */
8365 first = cp - input_line_pointer;
8366
8367 /* The second part goes from after the reloc token until
8368 (and including) an end_of_line char or comma. */
8369 past_reloc = cp + 1 + len;
8370 cp = past_reloc;
8371 while (!is_end_of_line[(unsigned char) *cp] && *cp != ',')
8372 ++cp;
8373 second = cp + 1 - past_reloc;
8374
8375 /* Allocate and copy string. The trailing NUL shouldn't
8376 be necessary, but be safe. */
8377 tmpbuf = XNEWVEC (char, first + second + 2);
8378 memcpy (tmpbuf, input_line_pointer, first);
8379 if (second != 0 && *past_reloc != ' ')
8380 /* Replace the relocation token with ' ', so that
8381 errors like foo@SECLREL321 will be detected. */
8382 tmpbuf[first++] = ' ';
8383 memcpy (tmpbuf + first, past_reloc, second);
8384 tmpbuf[first + second] = '\0';
8385 return tmpbuf;
8386 }
8387
8388 as_bad (_("@%s reloc is not supported with %d-bit output format"),
8389 gotrel[j].str, 1 << (5 + object_64bit));
8390 return NULL;
8391 }
8392 }
8393
8394 /* Might be a symbol version string. Don't as_bad here. */
8395 return NULL;
8396 }
8397
8398 #endif /* TE_PE */
8399
8400 bfd_reloc_code_real_type
8401 x86_cons (expressionS *exp, int size)
8402 {
8403 bfd_reloc_code_real_type got_reloc = NO_RELOC;
8404
8405 intel_syntax = -intel_syntax;
8406
8407 exp->X_md = 0;
8408 if (size == 4 || (object_64bit && size == 8))
8409 {
8410 /* Handle @GOTOFF and the like in an expression. */
8411 char *save;
8412 char *gotfree_input_line;
8413 int adjust = 0;
8414
8415 save = input_line_pointer;
8416 gotfree_input_line = lex_got (&got_reloc, &adjust, NULL);
8417 if (gotfree_input_line)
8418 input_line_pointer = gotfree_input_line;
8419
8420 expression (exp);
8421
8422 if (gotfree_input_line)
8423 {
8424 /* expression () has merrily parsed up to the end of line,
8425 or a comma - in the wrong buffer. Transfer how far
8426 input_line_pointer has moved to the right buffer. */
8427 input_line_pointer = (save
8428 + (input_line_pointer - gotfree_input_line)
8429 + adjust);
8430 free (gotfree_input_line);
8431 if (exp->X_op == O_constant
8432 || exp->X_op == O_absent
8433 || exp->X_op == O_illegal
8434 || exp->X_op == O_register
8435 || exp->X_op == O_big)
8436 {
8437 char c = *input_line_pointer;
8438 *input_line_pointer = 0;
8439 as_bad (_("missing or invalid expression `%s'"), save);
8440 *input_line_pointer = c;
8441 }
8442 }
8443 }
8444 else
8445 expression (exp);
8446
8447 intel_syntax = -intel_syntax;
8448
8449 if (intel_syntax)
8450 i386_intel_simplify (exp);
8451
8452 return got_reloc;
8453 }
8454
8455 static void
8456 signed_cons (int size)
8457 {
8458 if (flag_code == CODE_64BIT)
8459 cons_sign = 1;
8460 cons (size);
8461 cons_sign = -1;
8462 }
8463
8464 #ifdef TE_PE
8465 static void
8466 pe_directive_secrel (int dummy ATTRIBUTE_UNUSED)
8467 {
8468 expressionS exp;
8469
8470 do
8471 {
8472 expression (&exp);
8473 if (exp.X_op == O_symbol)
8474 exp.X_op = O_secrel;
8475
8476 emit_expr (&exp, 4);
8477 }
8478 while (*input_line_pointer++ == ',');
8479
8480 input_line_pointer--;
8481 demand_empty_rest_of_line ();
8482 }
8483 #endif
8484
8485 /* Handle Vector operations. */
8486
8487 static char *
8488 check_VecOperations (char *op_string, char *op_end)
8489 {
8490 const reg_entry *mask;
8491 const char *saved;
8492 char *end_op;
8493
8494 while (*op_string
8495 && (op_end == NULL || op_string < op_end))
8496 {
8497 saved = op_string;
8498 if (*op_string == '{')
8499 {
8500 op_string++;
8501
8502 /* Check broadcasts. */
8503 if (strncmp (op_string, "1to", 3) == 0)
8504 {
8505 int bcst_type;
8506
8507 if (i.broadcast)
8508 goto duplicated_vec_op;
8509
8510 op_string += 3;
8511 if (*op_string == '8')
8512 bcst_type = 8;
8513 else if (*op_string == '4')
8514 bcst_type = 4;
8515 else if (*op_string == '2')
8516 bcst_type = 2;
8517 else if (*op_string == '1'
8518 && *(op_string+1) == '6')
8519 {
8520 bcst_type = 16;
8521 op_string++;
8522 }
8523 else
8524 {
8525 as_bad (_("Unsupported broadcast: `%s'"), saved);
8526 return NULL;
8527 }
8528 op_string++;
8529
8530 broadcast_op.type = bcst_type;
8531 broadcast_op.operand = this_operand;
8532 i.broadcast = &broadcast_op;
8533 }
8534 /* Check masking operation. */
8535 else if ((mask = parse_register (op_string, &end_op)) != NULL)
8536 {
8537 /* k0 can't be used for write mask. */
8538 if (!mask->reg_type.bitfield.regmask || mask->reg_num == 0)
8539 {
8540 as_bad (_("`%s%s' can't be used for write mask"),
8541 register_prefix, mask->reg_name);
8542 return NULL;
8543 }
8544
8545 if (!i.mask)
8546 {
8547 mask_op.mask = mask;
8548 mask_op.zeroing = 0;
8549 mask_op.operand = this_operand;
8550 i.mask = &mask_op;
8551 }
8552 else
8553 {
8554 if (i.mask->mask)
8555 goto duplicated_vec_op;
8556
8557 i.mask->mask = mask;
8558
8559 /* Only "{z}" is allowed here. No need to check
8560 zeroing mask explicitly. */
8561 if (i.mask->operand != this_operand)
8562 {
8563 as_bad (_("invalid write mask `%s'"), saved);
8564 return NULL;
8565 }
8566 }
8567
8568 op_string = end_op;
8569 }
8570 /* Check zeroing-flag for masking operation. */
8571 else if (*op_string == 'z')
8572 {
8573 if (!i.mask)
8574 {
8575 mask_op.mask = NULL;
8576 mask_op.zeroing = 1;
8577 mask_op.operand = this_operand;
8578 i.mask = &mask_op;
8579 }
8580 else
8581 {
8582 if (i.mask->zeroing)
8583 {
8584 duplicated_vec_op:
8585 as_bad (_("duplicated `%s'"), saved);
8586 return NULL;
8587 }
8588
8589 i.mask->zeroing = 1;
8590
8591 /* Only "{%k}" is allowed here. No need to check mask
8592 register explicitly. */
8593 if (i.mask->operand != this_operand)
8594 {
8595 as_bad (_("invalid zeroing-masking `%s'"),
8596 saved);
8597 return NULL;
8598 }
8599 }
8600
8601 op_string++;
8602 }
8603 else
8604 goto unknown_vec_op;
8605
8606 if (*op_string != '}')
8607 {
8608 as_bad (_("missing `}' in `%s'"), saved);
8609 return NULL;
8610 }
8611 op_string++;
8612
8613 /* Strip whitespace since the addition of pseudo prefixes
8614 changed how the scrubber treats '{'. */
8615 if (is_space_char (*op_string))
8616 ++op_string;
8617
8618 continue;
8619 }
8620 unknown_vec_op:
8621 /* We don't know this one. */
8622 as_bad (_("unknown vector operation: `%s'"), saved);
8623 return NULL;
8624 }
8625
8626 if (i.mask && i.mask->zeroing && !i.mask->mask)
8627 {
8628 as_bad (_("zeroing-masking only allowed with write mask"));
8629 return NULL;
8630 }
8631
8632 return op_string;
8633 }
8634
8635 static int
8636 i386_immediate (char *imm_start)
8637 {
8638 char *save_input_line_pointer;
8639 char *gotfree_input_line;
8640 segT exp_seg = 0;
8641 expressionS *exp;
8642 i386_operand_type types;
8643
8644 operand_type_set (&types, ~0);
8645
8646 if (i.imm_operands == MAX_IMMEDIATE_OPERANDS)
8647 {
8648 as_bad (_("at most %d immediate operands are allowed"),
8649 MAX_IMMEDIATE_OPERANDS);
8650 return 0;
8651 }
8652
8653 exp = &im_expressions[i.imm_operands++];
8654 i.op[this_operand].imms = exp;
8655
8656 if (is_space_char (*imm_start))
8657 ++imm_start;
8658
8659 save_input_line_pointer = input_line_pointer;
8660 input_line_pointer = imm_start;
8661
8662 gotfree_input_line = lex_got (&i.reloc[this_operand], NULL, &types);
8663 if (gotfree_input_line)
8664 input_line_pointer = gotfree_input_line;
8665
8666 exp_seg = expression (exp);
8667
8668 SKIP_WHITESPACE ();
8669
8670 /* Handle vector operations. */
8671 if (*input_line_pointer == '{')
8672 {
8673 input_line_pointer = check_VecOperations (input_line_pointer,
8674 NULL);
8675 if (input_line_pointer == NULL)
8676 return 0;
8677 }
8678
8679 if (*input_line_pointer)
8680 as_bad (_("junk `%s' after expression"), input_line_pointer);
8681
8682 input_line_pointer = save_input_line_pointer;
8683 if (gotfree_input_line)
8684 {
8685 free (gotfree_input_line);
8686
8687 if (exp->X_op == O_constant || exp->X_op == O_register)
8688 exp->X_op = O_illegal;
8689 }
8690
8691 return i386_finalize_immediate (exp_seg, exp, types, imm_start);
8692 }
8693
8694 static int
8695 i386_finalize_immediate (segT exp_seg ATTRIBUTE_UNUSED, expressionS *exp,
8696 i386_operand_type types, const char *imm_start)
8697 {
8698 if (exp->X_op == O_absent || exp->X_op == O_illegal || exp->X_op == O_big)
8699 {
8700 if (imm_start)
8701 as_bad (_("missing or invalid immediate expression `%s'"),
8702 imm_start);
8703 return 0;
8704 }
8705 else if (exp->X_op == O_constant)
8706 {
8707 /* Size it properly later. */
8708 i.types[this_operand].bitfield.imm64 = 1;
8709 /* If not 64bit, sign extend val. */
8710 if (flag_code != CODE_64BIT
8711 && (exp->X_add_number & ~(((addressT) 2 << 31) - 1)) == 0)
8712 exp->X_add_number
8713 = (exp->X_add_number ^ ((addressT) 1 << 31)) - ((addressT) 1 << 31);
8714 }
8715 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
8716 else if (OUTPUT_FLAVOR == bfd_target_aout_flavour
8717 && exp_seg != absolute_section
8718 && exp_seg != text_section
8719 && exp_seg != data_section
8720 && exp_seg != bss_section
8721 && exp_seg != undefined_section
8722 && !bfd_is_com_section (exp_seg))
8723 {
8724 as_bad (_("unimplemented segment %s in operand"), exp_seg->name);
8725 return 0;
8726 }
8727 #endif
8728 else if (!intel_syntax && exp_seg == reg_section)
8729 {
8730 if (imm_start)
8731 as_bad (_("illegal immediate register operand %s"), imm_start);
8732 return 0;
8733 }
8734 else
8735 {
8736 /* This is an address. The size of the address will be
8737 determined later, depending on destination register,
8738 suffix, or the default for the section. */
8739 i.types[this_operand].bitfield.imm8 = 1;
8740 i.types[this_operand].bitfield.imm16 = 1;
8741 i.types[this_operand].bitfield.imm32 = 1;
8742 i.types[this_operand].bitfield.imm32s = 1;
8743 i.types[this_operand].bitfield.imm64 = 1;
8744 i.types[this_operand] = operand_type_and (i.types[this_operand],
8745 types);
8746 }
8747
8748 return 1;
8749 }
8750
8751 static char *
8752 i386_scale (char *scale)
8753 {
8754 offsetT val;
8755 char *save = input_line_pointer;
8756
8757 input_line_pointer = scale;
8758 val = get_absolute_expression ();
8759
8760 switch (val)
8761 {
8762 case 1:
8763 i.log2_scale_factor = 0;
8764 break;
8765 case 2:
8766 i.log2_scale_factor = 1;
8767 break;
8768 case 4:
8769 i.log2_scale_factor = 2;
8770 break;
8771 case 8:
8772 i.log2_scale_factor = 3;
8773 break;
8774 default:
8775 {
8776 char sep = *input_line_pointer;
8777
8778 *input_line_pointer = '\0';
8779 as_bad (_("expecting scale factor of 1, 2, 4, or 8: got `%s'"),
8780 scale);
8781 *input_line_pointer = sep;
8782 input_line_pointer = save;
8783 return NULL;
8784 }
8785 }
8786 if (i.log2_scale_factor != 0 && i.index_reg == 0)
8787 {
8788 as_warn (_("scale factor of %d without an index register"),
8789 1 << i.log2_scale_factor);
8790 i.log2_scale_factor = 0;
8791 }
8792 scale = input_line_pointer;
8793 input_line_pointer = save;
8794 return scale;
8795 }
8796
8797 static int
8798 i386_displacement (char *disp_start, char *disp_end)
8799 {
8800 expressionS *exp;
8801 segT exp_seg = 0;
8802 char *save_input_line_pointer;
8803 char *gotfree_input_line;
8804 int override;
8805 i386_operand_type bigdisp, types = anydisp;
8806 int ret;
8807
8808 if (i.disp_operands == MAX_MEMORY_OPERANDS)
8809 {
8810 as_bad (_("at most %d displacement operands are allowed"),
8811 MAX_MEMORY_OPERANDS);
8812 return 0;
8813 }
8814
8815 operand_type_set (&bigdisp, 0);
8816 if ((i.types[this_operand].bitfield.jumpabsolute)
8817 || (!current_templates->start->opcode_modifier.jump
8818 && !current_templates->start->opcode_modifier.jumpdword))
8819 {
8820 bigdisp.bitfield.disp32 = 1;
8821 override = (i.prefix[ADDR_PREFIX] != 0);
8822 if (flag_code == CODE_64BIT)
8823 {
8824 if (!override)
8825 {
8826 bigdisp.bitfield.disp32s = 1;
8827 bigdisp.bitfield.disp64 = 1;
8828 }
8829 }
8830 else if ((flag_code == CODE_16BIT) ^ override)
8831 {
8832 bigdisp.bitfield.disp32 = 0;
8833 bigdisp.bitfield.disp16 = 1;
8834 }
8835 }
8836 else
8837 {
8838 /* For PC-relative branches, the width of the displacement
8839 is dependent upon data size, not address size. */
8840 override = (i.prefix[DATA_PREFIX] != 0);
8841 if (flag_code == CODE_64BIT)
8842 {
8843 if (override || i.suffix == WORD_MNEM_SUFFIX)
8844 bigdisp.bitfield.disp16 = 1;
8845 else
8846 {
8847 bigdisp.bitfield.disp32 = 1;
8848 bigdisp.bitfield.disp32s = 1;
8849 }
8850 }
8851 else
8852 {
8853 if (!override)
8854 override = (i.suffix == (flag_code != CODE_16BIT
8855 ? WORD_MNEM_SUFFIX
8856 : LONG_MNEM_SUFFIX));
8857 bigdisp.bitfield.disp32 = 1;
8858 if ((flag_code == CODE_16BIT) ^ override)
8859 {
8860 bigdisp.bitfield.disp32 = 0;
8861 bigdisp.bitfield.disp16 = 1;
8862 }
8863 }
8864 }
8865 i.types[this_operand] = operand_type_or (i.types[this_operand],
8866 bigdisp);
8867
8868 exp = &disp_expressions[i.disp_operands];
8869 i.op[this_operand].disps = exp;
8870 i.disp_operands++;
8871 save_input_line_pointer = input_line_pointer;
8872 input_line_pointer = disp_start;
8873 END_STRING_AND_SAVE (disp_end);
8874
8875 #ifndef GCC_ASM_O_HACK
8876 #define GCC_ASM_O_HACK 0
8877 #endif
8878 #if GCC_ASM_O_HACK
8879 END_STRING_AND_SAVE (disp_end + 1);
8880 if (i.types[this_operand].bitfield.baseIndex
8881 && displacement_string_end[-1] == '+')
8882 {
8883 /* This hack is to avoid a warning when using the "o"
8884 constraint within gcc asm statements.
8885 For instance:
8886
8887 #define _set_tssldt_desc(n,addr,limit,type) \
8888 __asm__ __volatile__ ( \
8889 "movw %w2,%0\n\t" \
8890 "movw %w1,2+%0\n\t" \
8891 "rorl $16,%1\n\t" \
8892 "movb %b1,4+%0\n\t" \
8893 "movb %4,5+%0\n\t" \
8894 "movb $0,6+%0\n\t" \
8895 "movb %h1,7+%0\n\t" \
8896 "rorl $16,%1" \
8897 : "=o"(*(n)) : "q" (addr), "ri"(limit), "i"(type))
8898
8899 This works great except that the output assembler ends
8900 up looking a bit weird if it turns out that there is
8901 no offset. You end up producing code that looks like:
8902
8903 #APP
8904 movw $235,(%eax)
8905 movw %dx,2+(%eax)
8906 rorl $16,%edx
8907 movb %dl,4+(%eax)
8908 movb $137,5+(%eax)
8909 movb $0,6+(%eax)
8910 movb %dh,7+(%eax)
8911 rorl $16,%edx
8912 #NO_APP
8913
8914 So here we provide the missing zero. */
8915
8916 *displacement_string_end = '0';
8917 }
8918 #endif
8919 gotfree_input_line = lex_got (&i.reloc[this_operand], NULL, &types);
8920 if (gotfree_input_line)
8921 input_line_pointer = gotfree_input_line;
8922
8923 exp_seg = expression (exp);
8924
8925 SKIP_WHITESPACE ();
8926 if (*input_line_pointer)
8927 as_bad (_("junk `%s' after expression"), input_line_pointer);
8928 #if GCC_ASM_O_HACK
8929 RESTORE_END_STRING (disp_end + 1);
8930 #endif
8931 input_line_pointer = save_input_line_pointer;
8932 if (gotfree_input_line)
8933 {
8934 free (gotfree_input_line);
8935
8936 if (exp->X_op == O_constant || exp->X_op == O_register)
8937 exp->X_op = O_illegal;
8938 }
8939
8940 ret = i386_finalize_displacement (exp_seg, exp, types, disp_start);
8941
8942 RESTORE_END_STRING (disp_end);
8943
8944 return ret;
8945 }
8946
8947 static int
8948 i386_finalize_displacement (segT exp_seg ATTRIBUTE_UNUSED, expressionS *exp,
8949 i386_operand_type types, const char *disp_start)
8950 {
8951 i386_operand_type bigdisp;
8952 int ret = 1;
8953
8954 /* We do this to make sure that the section symbol is in
8955 the symbol table. We will ultimately change the relocation
8956 to be relative to the beginning of the section. */
8957 if (i.reloc[this_operand] == BFD_RELOC_386_GOTOFF
8958 || i.reloc[this_operand] == BFD_RELOC_X86_64_GOTPCREL
8959 || i.reloc[this_operand] == BFD_RELOC_X86_64_GOTOFF64)
8960 {
8961 if (exp->X_op != O_symbol)
8962 goto inv_disp;
8963
8964 if (S_IS_LOCAL (exp->X_add_symbol)
8965 && S_GET_SEGMENT (exp->X_add_symbol) != undefined_section
8966 && S_GET_SEGMENT (exp->X_add_symbol) != expr_section)
8967 section_symbol (S_GET_SEGMENT (exp->X_add_symbol));
8968 exp->X_op = O_subtract;
8969 exp->X_op_symbol = GOT_symbol;
8970 if (i.reloc[this_operand] == BFD_RELOC_X86_64_GOTPCREL)
8971 i.reloc[this_operand] = BFD_RELOC_32_PCREL;
8972 else if (i.reloc[this_operand] == BFD_RELOC_X86_64_GOTOFF64)
8973 i.reloc[this_operand] = BFD_RELOC_64;
8974 else
8975 i.reloc[this_operand] = BFD_RELOC_32;
8976 }
8977
8978 else if (exp->X_op == O_absent
8979 || exp->X_op == O_illegal
8980 || exp->X_op == O_big)
8981 {
8982 inv_disp:
8983 as_bad (_("missing or invalid displacement expression `%s'"),
8984 disp_start);
8985 ret = 0;
8986 }
8987
8988 else if (flag_code == CODE_64BIT
8989 && !i.prefix[ADDR_PREFIX]
8990 && exp->X_op == O_constant)
8991 {
8992 /* Since displacement is signed extended to 64bit, don't allow
8993 disp32 and turn off disp32s if they are out of range. */
8994 i.types[this_operand].bitfield.disp32 = 0;
8995 if (!fits_in_signed_long (exp->X_add_number))
8996 {
8997 i.types[this_operand].bitfield.disp32s = 0;
8998 if (i.types[this_operand].bitfield.baseindex)
8999 {
9000 as_bad (_("0x%lx out range of signed 32bit displacement"),
9001 (long) exp->X_add_number);
9002 ret = 0;
9003 }
9004 }
9005 }
9006
9007 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
9008 else if (exp->X_op != O_constant
9009 && OUTPUT_FLAVOR == bfd_target_aout_flavour
9010 && exp_seg != absolute_section
9011 && exp_seg != text_section
9012 && exp_seg != data_section
9013 && exp_seg != bss_section
9014 && exp_seg != undefined_section
9015 && !bfd_is_com_section (exp_seg))
9016 {
9017 as_bad (_("unimplemented segment %s in operand"), exp_seg->name);
9018 ret = 0;
9019 }
9020 #endif
9021
9022 /* Check if this is a displacement only operand. */
9023 bigdisp = i.types[this_operand];
9024 bigdisp.bitfield.disp8 = 0;
9025 bigdisp.bitfield.disp16 = 0;
9026 bigdisp.bitfield.disp32 = 0;
9027 bigdisp.bitfield.disp32s = 0;
9028 bigdisp.bitfield.disp64 = 0;
9029 if (operand_type_all_zero (&bigdisp))
9030 i.types[this_operand] = operand_type_and (i.types[this_operand],
9031 types);
9032
9033 return ret;
9034 }
9035
9036 /* Return the active addressing mode, taking address override and
9037 registers forming the address into consideration. Update the
9038 address override prefix if necessary. */
9039
9040 static enum flag_code
9041 i386_addressing_mode (void)
9042 {
9043 enum flag_code addr_mode;
9044
9045 if (i.prefix[ADDR_PREFIX])
9046 addr_mode = flag_code == CODE_32BIT ? CODE_16BIT : CODE_32BIT;
9047 else
9048 {
9049 addr_mode = flag_code;
9050
9051 #if INFER_ADDR_PREFIX
9052 if (i.mem_operands == 0)
9053 {
9054 /* Infer address prefix from the first memory operand. */
9055 const reg_entry *addr_reg = i.base_reg;
9056
9057 if (addr_reg == NULL)
9058 addr_reg = i.index_reg;
9059
9060 if (addr_reg)
9061 {
9062 if (addr_reg->reg_num == RegEip
9063 || addr_reg->reg_num == RegEiz
9064 || addr_reg->reg_type.bitfield.dword)
9065 addr_mode = CODE_32BIT;
9066 else if (flag_code != CODE_64BIT
9067 && addr_reg->reg_type.bitfield.word)
9068 addr_mode = CODE_16BIT;
9069
9070 if (addr_mode != flag_code)
9071 {
9072 i.prefix[ADDR_PREFIX] = ADDR_PREFIX_OPCODE;
9073 i.prefixes += 1;
9074 /* Change the size of any displacement too. At most one
9075 of Disp16 or Disp32 is set.
9076 FIXME. There doesn't seem to be any real need for
9077 separate Disp16 and Disp32 flags. The same goes for
9078 Imm16 and Imm32. Removing them would probably clean
9079 up the code quite a lot. */
9080 if (flag_code != CODE_64BIT
9081 && (i.types[this_operand].bitfield.disp16
9082 || i.types[this_operand].bitfield.disp32))
9083 i.types[this_operand]
9084 = operand_type_xor (i.types[this_operand], disp16_32);
9085 }
9086 }
9087 }
9088 #endif
9089 }
9090
9091 return addr_mode;
9092 }
9093
9094 /* Make sure the memory operand we've been dealt is valid.
9095 Return 1 on success, 0 on a failure. */
9096
9097 static int
9098 i386_index_check (const char *operand_string)
9099 {
9100 const char *kind = "base/index";
9101 enum flag_code addr_mode = i386_addressing_mode ();
9102
9103 if (current_templates->start->opcode_modifier.isstring
9104 && !current_templates->start->opcode_modifier.immext
9105 && (current_templates->end[-1].opcode_modifier.isstring
9106 || i.mem_operands))
9107 {
9108 /* Memory operands of string insns are special in that they only allow
9109 a single register (rDI, rSI, or rBX) as their memory address. */
9110 const reg_entry *expected_reg;
9111 static const char *di_si[][2] =
9112 {
9113 { "esi", "edi" },
9114 { "si", "di" },
9115 { "rsi", "rdi" }
9116 };
9117 static const char *bx[] = { "ebx", "bx", "rbx" };
9118
9119 kind = "string address";
9120
9121 if (current_templates->start->opcode_modifier.repprefixok)
9122 {
9123 i386_operand_type type = current_templates->end[-1].operand_types[0];
9124
9125 if (!type.bitfield.baseindex
9126 || ((!i.mem_operands != !intel_syntax)
9127 && current_templates->end[-1].operand_types[1]
9128 .bitfield.baseindex))
9129 type = current_templates->end[-1].operand_types[1];
9130 expected_reg = hash_find (reg_hash,
9131 di_si[addr_mode][type.bitfield.esseg]);
9132
9133 }
9134 else
9135 expected_reg = hash_find (reg_hash, bx[addr_mode]);
9136
9137 if (i.base_reg != expected_reg
9138 || i.index_reg
9139 || operand_type_check (i.types[this_operand], disp))
9140 {
9141 /* The second memory operand must have the same size as
9142 the first one. */
9143 if (i.mem_operands
9144 && i.base_reg
9145 && !((addr_mode == CODE_64BIT
9146 && i.base_reg->reg_type.bitfield.qword)
9147 || (addr_mode == CODE_32BIT
9148 ? i.base_reg->reg_type.bitfield.dword
9149 : i.base_reg->reg_type.bitfield.word)))
9150 goto bad_address;
9151
9152 as_warn (_("`%s' is not valid here (expected `%c%s%s%c')"),
9153 operand_string,
9154 intel_syntax ? '[' : '(',
9155 register_prefix,
9156 expected_reg->reg_name,
9157 intel_syntax ? ']' : ')');
9158 return 1;
9159 }
9160 else
9161 return 1;
9162
9163 bad_address:
9164 as_bad (_("`%s' is not a valid %s expression"),
9165 operand_string, kind);
9166 return 0;
9167 }
9168 else
9169 {
9170 if (addr_mode != CODE_16BIT)
9171 {
9172 /* 32-bit/64-bit checks. */
9173 if ((i.base_reg
9174 && (addr_mode == CODE_64BIT
9175 ? !i.base_reg->reg_type.bitfield.qword
9176 : !i.base_reg->reg_type.bitfield.dword)
9177 && (i.index_reg
9178 || (i.base_reg->reg_num
9179 != (addr_mode == CODE_64BIT ? RegRip : RegEip))))
9180 || (i.index_reg
9181 && !i.index_reg->reg_type.bitfield.xmmword
9182 && !i.index_reg->reg_type.bitfield.ymmword
9183 && !i.index_reg->reg_type.bitfield.zmmword
9184 && ((addr_mode == CODE_64BIT
9185 ? !(i.index_reg->reg_type.bitfield.qword
9186 || i.index_reg->reg_num == RegRiz)
9187 : !(i.index_reg->reg_type.bitfield.dword
9188 || i.index_reg->reg_num == RegEiz))
9189 || !i.index_reg->reg_type.bitfield.baseindex)))
9190 goto bad_address;
9191
9192 /* bndmk, bndldx, and bndstx have special restrictions. */
9193 if (current_templates->start->base_opcode == 0xf30f1b
9194 || (current_templates->start->base_opcode & ~1) == 0x0f1a)
9195 {
9196 /* They cannot use RIP-relative addressing. */
9197 if (i.base_reg && i.base_reg->reg_num == RegRip)
9198 {
9199 as_bad (_("`%s' cannot be used here"), operand_string);
9200 return 0;
9201 }
9202
9203 /* bndldx and bndstx ignore their scale factor. */
9204 if (current_templates->start->base_opcode != 0xf30f1b
9205 && i.log2_scale_factor)
9206 as_warn (_("register scaling is being ignored here"));
9207 }
9208 }
9209 else
9210 {
9211 /* 16-bit checks. */
9212 if ((i.base_reg
9213 && (!i.base_reg->reg_type.bitfield.word
9214 || !i.base_reg->reg_type.bitfield.baseindex))
9215 || (i.index_reg
9216 && (!i.index_reg->reg_type.bitfield.word
9217 || !i.index_reg->reg_type.bitfield.baseindex
9218 || !(i.base_reg
9219 && i.base_reg->reg_num < 6
9220 && i.index_reg->reg_num >= 6
9221 && i.log2_scale_factor == 0))))
9222 goto bad_address;
9223 }
9224 }
9225 return 1;
9226 }
9227
9228 /* Handle vector immediates. */
9229
9230 static int
9231 RC_SAE_immediate (const char *imm_start)
9232 {
9233 unsigned int match_found, j;
9234 const char *pstr = imm_start;
9235 expressionS *exp;
9236
9237 if (*pstr != '{')
9238 return 0;
9239
9240 pstr++;
9241 match_found = 0;
9242 for (j = 0; j < ARRAY_SIZE (RC_NamesTable); j++)
9243 {
9244 if (!strncmp (pstr, RC_NamesTable[j].name, RC_NamesTable[j].len))
9245 {
9246 if (!i.rounding)
9247 {
9248 rc_op.type = RC_NamesTable[j].type;
9249 rc_op.operand = this_operand;
9250 i.rounding = &rc_op;
9251 }
9252 else
9253 {
9254 as_bad (_("duplicated `%s'"), imm_start);
9255 return 0;
9256 }
9257 pstr += RC_NamesTable[j].len;
9258 match_found = 1;
9259 break;
9260 }
9261 }
9262 if (!match_found)
9263 return 0;
9264
9265 if (*pstr++ != '}')
9266 {
9267 as_bad (_("Missing '}': '%s'"), imm_start);
9268 return 0;
9269 }
9270 /* RC/SAE immediate string should contain nothing more. */;
9271 if (*pstr != 0)
9272 {
9273 as_bad (_("Junk after '}': '%s'"), imm_start);
9274 return 0;
9275 }
9276
9277 exp = &im_expressions[i.imm_operands++];
9278 i.op[this_operand].imms = exp;
9279
9280 exp->X_op = O_constant;
9281 exp->X_add_number = 0;
9282 exp->X_add_symbol = (symbolS *) 0;
9283 exp->X_op_symbol = (symbolS *) 0;
9284
9285 i.types[this_operand].bitfield.imm8 = 1;
9286 return 1;
9287 }
9288
9289 /* Only string instructions can have a second memory operand, so
9290 reduce current_templates to just those if it contains any. */
9291 static int
9292 maybe_adjust_templates (void)
9293 {
9294 const insn_template *t;
9295
9296 gas_assert (i.mem_operands == 1);
9297
9298 for (t = current_templates->start; t < current_templates->end; ++t)
9299 if (t->opcode_modifier.isstring)
9300 break;
9301
9302 if (t < current_templates->end)
9303 {
9304 static templates aux_templates;
9305 bfd_boolean recheck;
9306
9307 aux_templates.start = t;
9308 for (; t < current_templates->end; ++t)
9309 if (!t->opcode_modifier.isstring)
9310 break;
9311 aux_templates.end = t;
9312
9313 /* Determine whether to re-check the first memory operand. */
9314 recheck = (aux_templates.start != current_templates->start
9315 || t != current_templates->end);
9316
9317 current_templates = &aux_templates;
9318
9319 if (recheck)
9320 {
9321 i.mem_operands = 0;
9322 if (i.memop1_string != NULL
9323 && i386_index_check (i.memop1_string) == 0)
9324 return 0;
9325 i.mem_operands = 1;
9326 }
9327 }
9328
9329 return 1;
9330 }
9331
9332 /* Parse OPERAND_STRING into the i386_insn structure I. Returns zero
9333 on error. */
9334
9335 static int
9336 i386_att_operand (char *operand_string)
9337 {
9338 const reg_entry *r;
9339 char *end_op;
9340 char *op_string = operand_string;
9341
9342 if (is_space_char (*op_string))
9343 ++op_string;
9344
9345 /* We check for an absolute prefix (differentiating,
9346 for example, 'jmp pc_relative_label' from 'jmp *absolute_label'. */
9347 if (*op_string == ABSOLUTE_PREFIX)
9348 {
9349 ++op_string;
9350 if (is_space_char (*op_string))
9351 ++op_string;
9352 i.types[this_operand].bitfield.jumpabsolute = 1;
9353 }
9354
9355 /* Check if operand is a register. */
9356 if ((r = parse_register (op_string, &end_op)) != NULL)
9357 {
9358 i386_operand_type temp;
9359
9360 /* Check for a segment override by searching for ':' after a
9361 segment register. */
9362 op_string = end_op;
9363 if (is_space_char (*op_string))
9364 ++op_string;
9365 if (*op_string == ':'
9366 && (r->reg_type.bitfield.sreg2
9367 || r->reg_type.bitfield.sreg3))
9368 {
9369 switch (r->reg_num)
9370 {
9371 case 0:
9372 i.seg[i.mem_operands] = &es;
9373 break;
9374 case 1:
9375 i.seg[i.mem_operands] = &cs;
9376 break;
9377 case 2:
9378 i.seg[i.mem_operands] = &ss;
9379 break;
9380 case 3:
9381 i.seg[i.mem_operands] = &ds;
9382 break;
9383 case 4:
9384 i.seg[i.mem_operands] = &fs;
9385 break;
9386 case 5:
9387 i.seg[i.mem_operands] = &gs;
9388 break;
9389 }
9390
9391 /* Skip the ':' and whitespace. */
9392 ++op_string;
9393 if (is_space_char (*op_string))
9394 ++op_string;
9395
9396 if (!is_digit_char (*op_string)
9397 && !is_identifier_char (*op_string)
9398 && *op_string != '('
9399 && *op_string != ABSOLUTE_PREFIX)
9400 {
9401 as_bad (_("bad memory operand `%s'"), op_string);
9402 return 0;
9403 }
9404 /* Handle case of %es:*foo. */
9405 if (*op_string == ABSOLUTE_PREFIX)
9406 {
9407 ++op_string;
9408 if (is_space_char (*op_string))
9409 ++op_string;
9410 i.types[this_operand].bitfield.jumpabsolute = 1;
9411 }
9412 goto do_memory_reference;
9413 }
9414
9415 /* Handle vector operations. */
9416 if (*op_string == '{')
9417 {
9418 op_string = check_VecOperations (op_string, NULL);
9419 if (op_string == NULL)
9420 return 0;
9421 }
9422
9423 if (*op_string)
9424 {
9425 as_bad (_("junk `%s' after register"), op_string);
9426 return 0;
9427 }
9428 temp = r->reg_type;
9429 temp.bitfield.baseindex = 0;
9430 i.types[this_operand] = operand_type_or (i.types[this_operand],
9431 temp);
9432 i.types[this_operand].bitfield.unspecified = 0;
9433 i.op[this_operand].regs = r;
9434 i.reg_operands++;
9435 }
9436 else if (*op_string == REGISTER_PREFIX)
9437 {
9438 as_bad (_("bad register name `%s'"), op_string);
9439 return 0;
9440 }
9441 else if (*op_string == IMMEDIATE_PREFIX)
9442 {
9443 ++op_string;
9444 if (i.types[this_operand].bitfield.jumpabsolute)
9445 {
9446 as_bad (_("immediate operand illegal with absolute jump"));
9447 return 0;
9448 }
9449 if (!i386_immediate (op_string))
9450 return 0;
9451 }
9452 else if (RC_SAE_immediate (operand_string))
9453 {
9454 /* If it is a RC or SAE immediate, do nothing. */
9455 ;
9456 }
9457 else if (is_digit_char (*op_string)
9458 || is_identifier_char (*op_string)
9459 || *op_string == '"'
9460 || *op_string == '(')
9461 {
9462 /* This is a memory reference of some sort. */
9463 char *base_string;
9464
9465 /* Start and end of displacement string expression (if found). */
9466 char *displacement_string_start;
9467 char *displacement_string_end;
9468 char *vop_start;
9469
9470 do_memory_reference:
9471 if (i.mem_operands == 1 && !maybe_adjust_templates ())
9472 return 0;
9473 if ((i.mem_operands == 1
9474 && !current_templates->start->opcode_modifier.isstring)
9475 || i.mem_operands == 2)
9476 {
9477 as_bad (_("too many memory references for `%s'"),
9478 current_templates->start->name);
9479 return 0;
9480 }
9481
9482 /* Check for base index form. We detect the base index form by
9483 looking for an ')' at the end of the operand, searching
9484 for the '(' matching it, and finding a REGISTER_PREFIX or ','
9485 after the '('. */
9486 base_string = op_string + strlen (op_string);
9487
9488 /* Handle vector operations. */
9489 vop_start = strchr (op_string, '{');
9490 if (vop_start && vop_start < base_string)
9491 {
9492 if (check_VecOperations (vop_start, base_string) == NULL)
9493 return 0;
9494 base_string = vop_start;
9495 }
9496
9497 --base_string;
9498 if (is_space_char (*base_string))
9499 --base_string;
9500
9501 /* If we only have a displacement, set-up for it to be parsed later. */
9502 displacement_string_start = op_string;
9503 displacement_string_end = base_string + 1;
9504
9505 if (*base_string == ')')
9506 {
9507 char *temp_string;
9508 unsigned int parens_balanced = 1;
9509 /* We've already checked that the number of left & right ()'s are
9510 equal, so this loop will not be infinite. */
9511 do
9512 {
9513 base_string--;
9514 if (*base_string == ')')
9515 parens_balanced++;
9516 if (*base_string == '(')
9517 parens_balanced--;
9518 }
9519 while (parens_balanced);
9520
9521 temp_string = base_string;
9522
9523 /* Skip past '(' and whitespace. */
9524 ++base_string;
9525 if (is_space_char (*base_string))
9526 ++base_string;
9527
9528 if (*base_string == ','
9529 || ((i.base_reg = parse_register (base_string, &end_op))
9530 != NULL))
9531 {
9532 displacement_string_end = temp_string;
9533
9534 i.types[this_operand].bitfield.baseindex = 1;
9535
9536 if (i.base_reg)
9537 {
9538 base_string = end_op;
9539 if (is_space_char (*base_string))
9540 ++base_string;
9541 }
9542
9543 /* There may be an index reg or scale factor here. */
9544 if (*base_string == ',')
9545 {
9546 ++base_string;
9547 if (is_space_char (*base_string))
9548 ++base_string;
9549
9550 if ((i.index_reg = parse_register (base_string, &end_op))
9551 != NULL)
9552 {
9553 base_string = end_op;
9554 if (is_space_char (*base_string))
9555 ++base_string;
9556 if (*base_string == ',')
9557 {
9558 ++base_string;
9559 if (is_space_char (*base_string))
9560 ++base_string;
9561 }
9562 else if (*base_string != ')')
9563 {
9564 as_bad (_("expecting `,' or `)' "
9565 "after index register in `%s'"),
9566 operand_string);
9567 return 0;
9568 }
9569 }
9570 else if (*base_string == REGISTER_PREFIX)
9571 {
9572 end_op = strchr (base_string, ',');
9573 if (end_op)
9574 *end_op = '\0';
9575 as_bad (_("bad register name `%s'"), base_string);
9576 return 0;
9577 }
9578
9579 /* Check for scale factor. */
9580 if (*base_string != ')')
9581 {
9582 char *end_scale = i386_scale (base_string);
9583
9584 if (!end_scale)
9585 return 0;
9586
9587 base_string = end_scale;
9588 if (is_space_char (*base_string))
9589 ++base_string;
9590 if (*base_string != ')')
9591 {
9592 as_bad (_("expecting `)' "
9593 "after scale factor in `%s'"),
9594 operand_string);
9595 return 0;
9596 }
9597 }
9598 else if (!i.index_reg)
9599 {
9600 as_bad (_("expecting index register or scale factor "
9601 "after `,'; got '%c'"),
9602 *base_string);
9603 return 0;
9604 }
9605 }
9606 else if (*base_string != ')')
9607 {
9608 as_bad (_("expecting `,' or `)' "
9609 "after base register in `%s'"),
9610 operand_string);
9611 return 0;
9612 }
9613 }
9614 else if (*base_string == REGISTER_PREFIX)
9615 {
9616 end_op = strchr (base_string, ',');
9617 if (end_op)
9618 *end_op = '\0';
9619 as_bad (_("bad register name `%s'"), base_string);
9620 return 0;
9621 }
9622 }
9623
9624 /* If there's an expression beginning the operand, parse it,
9625 assuming displacement_string_start and
9626 displacement_string_end are meaningful. */
9627 if (displacement_string_start != displacement_string_end)
9628 {
9629 if (!i386_displacement (displacement_string_start,
9630 displacement_string_end))
9631 return 0;
9632 }
9633
9634 /* Special case for (%dx) while doing input/output op. */
9635 if (i.base_reg
9636 && i.base_reg->reg_type.bitfield.inoutportreg
9637 && i.index_reg == 0
9638 && i.log2_scale_factor == 0
9639 && i.seg[i.mem_operands] == 0
9640 && !operand_type_check (i.types[this_operand], disp))
9641 {
9642 i.types[this_operand] = i.base_reg->reg_type;
9643 return 1;
9644 }
9645
9646 if (i386_index_check (operand_string) == 0)
9647 return 0;
9648 i.types[this_operand].bitfield.mem = 1;
9649 if (i.mem_operands == 0)
9650 i.memop1_string = xstrdup (operand_string);
9651 i.mem_operands++;
9652 }
9653 else
9654 {
9655 /* It's not a memory operand; argh! */
9656 as_bad (_("invalid char %s beginning operand %d `%s'"),
9657 output_invalid (*op_string),
9658 this_operand + 1,
9659 op_string);
9660 return 0;
9661 }
9662 return 1; /* Normal return. */
9663 }
9664 \f
9665 /* Calculate the maximum variable size (i.e., excluding fr_fix)
9666 that an rs_machine_dependent frag may reach. */
9667
9668 unsigned int
9669 i386_frag_max_var (fragS *frag)
9670 {
9671 /* The only relaxable frags are for jumps.
9672 Unconditional jumps can grow by 4 bytes and others by 5 bytes. */
9673 gas_assert (frag->fr_type == rs_machine_dependent);
9674 return TYPE_FROM_RELAX_STATE (frag->fr_subtype) == UNCOND_JUMP ? 4 : 5;
9675 }
9676
9677 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
9678 static int
9679 elf_symbol_resolved_in_segment_p (symbolS *fr_symbol, offsetT fr_var)
9680 {
9681 /* STT_GNU_IFUNC symbol must go through PLT. */
9682 if ((symbol_get_bfdsym (fr_symbol)->flags
9683 & BSF_GNU_INDIRECT_FUNCTION) != 0)
9684 return 0;
9685
9686 if (!S_IS_EXTERNAL (fr_symbol))
9687 /* Symbol may be weak or local. */
9688 return !S_IS_WEAK (fr_symbol);
9689
9690 /* Global symbols with non-default visibility can't be preempted. */
9691 if (ELF_ST_VISIBILITY (S_GET_OTHER (fr_symbol)) != STV_DEFAULT)
9692 return 1;
9693
9694 if (fr_var != NO_RELOC)
9695 switch ((enum bfd_reloc_code_real) fr_var)
9696 {
9697 case BFD_RELOC_386_PLT32:
9698 case BFD_RELOC_X86_64_PLT32:
9699 /* Symbol with PLT relocation may be preempted. */
9700 return 0;
9701 default:
9702 abort ();
9703 }
9704
9705 /* Global symbols with default visibility in a shared library may be
9706 preempted by another definition. */
9707 return !shared;
9708 }
9709 #endif
9710
9711 /* md_estimate_size_before_relax()
9712
9713 Called just before relax() for rs_machine_dependent frags. The x86
9714 assembler uses these frags to handle variable size jump
9715 instructions.
9716
9717 Any symbol that is now undefined will not become defined.
9718 Return the correct fr_subtype in the frag.
9719 Return the initial "guess for variable size of frag" to caller.
9720 The guess is actually the growth beyond the fixed part. Whatever
9721 we do to grow the fixed or variable part contributes to our
9722 returned value. */
9723
9724 int
9725 md_estimate_size_before_relax (fragS *fragP, segT segment)
9726 {
9727 /* We've already got fragP->fr_subtype right; all we have to do is
9728 check for un-relaxable symbols. On an ELF system, we can't relax
9729 an externally visible symbol, because it may be overridden by a
9730 shared library. */
9731 if (S_GET_SEGMENT (fragP->fr_symbol) != segment
9732 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
9733 || (IS_ELF
9734 && !elf_symbol_resolved_in_segment_p (fragP->fr_symbol,
9735 fragP->fr_var))
9736 #endif
9737 #if defined (OBJ_COFF) && defined (TE_PE)
9738 || (OUTPUT_FLAVOR == bfd_target_coff_flavour
9739 && S_IS_WEAK (fragP->fr_symbol))
9740 #endif
9741 )
9742 {
9743 /* Symbol is undefined in this segment, or we need to keep a
9744 reloc so that weak symbols can be overridden. */
9745 int size = (fragP->fr_subtype & CODE16) ? 2 : 4;
9746 enum bfd_reloc_code_real reloc_type;
9747 unsigned char *opcode;
9748 int old_fr_fix;
9749
9750 if (fragP->fr_var != NO_RELOC)
9751 reloc_type = (enum bfd_reloc_code_real) fragP->fr_var;
9752 else if (size == 2)
9753 reloc_type = BFD_RELOC_16_PCREL;
9754 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
9755 else if (need_plt32_p (fragP->fr_symbol))
9756 reloc_type = BFD_RELOC_X86_64_PLT32;
9757 #endif
9758 else
9759 reloc_type = BFD_RELOC_32_PCREL;
9760
9761 old_fr_fix = fragP->fr_fix;
9762 opcode = (unsigned char *) fragP->fr_opcode;
9763
9764 switch (TYPE_FROM_RELAX_STATE (fragP->fr_subtype))
9765 {
9766 case UNCOND_JUMP:
9767 /* Make jmp (0xeb) a (d)word displacement jump. */
9768 opcode[0] = 0xe9;
9769 fragP->fr_fix += size;
9770 fix_new (fragP, old_fr_fix, size,
9771 fragP->fr_symbol,
9772 fragP->fr_offset, 1,
9773 reloc_type);
9774 break;
9775
9776 case COND_JUMP86:
9777 if (size == 2
9778 && (!no_cond_jump_promotion || fragP->fr_var != NO_RELOC))
9779 {
9780 /* Negate the condition, and branch past an
9781 unconditional jump. */
9782 opcode[0] ^= 1;
9783 opcode[1] = 3;
9784 /* Insert an unconditional jump. */
9785 opcode[2] = 0xe9;
9786 /* We added two extra opcode bytes, and have a two byte
9787 offset. */
9788 fragP->fr_fix += 2 + 2;
9789 fix_new (fragP, old_fr_fix + 2, 2,
9790 fragP->fr_symbol,
9791 fragP->fr_offset, 1,
9792 reloc_type);
9793 break;
9794 }
9795 /* Fall through. */
9796
9797 case COND_JUMP:
9798 if (no_cond_jump_promotion && fragP->fr_var == NO_RELOC)
9799 {
9800 fixS *fixP;
9801
9802 fragP->fr_fix += 1;
9803 fixP = fix_new (fragP, old_fr_fix, 1,
9804 fragP->fr_symbol,
9805 fragP->fr_offset, 1,
9806 BFD_RELOC_8_PCREL);
9807 fixP->fx_signed = 1;
9808 break;
9809 }
9810
9811 /* This changes the byte-displacement jump 0x7N
9812 to the (d)word-displacement jump 0x0f,0x8N. */
9813 opcode[1] = opcode[0] + 0x10;
9814 opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
9815 /* We've added an opcode byte. */
9816 fragP->fr_fix += 1 + size;
9817 fix_new (fragP, old_fr_fix + 1, size,
9818 fragP->fr_symbol,
9819 fragP->fr_offset, 1,
9820 reloc_type);
9821 break;
9822
9823 default:
9824 BAD_CASE (fragP->fr_subtype);
9825 break;
9826 }
9827 frag_wane (fragP);
9828 return fragP->fr_fix - old_fr_fix;
9829 }
9830
9831 /* Guess size depending on current relax state. Initially the relax
9832 state will correspond to a short jump and we return 1, because
9833 the variable part of the frag (the branch offset) is one byte
9834 long. However, we can relax a section more than once and in that
9835 case we must either set fr_subtype back to the unrelaxed state,
9836 or return the value for the appropriate branch. */
9837 return md_relax_table[fragP->fr_subtype].rlx_length;
9838 }
9839
9840 /* Called after relax() is finished.
9841
9842 In: Address of frag.
9843 fr_type == rs_machine_dependent.
9844 fr_subtype is what the address relaxed to.
9845
9846 Out: Any fixSs and constants are set up.
9847 Caller will turn frag into a ".space 0". */
9848
9849 void
9850 md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT sec ATTRIBUTE_UNUSED,
9851 fragS *fragP)
9852 {
9853 unsigned char *opcode;
9854 unsigned char *where_to_put_displacement = NULL;
9855 offsetT target_address;
9856 offsetT opcode_address;
9857 unsigned int extension = 0;
9858 offsetT displacement_from_opcode_start;
9859
9860 opcode = (unsigned char *) fragP->fr_opcode;
9861
9862 /* Address we want to reach in file space. */
9863 target_address = S_GET_VALUE (fragP->fr_symbol) + fragP->fr_offset;
9864
9865 /* Address opcode resides at in file space. */
9866 opcode_address = fragP->fr_address + fragP->fr_fix;
9867
9868 /* Displacement from opcode start to fill into instruction. */
9869 displacement_from_opcode_start = target_address - opcode_address;
9870
9871 if ((fragP->fr_subtype & BIG) == 0)
9872 {
9873 /* Don't have to change opcode. */
9874 extension = 1; /* 1 opcode + 1 displacement */
9875 where_to_put_displacement = &opcode[1];
9876 }
9877 else
9878 {
9879 if (no_cond_jump_promotion
9880 && TYPE_FROM_RELAX_STATE (fragP->fr_subtype) != UNCOND_JUMP)
9881 as_warn_where (fragP->fr_file, fragP->fr_line,
9882 _("long jump required"));
9883
9884 switch (fragP->fr_subtype)
9885 {
9886 case ENCODE_RELAX_STATE (UNCOND_JUMP, BIG):
9887 extension = 4; /* 1 opcode + 4 displacement */
9888 opcode[0] = 0xe9;
9889 where_to_put_displacement = &opcode[1];
9890 break;
9891
9892 case ENCODE_RELAX_STATE (UNCOND_JUMP, BIG16):
9893 extension = 2; /* 1 opcode + 2 displacement */
9894 opcode[0] = 0xe9;
9895 where_to_put_displacement = &opcode[1];
9896 break;
9897
9898 case ENCODE_RELAX_STATE (COND_JUMP, BIG):
9899 case ENCODE_RELAX_STATE (COND_JUMP86, BIG):
9900 extension = 5; /* 2 opcode + 4 displacement */
9901 opcode[1] = opcode[0] + 0x10;
9902 opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
9903 where_to_put_displacement = &opcode[2];
9904 break;
9905
9906 case ENCODE_RELAX_STATE (COND_JUMP, BIG16):
9907 extension = 3; /* 2 opcode + 2 displacement */
9908 opcode[1] = opcode[0] + 0x10;
9909 opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
9910 where_to_put_displacement = &opcode[2];
9911 break;
9912
9913 case ENCODE_RELAX_STATE (COND_JUMP86, BIG16):
9914 extension = 4;
9915 opcode[0] ^= 1;
9916 opcode[1] = 3;
9917 opcode[2] = 0xe9;
9918 where_to_put_displacement = &opcode[3];
9919 break;
9920
9921 default:
9922 BAD_CASE (fragP->fr_subtype);
9923 break;
9924 }
9925 }
9926
9927 /* If size if less then four we are sure that the operand fits,
9928 but if it's 4, then it could be that the displacement is larger
9929 then -/+ 2GB. */
9930 if (DISP_SIZE_FROM_RELAX_STATE (fragP->fr_subtype) == 4
9931 && object_64bit
9932 && ((addressT) (displacement_from_opcode_start - extension
9933 + ((addressT) 1 << 31))
9934 > (((addressT) 2 << 31) - 1)))
9935 {
9936 as_bad_where (fragP->fr_file, fragP->fr_line,
9937 _("jump target out of range"));
9938 /* Make us emit 0. */
9939 displacement_from_opcode_start = extension;
9940 }
9941 /* Now put displacement after opcode. */
9942 md_number_to_chars ((char *) where_to_put_displacement,
9943 (valueT) (displacement_from_opcode_start - extension),
9944 DISP_SIZE_FROM_RELAX_STATE (fragP->fr_subtype));
9945 fragP->fr_fix += extension;
9946 }
9947 \f
9948 /* Apply a fixup (fixP) to segment data, once it has been determined
9949 by our caller that we have all the info we need to fix it up.
9950
9951 Parameter valP is the pointer to the value of the bits.
9952
9953 On the 386, immediates, displacements, and data pointers are all in
9954 the same (little-endian) format, so we don't need to care about which
9955 we are handling. */
9956
9957 void
9958 md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
9959 {
9960 char *p = fixP->fx_where + fixP->fx_frag->fr_literal;
9961 valueT value = *valP;
9962
9963 #if !defined (TE_Mach)
9964 if (fixP->fx_pcrel)
9965 {
9966 switch (fixP->fx_r_type)
9967 {
9968 default:
9969 break;
9970
9971 case BFD_RELOC_64:
9972 fixP->fx_r_type = BFD_RELOC_64_PCREL;
9973 break;
9974 case BFD_RELOC_32:
9975 case BFD_RELOC_X86_64_32S:
9976 fixP->fx_r_type = BFD_RELOC_32_PCREL;
9977 break;
9978 case BFD_RELOC_16:
9979 fixP->fx_r_type = BFD_RELOC_16_PCREL;
9980 break;
9981 case BFD_RELOC_8:
9982 fixP->fx_r_type = BFD_RELOC_8_PCREL;
9983 break;
9984 }
9985 }
9986
9987 if (fixP->fx_addsy != NULL
9988 && (fixP->fx_r_type == BFD_RELOC_32_PCREL
9989 || fixP->fx_r_type == BFD_RELOC_64_PCREL
9990 || fixP->fx_r_type == BFD_RELOC_16_PCREL
9991 || fixP->fx_r_type == BFD_RELOC_8_PCREL)
9992 && !use_rela_relocations)
9993 {
9994 /* This is a hack. There should be a better way to handle this.
9995 This covers for the fact that bfd_install_relocation will
9996 subtract the current location (for partial_inplace, PC relative
9997 relocations); see more below. */
9998 #ifndef OBJ_AOUT
9999 if (IS_ELF
10000 #ifdef TE_PE
10001 || OUTPUT_FLAVOR == bfd_target_coff_flavour
10002 #endif
10003 )
10004 value += fixP->fx_where + fixP->fx_frag->fr_address;
10005 #endif
10006 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
10007 if (IS_ELF)
10008 {
10009 segT sym_seg = S_GET_SEGMENT (fixP->fx_addsy);
10010
10011 if ((sym_seg == seg
10012 || (symbol_section_p (fixP->fx_addsy)
10013 && sym_seg != absolute_section))
10014 && !generic_force_reloc (fixP))
10015 {
10016 /* Yes, we add the values in twice. This is because
10017 bfd_install_relocation subtracts them out again. I think
10018 bfd_install_relocation is broken, but I don't dare change
10019 it. FIXME. */
10020 value += fixP->fx_where + fixP->fx_frag->fr_address;
10021 }
10022 }
10023 #endif
10024 #if defined (OBJ_COFF) && defined (TE_PE)
10025 /* For some reason, the PE format does not store a
10026 section address offset for a PC relative symbol. */
10027 if (S_GET_SEGMENT (fixP->fx_addsy) != seg
10028 || S_IS_WEAK (fixP->fx_addsy))
10029 value += md_pcrel_from (fixP);
10030 #endif
10031 }
10032 #if defined (OBJ_COFF) && defined (TE_PE)
10033 if (fixP->fx_addsy != NULL
10034 && S_IS_WEAK (fixP->fx_addsy)
10035 /* PR 16858: Do not modify weak function references. */
10036 && ! fixP->fx_pcrel)
10037 {
10038 #if !defined (TE_PEP)
10039 /* For x86 PE weak function symbols are neither PC-relative
10040 nor do they set S_IS_FUNCTION. So the only reliable way
10041 to detect them is to check the flags of their containing
10042 section. */
10043 if (S_GET_SEGMENT (fixP->fx_addsy) != NULL
10044 && S_GET_SEGMENT (fixP->fx_addsy)->flags & SEC_CODE)
10045 ;
10046 else
10047 #endif
10048 value -= S_GET_VALUE (fixP->fx_addsy);
10049 }
10050 #endif
10051
10052 /* Fix a few things - the dynamic linker expects certain values here,
10053 and we must not disappoint it. */
10054 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
10055 if (IS_ELF && fixP->fx_addsy)
10056 switch (fixP->fx_r_type)
10057 {
10058 case BFD_RELOC_386_PLT32:
10059 case BFD_RELOC_X86_64_PLT32:
10060 /* Make the jump instruction point to the address of the operand. At
10061 runtime we merely add the offset to the actual PLT entry. */
10062 value = -4;
10063 break;
10064
10065 case BFD_RELOC_386_TLS_GD:
10066 case BFD_RELOC_386_TLS_LDM:
10067 case BFD_RELOC_386_TLS_IE_32:
10068 case BFD_RELOC_386_TLS_IE:
10069 case BFD_RELOC_386_TLS_GOTIE:
10070 case BFD_RELOC_386_TLS_GOTDESC:
10071 case BFD_RELOC_X86_64_TLSGD:
10072 case BFD_RELOC_X86_64_TLSLD:
10073 case BFD_RELOC_X86_64_GOTTPOFF:
10074 case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
10075 value = 0; /* Fully resolved at runtime. No addend. */
10076 /* Fallthrough */
10077 case BFD_RELOC_386_TLS_LE:
10078 case BFD_RELOC_386_TLS_LDO_32:
10079 case BFD_RELOC_386_TLS_LE_32:
10080 case BFD_RELOC_X86_64_DTPOFF32:
10081 case BFD_RELOC_X86_64_DTPOFF64:
10082 case BFD_RELOC_X86_64_TPOFF32:
10083 case BFD_RELOC_X86_64_TPOFF64:
10084 S_SET_THREAD_LOCAL (fixP->fx_addsy);
10085 break;
10086
10087 case BFD_RELOC_386_TLS_DESC_CALL:
10088 case BFD_RELOC_X86_64_TLSDESC_CALL:
10089 value = 0; /* Fully resolved at runtime. No addend. */
10090 S_SET_THREAD_LOCAL (fixP->fx_addsy);
10091 fixP->fx_done = 0;
10092 return;
10093
10094 case BFD_RELOC_VTABLE_INHERIT:
10095 case BFD_RELOC_VTABLE_ENTRY:
10096 fixP->fx_done = 0;
10097 return;
10098
10099 default:
10100 break;
10101 }
10102 #endif /* defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) */
10103 *valP = value;
10104 #endif /* !defined (TE_Mach) */
10105
10106 /* Are we finished with this relocation now? */
10107 if (fixP->fx_addsy == NULL)
10108 fixP->fx_done = 1;
10109 #if defined (OBJ_COFF) && defined (TE_PE)
10110 else if (fixP->fx_addsy != NULL && S_IS_WEAK (fixP->fx_addsy))
10111 {
10112 fixP->fx_done = 0;
10113 /* Remember value for tc_gen_reloc. */
10114 fixP->fx_addnumber = value;
10115 /* Clear out the frag for now. */
10116 value = 0;
10117 }
10118 #endif
10119 else if (use_rela_relocations)
10120 {
10121 fixP->fx_no_overflow = 1;
10122 /* Remember value for tc_gen_reloc. */
10123 fixP->fx_addnumber = value;
10124 value = 0;
10125 }
10126
10127 md_number_to_chars (p, value, fixP->fx_size);
10128 }
10129 \f
10130 const char *
10131 md_atof (int type, char *litP, int *sizeP)
10132 {
10133 /* This outputs the LITTLENUMs in REVERSE order;
10134 in accord with the bigendian 386. */
10135 return ieee_md_atof (type, litP, sizeP, FALSE);
10136 }
10137 \f
10138 static char output_invalid_buf[sizeof (unsigned char) * 2 + 6];
10139
10140 static char *
10141 output_invalid (int c)
10142 {
10143 if (ISPRINT (c))
10144 snprintf (output_invalid_buf, sizeof (output_invalid_buf),
10145 "'%c'", c);
10146 else
10147 snprintf (output_invalid_buf, sizeof (output_invalid_buf),
10148 "(0x%x)", (unsigned char) c);
10149 return output_invalid_buf;
10150 }
10151
10152 /* REG_STRING starts *before* REGISTER_PREFIX. */
10153
10154 static const reg_entry *
10155 parse_real_register (char *reg_string, char **end_op)
10156 {
10157 char *s = reg_string;
10158 char *p;
10159 char reg_name_given[MAX_REG_NAME_SIZE + 1];
10160 const reg_entry *r;
10161
10162 /* Skip possible REGISTER_PREFIX and possible whitespace. */
10163 if (*s == REGISTER_PREFIX)
10164 ++s;
10165
10166 if (is_space_char (*s))
10167 ++s;
10168
10169 p = reg_name_given;
10170 while ((*p++ = register_chars[(unsigned char) *s]) != '\0')
10171 {
10172 if (p >= reg_name_given + MAX_REG_NAME_SIZE)
10173 return (const reg_entry *) NULL;
10174 s++;
10175 }
10176
10177 /* For naked regs, make sure that we are not dealing with an identifier.
10178 This prevents confusing an identifier like `eax_var' with register
10179 `eax'. */
10180 if (allow_naked_reg && identifier_chars[(unsigned char) *s])
10181 return (const reg_entry *) NULL;
10182
10183 *end_op = s;
10184
10185 r = (const reg_entry *) hash_find (reg_hash, reg_name_given);
10186
10187 /* Handle floating point regs, allowing spaces in the (i) part. */
10188 if (r == i386_regtab /* %st is first entry of table */)
10189 {
10190 if (!cpu_arch_flags.bitfield.cpu8087
10191 && !cpu_arch_flags.bitfield.cpu287
10192 && !cpu_arch_flags.bitfield.cpu387)
10193 return (const reg_entry *) NULL;
10194
10195 if (is_space_char (*s))
10196 ++s;
10197 if (*s == '(')
10198 {
10199 ++s;
10200 if (is_space_char (*s))
10201 ++s;
10202 if (*s >= '0' && *s <= '7')
10203 {
10204 int fpr = *s - '0';
10205 ++s;
10206 if (is_space_char (*s))
10207 ++s;
10208 if (*s == ')')
10209 {
10210 *end_op = s + 1;
10211 r = (const reg_entry *) hash_find (reg_hash, "st(0)");
10212 know (r);
10213 return r + fpr;
10214 }
10215 }
10216 /* We have "%st(" then garbage. */
10217 return (const reg_entry *) NULL;
10218 }
10219 }
10220
10221 if (r == NULL || allow_pseudo_reg)
10222 return r;
10223
10224 if (operand_type_all_zero (&r->reg_type))
10225 return (const reg_entry *) NULL;
10226
10227 if ((r->reg_type.bitfield.dword
10228 || r->reg_type.bitfield.sreg3
10229 || r->reg_type.bitfield.control
10230 || r->reg_type.bitfield.debug
10231 || r->reg_type.bitfield.test)
10232 && !cpu_arch_flags.bitfield.cpui386)
10233 return (const reg_entry *) NULL;
10234
10235 if (r->reg_type.bitfield.regmmx && !cpu_arch_flags.bitfield.cpummx)
10236 return (const reg_entry *) NULL;
10237
10238 if (!cpu_arch_flags.bitfield.cpuavx512f)
10239 {
10240 if (r->reg_type.bitfield.zmmword || r->reg_type.bitfield.regmask)
10241 return (const reg_entry *) NULL;
10242
10243 if (!cpu_arch_flags.bitfield.cpuavx)
10244 {
10245 if (r->reg_type.bitfield.ymmword)
10246 return (const reg_entry *) NULL;
10247
10248 if (!cpu_arch_flags.bitfield.cpusse && r->reg_type.bitfield.xmmword)
10249 return (const reg_entry *) NULL;
10250 }
10251 }
10252
10253 if (r->reg_type.bitfield.regbnd && !cpu_arch_flags.bitfield.cpumpx)
10254 return (const reg_entry *) NULL;
10255
10256 /* Don't allow fake index register unless allow_index_reg isn't 0. */
10257 if (!allow_index_reg
10258 && (r->reg_num == RegEiz || r->reg_num == RegRiz))
10259 return (const reg_entry *) NULL;
10260
10261 /* Upper 16 vector registers are only available with VREX in 64bit
10262 mode, and require EVEX encoding. */
10263 if (r->reg_flags & RegVRex)
10264 {
10265 if (!cpu_arch_flags.bitfield.cpuvrex
10266 || flag_code != CODE_64BIT)
10267 return (const reg_entry *) NULL;
10268
10269 i.vec_encoding = vex_encoding_evex;
10270 }
10271
10272 if (((r->reg_flags & (RegRex64 | RegRex)) || r->reg_type.bitfield.qword)
10273 && (!cpu_arch_flags.bitfield.cpulm || !r->reg_type.bitfield.control)
10274 && flag_code != CODE_64BIT)
10275 return (const reg_entry *) NULL;
10276
10277 if (r->reg_type.bitfield.sreg3 && r->reg_num == RegFlat && !intel_syntax)
10278 return (const reg_entry *) NULL;
10279
10280 return r;
10281 }
10282
10283 /* REG_STRING starts *before* REGISTER_PREFIX. */
10284
10285 static const reg_entry *
10286 parse_register (char *reg_string, char **end_op)
10287 {
10288 const reg_entry *r;
10289
10290 if (*reg_string == REGISTER_PREFIX || allow_naked_reg)
10291 r = parse_real_register (reg_string, end_op);
10292 else
10293 r = NULL;
10294 if (!r)
10295 {
10296 char *save = input_line_pointer;
10297 char c;
10298 symbolS *symbolP;
10299
10300 input_line_pointer = reg_string;
10301 c = get_symbol_name (&reg_string);
10302 symbolP = symbol_find (reg_string);
10303 if (symbolP && S_GET_SEGMENT (symbolP) == reg_section)
10304 {
10305 const expressionS *e = symbol_get_value_expression (symbolP);
10306
10307 know (e->X_op == O_register);
10308 know (e->X_add_number >= 0
10309 && (valueT) e->X_add_number < i386_regtab_size);
10310 r = i386_regtab + e->X_add_number;
10311 if ((r->reg_flags & RegVRex))
10312 i.vec_encoding = vex_encoding_evex;
10313 *end_op = input_line_pointer;
10314 }
10315 *input_line_pointer = c;
10316 input_line_pointer = save;
10317 }
10318 return r;
10319 }
10320
10321 int
10322 i386_parse_name (char *name, expressionS *e, char *nextcharP)
10323 {
10324 const reg_entry *r;
10325 char *end = input_line_pointer;
10326
10327 *end = *nextcharP;
10328 r = parse_register (name, &input_line_pointer);
10329 if (r && end <= input_line_pointer)
10330 {
10331 *nextcharP = *input_line_pointer;
10332 *input_line_pointer = 0;
10333 e->X_op = O_register;
10334 e->X_add_number = r - i386_regtab;
10335 return 1;
10336 }
10337 input_line_pointer = end;
10338 *end = 0;
10339 return intel_syntax ? i386_intel_parse_name (name, e) : 0;
10340 }
10341
10342 void
10343 md_operand (expressionS *e)
10344 {
10345 char *end;
10346 const reg_entry *r;
10347
10348 switch (*input_line_pointer)
10349 {
10350 case REGISTER_PREFIX:
10351 r = parse_real_register (input_line_pointer, &end);
10352 if (r)
10353 {
10354 e->X_op = O_register;
10355 e->X_add_number = r - i386_regtab;
10356 input_line_pointer = end;
10357 }
10358 break;
10359
10360 case '[':
10361 gas_assert (intel_syntax);
10362 end = input_line_pointer++;
10363 expression (e);
10364 if (*input_line_pointer == ']')
10365 {
10366 ++input_line_pointer;
10367 e->X_op_symbol = make_expr_symbol (e);
10368 e->X_add_symbol = NULL;
10369 e->X_add_number = 0;
10370 e->X_op = O_index;
10371 }
10372 else
10373 {
10374 e->X_op = O_absent;
10375 input_line_pointer = end;
10376 }
10377 break;
10378 }
10379 }
10380
10381 \f
10382 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
10383 const char *md_shortopts = "kVQ:sqnO::";
10384 #else
10385 const char *md_shortopts = "qnO::";
10386 #endif
10387
10388 #define OPTION_32 (OPTION_MD_BASE + 0)
10389 #define OPTION_64 (OPTION_MD_BASE + 1)
10390 #define OPTION_DIVIDE (OPTION_MD_BASE + 2)
10391 #define OPTION_MARCH (OPTION_MD_BASE + 3)
10392 #define OPTION_MTUNE (OPTION_MD_BASE + 4)
10393 #define OPTION_MMNEMONIC (OPTION_MD_BASE + 5)
10394 #define OPTION_MSYNTAX (OPTION_MD_BASE + 6)
10395 #define OPTION_MINDEX_REG (OPTION_MD_BASE + 7)
10396 #define OPTION_MNAKED_REG (OPTION_MD_BASE + 8)
10397 #define OPTION_MRELAX_RELOCATIONS (OPTION_MD_BASE + 9)
10398 #define OPTION_MSSE2AVX (OPTION_MD_BASE + 10)
10399 #define OPTION_MSSE_CHECK (OPTION_MD_BASE + 11)
10400 #define OPTION_MOPERAND_CHECK (OPTION_MD_BASE + 12)
10401 #define OPTION_MAVXSCALAR (OPTION_MD_BASE + 13)
10402 #define OPTION_X32 (OPTION_MD_BASE + 14)
10403 #define OPTION_MADD_BND_PREFIX (OPTION_MD_BASE + 15)
10404 #define OPTION_MEVEXLIG (OPTION_MD_BASE + 16)
10405 #define OPTION_MEVEXWIG (OPTION_MD_BASE + 17)
10406 #define OPTION_MBIG_OBJ (OPTION_MD_BASE + 18)
10407 #define OPTION_MOMIT_LOCK_PREFIX (OPTION_MD_BASE + 19)
10408 #define OPTION_MEVEXRCIG (OPTION_MD_BASE + 20)
10409 #define OPTION_MSHARED (OPTION_MD_BASE + 21)
10410 #define OPTION_MAMD64 (OPTION_MD_BASE + 22)
10411 #define OPTION_MINTEL64 (OPTION_MD_BASE + 23)
10412 #define OPTION_MFENCE_AS_LOCK_ADD (OPTION_MD_BASE + 24)
10413
10414 struct option md_longopts[] =
10415 {
10416 {"32", no_argument, NULL, OPTION_32},
10417 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
10418 || defined (TE_PE) || defined (TE_PEP) || defined (OBJ_MACH_O))
10419 {"64", no_argument, NULL, OPTION_64},
10420 #endif
10421 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
10422 {"x32", no_argument, NULL, OPTION_X32},
10423 {"mshared", no_argument, NULL, OPTION_MSHARED},
10424 #endif
10425 {"divide", no_argument, NULL, OPTION_DIVIDE},
10426 {"march", required_argument, NULL, OPTION_MARCH},
10427 {"mtune", required_argument, NULL, OPTION_MTUNE},
10428 {"mmnemonic", required_argument, NULL, OPTION_MMNEMONIC},
10429 {"msyntax", required_argument, NULL, OPTION_MSYNTAX},
10430 {"mindex-reg", no_argument, NULL, OPTION_MINDEX_REG},
10431 {"mnaked-reg", no_argument, NULL, OPTION_MNAKED_REG},
10432 {"msse2avx", no_argument, NULL, OPTION_MSSE2AVX},
10433 {"msse-check", required_argument, NULL, OPTION_MSSE_CHECK},
10434 {"moperand-check", required_argument, NULL, OPTION_MOPERAND_CHECK},
10435 {"mavxscalar", required_argument, NULL, OPTION_MAVXSCALAR},
10436 {"madd-bnd-prefix", no_argument, NULL, OPTION_MADD_BND_PREFIX},
10437 {"mevexlig", required_argument, NULL, OPTION_MEVEXLIG},
10438 {"mevexwig", required_argument, NULL, OPTION_MEVEXWIG},
10439 # if defined (TE_PE) || defined (TE_PEP)
10440 {"mbig-obj", no_argument, NULL, OPTION_MBIG_OBJ},
10441 #endif
10442 {"momit-lock-prefix", required_argument, NULL, OPTION_MOMIT_LOCK_PREFIX},
10443 {"mfence-as-lock-add", required_argument, NULL, OPTION_MFENCE_AS_LOCK_ADD},
10444 {"mrelax-relocations", required_argument, NULL, OPTION_MRELAX_RELOCATIONS},
10445 {"mevexrcig", required_argument, NULL, OPTION_MEVEXRCIG},
10446 {"mamd64", no_argument, NULL, OPTION_MAMD64},
10447 {"mintel64", no_argument, NULL, OPTION_MINTEL64},
10448 {NULL, no_argument, NULL, 0}
10449 };
10450 size_t md_longopts_size = sizeof (md_longopts);
10451
10452 int
10453 md_parse_option (int c, const char *arg)
10454 {
10455 unsigned int j;
10456 char *arch, *next, *saved;
10457
10458 switch (c)
10459 {
10460 case 'n':
10461 optimize_align_code = 0;
10462 break;
10463
10464 case 'q':
10465 quiet_warnings = 1;
10466 break;
10467
10468 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
10469 /* -Qy, -Qn: SVR4 arguments controlling whether a .comment section
10470 should be emitted or not. FIXME: Not implemented. */
10471 case 'Q':
10472 break;
10473
10474 /* -V: SVR4 argument to print version ID. */
10475 case 'V':
10476 print_version_id ();
10477 break;
10478
10479 /* -k: Ignore for FreeBSD compatibility. */
10480 case 'k':
10481 break;
10482
10483 case 's':
10484 /* -s: On i386 Solaris, this tells the native assembler to use
10485 .stab instead of .stab.excl. We always use .stab anyhow. */
10486 break;
10487
10488 case OPTION_MSHARED:
10489 shared = 1;
10490 break;
10491 #endif
10492 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
10493 || defined (TE_PE) || defined (TE_PEP) || defined (OBJ_MACH_O))
10494 case OPTION_64:
10495 {
10496 const char **list, **l;
10497
10498 list = bfd_target_list ();
10499 for (l = list; *l != NULL; l++)
10500 if (CONST_STRNEQ (*l, "elf64-x86-64")
10501 || strcmp (*l, "coff-x86-64") == 0
10502 || strcmp (*l, "pe-x86-64") == 0
10503 || strcmp (*l, "pei-x86-64") == 0
10504 || strcmp (*l, "mach-o-x86-64") == 0)
10505 {
10506 default_arch = "x86_64";
10507 break;
10508 }
10509 if (*l == NULL)
10510 as_fatal (_("no compiled in support for x86_64"));
10511 free (list);
10512 }
10513 break;
10514 #endif
10515
10516 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
10517 case OPTION_X32:
10518 if (IS_ELF)
10519 {
10520 const char **list, **l;
10521
10522 list = bfd_target_list ();
10523 for (l = list; *l != NULL; l++)
10524 if (CONST_STRNEQ (*l, "elf32-x86-64"))
10525 {
10526 default_arch = "x86_64:32";
10527 break;
10528 }
10529 if (*l == NULL)
10530 as_fatal (_("no compiled in support for 32bit x86_64"));
10531 free (list);
10532 }
10533 else
10534 as_fatal (_("32bit x86_64 is only supported for ELF"));
10535 break;
10536 #endif
10537
10538 case OPTION_32:
10539 default_arch = "i386";
10540 break;
10541
10542 case OPTION_DIVIDE:
10543 #ifdef SVR4_COMMENT_CHARS
10544 {
10545 char *n, *t;
10546 const char *s;
10547
10548 n = XNEWVEC (char, strlen (i386_comment_chars) + 1);
10549 t = n;
10550 for (s = i386_comment_chars; *s != '\0'; s++)
10551 if (*s != '/')
10552 *t++ = *s;
10553 *t = '\0';
10554 i386_comment_chars = n;
10555 }
10556 #endif
10557 break;
10558
10559 case OPTION_MARCH:
10560 saved = xstrdup (arg);
10561 arch = saved;
10562 /* Allow -march=+nosse. */
10563 if (*arch == '+')
10564 arch++;
10565 do
10566 {
10567 if (*arch == '.')
10568 as_fatal (_("invalid -march= option: `%s'"), arg);
10569 next = strchr (arch, '+');
10570 if (next)
10571 *next++ = '\0';
10572 for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
10573 {
10574 if (strcmp (arch, cpu_arch [j].name) == 0)
10575 {
10576 /* Processor. */
10577 if (! cpu_arch[j].flags.bitfield.cpui386)
10578 continue;
10579
10580 cpu_arch_name = cpu_arch[j].name;
10581 cpu_sub_arch_name = NULL;
10582 cpu_arch_flags = cpu_arch[j].flags;
10583 cpu_arch_isa = cpu_arch[j].type;
10584 cpu_arch_isa_flags = cpu_arch[j].flags;
10585 if (!cpu_arch_tune_set)
10586 {
10587 cpu_arch_tune = cpu_arch_isa;
10588 cpu_arch_tune_flags = cpu_arch_isa_flags;
10589 }
10590 break;
10591 }
10592 else if (*cpu_arch [j].name == '.'
10593 && strcmp (arch, cpu_arch [j].name + 1) == 0)
10594 {
10595 /* ISA extension. */
10596 i386_cpu_flags flags;
10597
10598 flags = cpu_flags_or (cpu_arch_flags,
10599 cpu_arch[j].flags);
10600
10601 if (!cpu_flags_equal (&flags, &cpu_arch_flags))
10602 {
10603 if (cpu_sub_arch_name)
10604 {
10605 char *name = cpu_sub_arch_name;
10606 cpu_sub_arch_name = concat (name,
10607 cpu_arch[j].name,
10608 (const char *) NULL);
10609 free (name);
10610 }
10611 else
10612 cpu_sub_arch_name = xstrdup (cpu_arch[j].name);
10613 cpu_arch_flags = flags;
10614 cpu_arch_isa_flags = flags;
10615 }
10616 else
10617 cpu_arch_isa_flags
10618 = cpu_flags_or (cpu_arch_isa_flags,
10619 cpu_arch[j].flags);
10620 break;
10621 }
10622 }
10623
10624 if (j >= ARRAY_SIZE (cpu_arch))
10625 {
10626 /* Disable an ISA extension. */
10627 for (j = 0; j < ARRAY_SIZE (cpu_noarch); j++)
10628 if (strcmp (arch, cpu_noarch [j].name) == 0)
10629 {
10630 i386_cpu_flags flags;
10631
10632 flags = cpu_flags_and_not (cpu_arch_flags,
10633 cpu_noarch[j].flags);
10634 if (!cpu_flags_equal (&flags, &cpu_arch_flags))
10635 {
10636 if (cpu_sub_arch_name)
10637 {
10638 char *name = cpu_sub_arch_name;
10639 cpu_sub_arch_name = concat (arch,
10640 (const char *) NULL);
10641 free (name);
10642 }
10643 else
10644 cpu_sub_arch_name = xstrdup (arch);
10645 cpu_arch_flags = flags;
10646 cpu_arch_isa_flags = flags;
10647 }
10648 break;
10649 }
10650
10651 if (j >= ARRAY_SIZE (cpu_noarch))
10652 j = ARRAY_SIZE (cpu_arch);
10653 }
10654
10655 if (j >= ARRAY_SIZE (cpu_arch))
10656 as_fatal (_("invalid -march= option: `%s'"), arg);
10657
10658 arch = next;
10659 }
10660 while (next != NULL);
10661 free (saved);
10662 break;
10663
10664 case OPTION_MTUNE:
10665 if (*arg == '.')
10666 as_fatal (_("invalid -mtune= option: `%s'"), arg);
10667 for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
10668 {
10669 if (strcmp (arg, cpu_arch [j].name) == 0)
10670 {
10671 cpu_arch_tune_set = 1;
10672 cpu_arch_tune = cpu_arch [j].type;
10673 cpu_arch_tune_flags = cpu_arch[j].flags;
10674 break;
10675 }
10676 }
10677 if (j >= ARRAY_SIZE (cpu_arch))
10678 as_fatal (_("invalid -mtune= option: `%s'"), arg);
10679 break;
10680
10681 case OPTION_MMNEMONIC:
10682 if (strcasecmp (arg, "att") == 0)
10683 intel_mnemonic = 0;
10684 else if (strcasecmp (arg, "intel") == 0)
10685 intel_mnemonic = 1;
10686 else
10687 as_fatal (_("invalid -mmnemonic= option: `%s'"), arg);
10688 break;
10689
10690 case OPTION_MSYNTAX:
10691 if (strcasecmp (arg, "att") == 0)
10692 intel_syntax = 0;
10693 else if (strcasecmp (arg, "intel") == 0)
10694 intel_syntax = 1;
10695 else
10696 as_fatal (_("invalid -msyntax= option: `%s'"), arg);
10697 break;
10698
10699 case OPTION_MINDEX_REG:
10700 allow_index_reg = 1;
10701 break;
10702
10703 case OPTION_MNAKED_REG:
10704 allow_naked_reg = 1;
10705 break;
10706
10707 case OPTION_MSSE2AVX:
10708 sse2avx = 1;
10709 break;
10710
10711 case OPTION_MSSE_CHECK:
10712 if (strcasecmp (arg, "error") == 0)
10713 sse_check = check_error;
10714 else if (strcasecmp (arg, "warning") == 0)
10715 sse_check = check_warning;
10716 else if (strcasecmp (arg, "none") == 0)
10717 sse_check = check_none;
10718 else
10719 as_fatal (_("invalid -msse-check= option: `%s'"), arg);
10720 break;
10721
10722 case OPTION_MOPERAND_CHECK:
10723 if (strcasecmp (arg, "error") == 0)
10724 operand_check = check_error;
10725 else if (strcasecmp (arg, "warning") == 0)
10726 operand_check = check_warning;
10727 else if (strcasecmp (arg, "none") == 0)
10728 operand_check = check_none;
10729 else
10730 as_fatal (_("invalid -moperand-check= option: `%s'"), arg);
10731 break;
10732
10733 case OPTION_MAVXSCALAR:
10734 if (strcasecmp (arg, "128") == 0)
10735 avxscalar = vex128;
10736 else if (strcasecmp (arg, "256") == 0)
10737 avxscalar = vex256;
10738 else
10739 as_fatal (_("invalid -mavxscalar= option: `%s'"), arg);
10740 break;
10741
10742 case OPTION_MADD_BND_PREFIX:
10743 add_bnd_prefix = 1;
10744 break;
10745
10746 case OPTION_MEVEXLIG:
10747 if (strcmp (arg, "128") == 0)
10748 evexlig = evexl128;
10749 else if (strcmp (arg, "256") == 0)
10750 evexlig = evexl256;
10751 else if (strcmp (arg, "512") == 0)
10752 evexlig = evexl512;
10753 else
10754 as_fatal (_("invalid -mevexlig= option: `%s'"), arg);
10755 break;
10756
10757 case OPTION_MEVEXRCIG:
10758 if (strcmp (arg, "rne") == 0)
10759 evexrcig = rne;
10760 else if (strcmp (arg, "rd") == 0)
10761 evexrcig = rd;
10762 else if (strcmp (arg, "ru") == 0)
10763 evexrcig = ru;
10764 else if (strcmp (arg, "rz") == 0)
10765 evexrcig = rz;
10766 else
10767 as_fatal (_("invalid -mevexrcig= option: `%s'"), arg);
10768 break;
10769
10770 case OPTION_MEVEXWIG:
10771 if (strcmp (arg, "0") == 0)
10772 evexwig = evexw0;
10773 else if (strcmp (arg, "1") == 0)
10774 evexwig = evexw1;
10775 else
10776 as_fatal (_("invalid -mevexwig= option: `%s'"), arg);
10777 break;
10778
10779 # if defined (TE_PE) || defined (TE_PEP)
10780 case OPTION_MBIG_OBJ:
10781 use_big_obj = 1;
10782 break;
10783 #endif
10784
10785 case OPTION_MOMIT_LOCK_PREFIX:
10786 if (strcasecmp (arg, "yes") == 0)
10787 omit_lock_prefix = 1;
10788 else if (strcasecmp (arg, "no") == 0)
10789 omit_lock_prefix = 0;
10790 else
10791 as_fatal (_("invalid -momit-lock-prefix= option: `%s'"), arg);
10792 break;
10793
10794 case OPTION_MFENCE_AS_LOCK_ADD:
10795 if (strcasecmp (arg, "yes") == 0)
10796 avoid_fence = 1;
10797 else if (strcasecmp (arg, "no") == 0)
10798 avoid_fence = 0;
10799 else
10800 as_fatal (_("invalid -mfence-as-lock-add= option: `%s'"), arg);
10801 break;
10802
10803 case OPTION_MRELAX_RELOCATIONS:
10804 if (strcasecmp (arg, "yes") == 0)
10805 generate_relax_relocations = 1;
10806 else if (strcasecmp (arg, "no") == 0)
10807 generate_relax_relocations = 0;
10808 else
10809 as_fatal (_("invalid -mrelax-relocations= option: `%s'"), arg);
10810 break;
10811
10812 case OPTION_MAMD64:
10813 intel64 = 0;
10814 break;
10815
10816 case OPTION_MINTEL64:
10817 intel64 = 1;
10818 break;
10819
10820 case 'O':
10821 if (arg == NULL)
10822 {
10823 optimize = 1;
10824 /* Turn off -Os. */
10825 optimize_for_space = 0;
10826 }
10827 else if (*arg == 's')
10828 {
10829 optimize_for_space = 1;
10830 /* Turn on all encoding optimizations. */
10831 optimize = -1;
10832 }
10833 else
10834 {
10835 optimize = atoi (arg);
10836 /* Turn off -Os. */
10837 optimize_for_space = 0;
10838 }
10839 break;
10840
10841 default:
10842 return 0;
10843 }
10844 return 1;
10845 }
10846
10847 #define MESSAGE_TEMPLATE \
10848 " "
10849
10850 static char *
10851 output_message (FILE *stream, char *p, char *message, char *start,
10852 int *left_p, const char *name, int len)
10853 {
10854 int size = sizeof (MESSAGE_TEMPLATE);
10855 int left = *left_p;
10856
10857 /* Reserve 2 spaces for ", " or ",\0" */
10858 left -= len + 2;
10859
10860 /* Check if there is any room. */
10861 if (left >= 0)
10862 {
10863 if (p != start)
10864 {
10865 *p++ = ',';
10866 *p++ = ' ';
10867 }
10868 p = mempcpy (p, name, len);
10869 }
10870 else
10871 {
10872 /* Output the current message now and start a new one. */
10873 *p++ = ',';
10874 *p = '\0';
10875 fprintf (stream, "%s\n", message);
10876 p = start;
10877 left = size - (start - message) - len - 2;
10878
10879 gas_assert (left >= 0);
10880
10881 p = mempcpy (p, name, len);
10882 }
10883
10884 *left_p = left;
10885 return p;
10886 }
10887
10888 static void
10889 show_arch (FILE *stream, int ext, int check)
10890 {
10891 static char message[] = MESSAGE_TEMPLATE;
10892 char *start = message + 27;
10893 char *p;
10894 int size = sizeof (MESSAGE_TEMPLATE);
10895 int left;
10896 const char *name;
10897 int len;
10898 unsigned int j;
10899
10900 p = start;
10901 left = size - (start - message);
10902 for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
10903 {
10904 /* Should it be skipped? */
10905 if (cpu_arch [j].skip)
10906 continue;
10907
10908 name = cpu_arch [j].name;
10909 len = cpu_arch [j].len;
10910 if (*name == '.')
10911 {
10912 /* It is an extension. Skip if we aren't asked to show it. */
10913 if (ext)
10914 {
10915 name++;
10916 len--;
10917 }
10918 else
10919 continue;
10920 }
10921 else if (ext)
10922 {
10923 /* It is an processor. Skip if we show only extension. */
10924 continue;
10925 }
10926 else if (check && ! cpu_arch[j].flags.bitfield.cpui386)
10927 {
10928 /* It is an impossible processor - skip. */
10929 continue;
10930 }
10931
10932 p = output_message (stream, p, message, start, &left, name, len);
10933 }
10934
10935 /* Display disabled extensions. */
10936 if (ext)
10937 for (j = 0; j < ARRAY_SIZE (cpu_noarch); j++)
10938 {
10939 name = cpu_noarch [j].name;
10940 len = cpu_noarch [j].len;
10941 p = output_message (stream, p, message, start, &left, name,
10942 len);
10943 }
10944
10945 *p = '\0';
10946 fprintf (stream, "%s\n", message);
10947 }
10948
10949 void
10950 md_show_usage (FILE *stream)
10951 {
10952 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
10953 fprintf (stream, _("\
10954 -Q ignored\n\
10955 -V print assembler version number\n\
10956 -k ignored\n"));
10957 #endif
10958 fprintf (stream, _("\
10959 -n Do not optimize code alignment\n\
10960 -q quieten some warnings\n"));
10961 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
10962 fprintf (stream, _("\
10963 -s ignored\n"));
10964 #endif
10965 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
10966 || defined (TE_PE) || defined (TE_PEP))
10967 fprintf (stream, _("\
10968 --32/--64/--x32 generate 32bit/64bit/x32 code\n"));
10969 #endif
10970 #ifdef SVR4_COMMENT_CHARS
10971 fprintf (stream, _("\
10972 --divide do not treat `/' as a comment character\n"));
10973 #else
10974 fprintf (stream, _("\
10975 --divide ignored\n"));
10976 #endif
10977 fprintf (stream, _("\
10978 -march=CPU[,+EXTENSION...]\n\
10979 generate code for CPU and EXTENSION, CPU is one of:\n"));
10980 show_arch (stream, 0, 1);
10981 fprintf (stream, _("\
10982 EXTENSION is combination of:\n"));
10983 show_arch (stream, 1, 0);
10984 fprintf (stream, _("\
10985 -mtune=CPU optimize for CPU, CPU is one of:\n"));
10986 show_arch (stream, 0, 0);
10987 fprintf (stream, _("\
10988 -msse2avx encode SSE instructions with VEX prefix\n"));
10989 fprintf (stream, _("\
10990 -msse-check=[none|error|warning]\n\
10991 check SSE instructions\n"));
10992 fprintf (stream, _("\
10993 -moperand-check=[none|error|warning]\n\
10994 check operand combinations for validity\n"));
10995 fprintf (stream, _("\
10996 -mavxscalar=[128|256] encode scalar AVX instructions with specific vector\n\
10997 length\n"));
10998 fprintf (stream, _("\
10999 -mevexlig=[128|256|512] encode scalar EVEX instructions with specific vector\n\
11000 length\n"));
11001 fprintf (stream, _("\
11002 -mevexwig=[0|1] encode EVEX instructions with specific EVEX.W value\n\
11003 for EVEX.W bit ignored instructions\n"));
11004 fprintf (stream, _("\
11005 -mevexrcig=[rne|rd|ru|rz]\n\
11006 encode EVEX instructions with specific EVEX.RC value\n\
11007 for SAE-only ignored instructions\n"));
11008 fprintf (stream, _("\
11009 -mmnemonic=[att|intel] use AT&T/Intel mnemonic\n"));
11010 fprintf (stream, _("\
11011 -msyntax=[att|intel] use AT&T/Intel syntax\n"));
11012 fprintf (stream, _("\
11013 -mindex-reg support pseudo index registers\n"));
11014 fprintf (stream, _("\
11015 -mnaked-reg don't require `%%' prefix for registers\n"));
11016 fprintf (stream, _("\
11017 -madd-bnd-prefix add BND prefix for all valid branches\n"));
11018 fprintf (stream, _("\
11019 -mshared disable branch optimization for shared code\n"));
11020 # if defined (TE_PE) || defined (TE_PEP)
11021 fprintf (stream, _("\
11022 -mbig-obj generate big object files\n"));
11023 #endif
11024 fprintf (stream, _("\
11025 -momit-lock-prefix=[no|yes]\n\
11026 strip all lock prefixes\n"));
11027 fprintf (stream, _("\
11028 -mfence-as-lock-add=[no|yes]\n\
11029 encode lfence, mfence and sfence as\n\
11030 lock addl $0x0, (%%{re}sp)\n"));
11031 fprintf (stream, _("\
11032 -mrelax-relocations=[no|yes]\n\
11033 generate relax relocations\n"));
11034 fprintf (stream, _("\
11035 -mamd64 accept only AMD64 ISA\n"));
11036 fprintf (stream, _("\
11037 -mintel64 accept only Intel64 ISA\n"));
11038 }
11039
11040 #if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \
11041 || defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
11042 || defined (TE_PE) || defined (TE_PEP) || defined (OBJ_MACH_O))
11043
11044 /* Pick the target format to use. */
11045
11046 const char *
11047 i386_target_format (void)
11048 {
11049 if (!strncmp (default_arch, "x86_64", 6))
11050 {
11051 update_code_flag (CODE_64BIT, 1);
11052 if (default_arch[6] == '\0')
11053 x86_elf_abi = X86_64_ABI;
11054 else
11055 x86_elf_abi = X86_64_X32_ABI;
11056 }
11057 else if (!strcmp (default_arch, "i386"))
11058 update_code_flag (CODE_32BIT, 1);
11059 else if (!strcmp (default_arch, "iamcu"))
11060 {
11061 update_code_flag (CODE_32BIT, 1);
11062 if (cpu_arch_isa == PROCESSOR_UNKNOWN)
11063 {
11064 static const i386_cpu_flags iamcu_flags = CPU_IAMCU_FLAGS;
11065 cpu_arch_name = "iamcu";
11066 cpu_sub_arch_name = NULL;
11067 cpu_arch_flags = iamcu_flags;
11068 cpu_arch_isa = PROCESSOR_IAMCU;
11069 cpu_arch_isa_flags = iamcu_flags;
11070 if (!cpu_arch_tune_set)
11071 {
11072 cpu_arch_tune = cpu_arch_isa;
11073 cpu_arch_tune_flags = cpu_arch_isa_flags;
11074 }
11075 }
11076 else if (cpu_arch_isa != PROCESSOR_IAMCU)
11077 as_fatal (_("Intel MCU doesn't support `%s' architecture"),
11078 cpu_arch_name);
11079 }
11080 else
11081 as_fatal (_("unknown architecture"));
11082
11083 if (cpu_flags_all_zero (&cpu_arch_isa_flags))
11084 cpu_arch_isa_flags = cpu_arch[flag_code == CODE_64BIT].flags;
11085 if (cpu_flags_all_zero (&cpu_arch_tune_flags))
11086 cpu_arch_tune_flags = cpu_arch[flag_code == CODE_64BIT].flags;
11087
11088 switch (OUTPUT_FLAVOR)
11089 {
11090 #if defined (OBJ_MAYBE_AOUT) || defined (OBJ_AOUT)
11091 case bfd_target_aout_flavour:
11092 return AOUT_TARGET_FORMAT;
11093 #endif
11094 #if defined (OBJ_MAYBE_COFF) || defined (OBJ_COFF)
11095 # if defined (TE_PE) || defined (TE_PEP)
11096 case bfd_target_coff_flavour:
11097 if (flag_code == CODE_64BIT)
11098 return use_big_obj ? "pe-bigobj-x86-64" : "pe-x86-64";
11099 else
11100 return "pe-i386";
11101 # elif defined (TE_GO32)
11102 case bfd_target_coff_flavour:
11103 return "coff-go32";
11104 # else
11105 case bfd_target_coff_flavour:
11106 return "coff-i386";
11107 # endif
11108 #endif
11109 #if defined (OBJ_MAYBE_ELF) || defined (OBJ_ELF)
11110 case bfd_target_elf_flavour:
11111 {
11112 const char *format;
11113
11114 switch (x86_elf_abi)
11115 {
11116 default:
11117 format = ELF_TARGET_FORMAT;
11118 break;
11119 case X86_64_ABI:
11120 use_rela_relocations = 1;
11121 object_64bit = 1;
11122 format = ELF_TARGET_FORMAT64;
11123 break;
11124 case X86_64_X32_ABI:
11125 use_rela_relocations = 1;
11126 object_64bit = 1;
11127 disallow_64bit_reloc = 1;
11128 format = ELF_TARGET_FORMAT32;
11129 break;
11130 }
11131 if (cpu_arch_isa == PROCESSOR_L1OM)
11132 {
11133 if (x86_elf_abi != X86_64_ABI)
11134 as_fatal (_("Intel L1OM is 64bit only"));
11135 return ELF_TARGET_L1OM_FORMAT;
11136 }
11137 else if (cpu_arch_isa == PROCESSOR_K1OM)
11138 {
11139 if (x86_elf_abi != X86_64_ABI)
11140 as_fatal (_("Intel K1OM is 64bit only"));
11141 return ELF_TARGET_K1OM_FORMAT;
11142 }
11143 else if (cpu_arch_isa == PROCESSOR_IAMCU)
11144 {
11145 if (x86_elf_abi != I386_ABI)
11146 as_fatal (_("Intel MCU is 32bit only"));
11147 return ELF_TARGET_IAMCU_FORMAT;
11148 }
11149 else
11150 return format;
11151 }
11152 #endif
11153 #if defined (OBJ_MACH_O)
11154 case bfd_target_mach_o_flavour:
11155 if (flag_code == CODE_64BIT)
11156 {
11157 use_rela_relocations = 1;
11158 object_64bit = 1;
11159 return "mach-o-x86-64";
11160 }
11161 else
11162 return "mach-o-i386";
11163 #endif
11164 default:
11165 abort ();
11166 return NULL;
11167 }
11168 }
11169
11170 #endif /* OBJ_MAYBE_ more than one */
11171 \f
11172 symbolS *
11173 md_undefined_symbol (char *name)
11174 {
11175 if (name[0] == GLOBAL_OFFSET_TABLE_NAME[0]
11176 && name[1] == GLOBAL_OFFSET_TABLE_NAME[1]
11177 && name[2] == GLOBAL_OFFSET_TABLE_NAME[2]
11178 && strcmp (name, GLOBAL_OFFSET_TABLE_NAME) == 0)
11179 {
11180 if (!GOT_symbol)
11181 {
11182 if (symbol_find (name))
11183 as_bad (_("GOT already in symbol table"));
11184 GOT_symbol = symbol_new (name, undefined_section,
11185 (valueT) 0, &zero_address_frag);
11186 };
11187 return GOT_symbol;
11188 }
11189 return 0;
11190 }
11191
11192 /* Round up a section size to the appropriate boundary. */
11193
11194 valueT
11195 md_section_align (segT segment ATTRIBUTE_UNUSED, valueT size)
11196 {
11197 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
11198 if (OUTPUT_FLAVOR == bfd_target_aout_flavour)
11199 {
11200 /* For a.out, force the section size to be aligned. If we don't do
11201 this, BFD will align it for us, but it will not write out the
11202 final bytes of the section. This may be a bug in BFD, but it is
11203 easier to fix it here since that is how the other a.out targets
11204 work. */
11205 int align;
11206
11207 align = bfd_get_section_alignment (stdoutput, segment);
11208 size = ((size + (1 << align) - 1) & (-((valueT) 1 << align)));
11209 }
11210 #endif
11211
11212 return size;
11213 }
11214
11215 /* On the i386, PC-relative offsets are relative to the start of the
11216 next instruction. That is, the address of the offset, plus its
11217 size, since the offset is always the last part of the insn. */
11218
11219 long
11220 md_pcrel_from (fixS *fixP)
11221 {
11222 return fixP->fx_size + fixP->fx_where + fixP->fx_frag->fr_address;
11223 }
11224
11225 #ifndef I386COFF
11226
11227 static void
11228 s_bss (int ignore ATTRIBUTE_UNUSED)
11229 {
11230 int temp;
11231
11232 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
11233 if (IS_ELF)
11234 obj_elf_section_change_hook ();
11235 #endif
11236 temp = get_absolute_expression ();
11237 subseg_set (bss_section, (subsegT) temp);
11238 demand_empty_rest_of_line ();
11239 }
11240
11241 #endif
11242
11243 void
11244 i386_validate_fix (fixS *fixp)
11245 {
11246 if (fixp->fx_subsy)
11247 {
11248 if (fixp->fx_subsy == GOT_symbol)
11249 {
11250 if (fixp->fx_r_type == BFD_RELOC_32_PCREL)
11251 {
11252 if (!object_64bit)
11253 abort ();
11254 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
11255 if (fixp->fx_tcbit2)
11256 fixp->fx_r_type = (fixp->fx_tcbit
11257 ? BFD_RELOC_X86_64_REX_GOTPCRELX
11258 : BFD_RELOC_X86_64_GOTPCRELX);
11259 else
11260 #endif
11261 fixp->fx_r_type = BFD_RELOC_X86_64_GOTPCREL;
11262 }
11263 else
11264 {
11265 if (!object_64bit)
11266 fixp->fx_r_type = BFD_RELOC_386_GOTOFF;
11267 else
11268 fixp->fx_r_type = BFD_RELOC_X86_64_GOTOFF64;
11269 }
11270 fixp->fx_subsy = 0;
11271 }
11272 }
11273 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
11274 else if (!object_64bit)
11275 {
11276 if (fixp->fx_r_type == BFD_RELOC_386_GOT32
11277 && fixp->fx_tcbit2)
11278 fixp->fx_r_type = BFD_RELOC_386_GOT32X;
11279 }
11280 #endif
11281 }
11282
11283 arelent *
11284 tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixp)
11285 {
11286 arelent *rel;
11287 bfd_reloc_code_real_type code;
11288
11289 switch (fixp->fx_r_type)
11290 {
11291 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
11292 case BFD_RELOC_SIZE32:
11293 case BFD_RELOC_SIZE64:
11294 if (S_IS_DEFINED (fixp->fx_addsy)
11295 && !S_IS_EXTERNAL (fixp->fx_addsy))
11296 {
11297 /* Resolve size relocation against local symbol to size of
11298 the symbol plus addend. */
11299 valueT value = S_GET_SIZE (fixp->fx_addsy) + fixp->fx_offset;
11300 if (fixp->fx_r_type == BFD_RELOC_SIZE32
11301 && !fits_in_unsigned_long (value))
11302 as_bad_where (fixp->fx_file, fixp->fx_line,
11303 _("symbol size computation overflow"));
11304 fixp->fx_addsy = NULL;
11305 fixp->fx_subsy = NULL;
11306 md_apply_fix (fixp, (valueT *) &value, NULL);
11307 return NULL;
11308 }
11309 #endif
11310 /* Fall through. */
11311
11312 case BFD_RELOC_X86_64_PLT32:
11313 case BFD_RELOC_X86_64_GOT32:
11314 case BFD_RELOC_X86_64_GOTPCREL:
11315 case BFD_RELOC_X86_64_GOTPCRELX:
11316 case BFD_RELOC_X86_64_REX_GOTPCRELX:
11317 case BFD_RELOC_386_PLT32:
11318 case BFD_RELOC_386_GOT32:
11319 case BFD_RELOC_386_GOT32X:
11320 case BFD_RELOC_386_GOTOFF:
11321 case BFD_RELOC_386_GOTPC:
11322 case BFD_RELOC_386_TLS_GD:
11323 case BFD_RELOC_386_TLS_LDM:
11324 case BFD_RELOC_386_TLS_LDO_32:
11325 case BFD_RELOC_386_TLS_IE_32:
11326 case BFD_RELOC_386_TLS_IE:
11327 case BFD_RELOC_386_TLS_GOTIE:
11328 case BFD_RELOC_386_TLS_LE_32:
11329 case BFD_RELOC_386_TLS_LE:
11330 case BFD_RELOC_386_TLS_GOTDESC:
11331 case BFD_RELOC_386_TLS_DESC_CALL:
11332 case BFD_RELOC_X86_64_TLSGD:
11333 case BFD_RELOC_X86_64_TLSLD:
11334 case BFD_RELOC_X86_64_DTPOFF32:
11335 case BFD_RELOC_X86_64_DTPOFF64:
11336 case BFD_RELOC_X86_64_GOTTPOFF:
11337 case BFD_RELOC_X86_64_TPOFF32:
11338 case BFD_RELOC_X86_64_TPOFF64:
11339 case BFD_RELOC_X86_64_GOTOFF64:
11340 case BFD_RELOC_X86_64_GOTPC32:
11341 case BFD_RELOC_X86_64_GOT64:
11342 case BFD_RELOC_X86_64_GOTPCREL64:
11343 case BFD_RELOC_X86_64_GOTPC64:
11344 case BFD_RELOC_X86_64_GOTPLT64:
11345 case BFD_RELOC_X86_64_PLTOFF64:
11346 case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
11347 case BFD_RELOC_X86_64_TLSDESC_CALL:
11348 case BFD_RELOC_RVA:
11349 case BFD_RELOC_VTABLE_ENTRY:
11350 case BFD_RELOC_VTABLE_INHERIT:
11351 #ifdef TE_PE
11352 case BFD_RELOC_32_SECREL:
11353 #endif
11354 code = fixp->fx_r_type;
11355 break;
11356 case BFD_RELOC_X86_64_32S:
11357 if (!fixp->fx_pcrel)
11358 {
11359 /* Don't turn BFD_RELOC_X86_64_32S into BFD_RELOC_32. */
11360 code = fixp->fx_r_type;
11361 break;
11362 }
11363 /* Fall through. */
11364 default:
11365 if (fixp->fx_pcrel)
11366 {
11367 switch (fixp->fx_size)
11368 {
11369 default:
11370 as_bad_where (fixp->fx_file, fixp->fx_line,
11371 _("can not do %d byte pc-relative relocation"),
11372 fixp->fx_size);
11373 code = BFD_RELOC_32_PCREL;
11374 break;
11375 case 1: code = BFD_RELOC_8_PCREL; break;
11376 case 2: code = BFD_RELOC_16_PCREL; break;
11377 case 4: code = BFD_RELOC_32_PCREL; break;
11378 #ifdef BFD64
11379 case 8: code = BFD_RELOC_64_PCREL; break;
11380 #endif
11381 }
11382 }
11383 else
11384 {
11385 switch (fixp->fx_size)
11386 {
11387 default:
11388 as_bad_where (fixp->fx_file, fixp->fx_line,
11389 _("can not do %d byte relocation"),
11390 fixp->fx_size);
11391 code = BFD_RELOC_32;
11392 break;
11393 case 1: code = BFD_RELOC_8; break;
11394 case 2: code = BFD_RELOC_16; break;
11395 case 4: code = BFD_RELOC_32; break;
11396 #ifdef BFD64
11397 case 8: code = BFD_RELOC_64; break;
11398 #endif
11399 }
11400 }
11401 break;
11402 }
11403
11404 if ((code == BFD_RELOC_32
11405 || code == BFD_RELOC_32_PCREL
11406 || code == BFD_RELOC_X86_64_32S)
11407 && GOT_symbol
11408 && fixp->fx_addsy == GOT_symbol)
11409 {
11410 if (!object_64bit)
11411 code = BFD_RELOC_386_GOTPC;
11412 else
11413 code = BFD_RELOC_X86_64_GOTPC32;
11414 }
11415 if ((code == BFD_RELOC_64 || code == BFD_RELOC_64_PCREL)
11416 && GOT_symbol
11417 && fixp->fx_addsy == GOT_symbol)
11418 {
11419 code = BFD_RELOC_X86_64_GOTPC64;
11420 }
11421
11422 rel = XNEW (arelent);
11423 rel->sym_ptr_ptr = XNEW (asymbol *);
11424 *rel->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
11425
11426 rel->address = fixp->fx_frag->fr_address + fixp->fx_where;
11427
11428 if (!use_rela_relocations)
11429 {
11430 /* HACK: Since i386 ELF uses Rel instead of Rela, encode the
11431 vtable entry to be used in the relocation's section offset. */
11432 if (fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
11433 rel->address = fixp->fx_offset;
11434 #if defined (OBJ_COFF) && defined (TE_PE)
11435 else if (fixp->fx_addsy && S_IS_WEAK (fixp->fx_addsy))
11436 rel->addend = fixp->fx_addnumber - (S_GET_VALUE (fixp->fx_addsy) * 2);
11437 else
11438 #endif
11439 rel->addend = 0;
11440 }
11441 /* Use the rela in 64bit mode. */
11442 else
11443 {
11444 if (disallow_64bit_reloc)
11445 switch (code)
11446 {
11447 case BFD_RELOC_X86_64_DTPOFF64:
11448 case BFD_RELOC_X86_64_TPOFF64:
11449 case BFD_RELOC_64_PCREL:
11450 case BFD_RELOC_X86_64_GOTOFF64:
11451 case BFD_RELOC_X86_64_GOT64:
11452 case BFD_RELOC_X86_64_GOTPCREL64:
11453 case BFD_RELOC_X86_64_GOTPC64:
11454 case BFD_RELOC_X86_64_GOTPLT64:
11455 case BFD_RELOC_X86_64_PLTOFF64:
11456 as_bad_where (fixp->fx_file, fixp->fx_line,
11457 _("cannot represent relocation type %s in x32 mode"),
11458 bfd_get_reloc_code_name (code));
11459 break;
11460 default:
11461 break;
11462 }
11463
11464 if (!fixp->fx_pcrel)
11465 rel->addend = fixp->fx_offset;
11466 else
11467 switch (code)
11468 {
11469 case BFD_RELOC_X86_64_PLT32:
11470 case BFD_RELOC_X86_64_GOT32:
11471 case BFD_RELOC_X86_64_GOTPCREL:
11472 case BFD_RELOC_X86_64_GOTPCRELX:
11473 case BFD_RELOC_X86_64_REX_GOTPCRELX:
11474 case BFD_RELOC_X86_64_TLSGD:
11475 case BFD_RELOC_X86_64_TLSLD:
11476 case BFD_RELOC_X86_64_GOTTPOFF:
11477 case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
11478 case BFD_RELOC_X86_64_TLSDESC_CALL:
11479 rel->addend = fixp->fx_offset - fixp->fx_size;
11480 break;
11481 default:
11482 rel->addend = (section->vma
11483 - fixp->fx_size
11484 + fixp->fx_addnumber
11485 + md_pcrel_from (fixp));
11486 break;
11487 }
11488 }
11489
11490 rel->howto = bfd_reloc_type_lookup (stdoutput, code);
11491 if (rel->howto == NULL)
11492 {
11493 as_bad_where (fixp->fx_file, fixp->fx_line,
11494 _("cannot represent relocation type %s"),
11495 bfd_get_reloc_code_name (code));
11496 /* Set howto to a garbage value so that we can keep going. */
11497 rel->howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_32);
11498 gas_assert (rel->howto != NULL);
11499 }
11500
11501 return rel;
11502 }
11503
11504 #include "tc-i386-intel.c"
11505
11506 void
11507 tc_x86_parse_to_dw2regnum (expressionS *exp)
11508 {
11509 int saved_naked_reg;
11510 char saved_register_dot;
11511
11512 saved_naked_reg = allow_naked_reg;
11513 allow_naked_reg = 1;
11514 saved_register_dot = register_chars['.'];
11515 register_chars['.'] = '.';
11516 allow_pseudo_reg = 1;
11517 expression_and_evaluate (exp);
11518 allow_pseudo_reg = 0;
11519 register_chars['.'] = saved_register_dot;
11520 allow_naked_reg = saved_naked_reg;
11521
11522 if (exp->X_op == O_register && exp->X_add_number >= 0)
11523 {
11524 if ((addressT) exp->X_add_number < i386_regtab_size)
11525 {
11526 exp->X_op = O_constant;
11527 exp->X_add_number = i386_regtab[exp->X_add_number]
11528 .dw2_regnum[flag_code >> 1];
11529 }
11530 else
11531 exp->X_op = O_illegal;
11532 }
11533 }
11534
11535 void
11536 tc_x86_frame_initial_instructions (void)
11537 {
11538 static unsigned int sp_regno[2];
11539
11540 if (!sp_regno[flag_code >> 1])
11541 {
11542 char *saved_input = input_line_pointer;
11543 char sp[][4] = {"esp", "rsp"};
11544 expressionS exp;
11545
11546 input_line_pointer = sp[flag_code >> 1];
11547 tc_x86_parse_to_dw2regnum (&exp);
11548 gas_assert (exp.X_op == O_constant);
11549 sp_regno[flag_code >> 1] = exp.X_add_number;
11550 input_line_pointer = saved_input;
11551 }
11552
11553 cfi_add_CFA_def_cfa (sp_regno[flag_code >> 1], -x86_cie_data_alignment);
11554 cfi_add_CFA_offset (x86_dwarf2_return_column, x86_cie_data_alignment);
11555 }
11556
11557 int
11558 x86_dwarf2_addr_size (void)
11559 {
11560 #if defined (OBJ_MAYBE_ELF) || defined (OBJ_ELF)
11561 if (x86_elf_abi == X86_64_X32_ABI)
11562 return 4;
11563 #endif
11564 return bfd_arch_bits_per_address (stdoutput) / 8;
11565 }
11566
11567 int
11568 i386_elf_section_type (const char *str, size_t len)
11569 {
11570 if (flag_code == CODE_64BIT
11571 && len == sizeof ("unwind") - 1
11572 && strncmp (str, "unwind", 6) == 0)
11573 return SHT_X86_64_UNWIND;
11574
11575 return -1;
11576 }
11577
11578 #ifdef TE_SOLARIS
11579 void
11580 i386_solaris_fix_up_eh_frame (segT sec)
11581 {
11582 if (flag_code == CODE_64BIT)
11583 elf_section_type (sec) = SHT_X86_64_UNWIND;
11584 }
11585 #endif
11586
11587 #ifdef TE_PE
11588 void
11589 tc_pe_dwarf2_emit_offset (symbolS *symbol, unsigned int size)
11590 {
11591 expressionS exp;
11592
11593 exp.X_op = O_secrel;
11594 exp.X_add_symbol = symbol;
11595 exp.X_add_number = 0;
11596 emit_expr (&exp, size);
11597 }
11598 #endif
11599
11600 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
11601 /* For ELF on x86-64, add support for SHF_X86_64_LARGE. */
11602
11603 bfd_vma
11604 x86_64_section_letter (int letter, const char **ptr_msg)
11605 {
11606 if (flag_code == CODE_64BIT)
11607 {
11608 if (letter == 'l')
11609 return SHF_X86_64_LARGE;
11610
11611 *ptr_msg = _("bad .section directive: want a,l,w,x,M,S,G,T in string");
11612 }
11613 else
11614 *ptr_msg = _("bad .section directive: want a,w,x,M,S,G,T in string");
11615 return -1;
11616 }
11617
11618 bfd_vma
11619 x86_64_section_word (char *str, size_t len)
11620 {
11621 if (len == 5 && flag_code == CODE_64BIT && CONST_STRNEQ (str, "large"))
11622 return SHF_X86_64_LARGE;
11623
11624 return -1;
11625 }
11626
11627 static void
11628 handle_large_common (int small ATTRIBUTE_UNUSED)
11629 {
11630 if (flag_code != CODE_64BIT)
11631 {
11632 s_comm_internal (0, elf_common_parse);
11633 as_warn (_(".largecomm supported only in 64bit mode, producing .comm"));
11634 }
11635 else
11636 {
11637 static segT lbss_section;
11638 asection *saved_com_section_ptr = elf_com_section_ptr;
11639 asection *saved_bss_section = bss_section;
11640
11641 if (lbss_section == NULL)
11642 {
11643 flagword applicable;
11644 segT seg = now_seg;
11645 subsegT subseg = now_subseg;
11646
11647 /* The .lbss section is for local .largecomm symbols. */
11648 lbss_section = subseg_new (".lbss", 0);
11649 applicable = bfd_applicable_section_flags (stdoutput);
11650 bfd_set_section_flags (stdoutput, lbss_section,
11651 applicable & SEC_ALLOC);
11652 seg_info (lbss_section)->bss = 1;
11653
11654 subseg_set (seg, subseg);
11655 }
11656
11657 elf_com_section_ptr = &_bfd_elf_large_com_section;
11658 bss_section = lbss_section;
11659
11660 s_comm_internal (0, elf_common_parse);
11661
11662 elf_com_section_ptr = saved_com_section_ptr;
11663 bss_section = saved_bss_section;
11664 }
11665 }
11666 #endif /* OBJ_ELF || OBJ_MAYBE_ELF */
This page took 0.359984 seconds and 4 git commands to generate.