x86: don't ignore mandatory pseudo prefixes
[deliverable/binutils-gdb.git] / gas / config / tc-i386.c
1 /* tc-i386.c -- Assemble code for the Intel 80386
2 Copyright (C) 1989-2020 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 #ifdef HAVE_LIMITS_H
37 #include <limits.h>
38 #else
39 #ifdef HAVE_SYS_PARAM_H
40 #include <sys/param.h>
41 #endif
42 #ifndef INT_MAX
43 #define INT_MAX (int) (((unsigned) (-1)) >> 1)
44 #endif
45 #endif
46
47 #ifndef INFER_ADDR_PREFIX
48 #define INFER_ADDR_PREFIX 1
49 #endif
50
51 #ifndef DEFAULT_ARCH
52 #define DEFAULT_ARCH "i386"
53 #endif
54
55 #ifndef INLINE
56 #if __GNUC__ >= 2
57 #define INLINE __inline__
58 #else
59 #define INLINE
60 #endif
61 #endif
62
63 /* Prefixes will be emitted in the order defined below.
64 WAIT_PREFIX must be the first prefix since FWAIT is really is an
65 instruction, and so must come before any prefixes.
66 The preferred prefix order is SEG_PREFIX, ADDR_PREFIX, DATA_PREFIX,
67 REP_PREFIX/HLE_PREFIX, LOCK_PREFIX. */
68 #define WAIT_PREFIX 0
69 #define SEG_PREFIX 1
70 #define ADDR_PREFIX 2
71 #define DATA_PREFIX 3
72 #define REP_PREFIX 4
73 #define HLE_PREFIX REP_PREFIX
74 #define BND_PREFIX REP_PREFIX
75 #define LOCK_PREFIX 5
76 #define REX_PREFIX 6 /* must come last. */
77 #define MAX_PREFIXES 7 /* max prefixes per opcode */
78
79 /* we define the syntax here (modulo base,index,scale syntax) */
80 #define REGISTER_PREFIX '%'
81 #define IMMEDIATE_PREFIX '$'
82 #define ABSOLUTE_PREFIX '*'
83
84 /* these are the instruction mnemonic suffixes in AT&T syntax or
85 memory operand size in Intel syntax. */
86 #define WORD_MNEM_SUFFIX 'w'
87 #define BYTE_MNEM_SUFFIX 'b'
88 #define SHORT_MNEM_SUFFIX 's'
89 #define LONG_MNEM_SUFFIX 'l'
90 #define QWORD_MNEM_SUFFIX 'q'
91 /* Intel Syntax. Use a non-ascii letter since since it never appears
92 in instructions. */
93 #define LONG_DOUBLE_MNEM_SUFFIX '\1'
94
95 #define END_OF_INSN '\0'
96
97 /* This matches the C -> StaticRounding alias in the opcode table. */
98 #define commutative staticrounding
99
100 /*
101 'templates' is for grouping together 'template' structures for opcodes
102 of the same name. This is only used for storing the insns in the grand
103 ole hash table of insns.
104 The templates themselves start at START and range up to (but not including)
105 END.
106 */
107 typedef struct
108 {
109 const insn_template *start;
110 const insn_template *end;
111 }
112 templates;
113
114 /* 386 operand encoding bytes: see 386 book for details of this. */
115 typedef struct
116 {
117 unsigned int regmem; /* codes register or memory operand */
118 unsigned int reg; /* codes register operand (or extended opcode) */
119 unsigned int mode; /* how to interpret regmem & reg */
120 }
121 modrm_byte;
122
123 /* x86-64 extension prefix. */
124 typedef int rex_byte;
125
126 /* 386 opcode byte to code indirect addressing. */
127 typedef struct
128 {
129 unsigned base;
130 unsigned index;
131 unsigned scale;
132 }
133 sib_byte;
134
135 /* x86 arch names, types and features */
136 typedef struct
137 {
138 const char *name; /* arch name */
139 unsigned int len; /* arch string length */
140 enum processor_type type; /* arch type */
141 i386_cpu_flags flags; /* cpu feature flags */
142 unsigned int skip; /* show_arch should skip this. */
143 }
144 arch_entry;
145
146 /* Used to turn off indicated flags. */
147 typedef struct
148 {
149 const char *name; /* arch name */
150 unsigned int len; /* arch string length */
151 i386_cpu_flags flags; /* cpu feature flags */
152 }
153 noarch_entry;
154
155 static void update_code_flag (int, int);
156 static void set_code_flag (int);
157 static void set_16bit_gcc_code_flag (int);
158 static void set_intel_syntax (int);
159 static void set_intel_mnemonic (int);
160 static void set_allow_index_reg (int);
161 static void set_check (int);
162 static void set_cpu_arch (int);
163 #ifdef TE_PE
164 static void pe_directive_secrel (int);
165 #endif
166 static void signed_cons (int);
167 static char *output_invalid (int c);
168 static int i386_finalize_immediate (segT, expressionS *, i386_operand_type,
169 const char *);
170 static int i386_finalize_displacement (segT, expressionS *, i386_operand_type,
171 const char *);
172 static int i386_att_operand (char *);
173 static int i386_intel_operand (char *, int);
174 static int i386_intel_simplify (expressionS *);
175 static int i386_intel_parse_name (const char *, expressionS *);
176 static const reg_entry *parse_register (char *, char **);
177 static char *parse_insn (char *, char *);
178 static char *parse_operands (char *, const char *);
179 static void swap_operands (void);
180 static void swap_2_operands (int, int);
181 static enum flag_code i386_addressing_mode (void);
182 static void optimize_imm (void);
183 static void optimize_disp (void);
184 static const insn_template *match_template (char);
185 static int check_string (void);
186 static int process_suffix (void);
187 static int check_byte_reg (void);
188 static int check_long_reg (void);
189 static int check_qword_reg (void);
190 static int check_word_reg (void);
191 static int finalize_imm (void);
192 static int process_operands (void);
193 static const seg_entry *build_modrm_byte (void);
194 static void output_insn (void);
195 static void output_imm (fragS *, offsetT);
196 static void output_disp (fragS *, offsetT);
197 #ifndef I386COFF
198 static void s_bss (int);
199 #endif
200 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
201 static void handle_large_common (int small ATTRIBUTE_UNUSED);
202
203 /* GNU_PROPERTY_X86_ISA_1_USED. */
204 static unsigned int x86_isa_1_used;
205 /* GNU_PROPERTY_X86_FEATURE_2_USED. */
206 static unsigned int x86_feature_2_used;
207 /* Generate x86 used ISA and feature properties. */
208 static unsigned int x86_used_note = DEFAULT_X86_USED_NOTE;
209 #endif
210
211 static const char *default_arch = DEFAULT_ARCH;
212
213 /* parse_register() returns this when a register alias cannot be used. */
214 static const reg_entry bad_reg = { "<bad>", OPERAND_TYPE_NONE, 0, 0,
215 { Dw2Inval, Dw2Inval } };
216
217 /* This struct describes rounding control and SAE in the instruction. */
218 struct RC_Operation
219 {
220 enum rc_type
221 {
222 rne = 0,
223 rd,
224 ru,
225 rz,
226 saeonly
227 } type;
228 int operand;
229 };
230
231 static struct RC_Operation rc_op;
232
233 /* The struct describes masking, applied to OPERAND in the instruction.
234 MASK is a pointer to the corresponding mask register. ZEROING tells
235 whether merging or zeroing mask is used. */
236 struct Mask_Operation
237 {
238 const reg_entry *mask;
239 unsigned int zeroing;
240 /* The operand where this operation is associated. */
241 int operand;
242 };
243
244 static struct Mask_Operation mask_op;
245
246 /* The struct describes broadcasting, applied to OPERAND. FACTOR is
247 broadcast factor. */
248 struct Broadcast_Operation
249 {
250 /* Type of broadcast: {1to2}, {1to4}, {1to8}, or {1to16}. */
251 int type;
252
253 /* Index of broadcasted operand. */
254 int operand;
255
256 /* Number of bytes to broadcast. */
257 int bytes;
258 };
259
260 static struct Broadcast_Operation broadcast_op;
261
262 /* VEX prefix. */
263 typedef struct
264 {
265 /* VEX prefix is either 2 byte or 3 byte. EVEX is 4 byte. */
266 unsigned char bytes[4];
267 unsigned int length;
268 /* Destination or source register specifier. */
269 const reg_entry *register_specifier;
270 } vex_prefix;
271
272 /* 'md_assemble ()' gathers together information and puts it into a
273 i386_insn. */
274
275 union i386_op
276 {
277 expressionS *disps;
278 expressionS *imms;
279 const reg_entry *regs;
280 };
281
282 enum i386_error
283 {
284 operand_size_mismatch,
285 operand_type_mismatch,
286 register_type_mismatch,
287 number_of_operands_mismatch,
288 invalid_instruction_suffix,
289 bad_imm4,
290 unsupported_with_intel_mnemonic,
291 unsupported_syntax,
292 unsupported,
293 invalid_vsib_address,
294 invalid_vector_register_set,
295 unsupported_vector_index_register,
296 unsupported_broadcast,
297 broadcast_needed,
298 unsupported_masking,
299 mask_not_on_destination,
300 no_default_mask,
301 unsupported_rc_sae,
302 rc_sae_operand_not_last_imm,
303 invalid_register_operand,
304 };
305
306 struct _i386_insn
307 {
308 /* TM holds the template for the insn were currently assembling. */
309 insn_template tm;
310
311 /* SUFFIX holds the instruction size suffix for byte, word, dword
312 or qword, if given. */
313 char suffix;
314
315 /* OPERANDS gives the number of given operands. */
316 unsigned int operands;
317
318 /* REG_OPERANDS, DISP_OPERANDS, MEM_OPERANDS, IMM_OPERANDS give the number
319 of given register, displacement, memory operands and immediate
320 operands. */
321 unsigned int reg_operands, disp_operands, mem_operands, imm_operands;
322
323 /* TYPES [i] is the type (see above #defines) which tells us how to
324 use OP[i] for the corresponding operand. */
325 i386_operand_type types[MAX_OPERANDS];
326
327 /* Displacement expression, immediate expression, or register for each
328 operand. */
329 union i386_op op[MAX_OPERANDS];
330
331 /* Flags for operands. */
332 unsigned int flags[MAX_OPERANDS];
333 #define Operand_PCrel 1
334 #define Operand_Mem 2
335
336 /* Relocation type for operand */
337 enum bfd_reloc_code_real reloc[MAX_OPERANDS];
338
339 /* BASE_REG, INDEX_REG, and LOG2_SCALE_FACTOR are used to encode
340 the base index byte below. */
341 const reg_entry *base_reg;
342 const reg_entry *index_reg;
343 unsigned int log2_scale_factor;
344
345 /* SEG gives the seg_entries of this insn. They are zero unless
346 explicit segment overrides are given. */
347 const seg_entry *seg[2];
348
349 /* Copied first memory operand string, for re-checking. */
350 char *memop1_string;
351
352 /* PREFIX holds all the given prefix opcodes (usually null).
353 PREFIXES is the number of prefix opcodes. */
354 unsigned int prefixes;
355 unsigned char prefix[MAX_PREFIXES];
356
357 /* Register is in low 3 bits of opcode. */
358 bfd_boolean short_form;
359
360 /* The operand to a branch insn indicates an absolute branch. */
361 bfd_boolean jumpabsolute;
362
363 /* Has MMX register operands. */
364 bfd_boolean has_regmmx;
365
366 /* Has XMM register operands. */
367 bfd_boolean has_regxmm;
368
369 /* Has YMM register operands. */
370 bfd_boolean has_regymm;
371
372 /* Has ZMM register operands. */
373 bfd_boolean has_regzmm;
374
375 /* Has GOTPC or TLS relocation. */
376 bfd_boolean has_gotpc_tls_reloc;
377
378 /* RM and SIB are the modrm byte and the sib byte where the
379 addressing modes of this insn are encoded. */
380 modrm_byte rm;
381 rex_byte rex;
382 rex_byte vrex;
383 sib_byte sib;
384 vex_prefix vex;
385
386 /* Masking attributes. */
387 struct Mask_Operation *mask;
388
389 /* Rounding control and SAE attributes. */
390 struct RC_Operation *rounding;
391
392 /* Broadcasting attributes. */
393 struct Broadcast_Operation *broadcast;
394
395 /* Compressed disp8*N attribute. */
396 unsigned int memshift;
397
398 /* Prefer load or store in encoding. */
399 enum
400 {
401 dir_encoding_default = 0,
402 dir_encoding_load,
403 dir_encoding_store,
404 dir_encoding_swap
405 } dir_encoding;
406
407 /* Prefer 8bit or 32bit displacement in encoding. */
408 enum
409 {
410 disp_encoding_default = 0,
411 disp_encoding_8bit,
412 disp_encoding_32bit
413 } disp_encoding;
414
415 /* Prefer the REX byte in encoding. */
416 bfd_boolean rex_encoding;
417
418 /* Disable instruction size optimization. */
419 bfd_boolean no_optimize;
420
421 /* How to encode vector instructions. */
422 enum
423 {
424 vex_encoding_default = 0,
425 vex_encoding_vex,
426 vex_encoding_vex3,
427 vex_encoding_evex,
428 vex_encoding_error
429 } vec_encoding;
430
431 /* REP prefix. */
432 const char *rep_prefix;
433
434 /* HLE prefix. */
435 const char *hle_prefix;
436
437 /* Have BND prefix. */
438 const char *bnd_prefix;
439
440 /* Have NOTRACK prefix. */
441 const char *notrack_prefix;
442
443 /* Error message. */
444 enum i386_error error;
445 };
446
447 typedef struct _i386_insn i386_insn;
448
449 /* Link RC type with corresponding string, that'll be looked for in
450 asm. */
451 struct RC_name
452 {
453 enum rc_type type;
454 const char *name;
455 unsigned int len;
456 };
457
458 static const struct RC_name RC_NamesTable[] =
459 {
460 { rne, STRING_COMMA_LEN ("rn-sae") },
461 { rd, STRING_COMMA_LEN ("rd-sae") },
462 { ru, STRING_COMMA_LEN ("ru-sae") },
463 { rz, STRING_COMMA_LEN ("rz-sae") },
464 { saeonly, STRING_COMMA_LEN ("sae") },
465 };
466
467 /* List of chars besides those in app.c:symbol_chars that can start an
468 operand. Used to prevent the scrubber eating vital white-space. */
469 const char extra_symbol_chars[] = "*%-([{}"
470 #ifdef LEX_AT
471 "@"
472 #endif
473 #ifdef LEX_QM
474 "?"
475 #endif
476 ;
477
478 #if (defined (TE_I386AIX) \
479 || ((defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)) \
480 && !defined (TE_GNU) \
481 && !defined (TE_LINUX) \
482 && !defined (TE_NACL) \
483 && !defined (TE_FreeBSD) \
484 && !defined (TE_DragonFly) \
485 && !defined (TE_NetBSD)))
486 /* This array holds the chars that always start a comment. If the
487 pre-processor is disabled, these aren't very useful. The option
488 --divide will remove '/' from this list. */
489 const char *i386_comment_chars = "#/";
490 #define SVR4_COMMENT_CHARS 1
491 #define PREFIX_SEPARATOR '\\'
492
493 #else
494 const char *i386_comment_chars = "#";
495 #define PREFIX_SEPARATOR '/'
496 #endif
497
498 /* This array holds the chars that only start a comment at the beginning of
499 a line. If the line seems to have the form '# 123 filename'
500 .line and .file directives will appear in the pre-processed output.
501 Note that input_file.c hand checks for '#' at the beginning of the
502 first line of the input file. This is because the compiler outputs
503 #NO_APP at the beginning of its output.
504 Also note that comments started like this one will always work if
505 '/' isn't otherwise defined. */
506 const char line_comment_chars[] = "#/";
507
508 const char line_separator_chars[] = ";";
509
510 /* Chars that can be used to separate mant from exp in floating point
511 nums. */
512 const char EXP_CHARS[] = "eE";
513
514 /* Chars that mean this number is a floating point constant
515 As in 0f12.456
516 or 0d1.2345e12. */
517 const char FLT_CHARS[] = "fFdDxX";
518
519 /* Tables for lexical analysis. */
520 static char mnemonic_chars[256];
521 static char register_chars[256];
522 static char operand_chars[256];
523 static char identifier_chars[256];
524 static char digit_chars[256];
525
526 /* Lexical macros. */
527 #define is_mnemonic_char(x) (mnemonic_chars[(unsigned char) x])
528 #define is_operand_char(x) (operand_chars[(unsigned char) x])
529 #define is_register_char(x) (register_chars[(unsigned char) x])
530 #define is_space_char(x) ((x) == ' ')
531 #define is_identifier_char(x) (identifier_chars[(unsigned char) x])
532 #define is_digit_char(x) (digit_chars[(unsigned char) x])
533
534 /* All non-digit non-letter characters that may occur in an operand. */
535 static char operand_special_chars[] = "%$-+(,)*._~/<>|&^!:[@]";
536
537 /* md_assemble() always leaves the strings it's passed unaltered. To
538 effect this we maintain a stack of saved characters that we've smashed
539 with '\0's (indicating end of strings for various sub-fields of the
540 assembler instruction). */
541 static char save_stack[32];
542 static char *save_stack_p;
543 #define END_STRING_AND_SAVE(s) \
544 do { *save_stack_p++ = *(s); *(s) = '\0'; } while (0)
545 #define RESTORE_END_STRING(s) \
546 do { *(s) = *--save_stack_p; } while (0)
547
548 /* The instruction we're assembling. */
549 static i386_insn i;
550
551 /* Possible templates for current insn. */
552 static const templates *current_templates;
553
554 /* Per instruction expressionS buffers: max displacements & immediates. */
555 static expressionS disp_expressions[MAX_MEMORY_OPERANDS];
556 static expressionS im_expressions[MAX_IMMEDIATE_OPERANDS];
557
558 /* Current operand we are working on. */
559 static int this_operand = -1;
560
561 /* We support four different modes. FLAG_CODE variable is used to distinguish
562 these. */
563
564 enum flag_code {
565 CODE_32BIT,
566 CODE_16BIT,
567 CODE_64BIT };
568
569 static enum flag_code flag_code;
570 static unsigned int object_64bit;
571 static unsigned int disallow_64bit_reloc;
572 static int use_rela_relocations = 0;
573 /* __tls_get_addr/___tls_get_addr symbol for TLS. */
574 static const char *tls_get_addr;
575
576 #if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \
577 || defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
578 || defined (TE_PE) || defined (TE_PEP) || defined (OBJ_MACH_O))
579
580 /* The ELF ABI to use. */
581 enum x86_elf_abi
582 {
583 I386_ABI,
584 X86_64_ABI,
585 X86_64_X32_ABI
586 };
587
588 static enum x86_elf_abi x86_elf_abi = I386_ABI;
589 #endif
590
591 #if defined (TE_PE) || defined (TE_PEP)
592 /* Use big object file format. */
593 static int use_big_obj = 0;
594 #endif
595
596 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
597 /* 1 if generating code for a shared library. */
598 static int shared = 0;
599 #endif
600
601 /* 1 for intel syntax,
602 0 if att syntax. */
603 static int intel_syntax = 0;
604
605 static enum x86_64_isa
606 {
607 amd64 = 1, /* AMD64 ISA. */
608 intel64 /* Intel64 ISA. */
609 } isa64;
610
611 /* 1 for intel mnemonic,
612 0 if att mnemonic. */
613 static int intel_mnemonic = !SYSV386_COMPAT;
614
615 /* 1 if pseudo registers are permitted. */
616 static int allow_pseudo_reg = 0;
617
618 /* 1 if register prefix % not required. */
619 static int allow_naked_reg = 0;
620
621 /* 1 if the assembler should add BND prefix for all control-transferring
622 instructions supporting it, even if this prefix wasn't specified
623 explicitly. */
624 static int add_bnd_prefix = 0;
625
626 /* 1 if pseudo index register, eiz/riz, is allowed . */
627 static int allow_index_reg = 0;
628
629 /* 1 if the assembler should ignore LOCK prefix, even if it was
630 specified explicitly. */
631 static int omit_lock_prefix = 0;
632
633 /* 1 if the assembler should encode lfence, mfence, and sfence as
634 "lock addl $0, (%{re}sp)". */
635 static int avoid_fence = 0;
636
637 /* 1 if lfence should be inserted after every load. */
638 static int lfence_after_load = 0;
639
640 /* Non-zero if lfence should be inserted before indirect branch. */
641 static enum lfence_before_indirect_branch_kind
642 {
643 lfence_branch_none = 0,
644 lfence_branch_register,
645 lfence_branch_memory,
646 lfence_branch_all
647 }
648 lfence_before_indirect_branch;
649
650 /* Non-zero if lfence should be inserted before ret. */
651 static enum lfence_before_ret_kind
652 {
653 lfence_before_ret_none = 0,
654 lfence_before_ret_not,
655 lfence_before_ret_or,
656 lfence_before_ret_shl
657 }
658 lfence_before_ret;
659
660 /* Types of previous instruction is .byte or prefix. */
661 static struct
662 {
663 segT seg;
664 const char *file;
665 const char *name;
666 unsigned int line;
667 enum last_insn_kind
668 {
669 last_insn_other = 0,
670 last_insn_directive,
671 last_insn_prefix
672 } kind;
673 } last_insn;
674
675 /* 1 if the assembler should generate relax relocations. */
676
677 static int generate_relax_relocations
678 = DEFAULT_GENERATE_X86_RELAX_RELOCATIONS;
679
680 static enum check_kind
681 {
682 check_none = 0,
683 check_warning,
684 check_error
685 }
686 sse_check, operand_check = check_warning;
687
688 /* Non-zero if branches should be aligned within power of 2 boundary. */
689 static int align_branch_power = 0;
690
691 /* Types of branches to align. */
692 enum align_branch_kind
693 {
694 align_branch_none = 0,
695 align_branch_jcc = 1,
696 align_branch_fused = 2,
697 align_branch_jmp = 3,
698 align_branch_call = 4,
699 align_branch_indirect = 5,
700 align_branch_ret = 6
701 };
702
703 /* Type bits of branches to align. */
704 enum align_branch_bit
705 {
706 align_branch_jcc_bit = 1 << align_branch_jcc,
707 align_branch_fused_bit = 1 << align_branch_fused,
708 align_branch_jmp_bit = 1 << align_branch_jmp,
709 align_branch_call_bit = 1 << align_branch_call,
710 align_branch_indirect_bit = 1 << align_branch_indirect,
711 align_branch_ret_bit = 1 << align_branch_ret
712 };
713
714 static unsigned int align_branch = (align_branch_jcc_bit
715 | align_branch_fused_bit
716 | align_branch_jmp_bit);
717
718 /* Types of condition jump used by macro-fusion. */
719 enum mf_jcc_kind
720 {
721 mf_jcc_jo = 0, /* base opcode 0x70 */
722 mf_jcc_jc, /* base opcode 0x72 */
723 mf_jcc_je, /* base opcode 0x74 */
724 mf_jcc_jna, /* base opcode 0x76 */
725 mf_jcc_js, /* base opcode 0x78 */
726 mf_jcc_jp, /* base opcode 0x7a */
727 mf_jcc_jl, /* base opcode 0x7c */
728 mf_jcc_jle, /* base opcode 0x7e */
729 };
730
731 /* Types of compare flag-modifying insntructions used by macro-fusion. */
732 enum mf_cmp_kind
733 {
734 mf_cmp_test_and, /* test/cmp */
735 mf_cmp_alu_cmp, /* add/sub/cmp */
736 mf_cmp_incdec /* inc/dec */
737 };
738
739 /* The maximum padding size for fused jcc. CMP like instruction can
740 be 9 bytes and jcc can be 6 bytes. Leave room just in case for
741 prefixes. */
742 #define MAX_FUSED_JCC_PADDING_SIZE 20
743
744 /* The maximum number of prefixes added for an instruction. */
745 static unsigned int align_branch_prefix_size = 5;
746
747 /* Optimization:
748 1. Clear the REX_W bit with register operand if possible.
749 2. Above plus use 128bit vector instruction to clear the full vector
750 register.
751 */
752 static int optimize = 0;
753
754 /* Optimization:
755 1. Clear the REX_W bit with register operand if possible.
756 2. Above plus use 128bit vector instruction to clear the full vector
757 register.
758 3. Above plus optimize "test{q,l,w} $imm8,%r{64,32,16}" to
759 "testb $imm7,%r8".
760 */
761 static int optimize_for_space = 0;
762
763 /* Register prefix used for error message. */
764 static const char *register_prefix = "%";
765
766 /* Used in 16 bit gcc mode to add an l suffix to call, ret, enter,
767 leave, push, and pop instructions so that gcc has the same stack
768 frame as in 32 bit mode. */
769 static char stackop_size = '\0';
770
771 /* Non-zero to optimize code alignment. */
772 int optimize_align_code = 1;
773
774 /* Non-zero to quieten some warnings. */
775 static int quiet_warnings = 0;
776
777 /* CPU name. */
778 static const char *cpu_arch_name = NULL;
779 static char *cpu_sub_arch_name = NULL;
780
781 /* CPU feature flags. */
782 static i386_cpu_flags cpu_arch_flags = CPU_UNKNOWN_FLAGS;
783
784 /* If we have selected a cpu we are generating instructions for. */
785 static int cpu_arch_tune_set = 0;
786
787 /* Cpu we are generating instructions for. */
788 enum processor_type cpu_arch_tune = PROCESSOR_UNKNOWN;
789
790 /* CPU feature flags of cpu we are generating instructions for. */
791 static i386_cpu_flags cpu_arch_tune_flags;
792
793 /* CPU instruction set architecture used. */
794 enum processor_type cpu_arch_isa = PROCESSOR_UNKNOWN;
795
796 /* CPU feature flags of instruction set architecture used. */
797 i386_cpu_flags cpu_arch_isa_flags;
798
799 /* If set, conditional jumps are not automatically promoted to handle
800 larger than a byte offset. */
801 static unsigned int no_cond_jump_promotion = 0;
802
803 /* Encode SSE instructions with VEX prefix. */
804 static unsigned int sse2avx;
805
806 /* Encode scalar AVX instructions with specific vector length. */
807 static enum
808 {
809 vex128 = 0,
810 vex256
811 } avxscalar;
812
813 /* Encode VEX WIG instructions with specific vex.w. */
814 static enum
815 {
816 vexw0 = 0,
817 vexw1
818 } vexwig;
819
820 /* Encode scalar EVEX LIG instructions with specific vector length. */
821 static enum
822 {
823 evexl128 = 0,
824 evexl256,
825 evexl512
826 } evexlig;
827
828 /* Encode EVEX WIG instructions with specific evex.w. */
829 static enum
830 {
831 evexw0 = 0,
832 evexw1
833 } evexwig;
834
835 /* Value to encode in EVEX RC bits, for SAE-only instructions. */
836 static enum rc_type evexrcig = rne;
837
838 /* Pre-defined "_GLOBAL_OFFSET_TABLE_". */
839 static symbolS *GOT_symbol;
840
841 /* The dwarf2 return column, adjusted for 32 or 64 bit. */
842 unsigned int x86_dwarf2_return_column;
843
844 /* The dwarf2 data alignment, adjusted for 32 or 64 bit. */
845 int x86_cie_data_alignment;
846
847 /* Interface to relax_segment.
848 There are 3 major relax states for 386 jump insns because the
849 different types of jumps add different sizes to frags when we're
850 figuring out what sort of jump to choose to reach a given label.
851
852 BRANCH_PADDING, BRANCH_PREFIX and FUSED_JCC_PADDING are used to align
853 branches which are handled by md_estimate_size_before_relax() and
854 i386_generic_table_relax_frag(). */
855
856 /* Types. */
857 #define UNCOND_JUMP 0
858 #define COND_JUMP 1
859 #define COND_JUMP86 2
860 #define BRANCH_PADDING 3
861 #define BRANCH_PREFIX 4
862 #define FUSED_JCC_PADDING 5
863
864 /* Sizes. */
865 #define CODE16 1
866 #define SMALL 0
867 #define SMALL16 (SMALL | CODE16)
868 #define BIG 2
869 #define BIG16 (BIG | CODE16)
870
871 #ifndef INLINE
872 #ifdef __GNUC__
873 #define INLINE __inline__
874 #else
875 #define INLINE
876 #endif
877 #endif
878
879 #define ENCODE_RELAX_STATE(type, size) \
880 ((relax_substateT) (((type) << 2) | (size)))
881 #define TYPE_FROM_RELAX_STATE(s) \
882 ((s) >> 2)
883 #define DISP_SIZE_FROM_RELAX_STATE(s) \
884 ((((s) & 3) == BIG ? 4 : (((s) & 3) == BIG16 ? 2 : 1)))
885
886 /* This table is used by relax_frag to promote short jumps to long
887 ones where necessary. SMALL (short) jumps may be promoted to BIG
888 (32 bit long) ones, and SMALL16 jumps to BIG16 (16 bit long). We
889 don't allow a short jump in a 32 bit code segment to be promoted to
890 a 16 bit offset jump because it's slower (requires data size
891 prefix), and doesn't work, unless the destination is in the bottom
892 64k of the code segment (The top 16 bits of eip are zeroed). */
893
894 const relax_typeS md_relax_table[] =
895 {
896 /* The fields are:
897 1) most positive reach of this state,
898 2) most negative reach of this state,
899 3) how many bytes this mode will have in the variable part of the frag
900 4) which index into the table to try if we can't fit into this one. */
901
902 /* UNCOND_JUMP states. */
903 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (UNCOND_JUMP, BIG)},
904 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (UNCOND_JUMP, BIG16)},
905 /* dword jmp adds 4 bytes to frag:
906 0 extra opcode bytes, 4 displacement bytes. */
907 {0, 0, 4, 0},
908 /* word jmp adds 2 byte2 to frag:
909 0 extra opcode bytes, 2 displacement bytes. */
910 {0, 0, 2, 0},
911
912 /* COND_JUMP states. */
913 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP, BIG)},
914 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP, BIG16)},
915 /* dword conditionals adds 5 bytes to frag:
916 1 extra opcode byte, 4 displacement bytes. */
917 {0, 0, 5, 0},
918 /* word conditionals add 3 bytes to frag:
919 1 extra opcode byte, 2 displacement bytes. */
920 {0, 0, 3, 0},
921
922 /* COND_JUMP86 states. */
923 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP86, BIG)},
924 {127 + 1, -128 + 1, 1, ENCODE_RELAX_STATE (COND_JUMP86, BIG16)},
925 /* dword conditionals adds 5 bytes to frag:
926 1 extra opcode byte, 4 displacement bytes. */
927 {0, 0, 5, 0},
928 /* word conditionals add 4 bytes to frag:
929 1 displacement byte and a 3 byte long branch insn. */
930 {0, 0, 4, 0}
931 };
932
933 static const arch_entry cpu_arch[] =
934 {
935 /* Do not replace the first two entries - i386_target_format()
936 relies on them being there in this order. */
937 { STRING_COMMA_LEN ("generic32"), PROCESSOR_GENERIC32,
938 CPU_GENERIC32_FLAGS, 0 },
939 { STRING_COMMA_LEN ("generic64"), PROCESSOR_GENERIC64,
940 CPU_GENERIC64_FLAGS, 0 },
941 { STRING_COMMA_LEN ("i8086"), PROCESSOR_UNKNOWN,
942 CPU_NONE_FLAGS, 0 },
943 { STRING_COMMA_LEN ("i186"), PROCESSOR_UNKNOWN,
944 CPU_I186_FLAGS, 0 },
945 { STRING_COMMA_LEN ("i286"), PROCESSOR_UNKNOWN,
946 CPU_I286_FLAGS, 0 },
947 { STRING_COMMA_LEN ("i386"), PROCESSOR_I386,
948 CPU_I386_FLAGS, 0 },
949 { STRING_COMMA_LEN ("i486"), PROCESSOR_I486,
950 CPU_I486_FLAGS, 0 },
951 { STRING_COMMA_LEN ("i586"), PROCESSOR_PENTIUM,
952 CPU_I586_FLAGS, 0 },
953 { STRING_COMMA_LEN ("i686"), PROCESSOR_PENTIUMPRO,
954 CPU_I686_FLAGS, 0 },
955 { STRING_COMMA_LEN ("pentium"), PROCESSOR_PENTIUM,
956 CPU_I586_FLAGS, 0 },
957 { STRING_COMMA_LEN ("pentiumpro"), PROCESSOR_PENTIUMPRO,
958 CPU_PENTIUMPRO_FLAGS, 0 },
959 { STRING_COMMA_LEN ("pentiumii"), PROCESSOR_PENTIUMPRO,
960 CPU_P2_FLAGS, 0 },
961 { STRING_COMMA_LEN ("pentiumiii"),PROCESSOR_PENTIUMPRO,
962 CPU_P3_FLAGS, 0 },
963 { STRING_COMMA_LEN ("pentium4"), PROCESSOR_PENTIUM4,
964 CPU_P4_FLAGS, 0 },
965 { STRING_COMMA_LEN ("prescott"), PROCESSOR_NOCONA,
966 CPU_CORE_FLAGS, 0 },
967 { STRING_COMMA_LEN ("nocona"), PROCESSOR_NOCONA,
968 CPU_NOCONA_FLAGS, 0 },
969 { STRING_COMMA_LEN ("yonah"), PROCESSOR_CORE,
970 CPU_CORE_FLAGS, 1 },
971 { STRING_COMMA_LEN ("core"), PROCESSOR_CORE,
972 CPU_CORE_FLAGS, 0 },
973 { STRING_COMMA_LEN ("merom"), PROCESSOR_CORE2,
974 CPU_CORE2_FLAGS, 1 },
975 { STRING_COMMA_LEN ("core2"), PROCESSOR_CORE2,
976 CPU_CORE2_FLAGS, 0 },
977 { STRING_COMMA_LEN ("corei7"), PROCESSOR_COREI7,
978 CPU_COREI7_FLAGS, 0 },
979 { STRING_COMMA_LEN ("l1om"), PROCESSOR_L1OM,
980 CPU_L1OM_FLAGS, 0 },
981 { STRING_COMMA_LEN ("k1om"), PROCESSOR_K1OM,
982 CPU_K1OM_FLAGS, 0 },
983 { STRING_COMMA_LEN ("iamcu"), PROCESSOR_IAMCU,
984 CPU_IAMCU_FLAGS, 0 },
985 { STRING_COMMA_LEN ("k6"), PROCESSOR_K6,
986 CPU_K6_FLAGS, 0 },
987 { STRING_COMMA_LEN ("k6_2"), PROCESSOR_K6,
988 CPU_K6_2_FLAGS, 0 },
989 { STRING_COMMA_LEN ("athlon"), PROCESSOR_ATHLON,
990 CPU_ATHLON_FLAGS, 0 },
991 { STRING_COMMA_LEN ("sledgehammer"), PROCESSOR_K8,
992 CPU_K8_FLAGS, 1 },
993 { STRING_COMMA_LEN ("opteron"), PROCESSOR_K8,
994 CPU_K8_FLAGS, 0 },
995 { STRING_COMMA_LEN ("k8"), PROCESSOR_K8,
996 CPU_K8_FLAGS, 0 },
997 { STRING_COMMA_LEN ("amdfam10"), PROCESSOR_AMDFAM10,
998 CPU_AMDFAM10_FLAGS, 0 },
999 { STRING_COMMA_LEN ("bdver1"), PROCESSOR_BD,
1000 CPU_BDVER1_FLAGS, 0 },
1001 { STRING_COMMA_LEN ("bdver2"), PROCESSOR_BD,
1002 CPU_BDVER2_FLAGS, 0 },
1003 { STRING_COMMA_LEN ("bdver3"), PROCESSOR_BD,
1004 CPU_BDVER3_FLAGS, 0 },
1005 { STRING_COMMA_LEN ("bdver4"), PROCESSOR_BD,
1006 CPU_BDVER4_FLAGS, 0 },
1007 { STRING_COMMA_LEN ("znver1"), PROCESSOR_ZNVER,
1008 CPU_ZNVER1_FLAGS, 0 },
1009 { STRING_COMMA_LEN ("znver2"), PROCESSOR_ZNVER,
1010 CPU_ZNVER2_FLAGS, 0 },
1011 { STRING_COMMA_LEN ("btver1"), PROCESSOR_BT,
1012 CPU_BTVER1_FLAGS, 0 },
1013 { STRING_COMMA_LEN ("btver2"), PROCESSOR_BT,
1014 CPU_BTVER2_FLAGS, 0 },
1015 { STRING_COMMA_LEN (".8087"), PROCESSOR_UNKNOWN,
1016 CPU_8087_FLAGS, 0 },
1017 { STRING_COMMA_LEN (".287"), PROCESSOR_UNKNOWN,
1018 CPU_287_FLAGS, 0 },
1019 { STRING_COMMA_LEN (".387"), PROCESSOR_UNKNOWN,
1020 CPU_387_FLAGS, 0 },
1021 { STRING_COMMA_LEN (".687"), PROCESSOR_UNKNOWN,
1022 CPU_687_FLAGS, 0 },
1023 { STRING_COMMA_LEN (".cmov"), PROCESSOR_UNKNOWN,
1024 CPU_CMOV_FLAGS, 0 },
1025 { STRING_COMMA_LEN (".fxsr"), PROCESSOR_UNKNOWN,
1026 CPU_FXSR_FLAGS, 0 },
1027 { STRING_COMMA_LEN (".mmx"), PROCESSOR_UNKNOWN,
1028 CPU_MMX_FLAGS, 0 },
1029 { STRING_COMMA_LEN (".sse"), PROCESSOR_UNKNOWN,
1030 CPU_SSE_FLAGS, 0 },
1031 { STRING_COMMA_LEN (".sse2"), PROCESSOR_UNKNOWN,
1032 CPU_SSE2_FLAGS, 0 },
1033 { STRING_COMMA_LEN (".sse3"), PROCESSOR_UNKNOWN,
1034 CPU_SSE3_FLAGS, 0 },
1035 { STRING_COMMA_LEN (".sse4a"), PROCESSOR_UNKNOWN,
1036 CPU_SSE4A_FLAGS, 0 },
1037 { STRING_COMMA_LEN (".ssse3"), PROCESSOR_UNKNOWN,
1038 CPU_SSSE3_FLAGS, 0 },
1039 { STRING_COMMA_LEN (".sse4.1"), PROCESSOR_UNKNOWN,
1040 CPU_SSE4_1_FLAGS, 0 },
1041 { STRING_COMMA_LEN (".sse4.2"), PROCESSOR_UNKNOWN,
1042 CPU_SSE4_2_FLAGS, 0 },
1043 { STRING_COMMA_LEN (".sse4"), PROCESSOR_UNKNOWN,
1044 CPU_SSE4_2_FLAGS, 0 },
1045 { STRING_COMMA_LEN (".avx"), PROCESSOR_UNKNOWN,
1046 CPU_AVX_FLAGS, 0 },
1047 { STRING_COMMA_LEN (".avx2"), PROCESSOR_UNKNOWN,
1048 CPU_AVX2_FLAGS, 0 },
1049 { STRING_COMMA_LEN (".avx512f"), PROCESSOR_UNKNOWN,
1050 CPU_AVX512F_FLAGS, 0 },
1051 { STRING_COMMA_LEN (".avx512cd"), PROCESSOR_UNKNOWN,
1052 CPU_AVX512CD_FLAGS, 0 },
1053 { STRING_COMMA_LEN (".avx512er"), PROCESSOR_UNKNOWN,
1054 CPU_AVX512ER_FLAGS, 0 },
1055 { STRING_COMMA_LEN (".avx512pf"), PROCESSOR_UNKNOWN,
1056 CPU_AVX512PF_FLAGS, 0 },
1057 { STRING_COMMA_LEN (".avx512dq"), PROCESSOR_UNKNOWN,
1058 CPU_AVX512DQ_FLAGS, 0 },
1059 { STRING_COMMA_LEN (".avx512bw"), PROCESSOR_UNKNOWN,
1060 CPU_AVX512BW_FLAGS, 0 },
1061 { STRING_COMMA_LEN (".avx512vl"), PROCESSOR_UNKNOWN,
1062 CPU_AVX512VL_FLAGS, 0 },
1063 { STRING_COMMA_LEN (".vmx"), PROCESSOR_UNKNOWN,
1064 CPU_VMX_FLAGS, 0 },
1065 { STRING_COMMA_LEN (".vmfunc"), PROCESSOR_UNKNOWN,
1066 CPU_VMFUNC_FLAGS, 0 },
1067 { STRING_COMMA_LEN (".smx"), PROCESSOR_UNKNOWN,
1068 CPU_SMX_FLAGS, 0 },
1069 { STRING_COMMA_LEN (".xsave"), PROCESSOR_UNKNOWN,
1070 CPU_XSAVE_FLAGS, 0 },
1071 { STRING_COMMA_LEN (".xsaveopt"), PROCESSOR_UNKNOWN,
1072 CPU_XSAVEOPT_FLAGS, 0 },
1073 { STRING_COMMA_LEN (".xsavec"), PROCESSOR_UNKNOWN,
1074 CPU_XSAVEC_FLAGS, 0 },
1075 { STRING_COMMA_LEN (".xsaves"), PROCESSOR_UNKNOWN,
1076 CPU_XSAVES_FLAGS, 0 },
1077 { STRING_COMMA_LEN (".aes"), PROCESSOR_UNKNOWN,
1078 CPU_AES_FLAGS, 0 },
1079 { STRING_COMMA_LEN (".pclmul"), PROCESSOR_UNKNOWN,
1080 CPU_PCLMUL_FLAGS, 0 },
1081 { STRING_COMMA_LEN (".clmul"), PROCESSOR_UNKNOWN,
1082 CPU_PCLMUL_FLAGS, 1 },
1083 { STRING_COMMA_LEN (".fsgsbase"), PROCESSOR_UNKNOWN,
1084 CPU_FSGSBASE_FLAGS, 0 },
1085 { STRING_COMMA_LEN (".rdrnd"), PROCESSOR_UNKNOWN,
1086 CPU_RDRND_FLAGS, 0 },
1087 { STRING_COMMA_LEN (".f16c"), PROCESSOR_UNKNOWN,
1088 CPU_F16C_FLAGS, 0 },
1089 { STRING_COMMA_LEN (".bmi2"), PROCESSOR_UNKNOWN,
1090 CPU_BMI2_FLAGS, 0 },
1091 { STRING_COMMA_LEN (".fma"), PROCESSOR_UNKNOWN,
1092 CPU_FMA_FLAGS, 0 },
1093 { STRING_COMMA_LEN (".fma4"), PROCESSOR_UNKNOWN,
1094 CPU_FMA4_FLAGS, 0 },
1095 { STRING_COMMA_LEN (".xop"), PROCESSOR_UNKNOWN,
1096 CPU_XOP_FLAGS, 0 },
1097 { STRING_COMMA_LEN (".lwp"), PROCESSOR_UNKNOWN,
1098 CPU_LWP_FLAGS, 0 },
1099 { STRING_COMMA_LEN (".movbe"), PROCESSOR_UNKNOWN,
1100 CPU_MOVBE_FLAGS, 0 },
1101 { STRING_COMMA_LEN (".cx16"), PROCESSOR_UNKNOWN,
1102 CPU_CX16_FLAGS, 0 },
1103 { STRING_COMMA_LEN (".ept"), PROCESSOR_UNKNOWN,
1104 CPU_EPT_FLAGS, 0 },
1105 { STRING_COMMA_LEN (".lzcnt"), PROCESSOR_UNKNOWN,
1106 CPU_LZCNT_FLAGS, 0 },
1107 { STRING_COMMA_LEN (".popcnt"), PROCESSOR_UNKNOWN,
1108 CPU_POPCNT_FLAGS, 0 },
1109 { STRING_COMMA_LEN (".hle"), PROCESSOR_UNKNOWN,
1110 CPU_HLE_FLAGS, 0 },
1111 { STRING_COMMA_LEN (".rtm"), PROCESSOR_UNKNOWN,
1112 CPU_RTM_FLAGS, 0 },
1113 { STRING_COMMA_LEN (".invpcid"), PROCESSOR_UNKNOWN,
1114 CPU_INVPCID_FLAGS, 0 },
1115 { STRING_COMMA_LEN (".clflush"), PROCESSOR_UNKNOWN,
1116 CPU_CLFLUSH_FLAGS, 0 },
1117 { STRING_COMMA_LEN (".nop"), PROCESSOR_UNKNOWN,
1118 CPU_NOP_FLAGS, 0 },
1119 { STRING_COMMA_LEN (".syscall"), PROCESSOR_UNKNOWN,
1120 CPU_SYSCALL_FLAGS, 0 },
1121 { STRING_COMMA_LEN (".rdtscp"), PROCESSOR_UNKNOWN,
1122 CPU_RDTSCP_FLAGS, 0 },
1123 { STRING_COMMA_LEN (".3dnow"), PROCESSOR_UNKNOWN,
1124 CPU_3DNOW_FLAGS, 0 },
1125 { STRING_COMMA_LEN (".3dnowa"), PROCESSOR_UNKNOWN,
1126 CPU_3DNOWA_FLAGS, 0 },
1127 { STRING_COMMA_LEN (".padlock"), PROCESSOR_UNKNOWN,
1128 CPU_PADLOCK_FLAGS, 0 },
1129 { STRING_COMMA_LEN (".pacifica"), PROCESSOR_UNKNOWN,
1130 CPU_SVME_FLAGS, 1 },
1131 { STRING_COMMA_LEN (".svme"), PROCESSOR_UNKNOWN,
1132 CPU_SVME_FLAGS, 0 },
1133 { STRING_COMMA_LEN (".sse4a"), PROCESSOR_UNKNOWN,
1134 CPU_SSE4A_FLAGS, 0 },
1135 { STRING_COMMA_LEN (".abm"), PROCESSOR_UNKNOWN,
1136 CPU_ABM_FLAGS, 0 },
1137 { STRING_COMMA_LEN (".bmi"), PROCESSOR_UNKNOWN,
1138 CPU_BMI_FLAGS, 0 },
1139 { STRING_COMMA_LEN (".tbm"), PROCESSOR_UNKNOWN,
1140 CPU_TBM_FLAGS, 0 },
1141 { STRING_COMMA_LEN (".adx"), PROCESSOR_UNKNOWN,
1142 CPU_ADX_FLAGS, 0 },
1143 { STRING_COMMA_LEN (".rdseed"), PROCESSOR_UNKNOWN,
1144 CPU_RDSEED_FLAGS, 0 },
1145 { STRING_COMMA_LEN (".prfchw"), PROCESSOR_UNKNOWN,
1146 CPU_PRFCHW_FLAGS, 0 },
1147 { STRING_COMMA_LEN (".smap"), PROCESSOR_UNKNOWN,
1148 CPU_SMAP_FLAGS, 0 },
1149 { STRING_COMMA_LEN (".mpx"), PROCESSOR_UNKNOWN,
1150 CPU_MPX_FLAGS, 0 },
1151 { STRING_COMMA_LEN (".sha"), PROCESSOR_UNKNOWN,
1152 CPU_SHA_FLAGS, 0 },
1153 { STRING_COMMA_LEN (".clflushopt"), PROCESSOR_UNKNOWN,
1154 CPU_CLFLUSHOPT_FLAGS, 0 },
1155 { STRING_COMMA_LEN (".prefetchwt1"), PROCESSOR_UNKNOWN,
1156 CPU_PREFETCHWT1_FLAGS, 0 },
1157 { STRING_COMMA_LEN (".se1"), PROCESSOR_UNKNOWN,
1158 CPU_SE1_FLAGS, 0 },
1159 { STRING_COMMA_LEN (".clwb"), PROCESSOR_UNKNOWN,
1160 CPU_CLWB_FLAGS, 0 },
1161 { STRING_COMMA_LEN (".avx512ifma"), PROCESSOR_UNKNOWN,
1162 CPU_AVX512IFMA_FLAGS, 0 },
1163 { STRING_COMMA_LEN (".avx512vbmi"), PROCESSOR_UNKNOWN,
1164 CPU_AVX512VBMI_FLAGS, 0 },
1165 { STRING_COMMA_LEN (".avx512_4fmaps"), PROCESSOR_UNKNOWN,
1166 CPU_AVX512_4FMAPS_FLAGS, 0 },
1167 { STRING_COMMA_LEN (".avx512_4vnniw"), PROCESSOR_UNKNOWN,
1168 CPU_AVX512_4VNNIW_FLAGS, 0 },
1169 { STRING_COMMA_LEN (".avx512_vpopcntdq"), PROCESSOR_UNKNOWN,
1170 CPU_AVX512_VPOPCNTDQ_FLAGS, 0 },
1171 { STRING_COMMA_LEN (".avx512_vbmi2"), PROCESSOR_UNKNOWN,
1172 CPU_AVX512_VBMI2_FLAGS, 0 },
1173 { STRING_COMMA_LEN (".avx512_vnni"), PROCESSOR_UNKNOWN,
1174 CPU_AVX512_VNNI_FLAGS, 0 },
1175 { STRING_COMMA_LEN (".avx512_bitalg"), PROCESSOR_UNKNOWN,
1176 CPU_AVX512_BITALG_FLAGS, 0 },
1177 { STRING_COMMA_LEN (".clzero"), PROCESSOR_UNKNOWN,
1178 CPU_CLZERO_FLAGS, 0 },
1179 { STRING_COMMA_LEN (".mwaitx"), PROCESSOR_UNKNOWN,
1180 CPU_MWAITX_FLAGS, 0 },
1181 { STRING_COMMA_LEN (".ospke"), PROCESSOR_UNKNOWN,
1182 CPU_OSPKE_FLAGS, 0 },
1183 { STRING_COMMA_LEN (".rdpid"), PROCESSOR_UNKNOWN,
1184 CPU_RDPID_FLAGS, 0 },
1185 { STRING_COMMA_LEN (".ptwrite"), PROCESSOR_UNKNOWN,
1186 CPU_PTWRITE_FLAGS, 0 },
1187 { STRING_COMMA_LEN (".ibt"), PROCESSOR_UNKNOWN,
1188 CPU_IBT_FLAGS, 0 },
1189 { STRING_COMMA_LEN (".shstk"), PROCESSOR_UNKNOWN,
1190 CPU_SHSTK_FLAGS, 0 },
1191 { STRING_COMMA_LEN (".gfni"), PROCESSOR_UNKNOWN,
1192 CPU_GFNI_FLAGS, 0 },
1193 { STRING_COMMA_LEN (".vaes"), PROCESSOR_UNKNOWN,
1194 CPU_VAES_FLAGS, 0 },
1195 { STRING_COMMA_LEN (".vpclmulqdq"), PROCESSOR_UNKNOWN,
1196 CPU_VPCLMULQDQ_FLAGS, 0 },
1197 { STRING_COMMA_LEN (".wbnoinvd"), PROCESSOR_UNKNOWN,
1198 CPU_WBNOINVD_FLAGS, 0 },
1199 { STRING_COMMA_LEN (".pconfig"), PROCESSOR_UNKNOWN,
1200 CPU_PCONFIG_FLAGS, 0 },
1201 { STRING_COMMA_LEN (".waitpkg"), PROCESSOR_UNKNOWN,
1202 CPU_WAITPKG_FLAGS, 0 },
1203 { STRING_COMMA_LEN (".cldemote"), PROCESSOR_UNKNOWN,
1204 CPU_CLDEMOTE_FLAGS, 0 },
1205 { STRING_COMMA_LEN (".movdiri"), PROCESSOR_UNKNOWN,
1206 CPU_MOVDIRI_FLAGS, 0 },
1207 { STRING_COMMA_LEN (".movdir64b"), PROCESSOR_UNKNOWN,
1208 CPU_MOVDIR64B_FLAGS, 0 },
1209 { STRING_COMMA_LEN (".avx512_bf16"), PROCESSOR_UNKNOWN,
1210 CPU_AVX512_BF16_FLAGS, 0 },
1211 { STRING_COMMA_LEN (".avx512_vp2intersect"), PROCESSOR_UNKNOWN,
1212 CPU_AVX512_VP2INTERSECT_FLAGS, 0 },
1213 { STRING_COMMA_LEN (".enqcmd"), PROCESSOR_UNKNOWN,
1214 CPU_ENQCMD_FLAGS, 0 },
1215 { STRING_COMMA_LEN (".serialize"), PROCESSOR_UNKNOWN,
1216 CPU_SERIALIZE_FLAGS, 0 },
1217 { STRING_COMMA_LEN (".rdpru"), PROCESSOR_UNKNOWN,
1218 CPU_RDPRU_FLAGS, 0 },
1219 { STRING_COMMA_LEN (".mcommit"), PROCESSOR_UNKNOWN,
1220 CPU_MCOMMIT_FLAGS, 0 },
1221 { STRING_COMMA_LEN (".sev_es"), PROCESSOR_UNKNOWN,
1222 CPU_SEV_ES_FLAGS, 0 },
1223 { STRING_COMMA_LEN (".tsxldtrk"), PROCESSOR_UNKNOWN,
1224 CPU_TSXLDTRK_FLAGS, 0 },
1225 };
1226
1227 static const noarch_entry cpu_noarch[] =
1228 {
1229 { STRING_COMMA_LEN ("no87"), CPU_ANY_X87_FLAGS },
1230 { STRING_COMMA_LEN ("no287"), CPU_ANY_287_FLAGS },
1231 { STRING_COMMA_LEN ("no387"), CPU_ANY_387_FLAGS },
1232 { STRING_COMMA_LEN ("no687"), CPU_ANY_687_FLAGS },
1233 { STRING_COMMA_LEN ("nocmov"), CPU_ANY_CMOV_FLAGS },
1234 { STRING_COMMA_LEN ("nofxsr"), CPU_ANY_FXSR_FLAGS },
1235 { STRING_COMMA_LEN ("nommx"), CPU_ANY_MMX_FLAGS },
1236 { STRING_COMMA_LEN ("nosse"), CPU_ANY_SSE_FLAGS },
1237 { STRING_COMMA_LEN ("nosse2"), CPU_ANY_SSE2_FLAGS },
1238 { STRING_COMMA_LEN ("nosse3"), CPU_ANY_SSE3_FLAGS },
1239 { STRING_COMMA_LEN ("nosse4a"), CPU_ANY_SSE4A_FLAGS },
1240 { STRING_COMMA_LEN ("nossse3"), CPU_ANY_SSSE3_FLAGS },
1241 { STRING_COMMA_LEN ("nosse4.1"), CPU_ANY_SSE4_1_FLAGS },
1242 { STRING_COMMA_LEN ("nosse4.2"), CPU_ANY_SSE4_2_FLAGS },
1243 { STRING_COMMA_LEN ("nosse4"), CPU_ANY_SSE4_1_FLAGS },
1244 { STRING_COMMA_LEN ("noavx"), CPU_ANY_AVX_FLAGS },
1245 { STRING_COMMA_LEN ("noavx2"), CPU_ANY_AVX2_FLAGS },
1246 { STRING_COMMA_LEN ("noavx512f"), CPU_ANY_AVX512F_FLAGS },
1247 { STRING_COMMA_LEN ("noavx512cd"), CPU_ANY_AVX512CD_FLAGS },
1248 { STRING_COMMA_LEN ("noavx512er"), CPU_ANY_AVX512ER_FLAGS },
1249 { STRING_COMMA_LEN ("noavx512pf"), CPU_ANY_AVX512PF_FLAGS },
1250 { STRING_COMMA_LEN ("noavx512dq"), CPU_ANY_AVX512DQ_FLAGS },
1251 { STRING_COMMA_LEN ("noavx512bw"), CPU_ANY_AVX512BW_FLAGS },
1252 { STRING_COMMA_LEN ("noavx512vl"), CPU_ANY_AVX512VL_FLAGS },
1253 { STRING_COMMA_LEN ("noavx512ifma"), CPU_ANY_AVX512IFMA_FLAGS },
1254 { STRING_COMMA_LEN ("noavx512vbmi"), CPU_ANY_AVX512VBMI_FLAGS },
1255 { STRING_COMMA_LEN ("noavx512_4fmaps"), CPU_ANY_AVX512_4FMAPS_FLAGS },
1256 { STRING_COMMA_LEN ("noavx512_4vnniw"), CPU_ANY_AVX512_4VNNIW_FLAGS },
1257 { STRING_COMMA_LEN ("noavx512_vpopcntdq"), CPU_ANY_AVX512_VPOPCNTDQ_FLAGS },
1258 { STRING_COMMA_LEN ("noavx512_vbmi2"), CPU_ANY_AVX512_VBMI2_FLAGS },
1259 { STRING_COMMA_LEN ("noavx512_vnni"), CPU_ANY_AVX512_VNNI_FLAGS },
1260 { STRING_COMMA_LEN ("noavx512_bitalg"), CPU_ANY_AVX512_BITALG_FLAGS },
1261 { STRING_COMMA_LEN ("noibt"), CPU_ANY_IBT_FLAGS },
1262 { STRING_COMMA_LEN ("noshstk"), CPU_ANY_SHSTK_FLAGS },
1263 { STRING_COMMA_LEN ("nomovdiri"), CPU_ANY_MOVDIRI_FLAGS },
1264 { STRING_COMMA_LEN ("nomovdir64b"), CPU_ANY_MOVDIR64B_FLAGS },
1265 { STRING_COMMA_LEN ("noavx512_bf16"), CPU_ANY_AVX512_BF16_FLAGS },
1266 { STRING_COMMA_LEN ("noavx512_vp2intersect"), CPU_ANY_SHSTK_FLAGS },
1267 { STRING_COMMA_LEN ("noenqcmd"), CPU_ANY_ENQCMD_FLAGS },
1268 { STRING_COMMA_LEN ("noserialize"), CPU_ANY_SERIALIZE_FLAGS },
1269 { STRING_COMMA_LEN ("notsxldtrk"), CPU_ANY_TSXLDTRK_FLAGS },
1270 };
1271
1272 #ifdef I386COFF
1273 /* Like s_lcomm_internal in gas/read.c but the alignment string
1274 is allowed to be optional. */
1275
1276 static symbolS *
1277 pe_lcomm_internal (int needs_align, symbolS *symbolP, addressT size)
1278 {
1279 addressT align = 0;
1280
1281 SKIP_WHITESPACE ();
1282
1283 if (needs_align
1284 && *input_line_pointer == ',')
1285 {
1286 align = parse_align (needs_align - 1);
1287
1288 if (align == (addressT) -1)
1289 return NULL;
1290 }
1291 else
1292 {
1293 if (size >= 8)
1294 align = 3;
1295 else if (size >= 4)
1296 align = 2;
1297 else if (size >= 2)
1298 align = 1;
1299 else
1300 align = 0;
1301 }
1302
1303 bss_alloc (symbolP, size, align);
1304 return symbolP;
1305 }
1306
1307 static void
1308 pe_lcomm (int needs_align)
1309 {
1310 s_comm_internal (needs_align * 2, pe_lcomm_internal);
1311 }
1312 #endif
1313
1314 const pseudo_typeS md_pseudo_table[] =
1315 {
1316 #if !defined(OBJ_AOUT) && !defined(USE_ALIGN_PTWO)
1317 {"align", s_align_bytes, 0},
1318 #else
1319 {"align", s_align_ptwo, 0},
1320 #endif
1321 {"arch", set_cpu_arch, 0},
1322 #ifndef I386COFF
1323 {"bss", s_bss, 0},
1324 #else
1325 {"lcomm", pe_lcomm, 1},
1326 #endif
1327 {"ffloat", float_cons, 'f'},
1328 {"dfloat", float_cons, 'd'},
1329 {"tfloat", float_cons, 'x'},
1330 {"value", cons, 2},
1331 {"slong", signed_cons, 4},
1332 {"noopt", s_ignore, 0},
1333 {"optim", s_ignore, 0},
1334 {"code16gcc", set_16bit_gcc_code_flag, CODE_16BIT},
1335 {"code16", set_code_flag, CODE_16BIT},
1336 {"code32", set_code_flag, CODE_32BIT},
1337 #ifdef BFD64
1338 {"code64", set_code_flag, CODE_64BIT},
1339 #endif
1340 {"intel_syntax", set_intel_syntax, 1},
1341 {"att_syntax", set_intel_syntax, 0},
1342 {"intel_mnemonic", set_intel_mnemonic, 1},
1343 {"att_mnemonic", set_intel_mnemonic, 0},
1344 {"allow_index_reg", set_allow_index_reg, 1},
1345 {"disallow_index_reg", set_allow_index_reg, 0},
1346 {"sse_check", set_check, 0},
1347 {"operand_check", set_check, 1},
1348 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
1349 {"largecomm", handle_large_common, 0},
1350 #else
1351 {"file", dwarf2_directive_file, 0},
1352 {"loc", dwarf2_directive_loc, 0},
1353 {"loc_mark_labels", dwarf2_directive_loc_mark_labels, 0},
1354 #endif
1355 #ifdef TE_PE
1356 {"secrel32", pe_directive_secrel, 0},
1357 #endif
1358 {0, 0, 0}
1359 };
1360
1361 /* For interface with expression (). */
1362 extern char *input_line_pointer;
1363
1364 /* Hash table for instruction mnemonic lookup. */
1365 static struct hash_control *op_hash;
1366
1367 /* Hash table for register lookup. */
1368 static struct hash_control *reg_hash;
1369 \f
1370 /* Various efficient no-op patterns for aligning code labels.
1371 Note: Don't try to assemble the instructions in the comments.
1372 0L and 0w are not legal. */
1373 static const unsigned char f32_1[] =
1374 {0x90}; /* nop */
1375 static const unsigned char f32_2[] =
1376 {0x66,0x90}; /* xchg %ax,%ax */
1377 static const unsigned char f32_3[] =
1378 {0x8d,0x76,0x00}; /* leal 0(%esi),%esi */
1379 static const unsigned char f32_4[] =
1380 {0x8d,0x74,0x26,0x00}; /* leal 0(%esi,1),%esi */
1381 static const unsigned char f32_6[] =
1382 {0x8d,0xb6,0x00,0x00,0x00,0x00}; /* leal 0L(%esi),%esi */
1383 static const unsigned char f32_7[] =
1384 {0x8d,0xb4,0x26,0x00,0x00,0x00,0x00}; /* leal 0L(%esi,1),%esi */
1385 static const unsigned char f16_3[] =
1386 {0x8d,0x74,0x00}; /* lea 0(%si),%si */
1387 static const unsigned char f16_4[] =
1388 {0x8d,0xb4,0x00,0x00}; /* lea 0W(%si),%si */
1389 static const unsigned char jump_disp8[] =
1390 {0xeb}; /* jmp disp8 */
1391 static const unsigned char jump32_disp32[] =
1392 {0xe9}; /* jmp disp32 */
1393 static const unsigned char jump16_disp32[] =
1394 {0x66,0xe9}; /* jmp disp32 */
1395 /* 32-bit NOPs patterns. */
1396 static const unsigned char *const f32_patt[] = {
1397 f32_1, f32_2, f32_3, f32_4, NULL, f32_6, f32_7
1398 };
1399 /* 16-bit NOPs patterns. */
1400 static const unsigned char *const f16_patt[] = {
1401 f32_1, f32_2, f16_3, f16_4
1402 };
1403 /* nopl (%[re]ax) */
1404 static const unsigned char alt_3[] =
1405 {0x0f,0x1f,0x00};
1406 /* nopl 0(%[re]ax) */
1407 static const unsigned char alt_4[] =
1408 {0x0f,0x1f,0x40,0x00};
1409 /* nopl 0(%[re]ax,%[re]ax,1) */
1410 static const unsigned char alt_5[] =
1411 {0x0f,0x1f,0x44,0x00,0x00};
1412 /* nopw 0(%[re]ax,%[re]ax,1) */
1413 static const unsigned char alt_6[] =
1414 {0x66,0x0f,0x1f,0x44,0x00,0x00};
1415 /* nopl 0L(%[re]ax) */
1416 static const unsigned char alt_7[] =
1417 {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
1418 /* nopl 0L(%[re]ax,%[re]ax,1) */
1419 static const unsigned char alt_8[] =
1420 {0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
1421 /* nopw 0L(%[re]ax,%[re]ax,1) */
1422 static const unsigned char alt_9[] =
1423 {0x66,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
1424 /* nopw %cs:0L(%[re]ax,%[re]ax,1) */
1425 static const unsigned char alt_10[] =
1426 {0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
1427 /* data16 nopw %cs:0L(%eax,%eax,1) */
1428 static const unsigned char alt_11[] =
1429 {0x66,0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
1430 /* 32-bit and 64-bit NOPs patterns. */
1431 static const unsigned char *const alt_patt[] = {
1432 f32_1, f32_2, alt_3, alt_4, alt_5, alt_6, alt_7, alt_8,
1433 alt_9, alt_10, alt_11
1434 };
1435
1436 /* Genenerate COUNT bytes of NOPs to WHERE from PATT with the maximum
1437 size of a single NOP instruction MAX_SINGLE_NOP_SIZE. */
1438
1439 static void
1440 i386_output_nops (char *where, const unsigned char *const *patt,
1441 int count, int max_single_nop_size)
1442
1443 {
1444 /* Place the longer NOP first. */
1445 int last;
1446 int offset;
1447 const unsigned char *nops;
1448
1449 if (max_single_nop_size < 1)
1450 {
1451 as_fatal (_("i386_output_nops called to generate nops of at most %d bytes!"),
1452 max_single_nop_size);
1453 return;
1454 }
1455
1456 nops = patt[max_single_nop_size - 1];
1457
1458 /* Use the smaller one if the requsted one isn't available. */
1459 if (nops == NULL)
1460 {
1461 max_single_nop_size--;
1462 nops = patt[max_single_nop_size - 1];
1463 }
1464
1465 last = count % max_single_nop_size;
1466
1467 count -= last;
1468 for (offset = 0; offset < count; offset += max_single_nop_size)
1469 memcpy (where + offset, nops, max_single_nop_size);
1470
1471 if (last)
1472 {
1473 nops = patt[last - 1];
1474 if (nops == NULL)
1475 {
1476 /* Use the smaller one plus one-byte NOP if the needed one
1477 isn't available. */
1478 last--;
1479 nops = patt[last - 1];
1480 memcpy (where + offset, nops, last);
1481 where[offset + last] = *patt[0];
1482 }
1483 else
1484 memcpy (where + offset, nops, last);
1485 }
1486 }
1487
1488 static INLINE int
1489 fits_in_imm7 (offsetT num)
1490 {
1491 return (num & 0x7f) == num;
1492 }
1493
1494 static INLINE int
1495 fits_in_imm31 (offsetT num)
1496 {
1497 return (num & 0x7fffffff) == num;
1498 }
1499
1500 /* Genenerate COUNT bytes of NOPs to WHERE with the maximum size of a
1501 single NOP instruction LIMIT. */
1502
1503 void
1504 i386_generate_nops (fragS *fragP, char *where, offsetT count, int limit)
1505 {
1506 const unsigned char *const *patt = NULL;
1507 int max_single_nop_size;
1508 /* Maximum number of NOPs before switching to jump over NOPs. */
1509 int max_number_of_nops;
1510
1511 switch (fragP->fr_type)
1512 {
1513 case rs_fill_nop:
1514 case rs_align_code:
1515 break;
1516 case rs_machine_dependent:
1517 /* Allow NOP padding for jumps and calls. */
1518 if (TYPE_FROM_RELAX_STATE (fragP->fr_subtype) == BRANCH_PADDING
1519 || TYPE_FROM_RELAX_STATE (fragP->fr_subtype) == FUSED_JCC_PADDING)
1520 break;
1521 /* Fall through. */
1522 default:
1523 return;
1524 }
1525
1526 /* We need to decide which NOP sequence to use for 32bit and
1527 64bit. When -mtune= is used:
1528
1529 1. For PROCESSOR_I386, PROCESSOR_I486, PROCESSOR_PENTIUM and
1530 PROCESSOR_GENERIC32, f32_patt will be used.
1531 2. For the rest, alt_patt will be used.
1532
1533 When -mtune= isn't used, alt_patt will be used if
1534 cpu_arch_isa_flags has CpuNop. Otherwise, f32_patt will
1535 be used.
1536
1537 When -march= or .arch is used, we can't use anything beyond
1538 cpu_arch_isa_flags. */
1539
1540 if (flag_code == CODE_16BIT)
1541 {
1542 patt = f16_patt;
1543 max_single_nop_size = sizeof (f16_patt) / sizeof (f16_patt[0]);
1544 /* Limit number of NOPs to 2 in 16-bit mode. */
1545 max_number_of_nops = 2;
1546 }
1547 else
1548 {
1549 if (fragP->tc_frag_data.isa == PROCESSOR_UNKNOWN)
1550 {
1551 /* PROCESSOR_UNKNOWN means that all ISAs may be used. */
1552 switch (cpu_arch_tune)
1553 {
1554 case PROCESSOR_UNKNOWN:
1555 /* We use cpu_arch_isa_flags to check if we SHOULD
1556 optimize with nops. */
1557 if (fragP->tc_frag_data.isa_flags.bitfield.cpunop)
1558 patt = alt_patt;
1559 else
1560 patt = f32_patt;
1561 break;
1562 case PROCESSOR_PENTIUM4:
1563 case PROCESSOR_NOCONA:
1564 case PROCESSOR_CORE:
1565 case PROCESSOR_CORE2:
1566 case PROCESSOR_COREI7:
1567 case PROCESSOR_L1OM:
1568 case PROCESSOR_K1OM:
1569 case PROCESSOR_GENERIC64:
1570 case PROCESSOR_K6:
1571 case PROCESSOR_ATHLON:
1572 case PROCESSOR_K8:
1573 case PROCESSOR_AMDFAM10:
1574 case PROCESSOR_BD:
1575 case PROCESSOR_ZNVER:
1576 case PROCESSOR_BT:
1577 patt = alt_patt;
1578 break;
1579 case PROCESSOR_I386:
1580 case PROCESSOR_I486:
1581 case PROCESSOR_PENTIUM:
1582 case PROCESSOR_PENTIUMPRO:
1583 case PROCESSOR_IAMCU:
1584 case PROCESSOR_GENERIC32:
1585 patt = f32_patt;
1586 break;
1587 }
1588 }
1589 else
1590 {
1591 switch (fragP->tc_frag_data.tune)
1592 {
1593 case PROCESSOR_UNKNOWN:
1594 /* When cpu_arch_isa is set, cpu_arch_tune shouldn't be
1595 PROCESSOR_UNKNOWN. */
1596 abort ();
1597 break;
1598
1599 case PROCESSOR_I386:
1600 case PROCESSOR_I486:
1601 case PROCESSOR_PENTIUM:
1602 case PROCESSOR_IAMCU:
1603 case PROCESSOR_K6:
1604 case PROCESSOR_ATHLON:
1605 case PROCESSOR_K8:
1606 case PROCESSOR_AMDFAM10:
1607 case PROCESSOR_BD:
1608 case PROCESSOR_ZNVER:
1609 case PROCESSOR_BT:
1610 case PROCESSOR_GENERIC32:
1611 /* We use cpu_arch_isa_flags to check if we CAN optimize
1612 with nops. */
1613 if (fragP->tc_frag_data.isa_flags.bitfield.cpunop)
1614 patt = alt_patt;
1615 else
1616 patt = f32_patt;
1617 break;
1618 case PROCESSOR_PENTIUMPRO:
1619 case PROCESSOR_PENTIUM4:
1620 case PROCESSOR_NOCONA:
1621 case PROCESSOR_CORE:
1622 case PROCESSOR_CORE2:
1623 case PROCESSOR_COREI7:
1624 case PROCESSOR_L1OM:
1625 case PROCESSOR_K1OM:
1626 if (fragP->tc_frag_data.isa_flags.bitfield.cpunop)
1627 patt = alt_patt;
1628 else
1629 patt = f32_patt;
1630 break;
1631 case PROCESSOR_GENERIC64:
1632 patt = alt_patt;
1633 break;
1634 }
1635 }
1636
1637 if (patt == f32_patt)
1638 {
1639 max_single_nop_size = sizeof (f32_patt) / sizeof (f32_patt[0]);
1640 /* Limit number of NOPs to 2 for older processors. */
1641 max_number_of_nops = 2;
1642 }
1643 else
1644 {
1645 max_single_nop_size = sizeof (alt_patt) / sizeof (alt_patt[0]);
1646 /* Limit number of NOPs to 7 for newer processors. */
1647 max_number_of_nops = 7;
1648 }
1649 }
1650
1651 if (limit == 0)
1652 limit = max_single_nop_size;
1653
1654 if (fragP->fr_type == rs_fill_nop)
1655 {
1656 /* Output NOPs for .nop directive. */
1657 if (limit > max_single_nop_size)
1658 {
1659 as_bad_where (fragP->fr_file, fragP->fr_line,
1660 _("invalid single nop size: %d "
1661 "(expect within [0, %d])"),
1662 limit, max_single_nop_size);
1663 return;
1664 }
1665 }
1666 else if (fragP->fr_type != rs_machine_dependent)
1667 fragP->fr_var = count;
1668
1669 if ((count / max_single_nop_size) > max_number_of_nops)
1670 {
1671 /* Generate jump over NOPs. */
1672 offsetT disp = count - 2;
1673 if (fits_in_imm7 (disp))
1674 {
1675 /* Use "jmp disp8" if possible. */
1676 count = disp;
1677 where[0] = jump_disp8[0];
1678 where[1] = count;
1679 where += 2;
1680 }
1681 else
1682 {
1683 unsigned int size_of_jump;
1684
1685 if (flag_code == CODE_16BIT)
1686 {
1687 where[0] = jump16_disp32[0];
1688 where[1] = jump16_disp32[1];
1689 size_of_jump = 2;
1690 }
1691 else
1692 {
1693 where[0] = jump32_disp32[0];
1694 size_of_jump = 1;
1695 }
1696
1697 count -= size_of_jump + 4;
1698 if (!fits_in_imm31 (count))
1699 {
1700 as_bad_where (fragP->fr_file, fragP->fr_line,
1701 _("jump over nop padding out of range"));
1702 return;
1703 }
1704
1705 md_number_to_chars (where + size_of_jump, count, 4);
1706 where += size_of_jump + 4;
1707 }
1708 }
1709
1710 /* Generate multiple NOPs. */
1711 i386_output_nops (where, patt, count, limit);
1712 }
1713
1714 static INLINE int
1715 operand_type_all_zero (const union i386_operand_type *x)
1716 {
1717 switch (ARRAY_SIZE(x->array))
1718 {
1719 case 3:
1720 if (x->array[2])
1721 return 0;
1722 /* Fall through. */
1723 case 2:
1724 if (x->array[1])
1725 return 0;
1726 /* Fall through. */
1727 case 1:
1728 return !x->array[0];
1729 default:
1730 abort ();
1731 }
1732 }
1733
1734 static INLINE void
1735 operand_type_set (union i386_operand_type *x, unsigned int v)
1736 {
1737 switch (ARRAY_SIZE(x->array))
1738 {
1739 case 3:
1740 x->array[2] = v;
1741 /* Fall through. */
1742 case 2:
1743 x->array[1] = v;
1744 /* Fall through. */
1745 case 1:
1746 x->array[0] = v;
1747 /* Fall through. */
1748 break;
1749 default:
1750 abort ();
1751 }
1752
1753 x->bitfield.class = ClassNone;
1754 x->bitfield.instance = InstanceNone;
1755 }
1756
1757 static INLINE int
1758 operand_type_equal (const union i386_operand_type *x,
1759 const union i386_operand_type *y)
1760 {
1761 switch (ARRAY_SIZE(x->array))
1762 {
1763 case 3:
1764 if (x->array[2] != y->array[2])
1765 return 0;
1766 /* Fall through. */
1767 case 2:
1768 if (x->array[1] != y->array[1])
1769 return 0;
1770 /* Fall through. */
1771 case 1:
1772 return x->array[0] == y->array[0];
1773 break;
1774 default:
1775 abort ();
1776 }
1777 }
1778
1779 static INLINE int
1780 cpu_flags_all_zero (const union i386_cpu_flags *x)
1781 {
1782 switch (ARRAY_SIZE(x->array))
1783 {
1784 case 4:
1785 if (x->array[3])
1786 return 0;
1787 /* Fall through. */
1788 case 3:
1789 if (x->array[2])
1790 return 0;
1791 /* Fall through. */
1792 case 2:
1793 if (x->array[1])
1794 return 0;
1795 /* Fall through. */
1796 case 1:
1797 return !x->array[0];
1798 default:
1799 abort ();
1800 }
1801 }
1802
1803 static INLINE int
1804 cpu_flags_equal (const union i386_cpu_flags *x,
1805 const union i386_cpu_flags *y)
1806 {
1807 switch (ARRAY_SIZE(x->array))
1808 {
1809 case 4:
1810 if (x->array[3] != y->array[3])
1811 return 0;
1812 /* Fall through. */
1813 case 3:
1814 if (x->array[2] != y->array[2])
1815 return 0;
1816 /* Fall through. */
1817 case 2:
1818 if (x->array[1] != y->array[1])
1819 return 0;
1820 /* Fall through. */
1821 case 1:
1822 return x->array[0] == y->array[0];
1823 break;
1824 default:
1825 abort ();
1826 }
1827 }
1828
1829 static INLINE int
1830 cpu_flags_check_cpu64 (i386_cpu_flags f)
1831 {
1832 return !((flag_code == CODE_64BIT && f.bitfield.cpuno64)
1833 || (flag_code != CODE_64BIT && f.bitfield.cpu64));
1834 }
1835
1836 static INLINE i386_cpu_flags
1837 cpu_flags_and (i386_cpu_flags x, i386_cpu_flags y)
1838 {
1839 switch (ARRAY_SIZE (x.array))
1840 {
1841 case 4:
1842 x.array [3] &= y.array [3];
1843 /* Fall through. */
1844 case 3:
1845 x.array [2] &= y.array [2];
1846 /* Fall through. */
1847 case 2:
1848 x.array [1] &= y.array [1];
1849 /* Fall through. */
1850 case 1:
1851 x.array [0] &= y.array [0];
1852 break;
1853 default:
1854 abort ();
1855 }
1856 return x;
1857 }
1858
1859 static INLINE i386_cpu_flags
1860 cpu_flags_or (i386_cpu_flags x, i386_cpu_flags y)
1861 {
1862 switch (ARRAY_SIZE (x.array))
1863 {
1864 case 4:
1865 x.array [3] |= y.array [3];
1866 /* Fall through. */
1867 case 3:
1868 x.array [2] |= y.array [2];
1869 /* Fall through. */
1870 case 2:
1871 x.array [1] |= y.array [1];
1872 /* Fall through. */
1873 case 1:
1874 x.array [0] |= y.array [0];
1875 break;
1876 default:
1877 abort ();
1878 }
1879 return x;
1880 }
1881
1882 static INLINE i386_cpu_flags
1883 cpu_flags_and_not (i386_cpu_flags x, i386_cpu_flags y)
1884 {
1885 switch (ARRAY_SIZE (x.array))
1886 {
1887 case 4:
1888 x.array [3] &= ~y.array [3];
1889 /* Fall through. */
1890 case 3:
1891 x.array [2] &= ~y.array [2];
1892 /* Fall through. */
1893 case 2:
1894 x.array [1] &= ~y.array [1];
1895 /* Fall through. */
1896 case 1:
1897 x.array [0] &= ~y.array [0];
1898 break;
1899 default:
1900 abort ();
1901 }
1902 return x;
1903 }
1904
1905 static const i386_cpu_flags avx512 = CPU_ANY_AVX512F_FLAGS;
1906
1907 #define CPU_FLAGS_ARCH_MATCH 0x1
1908 #define CPU_FLAGS_64BIT_MATCH 0x2
1909
1910 #define CPU_FLAGS_PERFECT_MATCH \
1911 (CPU_FLAGS_ARCH_MATCH | CPU_FLAGS_64BIT_MATCH)
1912
1913 /* Return CPU flags match bits. */
1914
1915 static int
1916 cpu_flags_match (const insn_template *t)
1917 {
1918 i386_cpu_flags x = t->cpu_flags;
1919 int match = cpu_flags_check_cpu64 (x) ? CPU_FLAGS_64BIT_MATCH : 0;
1920
1921 x.bitfield.cpu64 = 0;
1922 x.bitfield.cpuno64 = 0;
1923
1924 if (cpu_flags_all_zero (&x))
1925 {
1926 /* This instruction is available on all archs. */
1927 match |= CPU_FLAGS_ARCH_MATCH;
1928 }
1929 else
1930 {
1931 /* This instruction is available only on some archs. */
1932 i386_cpu_flags cpu = cpu_arch_flags;
1933
1934 /* AVX512VL is no standalone feature - match it and then strip it. */
1935 if (x.bitfield.cpuavx512vl && !cpu.bitfield.cpuavx512vl)
1936 return match;
1937 x.bitfield.cpuavx512vl = 0;
1938
1939 cpu = cpu_flags_and (x, cpu);
1940 if (!cpu_flags_all_zero (&cpu))
1941 {
1942 if (x.bitfield.cpuavx)
1943 {
1944 /* We need to check a few extra flags with AVX. */
1945 if (cpu.bitfield.cpuavx
1946 && (!t->opcode_modifier.sse2avx || sse2avx)
1947 && (!x.bitfield.cpuaes || cpu.bitfield.cpuaes)
1948 && (!x.bitfield.cpugfni || cpu.bitfield.cpugfni)
1949 && (!x.bitfield.cpupclmul || cpu.bitfield.cpupclmul))
1950 match |= CPU_FLAGS_ARCH_MATCH;
1951 }
1952 else if (x.bitfield.cpuavx512f)
1953 {
1954 /* We need to check a few extra flags with AVX512F. */
1955 if (cpu.bitfield.cpuavx512f
1956 && (!x.bitfield.cpugfni || cpu.bitfield.cpugfni)
1957 && (!x.bitfield.cpuvaes || cpu.bitfield.cpuvaes)
1958 && (!x.bitfield.cpuvpclmulqdq || cpu.bitfield.cpuvpclmulqdq))
1959 match |= CPU_FLAGS_ARCH_MATCH;
1960 }
1961 else
1962 match |= CPU_FLAGS_ARCH_MATCH;
1963 }
1964 }
1965 return match;
1966 }
1967
1968 static INLINE i386_operand_type
1969 operand_type_and (i386_operand_type x, i386_operand_type y)
1970 {
1971 if (x.bitfield.class != y.bitfield.class)
1972 x.bitfield.class = ClassNone;
1973 if (x.bitfield.instance != y.bitfield.instance)
1974 x.bitfield.instance = InstanceNone;
1975
1976 switch (ARRAY_SIZE (x.array))
1977 {
1978 case 3:
1979 x.array [2] &= y.array [2];
1980 /* Fall through. */
1981 case 2:
1982 x.array [1] &= y.array [1];
1983 /* Fall through. */
1984 case 1:
1985 x.array [0] &= y.array [0];
1986 break;
1987 default:
1988 abort ();
1989 }
1990 return x;
1991 }
1992
1993 static INLINE i386_operand_type
1994 operand_type_and_not (i386_operand_type x, i386_operand_type y)
1995 {
1996 gas_assert (y.bitfield.class == ClassNone);
1997 gas_assert (y.bitfield.instance == InstanceNone);
1998
1999 switch (ARRAY_SIZE (x.array))
2000 {
2001 case 3:
2002 x.array [2] &= ~y.array [2];
2003 /* Fall through. */
2004 case 2:
2005 x.array [1] &= ~y.array [1];
2006 /* Fall through. */
2007 case 1:
2008 x.array [0] &= ~y.array [0];
2009 break;
2010 default:
2011 abort ();
2012 }
2013 return x;
2014 }
2015
2016 static INLINE i386_operand_type
2017 operand_type_or (i386_operand_type x, i386_operand_type y)
2018 {
2019 gas_assert (x.bitfield.class == ClassNone ||
2020 y.bitfield.class == ClassNone ||
2021 x.bitfield.class == y.bitfield.class);
2022 gas_assert (x.bitfield.instance == InstanceNone ||
2023 y.bitfield.instance == InstanceNone ||
2024 x.bitfield.instance == y.bitfield.instance);
2025
2026 switch (ARRAY_SIZE (x.array))
2027 {
2028 case 3:
2029 x.array [2] |= y.array [2];
2030 /* Fall through. */
2031 case 2:
2032 x.array [1] |= y.array [1];
2033 /* Fall through. */
2034 case 1:
2035 x.array [0] |= y.array [0];
2036 break;
2037 default:
2038 abort ();
2039 }
2040 return x;
2041 }
2042
2043 static INLINE i386_operand_type
2044 operand_type_xor (i386_operand_type x, i386_operand_type y)
2045 {
2046 gas_assert (y.bitfield.class == ClassNone);
2047 gas_assert (y.bitfield.instance == InstanceNone);
2048
2049 switch (ARRAY_SIZE (x.array))
2050 {
2051 case 3:
2052 x.array [2] ^= y.array [2];
2053 /* Fall through. */
2054 case 2:
2055 x.array [1] ^= y.array [1];
2056 /* Fall through. */
2057 case 1:
2058 x.array [0] ^= y.array [0];
2059 break;
2060 default:
2061 abort ();
2062 }
2063 return x;
2064 }
2065
2066 static const i386_operand_type disp16 = OPERAND_TYPE_DISP16;
2067 static const i386_operand_type disp32 = OPERAND_TYPE_DISP32;
2068 static const i386_operand_type disp32s = OPERAND_TYPE_DISP32S;
2069 static const i386_operand_type disp16_32 = OPERAND_TYPE_DISP16_32;
2070 static const i386_operand_type anydisp = OPERAND_TYPE_ANYDISP;
2071 static const i386_operand_type anyimm = OPERAND_TYPE_ANYIMM;
2072 static const i386_operand_type regxmm = OPERAND_TYPE_REGXMM;
2073 static const i386_operand_type regmask = OPERAND_TYPE_REGMASK;
2074 static const i386_operand_type imm8 = OPERAND_TYPE_IMM8;
2075 static const i386_operand_type imm8s = OPERAND_TYPE_IMM8S;
2076 static const i386_operand_type imm16 = OPERAND_TYPE_IMM16;
2077 static const i386_operand_type imm32 = OPERAND_TYPE_IMM32;
2078 static const i386_operand_type imm32s = OPERAND_TYPE_IMM32S;
2079 static const i386_operand_type imm64 = OPERAND_TYPE_IMM64;
2080 static const i386_operand_type imm16_32 = OPERAND_TYPE_IMM16_32;
2081 static const i386_operand_type imm16_32s = OPERAND_TYPE_IMM16_32S;
2082 static const i386_operand_type imm16_32_32s = OPERAND_TYPE_IMM16_32_32S;
2083
2084 enum operand_type
2085 {
2086 reg,
2087 imm,
2088 disp,
2089 anymem
2090 };
2091
2092 static INLINE int
2093 operand_type_check (i386_operand_type t, enum operand_type c)
2094 {
2095 switch (c)
2096 {
2097 case reg:
2098 return t.bitfield.class == Reg;
2099
2100 case imm:
2101 return (t.bitfield.imm8
2102 || t.bitfield.imm8s
2103 || t.bitfield.imm16
2104 || t.bitfield.imm32
2105 || t.bitfield.imm32s
2106 || t.bitfield.imm64);
2107
2108 case disp:
2109 return (t.bitfield.disp8
2110 || t.bitfield.disp16
2111 || t.bitfield.disp32
2112 || t.bitfield.disp32s
2113 || t.bitfield.disp64);
2114
2115 case anymem:
2116 return (t.bitfield.disp8
2117 || t.bitfield.disp16
2118 || t.bitfield.disp32
2119 || t.bitfield.disp32s
2120 || t.bitfield.disp64
2121 || t.bitfield.baseindex);
2122
2123 default:
2124 abort ();
2125 }
2126
2127 return 0;
2128 }
2129
2130 /* Return 1 if there is no conflict in 8bit/16bit/32bit/64bit/80bit size
2131 between operand GIVEN and opeand WANTED for instruction template T. */
2132
2133 static INLINE int
2134 match_operand_size (const insn_template *t, unsigned int wanted,
2135 unsigned int given)
2136 {
2137 return !((i.types[given].bitfield.byte
2138 && !t->operand_types[wanted].bitfield.byte)
2139 || (i.types[given].bitfield.word
2140 && !t->operand_types[wanted].bitfield.word)
2141 || (i.types[given].bitfield.dword
2142 && !t->operand_types[wanted].bitfield.dword)
2143 || (i.types[given].bitfield.qword
2144 && !t->operand_types[wanted].bitfield.qword)
2145 || (i.types[given].bitfield.tbyte
2146 && !t->operand_types[wanted].bitfield.tbyte));
2147 }
2148
2149 /* Return 1 if there is no conflict in SIMD register between operand
2150 GIVEN and opeand WANTED for instruction template T. */
2151
2152 static INLINE int
2153 match_simd_size (const insn_template *t, unsigned int wanted,
2154 unsigned int given)
2155 {
2156 return !((i.types[given].bitfield.xmmword
2157 && !t->operand_types[wanted].bitfield.xmmword)
2158 || (i.types[given].bitfield.ymmword
2159 && !t->operand_types[wanted].bitfield.ymmword)
2160 || (i.types[given].bitfield.zmmword
2161 && !t->operand_types[wanted].bitfield.zmmword));
2162 }
2163
2164 /* Return 1 if there is no conflict in any size between operand GIVEN
2165 and opeand WANTED for instruction template T. */
2166
2167 static INLINE int
2168 match_mem_size (const insn_template *t, unsigned int wanted,
2169 unsigned int given)
2170 {
2171 return (match_operand_size (t, wanted, given)
2172 && !((i.types[given].bitfield.unspecified
2173 && !i.broadcast
2174 && !t->operand_types[wanted].bitfield.unspecified)
2175 || (i.types[given].bitfield.fword
2176 && !t->operand_types[wanted].bitfield.fword)
2177 /* For scalar opcode templates to allow register and memory
2178 operands at the same time, some special casing is needed
2179 here. Also for v{,p}broadcast*, {,v}pmov{s,z}*, and
2180 down-conversion vpmov*. */
2181 || ((t->operand_types[wanted].bitfield.class == RegSIMD
2182 && t->operand_types[wanted].bitfield.byte
2183 + t->operand_types[wanted].bitfield.word
2184 + t->operand_types[wanted].bitfield.dword
2185 + t->operand_types[wanted].bitfield.qword
2186 > !!t->opcode_modifier.broadcast)
2187 ? (i.types[given].bitfield.xmmword
2188 || i.types[given].bitfield.ymmword
2189 || i.types[given].bitfield.zmmword)
2190 : !match_simd_size(t, wanted, given))));
2191 }
2192
2193 /* Return value has MATCH_STRAIGHT set if there is no size conflict on any
2194 operands for instruction template T, and it has MATCH_REVERSE set if there
2195 is no size conflict on any operands for the template with operands reversed
2196 (and the template allows for reversing in the first place). */
2197
2198 #define MATCH_STRAIGHT 1
2199 #define MATCH_REVERSE 2
2200
2201 static INLINE unsigned int
2202 operand_size_match (const insn_template *t)
2203 {
2204 unsigned int j, match = MATCH_STRAIGHT;
2205
2206 /* Don't check non-absolute jump instructions. */
2207 if (t->opcode_modifier.jump
2208 && t->opcode_modifier.jump != JUMP_ABSOLUTE)
2209 return match;
2210
2211 /* Check memory and accumulator operand size. */
2212 for (j = 0; j < i.operands; j++)
2213 {
2214 if (i.types[j].bitfield.class != Reg
2215 && i.types[j].bitfield.class != RegSIMD
2216 && t->opcode_modifier.anysize)
2217 continue;
2218
2219 if (t->operand_types[j].bitfield.class == Reg
2220 && !match_operand_size (t, j, j))
2221 {
2222 match = 0;
2223 break;
2224 }
2225
2226 if (t->operand_types[j].bitfield.class == RegSIMD
2227 && !match_simd_size (t, j, j))
2228 {
2229 match = 0;
2230 break;
2231 }
2232
2233 if (t->operand_types[j].bitfield.instance == Accum
2234 && (!match_operand_size (t, j, j) || !match_simd_size (t, j, j)))
2235 {
2236 match = 0;
2237 break;
2238 }
2239
2240 if ((i.flags[j] & Operand_Mem) && !match_mem_size (t, j, j))
2241 {
2242 match = 0;
2243 break;
2244 }
2245 }
2246
2247 if (!t->opcode_modifier.d)
2248 {
2249 mismatch:
2250 if (!match)
2251 i.error = operand_size_mismatch;
2252 return match;
2253 }
2254
2255 /* Check reverse. */
2256 gas_assert (i.operands >= 2 && i.operands <= 3);
2257
2258 for (j = 0; j < i.operands; j++)
2259 {
2260 unsigned int given = i.operands - j - 1;
2261
2262 if (t->operand_types[j].bitfield.class == Reg
2263 && !match_operand_size (t, j, given))
2264 goto mismatch;
2265
2266 if (t->operand_types[j].bitfield.class == RegSIMD
2267 && !match_simd_size (t, j, given))
2268 goto mismatch;
2269
2270 if (t->operand_types[j].bitfield.instance == Accum
2271 && (!match_operand_size (t, j, given)
2272 || !match_simd_size (t, j, given)))
2273 goto mismatch;
2274
2275 if ((i.flags[given] & Operand_Mem) && !match_mem_size (t, j, given))
2276 goto mismatch;
2277 }
2278
2279 return match | MATCH_REVERSE;
2280 }
2281
2282 static INLINE int
2283 operand_type_match (i386_operand_type overlap,
2284 i386_operand_type given)
2285 {
2286 i386_operand_type temp = overlap;
2287
2288 temp.bitfield.unspecified = 0;
2289 temp.bitfield.byte = 0;
2290 temp.bitfield.word = 0;
2291 temp.bitfield.dword = 0;
2292 temp.bitfield.fword = 0;
2293 temp.bitfield.qword = 0;
2294 temp.bitfield.tbyte = 0;
2295 temp.bitfield.xmmword = 0;
2296 temp.bitfield.ymmword = 0;
2297 temp.bitfield.zmmword = 0;
2298 if (operand_type_all_zero (&temp))
2299 goto mismatch;
2300
2301 if (given.bitfield.baseindex == overlap.bitfield.baseindex)
2302 return 1;
2303
2304 mismatch:
2305 i.error = operand_type_mismatch;
2306 return 0;
2307 }
2308
2309 /* If given types g0 and g1 are registers they must be of the same type
2310 unless the expected operand type register overlap is null.
2311 Some Intel syntax memory operand size checking also happens here. */
2312
2313 static INLINE int
2314 operand_type_register_match (i386_operand_type g0,
2315 i386_operand_type t0,
2316 i386_operand_type g1,
2317 i386_operand_type t1)
2318 {
2319 if (g0.bitfield.class != Reg
2320 && g0.bitfield.class != RegSIMD
2321 && (!operand_type_check (g0, anymem)
2322 || g0.bitfield.unspecified
2323 || (t0.bitfield.class != Reg
2324 && t0.bitfield.class != RegSIMD)))
2325 return 1;
2326
2327 if (g1.bitfield.class != Reg
2328 && g1.bitfield.class != RegSIMD
2329 && (!operand_type_check (g1, anymem)
2330 || g1.bitfield.unspecified
2331 || (t1.bitfield.class != Reg
2332 && t1.bitfield.class != RegSIMD)))
2333 return 1;
2334
2335 if (g0.bitfield.byte == g1.bitfield.byte
2336 && g0.bitfield.word == g1.bitfield.word
2337 && g0.bitfield.dword == g1.bitfield.dword
2338 && g0.bitfield.qword == g1.bitfield.qword
2339 && g0.bitfield.xmmword == g1.bitfield.xmmword
2340 && g0.bitfield.ymmword == g1.bitfield.ymmword
2341 && g0.bitfield.zmmword == g1.bitfield.zmmword)
2342 return 1;
2343
2344 if (!(t0.bitfield.byte & t1.bitfield.byte)
2345 && !(t0.bitfield.word & t1.bitfield.word)
2346 && !(t0.bitfield.dword & t1.bitfield.dword)
2347 && !(t0.bitfield.qword & t1.bitfield.qword)
2348 && !(t0.bitfield.xmmword & t1.bitfield.xmmword)
2349 && !(t0.bitfield.ymmword & t1.bitfield.ymmword)
2350 && !(t0.bitfield.zmmword & t1.bitfield.zmmword))
2351 return 1;
2352
2353 i.error = register_type_mismatch;
2354
2355 return 0;
2356 }
2357
2358 static INLINE unsigned int
2359 register_number (const reg_entry *r)
2360 {
2361 unsigned int nr = r->reg_num;
2362
2363 if (r->reg_flags & RegRex)
2364 nr += 8;
2365
2366 if (r->reg_flags & RegVRex)
2367 nr += 16;
2368
2369 return nr;
2370 }
2371
2372 static INLINE unsigned int
2373 mode_from_disp_size (i386_operand_type t)
2374 {
2375 if (t.bitfield.disp8)
2376 return 1;
2377 else if (t.bitfield.disp16
2378 || t.bitfield.disp32
2379 || t.bitfield.disp32s)
2380 return 2;
2381 else
2382 return 0;
2383 }
2384
2385 static INLINE int
2386 fits_in_signed_byte (addressT num)
2387 {
2388 return num + 0x80 <= 0xff;
2389 }
2390
2391 static INLINE int
2392 fits_in_unsigned_byte (addressT num)
2393 {
2394 return num <= 0xff;
2395 }
2396
2397 static INLINE int
2398 fits_in_unsigned_word (addressT num)
2399 {
2400 return num <= 0xffff;
2401 }
2402
2403 static INLINE int
2404 fits_in_signed_word (addressT num)
2405 {
2406 return num + 0x8000 <= 0xffff;
2407 }
2408
2409 static INLINE int
2410 fits_in_signed_long (addressT num ATTRIBUTE_UNUSED)
2411 {
2412 #ifndef BFD64
2413 return 1;
2414 #else
2415 return num + 0x80000000 <= 0xffffffff;
2416 #endif
2417 } /* fits_in_signed_long() */
2418
2419 static INLINE int
2420 fits_in_unsigned_long (addressT num ATTRIBUTE_UNUSED)
2421 {
2422 #ifndef BFD64
2423 return 1;
2424 #else
2425 return num <= 0xffffffff;
2426 #endif
2427 } /* fits_in_unsigned_long() */
2428
2429 static INLINE int
2430 fits_in_disp8 (offsetT num)
2431 {
2432 int shift = i.memshift;
2433 unsigned int mask;
2434
2435 if (shift == -1)
2436 abort ();
2437
2438 mask = (1 << shift) - 1;
2439
2440 /* Return 0 if NUM isn't properly aligned. */
2441 if ((num & mask))
2442 return 0;
2443
2444 /* Check if NUM will fit in 8bit after shift. */
2445 return fits_in_signed_byte (num >> shift);
2446 }
2447
2448 static INLINE int
2449 fits_in_imm4 (offsetT num)
2450 {
2451 return (num & 0xf) == num;
2452 }
2453
2454 static i386_operand_type
2455 smallest_imm_type (offsetT num)
2456 {
2457 i386_operand_type t;
2458
2459 operand_type_set (&t, 0);
2460 t.bitfield.imm64 = 1;
2461
2462 if (cpu_arch_tune != PROCESSOR_I486 && num == 1)
2463 {
2464 /* This code is disabled on the 486 because all the Imm1 forms
2465 in the opcode table are slower on the i486. They're the
2466 versions with the implicitly specified single-position
2467 displacement, which has another syntax if you really want to
2468 use that form. */
2469 t.bitfield.imm1 = 1;
2470 t.bitfield.imm8 = 1;
2471 t.bitfield.imm8s = 1;
2472 t.bitfield.imm16 = 1;
2473 t.bitfield.imm32 = 1;
2474 t.bitfield.imm32s = 1;
2475 }
2476 else if (fits_in_signed_byte (num))
2477 {
2478 t.bitfield.imm8 = 1;
2479 t.bitfield.imm8s = 1;
2480 t.bitfield.imm16 = 1;
2481 t.bitfield.imm32 = 1;
2482 t.bitfield.imm32s = 1;
2483 }
2484 else if (fits_in_unsigned_byte (num))
2485 {
2486 t.bitfield.imm8 = 1;
2487 t.bitfield.imm16 = 1;
2488 t.bitfield.imm32 = 1;
2489 t.bitfield.imm32s = 1;
2490 }
2491 else if (fits_in_signed_word (num) || fits_in_unsigned_word (num))
2492 {
2493 t.bitfield.imm16 = 1;
2494 t.bitfield.imm32 = 1;
2495 t.bitfield.imm32s = 1;
2496 }
2497 else if (fits_in_signed_long (num))
2498 {
2499 t.bitfield.imm32 = 1;
2500 t.bitfield.imm32s = 1;
2501 }
2502 else if (fits_in_unsigned_long (num))
2503 t.bitfield.imm32 = 1;
2504
2505 return t;
2506 }
2507
2508 static offsetT
2509 offset_in_range (offsetT val, int size)
2510 {
2511 addressT mask;
2512
2513 switch (size)
2514 {
2515 case 1: mask = ((addressT) 1 << 8) - 1; break;
2516 case 2: mask = ((addressT) 1 << 16) - 1; break;
2517 case 4: mask = ((addressT) 2 << 31) - 1; break;
2518 #ifdef BFD64
2519 case 8: mask = ((addressT) 2 << 63) - 1; break;
2520 #endif
2521 default: abort ();
2522 }
2523
2524 #ifdef BFD64
2525 /* If BFD64, sign extend val for 32bit address mode. */
2526 if (flag_code != CODE_64BIT
2527 || i.prefix[ADDR_PREFIX])
2528 if ((val & ~(((addressT) 2 << 31) - 1)) == 0)
2529 val = (val ^ ((addressT) 1 << 31)) - ((addressT) 1 << 31);
2530 #endif
2531
2532 if ((val & ~mask) != 0 && (val & ~mask) != ~mask)
2533 {
2534 char buf1[40], buf2[40];
2535
2536 sprint_value (buf1, val);
2537 sprint_value (buf2, val & mask);
2538 as_warn (_("%s shortened to %s"), buf1, buf2);
2539 }
2540 return val & mask;
2541 }
2542
2543 enum PREFIX_GROUP
2544 {
2545 PREFIX_EXIST = 0,
2546 PREFIX_LOCK,
2547 PREFIX_REP,
2548 PREFIX_DS,
2549 PREFIX_OTHER
2550 };
2551
2552 /* Returns
2553 a. PREFIX_EXIST if attempting to add a prefix where one from the
2554 same class already exists.
2555 b. PREFIX_LOCK if lock prefix is added.
2556 c. PREFIX_REP if rep/repne prefix is added.
2557 d. PREFIX_DS if ds prefix is added.
2558 e. PREFIX_OTHER if other prefix is added.
2559 */
2560
2561 static enum PREFIX_GROUP
2562 add_prefix (unsigned int prefix)
2563 {
2564 enum PREFIX_GROUP ret = PREFIX_OTHER;
2565 unsigned int q;
2566
2567 if (prefix >= REX_OPCODE && prefix < REX_OPCODE + 16
2568 && flag_code == CODE_64BIT)
2569 {
2570 if ((i.prefix[REX_PREFIX] & prefix & REX_W)
2571 || (i.prefix[REX_PREFIX] & prefix & REX_R)
2572 || (i.prefix[REX_PREFIX] & prefix & REX_X)
2573 || (i.prefix[REX_PREFIX] & prefix & REX_B))
2574 ret = PREFIX_EXIST;
2575 q = REX_PREFIX;
2576 }
2577 else
2578 {
2579 switch (prefix)
2580 {
2581 default:
2582 abort ();
2583
2584 case DS_PREFIX_OPCODE:
2585 ret = PREFIX_DS;
2586 /* Fall through. */
2587 case CS_PREFIX_OPCODE:
2588 case ES_PREFIX_OPCODE:
2589 case FS_PREFIX_OPCODE:
2590 case GS_PREFIX_OPCODE:
2591 case SS_PREFIX_OPCODE:
2592 q = SEG_PREFIX;
2593 break;
2594
2595 case REPNE_PREFIX_OPCODE:
2596 case REPE_PREFIX_OPCODE:
2597 q = REP_PREFIX;
2598 ret = PREFIX_REP;
2599 break;
2600
2601 case LOCK_PREFIX_OPCODE:
2602 q = LOCK_PREFIX;
2603 ret = PREFIX_LOCK;
2604 break;
2605
2606 case FWAIT_OPCODE:
2607 q = WAIT_PREFIX;
2608 break;
2609
2610 case ADDR_PREFIX_OPCODE:
2611 q = ADDR_PREFIX;
2612 break;
2613
2614 case DATA_PREFIX_OPCODE:
2615 q = DATA_PREFIX;
2616 break;
2617 }
2618 if (i.prefix[q] != 0)
2619 ret = PREFIX_EXIST;
2620 }
2621
2622 if (ret)
2623 {
2624 if (!i.prefix[q])
2625 ++i.prefixes;
2626 i.prefix[q] |= prefix;
2627 }
2628 else
2629 as_bad (_("same type of prefix used twice"));
2630
2631 return ret;
2632 }
2633
2634 static void
2635 update_code_flag (int value, int check)
2636 {
2637 PRINTF_LIKE ((*as_error));
2638
2639 flag_code = (enum flag_code) value;
2640 if (flag_code == CODE_64BIT)
2641 {
2642 cpu_arch_flags.bitfield.cpu64 = 1;
2643 cpu_arch_flags.bitfield.cpuno64 = 0;
2644 }
2645 else
2646 {
2647 cpu_arch_flags.bitfield.cpu64 = 0;
2648 cpu_arch_flags.bitfield.cpuno64 = 1;
2649 }
2650 if (value == CODE_64BIT && !cpu_arch_flags.bitfield.cpulm )
2651 {
2652 if (check)
2653 as_error = as_fatal;
2654 else
2655 as_error = as_bad;
2656 (*as_error) (_("64bit mode not supported on `%s'."),
2657 cpu_arch_name ? cpu_arch_name : default_arch);
2658 }
2659 if (value == CODE_32BIT && !cpu_arch_flags.bitfield.cpui386)
2660 {
2661 if (check)
2662 as_error = as_fatal;
2663 else
2664 as_error = as_bad;
2665 (*as_error) (_("32bit mode not supported on `%s'."),
2666 cpu_arch_name ? cpu_arch_name : default_arch);
2667 }
2668 stackop_size = '\0';
2669 }
2670
2671 static void
2672 set_code_flag (int value)
2673 {
2674 update_code_flag (value, 0);
2675 }
2676
2677 static void
2678 set_16bit_gcc_code_flag (int new_code_flag)
2679 {
2680 flag_code = (enum flag_code) new_code_flag;
2681 if (flag_code != CODE_16BIT)
2682 abort ();
2683 cpu_arch_flags.bitfield.cpu64 = 0;
2684 cpu_arch_flags.bitfield.cpuno64 = 1;
2685 stackop_size = LONG_MNEM_SUFFIX;
2686 }
2687
2688 static void
2689 set_intel_syntax (int syntax_flag)
2690 {
2691 /* Find out if register prefixing is specified. */
2692 int ask_naked_reg = 0;
2693
2694 SKIP_WHITESPACE ();
2695 if (!is_end_of_line[(unsigned char) *input_line_pointer])
2696 {
2697 char *string;
2698 int e = get_symbol_name (&string);
2699
2700 if (strcmp (string, "prefix") == 0)
2701 ask_naked_reg = 1;
2702 else if (strcmp (string, "noprefix") == 0)
2703 ask_naked_reg = -1;
2704 else
2705 as_bad (_("bad argument to syntax directive."));
2706 (void) restore_line_pointer (e);
2707 }
2708 demand_empty_rest_of_line ();
2709
2710 intel_syntax = syntax_flag;
2711
2712 if (ask_naked_reg == 0)
2713 allow_naked_reg = (intel_syntax
2714 && (bfd_get_symbol_leading_char (stdoutput) != '\0'));
2715 else
2716 allow_naked_reg = (ask_naked_reg < 0);
2717
2718 expr_set_rank (O_full_ptr, syntax_flag ? 10 : 0);
2719
2720 identifier_chars['%'] = intel_syntax && allow_naked_reg ? '%' : 0;
2721 identifier_chars['$'] = intel_syntax ? '$' : 0;
2722 register_prefix = allow_naked_reg ? "" : "%";
2723 }
2724
2725 static void
2726 set_intel_mnemonic (int mnemonic_flag)
2727 {
2728 intel_mnemonic = mnemonic_flag;
2729 }
2730
2731 static void
2732 set_allow_index_reg (int flag)
2733 {
2734 allow_index_reg = flag;
2735 }
2736
2737 static void
2738 set_check (int what)
2739 {
2740 enum check_kind *kind;
2741 const char *str;
2742
2743 if (what)
2744 {
2745 kind = &operand_check;
2746 str = "operand";
2747 }
2748 else
2749 {
2750 kind = &sse_check;
2751 str = "sse";
2752 }
2753
2754 SKIP_WHITESPACE ();
2755
2756 if (!is_end_of_line[(unsigned char) *input_line_pointer])
2757 {
2758 char *string;
2759 int e = get_symbol_name (&string);
2760
2761 if (strcmp (string, "none") == 0)
2762 *kind = check_none;
2763 else if (strcmp (string, "warning") == 0)
2764 *kind = check_warning;
2765 else if (strcmp (string, "error") == 0)
2766 *kind = check_error;
2767 else
2768 as_bad (_("bad argument to %s_check directive."), str);
2769 (void) restore_line_pointer (e);
2770 }
2771 else
2772 as_bad (_("missing argument for %s_check directive"), str);
2773
2774 demand_empty_rest_of_line ();
2775 }
2776
2777 static void
2778 check_cpu_arch_compatible (const char *name ATTRIBUTE_UNUSED,
2779 i386_cpu_flags new_flag ATTRIBUTE_UNUSED)
2780 {
2781 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
2782 static const char *arch;
2783
2784 /* Intel LIOM is only supported on ELF. */
2785 if (!IS_ELF)
2786 return;
2787
2788 if (!arch)
2789 {
2790 /* Use cpu_arch_name if it is set in md_parse_option. Otherwise
2791 use default_arch. */
2792 arch = cpu_arch_name;
2793 if (!arch)
2794 arch = default_arch;
2795 }
2796
2797 /* If we are targeting Intel MCU, we must enable it. */
2798 if (get_elf_backend_data (stdoutput)->elf_machine_code != EM_IAMCU
2799 || new_flag.bitfield.cpuiamcu)
2800 return;
2801
2802 /* If we are targeting Intel L1OM, we must enable it. */
2803 if (get_elf_backend_data (stdoutput)->elf_machine_code != EM_L1OM
2804 || new_flag.bitfield.cpul1om)
2805 return;
2806
2807 /* If we are targeting Intel K1OM, we must enable it. */
2808 if (get_elf_backend_data (stdoutput)->elf_machine_code != EM_K1OM
2809 || new_flag.bitfield.cpuk1om)
2810 return;
2811
2812 as_bad (_("`%s' is not supported on `%s'"), name, arch);
2813 #endif
2814 }
2815
2816 static void
2817 set_cpu_arch (int dummy ATTRIBUTE_UNUSED)
2818 {
2819 SKIP_WHITESPACE ();
2820
2821 if (!is_end_of_line[(unsigned char) *input_line_pointer])
2822 {
2823 char *string;
2824 int e = get_symbol_name (&string);
2825 unsigned int j;
2826 i386_cpu_flags flags;
2827
2828 for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
2829 {
2830 if (strcmp (string, cpu_arch[j].name) == 0)
2831 {
2832 check_cpu_arch_compatible (string, cpu_arch[j].flags);
2833
2834 if (*string != '.')
2835 {
2836 cpu_arch_name = cpu_arch[j].name;
2837 cpu_sub_arch_name = NULL;
2838 cpu_arch_flags = cpu_arch[j].flags;
2839 if (flag_code == CODE_64BIT)
2840 {
2841 cpu_arch_flags.bitfield.cpu64 = 1;
2842 cpu_arch_flags.bitfield.cpuno64 = 0;
2843 }
2844 else
2845 {
2846 cpu_arch_flags.bitfield.cpu64 = 0;
2847 cpu_arch_flags.bitfield.cpuno64 = 1;
2848 }
2849 cpu_arch_isa = cpu_arch[j].type;
2850 cpu_arch_isa_flags = cpu_arch[j].flags;
2851 if (!cpu_arch_tune_set)
2852 {
2853 cpu_arch_tune = cpu_arch_isa;
2854 cpu_arch_tune_flags = cpu_arch_isa_flags;
2855 }
2856 break;
2857 }
2858
2859 flags = cpu_flags_or (cpu_arch_flags,
2860 cpu_arch[j].flags);
2861
2862 if (!cpu_flags_equal (&flags, &cpu_arch_flags))
2863 {
2864 if (cpu_sub_arch_name)
2865 {
2866 char *name = cpu_sub_arch_name;
2867 cpu_sub_arch_name = concat (name,
2868 cpu_arch[j].name,
2869 (const char *) NULL);
2870 free (name);
2871 }
2872 else
2873 cpu_sub_arch_name = xstrdup (cpu_arch[j].name);
2874 cpu_arch_flags = flags;
2875 cpu_arch_isa_flags = flags;
2876 }
2877 else
2878 cpu_arch_isa_flags
2879 = cpu_flags_or (cpu_arch_isa_flags,
2880 cpu_arch[j].flags);
2881 (void) restore_line_pointer (e);
2882 demand_empty_rest_of_line ();
2883 return;
2884 }
2885 }
2886
2887 if (*string == '.' && j >= ARRAY_SIZE (cpu_arch))
2888 {
2889 /* Disable an ISA extension. */
2890 for (j = 0; j < ARRAY_SIZE (cpu_noarch); j++)
2891 if (strcmp (string + 1, cpu_noarch [j].name) == 0)
2892 {
2893 flags = cpu_flags_and_not (cpu_arch_flags,
2894 cpu_noarch[j].flags);
2895 if (!cpu_flags_equal (&flags, &cpu_arch_flags))
2896 {
2897 if (cpu_sub_arch_name)
2898 {
2899 char *name = cpu_sub_arch_name;
2900 cpu_sub_arch_name = concat (name, string,
2901 (const char *) NULL);
2902 free (name);
2903 }
2904 else
2905 cpu_sub_arch_name = xstrdup (string);
2906 cpu_arch_flags = flags;
2907 cpu_arch_isa_flags = flags;
2908 }
2909 (void) restore_line_pointer (e);
2910 demand_empty_rest_of_line ();
2911 return;
2912 }
2913
2914 j = ARRAY_SIZE (cpu_arch);
2915 }
2916
2917 if (j >= ARRAY_SIZE (cpu_arch))
2918 as_bad (_("no such architecture: `%s'"), string);
2919
2920 *input_line_pointer = e;
2921 }
2922 else
2923 as_bad (_("missing cpu architecture"));
2924
2925 no_cond_jump_promotion = 0;
2926 if (*input_line_pointer == ','
2927 && !is_end_of_line[(unsigned char) input_line_pointer[1]])
2928 {
2929 char *string;
2930 char e;
2931
2932 ++input_line_pointer;
2933 e = get_symbol_name (&string);
2934
2935 if (strcmp (string, "nojumps") == 0)
2936 no_cond_jump_promotion = 1;
2937 else if (strcmp (string, "jumps") == 0)
2938 ;
2939 else
2940 as_bad (_("no such architecture modifier: `%s'"), string);
2941
2942 (void) restore_line_pointer (e);
2943 }
2944
2945 demand_empty_rest_of_line ();
2946 }
2947
2948 enum bfd_architecture
2949 i386_arch (void)
2950 {
2951 if (cpu_arch_isa == PROCESSOR_L1OM)
2952 {
2953 if (OUTPUT_FLAVOR != bfd_target_elf_flavour
2954 || flag_code != CODE_64BIT)
2955 as_fatal (_("Intel L1OM is 64bit ELF only"));
2956 return bfd_arch_l1om;
2957 }
2958 else if (cpu_arch_isa == PROCESSOR_K1OM)
2959 {
2960 if (OUTPUT_FLAVOR != bfd_target_elf_flavour
2961 || flag_code != CODE_64BIT)
2962 as_fatal (_("Intel K1OM is 64bit ELF only"));
2963 return bfd_arch_k1om;
2964 }
2965 else if (cpu_arch_isa == PROCESSOR_IAMCU)
2966 {
2967 if (OUTPUT_FLAVOR != bfd_target_elf_flavour
2968 || flag_code == CODE_64BIT)
2969 as_fatal (_("Intel MCU is 32bit ELF only"));
2970 return bfd_arch_iamcu;
2971 }
2972 else
2973 return bfd_arch_i386;
2974 }
2975
2976 unsigned long
2977 i386_mach (void)
2978 {
2979 if (!strncmp (default_arch, "x86_64", 6))
2980 {
2981 if (cpu_arch_isa == PROCESSOR_L1OM)
2982 {
2983 if (OUTPUT_FLAVOR != bfd_target_elf_flavour
2984 || default_arch[6] != '\0')
2985 as_fatal (_("Intel L1OM is 64bit ELF only"));
2986 return bfd_mach_l1om;
2987 }
2988 else if (cpu_arch_isa == PROCESSOR_K1OM)
2989 {
2990 if (OUTPUT_FLAVOR != bfd_target_elf_flavour
2991 || default_arch[6] != '\0')
2992 as_fatal (_("Intel K1OM is 64bit ELF only"));
2993 return bfd_mach_k1om;
2994 }
2995 else if (default_arch[6] == '\0')
2996 return bfd_mach_x86_64;
2997 else
2998 return bfd_mach_x64_32;
2999 }
3000 else if (!strcmp (default_arch, "i386")
3001 || !strcmp (default_arch, "iamcu"))
3002 {
3003 if (cpu_arch_isa == PROCESSOR_IAMCU)
3004 {
3005 if (OUTPUT_FLAVOR != bfd_target_elf_flavour)
3006 as_fatal (_("Intel MCU is 32bit ELF only"));
3007 return bfd_mach_i386_iamcu;
3008 }
3009 else
3010 return bfd_mach_i386_i386;
3011 }
3012 else
3013 as_fatal (_("unknown architecture"));
3014 }
3015 \f
3016 void
3017 md_begin (void)
3018 {
3019 const char *hash_err;
3020
3021 /* Support pseudo prefixes like {disp32}. */
3022 lex_type ['{'] = LEX_BEGIN_NAME;
3023
3024 /* Initialize op_hash hash table. */
3025 op_hash = hash_new ();
3026
3027 {
3028 const insn_template *optab;
3029 templates *core_optab;
3030
3031 /* Setup for loop. */
3032 optab = i386_optab;
3033 core_optab = XNEW (templates);
3034 core_optab->start = optab;
3035
3036 while (1)
3037 {
3038 ++optab;
3039 if (optab->name == NULL
3040 || strcmp (optab->name, (optab - 1)->name) != 0)
3041 {
3042 /* different name --> ship out current template list;
3043 add to hash table; & begin anew. */
3044 core_optab->end = optab;
3045 hash_err = hash_insert (op_hash,
3046 (optab - 1)->name,
3047 (void *) core_optab);
3048 if (hash_err)
3049 {
3050 as_fatal (_("can't hash %s: %s"),
3051 (optab - 1)->name,
3052 hash_err);
3053 }
3054 if (optab->name == NULL)
3055 break;
3056 core_optab = XNEW (templates);
3057 core_optab->start = optab;
3058 }
3059 }
3060 }
3061
3062 /* Initialize reg_hash hash table. */
3063 reg_hash = hash_new ();
3064 {
3065 const reg_entry *regtab;
3066 unsigned int regtab_size = i386_regtab_size;
3067
3068 for (regtab = i386_regtab; regtab_size--; regtab++)
3069 {
3070 hash_err = hash_insert (reg_hash, regtab->reg_name, (void *) regtab);
3071 if (hash_err)
3072 as_fatal (_("can't hash %s: %s"),
3073 regtab->reg_name,
3074 hash_err);
3075 }
3076 }
3077
3078 /* Fill in lexical tables: mnemonic_chars, operand_chars. */
3079 {
3080 int c;
3081 char *p;
3082
3083 for (c = 0; c < 256; c++)
3084 {
3085 if (ISDIGIT (c))
3086 {
3087 digit_chars[c] = c;
3088 mnemonic_chars[c] = c;
3089 register_chars[c] = c;
3090 operand_chars[c] = c;
3091 }
3092 else if (ISLOWER (c))
3093 {
3094 mnemonic_chars[c] = c;
3095 register_chars[c] = c;
3096 operand_chars[c] = c;
3097 }
3098 else if (ISUPPER (c))
3099 {
3100 mnemonic_chars[c] = TOLOWER (c);
3101 register_chars[c] = mnemonic_chars[c];
3102 operand_chars[c] = c;
3103 }
3104 else if (c == '{' || c == '}')
3105 {
3106 mnemonic_chars[c] = c;
3107 operand_chars[c] = c;
3108 }
3109
3110 if (ISALPHA (c) || ISDIGIT (c))
3111 identifier_chars[c] = c;
3112 else if (c >= 128)
3113 {
3114 identifier_chars[c] = c;
3115 operand_chars[c] = c;
3116 }
3117 }
3118
3119 #ifdef LEX_AT
3120 identifier_chars['@'] = '@';
3121 #endif
3122 #ifdef LEX_QM
3123 identifier_chars['?'] = '?';
3124 operand_chars['?'] = '?';
3125 #endif
3126 digit_chars['-'] = '-';
3127 mnemonic_chars['_'] = '_';
3128 mnemonic_chars['-'] = '-';
3129 mnemonic_chars['.'] = '.';
3130 identifier_chars['_'] = '_';
3131 identifier_chars['.'] = '.';
3132
3133 for (p = operand_special_chars; *p != '\0'; p++)
3134 operand_chars[(unsigned char) *p] = *p;
3135 }
3136
3137 if (flag_code == CODE_64BIT)
3138 {
3139 #if defined (OBJ_COFF) && defined (TE_PE)
3140 x86_dwarf2_return_column = (OUTPUT_FLAVOR == bfd_target_coff_flavour
3141 ? 32 : 16);
3142 #else
3143 x86_dwarf2_return_column = 16;
3144 #endif
3145 x86_cie_data_alignment = -8;
3146 }
3147 else
3148 {
3149 x86_dwarf2_return_column = 8;
3150 x86_cie_data_alignment = -4;
3151 }
3152
3153 /* NB: FUSED_JCC_PADDING frag must have sufficient room so that it
3154 can be turned into BRANCH_PREFIX frag. */
3155 if (align_branch_prefix_size > MAX_FUSED_JCC_PADDING_SIZE)
3156 abort ();
3157 }
3158
3159 void
3160 i386_print_statistics (FILE *file)
3161 {
3162 hash_print_statistics (file, "i386 opcode", op_hash);
3163 hash_print_statistics (file, "i386 register", reg_hash);
3164 }
3165 \f
3166 #ifdef DEBUG386
3167
3168 /* Debugging routines for md_assemble. */
3169 static void pte (insn_template *);
3170 static void pt (i386_operand_type);
3171 static void pe (expressionS *);
3172 static void ps (symbolS *);
3173
3174 static void
3175 pi (const char *line, i386_insn *x)
3176 {
3177 unsigned int j;
3178
3179 fprintf (stdout, "%s: template ", line);
3180 pte (&x->tm);
3181 fprintf (stdout, " address: base %s index %s scale %x\n",
3182 x->base_reg ? x->base_reg->reg_name : "none",
3183 x->index_reg ? x->index_reg->reg_name : "none",
3184 x->log2_scale_factor);
3185 fprintf (stdout, " modrm: mode %x reg %x reg/mem %x\n",
3186 x->rm.mode, x->rm.reg, x->rm.regmem);
3187 fprintf (stdout, " sib: base %x index %x scale %x\n",
3188 x->sib.base, x->sib.index, x->sib.scale);
3189 fprintf (stdout, " rex: 64bit %x extX %x extY %x extZ %x\n",
3190 (x->rex & REX_W) != 0,
3191 (x->rex & REX_R) != 0,
3192 (x->rex & REX_X) != 0,
3193 (x->rex & REX_B) != 0);
3194 for (j = 0; j < x->operands; j++)
3195 {
3196 fprintf (stdout, " #%d: ", j + 1);
3197 pt (x->types[j]);
3198 fprintf (stdout, "\n");
3199 if (x->types[j].bitfield.class == Reg
3200 || x->types[j].bitfield.class == RegMMX
3201 || x->types[j].bitfield.class == RegSIMD
3202 || x->types[j].bitfield.class == RegMask
3203 || x->types[j].bitfield.class == SReg
3204 || x->types[j].bitfield.class == RegCR
3205 || x->types[j].bitfield.class == RegDR
3206 || x->types[j].bitfield.class == RegTR
3207 || x->types[j].bitfield.class == RegBND)
3208 fprintf (stdout, "%s\n", x->op[j].regs->reg_name);
3209 if (operand_type_check (x->types[j], imm))
3210 pe (x->op[j].imms);
3211 if (operand_type_check (x->types[j], disp))
3212 pe (x->op[j].disps);
3213 }
3214 }
3215
3216 static void
3217 pte (insn_template *t)
3218 {
3219 unsigned int j;
3220 fprintf (stdout, " %d operands ", t->operands);
3221 fprintf (stdout, "opcode %x ", t->base_opcode);
3222 if (t->extension_opcode != None)
3223 fprintf (stdout, "ext %x ", t->extension_opcode);
3224 if (t->opcode_modifier.d)
3225 fprintf (stdout, "D");
3226 if (t->opcode_modifier.w)
3227 fprintf (stdout, "W");
3228 fprintf (stdout, "\n");
3229 for (j = 0; j < t->operands; j++)
3230 {
3231 fprintf (stdout, " #%d type ", j + 1);
3232 pt (t->operand_types[j]);
3233 fprintf (stdout, "\n");
3234 }
3235 }
3236
3237 static void
3238 pe (expressionS *e)
3239 {
3240 fprintf (stdout, " operation %d\n", e->X_op);
3241 fprintf (stdout, " add_number %ld (%lx)\n",
3242 (long) e->X_add_number, (long) e->X_add_number);
3243 if (e->X_add_symbol)
3244 {
3245 fprintf (stdout, " add_symbol ");
3246 ps (e->X_add_symbol);
3247 fprintf (stdout, "\n");
3248 }
3249 if (e->X_op_symbol)
3250 {
3251 fprintf (stdout, " op_symbol ");
3252 ps (e->X_op_symbol);
3253 fprintf (stdout, "\n");
3254 }
3255 }
3256
3257 static void
3258 ps (symbolS *s)
3259 {
3260 fprintf (stdout, "%s type %s%s",
3261 S_GET_NAME (s),
3262 S_IS_EXTERNAL (s) ? "EXTERNAL " : "",
3263 segment_name (S_GET_SEGMENT (s)));
3264 }
3265
3266 static struct type_name
3267 {
3268 i386_operand_type mask;
3269 const char *name;
3270 }
3271 const type_names[] =
3272 {
3273 { OPERAND_TYPE_REG8, "r8" },
3274 { OPERAND_TYPE_REG16, "r16" },
3275 { OPERAND_TYPE_REG32, "r32" },
3276 { OPERAND_TYPE_REG64, "r64" },
3277 { OPERAND_TYPE_ACC8, "acc8" },
3278 { OPERAND_TYPE_ACC16, "acc16" },
3279 { OPERAND_TYPE_ACC32, "acc32" },
3280 { OPERAND_TYPE_ACC64, "acc64" },
3281 { OPERAND_TYPE_IMM8, "i8" },
3282 { OPERAND_TYPE_IMM8, "i8s" },
3283 { OPERAND_TYPE_IMM16, "i16" },
3284 { OPERAND_TYPE_IMM32, "i32" },
3285 { OPERAND_TYPE_IMM32S, "i32s" },
3286 { OPERAND_TYPE_IMM64, "i64" },
3287 { OPERAND_TYPE_IMM1, "i1" },
3288 { OPERAND_TYPE_BASEINDEX, "BaseIndex" },
3289 { OPERAND_TYPE_DISP8, "d8" },
3290 { OPERAND_TYPE_DISP16, "d16" },
3291 { OPERAND_TYPE_DISP32, "d32" },
3292 { OPERAND_TYPE_DISP32S, "d32s" },
3293 { OPERAND_TYPE_DISP64, "d64" },
3294 { OPERAND_TYPE_INOUTPORTREG, "InOutPortReg" },
3295 { OPERAND_TYPE_SHIFTCOUNT, "ShiftCount" },
3296 { OPERAND_TYPE_CONTROL, "control reg" },
3297 { OPERAND_TYPE_TEST, "test reg" },
3298 { OPERAND_TYPE_DEBUG, "debug reg" },
3299 { OPERAND_TYPE_FLOATREG, "FReg" },
3300 { OPERAND_TYPE_FLOATACC, "FAcc" },
3301 { OPERAND_TYPE_SREG, "SReg" },
3302 { OPERAND_TYPE_REGMMX, "rMMX" },
3303 { OPERAND_TYPE_REGXMM, "rXMM" },
3304 { OPERAND_TYPE_REGYMM, "rYMM" },
3305 { OPERAND_TYPE_REGZMM, "rZMM" },
3306 { OPERAND_TYPE_REGMASK, "Mask reg" },
3307 };
3308
3309 static void
3310 pt (i386_operand_type t)
3311 {
3312 unsigned int j;
3313 i386_operand_type a;
3314
3315 for (j = 0; j < ARRAY_SIZE (type_names); j++)
3316 {
3317 a = operand_type_and (t, type_names[j].mask);
3318 if (operand_type_equal (&a, &type_names[j].mask))
3319 fprintf (stdout, "%s, ", type_names[j].name);
3320 }
3321 fflush (stdout);
3322 }
3323
3324 #endif /* DEBUG386 */
3325 \f
3326 static bfd_reloc_code_real_type
3327 reloc (unsigned int size,
3328 int pcrel,
3329 int sign,
3330 bfd_reloc_code_real_type other)
3331 {
3332 if (other != NO_RELOC)
3333 {
3334 reloc_howto_type *rel;
3335
3336 if (size == 8)
3337 switch (other)
3338 {
3339 case BFD_RELOC_X86_64_GOT32:
3340 return BFD_RELOC_X86_64_GOT64;
3341 break;
3342 case BFD_RELOC_X86_64_GOTPLT64:
3343 return BFD_RELOC_X86_64_GOTPLT64;
3344 break;
3345 case BFD_RELOC_X86_64_PLTOFF64:
3346 return BFD_RELOC_X86_64_PLTOFF64;
3347 break;
3348 case BFD_RELOC_X86_64_GOTPC32:
3349 other = BFD_RELOC_X86_64_GOTPC64;
3350 break;
3351 case BFD_RELOC_X86_64_GOTPCREL:
3352 other = BFD_RELOC_X86_64_GOTPCREL64;
3353 break;
3354 case BFD_RELOC_X86_64_TPOFF32:
3355 other = BFD_RELOC_X86_64_TPOFF64;
3356 break;
3357 case BFD_RELOC_X86_64_DTPOFF32:
3358 other = BFD_RELOC_X86_64_DTPOFF64;
3359 break;
3360 default:
3361 break;
3362 }
3363
3364 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
3365 if (other == BFD_RELOC_SIZE32)
3366 {
3367 if (size == 8)
3368 other = BFD_RELOC_SIZE64;
3369 if (pcrel)
3370 {
3371 as_bad (_("there are no pc-relative size relocations"));
3372 return NO_RELOC;
3373 }
3374 }
3375 #endif
3376
3377 /* Sign-checking 4-byte relocations in 16-/32-bit code is pointless. */
3378 if (size == 4 && (flag_code != CODE_64BIT || disallow_64bit_reloc))
3379 sign = -1;
3380
3381 rel = bfd_reloc_type_lookup (stdoutput, other);
3382 if (!rel)
3383 as_bad (_("unknown relocation (%u)"), other);
3384 else if (size != bfd_get_reloc_size (rel))
3385 as_bad (_("%u-byte relocation cannot be applied to %u-byte field"),
3386 bfd_get_reloc_size (rel),
3387 size);
3388 else if (pcrel && !rel->pc_relative)
3389 as_bad (_("non-pc-relative relocation for pc-relative field"));
3390 else if ((rel->complain_on_overflow == complain_overflow_signed
3391 && !sign)
3392 || (rel->complain_on_overflow == complain_overflow_unsigned
3393 && sign > 0))
3394 as_bad (_("relocated field and relocation type differ in signedness"));
3395 else
3396 return other;
3397 return NO_RELOC;
3398 }
3399
3400 if (pcrel)
3401 {
3402 if (!sign)
3403 as_bad (_("there are no unsigned pc-relative relocations"));
3404 switch (size)
3405 {
3406 case 1: return BFD_RELOC_8_PCREL;
3407 case 2: return BFD_RELOC_16_PCREL;
3408 case 4: return BFD_RELOC_32_PCREL;
3409 case 8: return BFD_RELOC_64_PCREL;
3410 }
3411 as_bad (_("cannot do %u byte pc-relative relocation"), size);
3412 }
3413 else
3414 {
3415 if (sign > 0)
3416 switch (size)
3417 {
3418 case 4: return BFD_RELOC_X86_64_32S;
3419 }
3420 else
3421 switch (size)
3422 {
3423 case 1: return BFD_RELOC_8;
3424 case 2: return BFD_RELOC_16;
3425 case 4: return BFD_RELOC_32;
3426 case 8: return BFD_RELOC_64;
3427 }
3428 as_bad (_("cannot do %s %u byte relocation"),
3429 sign > 0 ? "signed" : "unsigned", size);
3430 }
3431
3432 return NO_RELOC;
3433 }
3434
3435 /* Here we decide which fixups can be adjusted to make them relative to
3436 the beginning of the section instead of the symbol. Basically we need
3437 to make sure that the dynamic relocations are done correctly, so in
3438 some cases we force the original symbol to be used. */
3439
3440 int
3441 tc_i386_fix_adjustable (fixS *fixP ATTRIBUTE_UNUSED)
3442 {
3443 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
3444 if (!IS_ELF)
3445 return 1;
3446
3447 /* Don't adjust pc-relative references to merge sections in 64-bit
3448 mode. */
3449 if (use_rela_relocations
3450 && (S_GET_SEGMENT (fixP->fx_addsy)->flags & SEC_MERGE) != 0
3451 && fixP->fx_pcrel)
3452 return 0;
3453
3454 /* The x86_64 GOTPCREL are represented as 32bit PCrel relocations
3455 and changed later by validate_fix. */
3456 if (GOT_symbol && fixP->fx_subsy == GOT_symbol
3457 && fixP->fx_r_type == BFD_RELOC_32_PCREL)
3458 return 0;
3459
3460 /* Adjust_reloc_syms doesn't know about the GOT. Need to keep symbol
3461 for size relocations. */
3462 if (fixP->fx_r_type == BFD_RELOC_SIZE32
3463 || fixP->fx_r_type == BFD_RELOC_SIZE64
3464 || fixP->fx_r_type == BFD_RELOC_386_GOTOFF
3465 || fixP->fx_r_type == BFD_RELOC_386_GOT32
3466 || fixP->fx_r_type == BFD_RELOC_386_GOT32X
3467 || fixP->fx_r_type == BFD_RELOC_386_TLS_GD
3468 || fixP->fx_r_type == BFD_RELOC_386_TLS_LDM
3469 || fixP->fx_r_type == BFD_RELOC_386_TLS_LDO_32
3470 || fixP->fx_r_type == BFD_RELOC_386_TLS_IE_32
3471 || fixP->fx_r_type == BFD_RELOC_386_TLS_IE
3472 || fixP->fx_r_type == BFD_RELOC_386_TLS_GOTIE
3473 || fixP->fx_r_type == BFD_RELOC_386_TLS_LE_32
3474 || fixP->fx_r_type == BFD_RELOC_386_TLS_LE
3475 || fixP->fx_r_type == BFD_RELOC_386_TLS_GOTDESC
3476 || fixP->fx_r_type == BFD_RELOC_386_TLS_DESC_CALL
3477 || fixP->fx_r_type == BFD_RELOC_X86_64_GOT32
3478 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTPCREL
3479 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTPCRELX
3480 || fixP->fx_r_type == BFD_RELOC_X86_64_REX_GOTPCRELX
3481 || fixP->fx_r_type == BFD_RELOC_X86_64_TLSGD
3482 || fixP->fx_r_type == BFD_RELOC_X86_64_TLSLD
3483 || fixP->fx_r_type == BFD_RELOC_X86_64_DTPOFF32
3484 || fixP->fx_r_type == BFD_RELOC_X86_64_DTPOFF64
3485 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTTPOFF
3486 || fixP->fx_r_type == BFD_RELOC_X86_64_TPOFF32
3487 || fixP->fx_r_type == BFD_RELOC_X86_64_TPOFF64
3488 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTOFF64
3489 || fixP->fx_r_type == BFD_RELOC_X86_64_GOTPC32_TLSDESC
3490 || fixP->fx_r_type == BFD_RELOC_X86_64_TLSDESC_CALL
3491 || fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
3492 || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
3493 return 0;
3494 #endif
3495 return 1;
3496 }
3497
3498 static int
3499 intel_float_operand (const char *mnemonic)
3500 {
3501 /* Note that the value returned is meaningful only for opcodes with (memory)
3502 operands, hence the code here is free to improperly handle opcodes that
3503 have no operands (for better performance and smaller code). */
3504
3505 if (mnemonic[0] != 'f')
3506 return 0; /* non-math */
3507
3508 switch (mnemonic[1])
3509 {
3510 /* fclex, fdecstp, fdisi, femms, feni, fincstp, finit, fsetpm, and
3511 the fs segment override prefix not currently handled because no
3512 call path can make opcodes without operands get here */
3513 case 'i':
3514 return 2 /* integer op */;
3515 case 'l':
3516 if (mnemonic[2] == 'd' && (mnemonic[3] == 'c' || mnemonic[3] == 'e'))
3517 return 3; /* fldcw/fldenv */
3518 break;
3519 case 'n':
3520 if (mnemonic[2] != 'o' /* fnop */)
3521 return 3; /* non-waiting control op */
3522 break;
3523 case 'r':
3524 if (mnemonic[2] == 's')
3525 return 3; /* frstor/frstpm */
3526 break;
3527 case 's':
3528 if (mnemonic[2] == 'a')
3529 return 3; /* fsave */
3530 if (mnemonic[2] == 't')
3531 {
3532 switch (mnemonic[3])
3533 {
3534 case 'c': /* fstcw */
3535 case 'd': /* fstdw */
3536 case 'e': /* fstenv */
3537 case 's': /* fsts[gw] */
3538 return 3;
3539 }
3540 }
3541 break;
3542 case 'x':
3543 if (mnemonic[2] == 'r' || mnemonic[2] == 's')
3544 return 0; /* fxsave/fxrstor are not really math ops */
3545 break;
3546 }
3547
3548 return 1;
3549 }
3550
3551 /* Build the VEX prefix. */
3552
3553 static void
3554 build_vex_prefix (const insn_template *t)
3555 {
3556 unsigned int register_specifier;
3557 unsigned int implied_prefix;
3558 unsigned int vector_length;
3559 unsigned int w;
3560
3561 /* Check register specifier. */
3562 if (i.vex.register_specifier)
3563 {
3564 register_specifier =
3565 ~register_number (i.vex.register_specifier) & 0xf;
3566 gas_assert ((i.vex.register_specifier->reg_flags & RegVRex) == 0);
3567 }
3568 else
3569 register_specifier = 0xf;
3570
3571 /* Use 2-byte VEX prefix by swapping destination and source operand
3572 if there are more than 1 register operand. */
3573 if (i.reg_operands > 1
3574 && i.vec_encoding != vex_encoding_vex3
3575 && i.dir_encoding == dir_encoding_default
3576 && i.operands == i.reg_operands
3577 && operand_type_equal (&i.types[0], &i.types[i.operands - 1])
3578 && i.tm.opcode_modifier.vexopcode == VEX0F
3579 && (i.tm.opcode_modifier.load || i.tm.opcode_modifier.d)
3580 && i.rex == REX_B)
3581 {
3582 unsigned int xchg = i.operands - 1;
3583 union i386_op temp_op;
3584 i386_operand_type temp_type;
3585
3586 temp_type = i.types[xchg];
3587 i.types[xchg] = i.types[0];
3588 i.types[0] = temp_type;
3589 temp_op = i.op[xchg];
3590 i.op[xchg] = i.op[0];
3591 i.op[0] = temp_op;
3592
3593 gas_assert (i.rm.mode == 3);
3594
3595 i.rex = REX_R;
3596 xchg = i.rm.regmem;
3597 i.rm.regmem = i.rm.reg;
3598 i.rm.reg = xchg;
3599
3600 if (i.tm.opcode_modifier.d)
3601 i.tm.base_opcode ^= (i.tm.base_opcode & 0xee) != 0x6e
3602 ? Opcode_SIMD_FloatD : Opcode_SIMD_IntD;
3603 else /* Use the next insn. */
3604 i.tm = t[1];
3605 }
3606
3607 /* Use 2-byte VEX prefix by swapping commutative source operands if there
3608 are no memory operands and at least 3 register ones. */
3609 if (i.reg_operands >= 3
3610 && i.vec_encoding != vex_encoding_vex3
3611 && i.reg_operands == i.operands - i.imm_operands
3612 && i.tm.opcode_modifier.vex
3613 && i.tm.opcode_modifier.commutative
3614 && (i.tm.opcode_modifier.sse2avx || optimize > 1)
3615 && i.rex == REX_B
3616 && i.vex.register_specifier
3617 && !(i.vex.register_specifier->reg_flags & RegRex))
3618 {
3619 unsigned int xchg = i.operands - i.reg_operands;
3620 union i386_op temp_op;
3621 i386_operand_type temp_type;
3622
3623 gas_assert (i.tm.opcode_modifier.vexopcode == VEX0F);
3624 gas_assert (!i.tm.opcode_modifier.sae);
3625 gas_assert (operand_type_equal (&i.types[i.operands - 2],
3626 &i.types[i.operands - 3]));
3627 gas_assert (i.rm.mode == 3);
3628
3629 temp_type = i.types[xchg];
3630 i.types[xchg] = i.types[xchg + 1];
3631 i.types[xchg + 1] = temp_type;
3632 temp_op = i.op[xchg];
3633 i.op[xchg] = i.op[xchg + 1];
3634 i.op[xchg + 1] = temp_op;
3635
3636 i.rex = 0;
3637 xchg = i.rm.regmem | 8;
3638 i.rm.regmem = ~register_specifier & 0xf;
3639 gas_assert (!(i.rm.regmem & 8));
3640 i.vex.register_specifier += xchg - i.rm.regmem;
3641 register_specifier = ~xchg & 0xf;
3642 }
3643
3644 if (i.tm.opcode_modifier.vex == VEXScalar)
3645 vector_length = avxscalar;
3646 else if (i.tm.opcode_modifier.vex == VEX256)
3647 vector_length = 1;
3648 else
3649 {
3650 unsigned int op;
3651
3652 /* Determine vector length from the last multi-length vector
3653 operand. */
3654 vector_length = 0;
3655 for (op = t->operands; op--;)
3656 if (t->operand_types[op].bitfield.xmmword
3657 && t->operand_types[op].bitfield.ymmword
3658 && i.types[op].bitfield.ymmword)
3659 {
3660 vector_length = 1;
3661 break;
3662 }
3663 }
3664
3665 switch ((i.tm.base_opcode >> 8) & 0xff)
3666 {
3667 case 0:
3668 implied_prefix = 0;
3669 break;
3670 case DATA_PREFIX_OPCODE:
3671 implied_prefix = 1;
3672 break;
3673 case REPE_PREFIX_OPCODE:
3674 implied_prefix = 2;
3675 break;
3676 case REPNE_PREFIX_OPCODE:
3677 implied_prefix = 3;
3678 break;
3679 default:
3680 abort ();
3681 }
3682
3683 /* Check the REX.W bit and VEXW. */
3684 if (i.tm.opcode_modifier.vexw == VEXWIG)
3685 w = (vexwig == vexw1 || (i.rex & REX_W)) ? 1 : 0;
3686 else if (i.tm.opcode_modifier.vexw)
3687 w = i.tm.opcode_modifier.vexw == VEXW1 ? 1 : 0;
3688 else
3689 w = (flag_code == CODE_64BIT ? i.rex & REX_W : vexwig == vexw1) ? 1 : 0;
3690
3691 /* Use 2-byte VEX prefix if possible. */
3692 if (w == 0
3693 && i.vec_encoding != vex_encoding_vex3
3694 && i.tm.opcode_modifier.vexopcode == VEX0F
3695 && (i.rex & (REX_W | REX_X | REX_B)) == 0)
3696 {
3697 /* 2-byte VEX prefix. */
3698 unsigned int r;
3699
3700 i.vex.length = 2;
3701 i.vex.bytes[0] = 0xc5;
3702
3703 /* Check the REX.R bit. */
3704 r = (i.rex & REX_R) ? 0 : 1;
3705 i.vex.bytes[1] = (r << 7
3706 | register_specifier << 3
3707 | vector_length << 2
3708 | implied_prefix);
3709 }
3710 else
3711 {
3712 /* 3-byte VEX prefix. */
3713 unsigned int m;
3714
3715 i.vex.length = 3;
3716
3717 switch (i.tm.opcode_modifier.vexopcode)
3718 {
3719 case VEX0F:
3720 m = 0x1;
3721 i.vex.bytes[0] = 0xc4;
3722 break;
3723 case VEX0F38:
3724 m = 0x2;
3725 i.vex.bytes[0] = 0xc4;
3726 break;
3727 case VEX0F3A:
3728 m = 0x3;
3729 i.vex.bytes[0] = 0xc4;
3730 break;
3731 case XOP08:
3732 m = 0x8;
3733 i.vex.bytes[0] = 0x8f;
3734 break;
3735 case XOP09:
3736 m = 0x9;
3737 i.vex.bytes[0] = 0x8f;
3738 break;
3739 case XOP0A:
3740 m = 0xa;
3741 i.vex.bytes[0] = 0x8f;
3742 break;
3743 default:
3744 abort ();
3745 }
3746
3747 /* The high 3 bits of the second VEX byte are 1's compliment
3748 of RXB bits from REX. */
3749 i.vex.bytes[1] = (~i.rex & 0x7) << 5 | m;
3750
3751 i.vex.bytes[2] = (w << 7
3752 | register_specifier << 3
3753 | vector_length << 2
3754 | implied_prefix);
3755 }
3756 }
3757
3758 static INLINE bfd_boolean
3759 is_evex_encoding (const insn_template *t)
3760 {
3761 return t->opcode_modifier.evex || t->opcode_modifier.disp8memshift
3762 || t->opcode_modifier.broadcast || t->opcode_modifier.masking
3763 || t->opcode_modifier.sae;
3764 }
3765
3766 static INLINE bfd_boolean
3767 is_any_vex_encoding (const insn_template *t)
3768 {
3769 return t->opcode_modifier.vex || t->opcode_modifier.vexopcode
3770 || is_evex_encoding (t);
3771 }
3772
3773 /* Build the EVEX prefix. */
3774
3775 static void
3776 build_evex_prefix (void)
3777 {
3778 unsigned int register_specifier;
3779 unsigned int implied_prefix;
3780 unsigned int m, w;
3781 rex_byte vrex_used = 0;
3782
3783 /* Check register specifier. */
3784 if (i.vex.register_specifier)
3785 {
3786 gas_assert ((i.vrex & REX_X) == 0);
3787
3788 register_specifier = i.vex.register_specifier->reg_num;
3789 if ((i.vex.register_specifier->reg_flags & RegRex))
3790 register_specifier += 8;
3791 /* The upper 16 registers are encoded in the fourth byte of the
3792 EVEX prefix. */
3793 if (!(i.vex.register_specifier->reg_flags & RegVRex))
3794 i.vex.bytes[3] = 0x8;
3795 register_specifier = ~register_specifier & 0xf;
3796 }
3797 else
3798 {
3799 register_specifier = 0xf;
3800
3801 /* Encode upper 16 vector index register in the fourth byte of
3802 the EVEX prefix. */
3803 if (!(i.vrex & REX_X))
3804 i.vex.bytes[3] = 0x8;
3805 else
3806 vrex_used |= REX_X;
3807 }
3808
3809 switch ((i.tm.base_opcode >> 8) & 0xff)
3810 {
3811 case 0:
3812 implied_prefix = 0;
3813 break;
3814 case DATA_PREFIX_OPCODE:
3815 implied_prefix = 1;
3816 break;
3817 case REPE_PREFIX_OPCODE:
3818 implied_prefix = 2;
3819 break;
3820 case REPNE_PREFIX_OPCODE:
3821 implied_prefix = 3;
3822 break;
3823 default:
3824 abort ();
3825 }
3826
3827 /* 4 byte EVEX prefix. */
3828 i.vex.length = 4;
3829 i.vex.bytes[0] = 0x62;
3830
3831 /* mmmm bits. */
3832 switch (i.tm.opcode_modifier.vexopcode)
3833 {
3834 case VEX0F:
3835 m = 1;
3836 break;
3837 case VEX0F38:
3838 m = 2;
3839 break;
3840 case VEX0F3A:
3841 m = 3;
3842 break;
3843 default:
3844 abort ();
3845 break;
3846 }
3847
3848 /* The high 3 bits of the second EVEX byte are 1's compliment of RXB
3849 bits from REX. */
3850 i.vex.bytes[1] = (~i.rex & 0x7) << 5 | m;
3851
3852 /* The fifth bit of the second EVEX byte is 1's compliment of the
3853 REX_R bit in VREX. */
3854 if (!(i.vrex & REX_R))
3855 i.vex.bytes[1] |= 0x10;
3856 else
3857 vrex_used |= REX_R;
3858
3859 if ((i.reg_operands + i.imm_operands) == i.operands)
3860 {
3861 /* When all operands are registers, the REX_X bit in REX is not
3862 used. We reuse it to encode the upper 16 registers, which is
3863 indicated by the REX_B bit in VREX. The REX_X bit is encoded
3864 as 1's compliment. */
3865 if ((i.vrex & REX_B))
3866 {
3867 vrex_used |= REX_B;
3868 i.vex.bytes[1] &= ~0x40;
3869 }
3870 }
3871
3872 /* EVEX instructions shouldn't need the REX prefix. */
3873 i.vrex &= ~vrex_used;
3874 gas_assert (i.vrex == 0);
3875
3876 /* Check the REX.W bit and VEXW. */
3877 if (i.tm.opcode_modifier.vexw == VEXWIG)
3878 w = (evexwig == evexw1 || (i.rex & REX_W)) ? 1 : 0;
3879 else if (i.tm.opcode_modifier.vexw)
3880 w = i.tm.opcode_modifier.vexw == VEXW1 ? 1 : 0;
3881 else
3882 w = (flag_code == CODE_64BIT ? i.rex & REX_W : evexwig == evexw1) ? 1 : 0;
3883
3884 /* Encode the U bit. */
3885 implied_prefix |= 0x4;
3886
3887 /* The third byte of the EVEX prefix. */
3888 i.vex.bytes[2] = (w << 7 | register_specifier << 3 | implied_prefix);
3889
3890 /* The fourth byte of the EVEX prefix. */
3891 /* The zeroing-masking bit. */
3892 if (i.mask && i.mask->zeroing)
3893 i.vex.bytes[3] |= 0x80;
3894
3895 /* Don't always set the broadcast bit if there is no RC. */
3896 if (!i.rounding)
3897 {
3898 /* Encode the vector length. */
3899 unsigned int vec_length;
3900
3901 if (!i.tm.opcode_modifier.evex
3902 || i.tm.opcode_modifier.evex == EVEXDYN)
3903 {
3904 unsigned int op;
3905
3906 /* Determine vector length from the last multi-length vector
3907 operand. */
3908 vec_length = 0;
3909 for (op = i.operands; op--;)
3910 if (i.tm.operand_types[op].bitfield.xmmword
3911 + i.tm.operand_types[op].bitfield.ymmword
3912 + i.tm.operand_types[op].bitfield.zmmword > 1)
3913 {
3914 if (i.types[op].bitfield.zmmword)
3915 {
3916 i.tm.opcode_modifier.evex = EVEX512;
3917 break;
3918 }
3919 else if (i.types[op].bitfield.ymmword)
3920 {
3921 i.tm.opcode_modifier.evex = EVEX256;
3922 break;
3923 }
3924 else if (i.types[op].bitfield.xmmword)
3925 {
3926 i.tm.opcode_modifier.evex = EVEX128;
3927 break;
3928 }
3929 else if (i.broadcast && (int) op == i.broadcast->operand)
3930 {
3931 switch (i.broadcast->bytes)
3932 {
3933 case 64:
3934 i.tm.opcode_modifier.evex = EVEX512;
3935 break;
3936 case 32:
3937 i.tm.opcode_modifier.evex = EVEX256;
3938 break;
3939 case 16:
3940 i.tm.opcode_modifier.evex = EVEX128;
3941 break;
3942 default:
3943 abort ();
3944 }
3945 break;
3946 }
3947 }
3948
3949 if (op >= MAX_OPERANDS)
3950 abort ();
3951 }
3952
3953 switch (i.tm.opcode_modifier.evex)
3954 {
3955 case EVEXLIG: /* LL' is ignored */
3956 vec_length = evexlig << 5;
3957 break;
3958 case EVEX128:
3959 vec_length = 0 << 5;
3960 break;
3961 case EVEX256:
3962 vec_length = 1 << 5;
3963 break;
3964 case EVEX512:
3965 vec_length = 2 << 5;
3966 break;
3967 default:
3968 abort ();
3969 break;
3970 }
3971 i.vex.bytes[3] |= vec_length;
3972 /* Encode the broadcast bit. */
3973 if (i.broadcast)
3974 i.vex.bytes[3] |= 0x10;
3975 }
3976 else
3977 {
3978 if (i.rounding->type != saeonly)
3979 i.vex.bytes[3] |= 0x10 | (i.rounding->type << 5);
3980 else
3981 i.vex.bytes[3] |= 0x10 | (evexrcig << 5);
3982 }
3983
3984 if (i.mask && i.mask->mask)
3985 i.vex.bytes[3] |= i.mask->mask->reg_num;
3986 }
3987
3988 static void
3989 process_immext (void)
3990 {
3991 expressionS *exp;
3992
3993 /* These AMD 3DNow! and SSE2 instructions have an opcode suffix
3994 which is coded in the same place as an 8-bit immediate field
3995 would be. Here we fake an 8-bit immediate operand from the
3996 opcode suffix stored in tm.extension_opcode.
3997
3998 AVX instructions also use this encoding, for some of
3999 3 argument instructions. */
4000
4001 gas_assert (i.imm_operands <= 1
4002 && (i.operands <= 2
4003 || (is_any_vex_encoding (&i.tm)
4004 && i.operands <= 4)));
4005
4006 exp = &im_expressions[i.imm_operands++];
4007 i.op[i.operands].imms = exp;
4008 i.types[i.operands] = imm8;
4009 i.operands++;
4010 exp->X_op = O_constant;
4011 exp->X_add_number = i.tm.extension_opcode;
4012 i.tm.extension_opcode = None;
4013 }
4014
4015
4016 static int
4017 check_hle (void)
4018 {
4019 switch (i.tm.opcode_modifier.hleprefixok)
4020 {
4021 default:
4022 abort ();
4023 case HLEPrefixNone:
4024 as_bad (_("invalid instruction `%s' after `%s'"),
4025 i.tm.name, i.hle_prefix);
4026 return 0;
4027 case HLEPrefixLock:
4028 if (i.prefix[LOCK_PREFIX])
4029 return 1;
4030 as_bad (_("missing `lock' with `%s'"), i.hle_prefix);
4031 return 0;
4032 case HLEPrefixAny:
4033 return 1;
4034 case HLEPrefixRelease:
4035 if (i.prefix[HLE_PREFIX] != XRELEASE_PREFIX_OPCODE)
4036 {
4037 as_bad (_("instruction `%s' after `xacquire' not allowed"),
4038 i.tm.name);
4039 return 0;
4040 }
4041 if (i.mem_operands == 0 || !(i.flags[i.operands - 1] & Operand_Mem))
4042 {
4043 as_bad (_("memory destination needed for instruction `%s'"
4044 " after `xrelease'"), i.tm.name);
4045 return 0;
4046 }
4047 return 1;
4048 }
4049 }
4050
4051 /* Try the shortest encoding by shortening operand size. */
4052
4053 static void
4054 optimize_encoding (void)
4055 {
4056 unsigned int j;
4057
4058 if (optimize_for_space
4059 && !is_any_vex_encoding (&i.tm)
4060 && i.reg_operands == 1
4061 && i.imm_operands == 1
4062 && !i.types[1].bitfield.byte
4063 && i.op[0].imms->X_op == O_constant
4064 && fits_in_imm7 (i.op[0].imms->X_add_number)
4065 && (i.tm.base_opcode == 0xa8
4066 || (i.tm.base_opcode == 0xf6
4067 && i.tm.extension_opcode == 0x0)))
4068 {
4069 /* Optimize: -Os:
4070 test $imm7, %r64/%r32/%r16 -> test $imm7, %r8
4071 */
4072 unsigned int base_regnum = i.op[1].regs->reg_num;
4073 if (flag_code == CODE_64BIT || base_regnum < 4)
4074 {
4075 i.types[1].bitfield.byte = 1;
4076 /* Ignore the suffix. */
4077 i.suffix = 0;
4078 /* Convert to byte registers. */
4079 if (i.types[1].bitfield.word)
4080 j = 16;
4081 else if (i.types[1].bitfield.dword)
4082 j = 32;
4083 else
4084 j = 48;
4085 if (!(i.op[1].regs->reg_flags & RegRex) && base_regnum < 4)
4086 j += 8;
4087 i.op[1].regs -= j;
4088 }
4089 }
4090 else if (flag_code == CODE_64BIT
4091 && !is_any_vex_encoding (&i.tm)
4092 && ((i.types[1].bitfield.qword
4093 && i.reg_operands == 1
4094 && i.imm_operands == 1
4095 && i.op[0].imms->X_op == O_constant
4096 && ((i.tm.base_opcode == 0xb8
4097 && i.tm.extension_opcode == None
4098 && fits_in_unsigned_long (i.op[0].imms->X_add_number))
4099 || (fits_in_imm31 (i.op[0].imms->X_add_number)
4100 && ((i.tm.base_opcode == 0x24
4101 || i.tm.base_opcode == 0xa8)
4102 || (i.tm.base_opcode == 0x80
4103 && i.tm.extension_opcode == 0x4)
4104 || ((i.tm.base_opcode == 0xf6
4105 || (i.tm.base_opcode | 1) == 0xc7)
4106 && i.tm.extension_opcode == 0x0)))
4107 || (fits_in_imm7 (i.op[0].imms->X_add_number)
4108 && i.tm.base_opcode == 0x83
4109 && i.tm.extension_opcode == 0x4)))
4110 || (i.types[0].bitfield.qword
4111 && ((i.reg_operands == 2
4112 && i.op[0].regs == i.op[1].regs
4113 && (i.tm.base_opcode == 0x30
4114 || i.tm.base_opcode == 0x28))
4115 || (i.reg_operands == 1
4116 && i.operands == 1
4117 && i.tm.base_opcode == 0x30)))))
4118 {
4119 /* Optimize: -O:
4120 andq $imm31, %r64 -> andl $imm31, %r32
4121 andq $imm7, %r64 -> andl $imm7, %r32
4122 testq $imm31, %r64 -> testl $imm31, %r32
4123 xorq %r64, %r64 -> xorl %r32, %r32
4124 subq %r64, %r64 -> subl %r32, %r32
4125 movq $imm31, %r64 -> movl $imm31, %r32
4126 movq $imm32, %r64 -> movl $imm32, %r32
4127 */
4128 i.tm.opcode_modifier.norex64 = 1;
4129 if (i.tm.base_opcode == 0xb8 || (i.tm.base_opcode | 1) == 0xc7)
4130 {
4131 /* Handle
4132 movq $imm31, %r64 -> movl $imm31, %r32
4133 movq $imm32, %r64 -> movl $imm32, %r32
4134 */
4135 i.tm.operand_types[0].bitfield.imm32 = 1;
4136 i.tm.operand_types[0].bitfield.imm32s = 0;
4137 i.tm.operand_types[0].bitfield.imm64 = 0;
4138 i.types[0].bitfield.imm32 = 1;
4139 i.types[0].bitfield.imm32s = 0;
4140 i.types[0].bitfield.imm64 = 0;
4141 i.types[1].bitfield.dword = 1;
4142 i.types[1].bitfield.qword = 0;
4143 if ((i.tm.base_opcode | 1) == 0xc7)
4144 {
4145 /* Handle
4146 movq $imm31, %r64 -> movl $imm31, %r32
4147 */
4148 i.tm.base_opcode = 0xb8;
4149 i.tm.extension_opcode = None;
4150 i.tm.opcode_modifier.w = 0;
4151 i.tm.opcode_modifier.modrm = 0;
4152 }
4153 }
4154 }
4155 else if (optimize > 1
4156 && !optimize_for_space
4157 && !is_any_vex_encoding (&i.tm)
4158 && i.reg_operands == 2
4159 && i.op[0].regs == i.op[1].regs
4160 && ((i.tm.base_opcode & ~(Opcode_D | 1)) == 0x8
4161 || (i.tm.base_opcode & ~(Opcode_D | 1)) == 0x20)
4162 && (flag_code != CODE_64BIT || !i.types[0].bitfield.dword))
4163 {
4164 /* Optimize: -O2:
4165 andb %rN, %rN -> testb %rN, %rN
4166 andw %rN, %rN -> testw %rN, %rN
4167 andq %rN, %rN -> testq %rN, %rN
4168 orb %rN, %rN -> testb %rN, %rN
4169 orw %rN, %rN -> testw %rN, %rN
4170 orq %rN, %rN -> testq %rN, %rN
4171
4172 and outside of 64-bit mode
4173
4174 andl %rN, %rN -> testl %rN, %rN
4175 orl %rN, %rN -> testl %rN, %rN
4176 */
4177 i.tm.base_opcode = 0x84 | (i.tm.base_opcode & 1);
4178 }
4179 else if (i.reg_operands == 3
4180 && i.op[0].regs == i.op[1].regs
4181 && !i.types[2].bitfield.xmmword
4182 && (i.tm.opcode_modifier.vex
4183 || ((!i.mask || i.mask->zeroing)
4184 && !i.rounding
4185 && is_evex_encoding (&i.tm)
4186 && (i.vec_encoding != vex_encoding_evex
4187 || cpu_arch_isa_flags.bitfield.cpuavx512vl
4188 || i.tm.cpu_flags.bitfield.cpuavx512vl
4189 || (i.tm.operand_types[2].bitfield.zmmword
4190 && i.types[2].bitfield.ymmword))))
4191 && ((i.tm.base_opcode == 0x55
4192 || i.tm.base_opcode == 0x6655
4193 || i.tm.base_opcode == 0x66df
4194 || i.tm.base_opcode == 0x57
4195 || i.tm.base_opcode == 0x6657
4196 || i.tm.base_opcode == 0x66ef
4197 || i.tm.base_opcode == 0x66f8
4198 || i.tm.base_opcode == 0x66f9
4199 || i.tm.base_opcode == 0x66fa
4200 || i.tm.base_opcode == 0x66fb
4201 || i.tm.base_opcode == 0x42
4202 || i.tm.base_opcode == 0x6642
4203 || i.tm.base_opcode == 0x47
4204 || i.tm.base_opcode == 0x6647)
4205 && i.tm.extension_opcode == None))
4206 {
4207 /* Optimize: -O1:
4208 VOP, one of vandnps, vandnpd, vxorps, vxorpd, vpsubb, vpsubd,
4209 vpsubq and vpsubw:
4210 EVEX VOP %zmmM, %zmmM, %zmmN
4211 -> VEX VOP %xmmM, %xmmM, %xmmN (M and N < 16)
4212 -> EVEX VOP %xmmM, %xmmM, %xmmN (M || N >= 16) (-O2)
4213 EVEX VOP %ymmM, %ymmM, %ymmN
4214 -> VEX VOP %xmmM, %xmmM, %xmmN (M and N < 16)
4215 -> EVEX VOP %xmmM, %xmmM, %xmmN (M || N >= 16) (-O2)
4216 VEX VOP %ymmM, %ymmM, %ymmN
4217 -> VEX VOP %xmmM, %xmmM, %xmmN
4218 VOP, one of vpandn and vpxor:
4219 VEX VOP %ymmM, %ymmM, %ymmN
4220 -> VEX VOP %xmmM, %xmmM, %xmmN
4221 VOP, one of vpandnd and vpandnq:
4222 EVEX VOP %zmmM, %zmmM, %zmmN
4223 -> VEX vpandn %xmmM, %xmmM, %xmmN (M and N < 16)
4224 -> EVEX VOP %xmmM, %xmmM, %xmmN (M || N >= 16) (-O2)
4225 EVEX VOP %ymmM, %ymmM, %ymmN
4226 -> VEX vpandn %xmmM, %xmmM, %xmmN (M and N < 16)
4227 -> EVEX VOP %xmmM, %xmmM, %xmmN (M || N >= 16) (-O2)
4228 VOP, one of vpxord and vpxorq:
4229 EVEX VOP %zmmM, %zmmM, %zmmN
4230 -> VEX vpxor %xmmM, %xmmM, %xmmN (M and N < 16)
4231 -> EVEX VOP %xmmM, %xmmM, %xmmN (M || N >= 16) (-O2)
4232 EVEX VOP %ymmM, %ymmM, %ymmN
4233 -> VEX vpxor %xmmM, %xmmM, %xmmN (M and N < 16)
4234 -> EVEX VOP %xmmM, %xmmM, %xmmN (M || N >= 16) (-O2)
4235 VOP, one of kxord and kxorq:
4236 VEX VOP %kM, %kM, %kN
4237 -> VEX kxorw %kM, %kM, %kN
4238 VOP, one of kandnd and kandnq:
4239 VEX VOP %kM, %kM, %kN
4240 -> VEX kandnw %kM, %kM, %kN
4241 */
4242 if (is_evex_encoding (&i.tm))
4243 {
4244 if (i.vec_encoding != vex_encoding_evex)
4245 {
4246 i.tm.opcode_modifier.vex = VEX128;
4247 i.tm.opcode_modifier.vexw = VEXW0;
4248 i.tm.opcode_modifier.evex = 0;
4249 }
4250 else if (optimize > 1)
4251 i.tm.opcode_modifier.evex = EVEX128;
4252 else
4253 return;
4254 }
4255 else if (i.tm.operand_types[0].bitfield.class == RegMask)
4256 {
4257 i.tm.base_opcode &= 0xff;
4258 i.tm.opcode_modifier.vexw = VEXW0;
4259 }
4260 else
4261 i.tm.opcode_modifier.vex = VEX128;
4262
4263 if (i.tm.opcode_modifier.vex)
4264 for (j = 0; j < 3; j++)
4265 {
4266 i.types[j].bitfield.xmmword = 1;
4267 i.types[j].bitfield.ymmword = 0;
4268 }
4269 }
4270 else if (i.vec_encoding != vex_encoding_evex
4271 && !i.types[0].bitfield.zmmword
4272 && !i.types[1].bitfield.zmmword
4273 && !i.mask
4274 && !i.broadcast
4275 && is_evex_encoding (&i.tm)
4276 && ((i.tm.base_opcode & ~Opcode_SIMD_IntD) == 0x666f
4277 || (i.tm.base_opcode & ~Opcode_SIMD_IntD) == 0xf36f
4278 || (i.tm.base_opcode & ~Opcode_SIMD_IntD) == 0xf26f
4279 || (i.tm.base_opcode & ~4) == 0x66db
4280 || (i.tm.base_opcode & ~4) == 0x66eb)
4281 && i.tm.extension_opcode == None)
4282 {
4283 /* Optimize: -O1:
4284 VOP, one of vmovdqa32, vmovdqa64, vmovdqu8, vmovdqu16,
4285 vmovdqu32 and vmovdqu64:
4286 EVEX VOP %xmmM, %xmmN
4287 -> VEX vmovdqa|vmovdqu %xmmM, %xmmN (M and N < 16)
4288 EVEX VOP %ymmM, %ymmN
4289 -> VEX vmovdqa|vmovdqu %ymmM, %ymmN (M and N < 16)
4290 EVEX VOP %xmmM, mem
4291 -> VEX vmovdqa|vmovdqu %xmmM, mem (M < 16)
4292 EVEX VOP %ymmM, mem
4293 -> VEX vmovdqa|vmovdqu %ymmM, mem (M < 16)
4294 EVEX VOP mem, %xmmN
4295 -> VEX mvmovdqa|vmovdquem, %xmmN (N < 16)
4296 EVEX VOP mem, %ymmN
4297 -> VEX vmovdqa|vmovdqu mem, %ymmN (N < 16)
4298 VOP, one of vpand, vpandn, vpor, vpxor:
4299 EVEX VOP{d,q} %xmmL, %xmmM, %xmmN
4300 -> VEX VOP %xmmL, %xmmM, %xmmN (L, M, and N < 16)
4301 EVEX VOP{d,q} %ymmL, %ymmM, %ymmN
4302 -> VEX VOP %ymmL, %ymmM, %ymmN (L, M, and N < 16)
4303 EVEX VOP{d,q} mem, %xmmM, %xmmN
4304 -> VEX VOP mem, %xmmM, %xmmN (M and N < 16)
4305 EVEX VOP{d,q} mem, %ymmM, %ymmN
4306 -> VEX VOP mem, %ymmM, %ymmN (M and N < 16)
4307 */
4308 for (j = 0; j < i.operands; j++)
4309 if (operand_type_check (i.types[j], disp)
4310 && i.op[j].disps->X_op == O_constant)
4311 {
4312 /* Since the VEX prefix has 2 or 3 bytes, the EVEX prefix
4313 has 4 bytes, EVEX Disp8 has 1 byte and VEX Disp32 has 4
4314 bytes, we choose EVEX Disp8 over VEX Disp32. */
4315 int evex_disp8, vex_disp8;
4316 unsigned int memshift = i.memshift;
4317 offsetT n = i.op[j].disps->X_add_number;
4318
4319 evex_disp8 = fits_in_disp8 (n);
4320 i.memshift = 0;
4321 vex_disp8 = fits_in_disp8 (n);
4322 if (evex_disp8 != vex_disp8)
4323 {
4324 i.memshift = memshift;
4325 return;
4326 }
4327
4328 i.types[j].bitfield.disp8 = vex_disp8;
4329 break;
4330 }
4331 if ((i.tm.base_opcode & ~Opcode_SIMD_IntD) == 0xf26f)
4332 i.tm.base_opcode ^= 0xf36f ^ 0xf26f;
4333 i.tm.opcode_modifier.vex
4334 = i.types[0].bitfield.ymmword ? VEX256 : VEX128;
4335 i.tm.opcode_modifier.vexw = VEXW0;
4336 /* VPAND, VPOR, and VPXOR are commutative. */
4337 if (i.reg_operands == 3 && i.tm.base_opcode != 0x66df)
4338 i.tm.opcode_modifier.commutative = 1;
4339 i.tm.opcode_modifier.evex = 0;
4340 i.tm.opcode_modifier.masking = 0;
4341 i.tm.opcode_modifier.broadcast = 0;
4342 i.tm.opcode_modifier.disp8memshift = 0;
4343 i.memshift = 0;
4344 if (j < i.operands)
4345 i.types[j].bitfield.disp8
4346 = fits_in_disp8 (i.op[j].disps->X_add_number);
4347 }
4348 }
4349
4350 /* Return non-zero for load instruction. */
4351
4352 static int
4353 load_insn_p (void)
4354 {
4355 unsigned int dest;
4356 int any_vex_p = is_any_vex_encoding (&i.tm);
4357 unsigned int base_opcode = i.tm.base_opcode | 1;
4358
4359 if (!any_vex_p)
4360 {
4361 /* Anysize insns: lea, invlpg, clflush, prefetchnta, prefetcht0,
4362 prefetcht1, prefetcht2, prefetchtw, bndmk, bndcl, bndcu, bndcn,
4363 bndstx, bndldx, prefetchwt1, clflushopt, clwb, cldemote. */
4364 if (i.tm.opcode_modifier.anysize)
4365 return 0;
4366
4367 /* pop, popf, popa. */
4368 if (strcmp (i.tm.name, "pop") == 0
4369 || i.tm.base_opcode == 0x9d
4370 || i.tm.base_opcode == 0x61)
4371 return 1;
4372
4373 /* movs, cmps, lods, scas. */
4374 if ((i.tm.base_opcode | 0xb) == 0xaf)
4375 return 1;
4376
4377 /* outs, xlatb. */
4378 if (base_opcode == 0x6f
4379 || i.tm.base_opcode == 0xd7)
4380 return 1;
4381 /* NB: For AMD-specific insns with implicit memory operands,
4382 they're intentionally not covered. */
4383 }
4384
4385 /* No memory operand. */
4386 if (!i.mem_operands)
4387 return 0;
4388
4389 if (any_vex_p)
4390 {
4391 /* vldmxcsr. */
4392 if (i.tm.base_opcode == 0xae
4393 && i.tm.opcode_modifier.vex
4394 && i.tm.opcode_modifier.vexopcode == VEX0F
4395 && i.tm.extension_opcode == 2)
4396 return 1;
4397 }
4398 else
4399 {
4400 /* test, not, neg, mul, imul, div, idiv. */
4401 if ((i.tm.base_opcode == 0xf6 || i.tm.base_opcode == 0xf7)
4402 && i.tm.extension_opcode != 1)
4403 return 1;
4404
4405 /* inc, dec. */
4406 if (base_opcode == 0xff && i.tm.extension_opcode <= 1)
4407 return 1;
4408
4409 /* add, or, adc, sbb, and, sub, xor, cmp. */
4410 if (i.tm.base_opcode >= 0x80 && i.tm.base_opcode <= 0x83)
4411 return 1;
4412
4413 /* bt, bts, btr, btc. */
4414 if (i.tm.base_opcode == 0xfba
4415 && (i.tm.extension_opcode >= 4 && i.tm.extension_opcode <= 7))
4416 return 1;
4417
4418 /* rol, ror, rcl, rcr, shl/sal, shr, sar. */
4419 if ((base_opcode == 0xc1
4420 || (i.tm.base_opcode >= 0xd0 && i.tm.base_opcode <= 0xd3))
4421 && i.tm.extension_opcode != 6)
4422 return 1;
4423
4424 /* cmpxchg8b, cmpxchg16b, xrstors. */
4425 if (i.tm.base_opcode == 0xfc7
4426 && (i.tm.extension_opcode == 1 || i.tm.extension_opcode == 3))
4427 return 1;
4428
4429 /* fxrstor, ldmxcsr, xrstor. */
4430 if (i.tm.base_opcode == 0xfae
4431 && (i.tm.extension_opcode == 1
4432 || i.tm.extension_opcode == 2
4433 || i.tm.extension_opcode == 5))
4434 return 1;
4435
4436 /* lgdt, lidt, lmsw. */
4437 if (i.tm.base_opcode == 0xf01
4438 && (i.tm.extension_opcode == 2
4439 || i.tm.extension_opcode == 3
4440 || i.tm.extension_opcode == 6))
4441 return 1;
4442
4443 /* vmptrld */
4444 if (i.tm.base_opcode == 0xfc7
4445 && i.tm.extension_opcode == 6)
4446 return 1;
4447
4448 /* Check for x87 instructions. */
4449 if (i.tm.base_opcode >= 0xd8 && i.tm.base_opcode <= 0xdf)
4450 {
4451 /* Skip fst, fstp, fstenv, fstcw. */
4452 if (i.tm.base_opcode == 0xd9
4453 && (i.tm.extension_opcode == 2
4454 || i.tm.extension_opcode == 3
4455 || i.tm.extension_opcode == 6
4456 || i.tm.extension_opcode == 7))
4457 return 0;
4458
4459 /* Skip fisttp, fist, fistp, fstp. */
4460 if (i.tm.base_opcode == 0xdb
4461 && (i.tm.extension_opcode == 1
4462 || i.tm.extension_opcode == 2
4463 || i.tm.extension_opcode == 3
4464 || i.tm.extension_opcode == 7))
4465 return 0;
4466
4467 /* Skip fisttp, fst, fstp, fsave, fstsw. */
4468 if (i.tm.base_opcode == 0xdd
4469 && (i.tm.extension_opcode == 1
4470 || i.tm.extension_opcode == 2
4471 || i.tm.extension_opcode == 3
4472 || i.tm.extension_opcode == 6
4473 || i.tm.extension_opcode == 7))
4474 return 0;
4475
4476 /* Skip fisttp, fist, fistp, fbstp, fistp. */
4477 if (i.tm.base_opcode == 0xdf
4478 && (i.tm.extension_opcode == 1
4479 || i.tm.extension_opcode == 2
4480 || i.tm.extension_opcode == 3
4481 || i.tm.extension_opcode == 6
4482 || i.tm.extension_opcode == 7))
4483 return 0;
4484
4485 return 1;
4486 }
4487 }
4488
4489 dest = i.operands - 1;
4490
4491 /* Check fake imm8 operand and 3 source operands. */
4492 if ((i.tm.opcode_modifier.immext
4493 || i.tm.opcode_modifier.vexsources == VEX3SOURCES)
4494 && i.types[dest].bitfield.imm8)
4495 dest--;
4496
4497 /* add, or, adc, sbb, and, sub, xor, cmp, test, xchg, xadd */
4498 if (!any_vex_p
4499 && (base_opcode == 0x1
4500 || base_opcode == 0x9
4501 || base_opcode == 0x11
4502 || base_opcode == 0x19
4503 || base_opcode == 0x21
4504 || base_opcode == 0x29
4505 || base_opcode == 0x31
4506 || base_opcode == 0x39
4507 || (i.tm.base_opcode >= 0x84 && i.tm.base_opcode <= 0x87)
4508 || base_opcode == 0xfc1))
4509 return 1;
4510
4511 /* Check for load instruction. */
4512 return (i.types[dest].bitfield.class != ClassNone
4513 || i.types[dest].bitfield.instance == Accum);
4514 }
4515
4516 /* Output lfence, 0xfaee8, after instruction. */
4517
4518 static void
4519 insert_lfence_after (void)
4520 {
4521 if (lfence_after_load && load_insn_p ())
4522 {
4523 /* There are also two REP string instructions that require
4524 special treatment. Specifically, the compare string (CMPS)
4525 and scan string (SCAS) instructions set EFLAGS in a manner
4526 that depends on the data being compared/scanned. When used
4527 with a REP prefix, the number of iterations may therefore
4528 vary depending on this data. If the data is a program secret
4529 chosen by the adversary using an LVI method,
4530 then this data-dependent behavior may leak some aspect
4531 of the secret. */
4532 if (((i.tm.base_opcode | 0x1) == 0xa7
4533 || (i.tm.base_opcode | 0x1) == 0xaf)
4534 && i.prefix[REP_PREFIX])
4535 {
4536 as_warn (_("`%s` changes flags which would affect control flow behavior"),
4537 i.tm.name);
4538 }
4539 char *p = frag_more (3);
4540 *p++ = 0xf;
4541 *p++ = 0xae;
4542 *p = 0xe8;
4543 }
4544 }
4545
4546 /* Output lfence, 0xfaee8, before instruction. */
4547
4548 static void
4549 insert_lfence_before (void)
4550 {
4551 char *p;
4552
4553 if (is_any_vex_encoding (&i.tm))
4554 return;
4555
4556 if (i.tm.base_opcode == 0xff
4557 && (i.tm.extension_opcode == 2 || i.tm.extension_opcode == 4))
4558 {
4559 /* Insert lfence before indirect branch if needed. */
4560
4561 if (lfence_before_indirect_branch == lfence_branch_none)
4562 return;
4563
4564 if (i.operands != 1)
4565 abort ();
4566
4567 if (i.reg_operands == 1)
4568 {
4569 /* Indirect branch via register. Don't insert lfence with
4570 -mlfence-after-load=yes. */
4571 if (lfence_after_load
4572 || lfence_before_indirect_branch == lfence_branch_memory)
4573 return;
4574 }
4575 else if (i.mem_operands == 1
4576 && lfence_before_indirect_branch != lfence_branch_register)
4577 {
4578 as_warn (_("indirect `%s` with memory operand should be avoided"),
4579 i.tm.name);
4580 return;
4581 }
4582 else
4583 return;
4584
4585 if (last_insn.kind != last_insn_other
4586 && last_insn.seg == now_seg)
4587 {
4588 as_warn_where (last_insn.file, last_insn.line,
4589 _("`%s` skips -mlfence-before-indirect-branch on `%s`"),
4590 last_insn.name, i.tm.name);
4591 return;
4592 }
4593
4594 p = frag_more (3);
4595 *p++ = 0xf;
4596 *p++ = 0xae;
4597 *p = 0xe8;
4598 return;
4599 }
4600
4601 /* Output or/not/shl and lfence before near ret. */
4602 if (lfence_before_ret != lfence_before_ret_none
4603 && (i.tm.base_opcode == 0xc2
4604 || i.tm.base_opcode == 0xc3))
4605 {
4606 if (last_insn.kind != last_insn_other
4607 && last_insn.seg == now_seg)
4608 {
4609 as_warn_where (last_insn.file, last_insn.line,
4610 _("`%s` skips -mlfence-before-ret on `%s`"),
4611 last_insn.name, i.tm.name);
4612 return;
4613 }
4614
4615 /* Near ret ingore operand size override under CPU64. */
4616 char prefix = flag_code == CODE_64BIT
4617 ? 0x48
4618 : i.prefix[DATA_PREFIX] ? 0x66 : 0x0;
4619
4620 if (lfence_before_ret == lfence_before_ret_not)
4621 {
4622 /* not: 0xf71424, may add prefix
4623 for operand size override or 64-bit code. */
4624 p = frag_more ((prefix ? 2 : 0) + 6 + 3);
4625 if (prefix)
4626 *p++ = prefix;
4627 *p++ = 0xf7;
4628 *p++ = 0x14;
4629 *p++ = 0x24;
4630 if (prefix)
4631 *p++ = prefix;
4632 *p++ = 0xf7;
4633 *p++ = 0x14;
4634 *p++ = 0x24;
4635 }
4636 else
4637 {
4638 p = frag_more ((prefix ? 1 : 0) + 4 + 3);
4639 if (prefix)
4640 *p++ = prefix;
4641 if (lfence_before_ret == lfence_before_ret_or)
4642 {
4643 /* or: 0x830c2400, may add prefix
4644 for operand size override or 64-bit code. */
4645 *p++ = 0x83;
4646 *p++ = 0x0c;
4647 }
4648 else
4649 {
4650 /* shl: 0xc1242400, may add prefix
4651 for operand size override or 64-bit code. */
4652 *p++ = 0xc1;
4653 *p++ = 0x24;
4654 }
4655
4656 *p++ = 0x24;
4657 *p++ = 0x0;
4658 }
4659
4660 *p++ = 0xf;
4661 *p++ = 0xae;
4662 *p = 0xe8;
4663 }
4664 }
4665
4666 /* This is the guts of the machine-dependent assembler. LINE points to a
4667 machine dependent instruction. This function is supposed to emit
4668 the frags/bytes it assembles to. */
4669
4670 void
4671 md_assemble (char *line)
4672 {
4673 unsigned int j;
4674 char mnemonic[MAX_MNEM_SIZE], mnem_suffix;
4675 const insn_template *t;
4676
4677 /* Initialize globals. */
4678 memset (&i, '\0', sizeof (i));
4679 for (j = 0; j < MAX_OPERANDS; j++)
4680 i.reloc[j] = NO_RELOC;
4681 memset (disp_expressions, '\0', sizeof (disp_expressions));
4682 memset (im_expressions, '\0', sizeof (im_expressions));
4683 save_stack_p = save_stack;
4684
4685 /* First parse an instruction mnemonic & call i386_operand for the operands.
4686 We assume that the scrubber has arranged it so that line[0] is the valid
4687 start of a (possibly prefixed) mnemonic. */
4688
4689 line = parse_insn (line, mnemonic);
4690 if (line == NULL)
4691 return;
4692 mnem_suffix = i.suffix;
4693
4694 line = parse_operands (line, mnemonic);
4695 this_operand = -1;
4696 xfree (i.memop1_string);
4697 i.memop1_string = NULL;
4698 if (line == NULL)
4699 return;
4700
4701 /* Now we've parsed the mnemonic into a set of templates, and have the
4702 operands at hand. */
4703
4704 /* All Intel opcodes have reversed operands except for "bound", "enter",
4705 "monitor*", "mwait*", "tpause", and "umwait". We also don't reverse
4706 intersegment "jmp" and "call" instructions with 2 immediate operands so
4707 that the immediate segment precedes the offset, as it does when in AT&T
4708 mode. */
4709 if (intel_syntax
4710 && i.operands > 1
4711 && (strcmp (mnemonic, "bound") != 0)
4712 && (strcmp (mnemonic, "invlpga") != 0)
4713 && (strncmp (mnemonic, "monitor", 7) != 0)
4714 && (strncmp (mnemonic, "mwait", 5) != 0)
4715 && (strcmp (mnemonic, "tpause") != 0)
4716 && (strcmp (mnemonic, "umwait") != 0)
4717 && !(operand_type_check (i.types[0], imm)
4718 && operand_type_check (i.types[1], imm)))
4719 swap_operands ();
4720
4721 /* The order of the immediates should be reversed
4722 for 2 immediates extrq and insertq instructions */
4723 if (i.imm_operands == 2
4724 && (strcmp (mnemonic, "extrq") == 0
4725 || strcmp (mnemonic, "insertq") == 0))
4726 swap_2_operands (0, 1);
4727
4728 if (i.imm_operands)
4729 optimize_imm ();
4730
4731 /* Don't optimize displacement for movabs since it only takes 64bit
4732 displacement. */
4733 if (i.disp_operands
4734 && i.disp_encoding != disp_encoding_32bit
4735 && (flag_code != CODE_64BIT
4736 || strcmp (mnemonic, "movabs") != 0))
4737 optimize_disp ();
4738
4739 /* Next, we find a template that matches the given insn,
4740 making sure the overlap of the given operands types is consistent
4741 with the template operand types. */
4742
4743 if (!(t = match_template (mnem_suffix)))
4744 return;
4745
4746 if (sse_check != check_none
4747 && !i.tm.opcode_modifier.noavx
4748 && !i.tm.cpu_flags.bitfield.cpuavx
4749 && !i.tm.cpu_flags.bitfield.cpuavx512f
4750 && (i.tm.cpu_flags.bitfield.cpusse
4751 || i.tm.cpu_flags.bitfield.cpusse2
4752 || i.tm.cpu_flags.bitfield.cpusse3
4753 || i.tm.cpu_flags.bitfield.cpussse3
4754 || i.tm.cpu_flags.bitfield.cpusse4_1
4755 || i.tm.cpu_flags.bitfield.cpusse4_2
4756 || i.tm.cpu_flags.bitfield.cpusse4a
4757 || i.tm.cpu_flags.bitfield.cpupclmul
4758 || i.tm.cpu_flags.bitfield.cpuaes
4759 || i.tm.cpu_flags.bitfield.cpusha
4760 || i.tm.cpu_flags.bitfield.cpugfni))
4761 {
4762 (sse_check == check_warning
4763 ? as_warn
4764 : as_bad) (_("SSE instruction `%s' is used"), i.tm.name);
4765 }
4766
4767 if (i.tm.opcode_modifier.fwait)
4768 if (!add_prefix (FWAIT_OPCODE))
4769 return;
4770
4771 /* Check if REP prefix is OK. */
4772 if (i.rep_prefix && !i.tm.opcode_modifier.repprefixok)
4773 {
4774 as_bad (_("invalid instruction `%s' after `%s'"),
4775 i.tm.name, i.rep_prefix);
4776 return;
4777 }
4778
4779 /* Check for lock without a lockable instruction. Destination operand
4780 must be memory unless it is xchg (0x86). */
4781 if (i.prefix[LOCK_PREFIX]
4782 && (!i.tm.opcode_modifier.islockable
4783 || i.mem_operands == 0
4784 || (i.tm.base_opcode != 0x86
4785 && !(i.flags[i.operands - 1] & Operand_Mem))))
4786 {
4787 as_bad (_("expecting lockable instruction after `lock'"));
4788 return;
4789 }
4790
4791 /* Check for data size prefix on VEX/XOP/EVEX encoded insns. */
4792 if (i.prefix[DATA_PREFIX] && is_any_vex_encoding (&i.tm))
4793 {
4794 as_bad (_("data size prefix invalid with `%s'"), i.tm.name);
4795 return;
4796 }
4797
4798 /* Check if HLE prefix is OK. */
4799 if (i.hle_prefix && !check_hle ())
4800 return;
4801
4802 /* Check BND prefix. */
4803 if (i.bnd_prefix && !i.tm.opcode_modifier.bndprefixok)
4804 as_bad (_("expecting valid branch instruction after `bnd'"));
4805
4806 /* Check NOTRACK prefix. */
4807 if (i.notrack_prefix && !i.tm.opcode_modifier.notrackprefixok)
4808 as_bad (_("expecting indirect branch instruction after `notrack'"));
4809
4810 if (i.tm.cpu_flags.bitfield.cpumpx)
4811 {
4812 if (flag_code == CODE_64BIT && i.prefix[ADDR_PREFIX])
4813 as_bad (_("32-bit address isn't allowed in 64-bit MPX instructions."));
4814 else if (flag_code != CODE_16BIT
4815 ? i.prefix[ADDR_PREFIX]
4816 : i.mem_operands && !i.prefix[ADDR_PREFIX])
4817 as_bad (_("16-bit address isn't allowed in MPX instructions"));
4818 }
4819
4820 /* Insert BND prefix. */
4821 if (add_bnd_prefix && i.tm.opcode_modifier.bndprefixok)
4822 {
4823 if (!i.prefix[BND_PREFIX])
4824 add_prefix (BND_PREFIX_OPCODE);
4825 else if (i.prefix[BND_PREFIX] != BND_PREFIX_OPCODE)
4826 {
4827 as_warn (_("replacing `rep'/`repe' prefix by `bnd'"));
4828 i.prefix[BND_PREFIX] = BND_PREFIX_OPCODE;
4829 }
4830 }
4831
4832 /* Check string instruction segment overrides. */
4833 if (i.tm.opcode_modifier.isstring >= IS_STRING_ES_OP0)
4834 {
4835 gas_assert (i.mem_operands);
4836 if (!check_string ())
4837 return;
4838 i.disp_operands = 0;
4839 }
4840
4841 if (optimize && !i.no_optimize && i.tm.opcode_modifier.optimize)
4842 optimize_encoding ();
4843
4844 if (!process_suffix ())
4845 return;
4846
4847 /* Update operand types. */
4848 for (j = 0; j < i.operands; j++)
4849 i.types[j] = operand_type_and (i.types[j], i.tm.operand_types[j]);
4850
4851 /* Make still unresolved immediate matches conform to size of immediate
4852 given in i.suffix. */
4853 if (!finalize_imm ())
4854 return;
4855
4856 if (i.types[0].bitfield.imm1)
4857 i.imm_operands = 0; /* kludge for shift insns. */
4858
4859 /* We only need to check those implicit registers for instructions
4860 with 3 operands or less. */
4861 if (i.operands <= 3)
4862 for (j = 0; j < i.operands; j++)
4863 if (i.types[j].bitfield.instance != InstanceNone
4864 && !i.types[j].bitfield.xmmword)
4865 i.reg_operands--;
4866
4867 /* ImmExt should be processed after SSE2AVX. */
4868 if (!i.tm.opcode_modifier.sse2avx
4869 && i.tm.opcode_modifier.immext)
4870 process_immext ();
4871
4872 /* For insns with operands there are more diddles to do to the opcode. */
4873 if (i.operands)
4874 {
4875 if (!process_operands ())
4876 return;
4877 }
4878 else if (!quiet_warnings && i.tm.opcode_modifier.ugh)
4879 {
4880 /* UnixWare fsub no args is alias for fsubp, fadd -> faddp, etc. */
4881 as_warn (_("translating to `%sp'"), i.tm.name);
4882 }
4883
4884 if (is_any_vex_encoding (&i.tm))
4885 {
4886 if (!cpu_arch_flags.bitfield.cpui286)
4887 {
4888 as_bad (_("instruction `%s' isn't supported outside of protected mode."),
4889 i.tm.name);
4890 return;
4891 }
4892
4893 if (i.tm.opcode_modifier.vex)
4894 build_vex_prefix (t);
4895 else
4896 build_evex_prefix ();
4897 }
4898
4899 /* Handle conversion of 'int $3' --> special int3 insn. XOP or FMA4
4900 instructions may define INT_OPCODE as well, so avoid this corner
4901 case for those instructions that use MODRM. */
4902 if (i.tm.base_opcode == INT_OPCODE
4903 && !i.tm.opcode_modifier.modrm
4904 && i.op[0].imms->X_add_number == 3)
4905 {
4906 i.tm.base_opcode = INT3_OPCODE;
4907 i.imm_operands = 0;
4908 }
4909
4910 if ((i.tm.opcode_modifier.jump == JUMP
4911 || i.tm.opcode_modifier.jump == JUMP_BYTE
4912 || i.tm.opcode_modifier.jump == JUMP_DWORD)
4913 && i.op[0].disps->X_op == O_constant)
4914 {
4915 /* Convert "jmp constant" (and "call constant") to a jump (call) to
4916 the absolute address given by the constant. Since ix86 jumps and
4917 calls are pc relative, we need to generate a reloc. */
4918 i.op[0].disps->X_add_symbol = &abs_symbol;
4919 i.op[0].disps->X_op = O_symbol;
4920 }
4921
4922 /* For 8 bit registers we need an empty rex prefix. Also if the
4923 instruction already has a prefix, we need to convert old
4924 registers to new ones. */
4925
4926 if ((i.types[0].bitfield.class == Reg && i.types[0].bitfield.byte
4927 && (i.op[0].regs->reg_flags & RegRex64) != 0)
4928 || (i.types[1].bitfield.class == Reg && i.types[1].bitfield.byte
4929 && (i.op[1].regs->reg_flags & RegRex64) != 0)
4930 || (((i.types[0].bitfield.class == Reg && i.types[0].bitfield.byte)
4931 || (i.types[1].bitfield.class == Reg && i.types[1].bitfield.byte))
4932 && i.rex != 0))
4933 {
4934 int x;
4935
4936 i.rex |= REX_OPCODE;
4937 for (x = 0; x < 2; x++)
4938 {
4939 /* Look for 8 bit operand that uses old registers. */
4940 if (i.types[x].bitfield.class == Reg && i.types[x].bitfield.byte
4941 && (i.op[x].regs->reg_flags & RegRex64) == 0)
4942 {
4943 gas_assert (!(i.op[x].regs->reg_flags & RegRex));
4944 /* In case it is "hi" register, give up. */
4945 if (i.op[x].regs->reg_num > 3)
4946 as_bad (_("can't encode register '%s%s' in an "
4947 "instruction requiring REX prefix."),
4948 register_prefix, i.op[x].regs->reg_name);
4949
4950 /* Otherwise it is equivalent to the extended register.
4951 Since the encoding doesn't change this is merely
4952 cosmetic cleanup for debug output. */
4953
4954 i.op[x].regs = i.op[x].regs + 8;
4955 }
4956 }
4957 }
4958
4959 if (i.rex == 0 && i.rex_encoding)
4960 {
4961 /* Check if we can add a REX_OPCODE byte. Look for 8 bit operand
4962 that uses legacy register. If it is "hi" register, don't add
4963 the REX_OPCODE byte. */
4964 int x;
4965 for (x = 0; x < 2; x++)
4966 if (i.types[x].bitfield.class == Reg
4967 && i.types[x].bitfield.byte
4968 && (i.op[x].regs->reg_flags & RegRex64) == 0
4969 && i.op[x].regs->reg_num > 3)
4970 {
4971 gas_assert (!(i.op[x].regs->reg_flags & RegRex));
4972 i.rex_encoding = FALSE;
4973 break;
4974 }
4975
4976 if (i.rex_encoding)
4977 i.rex = REX_OPCODE;
4978 }
4979
4980 if (i.rex != 0)
4981 add_prefix (REX_OPCODE | i.rex);
4982
4983 insert_lfence_before ();
4984
4985 /* We are ready to output the insn. */
4986 output_insn ();
4987
4988 insert_lfence_after ();
4989
4990 last_insn.seg = now_seg;
4991
4992 if (i.tm.opcode_modifier.isprefix)
4993 {
4994 last_insn.kind = last_insn_prefix;
4995 last_insn.name = i.tm.name;
4996 last_insn.file = as_where (&last_insn.line);
4997 }
4998 else
4999 last_insn.kind = last_insn_other;
5000 }
5001
5002 static char *
5003 parse_insn (char *line, char *mnemonic)
5004 {
5005 char *l = line;
5006 char *token_start = l;
5007 char *mnem_p;
5008 int supported;
5009 const insn_template *t;
5010 char *dot_p = NULL;
5011
5012 while (1)
5013 {
5014 mnem_p = mnemonic;
5015 while ((*mnem_p = mnemonic_chars[(unsigned char) *l]) != 0)
5016 {
5017 if (*mnem_p == '.')
5018 dot_p = mnem_p;
5019 mnem_p++;
5020 if (mnem_p >= mnemonic + MAX_MNEM_SIZE)
5021 {
5022 as_bad (_("no such instruction: `%s'"), token_start);
5023 return NULL;
5024 }
5025 l++;
5026 }
5027 if (!is_space_char (*l)
5028 && *l != END_OF_INSN
5029 && (intel_syntax
5030 || (*l != PREFIX_SEPARATOR
5031 && *l != ',')))
5032 {
5033 as_bad (_("invalid character %s in mnemonic"),
5034 output_invalid (*l));
5035 return NULL;
5036 }
5037 if (token_start == l)
5038 {
5039 if (!intel_syntax && *l == PREFIX_SEPARATOR)
5040 as_bad (_("expecting prefix; got nothing"));
5041 else
5042 as_bad (_("expecting mnemonic; got nothing"));
5043 return NULL;
5044 }
5045
5046 /* Look up instruction (or prefix) via hash table. */
5047 current_templates = (const templates *) hash_find (op_hash, mnemonic);
5048
5049 if (*l != END_OF_INSN
5050 && (!is_space_char (*l) || l[1] != END_OF_INSN)
5051 && current_templates
5052 && current_templates->start->opcode_modifier.isprefix)
5053 {
5054 if (!cpu_flags_check_cpu64 (current_templates->start->cpu_flags))
5055 {
5056 as_bad ((flag_code != CODE_64BIT
5057 ? _("`%s' is only supported in 64-bit mode")
5058 : _("`%s' is not supported in 64-bit mode")),
5059 current_templates->start->name);
5060 return NULL;
5061 }
5062 /* If we are in 16-bit mode, do not allow addr16 or data16.
5063 Similarly, in 32-bit mode, do not allow addr32 or data32. */
5064 if ((current_templates->start->opcode_modifier.size == SIZE16
5065 || current_templates->start->opcode_modifier.size == SIZE32)
5066 && flag_code != CODE_64BIT
5067 && ((current_templates->start->opcode_modifier.size == SIZE32)
5068 ^ (flag_code == CODE_16BIT)))
5069 {
5070 as_bad (_("redundant %s prefix"),
5071 current_templates->start->name);
5072 return NULL;
5073 }
5074 if (current_templates->start->opcode_length == 0)
5075 {
5076 /* Handle pseudo prefixes. */
5077 switch (current_templates->start->base_opcode)
5078 {
5079 case 0x0:
5080 /* {disp8} */
5081 i.disp_encoding = disp_encoding_8bit;
5082 break;
5083 case 0x1:
5084 /* {disp32} */
5085 i.disp_encoding = disp_encoding_32bit;
5086 break;
5087 case 0x2:
5088 /* {load} */
5089 i.dir_encoding = dir_encoding_load;
5090 break;
5091 case 0x3:
5092 /* {store} */
5093 i.dir_encoding = dir_encoding_store;
5094 break;
5095 case 0x4:
5096 /* {vex} */
5097 i.vec_encoding = vex_encoding_vex;
5098 break;
5099 case 0x5:
5100 /* {vex3} */
5101 i.vec_encoding = vex_encoding_vex3;
5102 break;
5103 case 0x6:
5104 /* {evex} */
5105 i.vec_encoding = vex_encoding_evex;
5106 break;
5107 case 0x7:
5108 /* {rex} */
5109 i.rex_encoding = TRUE;
5110 break;
5111 case 0x8:
5112 /* {nooptimize} */
5113 i.no_optimize = TRUE;
5114 break;
5115 default:
5116 abort ();
5117 }
5118 }
5119 else
5120 {
5121 /* Add prefix, checking for repeated prefixes. */
5122 switch (add_prefix (current_templates->start->base_opcode))
5123 {
5124 case PREFIX_EXIST:
5125 return NULL;
5126 case PREFIX_DS:
5127 if (current_templates->start->cpu_flags.bitfield.cpuibt)
5128 i.notrack_prefix = current_templates->start->name;
5129 break;
5130 case PREFIX_REP:
5131 if (current_templates->start->cpu_flags.bitfield.cpuhle)
5132 i.hle_prefix = current_templates->start->name;
5133 else if (current_templates->start->cpu_flags.bitfield.cpumpx)
5134 i.bnd_prefix = current_templates->start->name;
5135 else
5136 i.rep_prefix = current_templates->start->name;
5137 break;
5138 default:
5139 break;
5140 }
5141 }
5142 /* Skip past PREFIX_SEPARATOR and reset token_start. */
5143 token_start = ++l;
5144 }
5145 else
5146 break;
5147 }
5148
5149 if (!current_templates)
5150 {
5151 /* Deprecated functionality (new code should use pseudo-prefixes instead):
5152 Check if we should swap operand or force 32bit displacement in
5153 encoding. */
5154 if (mnem_p - 2 == dot_p && dot_p[1] == 's')
5155 i.dir_encoding = dir_encoding_swap;
5156 else if (mnem_p - 3 == dot_p
5157 && dot_p[1] == 'd'
5158 && dot_p[2] == '8')
5159 i.disp_encoding = disp_encoding_8bit;
5160 else if (mnem_p - 4 == dot_p
5161 && dot_p[1] == 'd'
5162 && dot_p[2] == '3'
5163 && dot_p[3] == '2')
5164 i.disp_encoding = disp_encoding_32bit;
5165 else
5166 goto check_suffix;
5167 mnem_p = dot_p;
5168 *dot_p = '\0';
5169 current_templates = (const templates *) hash_find (op_hash, mnemonic);
5170 }
5171
5172 if (!current_templates)
5173 {
5174 check_suffix:
5175 if (mnem_p > mnemonic)
5176 {
5177 /* See if we can get a match by trimming off a suffix. */
5178 switch (mnem_p[-1])
5179 {
5180 case WORD_MNEM_SUFFIX:
5181 if (intel_syntax && (intel_float_operand (mnemonic) & 2))
5182 i.suffix = SHORT_MNEM_SUFFIX;
5183 else
5184 /* Fall through. */
5185 case BYTE_MNEM_SUFFIX:
5186 case QWORD_MNEM_SUFFIX:
5187 i.suffix = mnem_p[-1];
5188 mnem_p[-1] = '\0';
5189 current_templates = (const templates *) hash_find (op_hash,
5190 mnemonic);
5191 break;
5192 case SHORT_MNEM_SUFFIX:
5193 case LONG_MNEM_SUFFIX:
5194 if (!intel_syntax)
5195 {
5196 i.suffix = mnem_p[-1];
5197 mnem_p[-1] = '\0';
5198 current_templates = (const templates *) hash_find (op_hash,
5199 mnemonic);
5200 }
5201 break;
5202
5203 /* Intel Syntax. */
5204 case 'd':
5205 if (intel_syntax)
5206 {
5207 if (intel_float_operand (mnemonic) == 1)
5208 i.suffix = SHORT_MNEM_SUFFIX;
5209 else
5210 i.suffix = LONG_MNEM_SUFFIX;
5211 mnem_p[-1] = '\0';
5212 current_templates = (const templates *) hash_find (op_hash,
5213 mnemonic);
5214 }
5215 break;
5216 }
5217 }
5218
5219 if (!current_templates)
5220 {
5221 as_bad (_("no such instruction: `%s'"), token_start);
5222 return NULL;
5223 }
5224 }
5225
5226 if (current_templates->start->opcode_modifier.jump == JUMP
5227 || current_templates->start->opcode_modifier.jump == JUMP_BYTE)
5228 {
5229 /* Check for a branch hint. We allow ",pt" and ",pn" for
5230 predict taken and predict not taken respectively.
5231 I'm not sure that branch hints actually do anything on loop
5232 and jcxz insns (JumpByte) for current Pentium4 chips. They
5233 may work in the future and it doesn't hurt to accept them
5234 now. */
5235 if (l[0] == ',' && l[1] == 'p')
5236 {
5237 if (l[2] == 't')
5238 {
5239 if (!add_prefix (DS_PREFIX_OPCODE))
5240 return NULL;
5241 l += 3;
5242 }
5243 else if (l[2] == 'n')
5244 {
5245 if (!add_prefix (CS_PREFIX_OPCODE))
5246 return NULL;
5247 l += 3;
5248 }
5249 }
5250 }
5251 /* Any other comma loses. */
5252 if (*l == ',')
5253 {
5254 as_bad (_("invalid character %s in mnemonic"),
5255 output_invalid (*l));
5256 return NULL;
5257 }
5258
5259 /* Check if instruction is supported on specified architecture. */
5260 supported = 0;
5261 for (t = current_templates->start; t < current_templates->end; ++t)
5262 {
5263 supported |= cpu_flags_match (t);
5264 if (supported == CPU_FLAGS_PERFECT_MATCH)
5265 {
5266 if (!cpu_arch_flags.bitfield.cpui386 && (flag_code != CODE_16BIT))
5267 as_warn (_("use .code16 to ensure correct addressing mode"));
5268
5269 return l;
5270 }
5271 }
5272
5273 if (!(supported & CPU_FLAGS_64BIT_MATCH))
5274 as_bad (flag_code == CODE_64BIT
5275 ? _("`%s' is not supported in 64-bit mode")
5276 : _("`%s' is only supported in 64-bit mode"),
5277 current_templates->start->name);
5278 else
5279 as_bad (_("`%s' is not supported on `%s%s'"),
5280 current_templates->start->name,
5281 cpu_arch_name ? cpu_arch_name : default_arch,
5282 cpu_sub_arch_name ? cpu_sub_arch_name : "");
5283
5284 return NULL;
5285 }
5286
5287 static char *
5288 parse_operands (char *l, const char *mnemonic)
5289 {
5290 char *token_start;
5291
5292 /* 1 if operand is pending after ','. */
5293 unsigned int expecting_operand = 0;
5294
5295 /* Non-zero if operand parens not balanced. */
5296 unsigned int paren_not_balanced;
5297
5298 while (*l != END_OF_INSN)
5299 {
5300 /* Skip optional white space before operand. */
5301 if (is_space_char (*l))
5302 ++l;
5303 if (!is_operand_char (*l) && *l != END_OF_INSN && *l != '"')
5304 {
5305 as_bad (_("invalid character %s before operand %d"),
5306 output_invalid (*l),
5307 i.operands + 1);
5308 return NULL;
5309 }
5310 token_start = l; /* After white space. */
5311 paren_not_balanced = 0;
5312 while (paren_not_balanced || *l != ',')
5313 {
5314 if (*l == END_OF_INSN)
5315 {
5316 if (paren_not_balanced)
5317 {
5318 if (!intel_syntax)
5319 as_bad (_("unbalanced parenthesis in operand %d."),
5320 i.operands + 1);
5321 else
5322 as_bad (_("unbalanced brackets in operand %d."),
5323 i.operands + 1);
5324 return NULL;
5325 }
5326 else
5327 break; /* we are done */
5328 }
5329 else if (!is_operand_char (*l) && !is_space_char (*l) && *l != '"')
5330 {
5331 as_bad (_("invalid character %s in operand %d"),
5332 output_invalid (*l),
5333 i.operands + 1);
5334 return NULL;
5335 }
5336 if (!intel_syntax)
5337 {
5338 if (*l == '(')
5339 ++paren_not_balanced;
5340 if (*l == ')')
5341 --paren_not_balanced;
5342 }
5343 else
5344 {
5345 if (*l == '[')
5346 ++paren_not_balanced;
5347 if (*l == ']')
5348 --paren_not_balanced;
5349 }
5350 l++;
5351 }
5352 if (l != token_start)
5353 { /* Yes, we've read in another operand. */
5354 unsigned int operand_ok;
5355 this_operand = i.operands++;
5356 if (i.operands > MAX_OPERANDS)
5357 {
5358 as_bad (_("spurious operands; (%d operands/instruction max)"),
5359 MAX_OPERANDS);
5360 return NULL;
5361 }
5362 i.types[this_operand].bitfield.unspecified = 1;
5363 /* Now parse operand adding info to 'i' as we go along. */
5364 END_STRING_AND_SAVE (l);
5365
5366 if (i.mem_operands > 1)
5367 {
5368 as_bad (_("too many memory references for `%s'"),
5369 mnemonic);
5370 return 0;
5371 }
5372
5373 if (intel_syntax)
5374 operand_ok =
5375 i386_intel_operand (token_start,
5376 intel_float_operand (mnemonic));
5377 else
5378 operand_ok = i386_att_operand (token_start);
5379
5380 RESTORE_END_STRING (l);
5381 if (!operand_ok)
5382 return NULL;
5383 }
5384 else
5385 {
5386 if (expecting_operand)
5387 {
5388 expecting_operand_after_comma:
5389 as_bad (_("expecting operand after ','; got nothing"));
5390 return NULL;
5391 }
5392 if (*l == ',')
5393 {
5394 as_bad (_("expecting operand before ','; got nothing"));
5395 return NULL;
5396 }
5397 }
5398
5399 /* Now *l must be either ',' or END_OF_INSN. */
5400 if (*l == ',')
5401 {
5402 if (*++l == END_OF_INSN)
5403 {
5404 /* Just skip it, if it's \n complain. */
5405 goto expecting_operand_after_comma;
5406 }
5407 expecting_operand = 1;
5408 }
5409 }
5410 return l;
5411 }
5412
5413 static void
5414 swap_2_operands (int xchg1, int xchg2)
5415 {
5416 union i386_op temp_op;
5417 i386_operand_type temp_type;
5418 unsigned int temp_flags;
5419 enum bfd_reloc_code_real temp_reloc;
5420
5421 temp_type = i.types[xchg2];
5422 i.types[xchg2] = i.types[xchg1];
5423 i.types[xchg1] = temp_type;
5424
5425 temp_flags = i.flags[xchg2];
5426 i.flags[xchg2] = i.flags[xchg1];
5427 i.flags[xchg1] = temp_flags;
5428
5429 temp_op = i.op[xchg2];
5430 i.op[xchg2] = i.op[xchg1];
5431 i.op[xchg1] = temp_op;
5432
5433 temp_reloc = i.reloc[xchg2];
5434 i.reloc[xchg2] = i.reloc[xchg1];
5435 i.reloc[xchg1] = temp_reloc;
5436
5437 if (i.mask)
5438 {
5439 if (i.mask->operand == xchg1)
5440 i.mask->operand = xchg2;
5441 else if (i.mask->operand == xchg2)
5442 i.mask->operand = xchg1;
5443 }
5444 if (i.broadcast)
5445 {
5446 if (i.broadcast->operand == xchg1)
5447 i.broadcast->operand = xchg2;
5448 else if (i.broadcast->operand == xchg2)
5449 i.broadcast->operand = xchg1;
5450 }
5451 if (i.rounding)
5452 {
5453 if (i.rounding->operand == xchg1)
5454 i.rounding->operand = xchg2;
5455 else if (i.rounding->operand == xchg2)
5456 i.rounding->operand = xchg1;
5457 }
5458 }
5459
5460 static void
5461 swap_operands (void)
5462 {
5463 switch (i.operands)
5464 {
5465 case 5:
5466 case 4:
5467 swap_2_operands (1, i.operands - 2);
5468 /* Fall through. */
5469 case 3:
5470 case 2:
5471 swap_2_operands (0, i.operands - 1);
5472 break;
5473 default:
5474 abort ();
5475 }
5476
5477 if (i.mem_operands == 2)
5478 {
5479 const seg_entry *temp_seg;
5480 temp_seg = i.seg[0];
5481 i.seg[0] = i.seg[1];
5482 i.seg[1] = temp_seg;
5483 }
5484 }
5485
5486 /* Try to ensure constant immediates are represented in the smallest
5487 opcode possible. */
5488 static void
5489 optimize_imm (void)
5490 {
5491 char guess_suffix = 0;
5492 int op;
5493
5494 if (i.suffix)
5495 guess_suffix = i.suffix;
5496 else if (i.reg_operands)
5497 {
5498 /* Figure out a suffix from the last register operand specified.
5499 We can't do this properly yet, i.e. excluding special register
5500 instances, but the following works for instructions with
5501 immediates. In any case, we can't set i.suffix yet. */
5502 for (op = i.operands; --op >= 0;)
5503 if (i.types[op].bitfield.class != Reg)
5504 continue;
5505 else if (i.types[op].bitfield.byte)
5506 {
5507 guess_suffix = BYTE_MNEM_SUFFIX;
5508 break;
5509 }
5510 else if (i.types[op].bitfield.word)
5511 {
5512 guess_suffix = WORD_MNEM_SUFFIX;
5513 break;
5514 }
5515 else if (i.types[op].bitfield.dword)
5516 {
5517 guess_suffix = LONG_MNEM_SUFFIX;
5518 break;
5519 }
5520 else if (i.types[op].bitfield.qword)
5521 {
5522 guess_suffix = QWORD_MNEM_SUFFIX;
5523 break;
5524 }
5525 }
5526 else if ((flag_code == CODE_16BIT) ^ (i.prefix[DATA_PREFIX] != 0))
5527 guess_suffix = WORD_MNEM_SUFFIX;
5528
5529 for (op = i.operands; --op >= 0;)
5530 if (operand_type_check (i.types[op], imm))
5531 {
5532 switch (i.op[op].imms->X_op)
5533 {
5534 case O_constant:
5535 /* If a suffix is given, this operand may be shortened. */
5536 switch (guess_suffix)
5537 {
5538 case LONG_MNEM_SUFFIX:
5539 i.types[op].bitfield.imm32 = 1;
5540 i.types[op].bitfield.imm64 = 1;
5541 break;
5542 case WORD_MNEM_SUFFIX:
5543 i.types[op].bitfield.imm16 = 1;
5544 i.types[op].bitfield.imm32 = 1;
5545 i.types[op].bitfield.imm32s = 1;
5546 i.types[op].bitfield.imm64 = 1;
5547 break;
5548 case BYTE_MNEM_SUFFIX:
5549 i.types[op].bitfield.imm8 = 1;
5550 i.types[op].bitfield.imm8s = 1;
5551 i.types[op].bitfield.imm16 = 1;
5552 i.types[op].bitfield.imm32 = 1;
5553 i.types[op].bitfield.imm32s = 1;
5554 i.types[op].bitfield.imm64 = 1;
5555 break;
5556 }
5557
5558 /* If this operand is at most 16 bits, convert it
5559 to a signed 16 bit number before trying to see
5560 whether it will fit in an even smaller size.
5561 This allows a 16-bit operand such as $0xffe0 to
5562 be recognised as within Imm8S range. */
5563 if ((i.types[op].bitfield.imm16)
5564 && (i.op[op].imms->X_add_number & ~(offsetT) 0xffff) == 0)
5565 {
5566 i.op[op].imms->X_add_number =
5567 (((i.op[op].imms->X_add_number & 0xffff) ^ 0x8000) - 0x8000);
5568 }
5569 #ifdef BFD64
5570 /* Store 32-bit immediate in 64-bit for 64-bit BFD. */
5571 if ((i.types[op].bitfield.imm32)
5572 && ((i.op[op].imms->X_add_number & ~(((offsetT) 2 << 31) - 1))
5573 == 0))
5574 {
5575 i.op[op].imms->X_add_number = ((i.op[op].imms->X_add_number
5576 ^ ((offsetT) 1 << 31))
5577 - ((offsetT) 1 << 31));
5578 }
5579 #endif
5580 i.types[op]
5581 = operand_type_or (i.types[op],
5582 smallest_imm_type (i.op[op].imms->X_add_number));
5583
5584 /* We must avoid matching of Imm32 templates when 64bit
5585 only immediate is available. */
5586 if (guess_suffix == QWORD_MNEM_SUFFIX)
5587 i.types[op].bitfield.imm32 = 0;
5588 break;
5589
5590 case O_absent:
5591 case O_register:
5592 abort ();
5593
5594 /* Symbols and expressions. */
5595 default:
5596 /* Convert symbolic operand to proper sizes for matching, but don't
5597 prevent matching a set of insns that only supports sizes other
5598 than those matching the insn suffix. */
5599 {
5600 i386_operand_type mask, allowed;
5601 const insn_template *t;
5602
5603 operand_type_set (&mask, 0);
5604 operand_type_set (&allowed, 0);
5605
5606 for (t = current_templates->start;
5607 t < current_templates->end;
5608 ++t)
5609 {
5610 allowed = operand_type_or (allowed, t->operand_types[op]);
5611 allowed = operand_type_and (allowed, anyimm);
5612 }
5613 switch (guess_suffix)
5614 {
5615 case QWORD_MNEM_SUFFIX:
5616 mask.bitfield.imm64 = 1;
5617 mask.bitfield.imm32s = 1;
5618 break;
5619 case LONG_MNEM_SUFFIX:
5620 mask.bitfield.imm32 = 1;
5621 break;
5622 case WORD_MNEM_SUFFIX:
5623 mask.bitfield.imm16 = 1;
5624 break;
5625 case BYTE_MNEM_SUFFIX:
5626 mask.bitfield.imm8 = 1;
5627 break;
5628 default:
5629 break;
5630 }
5631 allowed = operand_type_and (mask, allowed);
5632 if (!operand_type_all_zero (&allowed))
5633 i.types[op] = operand_type_and (i.types[op], mask);
5634 }
5635 break;
5636 }
5637 }
5638 }
5639
5640 /* Try to use the smallest displacement type too. */
5641 static void
5642 optimize_disp (void)
5643 {
5644 int op;
5645
5646 for (op = i.operands; --op >= 0;)
5647 if (operand_type_check (i.types[op], disp))
5648 {
5649 if (i.op[op].disps->X_op == O_constant)
5650 {
5651 offsetT op_disp = i.op[op].disps->X_add_number;
5652
5653 if (i.types[op].bitfield.disp16
5654 && (op_disp & ~(offsetT) 0xffff) == 0)
5655 {
5656 /* If this operand is at most 16 bits, convert
5657 to a signed 16 bit number and don't use 64bit
5658 displacement. */
5659 op_disp = (((op_disp & 0xffff) ^ 0x8000) - 0x8000);
5660 i.types[op].bitfield.disp64 = 0;
5661 }
5662 #ifdef BFD64
5663 /* Optimize 64-bit displacement to 32-bit for 64-bit BFD. */
5664 if (i.types[op].bitfield.disp32
5665 && (op_disp & ~(((offsetT) 2 << 31) - 1)) == 0)
5666 {
5667 /* If this operand is at most 32 bits, convert
5668 to a signed 32 bit number and don't use 64bit
5669 displacement. */
5670 op_disp &= (((offsetT) 2 << 31) - 1);
5671 op_disp = (op_disp ^ ((offsetT) 1 << 31)) - ((addressT) 1 << 31);
5672 i.types[op].bitfield.disp64 = 0;
5673 }
5674 #endif
5675 if (!op_disp && i.types[op].bitfield.baseindex)
5676 {
5677 i.types[op].bitfield.disp8 = 0;
5678 i.types[op].bitfield.disp16 = 0;
5679 i.types[op].bitfield.disp32 = 0;
5680 i.types[op].bitfield.disp32s = 0;
5681 i.types[op].bitfield.disp64 = 0;
5682 i.op[op].disps = 0;
5683 i.disp_operands--;
5684 }
5685 else if (flag_code == CODE_64BIT)
5686 {
5687 if (fits_in_signed_long (op_disp))
5688 {
5689 i.types[op].bitfield.disp64 = 0;
5690 i.types[op].bitfield.disp32s = 1;
5691 }
5692 if (i.prefix[ADDR_PREFIX]
5693 && fits_in_unsigned_long (op_disp))
5694 i.types[op].bitfield.disp32 = 1;
5695 }
5696 if ((i.types[op].bitfield.disp32
5697 || i.types[op].bitfield.disp32s
5698 || i.types[op].bitfield.disp16)
5699 && fits_in_disp8 (op_disp))
5700 i.types[op].bitfield.disp8 = 1;
5701 }
5702 else if (i.reloc[op] == BFD_RELOC_386_TLS_DESC_CALL
5703 || i.reloc[op] == BFD_RELOC_X86_64_TLSDESC_CALL)
5704 {
5705 fix_new_exp (frag_now, frag_more (0) - frag_now->fr_literal, 0,
5706 i.op[op].disps, 0, i.reloc[op]);
5707 i.types[op].bitfield.disp8 = 0;
5708 i.types[op].bitfield.disp16 = 0;
5709 i.types[op].bitfield.disp32 = 0;
5710 i.types[op].bitfield.disp32s = 0;
5711 i.types[op].bitfield.disp64 = 0;
5712 }
5713 else
5714 /* We only support 64bit displacement on constants. */
5715 i.types[op].bitfield.disp64 = 0;
5716 }
5717 }
5718
5719 /* Return 1 if there is a match in broadcast bytes between operand
5720 GIVEN and instruction template T. */
5721
5722 static INLINE int
5723 match_broadcast_size (const insn_template *t, unsigned int given)
5724 {
5725 return ((t->opcode_modifier.broadcast == BYTE_BROADCAST
5726 && i.types[given].bitfield.byte)
5727 || (t->opcode_modifier.broadcast == WORD_BROADCAST
5728 && i.types[given].bitfield.word)
5729 || (t->opcode_modifier.broadcast == DWORD_BROADCAST
5730 && i.types[given].bitfield.dword)
5731 || (t->opcode_modifier.broadcast == QWORD_BROADCAST
5732 && i.types[given].bitfield.qword));
5733 }
5734
5735 /* Check if operands are valid for the instruction. */
5736
5737 static int
5738 check_VecOperands (const insn_template *t)
5739 {
5740 unsigned int op;
5741 i386_cpu_flags cpu;
5742
5743 /* Templates allowing for ZMMword as well as YMMword and/or XMMword for
5744 any one operand are implicity requiring AVX512VL support if the actual
5745 operand size is YMMword or XMMword. Since this function runs after
5746 template matching, there's no need to check for YMMword/XMMword in
5747 the template. */
5748 cpu = cpu_flags_and (t->cpu_flags, avx512);
5749 if (!cpu_flags_all_zero (&cpu)
5750 && !t->cpu_flags.bitfield.cpuavx512vl
5751 && !cpu_arch_flags.bitfield.cpuavx512vl)
5752 {
5753 for (op = 0; op < t->operands; ++op)
5754 {
5755 if (t->operand_types[op].bitfield.zmmword
5756 && (i.types[op].bitfield.ymmword
5757 || i.types[op].bitfield.xmmword))
5758 {
5759 i.error = unsupported;
5760 return 1;
5761 }
5762 }
5763 }
5764
5765 /* Without VSIB byte, we can't have a vector register for index. */
5766 if (!t->opcode_modifier.vecsib
5767 && i.index_reg
5768 && (i.index_reg->reg_type.bitfield.xmmword
5769 || i.index_reg->reg_type.bitfield.ymmword
5770 || i.index_reg->reg_type.bitfield.zmmword))
5771 {
5772 i.error = unsupported_vector_index_register;
5773 return 1;
5774 }
5775
5776 /* Check if default mask is allowed. */
5777 if (t->opcode_modifier.nodefmask
5778 && (!i.mask || i.mask->mask->reg_num == 0))
5779 {
5780 i.error = no_default_mask;
5781 return 1;
5782 }
5783
5784 /* For VSIB byte, we need a vector register for index, and all vector
5785 registers must be distinct. */
5786 if (t->opcode_modifier.vecsib)
5787 {
5788 if (!i.index_reg
5789 || !((t->opcode_modifier.vecsib == VecSIB128
5790 && i.index_reg->reg_type.bitfield.xmmword)
5791 || (t->opcode_modifier.vecsib == VecSIB256
5792 && i.index_reg->reg_type.bitfield.ymmword)
5793 || (t->opcode_modifier.vecsib == VecSIB512
5794 && i.index_reg->reg_type.bitfield.zmmword)))
5795 {
5796 i.error = invalid_vsib_address;
5797 return 1;
5798 }
5799
5800 gas_assert (i.reg_operands == 2 || i.mask);
5801 if (i.reg_operands == 2 && !i.mask)
5802 {
5803 gas_assert (i.types[0].bitfield.class == RegSIMD);
5804 gas_assert (i.types[0].bitfield.xmmword
5805 || i.types[0].bitfield.ymmword);
5806 gas_assert (i.types[2].bitfield.class == RegSIMD);
5807 gas_assert (i.types[2].bitfield.xmmword
5808 || i.types[2].bitfield.ymmword);
5809 if (operand_check == check_none)
5810 return 0;
5811 if (register_number (i.op[0].regs)
5812 != register_number (i.index_reg)
5813 && register_number (i.op[2].regs)
5814 != register_number (i.index_reg)
5815 && register_number (i.op[0].regs)
5816 != register_number (i.op[2].regs))
5817 return 0;
5818 if (operand_check == check_error)
5819 {
5820 i.error = invalid_vector_register_set;
5821 return 1;
5822 }
5823 as_warn (_("mask, index, and destination registers should be distinct"));
5824 }
5825 else if (i.reg_operands == 1 && i.mask)
5826 {
5827 if (i.types[1].bitfield.class == RegSIMD
5828 && (i.types[1].bitfield.xmmword
5829 || i.types[1].bitfield.ymmword
5830 || i.types[1].bitfield.zmmword)
5831 && (register_number (i.op[1].regs)
5832 == register_number (i.index_reg)))
5833 {
5834 if (operand_check == check_error)
5835 {
5836 i.error = invalid_vector_register_set;
5837 return 1;
5838 }
5839 if (operand_check != check_none)
5840 as_warn (_("index and destination registers should be distinct"));
5841 }
5842 }
5843 }
5844
5845 /* Check if broadcast is supported by the instruction and is applied
5846 to the memory operand. */
5847 if (i.broadcast)
5848 {
5849 i386_operand_type type, overlap;
5850
5851 /* Check if specified broadcast is supported in this instruction,
5852 and its broadcast bytes match the memory operand. */
5853 op = i.broadcast->operand;
5854 if (!t->opcode_modifier.broadcast
5855 || !(i.flags[op] & Operand_Mem)
5856 || (!i.types[op].bitfield.unspecified
5857 && !match_broadcast_size (t, op)))
5858 {
5859 bad_broadcast:
5860 i.error = unsupported_broadcast;
5861 return 1;
5862 }
5863
5864 i.broadcast->bytes = ((1 << (t->opcode_modifier.broadcast - 1))
5865 * i.broadcast->type);
5866 operand_type_set (&type, 0);
5867 switch (i.broadcast->bytes)
5868 {
5869 case 2:
5870 type.bitfield.word = 1;
5871 break;
5872 case 4:
5873 type.bitfield.dword = 1;
5874 break;
5875 case 8:
5876 type.bitfield.qword = 1;
5877 break;
5878 case 16:
5879 type.bitfield.xmmword = 1;
5880 break;
5881 case 32:
5882 type.bitfield.ymmword = 1;
5883 break;
5884 case 64:
5885 type.bitfield.zmmword = 1;
5886 break;
5887 default:
5888 goto bad_broadcast;
5889 }
5890
5891 overlap = operand_type_and (type, t->operand_types[op]);
5892 if (t->operand_types[op].bitfield.class == RegSIMD
5893 && t->operand_types[op].bitfield.byte
5894 + t->operand_types[op].bitfield.word
5895 + t->operand_types[op].bitfield.dword
5896 + t->operand_types[op].bitfield.qword > 1)
5897 {
5898 overlap.bitfield.xmmword = 0;
5899 overlap.bitfield.ymmword = 0;
5900 overlap.bitfield.zmmword = 0;
5901 }
5902 if (operand_type_all_zero (&overlap))
5903 goto bad_broadcast;
5904
5905 if (t->opcode_modifier.checkregsize)
5906 {
5907 unsigned int j;
5908
5909 type.bitfield.baseindex = 1;
5910 for (j = 0; j < i.operands; ++j)
5911 {
5912 if (j != op
5913 && !operand_type_register_match(i.types[j],
5914 t->operand_types[j],
5915 type,
5916 t->operand_types[op]))
5917 goto bad_broadcast;
5918 }
5919 }
5920 }
5921 /* If broadcast is supported in this instruction, we need to check if
5922 operand of one-element size isn't specified without broadcast. */
5923 else if (t->opcode_modifier.broadcast && i.mem_operands)
5924 {
5925 /* Find memory operand. */
5926 for (op = 0; op < i.operands; op++)
5927 if (i.flags[op] & Operand_Mem)
5928 break;
5929 gas_assert (op < i.operands);
5930 /* Check size of the memory operand. */
5931 if (match_broadcast_size (t, op))
5932 {
5933 i.error = broadcast_needed;
5934 return 1;
5935 }
5936 }
5937 else
5938 op = MAX_OPERANDS - 1; /* Avoid uninitialized variable warning. */
5939
5940 /* Check if requested masking is supported. */
5941 if (i.mask)
5942 {
5943 switch (t->opcode_modifier.masking)
5944 {
5945 case BOTH_MASKING:
5946 break;
5947 case MERGING_MASKING:
5948 if (i.mask->zeroing)
5949 {
5950 case 0:
5951 i.error = unsupported_masking;
5952 return 1;
5953 }
5954 break;
5955 case DYNAMIC_MASKING:
5956 /* Memory destinations allow only merging masking. */
5957 if (i.mask->zeroing && i.mem_operands)
5958 {
5959 /* Find memory operand. */
5960 for (op = 0; op < i.operands; op++)
5961 if (i.flags[op] & Operand_Mem)
5962 break;
5963 gas_assert (op < i.operands);
5964 if (op == i.operands - 1)
5965 {
5966 i.error = unsupported_masking;
5967 return 1;
5968 }
5969 }
5970 break;
5971 default:
5972 abort ();
5973 }
5974 }
5975
5976 /* Check if masking is applied to dest operand. */
5977 if (i.mask && (i.mask->operand != (int) (i.operands - 1)))
5978 {
5979 i.error = mask_not_on_destination;
5980 return 1;
5981 }
5982
5983 /* Check RC/SAE. */
5984 if (i.rounding)
5985 {
5986 if (!t->opcode_modifier.sae
5987 || (i.rounding->type != saeonly && !t->opcode_modifier.staticrounding))
5988 {
5989 i.error = unsupported_rc_sae;
5990 return 1;
5991 }
5992 /* If the instruction has several immediate operands and one of
5993 them is rounding, the rounding operand should be the last
5994 immediate operand. */
5995 if (i.imm_operands > 1
5996 && i.rounding->operand != (int) (i.imm_operands - 1))
5997 {
5998 i.error = rc_sae_operand_not_last_imm;
5999 return 1;
6000 }
6001 }
6002
6003 /* Check the special Imm4 cases; must be the first operand. */
6004 if (t->cpu_flags.bitfield.cpuxop && t->operands == 5)
6005 {
6006 if (i.op[0].imms->X_op != O_constant
6007 || !fits_in_imm4 (i.op[0].imms->X_add_number))
6008 {
6009 i.error = bad_imm4;
6010 return 1;
6011 }
6012
6013 /* Turn off Imm<N> so that update_imm won't complain. */
6014 operand_type_set (&i.types[0], 0);
6015 }
6016
6017 /* Check vector Disp8 operand. */
6018 if (t->opcode_modifier.disp8memshift
6019 && i.disp_encoding != disp_encoding_32bit)
6020 {
6021 if (i.broadcast)
6022 i.memshift = t->opcode_modifier.broadcast - 1;
6023 else if (t->opcode_modifier.disp8memshift != DISP8_SHIFT_VL)
6024 i.memshift = t->opcode_modifier.disp8memshift;
6025 else
6026 {
6027 const i386_operand_type *type = NULL;
6028
6029 i.memshift = 0;
6030 for (op = 0; op < i.operands; op++)
6031 if (i.flags[op] & Operand_Mem)
6032 {
6033 if (t->opcode_modifier.evex == EVEXLIG)
6034 i.memshift = 2 + (i.suffix == QWORD_MNEM_SUFFIX);
6035 else if (t->operand_types[op].bitfield.xmmword
6036 + t->operand_types[op].bitfield.ymmword
6037 + t->operand_types[op].bitfield.zmmword <= 1)
6038 type = &t->operand_types[op];
6039 else if (!i.types[op].bitfield.unspecified)
6040 type = &i.types[op];
6041 }
6042 else if (i.types[op].bitfield.class == RegSIMD
6043 && t->opcode_modifier.evex != EVEXLIG)
6044 {
6045 if (i.types[op].bitfield.zmmword)
6046 i.memshift = 6;
6047 else if (i.types[op].bitfield.ymmword && i.memshift < 5)
6048 i.memshift = 5;
6049 else if (i.types[op].bitfield.xmmword && i.memshift < 4)
6050 i.memshift = 4;
6051 }
6052
6053 if (type)
6054 {
6055 if (type->bitfield.zmmword)
6056 i.memshift = 6;
6057 else if (type->bitfield.ymmword)
6058 i.memshift = 5;
6059 else if (type->bitfield.xmmword)
6060 i.memshift = 4;
6061 }
6062
6063 /* For the check in fits_in_disp8(). */
6064 if (i.memshift == 0)
6065 i.memshift = -1;
6066 }
6067
6068 for (op = 0; op < i.operands; op++)
6069 if (operand_type_check (i.types[op], disp)
6070 && i.op[op].disps->X_op == O_constant)
6071 {
6072 if (fits_in_disp8 (i.op[op].disps->X_add_number))
6073 {
6074 i.types[op].bitfield.disp8 = 1;
6075 return 0;
6076 }
6077 i.types[op].bitfield.disp8 = 0;
6078 }
6079 }
6080
6081 i.memshift = 0;
6082
6083 return 0;
6084 }
6085
6086 /* Check if encoding requirements are met by the instruction. */
6087
6088 static int
6089 VEX_check_encoding (const insn_template *t)
6090 {
6091 if (i.vec_encoding == vex_encoding_error)
6092 {
6093 i.error = unsupported;
6094 return 1;
6095 }
6096
6097 if (i.vec_encoding == vex_encoding_evex)
6098 {
6099 /* This instruction must be encoded with EVEX prefix. */
6100 if (!is_evex_encoding (t))
6101 {
6102 i.error = unsupported;
6103 return 1;
6104 }
6105 return 0;
6106 }
6107
6108 if (!t->opcode_modifier.vex)
6109 {
6110 /* This instruction template doesn't have VEX prefix. */
6111 if (i.vec_encoding != vex_encoding_default)
6112 {
6113 i.error = unsupported;
6114 return 1;
6115 }
6116 return 0;
6117 }
6118
6119 return 0;
6120 }
6121
6122 static const insn_template *
6123 match_template (char mnem_suffix)
6124 {
6125 /* Points to template once we've found it. */
6126 const insn_template *t;
6127 i386_operand_type overlap0, overlap1, overlap2, overlap3;
6128 i386_operand_type overlap4;
6129 unsigned int found_reverse_match;
6130 i386_opcode_modifier suffix_check;
6131 i386_operand_type operand_types [MAX_OPERANDS];
6132 int addr_prefix_disp;
6133 unsigned int j, size_match, check_register;
6134 enum i386_error specific_error = 0;
6135
6136 #if MAX_OPERANDS != 5
6137 # error "MAX_OPERANDS must be 5."
6138 #endif
6139
6140 found_reverse_match = 0;
6141 addr_prefix_disp = -1;
6142
6143 /* Prepare for mnemonic suffix check. */
6144 memset (&suffix_check, 0, sizeof (suffix_check));
6145 switch (mnem_suffix)
6146 {
6147 case BYTE_MNEM_SUFFIX:
6148 suffix_check.no_bsuf = 1;
6149 break;
6150 case WORD_MNEM_SUFFIX:
6151 suffix_check.no_wsuf = 1;
6152 break;
6153 case SHORT_MNEM_SUFFIX:
6154 suffix_check.no_ssuf = 1;
6155 break;
6156 case LONG_MNEM_SUFFIX:
6157 suffix_check.no_lsuf = 1;
6158 break;
6159 case QWORD_MNEM_SUFFIX:
6160 suffix_check.no_qsuf = 1;
6161 break;
6162 default:
6163 /* NB: In Intel syntax, normally we can check for memory operand
6164 size when there is no mnemonic suffix. But jmp and call have
6165 2 different encodings with Dword memory operand size, one with
6166 No_ldSuf and the other without. i.suffix is set to
6167 LONG_DOUBLE_MNEM_SUFFIX to skip the one with No_ldSuf. */
6168 if (i.suffix == LONG_DOUBLE_MNEM_SUFFIX)
6169 suffix_check.no_ldsuf = 1;
6170 }
6171
6172 /* Must have right number of operands. */
6173 i.error = number_of_operands_mismatch;
6174
6175 for (t = current_templates->start; t < current_templates->end; t++)
6176 {
6177 addr_prefix_disp = -1;
6178 found_reverse_match = 0;
6179
6180 if (i.operands != t->operands)
6181 continue;
6182
6183 /* Check processor support. */
6184 i.error = unsupported;
6185 if (cpu_flags_match (t) != CPU_FLAGS_PERFECT_MATCH)
6186 continue;
6187
6188 /* Check AT&T mnemonic. */
6189 i.error = unsupported_with_intel_mnemonic;
6190 if (intel_mnemonic && t->opcode_modifier.attmnemonic)
6191 continue;
6192
6193 /* Check AT&T/Intel syntax. */
6194 i.error = unsupported_syntax;
6195 if ((intel_syntax && t->opcode_modifier.attsyntax)
6196 || (!intel_syntax && t->opcode_modifier.intelsyntax))
6197 continue;
6198
6199 /* Check Intel64/AMD64 ISA. */
6200 switch (isa64)
6201 {
6202 default:
6203 /* Default: Don't accept Intel64. */
6204 if (t->opcode_modifier.isa64 == INTEL64)
6205 continue;
6206 break;
6207 case amd64:
6208 /* -mamd64: Don't accept Intel64 and Intel64 only. */
6209 if (t->opcode_modifier.isa64 >= INTEL64)
6210 continue;
6211 break;
6212 case intel64:
6213 /* -mintel64: Don't accept AMD64. */
6214 if (t->opcode_modifier.isa64 == AMD64 && flag_code == CODE_64BIT)
6215 continue;
6216 break;
6217 }
6218
6219 /* Check the suffix. */
6220 i.error = invalid_instruction_suffix;
6221 if ((t->opcode_modifier.no_bsuf && suffix_check.no_bsuf)
6222 || (t->opcode_modifier.no_wsuf && suffix_check.no_wsuf)
6223 || (t->opcode_modifier.no_lsuf && suffix_check.no_lsuf)
6224 || (t->opcode_modifier.no_ssuf && suffix_check.no_ssuf)
6225 || (t->opcode_modifier.no_qsuf && suffix_check.no_qsuf)
6226 || (t->opcode_modifier.no_ldsuf && suffix_check.no_ldsuf))
6227 continue;
6228
6229 size_match = operand_size_match (t);
6230 if (!size_match)
6231 continue;
6232
6233 /* This is intentionally not
6234
6235 if (i.jumpabsolute != (t->opcode_modifier.jump == JUMP_ABSOLUTE))
6236
6237 as the case of a missing * on the operand is accepted (perhaps with
6238 a warning, issued further down). */
6239 if (i.jumpabsolute && t->opcode_modifier.jump != JUMP_ABSOLUTE)
6240 {
6241 i.error = operand_type_mismatch;
6242 continue;
6243 }
6244
6245 for (j = 0; j < MAX_OPERANDS; j++)
6246 operand_types[j] = t->operand_types[j];
6247
6248 /* In general, don't allow
6249 - 64-bit operands outside of 64-bit mode,
6250 - 32-bit operands on pre-386. */
6251 j = i.imm_operands + (t->operands > i.imm_operands + 1);
6252 if (((i.suffix == QWORD_MNEM_SUFFIX
6253 && flag_code != CODE_64BIT
6254 && (t->base_opcode != 0x0fc7
6255 || t->extension_opcode != 1 /* cmpxchg8b */))
6256 || (i.suffix == LONG_MNEM_SUFFIX
6257 && !cpu_arch_flags.bitfield.cpui386))
6258 && (intel_syntax
6259 ? (t->opcode_modifier.mnemonicsize != IGNORESIZE
6260 && !intel_float_operand (t->name))
6261 : intel_float_operand (t->name) != 2)
6262 && (t->operands == i.imm_operands
6263 || (operand_types[i.imm_operands].bitfield.class != RegMMX
6264 && operand_types[i.imm_operands].bitfield.class != RegSIMD
6265 && operand_types[i.imm_operands].bitfield.class != RegMask)
6266 || (operand_types[j].bitfield.class != RegMMX
6267 && operand_types[j].bitfield.class != RegSIMD
6268 && operand_types[j].bitfield.class != RegMask))
6269 && !t->opcode_modifier.vecsib)
6270 continue;
6271
6272 /* Do not verify operands when there are none. */
6273 if (!t->operands)
6274 {
6275 if (VEX_check_encoding (t))
6276 {
6277 specific_error = i.error;
6278 continue;
6279 }
6280
6281 /* We've found a match; break out of loop. */
6282 break;
6283 }
6284
6285 if (!t->opcode_modifier.jump
6286 || t->opcode_modifier.jump == JUMP_ABSOLUTE)
6287 {
6288 /* There should be only one Disp operand. */
6289 for (j = 0; j < MAX_OPERANDS; j++)
6290 if (operand_type_check (operand_types[j], disp))
6291 break;
6292 if (j < MAX_OPERANDS)
6293 {
6294 bfd_boolean override = (i.prefix[ADDR_PREFIX] != 0);
6295
6296 addr_prefix_disp = j;
6297
6298 /* Address size prefix will turn Disp64/Disp32S/Disp32/Disp16
6299 operand into Disp32/Disp32/Disp16/Disp32 operand. */
6300 switch (flag_code)
6301 {
6302 case CODE_16BIT:
6303 override = !override;
6304 /* Fall through. */
6305 case CODE_32BIT:
6306 if (operand_types[j].bitfield.disp32
6307 && operand_types[j].bitfield.disp16)
6308 {
6309 operand_types[j].bitfield.disp16 = override;
6310 operand_types[j].bitfield.disp32 = !override;
6311 }
6312 operand_types[j].bitfield.disp32s = 0;
6313 operand_types[j].bitfield.disp64 = 0;
6314 break;
6315
6316 case CODE_64BIT:
6317 if (operand_types[j].bitfield.disp32s
6318 || operand_types[j].bitfield.disp64)
6319 {
6320 operand_types[j].bitfield.disp64 &= !override;
6321 operand_types[j].bitfield.disp32s &= !override;
6322 operand_types[j].bitfield.disp32 = override;
6323 }
6324 operand_types[j].bitfield.disp16 = 0;
6325 break;
6326 }
6327 }
6328 }
6329
6330 /* Force 0x8b encoding for "mov foo@GOT, %eax". */
6331 if (i.reloc[0] == BFD_RELOC_386_GOT32 && t->base_opcode == 0xa0)
6332 continue;
6333
6334 /* We check register size if needed. */
6335 if (t->opcode_modifier.checkregsize)
6336 {
6337 check_register = (1 << t->operands) - 1;
6338 if (i.broadcast)
6339 check_register &= ~(1 << i.broadcast->operand);
6340 }
6341 else
6342 check_register = 0;
6343
6344 overlap0 = operand_type_and (i.types[0], operand_types[0]);
6345 switch (t->operands)
6346 {
6347 case 1:
6348 if (!operand_type_match (overlap0, i.types[0]))
6349 continue;
6350 break;
6351 case 2:
6352 /* xchg %eax, %eax is a special case. It is an alias for nop
6353 only in 32bit mode and we can use opcode 0x90. In 64bit
6354 mode, we can't use 0x90 for xchg %eax, %eax since it should
6355 zero-extend %eax to %rax. */
6356 if (flag_code == CODE_64BIT
6357 && t->base_opcode == 0x90
6358 && i.types[0].bitfield.instance == Accum
6359 && i.types[0].bitfield.dword
6360 && i.types[1].bitfield.instance == Accum
6361 && i.types[1].bitfield.dword)
6362 continue;
6363 /* xrelease mov %eax, <disp> is another special case. It must not
6364 match the accumulator-only encoding of mov. */
6365 if (flag_code != CODE_64BIT
6366 && i.hle_prefix
6367 && t->base_opcode == 0xa0
6368 && i.types[0].bitfield.instance == Accum
6369 && (i.flags[1] & Operand_Mem))
6370 continue;
6371 /* Fall through. */
6372
6373 case 3:
6374 if (!(size_match & MATCH_STRAIGHT))
6375 goto check_reverse;
6376 /* Reverse direction of operands if swapping is possible in the first
6377 place (operands need to be symmetric) and
6378 - the load form is requested, and the template is a store form,
6379 - the store form is requested, and the template is a load form,
6380 - the non-default (swapped) form is requested. */
6381 overlap1 = operand_type_and (operand_types[0], operand_types[1]);
6382 if (t->opcode_modifier.d && i.reg_operands == i.operands
6383 && !operand_type_all_zero (&overlap1))
6384 switch (i.dir_encoding)
6385 {
6386 case dir_encoding_load:
6387 if (operand_type_check (operand_types[i.operands - 1], anymem)
6388 || t->opcode_modifier.regmem)
6389 goto check_reverse;
6390 break;
6391
6392 case dir_encoding_store:
6393 if (!operand_type_check (operand_types[i.operands - 1], anymem)
6394 && !t->opcode_modifier.regmem)
6395 goto check_reverse;
6396 break;
6397
6398 case dir_encoding_swap:
6399 goto check_reverse;
6400
6401 case dir_encoding_default:
6402 break;
6403 }
6404 /* If we want store form, we skip the current load. */
6405 if ((i.dir_encoding == dir_encoding_store
6406 || i.dir_encoding == dir_encoding_swap)
6407 && i.mem_operands == 0
6408 && t->opcode_modifier.load)
6409 continue;
6410 /* Fall through. */
6411 case 4:
6412 case 5:
6413 overlap1 = operand_type_and (i.types[1], operand_types[1]);
6414 if (!operand_type_match (overlap0, i.types[0])
6415 || !operand_type_match (overlap1, i.types[1])
6416 || ((check_register & 3) == 3
6417 && !operand_type_register_match (i.types[0],
6418 operand_types[0],
6419 i.types[1],
6420 operand_types[1])))
6421 {
6422 /* Check if other direction is valid ... */
6423 if (!t->opcode_modifier.d)
6424 continue;
6425
6426 check_reverse:
6427 if (!(size_match & MATCH_REVERSE))
6428 continue;
6429 /* Try reversing direction of operands. */
6430 overlap0 = operand_type_and (i.types[0], operand_types[i.operands - 1]);
6431 overlap1 = operand_type_and (i.types[i.operands - 1], operand_types[0]);
6432 if (!operand_type_match (overlap0, i.types[0])
6433 || !operand_type_match (overlap1, i.types[i.operands - 1])
6434 || (check_register
6435 && !operand_type_register_match (i.types[0],
6436 operand_types[i.operands - 1],
6437 i.types[i.operands - 1],
6438 operand_types[0])))
6439 {
6440 /* Does not match either direction. */
6441 continue;
6442 }
6443 /* found_reverse_match holds which of D or FloatR
6444 we've found. */
6445 if (!t->opcode_modifier.d)
6446 found_reverse_match = 0;
6447 else if (operand_types[0].bitfield.tbyte)
6448 found_reverse_match = Opcode_FloatD;
6449 else if (operand_types[0].bitfield.xmmword
6450 || operand_types[i.operands - 1].bitfield.xmmword
6451 || operand_types[0].bitfield.class == RegMMX
6452 || operand_types[i.operands - 1].bitfield.class == RegMMX
6453 || is_any_vex_encoding(t))
6454 found_reverse_match = (t->base_opcode & 0xee) != 0x6e
6455 ? Opcode_SIMD_FloatD : Opcode_SIMD_IntD;
6456 else
6457 found_reverse_match = Opcode_D;
6458 if (t->opcode_modifier.floatr)
6459 found_reverse_match |= Opcode_FloatR;
6460 }
6461 else
6462 {
6463 /* Found a forward 2 operand match here. */
6464 switch (t->operands)
6465 {
6466 case 5:
6467 overlap4 = operand_type_and (i.types[4],
6468 operand_types[4]);
6469 /* Fall through. */
6470 case 4:
6471 overlap3 = operand_type_and (i.types[3],
6472 operand_types[3]);
6473 /* Fall through. */
6474 case 3:
6475 overlap2 = operand_type_and (i.types[2],
6476 operand_types[2]);
6477 break;
6478 }
6479
6480 switch (t->operands)
6481 {
6482 case 5:
6483 if (!operand_type_match (overlap4, i.types[4])
6484 || !operand_type_register_match (i.types[3],
6485 operand_types[3],
6486 i.types[4],
6487 operand_types[4]))
6488 continue;
6489 /* Fall through. */
6490 case 4:
6491 if (!operand_type_match (overlap3, i.types[3])
6492 || ((check_register & 0xa) == 0xa
6493 && !operand_type_register_match (i.types[1],
6494 operand_types[1],
6495 i.types[3],
6496 operand_types[3]))
6497 || ((check_register & 0xc) == 0xc
6498 && !operand_type_register_match (i.types[2],
6499 operand_types[2],
6500 i.types[3],
6501 operand_types[3])))
6502 continue;
6503 /* Fall through. */
6504 case 3:
6505 /* Here we make use of the fact that there are no
6506 reverse match 3 operand instructions. */
6507 if (!operand_type_match (overlap2, i.types[2])
6508 || ((check_register & 5) == 5
6509 && !operand_type_register_match (i.types[0],
6510 operand_types[0],
6511 i.types[2],
6512 operand_types[2]))
6513 || ((check_register & 6) == 6
6514 && !operand_type_register_match (i.types[1],
6515 operand_types[1],
6516 i.types[2],
6517 operand_types[2])))
6518 continue;
6519 break;
6520 }
6521 }
6522 /* Found either forward/reverse 2, 3 or 4 operand match here:
6523 slip through to break. */
6524 }
6525
6526 /* Check if vector operands are valid. */
6527 if (check_VecOperands (t))
6528 {
6529 specific_error = i.error;
6530 continue;
6531 }
6532
6533 /* Check if VEX/EVEX encoding requirements can be satisfied. */
6534 if (VEX_check_encoding (t))
6535 {
6536 specific_error = i.error;
6537 continue;
6538 }
6539
6540 /* We've found a match; break out of loop. */
6541 break;
6542 }
6543
6544 if (t == current_templates->end)
6545 {
6546 /* We found no match. */
6547 const char *err_msg;
6548 switch (specific_error ? specific_error : i.error)
6549 {
6550 default:
6551 abort ();
6552 case operand_size_mismatch:
6553 err_msg = _("operand size mismatch");
6554 break;
6555 case operand_type_mismatch:
6556 err_msg = _("operand type mismatch");
6557 break;
6558 case register_type_mismatch:
6559 err_msg = _("register type mismatch");
6560 break;
6561 case number_of_operands_mismatch:
6562 err_msg = _("number of operands mismatch");
6563 break;
6564 case invalid_instruction_suffix:
6565 err_msg = _("invalid instruction suffix");
6566 break;
6567 case bad_imm4:
6568 err_msg = _("constant doesn't fit in 4 bits");
6569 break;
6570 case unsupported_with_intel_mnemonic:
6571 err_msg = _("unsupported with Intel mnemonic");
6572 break;
6573 case unsupported_syntax:
6574 err_msg = _("unsupported syntax");
6575 break;
6576 case unsupported:
6577 as_bad (_("unsupported instruction `%s'"),
6578 current_templates->start->name);
6579 return NULL;
6580 case invalid_vsib_address:
6581 err_msg = _("invalid VSIB address");
6582 break;
6583 case invalid_vector_register_set:
6584 err_msg = _("mask, index, and destination registers must be distinct");
6585 break;
6586 case unsupported_vector_index_register:
6587 err_msg = _("unsupported vector index register");
6588 break;
6589 case unsupported_broadcast:
6590 err_msg = _("unsupported broadcast");
6591 break;
6592 case broadcast_needed:
6593 err_msg = _("broadcast is needed for operand of such type");
6594 break;
6595 case unsupported_masking:
6596 err_msg = _("unsupported masking");
6597 break;
6598 case mask_not_on_destination:
6599 err_msg = _("mask not on destination operand");
6600 break;
6601 case no_default_mask:
6602 err_msg = _("default mask isn't allowed");
6603 break;
6604 case unsupported_rc_sae:
6605 err_msg = _("unsupported static rounding/sae");
6606 break;
6607 case rc_sae_operand_not_last_imm:
6608 if (intel_syntax)
6609 err_msg = _("RC/SAE operand must precede immediate operands");
6610 else
6611 err_msg = _("RC/SAE operand must follow immediate operands");
6612 break;
6613 case invalid_register_operand:
6614 err_msg = _("invalid register operand");
6615 break;
6616 }
6617 as_bad (_("%s for `%s'"), err_msg,
6618 current_templates->start->name);
6619 return NULL;
6620 }
6621
6622 if (!quiet_warnings)
6623 {
6624 if (!intel_syntax
6625 && (i.jumpabsolute != (t->opcode_modifier.jump == JUMP_ABSOLUTE)))
6626 as_warn (_("indirect %s without `*'"), t->name);
6627
6628 if (t->opcode_modifier.isprefix
6629 && t->opcode_modifier.mnemonicsize == IGNORESIZE)
6630 {
6631 /* Warn them that a data or address size prefix doesn't
6632 affect assembly of the next line of code. */
6633 as_warn (_("stand-alone `%s' prefix"), t->name);
6634 }
6635 }
6636
6637 /* Copy the template we found. */
6638 i.tm = *t;
6639
6640 if (addr_prefix_disp != -1)
6641 i.tm.operand_types[addr_prefix_disp]
6642 = operand_types[addr_prefix_disp];
6643
6644 if (found_reverse_match)
6645 {
6646 /* If we found a reverse match we must alter the opcode direction
6647 bit and clear/flip the regmem modifier one. found_reverse_match
6648 holds bits to change (different for int & float insns). */
6649
6650 i.tm.base_opcode ^= found_reverse_match;
6651
6652 i.tm.operand_types[0] = operand_types[i.operands - 1];
6653 i.tm.operand_types[i.operands - 1] = operand_types[0];
6654
6655 /* Certain SIMD insns have their load forms specified in the opcode
6656 table, and hence we need to _set_ RegMem instead of clearing it.
6657 We need to avoid setting the bit though on insns like KMOVW. */
6658 i.tm.opcode_modifier.regmem
6659 = i.tm.opcode_modifier.modrm && i.tm.opcode_modifier.d
6660 && i.tm.operands > 2U - i.tm.opcode_modifier.sse2avx
6661 && !i.tm.opcode_modifier.regmem;
6662 }
6663
6664 return t;
6665 }
6666
6667 static int
6668 check_string (void)
6669 {
6670 unsigned int es_op = i.tm.opcode_modifier.isstring - IS_STRING_ES_OP0;
6671 unsigned int op = i.tm.operand_types[0].bitfield.baseindex ? es_op : 0;
6672
6673 if (i.seg[op] != NULL && i.seg[op] != &es)
6674 {
6675 as_bad (_("`%s' operand %u must use `%ses' segment"),
6676 i.tm.name,
6677 intel_syntax ? i.tm.operands - es_op : es_op + 1,
6678 register_prefix);
6679 return 0;
6680 }
6681
6682 /* There's only ever one segment override allowed per instruction.
6683 This instruction possibly has a legal segment override on the
6684 second operand, so copy the segment to where non-string
6685 instructions store it, allowing common code. */
6686 i.seg[op] = i.seg[1];
6687
6688 return 1;
6689 }
6690
6691 static int
6692 process_suffix (void)
6693 {
6694 /* If matched instruction specifies an explicit instruction mnemonic
6695 suffix, use it. */
6696 if (i.tm.opcode_modifier.size == SIZE16)
6697 i.suffix = WORD_MNEM_SUFFIX;
6698 else if (i.tm.opcode_modifier.size == SIZE32)
6699 i.suffix = LONG_MNEM_SUFFIX;
6700 else if (i.tm.opcode_modifier.size == SIZE64)
6701 i.suffix = QWORD_MNEM_SUFFIX;
6702 else if (i.reg_operands
6703 && (i.operands > 1 || i.types[0].bitfield.class == Reg)
6704 && !i.tm.opcode_modifier.addrprefixopreg)
6705 {
6706 unsigned int numop = i.operands;
6707
6708 /* movsx/movzx want only their source operand considered here, for the
6709 ambiguity checking below. The suffix will be replaced afterwards
6710 to represent the destination (register). */
6711 if (((i.tm.base_opcode | 8) == 0xfbe && i.tm.opcode_modifier.w)
6712 || (i.tm.base_opcode == 0x63 && i.tm.cpu_flags.bitfield.cpu64))
6713 --i.operands;
6714
6715 /* crc32 needs REX.W set regardless of suffix / source operand size. */
6716 if (i.tm.base_opcode == 0xf20f38f0
6717 && i.tm.operand_types[1].bitfield.qword)
6718 i.rex |= REX_W;
6719
6720 /* If there's no instruction mnemonic suffix we try to invent one
6721 based on GPR operands. */
6722 if (!i.suffix)
6723 {
6724 /* We take i.suffix from the last register operand specified,
6725 Destination register type is more significant than source
6726 register type. crc32 in SSE4.2 prefers source register
6727 type. */
6728 unsigned int op = i.tm.base_opcode != 0xf20f38f0 ? i.operands : 1;
6729
6730 while (op--)
6731 if (i.tm.operand_types[op].bitfield.instance == InstanceNone
6732 || i.tm.operand_types[op].bitfield.instance == Accum)
6733 {
6734 if (i.types[op].bitfield.class != Reg)
6735 continue;
6736 if (i.types[op].bitfield.byte)
6737 i.suffix = BYTE_MNEM_SUFFIX;
6738 else if (i.types[op].bitfield.word)
6739 i.suffix = WORD_MNEM_SUFFIX;
6740 else if (i.types[op].bitfield.dword)
6741 i.suffix = LONG_MNEM_SUFFIX;
6742 else if (i.types[op].bitfield.qword)
6743 i.suffix = QWORD_MNEM_SUFFIX;
6744 else
6745 continue;
6746 break;
6747 }
6748
6749 /* As an exception, movsx/movzx silently default to a byte source
6750 in AT&T mode. */
6751 if ((i.tm.base_opcode | 8) == 0xfbe && i.tm.opcode_modifier.w
6752 && !i.suffix && !intel_syntax)
6753 i.suffix = BYTE_MNEM_SUFFIX;
6754 }
6755 else if (i.suffix == BYTE_MNEM_SUFFIX)
6756 {
6757 if (intel_syntax
6758 && i.tm.opcode_modifier.mnemonicsize == IGNORESIZE
6759 && i.tm.opcode_modifier.no_bsuf)
6760 i.suffix = 0;
6761 else if (!check_byte_reg ())
6762 return 0;
6763 }
6764 else if (i.suffix == LONG_MNEM_SUFFIX)
6765 {
6766 if (intel_syntax
6767 && i.tm.opcode_modifier.mnemonicsize == IGNORESIZE
6768 && i.tm.opcode_modifier.no_lsuf
6769 && !i.tm.opcode_modifier.todword
6770 && !i.tm.opcode_modifier.toqword)
6771 i.suffix = 0;
6772 else if (!check_long_reg ())
6773 return 0;
6774 }
6775 else if (i.suffix == QWORD_MNEM_SUFFIX)
6776 {
6777 if (intel_syntax
6778 && i.tm.opcode_modifier.mnemonicsize == IGNORESIZE
6779 && i.tm.opcode_modifier.no_qsuf
6780 && !i.tm.opcode_modifier.todword
6781 && !i.tm.opcode_modifier.toqword)
6782 i.suffix = 0;
6783 else if (!check_qword_reg ())
6784 return 0;
6785 }
6786 else if (i.suffix == WORD_MNEM_SUFFIX)
6787 {
6788 if (intel_syntax
6789 && i.tm.opcode_modifier.mnemonicsize == IGNORESIZE
6790 && i.tm.opcode_modifier.no_wsuf)
6791 i.suffix = 0;
6792 else if (!check_word_reg ())
6793 return 0;
6794 }
6795 else if (intel_syntax
6796 && i.tm.opcode_modifier.mnemonicsize == IGNORESIZE)
6797 /* Do nothing if the instruction is going to ignore the prefix. */
6798 ;
6799 else
6800 abort ();
6801
6802 /* Undo the movsx/movzx change done above. */
6803 i.operands = numop;
6804 }
6805 else if (i.tm.opcode_modifier.mnemonicsize == DEFAULTSIZE
6806 && !i.suffix)
6807 {
6808 i.suffix = stackop_size;
6809 if (stackop_size == LONG_MNEM_SUFFIX)
6810 {
6811 /* stackop_size is set to LONG_MNEM_SUFFIX for the
6812 .code16gcc directive to support 16-bit mode with
6813 32-bit address. For IRET without a suffix, generate
6814 16-bit IRET (opcode 0xcf) to return from an interrupt
6815 handler. */
6816 if (i.tm.base_opcode == 0xcf)
6817 {
6818 i.suffix = WORD_MNEM_SUFFIX;
6819 as_warn (_("generating 16-bit `iret' for .code16gcc directive"));
6820 }
6821 /* Warn about changed behavior for segment register push/pop. */
6822 else if ((i.tm.base_opcode | 1) == 0x07)
6823 as_warn (_("generating 32-bit `%s', unlike earlier gas versions"),
6824 i.tm.name);
6825 }
6826 }
6827 else if (!i.suffix
6828 && (i.tm.opcode_modifier.jump == JUMP_ABSOLUTE
6829 || i.tm.opcode_modifier.jump == JUMP_BYTE
6830 || i.tm.opcode_modifier.jump == JUMP_INTERSEGMENT
6831 || (i.tm.base_opcode == 0x0f01 /* [ls][gi]dt */
6832 && i.tm.extension_opcode <= 3)))
6833 {
6834 switch (flag_code)
6835 {
6836 case CODE_64BIT:
6837 if (!i.tm.opcode_modifier.no_qsuf)
6838 {
6839 i.suffix = QWORD_MNEM_SUFFIX;
6840 break;
6841 }
6842 /* Fall through. */
6843 case CODE_32BIT:
6844 if (!i.tm.opcode_modifier.no_lsuf)
6845 i.suffix = LONG_MNEM_SUFFIX;
6846 break;
6847 case CODE_16BIT:
6848 if (!i.tm.opcode_modifier.no_wsuf)
6849 i.suffix = WORD_MNEM_SUFFIX;
6850 break;
6851 }
6852 }
6853
6854 if (!i.suffix
6855 && (i.tm.opcode_modifier.mnemonicsize != DEFAULTSIZE
6856 /* Also cover lret/retf/iret in 64-bit mode. */
6857 || (flag_code == CODE_64BIT
6858 && !i.tm.opcode_modifier.no_lsuf
6859 && !i.tm.opcode_modifier.no_qsuf))
6860 && i.tm.opcode_modifier.mnemonicsize != IGNORESIZE
6861 /* Accept FLDENV et al without suffix. */
6862 && (i.tm.opcode_modifier.no_ssuf || i.tm.opcode_modifier.floatmf))
6863 {
6864 unsigned int suffixes, evex = 0;
6865
6866 suffixes = !i.tm.opcode_modifier.no_bsuf;
6867 if (!i.tm.opcode_modifier.no_wsuf)
6868 suffixes |= 1 << 1;
6869 if (!i.tm.opcode_modifier.no_lsuf)
6870 suffixes |= 1 << 2;
6871 if (!i.tm.opcode_modifier.no_ldsuf)
6872 suffixes |= 1 << 3;
6873 if (!i.tm.opcode_modifier.no_ssuf)
6874 suffixes |= 1 << 4;
6875 if (flag_code == CODE_64BIT && !i.tm.opcode_modifier.no_qsuf)
6876 suffixes |= 1 << 5;
6877
6878 /* For [XYZ]MMWORD operands inspect operand sizes. While generally
6879 also suitable for AT&T syntax mode, it was requested that this be
6880 restricted to just Intel syntax. */
6881 if (intel_syntax && is_any_vex_encoding (&i.tm) && !i.broadcast)
6882 {
6883 unsigned int op;
6884
6885 for (op = 0; op < i.tm.operands; ++op)
6886 {
6887 if (is_evex_encoding (&i.tm)
6888 && !cpu_arch_flags.bitfield.cpuavx512vl)
6889 {
6890 if (i.tm.operand_types[op].bitfield.ymmword)
6891 i.tm.operand_types[op].bitfield.xmmword = 0;
6892 if (i.tm.operand_types[op].bitfield.zmmword)
6893 i.tm.operand_types[op].bitfield.ymmword = 0;
6894 if (!i.tm.opcode_modifier.evex
6895 || i.tm.opcode_modifier.evex == EVEXDYN)
6896 i.tm.opcode_modifier.evex = EVEX512;
6897 }
6898
6899 if (i.tm.operand_types[op].bitfield.xmmword
6900 + i.tm.operand_types[op].bitfield.ymmword
6901 + i.tm.operand_types[op].bitfield.zmmword < 2)
6902 continue;
6903
6904 /* Any properly sized operand disambiguates the insn. */
6905 if (i.types[op].bitfield.xmmword
6906 || i.types[op].bitfield.ymmword
6907 || i.types[op].bitfield.zmmword)
6908 {
6909 suffixes &= ~(7 << 6);
6910 evex = 0;
6911 break;
6912 }
6913
6914 if ((i.flags[op] & Operand_Mem)
6915 && i.tm.operand_types[op].bitfield.unspecified)
6916 {
6917 if (i.tm.operand_types[op].bitfield.xmmword)
6918 suffixes |= 1 << 6;
6919 if (i.tm.operand_types[op].bitfield.ymmword)
6920 suffixes |= 1 << 7;
6921 if (i.tm.operand_types[op].bitfield.zmmword)
6922 suffixes |= 1 << 8;
6923 if (is_evex_encoding (&i.tm))
6924 evex = EVEX512;
6925 }
6926 }
6927 }
6928
6929 /* Are multiple suffixes / operand sizes allowed? */
6930 if (suffixes & (suffixes - 1))
6931 {
6932 if (intel_syntax
6933 && (i.tm.opcode_modifier.mnemonicsize != DEFAULTSIZE
6934 || operand_check == check_error))
6935 {
6936 as_bad (_("ambiguous operand size for `%s'"), i.tm.name);
6937 return 0;
6938 }
6939 if (operand_check == check_error)
6940 {
6941 as_bad (_("no instruction mnemonic suffix given and "
6942 "no register operands; can't size `%s'"), i.tm.name);
6943 return 0;
6944 }
6945 if (operand_check == check_warning)
6946 as_warn (_("%s; using default for `%s'"),
6947 intel_syntax
6948 ? _("ambiguous operand size")
6949 : _("no instruction mnemonic suffix given and "
6950 "no register operands"),
6951 i.tm.name);
6952
6953 if (i.tm.opcode_modifier.floatmf)
6954 i.suffix = SHORT_MNEM_SUFFIX;
6955 else if ((i.tm.base_opcode | 8) == 0xfbe
6956 || (i.tm.base_opcode == 0x63
6957 && i.tm.cpu_flags.bitfield.cpu64))
6958 /* handled below */;
6959 else if (evex)
6960 i.tm.opcode_modifier.evex = evex;
6961 else if (flag_code == CODE_16BIT)
6962 i.suffix = WORD_MNEM_SUFFIX;
6963 else if (!i.tm.opcode_modifier.no_lsuf)
6964 i.suffix = LONG_MNEM_SUFFIX;
6965 else
6966 i.suffix = QWORD_MNEM_SUFFIX;
6967 }
6968 }
6969
6970 if ((i.tm.base_opcode | 8) == 0xfbe
6971 || (i.tm.base_opcode == 0x63 && i.tm.cpu_flags.bitfield.cpu64))
6972 {
6973 /* In Intel syntax, movsx/movzx must have a "suffix" (checked above).
6974 In AT&T syntax, if there is no suffix (warned about above), the default
6975 will be byte extension. */
6976 if (i.tm.opcode_modifier.w && i.suffix && i.suffix != BYTE_MNEM_SUFFIX)
6977 i.tm.base_opcode |= 1;
6978
6979 /* For further processing, the suffix should represent the destination
6980 (register). This is already the case when one was used with
6981 mov[sz][bw]*, but we need to replace it for mov[sz]x, or if there was
6982 no suffix to begin with. */
6983 if (i.tm.opcode_modifier.w || i.tm.base_opcode == 0x63 || !i.suffix)
6984 {
6985 if (i.types[1].bitfield.word)
6986 i.suffix = WORD_MNEM_SUFFIX;
6987 else if (i.types[1].bitfield.qword)
6988 i.suffix = QWORD_MNEM_SUFFIX;
6989 else
6990 i.suffix = LONG_MNEM_SUFFIX;
6991
6992 i.tm.opcode_modifier.w = 0;
6993 }
6994 }
6995
6996 if (!i.tm.opcode_modifier.modrm && i.reg_operands && i.tm.operands < 3)
6997 i.short_form = (i.tm.operand_types[0].bitfield.class == Reg)
6998 != (i.tm.operand_types[1].bitfield.class == Reg);
6999
7000 /* Change the opcode based on the operand size given by i.suffix. */
7001 switch (i.suffix)
7002 {
7003 /* Size floating point instruction. */
7004 case LONG_MNEM_SUFFIX:
7005 if (i.tm.opcode_modifier.floatmf)
7006 {
7007 i.tm.base_opcode ^= 4;
7008 break;
7009 }
7010 /* fall through */
7011 case WORD_MNEM_SUFFIX:
7012 case QWORD_MNEM_SUFFIX:
7013 /* It's not a byte, select word/dword operation. */
7014 if (i.tm.opcode_modifier.w)
7015 {
7016 if (i.short_form)
7017 i.tm.base_opcode |= 8;
7018 else
7019 i.tm.base_opcode |= 1;
7020 }
7021 /* fall through */
7022 case SHORT_MNEM_SUFFIX:
7023 /* Now select between word & dword operations via the operand
7024 size prefix, except for instructions that will ignore this
7025 prefix anyway. */
7026 if (i.suffix != QWORD_MNEM_SUFFIX
7027 && i.tm.opcode_modifier.mnemonicsize != IGNORESIZE
7028 && !i.tm.opcode_modifier.floatmf
7029 && !is_any_vex_encoding (&i.tm)
7030 && ((i.suffix == LONG_MNEM_SUFFIX) == (flag_code == CODE_16BIT)
7031 || (flag_code == CODE_64BIT
7032 && i.tm.opcode_modifier.jump == JUMP_BYTE)))
7033 {
7034 unsigned int prefix = DATA_PREFIX_OPCODE;
7035
7036 if (i.tm.opcode_modifier.jump == JUMP_BYTE) /* jcxz, loop */
7037 prefix = ADDR_PREFIX_OPCODE;
7038
7039 if (!add_prefix (prefix))
7040 return 0;
7041 }
7042
7043 /* Set mode64 for an operand. */
7044 if (i.suffix == QWORD_MNEM_SUFFIX
7045 && flag_code == CODE_64BIT
7046 && !i.tm.opcode_modifier.norex64
7047 && !i.tm.opcode_modifier.vexw
7048 /* Special case for xchg %rax,%rax. It is NOP and doesn't
7049 need rex64. */
7050 && ! (i.operands == 2
7051 && i.tm.base_opcode == 0x90
7052 && i.tm.extension_opcode == None
7053 && i.types[0].bitfield.instance == Accum
7054 && i.types[0].bitfield.qword
7055 && i.types[1].bitfield.instance == Accum
7056 && i.types[1].bitfield.qword))
7057 i.rex |= REX_W;
7058
7059 break;
7060 }
7061
7062 if (i.tm.opcode_modifier.addrprefixopreg)
7063 {
7064 gas_assert (!i.suffix);
7065 gas_assert (i.reg_operands);
7066
7067 if (i.tm.operand_types[0].bitfield.instance == Accum
7068 || i.operands == 1)
7069 {
7070 /* The address size override prefix changes the size of the
7071 first operand. */
7072 if (flag_code == CODE_64BIT
7073 && i.op[0].regs->reg_type.bitfield.word)
7074 {
7075 as_bad (_("16-bit addressing unavailable for `%s'"),
7076 i.tm.name);
7077 return 0;
7078 }
7079
7080 if ((flag_code == CODE_32BIT
7081 ? i.op[0].regs->reg_type.bitfield.word
7082 : i.op[0].regs->reg_type.bitfield.dword)
7083 && !add_prefix (ADDR_PREFIX_OPCODE))
7084 return 0;
7085 }
7086 else
7087 {
7088 /* Check invalid register operand when the address size override
7089 prefix changes the size of register operands. */
7090 unsigned int op;
7091 enum { need_word, need_dword, need_qword } need;
7092
7093 if (flag_code == CODE_32BIT)
7094 need = i.prefix[ADDR_PREFIX] ? need_word : need_dword;
7095 else if (i.prefix[ADDR_PREFIX])
7096 need = need_dword;
7097 else
7098 need = flag_code == CODE_64BIT ? need_qword : need_word;
7099
7100 for (op = 0; op < i.operands; op++)
7101 {
7102 if (i.types[op].bitfield.class != Reg)
7103 continue;
7104
7105 switch (need)
7106 {
7107 case need_word:
7108 if (i.op[op].regs->reg_type.bitfield.word)
7109 continue;
7110 break;
7111 case need_dword:
7112 if (i.op[op].regs->reg_type.bitfield.dword)
7113 continue;
7114 break;
7115 case need_qword:
7116 if (i.op[op].regs->reg_type.bitfield.qword)
7117 continue;
7118 break;
7119 }
7120
7121 as_bad (_("invalid register operand size for `%s'"),
7122 i.tm.name);
7123 return 0;
7124 }
7125 }
7126 }
7127
7128 return 1;
7129 }
7130
7131 static int
7132 check_byte_reg (void)
7133 {
7134 int op;
7135
7136 for (op = i.operands; --op >= 0;)
7137 {
7138 /* Skip non-register operands. */
7139 if (i.types[op].bitfield.class != Reg)
7140 continue;
7141
7142 /* If this is an eight bit register, it's OK. If it's the 16 or
7143 32 bit version of an eight bit register, we will just use the
7144 low portion, and that's OK too. */
7145 if (i.types[op].bitfield.byte)
7146 continue;
7147
7148 /* I/O port address operands are OK too. */
7149 if (i.tm.operand_types[op].bitfield.instance == RegD
7150 && i.tm.operand_types[op].bitfield.word)
7151 continue;
7152
7153 /* crc32 only wants its source operand checked here. */
7154 if (i.tm.base_opcode == 0xf20f38f0 && op)
7155 continue;
7156
7157 /* Any other register is bad. */
7158 as_bad (_("`%s%s' not allowed with `%s%c'"),
7159 register_prefix, i.op[op].regs->reg_name,
7160 i.tm.name, i.suffix);
7161 return 0;
7162 }
7163 return 1;
7164 }
7165
7166 static int
7167 check_long_reg (void)
7168 {
7169 int op;
7170
7171 for (op = i.operands; --op >= 0;)
7172 /* Skip non-register operands. */
7173 if (i.types[op].bitfield.class != Reg)
7174 continue;
7175 /* Reject eight bit registers, except where the template requires
7176 them. (eg. movzb) */
7177 else if (i.types[op].bitfield.byte
7178 && (i.tm.operand_types[op].bitfield.class == Reg
7179 || i.tm.operand_types[op].bitfield.instance == Accum)
7180 && (i.tm.operand_types[op].bitfield.word
7181 || i.tm.operand_types[op].bitfield.dword))
7182 {
7183 as_bad (_("`%s%s' not allowed with `%s%c'"),
7184 register_prefix,
7185 i.op[op].regs->reg_name,
7186 i.tm.name,
7187 i.suffix);
7188 return 0;
7189 }
7190 /* Error if the e prefix on a general reg is missing. */
7191 else if (i.types[op].bitfield.word
7192 && (i.tm.operand_types[op].bitfield.class == Reg
7193 || i.tm.operand_types[op].bitfield.instance == Accum)
7194 && i.tm.operand_types[op].bitfield.dword)
7195 {
7196 as_bad (_("incorrect register `%s%s' used with `%c' suffix"),
7197 register_prefix, i.op[op].regs->reg_name,
7198 i.suffix);
7199 return 0;
7200 }
7201 /* Warn if the r prefix on a general reg is present. */
7202 else if (i.types[op].bitfield.qword
7203 && (i.tm.operand_types[op].bitfield.class == Reg
7204 || i.tm.operand_types[op].bitfield.instance == Accum)
7205 && i.tm.operand_types[op].bitfield.dword)
7206 {
7207 if (intel_syntax
7208 && i.tm.opcode_modifier.toqword
7209 && i.types[0].bitfield.class != RegSIMD)
7210 {
7211 /* Convert to QWORD. We want REX byte. */
7212 i.suffix = QWORD_MNEM_SUFFIX;
7213 }
7214 else
7215 {
7216 as_bad (_("incorrect register `%s%s' used with `%c' suffix"),
7217 register_prefix, i.op[op].regs->reg_name,
7218 i.suffix);
7219 return 0;
7220 }
7221 }
7222 return 1;
7223 }
7224
7225 static int
7226 check_qword_reg (void)
7227 {
7228 int op;
7229
7230 for (op = i.operands; --op >= 0; )
7231 /* Skip non-register operands. */
7232 if (i.types[op].bitfield.class != Reg)
7233 continue;
7234 /* Reject eight bit registers, except where the template requires
7235 them. (eg. movzb) */
7236 else if (i.types[op].bitfield.byte
7237 && (i.tm.operand_types[op].bitfield.class == Reg
7238 || i.tm.operand_types[op].bitfield.instance == Accum)
7239 && (i.tm.operand_types[op].bitfield.word
7240 || i.tm.operand_types[op].bitfield.dword))
7241 {
7242 as_bad (_("`%s%s' not allowed with `%s%c'"),
7243 register_prefix,
7244 i.op[op].regs->reg_name,
7245 i.tm.name,
7246 i.suffix);
7247 return 0;
7248 }
7249 /* Warn if the r prefix on a general reg is missing. */
7250 else if ((i.types[op].bitfield.word
7251 || i.types[op].bitfield.dword)
7252 && (i.tm.operand_types[op].bitfield.class == Reg
7253 || i.tm.operand_types[op].bitfield.instance == Accum)
7254 && i.tm.operand_types[op].bitfield.qword)
7255 {
7256 /* Prohibit these changes in the 64bit mode, since the
7257 lowering is more complicated. */
7258 if (intel_syntax
7259 && i.tm.opcode_modifier.todword
7260 && i.types[0].bitfield.class != RegSIMD)
7261 {
7262 /* Convert to DWORD. We don't want REX byte. */
7263 i.suffix = LONG_MNEM_SUFFIX;
7264 }
7265 else
7266 {
7267 as_bad (_("incorrect register `%s%s' used with `%c' suffix"),
7268 register_prefix, i.op[op].regs->reg_name,
7269 i.suffix);
7270 return 0;
7271 }
7272 }
7273 return 1;
7274 }
7275
7276 static int
7277 check_word_reg (void)
7278 {
7279 int op;
7280 for (op = i.operands; --op >= 0;)
7281 /* Skip non-register operands. */
7282 if (i.types[op].bitfield.class != Reg)
7283 continue;
7284 /* Reject eight bit registers, except where the template requires
7285 them. (eg. movzb) */
7286 else if (i.types[op].bitfield.byte
7287 && (i.tm.operand_types[op].bitfield.class == Reg
7288 || i.tm.operand_types[op].bitfield.instance == Accum)
7289 && (i.tm.operand_types[op].bitfield.word
7290 || i.tm.operand_types[op].bitfield.dword))
7291 {
7292 as_bad (_("`%s%s' not allowed with `%s%c'"),
7293 register_prefix,
7294 i.op[op].regs->reg_name,
7295 i.tm.name,
7296 i.suffix);
7297 return 0;
7298 }
7299 /* Error if the e or r prefix on a general reg is present. */
7300 else if ((i.types[op].bitfield.dword
7301 || i.types[op].bitfield.qword)
7302 && (i.tm.operand_types[op].bitfield.class == Reg
7303 || i.tm.operand_types[op].bitfield.instance == Accum)
7304 && i.tm.operand_types[op].bitfield.word)
7305 {
7306 as_bad (_("incorrect register `%s%s' used with `%c' suffix"),
7307 register_prefix, i.op[op].regs->reg_name,
7308 i.suffix);
7309 return 0;
7310 }
7311 return 1;
7312 }
7313
7314 static int
7315 update_imm (unsigned int j)
7316 {
7317 i386_operand_type overlap = i.types[j];
7318 if ((overlap.bitfield.imm8
7319 || overlap.bitfield.imm8s
7320 || overlap.bitfield.imm16
7321 || overlap.bitfield.imm32
7322 || overlap.bitfield.imm32s
7323 || overlap.bitfield.imm64)
7324 && !operand_type_equal (&overlap, &imm8)
7325 && !operand_type_equal (&overlap, &imm8s)
7326 && !operand_type_equal (&overlap, &imm16)
7327 && !operand_type_equal (&overlap, &imm32)
7328 && !operand_type_equal (&overlap, &imm32s)
7329 && !operand_type_equal (&overlap, &imm64))
7330 {
7331 if (i.suffix)
7332 {
7333 i386_operand_type temp;
7334
7335 operand_type_set (&temp, 0);
7336 if (i.suffix == BYTE_MNEM_SUFFIX)
7337 {
7338 temp.bitfield.imm8 = overlap.bitfield.imm8;
7339 temp.bitfield.imm8s = overlap.bitfield.imm8s;
7340 }
7341 else if (i.suffix == WORD_MNEM_SUFFIX)
7342 temp.bitfield.imm16 = overlap.bitfield.imm16;
7343 else if (i.suffix == QWORD_MNEM_SUFFIX)
7344 {
7345 temp.bitfield.imm64 = overlap.bitfield.imm64;
7346 temp.bitfield.imm32s = overlap.bitfield.imm32s;
7347 }
7348 else
7349 temp.bitfield.imm32 = overlap.bitfield.imm32;
7350 overlap = temp;
7351 }
7352 else if (operand_type_equal (&overlap, &imm16_32_32s)
7353 || operand_type_equal (&overlap, &imm16_32)
7354 || operand_type_equal (&overlap, &imm16_32s))
7355 {
7356 if ((flag_code == CODE_16BIT) ^ (i.prefix[DATA_PREFIX] != 0))
7357 overlap = imm16;
7358 else
7359 overlap = imm32s;
7360 }
7361 if (!operand_type_equal (&overlap, &imm8)
7362 && !operand_type_equal (&overlap, &imm8s)
7363 && !operand_type_equal (&overlap, &imm16)
7364 && !operand_type_equal (&overlap, &imm32)
7365 && !operand_type_equal (&overlap, &imm32s)
7366 && !operand_type_equal (&overlap, &imm64))
7367 {
7368 as_bad (_("no instruction mnemonic suffix given; "
7369 "can't determine immediate size"));
7370 return 0;
7371 }
7372 }
7373 i.types[j] = overlap;
7374
7375 return 1;
7376 }
7377
7378 static int
7379 finalize_imm (void)
7380 {
7381 unsigned int j, n;
7382
7383 /* Update the first 2 immediate operands. */
7384 n = i.operands > 2 ? 2 : i.operands;
7385 if (n)
7386 {
7387 for (j = 0; j < n; j++)
7388 if (update_imm (j) == 0)
7389 return 0;
7390
7391 /* The 3rd operand can't be immediate operand. */
7392 gas_assert (operand_type_check (i.types[2], imm) == 0);
7393 }
7394
7395 return 1;
7396 }
7397
7398 static int
7399 process_operands (void)
7400 {
7401 /* Default segment register this instruction will use for memory
7402 accesses. 0 means unknown. This is only for optimizing out
7403 unnecessary segment overrides. */
7404 const seg_entry *default_seg = 0;
7405
7406 if (i.tm.opcode_modifier.sse2avx && i.tm.opcode_modifier.vexvvvv)
7407 {
7408 unsigned int dupl = i.operands;
7409 unsigned int dest = dupl - 1;
7410 unsigned int j;
7411
7412 /* The destination must be an xmm register. */
7413 gas_assert (i.reg_operands
7414 && MAX_OPERANDS > dupl
7415 && operand_type_equal (&i.types[dest], &regxmm));
7416
7417 if (i.tm.operand_types[0].bitfield.instance == Accum
7418 && i.tm.operand_types[0].bitfield.xmmword)
7419 {
7420 if (i.tm.opcode_modifier.vexsources == VEX3SOURCES)
7421 {
7422 /* Keep xmm0 for instructions with VEX prefix and 3
7423 sources. */
7424 i.tm.operand_types[0].bitfield.instance = InstanceNone;
7425 i.tm.operand_types[0].bitfield.class = RegSIMD;
7426 goto duplicate;
7427 }
7428 else
7429 {
7430 /* We remove the first xmm0 and keep the number of
7431 operands unchanged, which in fact duplicates the
7432 destination. */
7433 for (j = 1; j < i.operands; j++)
7434 {
7435 i.op[j - 1] = i.op[j];
7436 i.types[j - 1] = i.types[j];
7437 i.tm.operand_types[j - 1] = i.tm.operand_types[j];
7438 i.flags[j - 1] = i.flags[j];
7439 }
7440 }
7441 }
7442 else if (i.tm.opcode_modifier.implicit1stxmm0)
7443 {
7444 gas_assert ((MAX_OPERANDS - 1) > dupl
7445 && (i.tm.opcode_modifier.vexsources
7446 == VEX3SOURCES));
7447
7448 /* Add the implicit xmm0 for instructions with VEX prefix
7449 and 3 sources. */
7450 for (j = i.operands; j > 0; j--)
7451 {
7452 i.op[j] = i.op[j - 1];
7453 i.types[j] = i.types[j - 1];
7454 i.tm.operand_types[j] = i.tm.operand_types[j - 1];
7455 i.flags[j] = i.flags[j - 1];
7456 }
7457 i.op[0].regs
7458 = (const reg_entry *) hash_find (reg_hash, "xmm0");
7459 i.types[0] = regxmm;
7460 i.tm.operand_types[0] = regxmm;
7461
7462 i.operands += 2;
7463 i.reg_operands += 2;
7464 i.tm.operands += 2;
7465
7466 dupl++;
7467 dest++;
7468 i.op[dupl] = i.op[dest];
7469 i.types[dupl] = i.types[dest];
7470 i.tm.operand_types[dupl] = i.tm.operand_types[dest];
7471 i.flags[dupl] = i.flags[dest];
7472 }
7473 else
7474 {
7475 duplicate:
7476 i.operands++;
7477 i.reg_operands++;
7478 i.tm.operands++;
7479
7480 i.op[dupl] = i.op[dest];
7481 i.types[dupl] = i.types[dest];
7482 i.tm.operand_types[dupl] = i.tm.operand_types[dest];
7483 i.flags[dupl] = i.flags[dest];
7484 }
7485
7486 if (i.tm.opcode_modifier.immext)
7487 process_immext ();
7488 }
7489 else if (i.tm.operand_types[0].bitfield.instance == Accum
7490 && i.tm.operand_types[0].bitfield.xmmword)
7491 {
7492 unsigned int j;
7493
7494 for (j = 1; j < i.operands; j++)
7495 {
7496 i.op[j - 1] = i.op[j];
7497 i.types[j - 1] = i.types[j];
7498
7499 /* We need to adjust fields in i.tm since they are used by
7500 build_modrm_byte. */
7501 i.tm.operand_types [j - 1] = i.tm.operand_types [j];
7502
7503 i.flags[j - 1] = i.flags[j];
7504 }
7505
7506 i.operands--;
7507 i.reg_operands--;
7508 i.tm.operands--;
7509 }
7510 else if (i.tm.opcode_modifier.implicitquadgroup)
7511 {
7512 unsigned int regnum, first_reg_in_group, last_reg_in_group;
7513
7514 /* The second operand must be {x,y,z}mmN, where N is a multiple of 4. */
7515 gas_assert (i.operands >= 2 && i.types[1].bitfield.class == RegSIMD);
7516 regnum = register_number (i.op[1].regs);
7517 first_reg_in_group = regnum & ~3;
7518 last_reg_in_group = first_reg_in_group + 3;
7519 if (regnum != first_reg_in_group)
7520 as_warn (_("source register `%s%s' implicitly denotes"
7521 " `%s%.3s%u' to `%s%.3s%u' source group in `%s'"),
7522 register_prefix, i.op[1].regs->reg_name,
7523 register_prefix, i.op[1].regs->reg_name, first_reg_in_group,
7524 register_prefix, i.op[1].regs->reg_name, last_reg_in_group,
7525 i.tm.name);
7526 }
7527 else if (i.tm.opcode_modifier.regkludge)
7528 {
7529 /* The imul $imm, %reg instruction is converted into
7530 imul $imm, %reg, %reg, and the clr %reg instruction
7531 is converted into xor %reg, %reg. */
7532
7533 unsigned int first_reg_op;
7534
7535 if (operand_type_check (i.types[0], reg))
7536 first_reg_op = 0;
7537 else
7538 first_reg_op = 1;
7539 /* Pretend we saw the extra register operand. */
7540 gas_assert (i.reg_operands == 1
7541 && i.op[first_reg_op + 1].regs == 0);
7542 i.op[first_reg_op + 1].regs = i.op[first_reg_op].regs;
7543 i.types[first_reg_op + 1] = i.types[first_reg_op];
7544 i.operands++;
7545 i.reg_operands++;
7546 }
7547
7548 if (i.tm.opcode_modifier.modrm)
7549 {
7550 /* The opcode is completed (modulo i.tm.extension_opcode which
7551 must be put into the modrm byte). Now, we make the modrm and
7552 index base bytes based on all the info we've collected. */
7553
7554 default_seg = build_modrm_byte ();
7555 }
7556 else if (i.types[0].bitfield.class == SReg)
7557 {
7558 if (flag_code != CODE_64BIT
7559 ? i.tm.base_opcode == POP_SEG_SHORT
7560 && i.op[0].regs->reg_num == 1
7561 : (i.tm.base_opcode | 1) == POP_SEG386_SHORT
7562 && i.op[0].regs->reg_num < 4)
7563 {
7564 as_bad (_("you can't `%s %s%s'"),
7565 i.tm.name, register_prefix, i.op[0].regs->reg_name);
7566 return 0;
7567 }
7568 if ( i.op[0].regs->reg_num > 3 && i.tm.opcode_length == 1 )
7569 {
7570 i.tm.base_opcode ^= POP_SEG_SHORT ^ POP_SEG386_SHORT;
7571 i.tm.opcode_length = 2;
7572 }
7573 i.tm.base_opcode |= (i.op[0].regs->reg_num << 3);
7574 }
7575 else if ((i.tm.base_opcode & ~0x3) == MOV_AX_DISP32)
7576 {
7577 default_seg = &ds;
7578 }
7579 else if (i.tm.opcode_modifier.isstring)
7580 {
7581 /* For the string instructions that allow a segment override
7582 on one of their operands, the default segment is ds. */
7583 default_seg = &ds;
7584 }
7585 else if (i.short_form)
7586 {
7587 /* The register or float register operand is in operand
7588 0 or 1. */
7589 unsigned int op = i.tm.operand_types[0].bitfield.class != Reg;
7590
7591 /* Register goes in low 3 bits of opcode. */
7592 i.tm.base_opcode |= i.op[op].regs->reg_num;
7593 if ((i.op[op].regs->reg_flags & RegRex) != 0)
7594 i.rex |= REX_B;
7595 if (!quiet_warnings && i.tm.opcode_modifier.ugh)
7596 {
7597 /* Warn about some common errors, but press on regardless.
7598 The first case can be generated by gcc (<= 2.8.1). */
7599 if (i.operands == 2)
7600 {
7601 /* Reversed arguments on faddp, fsubp, etc. */
7602 as_warn (_("translating to `%s %s%s,%s%s'"), i.tm.name,
7603 register_prefix, i.op[!intel_syntax].regs->reg_name,
7604 register_prefix, i.op[intel_syntax].regs->reg_name);
7605 }
7606 else
7607 {
7608 /* Extraneous `l' suffix on fp insn. */
7609 as_warn (_("translating to `%s %s%s'"), i.tm.name,
7610 register_prefix, i.op[0].regs->reg_name);
7611 }
7612 }
7613 }
7614
7615 if ((i.seg[0] || i.prefix[SEG_PREFIX])
7616 && i.tm.base_opcode == 0x8d /* lea */
7617 && !is_any_vex_encoding(&i.tm))
7618 {
7619 if (!quiet_warnings)
7620 as_warn (_("segment override on `%s' is ineffectual"), i.tm.name);
7621 if (optimize)
7622 {
7623 i.seg[0] = NULL;
7624 i.prefix[SEG_PREFIX] = 0;
7625 }
7626 }
7627
7628 /* If a segment was explicitly specified, and the specified segment
7629 is neither the default nor the one already recorded from a prefix,
7630 use an opcode prefix to select it. If we never figured out what
7631 the default segment is, then default_seg will be zero at this
7632 point, and the specified segment prefix will always be used. */
7633 if (i.seg[0]
7634 && i.seg[0] != default_seg
7635 && i.seg[0]->seg_prefix != i.prefix[SEG_PREFIX])
7636 {
7637 if (!add_prefix (i.seg[0]->seg_prefix))
7638 return 0;
7639 }
7640 return 1;
7641 }
7642
7643 static const seg_entry *
7644 build_modrm_byte (void)
7645 {
7646 const seg_entry *default_seg = 0;
7647 unsigned int source, dest;
7648 int vex_3_sources;
7649
7650 vex_3_sources = i.tm.opcode_modifier.vexsources == VEX3SOURCES;
7651 if (vex_3_sources)
7652 {
7653 unsigned int nds, reg_slot;
7654 expressionS *exp;
7655
7656 dest = i.operands - 1;
7657 nds = dest - 1;
7658
7659 /* There are 2 kinds of instructions:
7660 1. 5 operands: 4 register operands or 3 register operands
7661 plus 1 memory operand plus one Imm4 operand, VexXDS, and
7662 VexW0 or VexW1. The destination must be either XMM, YMM or
7663 ZMM register.
7664 2. 4 operands: 4 register operands or 3 register operands
7665 plus 1 memory operand, with VexXDS. */
7666 gas_assert ((i.reg_operands == 4
7667 || (i.reg_operands == 3 && i.mem_operands == 1))
7668 && i.tm.opcode_modifier.vexvvvv == VEXXDS
7669 && i.tm.opcode_modifier.vexw
7670 && i.tm.operand_types[dest].bitfield.class == RegSIMD);
7671
7672 /* If VexW1 is set, the first non-immediate operand is the source and
7673 the second non-immediate one is encoded in the immediate operand. */
7674 if (i.tm.opcode_modifier.vexw == VEXW1)
7675 {
7676 source = i.imm_operands;
7677 reg_slot = i.imm_operands + 1;
7678 }
7679 else
7680 {
7681 source = i.imm_operands + 1;
7682 reg_slot = i.imm_operands;
7683 }
7684
7685 if (i.imm_operands == 0)
7686 {
7687 /* When there is no immediate operand, generate an 8bit
7688 immediate operand to encode the first operand. */
7689 exp = &im_expressions[i.imm_operands++];
7690 i.op[i.operands].imms = exp;
7691 i.types[i.operands] = imm8;
7692 i.operands++;
7693
7694 gas_assert (i.tm.operand_types[reg_slot].bitfield.class == RegSIMD);
7695 exp->X_op = O_constant;
7696 exp->X_add_number = register_number (i.op[reg_slot].regs) << 4;
7697 gas_assert ((i.op[reg_slot].regs->reg_flags & RegVRex) == 0);
7698 }
7699 else
7700 {
7701 gas_assert (i.imm_operands == 1);
7702 gas_assert (fits_in_imm4 (i.op[0].imms->X_add_number));
7703 gas_assert (!i.tm.opcode_modifier.immext);
7704
7705 /* Turn on Imm8 again so that output_imm will generate it. */
7706 i.types[0].bitfield.imm8 = 1;
7707
7708 gas_assert (i.tm.operand_types[reg_slot].bitfield.class == RegSIMD);
7709 i.op[0].imms->X_add_number
7710 |= register_number (i.op[reg_slot].regs) << 4;
7711 gas_assert ((i.op[reg_slot].regs->reg_flags & RegVRex) == 0);
7712 }
7713
7714 gas_assert (i.tm.operand_types[nds].bitfield.class == RegSIMD);
7715 i.vex.register_specifier = i.op[nds].regs;
7716 }
7717 else
7718 source = dest = 0;
7719
7720 /* i.reg_operands MUST be the number of real register operands;
7721 implicit registers do not count. If there are 3 register
7722 operands, it must be a instruction with VexNDS. For a
7723 instruction with VexNDD, the destination register is encoded
7724 in VEX prefix. If there are 4 register operands, it must be
7725 a instruction with VEX prefix and 3 sources. */
7726 if (i.mem_operands == 0
7727 && ((i.reg_operands == 2
7728 && i.tm.opcode_modifier.vexvvvv <= VEXXDS)
7729 || (i.reg_operands == 3
7730 && i.tm.opcode_modifier.vexvvvv == VEXXDS)
7731 || (i.reg_operands == 4 && vex_3_sources)))
7732 {
7733 switch (i.operands)
7734 {
7735 case 2:
7736 source = 0;
7737 break;
7738 case 3:
7739 /* When there are 3 operands, one of them may be immediate,
7740 which may be the first or the last operand. Otherwise,
7741 the first operand must be shift count register (cl) or it
7742 is an instruction with VexNDS. */
7743 gas_assert (i.imm_operands == 1
7744 || (i.imm_operands == 0
7745 && (i.tm.opcode_modifier.vexvvvv == VEXXDS
7746 || (i.types[0].bitfield.instance == RegC
7747 && i.types[0].bitfield.byte))));
7748 if (operand_type_check (i.types[0], imm)
7749 || (i.types[0].bitfield.instance == RegC
7750 && i.types[0].bitfield.byte))
7751 source = 1;
7752 else
7753 source = 0;
7754 break;
7755 case 4:
7756 /* When there are 4 operands, the first two must be 8bit
7757 immediate operands. The source operand will be the 3rd
7758 one.
7759
7760 For instructions with VexNDS, if the first operand
7761 an imm8, the source operand is the 2nd one. If the last
7762 operand is imm8, the source operand is the first one. */
7763 gas_assert ((i.imm_operands == 2
7764 && i.types[0].bitfield.imm8
7765 && i.types[1].bitfield.imm8)
7766 || (i.tm.opcode_modifier.vexvvvv == VEXXDS
7767 && i.imm_operands == 1
7768 && (i.types[0].bitfield.imm8
7769 || i.types[i.operands - 1].bitfield.imm8
7770 || i.rounding)));
7771 if (i.imm_operands == 2)
7772 source = 2;
7773 else
7774 {
7775 if (i.types[0].bitfield.imm8)
7776 source = 1;
7777 else
7778 source = 0;
7779 }
7780 break;
7781 case 5:
7782 if (is_evex_encoding (&i.tm))
7783 {
7784 /* For EVEX instructions, when there are 5 operands, the
7785 first one must be immediate operand. If the second one
7786 is immediate operand, the source operand is the 3th
7787 one. If the last one is immediate operand, the source
7788 operand is the 2nd one. */
7789 gas_assert (i.imm_operands == 2
7790 && i.tm.opcode_modifier.sae
7791 && operand_type_check (i.types[0], imm));
7792 if (operand_type_check (i.types[1], imm))
7793 source = 2;
7794 else if (operand_type_check (i.types[4], imm))
7795 source = 1;
7796 else
7797 abort ();
7798 }
7799 break;
7800 default:
7801 abort ();
7802 }
7803
7804 if (!vex_3_sources)
7805 {
7806 dest = source + 1;
7807
7808 /* RC/SAE operand could be between DEST and SRC. That happens
7809 when one operand is GPR and the other one is XMM/YMM/ZMM
7810 register. */
7811 if (i.rounding && i.rounding->operand == (int) dest)
7812 dest++;
7813
7814 if (i.tm.opcode_modifier.vexvvvv == VEXXDS)
7815 {
7816 /* For instructions with VexNDS, the register-only source
7817 operand must be a 32/64bit integer, XMM, YMM, ZMM, or mask
7818 register. It is encoded in VEX prefix. */
7819
7820 i386_operand_type op;
7821 unsigned int vvvv;
7822
7823 /* Check register-only source operand when two source
7824 operands are swapped. */
7825 if (!i.tm.operand_types[source].bitfield.baseindex
7826 && i.tm.operand_types[dest].bitfield.baseindex)
7827 {
7828 vvvv = source;
7829 source = dest;
7830 }
7831 else
7832 vvvv = dest;
7833
7834 op = i.tm.operand_types[vvvv];
7835 if ((dest + 1) >= i.operands
7836 || ((op.bitfield.class != Reg
7837 || (!op.bitfield.dword && !op.bitfield.qword))
7838 && op.bitfield.class != RegSIMD
7839 && !operand_type_equal (&op, &regmask)))
7840 abort ();
7841 i.vex.register_specifier = i.op[vvvv].regs;
7842 dest++;
7843 }
7844 }
7845
7846 i.rm.mode = 3;
7847 /* One of the register operands will be encoded in the i.rm.reg
7848 field, the other in the combined i.rm.mode and i.rm.regmem
7849 fields. If no form of this instruction supports a memory
7850 destination operand, then we assume the source operand may
7851 sometimes be a memory operand and so we need to store the
7852 destination in the i.rm.reg field. */
7853 if (!i.tm.opcode_modifier.regmem
7854 && operand_type_check (i.tm.operand_types[dest], anymem) == 0)
7855 {
7856 i.rm.reg = i.op[dest].regs->reg_num;
7857 i.rm.regmem = i.op[source].regs->reg_num;
7858 if (i.op[dest].regs->reg_type.bitfield.class == RegMMX
7859 || i.op[source].regs->reg_type.bitfield.class == RegMMX)
7860 i.has_regmmx = TRUE;
7861 else if (i.op[dest].regs->reg_type.bitfield.class == RegSIMD
7862 || i.op[source].regs->reg_type.bitfield.class == RegSIMD)
7863 {
7864 if (i.types[dest].bitfield.zmmword
7865 || i.types[source].bitfield.zmmword)
7866 i.has_regzmm = TRUE;
7867 else if (i.types[dest].bitfield.ymmword
7868 || i.types[source].bitfield.ymmword)
7869 i.has_regymm = TRUE;
7870 else
7871 i.has_regxmm = TRUE;
7872 }
7873 if ((i.op[dest].regs->reg_flags & RegRex) != 0)
7874 i.rex |= REX_R;
7875 if ((i.op[dest].regs->reg_flags & RegVRex) != 0)
7876 i.vrex |= REX_R;
7877 if ((i.op[source].regs->reg_flags & RegRex) != 0)
7878 i.rex |= REX_B;
7879 if ((i.op[source].regs->reg_flags & RegVRex) != 0)
7880 i.vrex |= REX_B;
7881 }
7882 else
7883 {
7884 i.rm.reg = i.op[source].regs->reg_num;
7885 i.rm.regmem = i.op[dest].regs->reg_num;
7886 if ((i.op[dest].regs->reg_flags & RegRex) != 0)
7887 i.rex |= REX_B;
7888 if ((i.op[dest].regs->reg_flags & RegVRex) != 0)
7889 i.vrex |= REX_B;
7890 if ((i.op[source].regs->reg_flags & RegRex) != 0)
7891 i.rex |= REX_R;
7892 if ((i.op[source].regs->reg_flags & RegVRex) != 0)
7893 i.vrex |= REX_R;
7894 }
7895 if (flag_code != CODE_64BIT && (i.rex & REX_R))
7896 {
7897 if (i.types[!i.tm.opcode_modifier.regmem].bitfield.class != RegCR)
7898 abort ();
7899 i.rex &= ~REX_R;
7900 add_prefix (LOCK_PREFIX_OPCODE);
7901 }
7902 }
7903 else
7904 { /* If it's not 2 reg operands... */
7905 unsigned int mem;
7906
7907 if (i.mem_operands)
7908 {
7909 unsigned int fake_zero_displacement = 0;
7910 unsigned int op;
7911
7912 for (op = 0; op < i.operands; op++)
7913 if (i.flags[op] & Operand_Mem)
7914 break;
7915 gas_assert (op < i.operands);
7916
7917 if (i.tm.opcode_modifier.vecsib)
7918 {
7919 if (i.index_reg->reg_num == RegIZ)
7920 abort ();
7921
7922 i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
7923 if (!i.base_reg)
7924 {
7925 i.sib.base = NO_BASE_REGISTER;
7926 i.sib.scale = i.log2_scale_factor;
7927 i.types[op].bitfield.disp8 = 0;
7928 i.types[op].bitfield.disp16 = 0;
7929 i.types[op].bitfield.disp64 = 0;
7930 if (flag_code != CODE_64BIT || i.prefix[ADDR_PREFIX])
7931 {
7932 /* Must be 32 bit */
7933 i.types[op].bitfield.disp32 = 1;
7934 i.types[op].bitfield.disp32s = 0;
7935 }
7936 else
7937 {
7938 i.types[op].bitfield.disp32 = 0;
7939 i.types[op].bitfield.disp32s = 1;
7940 }
7941 }
7942 i.sib.index = i.index_reg->reg_num;
7943 if ((i.index_reg->reg_flags & RegRex) != 0)
7944 i.rex |= REX_X;
7945 if ((i.index_reg->reg_flags & RegVRex) != 0)
7946 i.vrex |= REX_X;
7947 }
7948
7949 default_seg = &ds;
7950
7951 if (i.base_reg == 0)
7952 {
7953 i.rm.mode = 0;
7954 if (!i.disp_operands)
7955 fake_zero_displacement = 1;
7956 if (i.index_reg == 0)
7957 {
7958 i386_operand_type newdisp;
7959
7960 gas_assert (!i.tm.opcode_modifier.vecsib);
7961 /* Operand is just <disp> */
7962 if (flag_code == CODE_64BIT)
7963 {
7964 /* 64bit mode overwrites the 32bit absolute
7965 addressing by RIP relative addressing and
7966 absolute addressing is encoded by one of the
7967 redundant SIB forms. */
7968 i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
7969 i.sib.base = NO_BASE_REGISTER;
7970 i.sib.index = NO_INDEX_REGISTER;
7971 newdisp = (!i.prefix[ADDR_PREFIX] ? disp32s : disp32);
7972 }
7973 else if ((flag_code == CODE_16BIT)
7974 ^ (i.prefix[ADDR_PREFIX] != 0))
7975 {
7976 i.rm.regmem = NO_BASE_REGISTER_16;
7977 newdisp = disp16;
7978 }
7979 else
7980 {
7981 i.rm.regmem = NO_BASE_REGISTER;
7982 newdisp = disp32;
7983 }
7984 i.types[op] = operand_type_and_not (i.types[op], anydisp);
7985 i.types[op] = operand_type_or (i.types[op], newdisp);
7986 }
7987 else if (!i.tm.opcode_modifier.vecsib)
7988 {
7989 /* !i.base_reg && i.index_reg */
7990 if (i.index_reg->reg_num == RegIZ)
7991 i.sib.index = NO_INDEX_REGISTER;
7992 else
7993 i.sib.index = i.index_reg->reg_num;
7994 i.sib.base = NO_BASE_REGISTER;
7995 i.sib.scale = i.log2_scale_factor;
7996 i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
7997 i.types[op].bitfield.disp8 = 0;
7998 i.types[op].bitfield.disp16 = 0;
7999 i.types[op].bitfield.disp64 = 0;
8000 if (flag_code != CODE_64BIT || i.prefix[ADDR_PREFIX])
8001 {
8002 /* Must be 32 bit */
8003 i.types[op].bitfield.disp32 = 1;
8004 i.types[op].bitfield.disp32s = 0;
8005 }
8006 else
8007 {
8008 i.types[op].bitfield.disp32 = 0;
8009 i.types[op].bitfield.disp32s = 1;
8010 }
8011 if ((i.index_reg->reg_flags & RegRex) != 0)
8012 i.rex |= REX_X;
8013 }
8014 }
8015 /* RIP addressing for 64bit mode. */
8016 else if (i.base_reg->reg_num == RegIP)
8017 {
8018 gas_assert (!i.tm.opcode_modifier.vecsib);
8019 i.rm.regmem = NO_BASE_REGISTER;
8020 i.types[op].bitfield.disp8 = 0;
8021 i.types[op].bitfield.disp16 = 0;
8022 i.types[op].bitfield.disp32 = 0;
8023 i.types[op].bitfield.disp32s = 1;
8024 i.types[op].bitfield.disp64 = 0;
8025 i.flags[op] |= Operand_PCrel;
8026 if (! i.disp_operands)
8027 fake_zero_displacement = 1;
8028 }
8029 else if (i.base_reg->reg_type.bitfield.word)
8030 {
8031 gas_assert (!i.tm.opcode_modifier.vecsib);
8032 switch (i.base_reg->reg_num)
8033 {
8034 case 3: /* (%bx) */
8035 if (i.index_reg == 0)
8036 i.rm.regmem = 7;
8037 else /* (%bx,%si) -> 0, or (%bx,%di) -> 1 */
8038 i.rm.regmem = i.index_reg->reg_num - 6;
8039 break;
8040 case 5: /* (%bp) */
8041 default_seg = &ss;
8042 if (i.index_reg == 0)
8043 {
8044 i.rm.regmem = 6;
8045 if (operand_type_check (i.types[op], disp) == 0)
8046 {
8047 /* fake (%bp) into 0(%bp) */
8048 i.types[op].bitfield.disp8 = 1;
8049 fake_zero_displacement = 1;
8050 }
8051 }
8052 else /* (%bp,%si) -> 2, or (%bp,%di) -> 3 */
8053 i.rm.regmem = i.index_reg->reg_num - 6 + 2;
8054 break;
8055 default: /* (%si) -> 4 or (%di) -> 5 */
8056 i.rm.regmem = i.base_reg->reg_num - 6 + 4;
8057 }
8058 i.rm.mode = mode_from_disp_size (i.types[op]);
8059 }
8060 else /* i.base_reg and 32/64 bit mode */
8061 {
8062 if (flag_code == CODE_64BIT
8063 && operand_type_check (i.types[op], disp))
8064 {
8065 i.types[op].bitfield.disp16 = 0;
8066 i.types[op].bitfield.disp64 = 0;
8067 if (i.prefix[ADDR_PREFIX] == 0)
8068 {
8069 i.types[op].bitfield.disp32 = 0;
8070 i.types[op].bitfield.disp32s = 1;
8071 }
8072 else
8073 {
8074 i.types[op].bitfield.disp32 = 1;
8075 i.types[op].bitfield.disp32s = 0;
8076 }
8077 }
8078
8079 if (!i.tm.opcode_modifier.vecsib)
8080 i.rm.regmem = i.base_reg->reg_num;
8081 if ((i.base_reg->reg_flags & RegRex) != 0)
8082 i.rex |= REX_B;
8083 i.sib.base = i.base_reg->reg_num;
8084 /* x86-64 ignores REX prefix bit here to avoid decoder
8085 complications. */
8086 if (!(i.base_reg->reg_flags & RegRex)
8087 && (i.base_reg->reg_num == EBP_REG_NUM
8088 || i.base_reg->reg_num == ESP_REG_NUM))
8089 default_seg = &ss;
8090 if (i.base_reg->reg_num == 5 && i.disp_operands == 0)
8091 {
8092 fake_zero_displacement = 1;
8093 i.types[op].bitfield.disp8 = 1;
8094 }
8095 i.sib.scale = i.log2_scale_factor;
8096 if (i.index_reg == 0)
8097 {
8098 gas_assert (!i.tm.opcode_modifier.vecsib);
8099 /* <disp>(%esp) becomes two byte modrm with no index
8100 register. We've already stored the code for esp
8101 in i.rm.regmem ie. ESCAPE_TO_TWO_BYTE_ADDRESSING.
8102 Any base register besides %esp will not use the
8103 extra modrm byte. */
8104 i.sib.index = NO_INDEX_REGISTER;
8105 }
8106 else if (!i.tm.opcode_modifier.vecsib)
8107 {
8108 if (i.index_reg->reg_num == RegIZ)
8109 i.sib.index = NO_INDEX_REGISTER;
8110 else
8111 i.sib.index = i.index_reg->reg_num;
8112 i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
8113 if ((i.index_reg->reg_flags & RegRex) != 0)
8114 i.rex |= REX_X;
8115 }
8116
8117 if (i.disp_operands
8118 && (i.reloc[op] == BFD_RELOC_386_TLS_DESC_CALL
8119 || i.reloc[op] == BFD_RELOC_X86_64_TLSDESC_CALL))
8120 i.rm.mode = 0;
8121 else
8122 {
8123 if (!fake_zero_displacement
8124 && !i.disp_operands
8125 && i.disp_encoding)
8126 {
8127 fake_zero_displacement = 1;
8128 if (i.disp_encoding == disp_encoding_8bit)
8129 i.types[op].bitfield.disp8 = 1;
8130 else
8131 i.types[op].bitfield.disp32 = 1;
8132 }
8133 i.rm.mode = mode_from_disp_size (i.types[op]);
8134 }
8135 }
8136
8137 if (fake_zero_displacement)
8138 {
8139 /* Fakes a zero displacement assuming that i.types[op]
8140 holds the correct displacement size. */
8141 expressionS *exp;
8142
8143 gas_assert (i.op[op].disps == 0);
8144 exp = &disp_expressions[i.disp_operands++];
8145 i.op[op].disps = exp;
8146 exp->X_op = O_constant;
8147 exp->X_add_number = 0;
8148 exp->X_add_symbol = (symbolS *) 0;
8149 exp->X_op_symbol = (symbolS *) 0;
8150 }
8151
8152 mem = op;
8153 }
8154 else
8155 mem = ~0;
8156
8157 if (i.tm.opcode_modifier.vexsources == XOP2SOURCES)
8158 {
8159 if (operand_type_check (i.types[0], imm))
8160 i.vex.register_specifier = NULL;
8161 else
8162 {
8163 /* VEX.vvvv encodes one of the sources when the first
8164 operand is not an immediate. */
8165 if (i.tm.opcode_modifier.vexw == VEXW0)
8166 i.vex.register_specifier = i.op[0].regs;
8167 else
8168 i.vex.register_specifier = i.op[1].regs;
8169 }
8170
8171 /* Destination is a XMM register encoded in the ModRM.reg
8172 and VEX.R bit. */
8173 i.rm.reg = i.op[2].regs->reg_num;
8174 if ((i.op[2].regs->reg_flags & RegRex) != 0)
8175 i.rex |= REX_R;
8176
8177 /* ModRM.rm and VEX.B encodes the other source. */
8178 if (!i.mem_operands)
8179 {
8180 i.rm.mode = 3;
8181
8182 if (i.tm.opcode_modifier.vexw == VEXW0)
8183 i.rm.regmem = i.op[1].regs->reg_num;
8184 else
8185 i.rm.regmem = i.op[0].regs->reg_num;
8186
8187 if ((i.op[1].regs->reg_flags & RegRex) != 0)
8188 i.rex |= REX_B;
8189 }
8190 }
8191 else if (i.tm.opcode_modifier.vexvvvv == VEXLWP)
8192 {
8193 i.vex.register_specifier = i.op[2].regs;
8194 if (!i.mem_operands)
8195 {
8196 i.rm.mode = 3;
8197 i.rm.regmem = i.op[1].regs->reg_num;
8198 if ((i.op[1].regs->reg_flags & RegRex) != 0)
8199 i.rex |= REX_B;
8200 }
8201 }
8202 /* Fill in i.rm.reg or i.rm.regmem field with register operand
8203 (if any) based on i.tm.extension_opcode. Again, we must be
8204 careful to make sure that segment/control/debug/test/MMX
8205 registers are coded into the i.rm.reg field. */
8206 else if (i.reg_operands)
8207 {
8208 unsigned int op;
8209 unsigned int vex_reg = ~0;
8210
8211 for (op = 0; op < i.operands; op++)
8212 {
8213 if (i.types[op].bitfield.class == Reg
8214 || i.types[op].bitfield.class == RegBND
8215 || i.types[op].bitfield.class == RegMask
8216 || i.types[op].bitfield.class == SReg
8217 || i.types[op].bitfield.class == RegCR
8218 || i.types[op].bitfield.class == RegDR
8219 || i.types[op].bitfield.class == RegTR)
8220 break;
8221 if (i.types[op].bitfield.class == RegSIMD)
8222 {
8223 if (i.types[op].bitfield.zmmword)
8224 i.has_regzmm = TRUE;
8225 else if (i.types[op].bitfield.ymmword)
8226 i.has_regymm = TRUE;
8227 else
8228 i.has_regxmm = TRUE;
8229 break;
8230 }
8231 if (i.types[op].bitfield.class == RegMMX)
8232 {
8233 i.has_regmmx = TRUE;
8234 break;
8235 }
8236 }
8237
8238 if (vex_3_sources)
8239 op = dest;
8240 else if (i.tm.opcode_modifier.vexvvvv == VEXXDS)
8241 {
8242 /* For instructions with VexNDS, the register-only
8243 source operand is encoded in VEX prefix. */
8244 gas_assert (mem != (unsigned int) ~0);
8245
8246 if (op > mem)
8247 {
8248 vex_reg = op++;
8249 gas_assert (op < i.operands);
8250 }
8251 else
8252 {
8253 /* Check register-only source operand when two source
8254 operands are swapped. */
8255 if (!i.tm.operand_types[op].bitfield.baseindex
8256 && i.tm.operand_types[op + 1].bitfield.baseindex)
8257 {
8258 vex_reg = op;
8259 op += 2;
8260 gas_assert (mem == (vex_reg + 1)
8261 && op < i.operands);
8262 }
8263 else
8264 {
8265 vex_reg = op + 1;
8266 gas_assert (vex_reg < i.operands);
8267 }
8268 }
8269 }
8270 else if (i.tm.opcode_modifier.vexvvvv == VEXNDD)
8271 {
8272 /* For instructions with VexNDD, the register destination
8273 is encoded in VEX prefix. */
8274 if (i.mem_operands == 0)
8275 {
8276 /* There is no memory operand. */
8277 gas_assert ((op + 2) == i.operands);
8278 vex_reg = op + 1;
8279 }
8280 else
8281 {
8282 /* There are only 2 non-immediate operands. */
8283 gas_assert (op < i.imm_operands + 2
8284 && i.operands == i.imm_operands + 2);
8285 vex_reg = i.imm_operands + 1;
8286 }
8287 }
8288 else
8289 gas_assert (op < i.operands);
8290
8291 if (vex_reg != (unsigned int) ~0)
8292 {
8293 i386_operand_type *type = &i.tm.operand_types[vex_reg];
8294
8295 if ((type->bitfield.class != Reg
8296 || (!type->bitfield.dword && !type->bitfield.qword))
8297 && type->bitfield.class != RegSIMD
8298 && !operand_type_equal (type, &regmask))
8299 abort ();
8300
8301 i.vex.register_specifier = i.op[vex_reg].regs;
8302 }
8303
8304 /* Don't set OP operand twice. */
8305 if (vex_reg != op)
8306 {
8307 /* If there is an extension opcode to put here, the
8308 register number must be put into the regmem field. */
8309 if (i.tm.extension_opcode != None)
8310 {
8311 i.rm.regmem = i.op[op].regs->reg_num;
8312 if ((i.op[op].regs->reg_flags & RegRex) != 0)
8313 i.rex |= REX_B;
8314 if ((i.op[op].regs->reg_flags & RegVRex) != 0)
8315 i.vrex |= REX_B;
8316 }
8317 else
8318 {
8319 i.rm.reg = i.op[op].regs->reg_num;
8320 if ((i.op[op].regs->reg_flags & RegRex) != 0)
8321 i.rex |= REX_R;
8322 if ((i.op[op].regs->reg_flags & RegVRex) != 0)
8323 i.vrex |= REX_R;
8324 }
8325 }
8326
8327 /* Now, if no memory operand has set i.rm.mode = 0, 1, 2 we
8328 must set it to 3 to indicate this is a register operand
8329 in the regmem field. */
8330 if (!i.mem_operands)
8331 i.rm.mode = 3;
8332 }
8333
8334 /* Fill in i.rm.reg field with extension opcode (if any). */
8335 if (i.tm.extension_opcode != None)
8336 i.rm.reg = i.tm.extension_opcode;
8337 }
8338 return default_seg;
8339 }
8340
8341 static unsigned int
8342 flip_code16 (unsigned int code16)
8343 {
8344 gas_assert (i.tm.operands == 1);
8345
8346 return !(i.prefix[REX_PREFIX] & REX_W)
8347 && (code16 ? i.tm.operand_types[0].bitfield.disp32
8348 || i.tm.operand_types[0].bitfield.disp32s
8349 : i.tm.operand_types[0].bitfield.disp16)
8350 ? CODE16 : 0;
8351 }
8352
8353 static void
8354 output_branch (void)
8355 {
8356 char *p;
8357 int size;
8358 int code16;
8359 int prefix;
8360 relax_substateT subtype;
8361 symbolS *sym;
8362 offsetT off;
8363
8364 code16 = flag_code == CODE_16BIT ? CODE16 : 0;
8365 size = i.disp_encoding == disp_encoding_32bit ? BIG : SMALL;
8366
8367 prefix = 0;
8368 if (i.prefix[DATA_PREFIX] != 0)
8369 {
8370 prefix = 1;
8371 i.prefixes -= 1;
8372 code16 ^= flip_code16(code16);
8373 }
8374 /* Pentium4 branch hints. */
8375 if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE /* not taken */
8376 || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE /* taken */)
8377 {
8378 prefix++;
8379 i.prefixes--;
8380 }
8381 if (i.prefix[REX_PREFIX] != 0)
8382 {
8383 prefix++;
8384 i.prefixes--;
8385 }
8386
8387 /* BND prefixed jump. */
8388 if (i.prefix[BND_PREFIX] != 0)
8389 {
8390 prefix++;
8391 i.prefixes--;
8392 }
8393
8394 if (i.prefixes != 0)
8395 as_warn (_("skipping prefixes on `%s'"), i.tm.name);
8396
8397 /* It's always a symbol; End frag & setup for relax.
8398 Make sure there is enough room in this frag for the largest
8399 instruction we may generate in md_convert_frag. This is 2
8400 bytes for the opcode and room for the prefix and largest
8401 displacement. */
8402 frag_grow (prefix + 2 + 4);
8403 /* Prefix and 1 opcode byte go in fr_fix. */
8404 p = frag_more (prefix + 1);
8405 if (i.prefix[DATA_PREFIX] != 0)
8406 *p++ = DATA_PREFIX_OPCODE;
8407 if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE
8408 || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE)
8409 *p++ = i.prefix[SEG_PREFIX];
8410 if (i.prefix[BND_PREFIX] != 0)
8411 *p++ = BND_PREFIX_OPCODE;
8412 if (i.prefix[REX_PREFIX] != 0)
8413 *p++ = i.prefix[REX_PREFIX];
8414 *p = i.tm.base_opcode;
8415
8416 if ((unsigned char) *p == JUMP_PC_RELATIVE)
8417 subtype = ENCODE_RELAX_STATE (UNCOND_JUMP, size);
8418 else if (cpu_arch_flags.bitfield.cpui386)
8419 subtype = ENCODE_RELAX_STATE (COND_JUMP, size);
8420 else
8421 subtype = ENCODE_RELAX_STATE (COND_JUMP86, size);
8422 subtype |= code16;
8423
8424 sym = i.op[0].disps->X_add_symbol;
8425 off = i.op[0].disps->X_add_number;
8426
8427 if (i.op[0].disps->X_op != O_constant
8428 && i.op[0].disps->X_op != O_symbol)
8429 {
8430 /* Handle complex expressions. */
8431 sym = make_expr_symbol (i.op[0].disps);
8432 off = 0;
8433 }
8434
8435 /* 1 possible extra opcode + 4 byte displacement go in var part.
8436 Pass reloc in fr_var. */
8437 frag_var (rs_machine_dependent, 5, i.reloc[0], subtype, sym, off, p);
8438 }
8439
8440 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8441 /* Return TRUE iff PLT32 relocation should be used for branching to
8442 symbol S. */
8443
8444 static bfd_boolean
8445 need_plt32_p (symbolS *s)
8446 {
8447 /* PLT32 relocation is ELF only. */
8448 if (!IS_ELF)
8449 return FALSE;
8450
8451 #ifdef TE_SOLARIS
8452 /* Don't emit PLT32 relocation on Solaris: neither native linker nor
8453 krtld support it. */
8454 return FALSE;
8455 #endif
8456
8457 /* Since there is no need to prepare for PLT branch on x86-64, we
8458 can generate R_X86_64_PLT32, instead of R_X86_64_PC32, which can
8459 be used as a marker for 32-bit PC-relative branches. */
8460 if (!object_64bit)
8461 return FALSE;
8462
8463 /* Weak or undefined symbol need PLT32 relocation. */
8464 if (S_IS_WEAK (s) || !S_IS_DEFINED (s))
8465 return TRUE;
8466
8467 /* Non-global symbol doesn't need PLT32 relocation. */
8468 if (! S_IS_EXTERNAL (s))
8469 return FALSE;
8470
8471 /* Other global symbols need PLT32 relocation. NB: Symbol with
8472 non-default visibilities are treated as normal global symbol
8473 so that PLT32 relocation can be used as a marker for 32-bit
8474 PC-relative branches. It is useful for linker relaxation. */
8475 return TRUE;
8476 }
8477 #endif
8478
8479 static void
8480 output_jump (void)
8481 {
8482 char *p;
8483 int size;
8484 fixS *fixP;
8485 bfd_reloc_code_real_type jump_reloc = i.reloc[0];
8486
8487 if (i.tm.opcode_modifier.jump == JUMP_BYTE)
8488 {
8489 /* This is a loop or jecxz type instruction. */
8490 size = 1;
8491 if (i.prefix[ADDR_PREFIX] != 0)
8492 {
8493 FRAG_APPEND_1_CHAR (ADDR_PREFIX_OPCODE);
8494 i.prefixes -= 1;
8495 }
8496 /* Pentium4 branch hints. */
8497 if (i.prefix[SEG_PREFIX] == CS_PREFIX_OPCODE /* not taken */
8498 || i.prefix[SEG_PREFIX] == DS_PREFIX_OPCODE /* taken */)
8499 {
8500 FRAG_APPEND_1_CHAR (i.prefix[SEG_PREFIX]);
8501 i.prefixes--;
8502 }
8503 }
8504 else
8505 {
8506 int code16;
8507
8508 code16 = 0;
8509 if (flag_code == CODE_16BIT)
8510 code16 = CODE16;
8511
8512 if (i.prefix[DATA_PREFIX] != 0)
8513 {
8514 FRAG_APPEND_1_CHAR (DATA_PREFIX_OPCODE);
8515 i.prefixes -= 1;
8516 code16 ^= flip_code16(code16);
8517 }
8518
8519 size = 4;
8520 if (code16)
8521 size = 2;
8522 }
8523
8524 /* BND prefixed jump. */
8525 if (i.prefix[BND_PREFIX] != 0)
8526 {
8527 FRAG_APPEND_1_CHAR (i.prefix[BND_PREFIX]);
8528 i.prefixes -= 1;
8529 }
8530
8531 if (i.prefix[REX_PREFIX] != 0)
8532 {
8533 FRAG_APPEND_1_CHAR (i.prefix[REX_PREFIX]);
8534 i.prefixes -= 1;
8535 }
8536
8537 if (i.prefixes != 0)
8538 as_warn (_("skipping prefixes on `%s'"), i.tm.name);
8539
8540 p = frag_more (i.tm.opcode_length + size);
8541 switch (i.tm.opcode_length)
8542 {
8543 case 2:
8544 *p++ = i.tm.base_opcode >> 8;
8545 /* Fall through. */
8546 case 1:
8547 *p++ = i.tm.base_opcode;
8548 break;
8549 default:
8550 abort ();
8551 }
8552
8553 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8554 if (size == 4
8555 && jump_reloc == NO_RELOC
8556 && need_plt32_p (i.op[0].disps->X_add_symbol))
8557 jump_reloc = BFD_RELOC_X86_64_PLT32;
8558 #endif
8559
8560 jump_reloc = reloc (size, 1, 1, jump_reloc);
8561
8562 fixP = fix_new_exp (frag_now, p - frag_now->fr_literal, size,
8563 i.op[0].disps, 1, jump_reloc);
8564
8565 /* All jumps handled here are signed, but don't use a signed limit
8566 check for 32 and 16 bit jumps as we want to allow wrap around at
8567 4G and 64k respectively. */
8568 if (size == 1)
8569 fixP->fx_signed = 1;
8570 }
8571
8572 static void
8573 output_interseg_jump (void)
8574 {
8575 char *p;
8576 int size;
8577 int prefix;
8578 int code16;
8579
8580 code16 = 0;
8581 if (flag_code == CODE_16BIT)
8582 code16 = CODE16;
8583
8584 prefix = 0;
8585 if (i.prefix[DATA_PREFIX] != 0)
8586 {
8587 prefix = 1;
8588 i.prefixes -= 1;
8589 code16 ^= CODE16;
8590 }
8591
8592 gas_assert (!i.prefix[REX_PREFIX]);
8593
8594 size = 4;
8595 if (code16)
8596 size = 2;
8597
8598 if (i.prefixes != 0)
8599 as_warn (_("skipping prefixes on `%s'"), i.tm.name);
8600
8601 /* 1 opcode; 2 segment; offset */
8602 p = frag_more (prefix + 1 + 2 + size);
8603
8604 if (i.prefix[DATA_PREFIX] != 0)
8605 *p++ = DATA_PREFIX_OPCODE;
8606
8607 if (i.prefix[REX_PREFIX] != 0)
8608 *p++ = i.prefix[REX_PREFIX];
8609
8610 *p++ = i.tm.base_opcode;
8611 if (i.op[1].imms->X_op == O_constant)
8612 {
8613 offsetT n = i.op[1].imms->X_add_number;
8614
8615 if (size == 2
8616 && !fits_in_unsigned_word (n)
8617 && !fits_in_signed_word (n))
8618 {
8619 as_bad (_("16-bit jump out of range"));
8620 return;
8621 }
8622 md_number_to_chars (p, n, size);
8623 }
8624 else
8625 fix_new_exp (frag_now, p - frag_now->fr_literal, size,
8626 i.op[1].imms, 0, reloc (size, 0, 0, i.reloc[1]));
8627 if (i.op[0].imms->X_op != O_constant)
8628 as_bad (_("can't handle non absolute segment in `%s'"),
8629 i.tm.name);
8630 md_number_to_chars (p + size, (valueT) i.op[0].imms->X_add_number, 2);
8631 }
8632
8633 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
8634 void
8635 x86_cleanup (void)
8636 {
8637 char *p;
8638 asection *seg = now_seg;
8639 subsegT subseg = now_subseg;
8640 asection *sec;
8641 unsigned int alignment, align_size_1;
8642 unsigned int isa_1_descsz, feature_2_descsz, descsz;
8643 unsigned int isa_1_descsz_raw, feature_2_descsz_raw;
8644 unsigned int padding;
8645
8646 if (!IS_ELF || !x86_used_note)
8647 return;
8648
8649 x86_feature_2_used |= GNU_PROPERTY_X86_FEATURE_2_X86;
8650
8651 /* The .note.gnu.property section layout:
8652
8653 Field Length Contents
8654 ---- ---- ----
8655 n_namsz 4 4
8656 n_descsz 4 The note descriptor size
8657 n_type 4 NT_GNU_PROPERTY_TYPE_0
8658 n_name 4 "GNU"
8659 n_desc n_descsz The program property array
8660 .... .... ....
8661 */
8662
8663 /* Create the .note.gnu.property section. */
8664 sec = subseg_new (NOTE_GNU_PROPERTY_SECTION_NAME, 0);
8665 bfd_set_section_flags (sec,
8666 (SEC_ALLOC
8667 | SEC_LOAD
8668 | SEC_DATA
8669 | SEC_HAS_CONTENTS
8670 | SEC_READONLY));
8671
8672 if (get_elf_backend_data (stdoutput)->s->elfclass == ELFCLASS64)
8673 {
8674 align_size_1 = 7;
8675 alignment = 3;
8676 }
8677 else
8678 {
8679 align_size_1 = 3;
8680 alignment = 2;
8681 }
8682
8683 bfd_set_section_alignment (sec, alignment);
8684 elf_section_type (sec) = SHT_NOTE;
8685
8686 /* GNU_PROPERTY_X86_ISA_1_USED: 4-byte type + 4-byte data size
8687 + 4-byte data */
8688 isa_1_descsz_raw = 4 + 4 + 4;
8689 /* Align GNU_PROPERTY_X86_ISA_1_USED. */
8690 isa_1_descsz = (isa_1_descsz_raw + align_size_1) & ~align_size_1;
8691
8692 feature_2_descsz_raw = isa_1_descsz;
8693 /* GNU_PROPERTY_X86_FEATURE_2_USED: 4-byte type + 4-byte data size
8694 + 4-byte data */
8695 feature_2_descsz_raw += 4 + 4 + 4;
8696 /* Align GNU_PROPERTY_X86_FEATURE_2_USED. */
8697 feature_2_descsz = ((feature_2_descsz_raw + align_size_1)
8698 & ~align_size_1);
8699
8700 descsz = feature_2_descsz;
8701 /* Section size: n_namsz + n_descsz + n_type + n_name + n_descsz. */
8702 p = frag_more (4 + 4 + 4 + 4 + descsz);
8703
8704 /* Write n_namsz. */
8705 md_number_to_chars (p, (valueT) 4, 4);
8706
8707 /* Write n_descsz. */
8708 md_number_to_chars (p + 4, (valueT) descsz, 4);
8709
8710 /* Write n_type. */
8711 md_number_to_chars (p + 4 * 2, (valueT) NT_GNU_PROPERTY_TYPE_0, 4);
8712
8713 /* Write n_name. */
8714 memcpy (p + 4 * 3, "GNU", 4);
8715
8716 /* Write 4-byte type. */
8717 md_number_to_chars (p + 4 * 4,
8718 (valueT) GNU_PROPERTY_X86_ISA_1_USED, 4);
8719
8720 /* Write 4-byte data size. */
8721 md_number_to_chars (p + 4 * 5, (valueT) 4, 4);
8722
8723 /* Write 4-byte data. */
8724 md_number_to_chars (p + 4 * 6, (valueT) x86_isa_1_used, 4);
8725
8726 /* Zero out paddings. */
8727 padding = isa_1_descsz - isa_1_descsz_raw;
8728 if (padding)
8729 memset (p + 4 * 7, 0, padding);
8730
8731 /* Write 4-byte type. */
8732 md_number_to_chars (p + isa_1_descsz + 4 * 4,
8733 (valueT) GNU_PROPERTY_X86_FEATURE_2_USED, 4);
8734
8735 /* Write 4-byte data size. */
8736 md_number_to_chars (p + isa_1_descsz + 4 * 5, (valueT) 4, 4);
8737
8738 /* Write 4-byte data. */
8739 md_number_to_chars (p + isa_1_descsz + 4 * 6,
8740 (valueT) x86_feature_2_used, 4);
8741
8742 /* Zero out paddings. */
8743 padding = feature_2_descsz - feature_2_descsz_raw;
8744 if (padding)
8745 memset (p + isa_1_descsz + 4 * 7, 0, padding);
8746
8747 /* We probably can't restore the current segment, for there likely
8748 isn't one yet... */
8749 if (seg && subseg)
8750 subseg_set (seg, subseg);
8751 }
8752 #endif
8753
8754 static unsigned int
8755 encoding_length (const fragS *start_frag, offsetT start_off,
8756 const char *frag_now_ptr)
8757 {
8758 unsigned int len = 0;
8759
8760 if (start_frag != frag_now)
8761 {
8762 const fragS *fr = start_frag;
8763
8764 do {
8765 len += fr->fr_fix;
8766 fr = fr->fr_next;
8767 } while (fr && fr != frag_now);
8768 }
8769
8770 return len - start_off + (frag_now_ptr - frag_now->fr_literal);
8771 }
8772
8773 /* Return 1 for test, and, cmp, add, sub, inc and dec which may
8774 be macro-fused with conditional jumps.
8775 NB: If TEST/AND/CMP/ADD/SUB/INC/DEC is of RIP relative address,
8776 or is one of the following format:
8777
8778 cmp m, imm
8779 add m, imm
8780 sub m, imm
8781 test m, imm
8782 and m, imm
8783 inc m
8784 dec m
8785
8786 it is unfusible. */
8787
8788 static int
8789 maybe_fused_with_jcc_p (enum mf_cmp_kind* mf_cmp_p)
8790 {
8791 /* No RIP address. */
8792 if (i.base_reg && i.base_reg->reg_num == RegIP)
8793 return 0;
8794
8795 /* No VEX/EVEX encoding. */
8796 if (is_any_vex_encoding (&i.tm))
8797 return 0;
8798
8799 /* add, sub without add/sub m, imm. */
8800 if (i.tm.base_opcode <= 5
8801 || (i.tm.base_opcode >= 0x28 && i.tm.base_opcode <= 0x2d)
8802 || ((i.tm.base_opcode | 3) == 0x83
8803 && (i.tm.extension_opcode == 0x5
8804 || i.tm.extension_opcode == 0x0)))
8805 {
8806 *mf_cmp_p = mf_cmp_alu_cmp;
8807 return !(i.mem_operands && i.imm_operands);
8808 }
8809
8810 /* and without and m, imm. */
8811 if ((i.tm.base_opcode >= 0x20 && i.tm.base_opcode <= 0x25)
8812 || ((i.tm.base_opcode | 3) == 0x83
8813 && i.tm.extension_opcode == 0x4))
8814 {
8815 *mf_cmp_p = mf_cmp_test_and;
8816 return !(i.mem_operands && i.imm_operands);
8817 }
8818
8819 /* test without test m imm. */
8820 if ((i.tm.base_opcode | 1) == 0x85
8821 || (i.tm.base_opcode | 1) == 0xa9
8822 || ((i.tm.base_opcode | 1) == 0xf7
8823 && i.tm.extension_opcode == 0))
8824 {
8825 *mf_cmp_p = mf_cmp_test_and;
8826 return !(i.mem_operands && i.imm_operands);
8827 }
8828
8829 /* cmp without cmp m, imm. */
8830 if ((i.tm.base_opcode >= 0x38 && i.tm.base_opcode <= 0x3d)
8831 || ((i.tm.base_opcode | 3) == 0x83
8832 && (i.tm.extension_opcode == 0x7)))
8833 {
8834 *mf_cmp_p = mf_cmp_alu_cmp;
8835 return !(i.mem_operands && i.imm_operands);
8836 }
8837
8838 /* inc, dec without inc/dec m. */
8839 if ((i.tm.cpu_flags.bitfield.cpuno64
8840 && (i.tm.base_opcode | 0xf) == 0x4f)
8841 || ((i.tm.base_opcode | 1) == 0xff
8842 && i.tm.extension_opcode <= 0x1))
8843 {
8844 *mf_cmp_p = mf_cmp_incdec;
8845 return !i.mem_operands;
8846 }
8847
8848 return 0;
8849 }
8850
8851 /* Return 1 if a FUSED_JCC_PADDING frag should be generated. */
8852
8853 static int
8854 add_fused_jcc_padding_frag_p (enum mf_cmp_kind* mf_cmp_p)
8855 {
8856 /* NB: Don't work with COND_JUMP86 without i386. */
8857 if (!align_branch_power
8858 || now_seg == absolute_section
8859 || !cpu_arch_flags.bitfield.cpui386
8860 || !(align_branch & align_branch_fused_bit))
8861 return 0;
8862
8863 if (maybe_fused_with_jcc_p (mf_cmp_p))
8864 {
8865 if (last_insn.kind == last_insn_other
8866 || last_insn.seg != now_seg)
8867 return 1;
8868 if (flag_debug)
8869 as_warn_where (last_insn.file, last_insn.line,
8870 _("`%s` skips -malign-branch-boundary on `%s`"),
8871 last_insn.name, i.tm.name);
8872 }
8873
8874 return 0;
8875 }
8876
8877 /* Return 1 if a BRANCH_PREFIX frag should be generated. */
8878
8879 static int
8880 add_branch_prefix_frag_p (void)
8881 {
8882 /* NB: Don't work with COND_JUMP86 without i386. Don't add prefix
8883 to PadLock instructions since they include prefixes in opcode. */
8884 if (!align_branch_power
8885 || !align_branch_prefix_size
8886 || now_seg == absolute_section
8887 || i.tm.cpu_flags.bitfield.cpupadlock
8888 || !cpu_arch_flags.bitfield.cpui386)
8889 return 0;
8890
8891 /* Don't add prefix if it is a prefix or there is no operand in case
8892 that segment prefix is special. */
8893 if (!i.operands || i.tm.opcode_modifier.isprefix)
8894 return 0;
8895
8896 if (last_insn.kind == last_insn_other
8897 || last_insn.seg != now_seg)
8898 return 1;
8899
8900 if (flag_debug)
8901 as_warn_where (last_insn.file, last_insn.line,
8902 _("`%s` skips -malign-branch-boundary on `%s`"),
8903 last_insn.name, i.tm.name);
8904
8905 return 0;
8906 }
8907
8908 /* Return 1 if a BRANCH_PADDING frag should be generated. */
8909
8910 static int
8911 add_branch_padding_frag_p (enum align_branch_kind *branch_p,
8912 enum mf_jcc_kind *mf_jcc_p)
8913 {
8914 int add_padding;
8915
8916 /* NB: Don't work with COND_JUMP86 without i386. */
8917 if (!align_branch_power
8918 || now_seg == absolute_section
8919 || !cpu_arch_flags.bitfield.cpui386)
8920 return 0;
8921
8922 add_padding = 0;
8923
8924 /* Check for jcc and direct jmp. */
8925 if (i.tm.opcode_modifier.jump == JUMP)
8926 {
8927 if (i.tm.base_opcode == JUMP_PC_RELATIVE)
8928 {
8929 *branch_p = align_branch_jmp;
8930 add_padding = align_branch & align_branch_jmp_bit;
8931 }
8932 else
8933 {
8934 /* Because J<cc> and JN<cc> share same group in macro-fusible table,
8935 igore the lowest bit. */
8936 *mf_jcc_p = (i.tm.base_opcode & 0x0e) >> 1;
8937 *branch_p = align_branch_jcc;
8938 if ((align_branch & align_branch_jcc_bit))
8939 add_padding = 1;
8940 }
8941 }
8942 else if (is_any_vex_encoding (&i.tm))
8943 return 0;
8944 else if ((i.tm.base_opcode | 1) == 0xc3)
8945 {
8946 /* Near ret. */
8947 *branch_p = align_branch_ret;
8948 if ((align_branch & align_branch_ret_bit))
8949 add_padding = 1;
8950 }
8951 else
8952 {
8953 /* Check for indirect jmp, direct and indirect calls. */
8954 if (i.tm.base_opcode == 0xe8)
8955 {
8956 /* Direct call. */
8957 *branch_p = align_branch_call;
8958 if ((align_branch & align_branch_call_bit))
8959 add_padding = 1;
8960 }
8961 else if (i.tm.base_opcode == 0xff
8962 && (i.tm.extension_opcode == 2
8963 || i.tm.extension_opcode == 4))
8964 {
8965 /* Indirect call and jmp. */
8966 *branch_p = align_branch_indirect;
8967 if ((align_branch & align_branch_indirect_bit))
8968 add_padding = 1;
8969 }
8970
8971 if (add_padding
8972 && i.disp_operands
8973 && tls_get_addr
8974 && (i.op[0].disps->X_op == O_symbol
8975 || (i.op[0].disps->X_op == O_subtract
8976 && i.op[0].disps->X_op_symbol == GOT_symbol)))
8977 {
8978 symbolS *s = i.op[0].disps->X_add_symbol;
8979 /* No padding to call to global or undefined tls_get_addr. */
8980 if ((S_IS_EXTERNAL (s) || !S_IS_DEFINED (s))
8981 && strcmp (S_GET_NAME (s), tls_get_addr) == 0)
8982 return 0;
8983 }
8984 }
8985
8986 if (add_padding
8987 && last_insn.kind != last_insn_other
8988 && last_insn.seg == now_seg)
8989 {
8990 if (flag_debug)
8991 as_warn_where (last_insn.file, last_insn.line,
8992 _("`%s` skips -malign-branch-boundary on `%s`"),
8993 last_insn.name, i.tm.name);
8994 return 0;
8995 }
8996
8997 return add_padding;
8998 }
8999
9000 static void
9001 output_insn (void)
9002 {
9003 fragS *insn_start_frag;
9004 offsetT insn_start_off;
9005 fragS *fragP = NULL;
9006 enum align_branch_kind branch = align_branch_none;
9007 /* The initializer is arbitrary just to avoid uninitialized error.
9008 it's actually either assigned in add_branch_padding_frag_p
9009 or never be used. */
9010 enum mf_jcc_kind mf_jcc = mf_jcc_jo;
9011
9012 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
9013 if (IS_ELF && x86_used_note)
9014 {
9015 if (i.tm.cpu_flags.bitfield.cpucmov)
9016 x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_CMOV;
9017 if (i.tm.cpu_flags.bitfield.cpusse)
9018 x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_SSE;
9019 if (i.tm.cpu_flags.bitfield.cpusse2)
9020 x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_SSE2;
9021 if (i.tm.cpu_flags.bitfield.cpusse3)
9022 x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_SSE3;
9023 if (i.tm.cpu_flags.bitfield.cpussse3)
9024 x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_SSSE3;
9025 if (i.tm.cpu_flags.bitfield.cpusse4_1)
9026 x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_SSE4_1;
9027 if (i.tm.cpu_flags.bitfield.cpusse4_2)
9028 x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_SSE4_2;
9029 if (i.tm.cpu_flags.bitfield.cpuavx)
9030 x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX;
9031 if (i.tm.cpu_flags.bitfield.cpuavx2)
9032 x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX2;
9033 if (i.tm.cpu_flags.bitfield.cpufma)
9034 x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_FMA;
9035 if (i.tm.cpu_flags.bitfield.cpuavx512f)
9036 x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512F;
9037 if (i.tm.cpu_flags.bitfield.cpuavx512cd)
9038 x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512CD;
9039 if (i.tm.cpu_flags.bitfield.cpuavx512er)
9040 x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512ER;
9041 if (i.tm.cpu_flags.bitfield.cpuavx512pf)
9042 x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512PF;
9043 if (i.tm.cpu_flags.bitfield.cpuavx512vl)
9044 x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512VL;
9045 if (i.tm.cpu_flags.bitfield.cpuavx512dq)
9046 x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512DQ;
9047 if (i.tm.cpu_flags.bitfield.cpuavx512bw)
9048 x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512BW;
9049 if (i.tm.cpu_flags.bitfield.cpuavx512_4fmaps)
9050 x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512_4FMAPS;
9051 if (i.tm.cpu_flags.bitfield.cpuavx512_4vnniw)
9052 x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512_4VNNIW;
9053 if (i.tm.cpu_flags.bitfield.cpuavx512_bitalg)
9054 x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512_BITALG;
9055 if (i.tm.cpu_flags.bitfield.cpuavx512ifma)
9056 x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512_IFMA;
9057 if (i.tm.cpu_flags.bitfield.cpuavx512vbmi)
9058 x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512_VBMI;
9059 if (i.tm.cpu_flags.bitfield.cpuavx512_vbmi2)
9060 x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512_VBMI2;
9061 if (i.tm.cpu_flags.bitfield.cpuavx512_vnni)
9062 x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512_VNNI;
9063 if (i.tm.cpu_flags.bitfield.cpuavx512_bf16)
9064 x86_isa_1_used |= GNU_PROPERTY_X86_ISA_1_AVX512_BF16;
9065
9066 if (i.tm.cpu_flags.bitfield.cpu8087
9067 || i.tm.cpu_flags.bitfield.cpu287
9068 || i.tm.cpu_flags.bitfield.cpu387
9069 || i.tm.cpu_flags.bitfield.cpu687
9070 || i.tm.cpu_flags.bitfield.cpufisttp)
9071 x86_feature_2_used |= GNU_PROPERTY_X86_FEATURE_2_X87;
9072 if (i.has_regmmx
9073 || i.tm.base_opcode == 0xf77 /* emms */
9074 || i.tm.base_opcode == 0xf0e /* femms */
9075 || i.tm.base_opcode == 0xf2a /* cvtpi2ps */
9076 || i.tm.base_opcode == 0x660f2a /* cvtpi2pd */)
9077 x86_feature_2_used |= GNU_PROPERTY_X86_FEATURE_2_MMX;
9078 if (i.has_regxmm)
9079 x86_feature_2_used |= GNU_PROPERTY_X86_FEATURE_2_XMM;
9080 if (i.has_regymm)
9081 x86_feature_2_used |= GNU_PROPERTY_X86_FEATURE_2_YMM;
9082 if (i.has_regzmm)
9083 x86_feature_2_used |= GNU_PROPERTY_X86_FEATURE_2_ZMM;
9084 if (i.tm.cpu_flags.bitfield.cpufxsr)
9085 x86_feature_2_used |= GNU_PROPERTY_X86_FEATURE_2_FXSR;
9086 if (i.tm.cpu_flags.bitfield.cpuxsave)
9087 x86_feature_2_used |= GNU_PROPERTY_X86_FEATURE_2_XSAVE;
9088 if (i.tm.cpu_flags.bitfield.cpuxsaveopt)
9089 x86_feature_2_used |= GNU_PROPERTY_X86_FEATURE_2_XSAVEOPT;
9090 if (i.tm.cpu_flags.bitfield.cpuxsavec)
9091 x86_feature_2_used |= GNU_PROPERTY_X86_FEATURE_2_XSAVEC;
9092 }
9093 #endif
9094
9095 /* Tie dwarf2 debug info to the address at the start of the insn.
9096 We can't do this after the insn has been output as the current
9097 frag may have been closed off. eg. by frag_var. */
9098 dwarf2_emit_insn (0);
9099
9100 insn_start_frag = frag_now;
9101 insn_start_off = frag_now_fix ();
9102
9103 if (add_branch_padding_frag_p (&branch, &mf_jcc))
9104 {
9105 char *p;
9106 /* Branch can be 8 bytes. Leave some room for prefixes. */
9107 unsigned int max_branch_padding_size = 14;
9108
9109 /* Align section to boundary. */
9110 record_alignment (now_seg, align_branch_power);
9111
9112 /* Make room for padding. */
9113 frag_grow (max_branch_padding_size);
9114
9115 /* Start of the padding. */
9116 p = frag_more (0);
9117
9118 fragP = frag_now;
9119
9120 frag_var (rs_machine_dependent, max_branch_padding_size, 0,
9121 ENCODE_RELAX_STATE (BRANCH_PADDING, 0),
9122 NULL, 0, p);
9123
9124 fragP->tc_frag_data.mf_type = mf_jcc;
9125 fragP->tc_frag_data.branch_type = branch;
9126 fragP->tc_frag_data.max_bytes = max_branch_padding_size;
9127 }
9128
9129 /* Output jumps. */
9130 if (i.tm.opcode_modifier.jump == JUMP)
9131 output_branch ();
9132 else if (i.tm.opcode_modifier.jump == JUMP_BYTE
9133 || i.tm.opcode_modifier.jump == JUMP_DWORD)
9134 output_jump ();
9135 else if (i.tm.opcode_modifier.jump == JUMP_INTERSEGMENT)
9136 output_interseg_jump ();
9137 else
9138 {
9139 /* Output normal instructions here. */
9140 char *p;
9141 unsigned char *q;
9142 unsigned int j;
9143 unsigned int prefix;
9144 enum mf_cmp_kind mf_cmp;
9145
9146 if (avoid_fence
9147 && (i.tm.base_opcode == 0xfaee8
9148 || i.tm.base_opcode == 0xfaef0
9149 || i.tm.base_opcode == 0xfaef8))
9150 {
9151 /* Encode lfence, mfence, and sfence as
9152 f0 83 04 24 00 lock addl $0x0, (%{re}sp). */
9153 offsetT val = 0x240483f0ULL;
9154 p = frag_more (5);
9155 md_number_to_chars (p, val, 5);
9156 return;
9157 }
9158
9159 /* Some processors fail on LOCK prefix. This options makes
9160 assembler ignore LOCK prefix and serves as a workaround. */
9161 if (omit_lock_prefix)
9162 {
9163 if (i.tm.base_opcode == LOCK_PREFIX_OPCODE)
9164 return;
9165 i.prefix[LOCK_PREFIX] = 0;
9166 }
9167
9168 if (branch)
9169 /* Skip if this is a branch. */
9170 ;
9171 else if (add_fused_jcc_padding_frag_p (&mf_cmp))
9172 {
9173 /* Make room for padding. */
9174 frag_grow (MAX_FUSED_JCC_PADDING_SIZE);
9175 p = frag_more (0);
9176
9177 fragP = frag_now;
9178
9179 frag_var (rs_machine_dependent, MAX_FUSED_JCC_PADDING_SIZE, 0,
9180 ENCODE_RELAX_STATE (FUSED_JCC_PADDING, 0),
9181 NULL, 0, p);
9182
9183 fragP->tc_frag_data.mf_type = mf_cmp;
9184 fragP->tc_frag_data.branch_type = align_branch_fused;
9185 fragP->tc_frag_data.max_bytes = MAX_FUSED_JCC_PADDING_SIZE;
9186 }
9187 else if (add_branch_prefix_frag_p ())
9188 {
9189 unsigned int max_prefix_size = align_branch_prefix_size;
9190
9191 /* Make room for padding. */
9192 frag_grow (max_prefix_size);
9193 p = frag_more (0);
9194
9195 fragP = frag_now;
9196
9197 frag_var (rs_machine_dependent, max_prefix_size, 0,
9198 ENCODE_RELAX_STATE (BRANCH_PREFIX, 0),
9199 NULL, 0, p);
9200
9201 fragP->tc_frag_data.max_bytes = max_prefix_size;
9202 }
9203
9204 /* Since the VEX/EVEX prefix contains the implicit prefix, we
9205 don't need the explicit prefix. */
9206 if (!i.tm.opcode_modifier.vex && !i.tm.opcode_modifier.evex)
9207 {
9208 switch (i.tm.opcode_length)
9209 {
9210 case 3:
9211 if (i.tm.base_opcode & 0xff000000)
9212 {
9213 prefix = (i.tm.base_opcode >> 24) & 0xff;
9214 if (!i.tm.cpu_flags.bitfield.cpupadlock
9215 || prefix != REPE_PREFIX_OPCODE
9216 || (i.prefix[REP_PREFIX] != REPE_PREFIX_OPCODE))
9217 add_prefix (prefix);
9218 }
9219 break;
9220 case 2:
9221 if ((i.tm.base_opcode & 0xff0000) != 0)
9222 {
9223 prefix = (i.tm.base_opcode >> 16) & 0xff;
9224 add_prefix (prefix);
9225 }
9226 break;
9227 case 1:
9228 break;
9229 case 0:
9230 /* Check for pseudo prefixes. */
9231 as_bad_where (insn_start_frag->fr_file,
9232 insn_start_frag->fr_line,
9233 _("pseudo prefix without instruction"));
9234 return;
9235 default:
9236 abort ();
9237 }
9238
9239 #if defined (OBJ_MAYBE_ELF) || defined (OBJ_ELF)
9240 /* For x32, add a dummy REX_OPCODE prefix for mov/add with
9241 R_X86_64_GOTTPOFF relocation so that linker can safely
9242 perform IE->LE optimization. A dummy REX_OPCODE prefix
9243 is also needed for lea with R_X86_64_GOTPC32_TLSDESC
9244 relocation for GDesc -> IE/LE optimization. */
9245 if (x86_elf_abi == X86_64_X32_ABI
9246 && i.operands == 2
9247 && (i.reloc[0] == BFD_RELOC_X86_64_GOTTPOFF
9248 || i.reloc[0] == BFD_RELOC_X86_64_GOTPC32_TLSDESC)
9249 && i.prefix[REX_PREFIX] == 0)
9250 add_prefix (REX_OPCODE);
9251 #endif
9252
9253 /* The prefix bytes. */
9254 for (j = ARRAY_SIZE (i.prefix), q = i.prefix; j > 0; j--, q++)
9255 if (*q)
9256 FRAG_APPEND_1_CHAR (*q);
9257 }
9258 else
9259 {
9260 for (j = 0, q = i.prefix; j < ARRAY_SIZE (i.prefix); j++, q++)
9261 if (*q)
9262 switch (j)
9263 {
9264 case REX_PREFIX:
9265 /* REX byte is encoded in VEX prefix. */
9266 break;
9267 case SEG_PREFIX:
9268 case ADDR_PREFIX:
9269 FRAG_APPEND_1_CHAR (*q);
9270 break;
9271 default:
9272 /* There should be no other prefixes for instructions
9273 with VEX prefix. */
9274 abort ();
9275 }
9276
9277 /* For EVEX instructions i.vrex should become 0 after
9278 build_evex_prefix. For VEX instructions upper 16 registers
9279 aren't available, so VREX should be 0. */
9280 if (i.vrex)
9281 abort ();
9282 /* Now the VEX prefix. */
9283 p = frag_more (i.vex.length);
9284 for (j = 0; j < i.vex.length; j++)
9285 p[j] = i.vex.bytes[j];
9286 }
9287
9288 /* Now the opcode; be careful about word order here! */
9289 if (i.tm.opcode_length == 1)
9290 {
9291 FRAG_APPEND_1_CHAR (i.tm.base_opcode);
9292 }
9293 else
9294 {
9295 switch (i.tm.opcode_length)
9296 {
9297 case 4:
9298 p = frag_more (4);
9299 *p++ = (i.tm.base_opcode >> 24) & 0xff;
9300 *p++ = (i.tm.base_opcode >> 16) & 0xff;
9301 break;
9302 case 3:
9303 p = frag_more (3);
9304 *p++ = (i.tm.base_opcode >> 16) & 0xff;
9305 break;
9306 case 2:
9307 p = frag_more (2);
9308 break;
9309 default:
9310 abort ();
9311 break;
9312 }
9313
9314 /* Put out high byte first: can't use md_number_to_chars! */
9315 *p++ = (i.tm.base_opcode >> 8) & 0xff;
9316 *p = i.tm.base_opcode & 0xff;
9317 }
9318
9319 /* Now the modrm byte and sib byte (if present). */
9320 if (i.tm.opcode_modifier.modrm)
9321 {
9322 FRAG_APPEND_1_CHAR ((i.rm.regmem << 0
9323 | i.rm.reg << 3
9324 | i.rm.mode << 6));
9325 /* If i.rm.regmem == ESP (4)
9326 && i.rm.mode != (Register mode)
9327 && not 16 bit
9328 ==> need second modrm byte. */
9329 if (i.rm.regmem == ESCAPE_TO_TWO_BYTE_ADDRESSING
9330 && i.rm.mode != 3
9331 && !(i.base_reg && i.base_reg->reg_type.bitfield.word))
9332 FRAG_APPEND_1_CHAR ((i.sib.base << 0
9333 | i.sib.index << 3
9334 | i.sib.scale << 6));
9335 }
9336
9337 if (i.disp_operands)
9338 output_disp (insn_start_frag, insn_start_off);
9339
9340 if (i.imm_operands)
9341 output_imm (insn_start_frag, insn_start_off);
9342
9343 /*
9344 * frag_now_fix () returning plain abs_section_offset when we're in the
9345 * absolute section, and abs_section_offset not getting updated as data
9346 * gets added to the frag breaks the logic below.
9347 */
9348 if (now_seg != absolute_section)
9349 {
9350 j = encoding_length (insn_start_frag, insn_start_off, frag_more (0));
9351 if (j > 15)
9352 as_warn (_("instruction length of %u bytes exceeds the limit of 15"),
9353 j);
9354 else if (fragP)
9355 {
9356 /* NB: Don't add prefix with GOTPC relocation since
9357 output_disp() above depends on the fixed encoding
9358 length. Can't add prefix with TLS relocation since
9359 it breaks TLS linker optimization. */
9360 unsigned int max = i.has_gotpc_tls_reloc ? 0 : 15 - j;
9361 /* Prefix count on the current instruction. */
9362 unsigned int count = i.vex.length;
9363 unsigned int k;
9364 for (k = 0; k < ARRAY_SIZE (i.prefix); k++)
9365 /* REX byte is encoded in VEX/EVEX prefix. */
9366 if (i.prefix[k] && (k != REX_PREFIX || !i.vex.length))
9367 count++;
9368
9369 /* Count prefixes for extended opcode maps. */
9370 if (!i.vex.length)
9371 switch (i.tm.opcode_length)
9372 {
9373 case 3:
9374 if (((i.tm.base_opcode >> 16) & 0xff) == 0xf)
9375 {
9376 count++;
9377 switch ((i.tm.base_opcode >> 8) & 0xff)
9378 {
9379 case 0x38:
9380 case 0x3a:
9381 count++;
9382 break;
9383 default:
9384 break;
9385 }
9386 }
9387 break;
9388 case 2:
9389 if (((i.tm.base_opcode >> 8) & 0xff) == 0xf)
9390 count++;
9391 break;
9392 case 1:
9393 break;
9394 default:
9395 abort ();
9396 }
9397
9398 if (TYPE_FROM_RELAX_STATE (fragP->fr_subtype)
9399 == BRANCH_PREFIX)
9400 {
9401 /* Set the maximum prefix size in BRANCH_PREFIX
9402 frag. */
9403 if (fragP->tc_frag_data.max_bytes > max)
9404 fragP->tc_frag_data.max_bytes = max;
9405 if (fragP->tc_frag_data.max_bytes > count)
9406 fragP->tc_frag_data.max_bytes -= count;
9407 else
9408 fragP->tc_frag_data.max_bytes = 0;
9409 }
9410 else
9411 {
9412 /* Remember the maximum prefix size in FUSED_JCC_PADDING
9413 frag. */
9414 unsigned int max_prefix_size;
9415 if (align_branch_prefix_size > max)
9416 max_prefix_size = max;
9417 else
9418 max_prefix_size = align_branch_prefix_size;
9419 if (max_prefix_size > count)
9420 fragP->tc_frag_data.max_prefix_length
9421 = max_prefix_size - count;
9422 }
9423
9424 /* Use existing segment prefix if possible. Use CS
9425 segment prefix in 64-bit mode. In 32-bit mode, use SS
9426 segment prefix with ESP/EBP base register and use DS
9427 segment prefix without ESP/EBP base register. */
9428 if (i.prefix[SEG_PREFIX])
9429 fragP->tc_frag_data.default_prefix = i.prefix[SEG_PREFIX];
9430 else if (flag_code == CODE_64BIT)
9431 fragP->tc_frag_data.default_prefix = CS_PREFIX_OPCODE;
9432 else if (i.base_reg
9433 && (i.base_reg->reg_num == 4
9434 || i.base_reg->reg_num == 5))
9435 fragP->tc_frag_data.default_prefix = SS_PREFIX_OPCODE;
9436 else
9437 fragP->tc_frag_data.default_prefix = DS_PREFIX_OPCODE;
9438 }
9439 }
9440 }
9441
9442 /* NB: Don't work with COND_JUMP86 without i386. */
9443 if (align_branch_power
9444 && now_seg != absolute_section
9445 && cpu_arch_flags.bitfield.cpui386)
9446 {
9447 /* Terminate each frag so that we can add prefix and check for
9448 fused jcc. */
9449 frag_wane (frag_now);
9450 frag_new (0);
9451 }
9452
9453 #ifdef DEBUG386
9454 if (flag_debug)
9455 {
9456 pi ("" /*line*/, &i);
9457 }
9458 #endif /* DEBUG386 */
9459 }
9460
9461 /* Return the size of the displacement operand N. */
9462
9463 static int
9464 disp_size (unsigned int n)
9465 {
9466 int size = 4;
9467
9468 if (i.types[n].bitfield.disp64)
9469 size = 8;
9470 else if (i.types[n].bitfield.disp8)
9471 size = 1;
9472 else if (i.types[n].bitfield.disp16)
9473 size = 2;
9474 return size;
9475 }
9476
9477 /* Return the size of the immediate operand N. */
9478
9479 static int
9480 imm_size (unsigned int n)
9481 {
9482 int size = 4;
9483 if (i.types[n].bitfield.imm64)
9484 size = 8;
9485 else if (i.types[n].bitfield.imm8 || i.types[n].bitfield.imm8s)
9486 size = 1;
9487 else if (i.types[n].bitfield.imm16)
9488 size = 2;
9489 return size;
9490 }
9491
9492 static void
9493 output_disp (fragS *insn_start_frag, offsetT insn_start_off)
9494 {
9495 char *p;
9496 unsigned int n;
9497
9498 for (n = 0; n < i.operands; n++)
9499 {
9500 if (operand_type_check (i.types[n], disp))
9501 {
9502 if (i.op[n].disps->X_op == O_constant)
9503 {
9504 int size = disp_size (n);
9505 offsetT val = i.op[n].disps->X_add_number;
9506
9507 val = offset_in_range (val >> (size == 1 ? i.memshift : 0),
9508 size);
9509 p = frag_more (size);
9510 md_number_to_chars (p, val, size);
9511 }
9512 else
9513 {
9514 enum bfd_reloc_code_real reloc_type;
9515 int size = disp_size (n);
9516 int sign = i.types[n].bitfield.disp32s;
9517 int pcrel = (i.flags[n] & Operand_PCrel) != 0;
9518 fixS *fixP;
9519
9520 /* We can't have 8 bit displacement here. */
9521 gas_assert (!i.types[n].bitfield.disp8);
9522
9523 /* The PC relative address is computed relative
9524 to the instruction boundary, so in case immediate
9525 fields follows, we need to adjust the value. */
9526 if (pcrel && i.imm_operands)
9527 {
9528 unsigned int n1;
9529 int sz = 0;
9530
9531 for (n1 = 0; n1 < i.operands; n1++)
9532 if (operand_type_check (i.types[n1], imm))
9533 {
9534 /* Only one immediate is allowed for PC
9535 relative address. */
9536 gas_assert (sz == 0);
9537 sz = imm_size (n1);
9538 i.op[n].disps->X_add_number -= sz;
9539 }
9540 /* We should find the immediate. */
9541 gas_assert (sz != 0);
9542 }
9543
9544 p = frag_more (size);
9545 reloc_type = reloc (size, pcrel, sign, i.reloc[n]);
9546 if (GOT_symbol
9547 && GOT_symbol == i.op[n].disps->X_add_symbol
9548 && (((reloc_type == BFD_RELOC_32
9549 || reloc_type == BFD_RELOC_X86_64_32S
9550 || (reloc_type == BFD_RELOC_64
9551 && object_64bit))
9552 && (i.op[n].disps->X_op == O_symbol
9553 || (i.op[n].disps->X_op == O_add
9554 && ((symbol_get_value_expression
9555 (i.op[n].disps->X_op_symbol)->X_op)
9556 == O_subtract))))
9557 || reloc_type == BFD_RELOC_32_PCREL))
9558 {
9559 if (!object_64bit)
9560 {
9561 reloc_type = BFD_RELOC_386_GOTPC;
9562 i.has_gotpc_tls_reloc = TRUE;
9563 i.op[n].imms->X_add_number +=
9564 encoding_length (insn_start_frag, insn_start_off, p);
9565 }
9566 else if (reloc_type == BFD_RELOC_64)
9567 reloc_type = BFD_RELOC_X86_64_GOTPC64;
9568 else
9569 /* Don't do the adjustment for x86-64, as there
9570 the pcrel addressing is relative to the _next_
9571 insn, and that is taken care of in other code. */
9572 reloc_type = BFD_RELOC_X86_64_GOTPC32;
9573 }
9574 else if (align_branch_power)
9575 {
9576 switch (reloc_type)
9577 {
9578 case BFD_RELOC_386_TLS_GD:
9579 case BFD_RELOC_386_TLS_LDM:
9580 case BFD_RELOC_386_TLS_IE:
9581 case BFD_RELOC_386_TLS_IE_32:
9582 case BFD_RELOC_386_TLS_GOTIE:
9583 case BFD_RELOC_386_TLS_GOTDESC:
9584 case BFD_RELOC_386_TLS_DESC_CALL:
9585 case BFD_RELOC_X86_64_TLSGD:
9586 case BFD_RELOC_X86_64_TLSLD:
9587 case BFD_RELOC_X86_64_GOTTPOFF:
9588 case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
9589 case BFD_RELOC_X86_64_TLSDESC_CALL:
9590 i.has_gotpc_tls_reloc = TRUE;
9591 default:
9592 break;
9593 }
9594 }
9595 fixP = fix_new_exp (frag_now, p - frag_now->fr_literal,
9596 size, i.op[n].disps, pcrel,
9597 reloc_type);
9598 /* Check for "call/jmp *mem", "mov mem, %reg",
9599 "test %reg, mem" and "binop mem, %reg" where binop
9600 is one of adc, add, and, cmp, or, sbb, sub, xor
9601 instructions without data prefix. Always generate
9602 R_386_GOT32X for "sym*GOT" operand in 32-bit mode. */
9603 if (i.prefix[DATA_PREFIX] == 0
9604 && (generate_relax_relocations
9605 || (!object_64bit
9606 && i.rm.mode == 0
9607 && i.rm.regmem == 5))
9608 && (i.rm.mode == 2
9609 || (i.rm.mode == 0 && i.rm.regmem == 5))
9610 && !is_any_vex_encoding(&i.tm)
9611 && ((i.operands == 1
9612 && i.tm.base_opcode == 0xff
9613 && (i.rm.reg == 2 || i.rm.reg == 4))
9614 || (i.operands == 2
9615 && (i.tm.base_opcode == 0x8b
9616 || i.tm.base_opcode == 0x85
9617 || (i.tm.base_opcode & ~0x38) == 0x03))))
9618 {
9619 if (object_64bit)
9620 {
9621 fixP->fx_tcbit = i.rex != 0;
9622 if (i.base_reg
9623 && (i.base_reg->reg_num == RegIP))
9624 fixP->fx_tcbit2 = 1;
9625 }
9626 else
9627 fixP->fx_tcbit2 = 1;
9628 }
9629 }
9630 }
9631 }
9632 }
9633
9634 static void
9635 output_imm (fragS *insn_start_frag, offsetT insn_start_off)
9636 {
9637 char *p;
9638 unsigned int n;
9639
9640 for (n = 0; n < i.operands; n++)
9641 {
9642 /* Skip SAE/RC Imm operand in EVEX. They are already handled. */
9643 if (i.rounding && (int) n == i.rounding->operand)
9644 continue;
9645
9646 if (operand_type_check (i.types[n], imm))
9647 {
9648 if (i.op[n].imms->X_op == O_constant)
9649 {
9650 int size = imm_size (n);
9651 offsetT val;
9652
9653 val = offset_in_range (i.op[n].imms->X_add_number,
9654 size);
9655 p = frag_more (size);
9656 md_number_to_chars (p, val, size);
9657 }
9658 else
9659 {
9660 /* Not absolute_section.
9661 Need a 32-bit fixup (don't support 8bit
9662 non-absolute imms). Try to support other
9663 sizes ... */
9664 enum bfd_reloc_code_real reloc_type;
9665 int size = imm_size (n);
9666 int sign;
9667
9668 if (i.types[n].bitfield.imm32s
9669 && (i.suffix == QWORD_MNEM_SUFFIX
9670 || (!i.suffix && i.tm.opcode_modifier.no_lsuf)))
9671 sign = 1;
9672 else
9673 sign = 0;
9674
9675 p = frag_more (size);
9676 reloc_type = reloc (size, 0, sign, i.reloc[n]);
9677
9678 /* This is tough to explain. We end up with this one if we
9679 * have operands that look like
9680 * "_GLOBAL_OFFSET_TABLE_+[.-.L284]". The goal here is to
9681 * obtain the absolute address of the GOT, and it is strongly
9682 * preferable from a performance point of view to avoid using
9683 * a runtime relocation for this. The actual sequence of
9684 * instructions often look something like:
9685 *
9686 * call .L66
9687 * .L66:
9688 * popl %ebx
9689 * addl $_GLOBAL_OFFSET_TABLE_+[.-.L66],%ebx
9690 *
9691 * The call and pop essentially return the absolute address
9692 * of the label .L66 and store it in %ebx. The linker itself
9693 * will ultimately change the first operand of the addl so
9694 * that %ebx points to the GOT, but to keep things simple, the
9695 * .o file must have this operand set so that it generates not
9696 * the absolute address of .L66, but the absolute address of
9697 * itself. This allows the linker itself simply treat a GOTPC
9698 * relocation as asking for a pcrel offset to the GOT to be
9699 * added in, and the addend of the relocation is stored in the
9700 * operand field for the instruction itself.
9701 *
9702 * Our job here is to fix the operand so that it would add
9703 * the correct offset so that %ebx would point to itself. The
9704 * thing that is tricky is that .-.L66 will point to the
9705 * beginning of the instruction, so we need to further modify
9706 * the operand so that it will point to itself. There are
9707 * other cases where you have something like:
9708 *
9709 * .long $_GLOBAL_OFFSET_TABLE_+[.-.L66]
9710 *
9711 * and here no correction would be required. Internally in
9712 * the assembler we treat operands of this form as not being
9713 * pcrel since the '.' is explicitly mentioned, and I wonder
9714 * whether it would simplify matters to do it this way. Who
9715 * knows. In earlier versions of the PIC patches, the
9716 * pcrel_adjust field was used to store the correction, but
9717 * since the expression is not pcrel, I felt it would be
9718 * confusing to do it this way. */
9719
9720 if ((reloc_type == BFD_RELOC_32
9721 || reloc_type == BFD_RELOC_X86_64_32S
9722 || reloc_type == BFD_RELOC_64)
9723 && GOT_symbol
9724 && GOT_symbol == i.op[n].imms->X_add_symbol
9725 && (i.op[n].imms->X_op == O_symbol
9726 || (i.op[n].imms->X_op == O_add
9727 && ((symbol_get_value_expression
9728 (i.op[n].imms->X_op_symbol)->X_op)
9729 == O_subtract))))
9730 {
9731 if (!object_64bit)
9732 reloc_type = BFD_RELOC_386_GOTPC;
9733 else if (size == 4)
9734 reloc_type = BFD_RELOC_X86_64_GOTPC32;
9735 else if (size == 8)
9736 reloc_type = BFD_RELOC_X86_64_GOTPC64;
9737 i.has_gotpc_tls_reloc = TRUE;
9738 i.op[n].imms->X_add_number +=
9739 encoding_length (insn_start_frag, insn_start_off, p);
9740 }
9741 fix_new_exp (frag_now, p - frag_now->fr_literal, size,
9742 i.op[n].imms, 0, reloc_type);
9743 }
9744 }
9745 }
9746 }
9747 \f
9748 /* x86_cons_fix_new is called via the expression parsing code when a
9749 reloc is needed. We use this hook to get the correct .got reloc. */
9750 static int cons_sign = -1;
9751
9752 void
9753 x86_cons_fix_new (fragS *frag, unsigned int off, unsigned int len,
9754 expressionS *exp, bfd_reloc_code_real_type r)
9755 {
9756 r = reloc (len, 0, cons_sign, r);
9757
9758 #ifdef TE_PE
9759 if (exp->X_op == O_secrel)
9760 {
9761 exp->X_op = O_symbol;
9762 r = BFD_RELOC_32_SECREL;
9763 }
9764 #endif
9765
9766 fix_new_exp (frag, off, len, exp, 0, r);
9767 }
9768
9769 /* Export the ABI address size for use by TC_ADDRESS_BYTES for the
9770 purpose of the `.dc.a' internal pseudo-op. */
9771
9772 int
9773 x86_address_bytes (void)
9774 {
9775 if ((stdoutput->arch_info->mach & bfd_mach_x64_32))
9776 return 4;
9777 return stdoutput->arch_info->bits_per_address / 8;
9778 }
9779
9780 #if !(defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) || defined (OBJ_MACH_O)) \
9781 || defined (LEX_AT)
9782 # define lex_got(reloc, adjust, types) NULL
9783 #else
9784 /* Parse operands of the form
9785 <symbol>@GOTOFF+<nnn>
9786 and similar .plt or .got references.
9787
9788 If we find one, set up the correct relocation in RELOC and copy the
9789 input string, minus the `@GOTOFF' into a malloc'd buffer for
9790 parsing by the calling routine. Return this buffer, and if ADJUST
9791 is non-null set it to the length of the string we removed from the
9792 input line. Otherwise return NULL. */
9793 static char *
9794 lex_got (enum bfd_reloc_code_real *rel,
9795 int *adjust,
9796 i386_operand_type *types)
9797 {
9798 /* Some of the relocations depend on the size of what field is to
9799 be relocated. But in our callers i386_immediate and i386_displacement
9800 we don't yet know the operand size (this will be set by insn
9801 matching). Hence we record the word32 relocation here,
9802 and adjust the reloc according to the real size in reloc(). */
9803 static const struct {
9804 const char *str;
9805 int len;
9806 const enum bfd_reloc_code_real rel[2];
9807 const i386_operand_type types64;
9808 } gotrel[] = {
9809 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
9810 { STRING_COMMA_LEN ("SIZE"), { BFD_RELOC_SIZE32,
9811 BFD_RELOC_SIZE32 },
9812 OPERAND_TYPE_IMM32_64 },
9813 #endif
9814 { STRING_COMMA_LEN ("PLTOFF"), { _dummy_first_bfd_reloc_code_real,
9815 BFD_RELOC_X86_64_PLTOFF64 },
9816 OPERAND_TYPE_IMM64 },
9817 { STRING_COMMA_LEN ("PLT"), { BFD_RELOC_386_PLT32,
9818 BFD_RELOC_X86_64_PLT32 },
9819 OPERAND_TYPE_IMM32_32S_DISP32 },
9820 { STRING_COMMA_LEN ("GOTPLT"), { _dummy_first_bfd_reloc_code_real,
9821 BFD_RELOC_X86_64_GOTPLT64 },
9822 OPERAND_TYPE_IMM64_DISP64 },
9823 { STRING_COMMA_LEN ("GOTOFF"), { BFD_RELOC_386_GOTOFF,
9824 BFD_RELOC_X86_64_GOTOFF64 },
9825 OPERAND_TYPE_IMM64_DISP64 },
9826 { STRING_COMMA_LEN ("GOTPCREL"), { _dummy_first_bfd_reloc_code_real,
9827 BFD_RELOC_X86_64_GOTPCREL },
9828 OPERAND_TYPE_IMM32_32S_DISP32 },
9829 { STRING_COMMA_LEN ("TLSGD"), { BFD_RELOC_386_TLS_GD,
9830 BFD_RELOC_X86_64_TLSGD },
9831 OPERAND_TYPE_IMM32_32S_DISP32 },
9832 { STRING_COMMA_LEN ("TLSLDM"), { BFD_RELOC_386_TLS_LDM,
9833 _dummy_first_bfd_reloc_code_real },
9834 OPERAND_TYPE_NONE },
9835 { STRING_COMMA_LEN ("TLSLD"), { _dummy_first_bfd_reloc_code_real,
9836 BFD_RELOC_X86_64_TLSLD },
9837 OPERAND_TYPE_IMM32_32S_DISP32 },
9838 { STRING_COMMA_LEN ("GOTTPOFF"), { BFD_RELOC_386_TLS_IE_32,
9839 BFD_RELOC_X86_64_GOTTPOFF },
9840 OPERAND_TYPE_IMM32_32S_DISP32 },
9841 { STRING_COMMA_LEN ("TPOFF"), { BFD_RELOC_386_TLS_LE_32,
9842 BFD_RELOC_X86_64_TPOFF32 },
9843 OPERAND_TYPE_IMM32_32S_64_DISP32_64 },
9844 { STRING_COMMA_LEN ("NTPOFF"), { BFD_RELOC_386_TLS_LE,
9845 _dummy_first_bfd_reloc_code_real },
9846 OPERAND_TYPE_NONE },
9847 { STRING_COMMA_LEN ("DTPOFF"), { BFD_RELOC_386_TLS_LDO_32,
9848 BFD_RELOC_X86_64_DTPOFF32 },
9849 OPERAND_TYPE_IMM32_32S_64_DISP32_64 },
9850 { STRING_COMMA_LEN ("GOTNTPOFF"),{ BFD_RELOC_386_TLS_GOTIE,
9851 _dummy_first_bfd_reloc_code_real },
9852 OPERAND_TYPE_NONE },
9853 { STRING_COMMA_LEN ("INDNTPOFF"),{ BFD_RELOC_386_TLS_IE,
9854 _dummy_first_bfd_reloc_code_real },
9855 OPERAND_TYPE_NONE },
9856 { STRING_COMMA_LEN ("GOT"), { BFD_RELOC_386_GOT32,
9857 BFD_RELOC_X86_64_GOT32 },
9858 OPERAND_TYPE_IMM32_32S_64_DISP32 },
9859 { STRING_COMMA_LEN ("TLSDESC"), { BFD_RELOC_386_TLS_GOTDESC,
9860 BFD_RELOC_X86_64_GOTPC32_TLSDESC },
9861 OPERAND_TYPE_IMM32_32S_DISP32 },
9862 { STRING_COMMA_LEN ("TLSCALL"), { BFD_RELOC_386_TLS_DESC_CALL,
9863 BFD_RELOC_X86_64_TLSDESC_CALL },
9864 OPERAND_TYPE_IMM32_32S_DISP32 },
9865 };
9866 char *cp;
9867 unsigned int j;
9868
9869 #if defined (OBJ_MAYBE_ELF)
9870 if (!IS_ELF)
9871 return NULL;
9872 #endif
9873
9874 for (cp = input_line_pointer; *cp != '@'; cp++)
9875 if (is_end_of_line[(unsigned char) *cp] || *cp == ',')
9876 return NULL;
9877
9878 for (j = 0; j < ARRAY_SIZE (gotrel); j++)
9879 {
9880 int len = gotrel[j].len;
9881 if (strncasecmp (cp + 1, gotrel[j].str, len) == 0)
9882 {
9883 if (gotrel[j].rel[object_64bit] != 0)
9884 {
9885 int first, second;
9886 char *tmpbuf, *past_reloc;
9887
9888 *rel = gotrel[j].rel[object_64bit];
9889
9890 if (types)
9891 {
9892 if (flag_code != CODE_64BIT)
9893 {
9894 types->bitfield.imm32 = 1;
9895 types->bitfield.disp32 = 1;
9896 }
9897 else
9898 *types = gotrel[j].types64;
9899 }
9900
9901 if (j != 0 && GOT_symbol == NULL)
9902 GOT_symbol = symbol_find_or_make (GLOBAL_OFFSET_TABLE_NAME);
9903
9904 /* The length of the first part of our input line. */
9905 first = cp - input_line_pointer;
9906
9907 /* The second part goes from after the reloc token until
9908 (and including) an end_of_line char or comma. */
9909 past_reloc = cp + 1 + len;
9910 cp = past_reloc;
9911 while (!is_end_of_line[(unsigned char) *cp] && *cp != ',')
9912 ++cp;
9913 second = cp + 1 - past_reloc;
9914
9915 /* Allocate and copy string. The trailing NUL shouldn't
9916 be necessary, but be safe. */
9917 tmpbuf = XNEWVEC (char, first + second + 2);
9918 memcpy (tmpbuf, input_line_pointer, first);
9919 if (second != 0 && *past_reloc != ' ')
9920 /* Replace the relocation token with ' ', so that
9921 errors like foo@GOTOFF1 will be detected. */
9922 tmpbuf[first++] = ' ';
9923 else
9924 /* Increment length by 1 if the relocation token is
9925 removed. */
9926 len++;
9927 if (adjust)
9928 *adjust = len;
9929 memcpy (tmpbuf + first, past_reloc, second);
9930 tmpbuf[first + second] = '\0';
9931 return tmpbuf;
9932 }
9933
9934 as_bad (_("@%s reloc is not supported with %d-bit output format"),
9935 gotrel[j].str, 1 << (5 + object_64bit));
9936 return NULL;
9937 }
9938 }
9939
9940 /* Might be a symbol version string. Don't as_bad here. */
9941 return NULL;
9942 }
9943 #endif
9944
9945 #ifdef TE_PE
9946 #ifdef lex_got
9947 #undef lex_got
9948 #endif
9949 /* Parse operands of the form
9950 <symbol>@SECREL32+<nnn>
9951
9952 If we find one, set up the correct relocation in RELOC and copy the
9953 input string, minus the `@SECREL32' into a malloc'd buffer for
9954 parsing by the calling routine. Return this buffer, and if ADJUST
9955 is non-null set it to the length of the string we removed from the
9956 input line. Otherwise return NULL.
9957
9958 This function is copied from the ELF version above adjusted for PE targets. */
9959
9960 static char *
9961 lex_got (enum bfd_reloc_code_real *rel ATTRIBUTE_UNUSED,
9962 int *adjust ATTRIBUTE_UNUSED,
9963 i386_operand_type *types)
9964 {
9965 static const struct
9966 {
9967 const char *str;
9968 int len;
9969 const enum bfd_reloc_code_real rel[2];
9970 const i386_operand_type types64;
9971 }
9972 gotrel[] =
9973 {
9974 { STRING_COMMA_LEN ("SECREL32"), { BFD_RELOC_32_SECREL,
9975 BFD_RELOC_32_SECREL },
9976 OPERAND_TYPE_IMM32_32S_64_DISP32_64 },
9977 };
9978
9979 char *cp;
9980 unsigned j;
9981
9982 for (cp = input_line_pointer; *cp != '@'; cp++)
9983 if (is_end_of_line[(unsigned char) *cp] || *cp == ',')
9984 return NULL;
9985
9986 for (j = 0; j < ARRAY_SIZE (gotrel); j++)
9987 {
9988 int len = gotrel[j].len;
9989
9990 if (strncasecmp (cp + 1, gotrel[j].str, len) == 0)
9991 {
9992 if (gotrel[j].rel[object_64bit] != 0)
9993 {
9994 int first, second;
9995 char *tmpbuf, *past_reloc;
9996
9997 *rel = gotrel[j].rel[object_64bit];
9998 if (adjust)
9999 *adjust = len;
10000
10001 if (types)
10002 {
10003 if (flag_code != CODE_64BIT)
10004 {
10005 types->bitfield.imm32 = 1;
10006 types->bitfield.disp32 = 1;
10007 }
10008 else
10009 *types = gotrel[j].types64;
10010 }
10011
10012 /* The length of the first part of our input line. */
10013 first = cp - input_line_pointer;
10014
10015 /* The second part goes from after the reloc token until
10016 (and including) an end_of_line char or comma. */
10017 past_reloc = cp + 1 + len;
10018 cp = past_reloc;
10019 while (!is_end_of_line[(unsigned char) *cp] && *cp != ',')
10020 ++cp;
10021 second = cp + 1 - past_reloc;
10022
10023 /* Allocate and copy string. The trailing NUL shouldn't
10024 be necessary, but be safe. */
10025 tmpbuf = XNEWVEC (char, first + second + 2);
10026 memcpy (tmpbuf, input_line_pointer, first);
10027 if (second != 0 && *past_reloc != ' ')
10028 /* Replace the relocation token with ' ', so that
10029 errors like foo@SECLREL321 will be detected. */
10030 tmpbuf[first++] = ' ';
10031 memcpy (tmpbuf + first, past_reloc, second);
10032 tmpbuf[first + second] = '\0';
10033 return tmpbuf;
10034 }
10035
10036 as_bad (_("@%s reloc is not supported with %d-bit output format"),
10037 gotrel[j].str, 1 << (5 + object_64bit));
10038 return NULL;
10039 }
10040 }
10041
10042 /* Might be a symbol version string. Don't as_bad here. */
10043 return NULL;
10044 }
10045
10046 #endif /* TE_PE */
10047
10048 bfd_reloc_code_real_type
10049 x86_cons (expressionS *exp, int size)
10050 {
10051 bfd_reloc_code_real_type got_reloc = NO_RELOC;
10052
10053 intel_syntax = -intel_syntax;
10054
10055 exp->X_md = 0;
10056 if (size == 4 || (object_64bit && size == 8))
10057 {
10058 /* Handle @GOTOFF and the like in an expression. */
10059 char *save;
10060 char *gotfree_input_line;
10061 int adjust = 0;
10062
10063 save = input_line_pointer;
10064 gotfree_input_line = lex_got (&got_reloc, &adjust, NULL);
10065 if (gotfree_input_line)
10066 input_line_pointer = gotfree_input_line;
10067
10068 expression (exp);
10069
10070 if (gotfree_input_line)
10071 {
10072 /* expression () has merrily parsed up to the end of line,
10073 or a comma - in the wrong buffer. Transfer how far
10074 input_line_pointer has moved to the right buffer. */
10075 input_line_pointer = (save
10076 + (input_line_pointer - gotfree_input_line)
10077 + adjust);
10078 free (gotfree_input_line);
10079 if (exp->X_op == O_constant
10080 || exp->X_op == O_absent
10081 || exp->X_op == O_illegal
10082 || exp->X_op == O_register
10083 || exp->X_op == O_big)
10084 {
10085 char c = *input_line_pointer;
10086 *input_line_pointer = 0;
10087 as_bad (_("missing or invalid expression `%s'"), save);
10088 *input_line_pointer = c;
10089 }
10090 else if ((got_reloc == BFD_RELOC_386_PLT32
10091 || got_reloc == BFD_RELOC_X86_64_PLT32)
10092 && exp->X_op != O_symbol)
10093 {
10094 char c = *input_line_pointer;
10095 *input_line_pointer = 0;
10096 as_bad (_("invalid PLT expression `%s'"), save);
10097 *input_line_pointer = c;
10098 }
10099 }
10100 }
10101 else
10102 expression (exp);
10103
10104 intel_syntax = -intel_syntax;
10105
10106 if (intel_syntax)
10107 i386_intel_simplify (exp);
10108
10109 return got_reloc;
10110 }
10111
10112 static void
10113 signed_cons (int size)
10114 {
10115 if (flag_code == CODE_64BIT)
10116 cons_sign = 1;
10117 cons (size);
10118 cons_sign = -1;
10119 }
10120
10121 #ifdef TE_PE
10122 static void
10123 pe_directive_secrel (int dummy ATTRIBUTE_UNUSED)
10124 {
10125 expressionS exp;
10126
10127 do
10128 {
10129 expression (&exp);
10130 if (exp.X_op == O_symbol)
10131 exp.X_op = O_secrel;
10132
10133 emit_expr (&exp, 4);
10134 }
10135 while (*input_line_pointer++ == ',');
10136
10137 input_line_pointer--;
10138 demand_empty_rest_of_line ();
10139 }
10140 #endif
10141
10142 /* Handle Vector operations. */
10143
10144 static char *
10145 check_VecOperations (char *op_string, char *op_end)
10146 {
10147 const reg_entry *mask;
10148 const char *saved;
10149 char *end_op;
10150
10151 while (*op_string
10152 && (op_end == NULL || op_string < op_end))
10153 {
10154 saved = op_string;
10155 if (*op_string == '{')
10156 {
10157 op_string++;
10158
10159 /* Check broadcasts. */
10160 if (strncmp (op_string, "1to", 3) == 0)
10161 {
10162 int bcst_type;
10163
10164 if (i.broadcast)
10165 goto duplicated_vec_op;
10166
10167 op_string += 3;
10168 if (*op_string == '8')
10169 bcst_type = 8;
10170 else if (*op_string == '4')
10171 bcst_type = 4;
10172 else if (*op_string == '2')
10173 bcst_type = 2;
10174 else if (*op_string == '1'
10175 && *(op_string+1) == '6')
10176 {
10177 bcst_type = 16;
10178 op_string++;
10179 }
10180 else
10181 {
10182 as_bad (_("Unsupported broadcast: `%s'"), saved);
10183 return NULL;
10184 }
10185 op_string++;
10186
10187 broadcast_op.type = bcst_type;
10188 broadcast_op.operand = this_operand;
10189 broadcast_op.bytes = 0;
10190 i.broadcast = &broadcast_op;
10191 }
10192 /* Check masking operation. */
10193 else if ((mask = parse_register (op_string, &end_op)) != NULL)
10194 {
10195 if (mask == &bad_reg)
10196 return NULL;
10197
10198 /* k0 can't be used for write mask. */
10199 if (mask->reg_type.bitfield.class != RegMask || !mask->reg_num)
10200 {
10201 as_bad (_("`%s%s' can't be used for write mask"),
10202 register_prefix, mask->reg_name);
10203 return NULL;
10204 }
10205
10206 if (!i.mask)
10207 {
10208 mask_op.mask = mask;
10209 mask_op.zeroing = 0;
10210 mask_op.operand = this_operand;
10211 i.mask = &mask_op;
10212 }
10213 else
10214 {
10215 if (i.mask->mask)
10216 goto duplicated_vec_op;
10217
10218 i.mask->mask = mask;
10219
10220 /* Only "{z}" is allowed here. No need to check
10221 zeroing mask explicitly. */
10222 if (i.mask->operand != this_operand)
10223 {
10224 as_bad (_("invalid write mask `%s'"), saved);
10225 return NULL;
10226 }
10227 }
10228
10229 op_string = end_op;
10230 }
10231 /* Check zeroing-flag for masking operation. */
10232 else if (*op_string == 'z')
10233 {
10234 if (!i.mask)
10235 {
10236 mask_op.mask = NULL;
10237 mask_op.zeroing = 1;
10238 mask_op.operand = this_operand;
10239 i.mask = &mask_op;
10240 }
10241 else
10242 {
10243 if (i.mask->zeroing)
10244 {
10245 duplicated_vec_op:
10246 as_bad (_("duplicated `%s'"), saved);
10247 return NULL;
10248 }
10249
10250 i.mask->zeroing = 1;
10251
10252 /* Only "{%k}" is allowed here. No need to check mask
10253 register explicitly. */
10254 if (i.mask->operand != this_operand)
10255 {
10256 as_bad (_("invalid zeroing-masking `%s'"),
10257 saved);
10258 return NULL;
10259 }
10260 }
10261
10262 op_string++;
10263 }
10264 else
10265 goto unknown_vec_op;
10266
10267 if (*op_string != '}')
10268 {
10269 as_bad (_("missing `}' in `%s'"), saved);
10270 return NULL;
10271 }
10272 op_string++;
10273
10274 /* Strip whitespace since the addition of pseudo prefixes
10275 changed how the scrubber treats '{'. */
10276 if (is_space_char (*op_string))
10277 ++op_string;
10278
10279 continue;
10280 }
10281 unknown_vec_op:
10282 /* We don't know this one. */
10283 as_bad (_("unknown vector operation: `%s'"), saved);
10284 return NULL;
10285 }
10286
10287 if (i.mask && i.mask->zeroing && !i.mask->mask)
10288 {
10289 as_bad (_("zeroing-masking only allowed with write mask"));
10290 return NULL;
10291 }
10292
10293 return op_string;
10294 }
10295
10296 static int
10297 i386_immediate (char *imm_start)
10298 {
10299 char *save_input_line_pointer;
10300 char *gotfree_input_line;
10301 segT exp_seg = 0;
10302 expressionS *exp;
10303 i386_operand_type types;
10304
10305 operand_type_set (&types, ~0);
10306
10307 if (i.imm_operands == MAX_IMMEDIATE_OPERANDS)
10308 {
10309 as_bad (_("at most %d immediate operands are allowed"),
10310 MAX_IMMEDIATE_OPERANDS);
10311 return 0;
10312 }
10313
10314 exp = &im_expressions[i.imm_operands++];
10315 i.op[this_operand].imms = exp;
10316
10317 if (is_space_char (*imm_start))
10318 ++imm_start;
10319
10320 save_input_line_pointer = input_line_pointer;
10321 input_line_pointer = imm_start;
10322
10323 gotfree_input_line = lex_got (&i.reloc[this_operand], NULL, &types);
10324 if (gotfree_input_line)
10325 input_line_pointer = gotfree_input_line;
10326
10327 exp_seg = expression (exp);
10328
10329 SKIP_WHITESPACE ();
10330
10331 /* Handle vector operations. */
10332 if (*input_line_pointer == '{')
10333 {
10334 input_line_pointer = check_VecOperations (input_line_pointer,
10335 NULL);
10336 if (input_line_pointer == NULL)
10337 return 0;
10338 }
10339
10340 if (*input_line_pointer)
10341 as_bad (_("junk `%s' after expression"), input_line_pointer);
10342
10343 input_line_pointer = save_input_line_pointer;
10344 if (gotfree_input_line)
10345 {
10346 free (gotfree_input_line);
10347
10348 if (exp->X_op == O_constant || exp->X_op == O_register)
10349 exp->X_op = O_illegal;
10350 }
10351
10352 return i386_finalize_immediate (exp_seg, exp, types, imm_start);
10353 }
10354
10355 static int
10356 i386_finalize_immediate (segT exp_seg ATTRIBUTE_UNUSED, expressionS *exp,
10357 i386_operand_type types, const char *imm_start)
10358 {
10359 if (exp->X_op == O_absent || exp->X_op == O_illegal || exp->X_op == O_big)
10360 {
10361 if (imm_start)
10362 as_bad (_("missing or invalid immediate expression `%s'"),
10363 imm_start);
10364 return 0;
10365 }
10366 else if (exp->X_op == O_constant)
10367 {
10368 /* Size it properly later. */
10369 i.types[this_operand].bitfield.imm64 = 1;
10370 /* If not 64bit, sign extend val. */
10371 if (flag_code != CODE_64BIT
10372 && (exp->X_add_number & ~(((addressT) 2 << 31) - 1)) == 0)
10373 exp->X_add_number
10374 = (exp->X_add_number ^ ((addressT) 1 << 31)) - ((addressT) 1 << 31);
10375 }
10376 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
10377 else if (OUTPUT_FLAVOR == bfd_target_aout_flavour
10378 && exp_seg != absolute_section
10379 && exp_seg != text_section
10380 && exp_seg != data_section
10381 && exp_seg != bss_section
10382 && exp_seg != undefined_section
10383 && !bfd_is_com_section (exp_seg))
10384 {
10385 as_bad (_("unimplemented segment %s in operand"), exp_seg->name);
10386 return 0;
10387 }
10388 #endif
10389 else if (!intel_syntax && exp_seg == reg_section)
10390 {
10391 if (imm_start)
10392 as_bad (_("illegal immediate register operand %s"), imm_start);
10393 return 0;
10394 }
10395 else
10396 {
10397 /* This is an address. The size of the address will be
10398 determined later, depending on destination register,
10399 suffix, or the default for the section. */
10400 i.types[this_operand].bitfield.imm8 = 1;
10401 i.types[this_operand].bitfield.imm16 = 1;
10402 i.types[this_operand].bitfield.imm32 = 1;
10403 i.types[this_operand].bitfield.imm32s = 1;
10404 i.types[this_operand].bitfield.imm64 = 1;
10405 i.types[this_operand] = operand_type_and (i.types[this_operand],
10406 types);
10407 }
10408
10409 return 1;
10410 }
10411
10412 static char *
10413 i386_scale (char *scale)
10414 {
10415 offsetT val;
10416 char *save = input_line_pointer;
10417
10418 input_line_pointer = scale;
10419 val = get_absolute_expression ();
10420
10421 switch (val)
10422 {
10423 case 1:
10424 i.log2_scale_factor = 0;
10425 break;
10426 case 2:
10427 i.log2_scale_factor = 1;
10428 break;
10429 case 4:
10430 i.log2_scale_factor = 2;
10431 break;
10432 case 8:
10433 i.log2_scale_factor = 3;
10434 break;
10435 default:
10436 {
10437 char sep = *input_line_pointer;
10438
10439 *input_line_pointer = '\0';
10440 as_bad (_("expecting scale factor of 1, 2, 4, or 8: got `%s'"),
10441 scale);
10442 *input_line_pointer = sep;
10443 input_line_pointer = save;
10444 return NULL;
10445 }
10446 }
10447 if (i.log2_scale_factor != 0 && i.index_reg == 0)
10448 {
10449 as_warn (_("scale factor of %d without an index register"),
10450 1 << i.log2_scale_factor);
10451 i.log2_scale_factor = 0;
10452 }
10453 scale = input_line_pointer;
10454 input_line_pointer = save;
10455 return scale;
10456 }
10457
10458 static int
10459 i386_displacement (char *disp_start, char *disp_end)
10460 {
10461 expressionS *exp;
10462 segT exp_seg = 0;
10463 char *save_input_line_pointer;
10464 char *gotfree_input_line;
10465 int override;
10466 i386_operand_type bigdisp, types = anydisp;
10467 int ret;
10468
10469 if (i.disp_operands == MAX_MEMORY_OPERANDS)
10470 {
10471 as_bad (_("at most %d displacement operands are allowed"),
10472 MAX_MEMORY_OPERANDS);
10473 return 0;
10474 }
10475
10476 operand_type_set (&bigdisp, 0);
10477 if (i.jumpabsolute
10478 || i.types[this_operand].bitfield.baseindex
10479 || (current_templates->start->opcode_modifier.jump != JUMP
10480 && current_templates->start->opcode_modifier.jump != JUMP_DWORD))
10481 {
10482 i386_addressing_mode ();
10483 override = (i.prefix[ADDR_PREFIX] != 0);
10484 if (flag_code == CODE_64BIT)
10485 {
10486 if (!override)
10487 {
10488 bigdisp.bitfield.disp32s = 1;
10489 bigdisp.bitfield.disp64 = 1;
10490 }
10491 else
10492 bigdisp.bitfield.disp32 = 1;
10493 }
10494 else if ((flag_code == CODE_16BIT) ^ override)
10495 bigdisp.bitfield.disp16 = 1;
10496 else
10497 bigdisp.bitfield.disp32 = 1;
10498 }
10499 else
10500 {
10501 /* For PC-relative branches, the width of the displacement may be
10502 dependent upon data size, but is never dependent upon address size.
10503 Also make sure to not unintentionally match against a non-PC-relative
10504 branch template. */
10505 static templates aux_templates;
10506 const insn_template *t = current_templates->start;
10507 bfd_boolean has_intel64 = FALSE;
10508
10509 aux_templates.start = t;
10510 while (++t < current_templates->end)
10511 {
10512 if (t->opcode_modifier.jump
10513 != current_templates->start->opcode_modifier.jump)
10514 break;
10515 if ((t->opcode_modifier.isa64 >= INTEL64))
10516 has_intel64 = TRUE;
10517 }
10518 if (t < current_templates->end)
10519 {
10520 aux_templates.end = t;
10521 current_templates = &aux_templates;
10522 }
10523
10524 override = (i.prefix[DATA_PREFIX] != 0);
10525 if (flag_code == CODE_64BIT)
10526 {
10527 if ((override || i.suffix == WORD_MNEM_SUFFIX)
10528 && (!intel64 || !has_intel64))
10529 bigdisp.bitfield.disp16 = 1;
10530 else
10531 bigdisp.bitfield.disp32s = 1;
10532 }
10533 else
10534 {
10535 if (!override)
10536 override = (i.suffix == (flag_code != CODE_16BIT
10537 ? WORD_MNEM_SUFFIX
10538 : LONG_MNEM_SUFFIX));
10539 bigdisp.bitfield.disp32 = 1;
10540 if ((flag_code == CODE_16BIT) ^ override)
10541 {
10542 bigdisp.bitfield.disp32 = 0;
10543 bigdisp.bitfield.disp16 = 1;
10544 }
10545 }
10546 }
10547 i.types[this_operand] = operand_type_or (i.types[this_operand],
10548 bigdisp);
10549
10550 exp = &disp_expressions[i.disp_operands];
10551 i.op[this_operand].disps = exp;
10552 i.disp_operands++;
10553 save_input_line_pointer = input_line_pointer;
10554 input_line_pointer = disp_start;
10555 END_STRING_AND_SAVE (disp_end);
10556
10557 #ifndef GCC_ASM_O_HACK
10558 #define GCC_ASM_O_HACK 0
10559 #endif
10560 #if GCC_ASM_O_HACK
10561 END_STRING_AND_SAVE (disp_end + 1);
10562 if (i.types[this_operand].bitfield.baseIndex
10563 && displacement_string_end[-1] == '+')
10564 {
10565 /* This hack is to avoid a warning when using the "o"
10566 constraint within gcc asm statements.
10567 For instance:
10568
10569 #define _set_tssldt_desc(n,addr,limit,type) \
10570 __asm__ __volatile__ ( \
10571 "movw %w2,%0\n\t" \
10572 "movw %w1,2+%0\n\t" \
10573 "rorl $16,%1\n\t" \
10574 "movb %b1,4+%0\n\t" \
10575 "movb %4,5+%0\n\t" \
10576 "movb $0,6+%0\n\t" \
10577 "movb %h1,7+%0\n\t" \
10578 "rorl $16,%1" \
10579 : "=o"(*(n)) : "q" (addr), "ri"(limit), "i"(type))
10580
10581 This works great except that the output assembler ends
10582 up looking a bit weird if it turns out that there is
10583 no offset. You end up producing code that looks like:
10584
10585 #APP
10586 movw $235,(%eax)
10587 movw %dx,2+(%eax)
10588 rorl $16,%edx
10589 movb %dl,4+(%eax)
10590 movb $137,5+(%eax)
10591 movb $0,6+(%eax)
10592 movb %dh,7+(%eax)
10593 rorl $16,%edx
10594 #NO_APP
10595
10596 So here we provide the missing zero. */
10597
10598 *displacement_string_end = '0';
10599 }
10600 #endif
10601 gotfree_input_line = lex_got (&i.reloc[this_operand], NULL, &types);
10602 if (gotfree_input_line)
10603 input_line_pointer = gotfree_input_line;
10604
10605 exp_seg = expression (exp);
10606
10607 SKIP_WHITESPACE ();
10608 if (*input_line_pointer)
10609 as_bad (_("junk `%s' after expression"), input_line_pointer);
10610 #if GCC_ASM_O_HACK
10611 RESTORE_END_STRING (disp_end + 1);
10612 #endif
10613 input_line_pointer = save_input_line_pointer;
10614 if (gotfree_input_line)
10615 {
10616 free (gotfree_input_line);
10617
10618 if (exp->X_op == O_constant || exp->X_op == O_register)
10619 exp->X_op = O_illegal;
10620 }
10621
10622 ret = i386_finalize_displacement (exp_seg, exp, types, disp_start);
10623
10624 RESTORE_END_STRING (disp_end);
10625
10626 return ret;
10627 }
10628
10629 static int
10630 i386_finalize_displacement (segT exp_seg ATTRIBUTE_UNUSED, expressionS *exp,
10631 i386_operand_type types, const char *disp_start)
10632 {
10633 i386_operand_type bigdisp;
10634 int ret = 1;
10635
10636 /* We do this to make sure that the section symbol is in
10637 the symbol table. We will ultimately change the relocation
10638 to be relative to the beginning of the section. */
10639 if (i.reloc[this_operand] == BFD_RELOC_386_GOTOFF
10640 || i.reloc[this_operand] == BFD_RELOC_X86_64_GOTPCREL
10641 || i.reloc[this_operand] == BFD_RELOC_X86_64_GOTOFF64)
10642 {
10643 if (exp->X_op != O_symbol)
10644 goto inv_disp;
10645
10646 if (S_IS_LOCAL (exp->X_add_symbol)
10647 && S_GET_SEGMENT (exp->X_add_symbol) != undefined_section
10648 && S_GET_SEGMENT (exp->X_add_symbol) != expr_section)
10649 section_symbol (S_GET_SEGMENT (exp->X_add_symbol));
10650 exp->X_op = O_subtract;
10651 exp->X_op_symbol = GOT_symbol;
10652 if (i.reloc[this_operand] == BFD_RELOC_X86_64_GOTPCREL)
10653 i.reloc[this_operand] = BFD_RELOC_32_PCREL;
10654 else if (i.reloc[this_operand] == BFD_RELOC_X86_64_GOTOFF64)
10655 i.reloc[this_operand] = BFD_RELOC_64;
10656 else
10657 i.reloc[this_operand] = BFD_RELOC_32;
10658 }
10659
10660 else if (exp->X_op == O_absent
10661 || exp->X_op == O_illegal
10662 || exp->X_op == O_big)
10663 {
10664 inv_disp:
10665 as_bad (_("missing or invalid displacement expression `%s'"),
10666 disp_start);
10667 ret = 0;
10668 }
10669
10670 else if (flag_code == CODE_64BIT
10671 && !i.prefix[ADDR_PREFIX]
10672 && exp->X_op == O_constant)
10673 {
10674 /* Since displacement is signed extended to 64bit, don't allow
10675 disp32 and turn off disp32s if they are out of range. */
10676 i.types[this_operand].bitfield.disp32 = 0;
10677 if (!fits_in_signed_long (exp->X_add_number))
10678 {
10679 i.types[this_operand].bitfield.disp32s = 0;
10680 if (i.types[this_operand].bitfield.baseindex)
10681 {
10682 as_bad (_("0x%lx out range of signed 32bit displacement"),
10683 (long) exp->X_add_number);
10684 ret = 0;
10685 }
10686 }
10687 }
10688
10689 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
10690 else if (exp->X_op != O_constant
10691 && OUTPUT_FLAVOR == bfd_target_aout_flavour
10692 && exp_seg != absolute_section
10693 && exp_seg != text_section
10694 && exp_seg != data_section
10695 && exp_seg != bss_section
10696 && exp_seg != undefined_section
10697 && !bfd_is_com_section (exp_seg))
10698 {
10699 as_bad (_("unimplemented segment %s in operand"), exp_seg->name);
10700 ret = 0;
10701 }
10702 #endif
10703
10704 if (current_templates->start->opcode_modifier.jump == JUMP_BYTE
10705 /* Constants get taken care of by optimize_disp(). */
10706 && exp->X_op != O_constant)
10707 i.types[this_operand].bitfield.disp8 = 1;
10708
10709 /* Check if this is a displacement only operand. */
10710 bigdisp = i.types[this_operand];
10711 bigdisp.bitfield.disp8 = 0;
10712 bigdisp.bitfield.disp16 = 0;
10713 bigdisp.bitfield.disp32 = 0;
10714 bigdisp.bitfield.disp32s = 0;
10715 bigdisp.bitfield.disp64 = 0;
10716 if (operand_type_all_zero (&bigdisp))
10717 i.types[this_operand] = operand_type_and (i.types[this_operand],
10718 types);
10719
10720 return ret;
10721 }
10722
10723 /* Return the active addressing mode, taking address override and
10724 registers forming the address into consideration. Update the
10725 address override prefix if necessary. */
10726
10727 static enum flag_code
10728 i386_addressing_mode (void)
10729 {
10730 enum flag_code addr_mode;
10731
10732 if (i.prefix[ADDR_PREFIX])
10733 addr_mode = flag_code == CODE_32BIT ? CODE_16BIT : CODE_32BIT;
10734 else if (flag_code == CODE_16BIT
10735 && current_templates->start->cpu_flags.bitfield.cpumpx
10736 /* Avoid replacing the "16-bit addressing not allowed" diagnostic
10737 from md_assemble() by "is not a valid base/index expression"
10738 when there is a base and/or index. */
10739 && !i.types[this_operand].bitfield.baseindex)
10740 {
10741 /* MPX insn memory operands with neither base nor index must be forced
10742 to use 32-bit addressing in 16-bit mode. */
10743 addr_mode = CODE_32BIT;
10744 i.prefix[ADDR_PREFIX] = ADDR_PREFIX_OPCODE;
10745 ++i.prefixes;
10746 gas_assert (!i.types[this_operand].bitfield.disp16);
10747 gas_assert (!i.types[this_operand].bitfield.disp32);
10748 }
10749 else
10750 {
10751 addr_mode = flag_code;
10752
10753 #if INFER_ADDR_PREFIX
10754 if (i.mem_operands == 0)
10755 {
10756 /* Infer address prefix from the first memory operand. */
10757 const reg_entry *addr_reg = i.base_reg;
10758
10759 if (addr_reg == NULL)
10760 addr_reg = i.index_reg;
10761
10762 if (addr_reg)
10763 {
10764 if (addr_reg->reg_type.bitfield.dword)
10765 addr_mode = CODE_32BIT;
10766 else if (flag_code != CODE_64BIT
10767 && addr_reg->reg_type.bitfield.word)
10768 addr_mode = CODE_16BIT;
10769
10770 if (addr_mode != flag_code)
10771 {
10772 i.prefix[ADDR_PREFIX] = ADDR_PREFIX_OPCODE;
10773 i.prefixes += 1;
10774 /* Change the size of any displacement too. At most one
10775 of Disp16 or Disp32 is set.
10776 FIXME. There doesn't seem to be any real need for
10777 separate Disp16 and Disp32 flags. The same goes for
10778 Imm16 and Imm32. Removing them would probably clean
10779 up the code quite a lot. */
10780 if (flag_code != CODE_64BIT
10781 && (i.types[this_operand].bitfield.disp16
10782 || i.types[this_operand].bitfield.disp32))
10783 i.types[this_operand]
10784 = operand_type_xor (i.types[this_operand], disp16_32);
10785 }
10786 }
10787 }
10788 #endif
10789 }
10790
10791 return addr_mode;
10792 }
10793
10794 /* Make sure the memory operand we've been dealt is valid.
10795 Return 1 on success, 0 on a failure. */
10796
10797 static int
10798 i386_index_check (const char *operand_string)
10799 {
10800 const char *kind = "base/index";
10801 enum flag_code addr_mode = i386_addressing_mode ();
10802
10803 if (current_templates->start->opcode_modifier.isstring
10804 && !current_templates->start->cpu_flags.bitfield.cpupadlock
10805 && (current_templates->end[-1].opcode_modifier.isstring
10806 || i.mem_operands))
10807 {
10808 /* Memory operands of string insns are special in that they only allow
10809 a single register (rDI, rSI, or rBX) as their memory address. */
10810 const reg_entry *expected_reg;
10811 static const char *di_si[][2] =
10812 {
10813 { "esi", "edi" },
10814 { "si", "di" },
10815 { "rsi", "rdi" }
10816 };
10817 static const char *bx[] = { "ebx", "bx", "rbx" };
10818
10819 kind = "string address";
10820
10821 if (current_templates->start->opcode_modifier.repprefixok)
10822 {
10823 int es_op = current_templates->end[-1].opcode_modifier.isstring
10824 - IS_STRING_ES_OP0;
10825 int op = 0;
10826
10827 if (!current_templates->end[-1].operand_types[0].bitfield.baseindex
10828 || ((!i.mem_operands != !intel_syntax)
10829 && current_templates->end[-1].operand_types[1]
10830 .bitfield.baseindex))
10831 op = 1;
10832 expected_reg = hash_find (reg_hash, di_si[addr_mode][op == es_op]);
10833 }
10834 else
10835 expected_reg = hash_find (reg_hash, bx[addr_mode]);
10836
10837 if (i.base_reg != expected_reg
10838 || i.index_reg
10839 || operand_type_check (i.types[this_operand], disp))
10840 {
10841 /* The second memory operand must have the same size as
10842 the first one. */
10843 if (i.mem_operands
10844 && i.base_reg
10845 && !((addr_mode == CODE_64BIT
10846 && i.base_reg->reg_type.bitfield.qword)
10847 || (addr_mode == CODE_32BIT
10848 ? i.base_reg->reg_type.bitfield.dword
10849 : i.base_reg->reg_type.bitfield.word)))
10850 goto bad_address;
10851
10852 as_warn (_("`%s' is not valid here (expected `%c%s%s%c')"),
10853 operand_string,
10854 intel_syntax ? '[' : '(',
10855 register_prefix,
10856 expected_reg->reg_name,
10857 intel_syntax ? ']' : ')');
10858 return 1;
10859 }
10860 else
10861 return 1;
10862
10863 bad_address:
10864 as_bad (_("`%s' is not a valid %s expression"),
10865 operand_string, kind);
10866 return 0;
10867 }
10868 else
10869 {
10870 if (addr_mode != CODE_16BIT)
10871 {
10872 /* 32-bit/64-bit checks. */
10873 if ((i.base_reg
10874 && ((addr_mode == CODE_64BIT
10875 ? !i.base_reg->reg_type.bitfield.qword
10876 : !i.base_reg->reg_type.bitfield.dword)
10877 || (i.index_reg && i.base_reg->reg_num == RegIP)
10878 || i.base_reg->reg_num == RegIZ))
10879 || (i.index_reg
10880 && !i.index_reg->reg_type.bitfield.xmmword
10881 && !i.index_reg->reg_type.bitfield.ymmword
10882 && !i.index_reg->reg_type.bitfield.zmmword
10883 && ((addr_mode == CODE_64BIT
10884 ? !i.index_reg->reg_type.bitfield.qword
10885 : !i.index_reg->reg_type.bitfield.dword)
10886 || !i.index_reg->reg_type.bitfield.baseindex)))
10887 goto bad_address;
10888
10889 /* bndmk, bndldx, and bndstx have special restrictions. */
10890 if (current_templates->start->base_opcode == 0xf30f1b
10891 || (current_templates->start->base_opcode & ~1) == 0x0f1a)
10892 {
10893 /* They cannot use RIP-relative addressing. */
10894 if (i.base_reg && i.base_reg->reg_num == RegIP)
10895 {
10896 as_bad (_("`%s' cannot be used here"), operand_string);
10897 return 0;
10898 }
10899
10900 /* bndldx and bndstx ignore their scale factor. */
10901 if (current_templates->start->base_opcode != 0xf30f1b
10902 && i.log2_scale_factor)
10903 as_warn (_("register scaling is being ignored here"));
10904 }
10905 }
10906 else
10907 {
10908 /* 16-bit checks. */
10909 if ((i.base_reg
10910 && (!i.base_reg->reg_type.bitfield.word
10911 || !i.base_reg->reg_type.bitfield.baseindex))
10912 || (i.index_reg
10913 && (!i.index_reg->reg_type.bitfield.word
10914 || !i.index_reg->reg_type.bitfield.baseindex
10915 || !(i.base_reg
10916 && i.base_reg->reg_num < 6
10917 && i.index_reg->reg_num >= 6
10918 && i.log2_scale_factor == 0))))
10919 goto bad_address;
10920 }
10921 }
10922 return 1;
10923 }
10924
10925 /* Handle vector immediates. */
10926
10927 static int
10928 RC_SAE_immediate (const char *imm_start)
10929 {
10930 unsigned int match_found, j;
10931 const char *pstr = imm_start;
10932 expressionS *exp;
10933
10934 if (*pstr != '{')
10935 return 0;
10936
10937 pstr++;
10938 match_found = 0;
10939 for (j = 0; j < ARRAY_SIZE (RC_NamesTable); j++)
10940 {
10941 if (!strncmp (pstr, RC_NamesTable[j].name, RC_NamesTable[j].len))
10942 {
10943 if (!i.rounding)
10944 {
10945 rc_op.type = RC_NamesTable[j].type;
10946 rc_op.operand = this_operand;
10947 i.rounding = &rc_op;
10948 }
10949 else
10950 {
10951 as_bad (_("duplicated `%s'"), imm_start);
10952 return 0;
10953 }
10954 pstr += RC_NamesTable[j].len;
10955 match_found = 1;
10956 break;
10957 }
10958 }
10959 if (!match_found)
10960 return 0;
10961
10962 if (*pstr++ != '}')
10963 {
10964 as_bad (_("Missing '}': '%s'"), imm_start);
10965 return 0;
10966 }
10967 /* RC/SAE immediate string should contain nothing more. */;
10968 if (*pstr != 0)
10969 {
10970 as_bad (_("Junk after '}': '%s'"), imm_start);
10971 return 0;
10972 }
10973
10974 exp = &im_expressions[i.imm_operands++];
10975 i.op[this_operand].imms = exp;
10976
10977 exp->X_op = O_constant;
10978 exp->X_add_number = 0;
10979 exp->X_add_symbol = (symbolS *) 0;
10980 exp->X_op_symbol = (symbolS *) 0;
10981
10982 i.types[this_operand].bitfield.imm8 = 1;
10983 return 1;
10984 }
10985
10986 /* Only string instructions can have a second memory operand, so
10987 reduce current_templates to just those if it contains any. */
10988 static int
10989 maybe_adjust_templates (void)
10990 {
10991 const insn_template *t;
10992
10993 gas_assert (i.mem_operands == 1);
10994
10995 for (t = current_templates->start; t < current_templates->end; ++t)
10996 if (t->opcode_modifier.isstring)
10997 break;
10998
10999 if (t < current_templates->end)
11000 {
11001 static templates aux_templates;
11002 bfd_boolean recheck;
11003
11004 aux_templates.start = t;
11005 for (; t < current_templates->end; ++t)
11006 if (!t->opcode_modifier.isstring)
11007 break;
11008 aux_templates.end = t;
11009
11010 /* Determine whether to re-check the first memory operand. */
11011 recheck = (aux_templates.start != current_templates->start
11012 || t != current_templates->end);
11013
11014 current_templates = &aux_templates;
11015
11016 if (recheck)
11017 {
11018 i.mem_operands = 0;
11019 if (i.memop1_string != NULL
11020 && i386_index_check (i.memop1_string) == 0)
11021 return 0;
11022 i.mem_operands = 1;
11023 }
11024 }
11025
11026 return 1;
11027 }
11028
11029 /* Parse OPERAND_STRING into the i386_insn structure I. Returns zero
11030 on error. */
11031
11032 static int
11033 i386_att_operand (char *operand_string)
11034 {
11035 const reg_entry *r;
11036 char *end_op;
11037 char *op_string = operand_string;
11038
11039 if (is_space_char (*op_string))
11040 ++op_string;
11041
11042 /* We check for an absolute prefix (differentiating,
11043 for example, 'jmp pc_relative_label' from 'jmp *absolute_label'. */
11044 if (*op_string == ABSOLUTE_PREFIX)
11045 {
11046 ++op_string;
11047 if (is_space_char (*op_string))
11048 ++op_string;
11049 i.jumpabsolute = TRUE;
11050 }
11051
11052 /* Check if operand is a register. */
11053 if ((r = parse_register (op_string, &end_op)) != NULL)
11054 {
11055 i386_operand_type temp;
11056
11057 if (r == &bad_reg)
11058 return 0;
11059
11060 /* Check for a segment override by searching for ':' after a
11061 segment register. */
11062 op_string = end_op;
11063 if (is_space_char (*op_string))
11064 ++op_string;
11065 if (*op_string == ':' && r->reg_type.bitfield.class == SReg)
11066 {
11067 switch (r->reg_num)
11068 {
11069 case 0:
11070 i.seg[i.mem_operands] = &es;
11071 break;
11072 case 1:
11073 i.seg[i.mem_operands] = &cs;
11074 break;
11075 case 2:
11076 i.seg[i.mem_operands] = &ss;
11077 break;
11078 case 3:
11079 i.seg[i.mem_operands] = &ds;
11080 break;
11081 case 4:
11082 i.seg[i.mem_operands] = &fs;
11083 break;
11084 case 5:
11085 i.seg[i.mem_operands] = &gs;
11086 break;
11087 }
11088
11089 /* Skip the ':' and whitespace. */
11090 ++op_string;
11091 if (is_space_char (*op_string))
11092 ++op_string;
11093
11094 if (!is_digit_char (*op_string)
11095 && !is_identifier_char (*op_string)
11096 && *op_string != '('
11097 && *op_string != ABSOLUTE_PREFIX)
11098 {
11099 as_bad (_("bad memory operand `%s'"), op_string);
11100 return 0;
11101 }
11102 /* Handle case of %es:*foo. */
11103 if (*op_string == ABSOLUTE_PREFIX)
11104 {
11105 ++op_string;
11106 if (is_space_char (*op_string))
11107 ++op_string;
11108 i.jumpabsolute = TRUE;
11109 }
11110 goto do_memory_reference;
11111 }
11112
11113 /* Handle vector operations. */
11114 if (*op_string == '{')
11115 {
11116 op_string = check_VecOperations (op_string, NULL);
11117 if (op_string == NULL)
11118 return 0;
11119 }
11120
11121 if (*op_string)
11122 {
11123 as_bad (_("junk `%s' after register"), op_string);
11124 return 0;
11125 }
11126 temp = r->reg_type;
11127 temp.bitfield.baseindex = 0;
11128 i.types[this_operand] = operand_type_or (i.types[this_operand],
11129 temp);
11130 i.types[this_operand].bitfield.unspecified = 0;
11131 i.op[this_operand].regs = r;
11132 i.reg_operands++;
11133 }
11134 else if (*op_string == REGISTER_PREFIX)
11135 {
11136 as_bad (_("bad register name `%s'"), op_string);
11137 return 0;
11138 }
11139 else if (*op_string == IMMEDIATE_PREFIX)
11140 {
11141 ++op_string;
11142 if (i.jumpabsolute)
11143 {
11144 as_bad (_("immediate operand illegal with absolute jump"));
11145 return 0;
11146 }
11147 if (!i386_immediate (op_string))
11148 return 0;
11149 }
11150 else if (RC_SAE_immediate (operand_string))
11151 {
11152 /* If it is a RC or SAE immediate, do nothing. */
11153 ;
11154 }
11155 else if (is_digit_char (*op_string)
11156 || is_identifier_char (*op_string)
11157 || *op_string == '"'
11158 || *op_string == '(')
11159 {
11160 /* This is a memory reference of some sort. */
11161 char *base_string;
11162
11163 /* Start and end of displacement string expression (if found). */
11164 char *displacement_string_start;
11165 char *displacement_string_end;
11166 char *vop_start;
11167
11168 do_memory_reference:
11169 if (i.mem_operands == 1 && !maybe_adjust_templates ())
11170 return 0;
11171 if ((i.mem_operands == 1
11172 && !current_templates->start->opcode_modifier.isstring)
11173 || i.mem_operands == 2)
11174 {
11175 as_bad (_("too many memory references for `%s'"),
11176 current_templates->start->name);
11177 return 0;
11178 }
11179
11180 /* Check for base index form. We detect the base index form by
11181 looking for an ')' at the end of the operand, searching
11182 for the '(' matching it, and finding a REGISTER_PREFIX or ','
11183 after the '('. */
11184 base_string = op_string + strlen (op_string);
11185
11186 /* Handle vector operations. */
11187 vop_start = strchr (op_string, '{');
11188 if (vop_start && vop_start < base_string)
11189 {
11190 if (check_VecOperations (vop_start, base_string) == NULL)
11191 return 0;
11192 base_string = vop_start;
11193 }
11194
11195 --base_string;
11196 if (is_space_char (*base_string))
11197 --base_string;
11198
11199 /* If we only have a displacement, set-up for it to be parsed later. */
11200 displacement_string_start = op_string;
11201 displacement_string_end = base_string + 1;
11202
11203 if (*base_string == ')')
11204 {
11205 char *temp_string;
11206 unsigned int parens_balanced = 1;
11207 /* We've already checked that the number of left & right ()'s are
11208 equal, so this loop will not be infinite. */
11209 do
11210 {
11211 base_string--;
11212 if (*base_string == ')')
11213 parens_balanced++;
11214 if (*base_string == '(')
11215 parens_balanced--;
11216 }
11217 while (parens_balanced);
11218
11219 temp_string = base_string;
11220
11221 /* Skip past '(' and whitespace. */
11222 ++base_string;
11223 if (is_space_char (*base_string))
11224 ++base_string;
11225
11226 if (*base_string == ','
11227 || ((i.base_reg = parse_register (base_string, &end_op))
11228 != NULL))
11229 {
11230 displacement_string_end = temp_string;
11231
11232 i.types[this_operand].bitfield.baseindex = 1;
11233
11234 if (i.base_reg)
11235 {
11236 if (i.base_reg == &bad_reg)
11237 return 0;
11238 base_string = end_op;
11239 if (is_space_char (*base_string))
11240 ++base_string;
11241 }
11242
11243 /* There may be an index reg or scale factor here. */
11244 if (*base_string == ',')
11245 {
11246 ++base_string;
11247 if (is_space_char (*base_string))
11248 ++base_string;
11249
11250 if ((i.index_reg = parse_register (base_string, &end_op))
11251 != NULL)
11252 {
11253 if (i.index_reg == &bad_reg)
11254 return 0;
11255 base_string = end_op;
11256 if (is_space_char (*base_string))
11257 ++base_string;
11258 if (*base_string == ',')
11259 {
11260 ++base_string;
11261 if (is_space_char (*base_string))
11262 ++base_string;
11263 }
11264 else if (*base_string != ')')
11265 {
11266 as_bad (_("expecting `,' or `)' "
11267 "after index register in `%s'"),
11268 operand_string);
11269 return 0;
11270 }
11271 }
11272 else if (*base_string == REGISTER_PREFIX)
11273 {
11274 end_op = strchr (base_string, ',');
11275 if (end_op)
11276 *end_op = '\0';
11277 as_bad (_("bad register name `%s'"), base_string);
11278 return 0;
11279 }
11280
11281 /* Check for scale factor. */
11282 if (*base_string != ')')
11283 {
11284 char *end_scale = i386_scale (base_string);
11285
11286 if (!end_scale)
11287 return 0;
11288
11289 base_string = end_scale;
11290 if (is_space_char (*base_string))
11291 ++base_string;
11292 if (*base_string != ')')
11293 {
11294 as_bad (_("expecting `)' "
11295 "after scale factor in `%s'"),
11296 operand_string);
11297 return 0;
11298 }
11299 }
11300 else if (!i.index_reg)
11301 {
11302 as_bad (_("expecting index register or scale factor "
11303 "after `,'; got '%c'"),
11304 *base_string);
11305 return 0;
11306 }
11307 }
11308 else if (*base_string != ')')
11309 {
11310 as_bad (_("expecting `,' or `)' "
11311 "after base register in `%s'"),
11312 operand_string);
11313 return 0;
11314 }
11315 }
11316 else if (*base_string == REGISTER_PREFIX)
11317 {
11318 end_op = strchr (base_string, ',');
11319 if (end_op)
11320 *end_op = '\0';
11321 as_bad (_("bad register name `%s'"), base_string);
11322 return 0;
11323 }
11324 }
11325
11326 /* If there's an expression beginning the operand, parse it,
11327 assuming displacement_string_start and
11328 displacement_string_end are meaningful. */
11329 if (displacement_string_start != displacement_string_end)
11330 {
11331 if (!i386_displacement (displacement_string_start,
11332 displacement_string_end))
11333 return 0;
11334 }
11335
11336 /* Special case for (%dx) while doing input/output op. */
11337 if (i.base_reg
11338 && i.base_reg->reg_type.bitfield.instance == RegD
11339 && i.base_reg->reg_type.bitfield.word
11340 && i.index_reg == 0
11341 && i.log2_scale_factor == 0
11342 && i.seg[i.mem_operands] == 0
11343 && !operand_type_check (i.types[this_operand], disp))
11344 {
11345 i.types[this_operand] = i.base_reg->reg_type;
11346 return 1;
11347 }
11348
11349 if (i386_index_check (operand_string) == 0)
11350 return 0;
11351 i.flags[this_operand] |= Operand_Mem;
11352 if (i.mem_operands == 0)
11353 i.memop1_string = xstrdup (operand_string);
11354 i.mem_operands++;
11355 }
11356 else
11357 {
11358 /* It's not a memory operand; argh! */
11359 as_bad (_("invalid char %s beginning operand %d `%s'"),
11360 output_invalid (*op_string),
11361 this_operand + 1,
11362 op_string);
11363 return 0;
11364 }
11365 return 1; /* Normal return. */
11366 }
11367 \f
11368 /* Calculate the maximum variable size (i.e., excluding fr_fix)
11369 that an rs_machine_dependent frag may reach. */
11370
11371 unsigned int
11372 i386_frag_max_var (fragS *frag)
11373 {
11374 /* The only relaxable frags are for jumps.
11375 Unconditional jumps can grow by 4 bytes and others by 5 bytes. */
11376 gas_assert (frag->fr_type == rs_machine_dependent);
11377 return TYPE_FROM_RELAX_STATE (frag->fr_subtype) == UNCOND_JUMP ? 4 : 5;
11378 }
11379
11380 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
11381 static int
11382 elf_symbol_resolved_in_segment_p (symbolS *fr_symbol, offsetT fr_var)
11383 {
11384 /* STT_GNU_IFUNC symbol must go through PLT. */
11385 if ((symbol_get_bfdsym (fr_symbol)->flags
11386 & BSF_GNU_INDIRECT_FUNCTION) != 0)
11387 return 0;
11388
11389 if (!S_IS_EXTERNAL (fr_symbol))
11390 /* Symbol may be weak or local. */
11391 return !S_IS_WEAK (fr_symbol);
11392
11393 /* Global symbols with non-default visibility can't be preempted. */
11394 if (ELF_ST_VISIBILITY (S_GET_OTHER (fr_symbol)) != STV_DEFAULT)
11395 return 1;
11396
11397 if (fr_var != NO_RELOC)
11398 switch ((enum bfd_reloc_code_real) fr_var)
11399 {
11400 case BFD_RELOC_386_PLT32:
11401 case BFD_RELOC_X86_64_PLT32:
11402 /* Symbol with PLT relocation may be preempted. */
11403 return 0;
11404 default:
11405 abort ();
11406 }
11407
11408 /* Global symbols with default visibility in a shared library may be
11409 preempted by another definition. */
11410 return !shared;
11411 }
11412 #endif
11413
11414 /* Table 3-2. Macro-Fusible Instructions in Haswell Microarchitecture
11415 Note also work for Skylake and Cascadelake.
11416 ---------------------------------------------------------------------
11417 | JCC | ADD/SUB/CMP | INC/DEC | TEST/AND |
11418 | ------ | ----------- | ------- | -------- |
11419 | Jo | N | N | Y |
11420 | Jno | N | N | Y |
11421 | Jc/Jb | Y | N | Y |
11422 | Jae/Jnb | Y | N | Y |
11423 | Je/Jz | Y | Y | Y |
11424 | Jne/Jnz | Y | Y | Y |
11425 | Jna/Jbe | Y | N | Y |
11426 | Ja/Jnbe | Y | N | Y |
11427 | Js | N | N | Y |
11428 | Jns | N | N | Y |
11429 | Jp/Jpe | N | N | Y |
11430 | Jnp/Jpo | N | N | Y |
11431 | Jl/Jnge | Y | Y | Y |
11432 | Jge/Jnl | Y | Y | Y |
11433 | Jle/Jng | Y | Y | Y |
11434 | Jg/Jnle | Y | Y | Y |
11435 --------------------------------------------------------------------- */
11436 static int
11437 i386_macro_fusible_p (enum mf_cmp_kind mf_cmp, enum mf_jcc_kind mf_jcc)
11438 {
11439 if (mf_cmp == mf_cmp_alu_cmp)
11440 return ((mf_jcc >= mf_jcc_jc && mf_jcc <= mf_jcc_jna)
11441 || mf_jcc == mf_jcc_jl || mf_jcc == mf_jcc_jle);
11442 if (mf_cmp == mf_cmp_incdec)
11443 return (mf_jcc == mf_jcc_je || mf_jcc == mf_jcc_jl
11444 || mf_jcc == mf_jcc_jle);
11445 if (mf_cmp == mf_cmp_test_and)
11446 return 1;
11447 return 0;
11448 }
11449
11450 /* Return the next non-empty frag. */
11451
11452 static fragS *
11453 i386_next_non_empty_frag (fragS *fragP)
11454 {
11455 /* There may be a frag with a ".fill 0" when there is no room in
11456 the current frag for frag_grow in output_insn. */
11457 for (fragP = fragP->fr_next;
11458 (fragP != NULL
11459 && fragP->fr_type == rs_fill
11460 && fragP->fr_fix == 0);
11461 fragP = fragP->fr_next)
11462 ;
11463 return fragP;
11464 }
11465
11466 /* Return the next jcc frag after BRANCH_PADDING. */
11467
11468 static fragS *
11469 i386_next_fusible_jcc_frag (fragS *maybe_cmp_fragP, fragS *pad_fragP)
11470 {
11471 fragS *branch_fragP;
11472 if (!pad_fragP)
11473 return NULL;
11474
11475 if (pad_fragP->fr_type == rs_machine_dependent
11476 && (TYPE_FROM_RELAX_STATE (pad_fragP->fr_subtype)
11477 == BRANCH_PADDING))
11478 {
11479 branch_fragP = i386_next_non_empty_frag (pad_fragP);
11480 if (branch_fragP->fr_type != rs_machine_dependent)
11481 return NULL;
11482 if (TYPE_FROM_RELAX_STATE (branch_fragP->fr_subtype) == COND_JUMP
11483 && i386_macro_fusible_p (maybe_cmp_fragP->tc_frag_data.mf_type,
11484 pad_fragP->tc_frag_data.mf_type))
11485 return branch_fragP;
11486 }
11487
11488 return NULL;
11489 }
11490
11491 /* Classify BRANCH_PADDING, BRANCH_PREFIX and FUSED_JCC_PADDING frags. */
11492
11493 static void
11494 i386_classify_machine_dependent_frag (fragS *fragP)
11495 {
11496 fragS *cmp_fragP;
11497 fragS *pad_fragP;
11498 fragS *branch_fragP;
11499 fragS *next_fragP;
11500 unsigned int max_prefix_length;
11501
11502 if (fragP->tc_frag_data.classified)
11503 return;
11504
11505 /* First scan for BRANCH_PADDING and FUSED_JCC_PADDING. Convert
11506 FUSED_JCC_PADDING and merge BRANCH_PADDING. */
11507 for (next_fragP = fragP;
11508 next_fragP != NULL;
11509 next_fragP = next_fragP->fr_next)
11510 {
11511 next_fragP->tc_frag_data.classified = 1;
11512 if (next_fragP->fr_type == rs_machine_dependent)
11513 switch (TYPE_FROM_RELAX_STATE (next_fragP->fr_subtype))
11514 {
11515 case BRANCH_PADDING:
11516 /* The BRANCH_PADDING frag must be followed by a branch
11517 frag. */
11518 branch_fragP = i386_next_non_empty_frag (next_fragP);
11519 next_fragP->tc_frag_data.u.branch_fragP = branch_fragP;
11520 break;
11521 case FUSED_JCC_PADDING:
11522 /* Check if this is a fused jcc:
11523 FUSED_JCC_PADDING
11524 CMP like instruction
11525 BRANCH_PADDING
11526 COND_JUMP
11527 */
11528 cmp_fragP = i386_next_non_empty_frag (next_fragP);
11529 pad_fragP = i386_next_non_empty_frag (cmp_fragP);
11530 branch_fragP = i386_next_fusible_jcc_frag (next_fragP, pad_fragP);
11531 if (branch_fragP)
11532 {
11533 /* The BRANCH_PADDING frag is merged with the
11534 FUSED_JCC_PADDING frag. */
11535 next_fragP->tc_frag_data.u.branch_fragP = branch_fragP;
11536 /* CMP like instruction size. */
11537 next_fragP->tc_frag_data.cmp_size = cmp_fragP->fr_fix;
11538 frag_wane (pad_fragP);
11539 /* Skip to branch_fragP. */
11540 next_fragP = branch_fragP;
11541 }
11542 else if (next_fragP->tc_frag_data.max_prefix_length)
11543 {
11544 /* Turn FUSED_JCC_PADDING into BRANCH_PREFIX if it isn't
11545 a fused jcc. */
11546 next_fragP->fr_subtype
11547 = ENCODE_RELAX_STATE (BRANCH_PREFIX, 0);
11548 next_fragP->tc_frag_data.max_bytes
11549 = next_fragP->tc_frag_data.max_prefix_length;
11550 /* This will be updated in the BRANCH_PREFIX scan. */
11551 next_fragP->tc_frag_data.max_prefix_length = 0;
11552 }
11553 else
11554 frag_wane (next_fragP);
11555 break;
11556 }
11557 }
11558
11559 /* Stop if there is no BRANCH_PREFIX. */
11560 if (!align_branch_prefix_size)
11561 return;
11562
11563 /* Scan for BRANCH_PREFIX. */
11564 for (; fragP != NULL; fragP = fragP->fr_next)
11565 {
11566 if (fragP->fr_type != rs_machine_dependent
11567 || (TYPE_FROM_RELAX_STATE (fragP->fr_subtype)
11568 != BRANCH_PREFIX))
11569 continue;
11570
11571 /* Count all BRANCH_PREFIX frags before BRANCH_PADDING and
11572 COND_JUMP_PREFIX. */
11573 max_prefix_length = 0;
11574 for (next_fragP = fragP;
11575 next_fragP != NULL;
11576 next_fragP = next_fragP->fr_next)
11577 {
11578 if (next_fragP->fr_type == rs_fill)
11579 /* Skip rs_fill frags. */
11580 continue;
11581 else if (next_fragP->fr_type != rs_machine_dependent)
11582 /* Stop for all other frags. */
11583 break;
11584
11585 /* rs_machine_dependent frags. */
11586 if (TYPE_FROM_RELAX_STATE (next_fragP->fr_subtype)
11587 == BRANCH_PREFIX)
11588 {
11589 /* Count BRANCH_PREFIX frags. */
11590 if (max_prefix_length >= MAX_FUSED_JCC_PADDING_SIZE)
11591 {
11592 max_prefix_length = MAX_FUSED_JCC_PADDING_SIZE;
11593 frag_wane (next_fragP);
11594 }
11595 else
11596 max_prefix_length
11597 += next_fragP->tc_frag_data.max_bytes;
11598 }
11599 else if ((TYPE_FROM_RELAX_STATE (next_fragP->fr_subtype)
11600 == BRANCH_PADDING)
11601 || (TYPE_FROM_RELAX_STATE (next_fragP->fr_subtype)
11602 == FUSED_JCC_PADDING))
11603 {
11604 /* Stop at BRANCH_PADDING and FUSED_JCC_PADDING. */
11605 fragP->tc_frag_data.u.padding_fragP = next_fragP;
11606 break;
11607 }
11608 else
11609 /* Stop for other rs_machine_dependent frags. */
11610 break;
11611 }
11612
11613 fragP->tc_frag_data.max_prefix_length = max_prefix_length;
11614
11615 /* Skip to the next frag. */
11616 fragP = next_fragP;
11617 }
11618 }
11619
11620 /* Compute padding size for
11621
11622 FUSED_JCC_PADDING
11623 CMP like instruction
11624 BRANCH_PADDING
11625 COND_JUMP/UNCOND_JUMP
11626
11627 or
11628
11629 BRANCH_PADDING
11630 COND_JUMP/UNCOND_JUMP
11631 */
11632
11633 static int
11634 i386_branch_padding_size (fragS *fragP, offsetT address)
11635 {
11636 unsigned int offset, size, padding_size;
11637 fragS *branch_fragP = fragP->tc_frag_data.u.branch_fragP;
11638
11639 /* The start address of the BRANCH_PADDING or FUSED_JCC_PADDING frag. */
11640 if (!address)
11641 address = fragP->fr_address;
11642 address += fragP->fr_fix;
11643
11644 /* CMP like instrunction size. */
11645 size = fragP->tc_frag_data.cmp_size;
11646
11647 /* The base size of the branch frag. */
11648 size += branch_fragP->fr_fix;
11649
11650 /* Add opcode and displacement bytes for the rs_machine_dependent
11651 branch frag. */
11652 if (branch_fragP->fr_type == rs_machine_dependent)
11653 size += md_relax_table[branch_fragP->fr_subtype].rlx_length;
11654
11655 /* Check if branch is within boundary and doesn't end at the last
11656 byte. */
11657 offset = address & ((1U << align_branch_power) - 1);
11658 if ((offset + size) >= (1U << align_branch_power))
11659 /* Padding needed to avoid crossing boundary. */
11660 padding_size = (1U << align_branch_power) - offset;
11661 else
11662 /* No padding needed. */
11663 padding_size = 0;
11664
11665 /* The return value may be saved in tc_frag_data.length which is
11666 unsigned byte. */
11667 if (!fits_in_unsigned_byte (padding_size))
11668 abort ();
11669
11670 return padding_size;
11671 }
11672
11673 /* i386_generic_table_relax_frag()
11674
11675 Handle BRANCH_PADDING, BRANCH_PREFIX and FUSED_JCC_PADDING frags to
11676 grow/shrink padding to align branch frags. Hand others to
11677 relax_frag(). */
11678
11679 long
11680 i386_generic_table_relax_frag (segT segment, fragS *fragP, long stretch)
11681 {
11682 if (TYPE_FROM_RELAX_STATE (fragP->fr_subtype) == BRANCH_PADDING
11683 || TYPE_FROM_RELAX_STATE (fragP->fr_subtype) == FUSED_JCC_PADDING)
11684 {
11685 long padding_size = i386_branch_padding_size (fragP, 0);
11686 long grow = padding_size - fragP->tc_frag_data.length;
11687
11688 /* When the BRANCH_PREFIX frag is used, the computed address
11689 must match the actual address and there should be no padding. */
11690 if (fragP->tc_frag_data.padding_address
11691 && (fragP->tc_frag_data.padding_address != fragP->fr_address
11692 || padding_size))
11693 abort ();
11694
11695 /* Update the padding size. */
11696 if (grow)
11697 fragP->tc_frag_data.length = padding_size;
11698
11699 return grow;
11700 }
11701 else if (TYPE_FROM_RELAX_STATE (fragP->fr_subtype) == BRANCH_PREFIX)
11702 {
11703 fragS *padding_fragP, *next_fragP;
11704 long padding_size, left_size, last_size;
11705
11706 padding_fragP = fragP->tc_frag_data.u.padding_fragP;
11707 if (!padding_fragP)
11708 /* Use the padding set by the leading BRANCH_PREFIX frag. */
11709 return (fragP->tc_frag_data.length
11710 - fragP->tc_frag_data.last_length);
11711
11712 /* Compute the relative address of the padding frag in the very
11713 first time where the BRANCH_PREFIX frag sizes are zero. */
11714 if (!fragP->tc_frag_data.padding_address)
11715 fragP->tc_frag_data.padding_address
11716 = padding_fragP->fr_address - (fragP->fr_address - stretch);
11717
11718 /* First update the last length from the previous interation. */
11719 left_size = fragP->tc_frag_data.prefix_length;
11720 for (next_fragP = fragP;
11721 next_fragP != padding_fragP;
11722 next_fragP = next_fragP->fr_next)
11723 if (next_fragP->fr_type == rs_machine_dependent
11724 && (TYPE_FROM_RELAX_STATE (next_fragP->fr_subtype)
11725 == BRANCH_PREFIX))
11726 {
11727 if (left_size)
11728 {
11729 int max = next_fragP->tc_frag_data.max_bytes;
11730 if (max)
11731 {
11732 int size;
11733 if (max > left_size)
11734 size = left_size;
11735 else
11736 size = max;
11737 left_size -= size;
11738 next_fragP->tc_frag_data.last_length = size;
11739 }
11740 }
11741 else
11742 next_fragP->tc_frag_data.last_length = 0;
11743 }
11744
11745 /* Check the padding size for the padding frag. */
11746 padding_size = i386_branch_padding_size
11747 (padding_fragP, (fragP->fr_address
11748 + fragP->tc_frag_data.padding_address));
11749
11750 last_size = fragP->tc_frag_data.prefix_length;
11751 /* Check if there is change from the last interation. */
11752 if (padding_size == last_size)
11753 {
11754 /* Update the expected address of the padding frag. */
11755 padding_fragP->tc_frag_data.padding_address
11756 = (fragP->fr_address + padding_size
11757 + fragP->tc_frag_data.padding_address);
11758 return 0;
11759 }
11760
11761 if (padding_size > fragP->tc_frag_data.max_prefix_length)
11762 {
11763 /* No padding if there is no sufficient room. Clear the
11764 expected address of the padding frag. */
11765 padding_fragP->tc_frag_data.padding_address = 0;
11766 padding_size = 0;
11767 }
11768 else
11769 /* Store the expected address of the padding frag. */
11770 padding_fragP->tc_frag_data.padding_address
11771 = (fragP->fr_address + padding_size
11772 + fragP->tc_frag_data.padding_address);
11773
11774 fragP->tc_frag_data.prefix_length = padding_size;
11775
11776 /* Update the length for the current interation. */
11777 left_size = padding_size;
11778 for (next_fragP = fragP;
11779 next_fragP != padding_fragP;
11780 next_fragP = next_fragP->fr_next)
11781 if (next_fragP->fr_type == rs_machine_dependent
11782 && (TYPE_FROM_RELAX_STATE (next_fragP->fr_subtype)
11783 == BRANCH_PREFIX))
11784 {
11785 if (left_size)
11786 {
11787 int max = next_fragP->tc_frag_data.max_bytes;
11788 if (max)
11789 {
11790 int size;
11791 if (max > left_size)
11792 size = left_size;
11793 else
11794 size = max;
11795 left_size -= size;
11796 next_fragP->tc_frag_data.length = size;
11797 }
11798 }
11799 else
11800 next_fragP->tc_frag_data.length = 0;
11801 }
11802
11803 return (fragP->tc_frag_data.length
11804 - fragP->tc_frag_data.last_length);
11805 }
11806 return relax_frag (segment, fragP, stretch);
11807 }
11808
11809 /* md_estimate_size_before_relax()
11810
11811 Called just before relax() for rs_machine_dependent frags. The x86
11812 assembler uses these frags to handle variable size jump
11813 instructions.
11814
11815 Any symbol that is now undefined will not become defined.
11816 Return the correct fr_subtype in the frag.
11817 Return the initial "guess for variable size of frag" to caller.
11818 The guess is actually the growth beyond the fixed part. Whatever
11819 we do to grow the fixed or variable part contributes to our
11820 returned value. */
11821
11822 int
11823 md_estimate_size_before_relax (fragS *fragP, segT segment)
11824 {
11825 if (TYPE_FROM_RELAX_STATE (fragP->fr_subtype) == BRANCH_PADDING
11826 || TYPE_FROM_RELAX_STATE (fragP->fr_subtype) == BRANCH_PREFIX
11827 || TYPE_FROM_RELAX_STATE (fragP->fr_subtype) == FUSED_JCC_PADDING)
11828 {
11829 i386_classify_machine_dependent_frag (fragP);
11830 return fragP->tc_frag_data.length;
11831 }
11832
11833 /* We've already got fragP->fr_subtype right; all we have to do is
11834 check for un-relaxable symbols. On an ELF system, we can't relax
11835 an externally visible symbol, because it may be overridden by a
11836 shared library. */
11837 if (S_GET_SEGMENT (fragP->fr_symbol) != segment
11838 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
11839 || (IS_ELF
11840 && !elf_symbol_resolved_in_segment_p (fragP->fr_symbol,
11841 fragP->fr_var))
11842 #endif
11843 #if defined (OBJ_COFF) && defined (TE_PE)
11844 || (OUTPUT_FLAVOR == bfd_target_coff_flavour
11845 && S_IS_WEAK (fragP->fr_symbol))
11846 #endif
11847 )
11848 {
11849 /* Symbol is undefined in this segment, or we need to keep a
11850 reloc so that weak symbols can be overridden. */
11851 int size = (fragP->fr_subtype & CODE16) ? 2 : 4;
11852 enum bfd_reloc_code_real reloc_type;
11853 unsigned char *opcode;
11854 int old_fr_fix;
11855
11856 if (fragP->fr_var != NO_RELOC)
11857 reloc_type = (enum bfd_reloc_code_real) fragP->fr_var;
11858 else if (size == 2)
11859 reloc_type = BFD_RELOC_16_PCREL;
11860 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
11861 else if (need_plt32_p (fragP->fr_symbol))
11862 reloc_type = BFD_RELOC_X86_64_PLT32;
11863 #endif
11864 else
11865 reloc_type = BFD_RELOC_32_PCREL;
11866
11867 old_fr_fix = fragP->fr_fix;
11868 opcode = (unsigned char *) fragP->fr_opcode;
11869
11870 switch (TYPE_FROM_RELAX_STATE (fragP->fr_subtype))
11871 {
11872 case UNCOND_JUMP:
11873 /* Make jmp (0xeb) a (d)word displacement jump. */
11874 opcode[0] = 0xe9;
11875 fragP->fr_fix += size;
11876 fix_new (fragP, old_fr_fix, size,
11877 fragP->fr_symbol,
11878 fragP->fr_offset, 1,
11879 reloc_type);
11880 break;
11881
11882 case COND_JUMP86:
11883 if (size == 2
11884 && (!no_cond_jump_promotion || fragP->fr_var != NO_RELOC))
11885 {
11886 /* Negate the condition, and branch past an
11887 unconditional jump. */
11888 opcode[0] ^= 1;
11889 opcode[1] = 3;
11890 /* Insert an unconditional jump. */
11891 opcode[2] = 0xe9;
11892 /* We added two extra opcode bytes, and have a two byte
11893 offset. */
11894 fragP->fr_fix += 2 + 2;
11895 fix_new (fragP, old_fr_fix + 2, 2,
11896 fragP->fr_symbol,
11897 fragP->fr_offset, 1,
11898 reloc_type);
11899 break;
11900 }
11901 /* Fall through. */
11902
11903 case COND_JUMP:
11904 if (no_cond_jump_promotion && fragP->fr_var == NO_RELOC)
11905 {
11906 fixS *fixP;
11907
11908 fragP->fr_fix += 1;
11909 fixP = fix_new (fragP, old_fr_fix, 1,
11910 fragP->fr_symbol,
11911 fragP->fr_offset, 1,
11912 BFD_RELOC_8_PCREL);
11913 fixP->fx_signed = 1;
11914 break;
11915 }
11916
11917 /* This changes the byte-displacement jump 0x7N
11918 to the (d)word-displacement jump 0x0f,0x8N. */
11919 opcode[1] = opcode[0] + 0x10;
11920 opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
11921 /* We've added an opcode byte. */
11922 fragP->fr_fix += 1 + size;
11923 fix_new (fragP, old_fr_fix + 1, size,
11924 fragP->fr_symbol,
11925 fragP->fr_offset, 1,
11926 reloc_type);
11927 break;
11928
11929 default:
11930 BAD_CASE (fragP->fr_subtype);
11931 break;
11932 }
11933 frag_wane (fragP);
11934 return fragP->fr_fix - old_fr_fix;
11935 }
11936
11937 /* Guess size depending on current relax state. Initially the relax
11938 state will correspond to a short jump and we return 1, because
11939 the variable part of the frag (the branch offset) is one byte
11940 long. However, we can relax a section more than once and in that
11941 case we must either set fr_subtype back to the unrelaxed state,
11942 or return the value for the appropriate branch. */
11943 return md_relax_table[fragP->fr_subtype].rlx_length;
11944 }
11945
11946 /* Called after relax() is finished.
11947
11948 In: Address of frag.
11949 fr_type == rs_machine_dependent.
11950 fr_subtype is what the address relaxed to.
11951
11952 Out: Any fixSs and constants are set up.
11953 Caller will turn frag into a ".space 0". */
11954
11955 void
11956 md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT sec ATTRIBUTE_UNUSED,
11957 fragS *fragP)
11958 {
11959 unsigned char *opcode;
11960 unsigned char *where_to_put_displacement = NULL;
11961 offsetT target_address;
11962 offsetT opcode_address;
11963 unsigned int extension = 0;
11964 offsetT displacement_from_opcode_start;
11965
11966 if (TYPE_FROM_RELAX_STATE (fragP->fr_subtype) == BRANCH_PADDING
11967 || TYPE_FROM_RELAX_STATE (fragP->fr_subtype) == FUSED_JCC_PADDING
11968 || TYPE_FROM_RELAX_STATE (fragP->fr_subtype) == BRANCH_PREFIX)
11969 {
11970 /* Generate nop padding. */
11971 unsigned int size = fragP->tc_frag_data.length;
11972 if (size)
11973 {
11974 if (size > fragP->tc_frag_data.max_bytes)
11975 abort ();
11976
11977 if (flag_debug)
11978 {
11979 const char *msg;
11980 const char *branch = "branch";
11981 const char *prefix = "";
11982 fragS *padding_fragP;
11983 if (TYPE_FROM_RELAX_STATE (fragP->fr_subtype)
11984 == BRANCH_PREFIX)
11985 {
11986 padding_fragP = fragP->tc_frag_data.u.padding_fragP;
11987 switch (fragP->tc_frag_data.default_prefix)
11988 {
11989 default:
11990 abort ();
11991 break;
11992 case CS_PREFIX_OPCODE:
11993 prefix = " cs";
11994 break;
11995 case DS_PREFIX_OPCODE:
11996 prefix = " ds";
11997 break;
11998 case ES_PREFIX_OPCODE:
11999 prefix = " es";
12000 break;
12001 case FS_PREFIX_OPCODE:
12002 prefix = " fs";
12003 break;
12004 case GS_PREFIX_OPCODE:
12005 prefix = " gs";
12006 break;
12007 case SS_PREFIX_OPCODE:
12008 prefix = " ss";
12009 break;
12010 }
12011 if (padding_fragP)
12012 msg = _("%s:%u: add %d%s at 0x%llx to align "
12013 "%s within %d-byte boundary\n");
12014 else
12015 msg = _("%s:%u: add additional %d%s at 0x%llx to "
12016 "align %s within %d-byte boundary\n");
12017 }
12018 else
12019 {
12020 padding_fragP = fragP;
12021 msg = _("%s:%u: add %d%s-byte nop at 0x%llx to align "
12022 "%s within %d-byte boundary\n");
12023 }
12024
12025 if (padding_fragP)
12026 switch (padding_fragP->tc_frag_data.branch_type)
12027 {
12028 case align_branch_jcc:
12029 branch = "jcc";
12030 break;
12031 case align_branch_fused:
12032 branch = "fused jcc";
12033 break;
12034 case align_branch_jmp:
12035 branch = "jmp";
12036 break;
12037 case align_branch_call:
12038 branch = "call";
12039 break;
12040 case align_branch_indirect:
12041 branch = "indiret branch";
12042 break;
12043 case align_branch_ret:
12044 branch = "ret";
12045 break;
12046 default:
12047 break;
12048 }
12049
12050 fprintf (stdout, msg,
12051 fragP->fr_file, fragP->fr_line, size, prefix,
12052 (long long) fragP->fr_address, branch,
12053 1 << align_branch_power);
12054 }
12055 if (TYPE_FROM_RELAX_STATE (fragP->fr_subtype) == BRANCH_PREFIX)
12056 memset (fragP->fr_opcode,
12057 fragP->tc_frag_data.default_prefix, size);
12058 else
12059 i386_generate_nops (fragP, (char *) fragP->fr_opcode,
12060 size, 0);
12061 fragP->fr_fix += size;
12062 }
12063 return;
12064 }
12065
12066 opcode = (unsigned char *) fragP->fr_opcode;
12067
12068 /* Address we want to reach in file space. */
12069 target_address = S_GET_VALUE (fragP->fr_symbol) + fragP->fr_offset;
12070
12071 /* Address opcode resides at in file space. */
12072 opcode_address = fragP->fr_address + fragP->fr_fix;
12073
12074 /* Displacement from opcode start to fill into instruction. */
12075 displacement_from_opcode_start = target_address - opcode_address;
12076
12077 if ((fragP->fr_subtype & BIG) == 0)
12078 {
12079 /* Don't have to change opcode. */
12080 extension = 1; /* 1 opcode + 1 displacement */
12081 where_to_put_displacement = &opcode[1];
12082 }
12083 else
12084 {
12085 if (no_cond_jump_promotion
12086 && TYPE_FROM_RELAX_STATE (fragP->fr_subtype) != UNCOND_JUMP)
12087 as_warn_where (fragP->fr_file, fragP->fr_line,
12088 _("long jump required"));
12089
12090 switch (fragP->fr_subtype)
12091 {
12092 case ENCODE_RELAX_STATE (UNCOND_JUMP, BIG):
12093 extension = 4; /* 1 opcode + 4 displacement */
12094 opcode[0] = 0xe9;
12095 where_to_put_displacement = &opcode[1];
12096 break;
12097
12098 case ENCODE_RELAX_STATE (UNCOND_JUMP, BIG16):
12099 extension = 2; /* 1 opcode + 2 displacement */
12100 opcode[0] = 0xe9;
12101 where_to_put_displacement = &opcode[1];
12102 break;
12103
12104 case ENCODE_RELAX_STATE (COND_JUMP, BIG):
12105 case ENCODE_RELAX_STATE (COND_JUMP86, BIG):
12106 extension = 5; /* 2 opcode + 4 displacement */
12107 opcode[1] = opcode[0] + 0x10;
12108 opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
12109 where_to_put_displacement = &opcode[2];
12110 break;
12111
12112 case ENCODE_RELAX_STATE (COND_JUMP, BIG16):
12113 extension = 3; /* 2 opcode + 2 displacement */
12114 opcode[1] = opcode[0] + 0x10;
12115 opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
12116 where_to_put_displacement = &opcode[2];
12117 break;
12118
12119 case ENCODE_RELAX_STATE (COND_JUMP86, BIG16):
12120 extension = 4;
12121 opcode[0] ^= 1;
12122 opcode[1] = 3;
12123 opcode[2] = 0xe9;
12124 where_to_put_displacement = &opcode[3];
12125 break;
12126
12127 default:
12128 BAD_CASE (fragP->fr_subtype);
12129 break;
12130 }
12131 }
12132
12133 /* If size if less then four we are sure that the operand fits,
12134 but if it's 4, then it could be that the displacement is larger
12135 then -/+ 2GB. */
12136 if (DISP_SIZE_FROM_RELAX_STATE (fragP->fr_subtype) == 4
12137 && object_64bit
12138 && ((addressT) (displacement_from_opcode_start - extension
12139 + ((addressT) 1 << 31))
12140 > (((addressT) 2 << 31) - 1)))
12141 {
12142 as_bad_where (fragP->fr_file, fragP->fr_line,
12143 _("jump target out of range"));
12144 /* Make us emit 0. */
12145 displacement_from_opcode_start = extension;
12146 }
12147 /* Now put displacement after opcode. */
12148 md_number_to_chars ((char *) where_to_put_displacement,
12149 (valueT) (displacement_from_opcode_start - extension),
12150 DISP_SIZE_FROM_RELAX_STATE (fragP->fr_subtype));
12151 fragP->fr_fix += extension;
12152 }
12153 \f
12154 /* Apply a fixup (fixP) to segment data, once it has been determined
12155 by our caller that we have all the info we need to fix it up.
12156
12157 Parameter valP is the pointer to the value of the bits.
12158
12159 On the 386, immediates, displacements, and data pointers are all in
12160 the same (little-endian) format, so we don't need to care about which
12161 we are handling. */
12162
12163 void
12164 md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
12165 {
12166 char *p = fixP->fx_where + fixP->fx_frag->fr_literal;
12167 valueT value = *valP;
12168
12169 #if !defined (TE_Mach)
12170 if (fixP->fx_pcrel)
12171 {
12172 switch (fixP->fx_r_type)
12173 {
12174 default:
12175 break;
12176
12177 case BFD_RELOC_64:
12178 fixP->fx_r_type = BFD_RELOC_64_PCREL;
12179 break;
12180 case BFD_RELOC_32:
12181 case BFD_RELOC_X86_64_32S:
12182 fixP->fx_r_type = BFD_RELOC_32_PCREL;
12183 break;
12184 case BFD_RELOC_16:
12185 fixP->fx_r_type = BFD_RELOC_16_PCREL;
12186 break;
12187 case BFD_RELOC_8:
12188 fixP->fx_r_type = BFD_RELOC_8_PCREL;
12189 break;
12190 }
12191 }
12192
12193 if (fixP->fx_addsy != NULL
12194 && (fixP->fx_r_type == BFD_RELOC_32_PCREL
12195 || fixP->fx_r_type == BFD_RELOC_64_PCREL
12196 || fixP->fx_r_type == BFD_RELOC_16_PCREL
12197 || fixP->fx_r_type == BFD_RELOC_8_PCREL)
12198 && !use_rela_relocations)
12199 {
12200 /* This is a hack. There should be a better way to handle this.
12201 This covers for the fact that bfd_install_relocation will
12202 subtract the current location (for partial_inplace, PC relative
12203 relocations); see more below. */
12204 #ifndef OBJ_AOUT
12205 if (IS_ELF
12206 #ifdef TE_PE
12207 || OUTPUT_FLAVOR == bfd_target_coff_flavour
12208 #endif
12209 )
12210 value += fixP->fx_where + fixP->fx_frag->fr_address;
12211 #endif
12212 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
12213 if (IS_ELF)
12214 {
12215 segT sym_seg = S_GET_SEGMENT (fixP->fx_addsy);
12216
12217 if ((sym_seg == seg
12218 || (symbol_section_p (fixP->fx_addsy)
12219 && sym_seg != absolute_section))
12220 && !generic_force_reloc (fixP))
12221 {
12222 /* Yes, we add the values in twice. This is because
12223 bfd_install_relocation subtracts them out again. I think
12224 bfd_install_relocation is broken, but I don't dare change
12225 it. FIXME. */
12226 value += fixP->fx_where + fixP->fx_frag->fr_address;
12227 }
12228 }
12229 #endif
12230 #if defined (OBJ_COFF) && defined (TE_PE)
12231 /* For some reason, the PE format does not store a
12232 section address offset for a PC relative symbol. */
12233 if (S_GET_SEGMENT (fixP->fx_addsy) != seg
12234 || S_IS_WEAK (fixP->fx_addsy))
12235 value += md_pcrel_from (fixP);
12236 #endif
12237 }
12238 #if defined (OBJ_COFF) && defined (TE_PE)
12239 if (fixP->fx_addsy != NULL
12240 && S_IS_WEAK (fixP->fx_addsy)
12241 /* PR 16858: Do not modify weak function references. */
12242 && ! fixP->fx_pcrel)
12243 {
12244 #if !defined (TE_PEP)
12245 /* For x86 PE weak function symbols are neither PC-relative
12246 nor do they set S_IS_FUNCTION. So the only reliable way
12247 to detect them is to check the flags of their containing
12248 section. */
12249 if (S_GET_SEGMENT (fixP->fx_addsy) != NULL
12250 && S_GET_SEGMENT (fixP->fx_addsy)->flags & SEC_CODE)
12251 ;
12252 else
12253 #endif
12254 value -= S_GET_VALUE (fixP->fx_addsy);
12255 }
12256 #endif
12257
12258 /* Fix a few things - the dynamic linker expects certain values here,
12259 and we must not disappoint it. */
12260 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
12261 if (IS_ELF && fixP->fx_addsy)
12262 switch (fixP->fx_r_type)
12263 {
12264 case BFD_RELOC_386_PLT32:
12265 case BFD_RELOC_X86_64_PLT32:
12266 /* Make the jump instruction point to the address of the operand.
12267 At runtime we merely add the offset to the actual PLT entry.
12268 NB: Subtract the offset size only for jump instructions. */
12269 if (fixP->fx_pcrel)
12270 value = -4;
12271 break;
12272
12273 case BFD_RELOC_386_TLS_GD:
12274 case BFD_RELOC_386_TLS_LDM:
12275 case BFD_RELOC_386_TLS_IE_32:
12276 case BFD_RELOC_386_TLS_IE:
12277 case BFD_RELOC_386_TLS_GOTIE:
12278 case BFD_RELOC_386_TLS_GOTDESC:
12279 case BFD_RELOC_X86_64_TLSGD:
12280 case BFD_RELOC_X86_64_TLSLD:
12281 case BFD_RELOC_X86_64_GOTTPOFF:
12282 case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
12283 value = 0; /* Fully resolved at runtime. No addend. */
12284 /* Fallthrough */
12285 case BFD_RELOC_386_TLS_LE:
12286 case BFD_RELOC_386_TLS_LDO_32:
12287 case BFD_RELOC_386_TLS_LE_32:
12288 case BFD_RELOC_X86_64_DTPOFF32:
12289 case BFD_RELOC_X86_64_DTPOFF64:
12290 case BFD_RELOC_X86_64_TPOFF32:
12291 case BFD_RELOC_X86_64_TPOFF64:
12292 S_SET_THREAD_LOCAL (fixP->fx_addsy);
12293 break;
12294
12295 case BFD_RELOC_386_TLS_DESC_CALL:
12296 case BFD_RELOC_X86_64_TLSDESC_CALL:
12297 value = 0; /* Fully resolved at runtime. No addend. */
12298 S_SET_THREAD_LOCAL (fixP->fx_addsy);
12299 fixP->fx_done = 0;
12300 return;
12301
12302 case BFD_RELOC_VTABLE_INHERIT:
12303 case BFD_RELOC_VTABLE_ENTRY:
12304 fixP->fx_done = 0;
12305 return;
12306
12307 default:
12308 break;
12309 }
12310 #endif /* defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) */
12311 *valP = value;
12312 #endif /* !defined (TE_Mach) */
12313
12314 /* Are we finished with this relocation now? */
12315 if (fixP->fx_addsy == NULL)
12316 fixP->fx_done = 1;
12317 #if defined (OBJ_COFF) && defined (TE_PE)
12318 else if (fixP->fx_addsy != NULL && S_IS_WEAK (fixP->fx_addsy))
12319 {
12320 fixP->fx_done = 0;
12321 /* Remember value for tc_gen_reloc. */
12322 fixP->fx_addnumber = value;
12323 /* Clear out the frag for now. */
12324 value = 0;
12325 }
12326 #endif
12327 else if (use_rela_relocations)
12328 {
12329 fixP->fx_no_overflow = 1;
12330 /* Remember value for tc_gen_reloc. */
12331 fixP->fx_addnumber = value;
12332 value = 0;
12333 }
12334
12335 md_number_to_chars (p, value, fixP->fx_size);
12336 }
12337 \f
12338 const char *
12339 md_atof (int type, char *litP, int *sizeP)
12340 {
12341 /* This outputs the LITTLENUMs in REVERSE order;
12342 in accord with the bigendian 386. */
12343 return ieee_md_atof (type, litP, sizeP, FALSE);
12344 }
12345 \f
12346 static char output_invalid_buf[sizeof (unsigned char) * 2 + 6];
12347
12348 static char *
12349 output_invalid (int c)
12350 {
12351 if (ISPRINT (c))
12352 snprintf (output_invalid_buf, sizeof (output_invalid_buf),
12353 "'%c'", c);
12354 else
12355 snprintf (output_invalid_buf, sizeof (output_invalid_buf),
12356 "(0x%x)", (unsigned char) c);
12357 return output_invalid_buf;
12358 }
12359
12360 /* Verify that @r can be used in the current context. */
12361
12362 static bfd_boolean check_register (const reg_entry *r)
12363 {
12364 if (allow_pseudo_reg)
12365 return TRUE;
12366
12367 if (operand_type_all_zero (&r->reg_type))
12368 return FALSE;
12369
12370 if ((r->reg_type.bitfield.dword
12371 || (r->reg_type.bitfield.class == SReg && r->reg_num > 3)
12372 || r->reg_type.bitfield.class == RegCR
12373 || r->reg_type.bitfield.class == RegDR)
12374 && !cpu_arch_flags.bitfield.cpui386)
12375 return FALSE;
12376
12377 if (r->reg_type.bitfield.class == RegTR
12378 && (flag_code == CODE_64BIT
12379 || !cpu_arch_flags.bitfield.cpui386
12380 || cpu_arch_isa_flags.bitfield.cpui586
12381 || cpu_arch_isa_flags.bitfield.cpui686))
12382 return FALSE;
12383
12384 if (r->reg_type.bitfield.class == RegMMX && !cpu_arch_flags.bitfield.cpummx)
12385 return FALSE;
12386
12387 if (!cpu_arch_flags.bitfield.cpuavx512f)
12388 {
12389 if (r->reg_type.bitfield.zmmword
12390 || r->reg_type.bitfield.class == RegMask)
12391 return FALSE;
12392
12393 if (!cpu_arch_flags.bitfield.cpuavx)
12394 {
12395 if (r->reg_type.bitfield.ymmword)
12396 return FALSE;
12397
12398 if (!cpu_arch_flags.bitfield.cpusse && r->reg_type.bitfield.xmmword)
12399 return FALSE;
12400 }
12401 }
12402
12403 if (r->reg_type.bitfield.class == RegBND && !cpu_arch_flags.bitfield.cpumpx)
12404 return FALSE;
12405
12406 /* Don't allow fake index register unless allow_index_reg isn't 0. */
12407 if (!allow_index_reg && r->reg_num == RegIZ)
12408 return FALSE;
12409
12410 /* Upper 16 vector registers are only available with VREX in 64bit
12411 mode, and require EVEX encoding. */
12412 if (r->reg_flags & RegVRex)
12413 {
12414 if (!cpu_arch_flags.bitfield.cpuavx512f
12415 || flag_code != CODE_64BIT)
12416 return FALSE;
12417
12418 if (i.vec_encoding == vex_encoding_default)
12419 i.vec_encoding = vex_encoding_evex;
12420 else if (i.vec_encoding != vex_encoding_evex)
12421 i.vec_encoding = vex_encoding_error;
12422 }
12423
12424 if (((r->reg_flags & (RegRex64 | RegRex)) || r->reg_type.bitfield.qword)
12425 && (!cpu_arch_flags.bitfield.cpulm || r->reg_type.bitfield.class != RegCR)
12426 && flag_code != CODE_64BIT)
12427 return FALSE;
12428
12429 if (r->reg_type.bitfield.class == SReg && r->reg_num == RegFlat
12430 && !intel_syntax)
12431 return FALSE;
12432
12433 return TRUE;
12434 }
12435
12436 /* REG_STRING starts *before* REGISTER_PREFIX. */
12437
12438 static const reg_entry *
12439 parse_real_register (char *reg_string, char **end_op)
12440 {
12441 char *s = reg_string;
12442 char *p;
12443 char reg_name_given[MAX_REG_NAME_SIZE + 1];
12444 const reg_entry *r;
12445
12446 /* Skip possible REGISTER_PREFIX and possible whitespace. */
12447 if (*s == REGISTER_PREFIX)
12448 ++s;
12449
12450 if (is_space_char (*s))
12451 ++s;
12452
12453 p = reg_name_given;
12454 while ((*p++ = register_chars[(unsigned char) *s]) != '\0')
12455 {
12456 if (p >= reg_name_given + MAX_REG_NAME_SIZE)
12457 return (const reg_entry *) NULL;
12458 s++;
12459 }
12460
12461 /* For naked regs, make sure that we are not dealing with an identifier.
12462 This prevents confusing an identifier like `eax_var' with register
12463 `eax'. */
12464 if (allow_naked_reg && identifier_chars[(unsigned char) *s])
12465 return (const reg_entry *) NULL;
12466
12467 *end_op = s;
12468
12469 r = (const reg_entry *) hash_find (reg_hash, reg_name_given);
12470
12471 /* Handle floating point regs, allowing spaces in the (i) part. */
12472 if (r == i386_regtab /* %st is first entry of table */)
12473 {
12474 if (!cpu_arch_flags.bitfield.cpu8087
12475 && !cpu_arch_flags.bitfield.cpu287
12476 && !cpu_arch_flags.bitfield.cpu387
12477 && !allow_pseudo_reg)
12478 return (const reg_entry *) NULL;
12479
12480 if (is_space_char (*s))
12481 ++s;
12482 if (*s == '(')
12483 {
12484 ++s;
12485 if (is_space_char (*s))
12486 ++s;
12487 if (*s >= '0' && *s <= '7')
12488 {
12489 int fpr = *s - '0';
12490 ++s;
12491 if (is_space_char (*s))
12492 ++s;
12493 if (*s == ')')
12494 {
12495 *end_op = s + 1;
12496 r = (const reg_entry *) hash_find (reg_hash, "st(0)");
12497 know (r);
12498 return r + fpr;
12499 }
12500 }
12501 /* We have "%st(" then garbage. */
12502 return (const reg_entry *) NULL;
12503 }
12504 }
12505
12506 return r && check_register (r) ? r : NULL;
12507 }
12508
12509 /* REG_STRING starts *before* REGISTER_PREFIX. */
12510
12511 static const reg_entry *
12512 parse_register (char *reg_string, char **end_op)
12513 {
12514 const reg_entry *r;
12515
12516 if (*reg_string == REGISTER_PREFIX || allow_naked_reg)
12517 r = parse_real_register (reg_string, end_op);
12518 else
12519 r = NULL;
12520 if (!r)
12521 {
12522 char *save = input_line_pointer;
12523 char c;
12524 symbolS *symbolP;
12525
12526 input_line_pointer = reg_string;
12527 c = get_symbol_name (&reg_string);
12528 symbolP = symbol_find (reg_string);
12529 if (symbolP && S_GET_SEGMENT (symbolP) == reg_section)
12530 {
12531 const expressionS *e = symbol_get_value_expression (symbolP);
12532
12533 know (e->X_op == O_register);
12534 know (e->X_add_number >= 0
12535 && (valueT) e->X_add_number < i386_regtab_size);
12536 r = i386_regtab + e->X_add_number;
12537 if (!check_register (r))
12538 {
12539 as_bad (_("register '%s%s' cannot be used here"),
12540 register_prefix, r->reg_name);
12541 r = &bad_reg;
12542 }
12543 *end_op = input_line_pointer;
12544 }
12545 *input_line_pointer = c;
12546 input_line_pointer = save;
12547 }
12548 return r;
12549 }
12550
12551 int
12552 i386_parse_name (char *name, expressionS *e, char *nextcharP)
12553 {
12554 const reg_entry *r;
12555 char *end = input_line_pointer;
12556
12557 *end = *nextcharP;
12558 r = parse_register (name, &input_line_pointer);
12559 if (r && end <= input_line_pointer)
12560 {
12561 *nextcharP = *input_line_pointer;
12562 *input_line_pointer = 0;
12563 if (r != &bad_reg)
12564 {
12565 e->X_op = O_register;
12566 e->X_add_number = r - i386_regtab;
12567 }
12568 else
12569 e->X_op = O_illegal;
12570 return 1;
12571 }
12572 input_line_pointer = end;
12573 *end = 0;
12574 return intel_syntax ? i386_intel_parse_name (name, e) : 0;
12575 }
12576
12577 void
12578 md_operand (expressionS *e)
12579 {
12580 char *end;
12581 const reg_entry *r;
12582
12583 switch (*input_line_pointer)
12584 {
12585 case REGISTER_PREFIX:
12586 r = parse_real_register (input_line_pointer, &end);
12587 if (r)
12588 {
12589 e->X_op = O_register;
12590 e->X_add_number = r - i386_regtab;
12591 input_line_pointer = end;
12592 }
12593 break;
12594
12595 case '[':
12596 gas_assert (intel_syntax);
12597 end = input_line_pointer++;
12598 expression (e);
12599 if (*input_line_pointer == ']')
12600 {
12601 ++input_line_pointer;
12602 e->X_op_symbol = make_expr_symbol (e);
12603 e->X_add_symbol = NULL;
12604 e->X_add_number = 0;
12605 e->X_op = O_index;
12606 }
12607 else
12608 {
12609 e->X_op = O_absent;
12610 input_line_pointer = end;
12611 }
12612 break;
12613 }
12614 }
12615
12616 \f
12617 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
12618 const char *md_shortopts = "kVQ:sqnO::";
12619 #else
12620 const char *md_shortopts = "qnO::";
12621 #endif
12622
12623 #define OPTION_32 (OPTION_MD_BASE + 0)
12624 #define OPTION_64 (OPTION_MD_BASE + 1)
12625 #define OPTION_DIVIDE (OPTION_MD_BASE + 2)
12626 #define OPTION_MARCH (OPTION_MD_BASE + 3)
12627 #define OPTION_MTUNE (OPTION_MD_BASE + 4)
12628 #define OPTION_MMNEMONIC (OPTION_MD_BASE + 5)
12629 #define OPTION_MSYNTAX (OPTION_MD_BASE + 6)
12630 #define OPTION_MINDEX_REG (OPTION_MD_BASE + 7)
12631 #define OPTION_MNAKED_REG (OPTION_MD_BASE + 8)
12632 #define OPTION_MRELAX_RELOCATIONS (OPTION_MD_BASE + 9)
12633 #define OPTION_MSSE2AVX (OPTION_MD_BASE + 10)
12634 #define OPTION_MSSE_CHECK (OPTION_MD_BASE + 11)
12635 #define OPTION_MOPERAND_CHECK (OPTION_MD_BASE + 12)
12636 #define OPTION_MAVXSCALAR (OPTION_MD_BASE + 13)
12637 #define OPTION_X32 (OPTION_MD_BASE + 14)
12638 #define OPTION_MADD_BND_PREFIX (OPTION_MD_BASE + 15)
12639 #define OPTION_MEVEXLIG (OPTION_MD_BASE + 16)
12640 #define OPTION_MEVEXWIG (OPTION_MD_BASE + 17)
12641 #define OPTION_MBIG_OBJ (OPTION_MD_BASE + 18)
12642 #define OPTION_MOMIT_LOCK_PREFIX (OPTION_MD_BASE + 19)
12643 #define OPTION_MEVEXRCIG (OPTION_MD_BASE + 20)
12644 #define OPTION_MSHARED (OPTION_MD_BASE + 21)
12645 #define OPTION_MAMD64 (OPTION_MD_BASE + 22)
12646 #define OPTION_MINTEL64 (OPTION_MD_BASE + 23)
12647 #define OPTION_MFENCE_AS_LOCK_ADD (OPTION_MD_BASE + 24)
12648 #define OPTION_X86_USED_NOTE (OPTION_MD_BASE + 25)
12649 #define OPTION_MVEXWIG (OPTION_MD_BASE + 26)
12650 #define OPTION_MALIGN_BRANCH_BOUNDARY (OPTION_MD_BASE + 27)
12651 #define OPTION_MALIGN_BRANCH_PREFIX_SIZE (OPTION_MD_BASE + 28)
12652 #define OPTION_MALIGN_BRANCH (OPTION_MD_BASE + 29)
12653 #define OPTION_MBRANCHES_WITH_32B_BOUNDARIES (OPTION_MD_BASE + 30)
12654 #define OPTION_MLFENCE_AFTER_LOAD (OPTION_MD_BASE + 31)
12655 #define OPTION_MLFENCE_BEFORE_INDIRECT_BRANCH (OPTION_MD_BASE + 32)
12656 #define OPTION_MLFENCE_BEFORE_RET (OPTION_MD_BASE + 33)
12657
12658 struct option md_longopts[] =
12659 {
12660 {"32", no_argument, NULL, OPTION_32},
12661 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
12662 || defined (TE_PE) || defined (TE_PEP) || defined (OBJ_MACH_O))
12663 {"64", no_argument, NULL, OPTION_64},
12664 #endif
12665 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
12666 {"x32", no_argument, NULL, OPTION_X32},
12667 {"mshared", no_argument, NULL, OPTION_MSHARED},
12668 {"mx86-used-note", required_argument, NULL, OPTION_X86_USED_NOTE},
12669 #endif
12670 {"divide", no_argument, NULL, OPTION_DIVIDE},
12671 {"march", required_argument, NULL, OPTION_MARCH},
12672 {"mtune", required_argument, NULL, OPTION_MTUNE},
12673 {"mmnemonic", required_argument, NULL, OPTION_MMNEMONIC},
12674 {"msyntax", required_argument, NULL, OPTION_MSYNTAX},
12675 {"mindex-reg", no_argument, NULL, OPTION_MINDEX_REG},
12676 {"mnaked-reg", no_argument, NULL, OPTION_MNAKED_REG},
12677 {"msse2avx", no_argument, NULL, OPTION_MSSE2AVX},
12678 {"msse-check", required_argument, NULL, OPTION_MSSE_CHECK},
12679 {"moperand-check", required_argument, NULL, OPTION_MOPERAND_CHECK},
12680 {"mavxscalar", required_argument, NULL, OPTION_MAVXSCALAR},
12681 {"mvexwig", required_argument, NULL, OPTION_MVEXWIG},
12682 {"madd-bnd-prefix", no_argument, NULL, OPTION_MADD_BND_PREFIX},
12683 {"mevexlig", required_argument, NULL, OPTION_MEVEXLIG},
12684 {"mevexwig", required_argument, NULL, OPTION_MEVEXWIG},
12685 # if defined (TE_PE) || defined (TE_PEP)
12686 {"mbig-obj", no_argument, NULL, OPTION_MBIG_OBJ},
12687 #endif
12688 {"momit-lock-prefix", required_argument, NULL, OPTION_MOMIT_LOCK_PREFIX},
12689 {"mfence-as-lock-add", required_argument, NULL, OPTION_MFENCE_AS_LOCK_ADD},
12690 {"mrelax-relocations", required_argument, NULL, OPTION_MRELAX_RELOCATIONS},
12691 {"mevexrcig", required_argument, NULL, OPTION_MEVEXRCIG},
12692 {"malign-branch-boundary", required_argument, NULL, OPTION_MALIGN_BRANCH_BOUNDARY},
12693 {"malign-branch-prefix-size", required_argument, NULL, OPTION_MALIGN_BRANCH_PREFIX_SIZE},
12694 {"malign-branch", required_argument, NULL, OPTION_MALIGN_BRANCH},
12695 {"mbranches-within-32B-boundaries", no_argument, NULL, OPTION_MBRANCHES_WITH_32B_BOUNDARIES},
12696 {"mlfence-after-load", required_argument, NULL, OPTION_MLFENCE_AFTER_LOAD},
12697 {"mlfence-before-indirect-branch", required_argument, NULL,
12698 OPTION_MLFENCE_BEFORE_INDIRECT_BRANCH},
12699 {"mlfence-before-ret", required_argument, NULL, OPTION_MLFENCE_BEFORE_RET},
12700 {"mamd64", no_argument, NULL, OPTION_MAMD64},
12701 {"mintel64", no_argument, NULL, OPTION_MINTEL64},
12702 {NULL, no_argument, NULL, 0}
12703 };
12704 size_t md_longopts_size = sizeof (md_longopts);
12705
12706 int
12707 md_parse_option (int c, const char *arg)
12708 {
12709 unsigned int j;
12710 char *arch, *next, *saved, *type;
12711
12712 switch (c)
12713 {
12714 case 'n':
12715 optimize_align_code = 0;
12716 break;
12717
12718 case 'q':
12719 quiet_warnings = 1;
12720 break;
12721
12722 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
12723 /* -Qy, -Qn: SVR4 arguments controlling whether a .comment section
12724 should be emitted or not. FIXME: Not implemented. */
12725 case 'Q':
12726 if ((arg[0] != 'y' && arg[0] != 'n') || arg[1])
12727 return 0;
12728 break;
12729
12730 /* -V: SVR4 argument to print version ID. */
12731 case 'V':
12732 print_version_id ();
12733 break;
12734
12735 /* -k: Ignore for FreeBSD compatibility. */
12736 case 'k':
12737 break;
12738
12739 case 's':
12740 /* -s: On i386 Solaris, this tells the native assembler to use
12741 .stab instead of .stab.excl. We always use .stab anyhow. */
12742 break;
12743
12744 case OPTION_MSHARED:
12745 shared = 1;
12746 break;
12747
12748 case OPTION_X86_USED_NOTE:
12749 if (strcasecmp (arg, "yes") == 0)
12750 x86_used_note = 1;
12751 else if (strcasecmp (arg, "no") == 0)
12752 x86_used_note = 0;
12753 else
12754 as_fatal (_("invalid -mx86-used-note= option: `%s'"), arg);
12755 break;
12756
12757
12758 #endif
12759 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
12760 || defined (TE_PE) || defined (TE_PEP) || defined (OBJ_MACH_O))
12761 case OPTION_64:
12762 {
12763 const char **list, **l;
12764
12765 list = bfd_target_list ();
12766 for (l = list; *l != NULL; l++)
12767 if (CONST_STRNEQ (*l, "elf64-x86-64")
12768 || strcmp (*l, "coff-x86-64") == 0
12769 || strcmp (*l, "pe-x86-64") == 0
12770 || strcmp (*l, "pei-x86-64") == 0
12771 || strcmp (*l, "mach-o-x86-64") == 0)
12772 {
12773 default_arch = "x86_64";
12774 break;
12775 }
12776 if (*l == NULL)
12777 as_fatal (_("no compiled in support for x86_64"));
12778 free (list);
12779 }
12780 break;
12781 #endif
12782
12783 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
12784 case OPTION_X32:
12785 if (IS_ELF)
12786 {
12787 const char **list, **l;
12788
12789 list = bfd_target_list ();
12790 for (l = list; *l != NULL; l++)
12791 if (CONST_STRNEQ (*l, "elf32-x86-64"))
12792 {
12793 default_arch = "x86_64:32";
12794 break;
12795 }
12796 if (*l == NULL)
12797 as_fatal (_("no compiled in support for 32bit x86_64"));
12798 free (list);
12799 }
12800 else
12801 as_fatal (_("32bit x86_64 is only supported for ELF"));
12802 break;
12803 #endif
12804
12805 case OPTION_32:
12806 default_arch = "i386";
12807 break;
12808
12809 case OPTION_DIVIDE:
12810 #ifdef SVR4_COMMENT_CHARS
12811 {
12812 char *n, *t;
12813 const char *s;
12814
12815 n = XNEWVEC (char, strlen (i386_comment_chars) + 1);
12816 t = n;
12817 for (s = i386_comment_chars; *s != '\0'; s++)
12818 if (*s != '/')
12819 *t++ = *s;
12820 *t = '\0';
12821 i386_comment_chars = n;
12822 }
12823 #endif
12824 break;
12825
12826 case OPTION_MARCH:
12827 saved = xstrdup (arg);
12828 arch = saved;
12829 /* Allow -march=+nosse. */
12830 if (*arch == '+')
12831 arch++;
12832 do
12833 {
12834 if (*arch == '.')
12835 as_fatal (_("invalid -march= option: `%s'"), arg);
12836 next = strchr (arch, '+');
12837 if (next)
12838 *next++ = '\0';
12839 for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
12840 {
12841 if (strcmp (arch, cpu_arch [j].name) == 0)
12842 {
12843 /* Processor. */
12844 if (! cpu_arch[j].flags.bitfield.cpui386)
12845 continue;
12846
12847 cpu_arch_name = cpu_arch[j].name;
12848 cpu_sub_arch_name = NULL;
12849 cpu_arch_flags = cpu_arch[j].flags;
12850 cpu_arch_isa = cpu_arch[j].type;
12851 cpu_arch_isa_flags = cpu_arch[j].flags;
12852 if (!cpu_arch_tune_set)
12853 {
12854 cpu_arch_tune = cpu_arch_isa;
12855 cpu_arch_tune_flags = cpu_arch_isa_flags;
12856 }
12857 break;
12858 }
12859 else if (*cpu_arch [j].name == '.'
12860 && strcmp (arch, cpu_arch [j].name + 1) == 0)
12861 {
12862 /* ISA extension. */
12863 i386_cpu_flags flags;
12864
12865 flags = cpu_flags_or (cpu_arch_flags,
12866 cpu_arch[j].flags);
12867
12868 if (!cpu_flags_equal (&flags, &cpu_arch_flags))
12869 {
12870 if (cpu_sub_arch_name)
12871 {
12872 char *name = cpu_sub_arch_name;
12873 cpu_sub_arch_name = concat (name,
12874 cpu_arch[j].name,
12875 (const char *) NULL);
12876 free (name);
12877 }
12878 else
12879 cpu_sub_arch_name = xstrdup (cpu_arch[j].name);
12880 cpu_arch_flags = flags;
12881 cpu_arch_isa_flags = flags;
12882 }
12883 else
12884 cpu_arch_isa_flags
12885 = cpu_flags_or (cpu_arch_isa_flags,
12886 cpu_arch[j].flags);
12887 break;
12888 }
12889 }
12890
12891 if (j >= ARRAY_SIZE (cpu_arch))
12892 {
12893 /* Disable an ISA extension. */
12894 for (j = 0; j < ARRAY_SIZE (cpu_noarch); j++)
12895 if (strcmp (arch, cpu_noarch [j].name) == 0)
12896 {
12897 i386_cpu_flags flags;
12898
12899 flags = cpu_flags_and_not (cpu_arch_flags,
12900 cpu_noarch[j].flags);
12901 if (!cpu_flags_equal (&flags, &cpu_arch_flags))
12902 {
12903 if (cpu_sub_arch_name)
12904 {
12905 char *name = cpu_sub_arch_name;
12906 cpu_sub_arch_name = concat (arch,
12907 (const char *) NULL);
12908 free (name);
12909 }
12910 else
12911 cpu_sub_arch_name = xstrdup (arch);
12912 cpu_arch_flags = flags;
12913 cpu_arch_isa_flags = flags;
12914 }
12915 break;
12916 }
12917
12918 if (j >= ARRAY_SIZE (cpu_noarch))
12919 j = ARRAY_SIZE (cpu_arch);
12920 }
12921
12922 if (j >= ARRAY_SIZE (cpu_arch))
12923 as_fatal (_("invalid -march= option: `%s'"), arg);
12924
12925 arch = next;
12926 }
12927 while (next != NULL);
12928 free (saved);
12929 break;
12930
12931 case OPTION_MTUNE:
12932 if (*arg == '.')
12933 as_fatal (_("invalid -mtune= option: `%s'"), arg);
12934 for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
12935 {
12936 if (strcmp (arg, cpu_arch [j].name) == 0)
12937 {
12938 cpu_arch_tune_set = 1;
12939 cpu_arch_tune = cpu_arch [j].type;
12940 cpu_arch_tune_flags = cpu_arch[j].flags;
12941 break;
12942 }
12943 }
12944 if (j >= ARRAY_SIZE (cpu_arch))
12945 as_fatal (_("invalid -mtune= option: `%s'"), arg);
12946 break;
12947
12948 case OPTION_MMNEMONIC:
12949 if (strcasecmp (arg, "att") == 0)
12950 intel_mnemonic = 0;
12951 else if (strcasecmp (arg, "intel") == 0)
12952 intel_mnemonic = 1;
12953 else
12954 as_fatal (_("invalid -mmnemonic= option: `%s'"), arg);
12955 break;
12956
12957 case OPTION_MSYNTAX:
12958 if (strcasecmp (arg, "att") == 0)
12959 intel_syntax = 0;
12960 else if (strcasecmp (arg, "intel") == 0)
12961 intel_syntax = 1;
12962 else
12963 as_fatal (_("invalid -msyntax= option: `%s'"), arg);
12964 break;
12965
12966 case OPTION_MINDEX_REG:
12967 allow_index_reg = 1;
12968 break;
12969
12970 case OPTION_MNAKED_REG:
12971 allow_naked_reg = 1;
12972 break;
12973
12974 case OPTION_MSSE2AVX:
12975 sse2avx = 1;
12976 break;
12977
12978 case OPTION_MSSE_CHECK:
12979 if (strcasecmp (arg, "error") == 0)
12980 sse_check = check_error;
12981 else if (strcasecmp (arg, "warning") == 0)
12982 sse_check = check_warning;
12983 else if (strcasecmp (arg, "none") == 0)
12984 sse_check = check_none;
12985 else
12986 as_fatal (_("invalid -msse-check= option: `%s'"), arg);
12987 break;
12988
12989 case OPTION_MOPERAND_CHECK:
12990 if (strcasecmp (arg, "error") == 0)
12991 operand_check = check_error;
12992 else if (strcasecmp (arg, "warning") == 0)
12993 operand_check = check_warning;
12994 else if (strcasecmp (arg, "none") == 0)
12995 operand_check = check_none;
12996 else
12997 as_fatal (_("invalid -moperand-check= option: `%s'"), arg);
12998 break;
12999
13000 case OPTION_MAVXSCALAR:
13001 if (strcasecmp (arg, "128") == 0)
13002 avxscalar = vex128;
13003 else if (strcasecmp (arg, "256") == 0)
13004 avxscalar = vex256;
13005 else
13006 as_fatal (_("invalid -mavxscalar= option: `%s'"), arg);
13007 break;
13008
13009 case OPTION_MVEXWIG:
13010 if (strcmp (arg, "0") == 0)
13011 vexwig = vexw0;
13012 else if (strcmp (arg, "1") == 0)
13013 vexwig = vexw1;
13014 else
13015 as_fatal (_("invalid -mvexwig= option: `%s'"), arg);
13016 break;
13017
13018 case OPTION_MADD_BND_PREFIX:
13019 add_bnd_prefix = 1;
13020 break;
13021
13022 case OPTION_MEVEXLIG:
13023 if (strcmp (arg, "128") == 0)
13024 evexlig = evexl128;
13025 else if (strcmp (arg, "256") == 0)
13026 evexlig = evexl256;
13027 else if (strcmp (arg, "512") == 0)
13028 evexlig = evexl512;
13029 else
13030 as_fatal (_("invalid -mevexlig= option: `%s'"), arg);
13031 break;
13032
13033 case OPTION_MEVEXRCIG:
13034 if (strcmp (arg, "rne") == 0)
13035 evexrcig = rne;
13036 else if (strcmp (arg, "rd") == 0)
13037 evexrcig = rd;
13038 else if (strcmp (arg, "ru") == 0)
13039 evexrcig = ru;
13040 else if (strcmp (arg, "rz") == 0)
13041 evexrcig = rz;
13042 else
13043 as_fatal (_("invalid -mevexrcig= option: `%s'"), arg);
13044 break;
13045
13046 case OPTION_MEVEXWIG:
13047 if (strcmp (arg, "0") == 0)
13048 evexwig = evexw0;
13049 else if (strcmp (arg, "1") == 0)
13050 evexwig = evexw1;
13051 else
13052 as_fatal (_("invalid -mevexwig= option: `%s'"), arg);
13053 break;
13054
13055 # if defined (TE_PE) || defined (TE_PEP)
13056 case OPTION_MBIG_OBJ:
13057 use_big_obj = 1;
13058 break;
13059 #endif
13060
13061 case OPTION_MOMIT_LOCK_PREFIX:
13062 if (strcasecmp (arg, "yes") == 0)
13063 omit_lock_prefix = 1;
13064 else if (strcasecmp (arg, "no") == 0)
13065 omit_lock_prefix = 0;
13066 else
13067 as_fatal (_("invalid -momit-lock-prefix= option: `%s'"), arg);
13068 break;
13069
13070 case OPTION_MFENCE_AS_LOCK_ADD:
13071 if (strcasecmp (arg, "yes") == 0)
13072 avoid_fence = 1;
13073 else if (strcasecmp (arg, "no") == 0)
13074 avoid_fence = 0;
13075 else
13076 as_fatal (_("invalid -mfence-as-lock-add= option: `%s'"), arg);
13077 break;
13078
13079 case OPTION_MLFENCE_AFTER_LOAD:
13080 if (strcasecmp (arg, "yes") == 0)
13081 lfence_after_load = 1;
13082 else if (strcasecmp (arg, "no") == 0)
13083 lfence_after_load = 0;
13084 else
13085 as_fatal (_("invalid -mlfence-after-load= option: `%s'"), arg);
13086 break;
13087
13088 case OPTION_MLFENCE_BEFORE_INDIRECT_BRANCH:
13089 if (strcasecmp (arg, "all") == 0)
13090 {
13091 lfence_before_indirect_branch = lfence_branch_all;
13092 if (lfence_before_ret == lfence_before_ret_none)
13093 lfence_before_ret = lfence_before_ret_shl;
13094 }
13095 else if (strcasecmp (arg, "memory") == 0)
13096 lfence_before_indirect_branch = lfence_branch_memory;
13097 else if (strcasecmp (arg, "register") == 0)
13098 lfence_before_indirect_branch = lfence_branch_register;
13099 else if (strcasecmp (arg, "none") == 0)
13100 lfence_before_indirect_branch = lfence_branch_none;
13101 else
13102 as_fatal (_("invalid -mlfence-before-indirect-branch= option: `%s'"),
13103 arg);
13104 break;
13105
13106 case OPTION_MLFENCE_BEFORE_RET:
13107 if (strcasecmp (arg, "or") == 0)
13108 lfence_before_ret = lfence_before_ret_or;
13109 else if (strcasecmp (arg, "not") == 0)
13110 lfence_before_ret = lfence_before_ret_not;
13111 else if (strcasecmp (arg, "shl") == 0 || strcasecmp (arg, "yes") == 0)
13112 lfence_before_ret = lfence_before_ret_shl;
13113 else if (strcasecmp (arg, "none") == 0)
13114 lfence_before_ret = lfence_before_ret_none;
13115 else
13116 as_fatal (_("invalid -mlfence-before-ret= option: `%s'"),
13117 arg);
13118 break;
13119
13120 case OPTION_MRELAX_RELOCATIONS:
13121 if (strcasecmp (arg, "yes") == 0)
13122 generate_relax_relocations = 1;
13123 else if (strcasecmp (arg, "no") == 0)
13124 generate_relax_relocations = 0;
13125 else
13126 as_fatal (_("invalid -mrelax-relocations= option: `%s'"), arg);
13127 break;
13128
13129 case OPTION_MALIGN_BRANCH_BOUNDARY:
13130 {
13131 char *end;
13132 long int align = strtoul (arg, &end, 0);
13133 if (*end == '\0')
13134 {
13135 if (align == 0)
13136 {
13137 align_branch_power = 0;
13138 break;
13139 }
13140 else if (align >= 16)
13141 {
13142 int align_power;
13143 for (align_power = 0;
13144 (align & 1) == 0;
13145 align >>= 1, align_power++)
13146 continue;
13147 /* Limit alignment power to 31. */
13148 if (align == 1 && align_power < 32)
13149 {
13150 align_branch_power = align_power;
13151 break;
13152 }
13153 }
13154 }
13155 as_fatal (_("invalid -malign-branch-boundary= value: %s"), arg);
13156 }
13157 break;
13158
13159 case OPTION_MALIGN_BRANCH_PREFIX_SIZE:
13160 {
13161 char *end;
13162 int align = strtoul (arg, &end, 0);
13163 /* Some processors only support 5 prefixes. */
13164 if (*end == '\0' && align >= 0 && align < 6)
13165 {
13166 align_branch_prefix_size = align;
13167 break;
13168 }
13169 as_fatal (_("invalid -malign-branch-prefix-size= value: %s"),
13170 arg);
13171 }
13172 break;
13173
13174 case OPTION_MALIGN_BRANCH:
13175 align_branch = 0;
13176 saved = xstrdup (arg);
13177 type = saved;
13178 do
13179 {
13180 next = strchr (type, '+');
13181 if (next)
13182 *next++ = '\0';
13183 if (strcasecmp (type, "jcc") == 0)
13184 align_branch |= align_branch_jcc_bit;
13185 else if (strcasecmp (type, "fused") == 0)
13186 align_branch |= align_branch_fused_bit;
13187 else if (strcasecmp (type, "jmp") == 0)
13188 align_branch |= align_branch_jmp_bit;
13189 else if (strcasecmp (type, "call") == 0)
13190 align_branch |= align_branch_call_bit;
13191 else if (strcasecmp (type, "ret") == 0)
13192 align_branch |= align_branch_ret_bit;
13193 else if (strcasecmp (type, "indirect") == 0)
13194 align_branch |= align_branch_indirect_bit;
13195 else
13196 as_fatal (_("invalid -malign-branch= option: `%s'"), arg);
13197 type = next;
13198 }
13199 while (next != NULL);
13200 free (saved);
13201 break;
13202
13203 case OPTION_MBRANCHES_WITH_32B_BOUNDARIES:
13204 align_branch_power = 5;
13205 align_branch_prefix_size = 5;
13206 align_branch = (align_branch_jcc_bit
13207 | align_branch_fused_bit
13208 | align_branch_jmp_bit);
13209 break;
13210
13211 case OPTION_MAMD64:
13212 isa64 = amd64;
13213 break;
13214
13215 case OPTION_MINTEL64:
13216 isa64 = intel64;
13217 break;
13218
13219 case 'O':
13220 if (arg == NULL)
13221 {
13222 optimize = 1;
13223 /* Turn off -Os. */
13224 optimize_for_space = 0;
13225 }
13226 else if (*arg == 's')
13227 {
13228 optimize_for_space = 1;
13229 /* Turn on all encoding optimizations. */
13230 optimize = INT_MAX;
13231 }
13232 else
13233 {
13234 optimize = atoi (arg);
13235 /* Turn off -Os. */
13236 optimize_for_space = 0;
13237 }
13238 break;
13239
13240 default:
13241 return 0;
13242 }
13243 return 1;
13244 }
13245
13246 #define MESSAGE_TEMPLATE \
13247 " "
13248
13249 static char *
13250 output_message (FILE *stream, char *p, char *message, char *start,
13251 int *left_p, const char *name, int len)
13252 {
13253 int size = sizeof (MESSAGE_TEMPLATE);
13254 int left = *left_p;
13255
13256 /* Reserve 2 spaces for ", " or ",\0" */
13257 left -= len + 2;
13258
13259 /* Check if there is any room. */
13260 if (left >= 0)
13261 {
13262 if (p != start)
13263 {
13264 *p++ = ',';
13265 *p++ = ' ';
13266 }
13267 p = mempcpy (p, name, len);
13268 }
13269 else
13270 {
13271 /* Output the current message now and start a new one. */
13272 *p++ = ',';
13273 *p = '\0';
13274 fprintf (stream, "%s\n", message);
13275 p = start;
13276 left = size - (start - message) - len - 2;
13277
13278 gas_assert (left >= 0);
13279
13280 p = mempcpy (p, name, len);
13281 }
13282
13283 *left_p = left;
13284 return p;
13285 }
13286
13287 static void
13288 show_arch (FILE *stream, int ext, int check)
13289 {
13290 static char message[] = MESSAGE_TEMPLATE;
13291 char *start = message + 27;
13292 char *p;
13293 int size = sizeof (MESSAGE_TEMPLATE);
13294 int left;
13295 const char *name;
13296 int len;
13297 unsigned int j;
13298
13299 p = start;
13300 left = size - (start - message);
13301 for (j = 0; j < ARRAY_SIZE (cpu_arch); j++)
13302 {
13303 /* Should it be skipped? */
13304 if (cpu_arch [j].skip)
13305 continue;
13306
13307 name = cpu_arch [j].name;
13308 len = cpu_arch [j].len;
13309 if (*name == '.')
13310 {
13311 /* It is an extension. Skip if we aren't asked to show it. */
13312 if (ext)
13313 {
13314 name++;
13315 len--;
13316 }
13317 else
13318 continue;
13319 }
13320 else if (ext)
13321 {
13322 /* It is an processor. Skip if we show only extension. */
13323 continue;
13324 }
13325 else if (check && ! cpu_arch[j].flags.bitfield.cpui386)
13326 {
13327 /* It is an impossible processor - skip. */
13328 continue;
13329 }
13330
13331 p = output_message (stream, p, message, start, &left, name, len);
13332 }
13333
13334 /* Display disabled extensions. */
13335 if (ext)
13336 for (j = 0; j < ARRAY_SIZE (cpu_noarch); j++)
13337 {
13338 name = cpu_noarch [j].name;
13339 len = cpu_noarch [j].len;
13340 p = output_message (stream, p, message, start, &left, name,
13341 len);
13342 }
13343
13344 *p = '\0';
13345 fprintf (stream, "%s\n", message);
13346 }
13347
13348 void
13349 md_show_usage (FILE *stream)
13350 {
13351 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
13352 fprintf (stream, _("\
13353 -Qy, -Qn ignored\n\
13354 -V print assembler version number\n\
13355 -k ignored\n"));
13356 #endif
13357 fprintf (stream, _("\
13358 -n Do not optimize code alignment\n\
13359 -q quieten some warnings\n"));
13360 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
13361 fprintf (stream, _("\
13362 -s ignored\n"));
13363 #endif
13364 #if defined BFD64 && (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
13365 || defined (TE_PE) || defined (TE_PEP))
13366 fprintf (stream, _("\
13367 --32/--64/--x32 generate 32bit/64bit/x32 code\n"));
13368 #endif
13369 #ifdef SVR4_COMMENT_CHARS
13370 fprintf (stream, _("\
13371 --divide do not treat `/' as a comment character\n"));
13372 #else
13373 fprintf (stream, _("\
13374 --divide ignored\n"));
13375 #endif
13376 fprintf (stream, _("\
13377 -march=CPU[,+EXTENSION...]\n\
13378 generate code for CPU and EXTENSION, CPU is one of:\n"));
13379 show_arch (stream, 0, 1);
13380 fprintf (stream, _("\
13381 EXTENSION is combination of:\n"));
13382 show_arch (stream, 1, 0);
13383 fprintf (stream, _("\
13384 -mtune=CPU optimize for CPU, CPU is one of:\n"));
13385 show_arch (stream, 0, 0);
13386 fprintf (stream, _("\
13387 -msse2avx encode SSE instructions with VEX prefix\n"));
13388 fprintf (stream, _("\
13389 -msse-check=[none|error|warning] (default: warning)\n\
13390 check SSE instructions\n"));
13391 fprintf (stream, _("\
13392 -moperand-check=[none|error|warning] (default: warning)\n\
13393 check operand combinations for validity\n"));
13394 fprintf (stream, _("\
13395 -mavxscalar=[128|256] (default: 128)\n\
13396 encode scalar AVX instructions with specific vector\n\
13397 length\n"));
13398 fprintf (stream, _("\
13399 -mvexwig=[0|1] (default: 0)\n\
13400 encode VEX instructions with specific VEX.W value\n\
13401 for VEX.W bit ignored instructions\n"));
13402 fprintf (stream, _("\
13403 -mevexlig=[128|256|512] (default: 128)\n\
13404 encode scalar EVEX instructions with specific vector\n\
13405 length\n"));
13406 fprintf (stream, _("\
13407 -mevexwig=[0|1] (default: 0)\n\
13408 encode EVEX instructions with specific EVEX.W value\n\
13409 for EVEX.W bit ignored instructions\n"));
13410 fprintf (stream, _("\
13411 -mevexrcig=[rne|rd|ru|rz] (default: rne)\n\
13412 encode EVEX instructions with specific EVEX.RC value\n\
13413 for SAE-only ignored instructions\n"));
13414 fprintf (stream, _("\
13415 -mmnemonic=[att|intel] "));
13416 if (SYSV386_COMPAT)
13417 fprintf (stream, _("(default: att)\n"));
13418 else
13419 fprintf (stream, _("(default: intel)\n"));
13420 fprintf (stream, _("\
13421 use AT&T/Intel mnemonic\n"));
13422 fprintf (stream, _("\
13423 -msyntax=[att|intel] (default: att)\n\
13424 use AT&T/Intel syntax\n"));
13425 fprintf (stream, _("\
13426 -mindex-reg support pseudo index registers\n"));
13427 fprintf (stream, _("\
13428 -mnaked-reg don't require `%%' prefix for registers\n"));
13429 fprintf (stream, _("\
13430 -madd-bnd-prefix add BND prefix for all valid branches\n"));
13431 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
13432 fprintf (stream, _("\
13433 -mshared disable branch optimization for shared code\n"));
13434 fprintf (stream, _("\
13435 -mx86-used-note=[no|yes] "));
13436 if (DEFAULT_X86_USED_NOTE)
13437 fprintf (stream, _("(default: yes)\n"));
13438 else
13439 fprintf (stream, _("(default: no)\n"));
13440 fprintf (stream, _("\
13441 generate x86 used ISA and feature properties\n"));
13442 #endif
13443 #if defined (TE_PE) || defined (TE_PEP)
13444 fprintf (stream, _("\
13445 -mbig-obj generate big object files\n"));
13446 #endif
13447 fprintf (stream, _("\
13448 -momit-lock-prefix=[no|yes] (default: no)\n\
13449 strip all lock prefixes\n"));
13450 fprintf (stream, _("\
13451 -mfence-as-lock-add=[no|yes] (default: no)\n\
13452 encode lfence, mfence and sfence as\n\
13453 lock addl $0x0, (%%{re}sp)\n"));
13454 fprintf (stream, _("\
13455 -mrelax-relocations=[no|yes] "));
13456 if (DEFAULT_GENERATE_X86_RELAX_RELOCATIONS)
13457 fprintf (stream, _("(default: yes)\n"));
13458 else
13459 fprintf (stream, _("(default: no)\n"));
13460 fprintf (stream, _("\
13461 generate relax relocations\n"));
13462 fprintf (stream, _("\
13463 -malign-branch-boundary=NUM (default: 0)\n\
13464 align branches within NUM byte boundary\n"));
13465 fprintf (stream, _("\
13466 -malign-branch=TYPE[+TYPE...] (default: jcc+fused+jmp)\n\
13467 TYPE is combination of jcc, fused, jmp, call, ret,\n\
13468 indirect\n\
13469 specify types of branches to align\n"));
13470 fprintf (stream, _("\
13471 -malign-branch-prefix-size=NUM (default: 5)\n\
13472 align branches with NUM prefixes per instruction\n"));
13473 fprintf (stream, _("\
13474 -mbranches-within-32B-boundaries\n\
13475 align branches within 32 byte boundary\n"));
13476 fprintf (stream, _("\
13477 -mlfence-after-load=[no|yes] (default: no)\n\
13478 generate lfence after load\n"));
13479 fprintf (stream, _("\
13480 -mlfence-before-indirect-branch=[none|all|register|memory] (default: none)\n\
13481 generate lfence before indirect near branch\n"));
13482 fprintf (stream, _("\
13483 -mlfence-before-ret=[none|or|not|shl|yes] (default: none)\n\
13484 generate lfence before ret\n"));
13485 fprintf (stream, _("\
13486 -mamd64 accept only AMD64 ISA [default]\n"));
13487 fprintf (stream, _("\
13488 -mintel64 accept only Intel64 ISA\n"));
13489 }
13490
13491 #if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \
13492 || defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \
13493 || defined (TE_PE) || defined (TE_PEP) || defined (OBJ_MACH_O))
13494
13495 /* Pick the target format to use. */
13496
13497 const char *
13498 i386_target_format (void)
13499 {
13500 if (!strncmp (default_arch, "x86_64", 6))
13501 {
13502 update_code_flag (CODE_64BIT, 1);
13503 if (default_arch[6] == '\0')
13504 x86_elf_abi = X86_64_ABI;
13505 else
13506 x86_elf_abi = X86_64_X32_ABI;
13507 }
13508 else if (!strcmp (default_arch, "i386"))
13509 update_code_flag (CODE_32BIT, 1);
13510 else if (!strcmp (default_arch, "iamcu"))
13511 {
13512 update_code_flag (CODE_32BIT, 1);
13513 if (cpu_arch_isa == PROCESSOR_UNKNOWN)
13514 {
13515 static const i386_cpu_flags iamcu_flags = CPU_IAMCU_FLAGS;
13516 cpu_arch_name = "iamcu";
13517 cpu_sub_arch_name = NULL;
13518 cpu_arch_flags = iamcu_flags;
13519 cpu_arch_isa = PROCESSOR_IAMCU;
13520 cpu_arch_isa_flags = iamcu_flags;
13521 if (!cpu_arch_tune_set)
13522 {
13523 cpu_arch_tune = cpu_arch_isa;
13524 cpu_arch_tune_flags = cpu_arch_isa_flags;
13525 }
13526 }
13527 else if (cpu_arch_isa != PROCESSOR_IAMCU)
13528 as_fatal (_("Intel MCU doesn't support `%s' architecture"),
13529 cpu_arch_name);
13530 }
13531 else
13532 as_fatal (_("unknown architecture"));
13533
13534 if (cpu_flags_all_zero (&cpu_arch_isa_flags))
13535 cpu_arch_isa_flags = cpu_arch[flag_code == CODE_64BIT].flags;
13536 if (cpu_flags_all_zero (&cpu_arch_tune_flags))
13537 cpu_arch_tune_flags = cpu_arch[flag_code == CODE_64BIT].flags;
13538
13539 switch (OUTPUT_FLAVOR)
13540 {
13541 #if defined (OBJ_MAYBE_AOUT) || defined (OBJ_AOUT)
13542 case bfd_target_aout_flavour:
13543 return AOUT_TARGET_FORMAT;
13544 #endif
13545 #if defined (OBJ_MAYBE_COFF) || defined (OBJ_COFF)
13546 # if defined (TE_PE) || defined (TE_PEP)
13547 case bfd_target_coff_flavour:
13548 if (flag_code == CODE_64BIT)
13549 return use_big_obj ? "pe-bigobj-x86-64" : "pe-x86-64";
13550 else
13551 return use_big_obj ? "pe-bigobj-i386" : "pe-i386";
13552 # elif defined (TE_GO32)
13553 case bfd_target_coff_flavour:
13554 return "coff-go32";
13555 # else
13556 case bfd_target_coff_flavour:
13557 return "coff-i386";
13558 # endif
13559 #endif
13560 #if defined (OBJ_MAYBE_ELF) || defined (OBJ_ELF)
13561 case bfd_target_elf_flavour:
13562 {
13563 const char *format;
13564
13565 switch (x86_elf_abi)
13566 {
13567 default:
13568 format = ELF_TARGET_FORMAT;
13569 #ifndef TE_SOLARIS
13570 tls_get_addr = "___tls_get_addr";
13571 #endif
13572 break;
13573 case X86_64_ABI:
13574 use_rela_relocations = 1;
13575 object_64bit = 1;
13576 #ifndef TE_SOLARIS
13577 tls_get_addr = "__tls_get_addr";
13578 #endif
13579 format = ELF_TARGET_FORMAT64;
13580 break;
13581 case X86_64_X32_ABI:
13582 use_rela_relocations = 1;
13583 object_64bit = 1;
13584 #ifndef TE_SOLARIS
13585 tls_get_addr = "__tls_get_addr";
13586 #endif
13587 disallow_64bit_reloc = 1;
13588 format = ELF_TARGET_FORMAT32;
13589 break;
13590 }
13591 if (cpu_arch_isa == PROCESSOR_L1OM)
13592 {
13593 if (x86_elf_abi != X86_64_ABI)
13594 as_fatal (_("Intel L1OM is 64bit only"));
13595 return ELF_TARGET_L1OM_FORMAT;
13596 }
13597 else if (cpu_arch_isa == PROCESSOR_K1OM)
13598 {
13599 if (x86_elf_abi != X86_64_ABI)
13600 as_fatal (_("Intel K1OM is 64bit only"));
13601 return ELF_TARGET_K1OM_FORMAT;
13602 }
13603 else if (cpu_arch_isa == PROCESSOR_IAMCU)
13604 {
13605 if (x86_elf_abi != I386_ABI)
13606 as_fatal (_("Intel MCU is 32bit only"));
13607 return ELF_TARGET_IAMCU_FORMAT;
13608 }
13609 else
13610 return format;
13611 }
13612 #endif
13613 #if defined (OBJ_MACH_O)
13614 case bfd_target_mach_o_flavour:
13615 if (flag_code == CODE_64BIT)
13616 {
13617 use_rela_relocations = 1;
13618 object_64bit = 1;
13619 return "mach-o-x86-64";
13620 }
13621 else
13622 return "mach-o-i386";
13623 #endif
13624 default:
13625 abort ();
13626 return NULL;
13627 }
13628 }
13629
13630 #endif /* OBJ_MAYBE_ more than one */
13631 \f
13632 symbolS *
13633 md_undefined_symbol (char *name)
13634 {
13635 if (name[0] == GLOBAL_OFFSET_TABLE_NAME[0]
13636 && name[1] == GLOBAL_OFFSET_TABLE_NAME[1]
13637 && name[2] == GLOBAL_OFFSET_TABLE_NAME[2]
13638 && strcmp (name, GLOBAL_OFFSET_TABLE_NAME) == 0)
13639 {
13640 if (!GOT_symbol)
13641 {
13642 if (symbol_find (name))
13643 as_bad (_("GOT already in symbol table"));
13644 GOT_symbol = symbol_new (name, undefined_section,
13645 (valueT) 0, &zero_address_frag);
13646 };
13647 return GOT_symbol;
13648 }
13649 return 0;
13650 }
13651
13652 /* Round up a section size to the appropriate boundary. */
13653
13654 valueT
13655 md_section_align (segT segment ATTRIBUTE_UNUSED, valueT size)
13656 {
13657 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
13658 if (OUTPUT_FLAVOR == bfd_target_aout_flavour)
13659 {
13660 /* For a.out, force the section size to be aligned. If we don't do
13661 this, BFD will align it for us, but it will not write out the
13662 final bytes of the section. This may be a bug in BFD, but it is
13663 easier to fix it here since that is how the other a.out targets
13664 work. */
13665 int align;
13666
13667 align = bfd_section_alignment (segment);
13668 size = ((size + (1 << align) - 1) & (-((valueT) 1 << align)));
13669 }
13670 #endif
13671
13672 return size;
13673 }
13674
13675 /* On the i386, PC-relative offsets are relative to the start of the
13676 next instruction. That is, the address of the offset, plus its
13677 size, since the offset is always the last part of the insn. */
13678
13679 long
13680 md_pcrel_from (fixS *fixP)
13681 {
13682 return fixP->fx_size + fixP->fx_where + fixP->fx_frag->fr_address;
13683 }
13684
13685 #ifndef I386COFF
13686
13687 static void
13688 s_bss (int ignore ATTRIBUTE_UNUSED)
13689 {
13690 int temp;
13691
13692 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
13693 if (IS_ELF)
13694 obj_elf_section_change_hook ();
13695 #endif
13696 temp = get_absolute_expression ();
13697 subseg_set (bss_section, (subsegT) temp);
13698 demand_empty_rest_of_line ();
13699 }
13700
13701 #endif
13702
13703 /* Remember constant directive. */
13704
13705 void
13706 i386_cons_align (int ignore ATTRIBUTE_UNUSED)
13707 {
13708 if (last_insn.kind != last_insn_directive
13709 && (bfd_section_flags (now_seg) & SEC_CODE))
13710 {
13711 last_insn.seg = now_seg;
13712 last_insn.kind = last_insn_directive;
13713 last_insn.name = "constant directive";
13714 last_insn.file = as_where (&last_insn.line);
13715 if (lfence_before_ret != lfence_before_ret_none)
13716 {
13717 if (lfence_before_indirect_branch != lfence_branch_none)
13718 as_warn (_("constant directive skips -mlfence-before-ret "
13719 "and -mlfence-before-indirect-branch"));
13720 else
13721 as_warn (_("constant directive skips -mlfence-before-ret"));
13722 }
13723 else if (lfence_before_indirect_branch != lfence_branch_none)
13724 as_warn (_("constant directive skips -mlfence-before-indirect-branch"));
13725 }
13726 }
13727
13728 void
13729 i386_validate_fix (fixS *fixp)
13730 {
13731 if (fixp->fx_subsy)
13732 {
13733 if (fixp->fx_subsy == GOT_symbol)
13734 {
13735 if (fixp->fx_r_type == BFD_RELOC_32_PCREL)
13736 {
13737 if (!object_64bit)
13738 abort ();
13739 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
13740 if (fixp->fx_tcbit2)
13741 fixp->fx_r_type = (fixp->fx_tcbit
13742 ? BFD_RELOC_X86_64_REX_GOTPCRELX
13743 : BFD_RELOC_X86_64_GOTPCRELX);
13744 else
13745 #endif
13746 fixp->fx_r_type = BFD_RELOC_X86_64_GOTPCREL;
13747 }
13748 else
13749 {
13750 if (!object_64bit)
13751 fixp->fx_r_type = BFD_RELOC_386_GOTOFF;
13752 else
13753 fixp->fx_r_type = BFD_RELOC_X86_64_GOTOFF64;
13754 }
13755 fixp->fx_subsy = 0;
13756 }
13757 }
13758 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
13759 else if (!object_64bit)
13760 {
13761 if (fixp->fx_r_type == BFD_RELOC_386_GOT32
13762 && fixp->fx_tcbit2)
13763 fixp->fx_r_type = BFD_RELOC_386_GOT32X;
13764 }
13765 #endif
13766 }
13767
13768 arelent *
13769 tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixp)
13770 {
13771 arelent *rel;
13772 bfd_reloc_code_real_type code;
13773
13774 switch (fixp->fx_r_type)
13775 {
13776 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
13777 case BFD_RELOC_SIZE32:
13778 case BFD_RELOC_SIZE64:
13779 if (S_IS_DEFINED (fixp->fx_addsy)
13780 && !S_IS_EXTERNAL (fixp->fx_addsy))
13781 {
13782 /* Resolve size relocation against local symbol to size of
13783 the symbol plus addend. */
13784 valueT value = S_GET_SIZE (fixp->fx_addsy) + fixp->fx_offset;
13785 if (fixp->fx_r_type == BFD_RELOC_SIZE32
13786 && !fits_in_unsigned_long (value))
13787 as_bad_where (fixp->fx_file, fixp->fx_line,
13788 _("symbol size computation overflow"));
13789 fixp->fx_addsy = NULL;
13790 fixp->fx_subsy = NULL;
13791 md_apply_fix (fixp, (valueT *) &value, NULL);
13792 return NULL;
13793 }
13794 #endif
13795 /* Fall through. */
13796
13797 case BFD_RELOC_X86_64_PLT32:
13798 case BFD_RELOC_X86_64_GOT32:
13799 case BFD_RELOC_X86_64_GOTPCREL:
13800 case BFD_RELOC_X86_64_GOTPCRELX:
13801 case BFD_RELOC_X86_64_REX_GOTPCRELX:
13802 case BFD_RELOC_386_PLT32:
13803 case BFD_RELOC_386_GOT32:
13804 case BFD_RELOC_386_GOT32X:
13805 case BFD_RELOC_386_GOTOFF:
13806 case BFD_RELOC_386_GOTPC:
13807 case BFD_RELOC_386_TLS_GD:
13808 case BFD_RELOC_386_TLS_LDM:
13809 case BFD_RELOC_386_TLS_LDO_32:
13810 case BFD_RELOC_386_TLS_IE_32:
13811 case BFD_RELOC_386_TLS_IE:
13812 case BFD_RELOC_386_TLS_GOTIE:
13813 case BFD_RELOC_386_TLS_LE_32:
13814 case BFD_RELOC_386_TLS_LE:
13815 case BFD_RELOC_386_TLS_GOTDESC:
13816 case BFD_RELOC_386_TLS_DESC_CALL:
13817 case BFD_RELOC_X86_64_TLSGD:
13818 case BFD_RELOC_X86_64_TLSLD:
13819 case BFD_RELOC_X86_64_DTPOFF32:
13820 case BFD_RELOC_X86_64_DTPOFF64:
13821 case BFD_RELOC_X86_64_GOTTPOFF:
13822 case BFD_RELOC_X86_64_TPOFF32:
13823 case BFD_RELOC_X86_64_TPOFF64:
13824 case BFD_RELOC_X86_64_GOTOFF64:
13825 case BFD_RELOC_X86_64_GOTPC32:
13826 case BFD_RELOC_X86_64_GOT64:
13827 case BFD_RELOC_X86_64_GOTPCREL64:
13828 case BFD_RELOC_X86_64_GOTPC64:
13829 case BFD_RELOC_X86_64_GOTPLT64:
13830 case BFD_RELOC_X86_64_PLTOFF64:
13831 case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
13832 case BFD_RELOC_X86_64_TLSDESC_CALL:
13833 case BFD_RELOC_RVA:
13834 case BFD_RELOC_VTABLE_ENTRY:
13835 case BFD_RELOC_VTABLE_INHERIT:
13836 #ifdef TE_PE
13837 case BFD_RELOC_32_SECREL:
13838 #endif
13839 code = fixp->fx_r_type;
13840 break;
13841 case BFD_RELOC_X86_64_32S:
13842 if (!fixp->fx_pcrel)
13843 {
13844 /* Don't turn BFD_RELOC_X86_64_32S into BFD_RELOC_32. */
13845 code = fixp->fx_r_type;
13846 break;
13847 }
13848 /* Fall through. */
13849 default:
13850 if (fixp->fx_pcrel)
13851 {
13852 switch (fixp->fx_size)
13853 {
13854 default:
13855 as_bad_where (fixp->fx_file, fixp->fx_line,
13856 _("can not do %d byte pc-relative relocation"),
13857 fixp->fx_size);
13858 code = BFD_RELOC_32_PCREL;
13859 break;
13860 case 1: code = BFD_RELOC_8_PCREL; break;
13861 case 2: code = BFD_RELOC_16_PCREL; break;
13862 case 4: code = BFD_RELOC_32_PCREL; break;
13863 #ifdef BFD64
13864 case 8: code = BFD_RELOC_64_PCREL; break;
13865 #endif
13866 }
13867 }
13868 else
13869 {
13870 switch (fixp->fx_size)
13871 {
13872 default:
13873 as_bad_where (fixp->fx_file, fixp->fx_line,
13874 _("can not do %d byte relocation"),
13875 fixp->fx_size);
13876 code = BFD_RELOC_32;
13877 break;
13878 case 1: code = BFD_RELOC_8; break;
13879 case 2: code = BFD_RELOC_16; break;
13880 case 4: code = BFD_RELOC_32; break;
13881 #ifdef BFD64
13882 case 8: code = BFD_RELOC_64; break;
13883 #endif
13884 }
13885 }
13886 break;
13887 }
13888
13889 if ((code == BFD_RELOC_32
13890 || code == BFD_RELOC_32_PCREL
13891 || code == BFD_RELOC_X86_64_32S)
13892 && GOT_symbol
13893 && fixp->fx_addsy == GOT_symbol)
13894 {
13895 if (!object_64bit)
13896 code = BFD_RELOC_386_GOTPC;
13897 else
13898 code = BFD_RELOC_X86_64_GOTPC32;
13899 }
13900 if ((code == BFD_RELOC_64 || code == BFD_RELOC_64_PCREL)
13901 && GOT_symbol
13902 && fixp->fx_addsy == GOT_symbol)
13903 {
13904 code = BFD_RELOC_X86_64_GOTPC64;
13905 }
13906
13907 rel = XNEW (arelent);
13908 rel->sym_ptr_ptr = XNEW (asymbol *);
13909 *rel->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
13910
13911 rel->address = fixp->fx_frag->fr_address + fixp->fx_where;
13912
13913 if (!use_rela_relocations)
13914 {
13915 /* HACK: Since i386 ELF uses Rel instead of Rela, encode the
13916 vtable entry to be used in the relocation's section offset. */
13917 if (fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
13918 rel->address = fixp->fx_offset;
13919 #if defined (OBJ_COFF) && defined (TE_PE)
13920 else if (fixp->fx_addsy && S_IS_WEAK (fixp->fx_addsy))
13921 rel->addend = fixp->fx_addnumber - (S_GET_VALUE (fixp->fx_addsy) * 2);
13922 else
13923 #endif
13924 rel->addend = 0;
13925 }
13926 /* Use the rela in 64bit mode. */
13927 else
13928 {
13929 if (disallow_64bit_reloc)
13930 switch (code)
13931 {
13932 case BFD_RELOC_X86_64_DTPOFF64:
13933 case BFD_RELOC_X86_64_TPOFF64:
13934 case BFD_RELOC_64_PCREL:
13935 case BFD_RELOC_X86_64_GOTOFF64:
13936 case BFD_RELOC_X86_64_GOT64:
13937 case BFD_RELOC_X86_64_GOTPCREL64:
13938 case BFD_RELOC_X86_64_GOTPC64:
13939 case BFD_RELOC_X86_64_GOTPLT64:
13940 case BFD_RELOC_X86_64_PLTOFF64:
13941 as_bad_where (fixp->fx_file, fixp->fx_line,
13942 _("cannot represent relocation type %s in x32 mode"),
13943 bfd_get_reloc_code_name (code));
13944 break;
13945 default:
13946 break;
13947 }
13948
13949 if (!fixp->fx_pcrel)
13950 rel->addend = fixp->fx_offset;
13951 else
13952 switch (code)
13953 {
13954 case BFD_RELOC_X86_64_PLT32:
13955 case BFD_RELOC_X86_64_GOT32:
13956 case BFD_RELOC_X86_64_GOTPCREL:
13957 case BFD_RELOC_X86_64_GOTPCRELX:
13958 case BFD_RELOC_X86_64_REX_GOTPCRELX:
13959 case BFD_RELOC_X86_64_TLSGD:
13960 case BFD_RELOC_X86_64_TLSLD:
13961 case BFD_RELOC_X86_64_GOTTPOFF:
13962 case BFD_RELOC_X86_64_GOTPC32_TLSDESC:
13963 case BFD_RELOC_X86_64_TLSDESC_CALL:
13964 rel->addend = fixp->fx_offset - fixp->fx_size;
13965 break;
13966 default:
13967 rel->addend = (section->vma
13968 - fixp->fx_size
13969 + fixp->fx_addnumber
13970 + md_pcrel_from (fixp));
13971 break;
13972 }
13973 }
13974
13975 rel->howto = bfd_reloc_type_lookup (stdoutput, code);
13976 if (rel->howto == NULL)
13977 {
13978 as_bad_where (fixp->fx_file, fixp->fx_line,
13979 _("cannot represent relocation type %s"),
13980 bfd_get_reloc_code_name (code));
13981 /* Set howto to a garbage value so that we can keep going. */
13982 rel->howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_32);
13983 gas_assert (rel->howto != NULL);
13984 }
13985
13986 return rel;
13987 }
13988
13989 #include "tc-i386-intel.c"
13990
13991 void
13992 tc_x86_parse_to_dw2regnum (expressionS *exp)
13993 {
13994 int saved_naked_reg;
13995 char saved_register_dot;
13996
13997 saved_naked_reg = allow_naked_reg;
13998 allow_naked_reg = 1;
13999 saved_register_dot = register_chars['.'];
14000 register_chars['.'] = '.';
14001 allow_pseudo_reg = 1;
14002 expression_and_evaluate (exp);
14003 allow_pseudo_reg = 0;
14004 register_chars['.'] = saved_register_dot;
14005 allow_naked_reg = saved_naked_reg;
14006
14007 if (exp->X_op == O_register && exp->X_add_number >= 0)
14008 {
14009 if ((addressT) exp->X_add_number < i386_regtab_size)
14010 {
14011 exp->X_op = O_constant;
14012 exp->X_add_number = i386_regtab[exp->X_add_number]
14013 .dw2_regnum[flag_code >> 1];
14014 }
14015 else
14016 exp->X_op = O_illegal;
14017 }
14018 }
14019
14020 void
14021 tc_x86_frame_initial_instructions (void)
14022 {
14023 static unsigned int sp_regno[2];
14024
14025 if (!sp_regno[flag_code >> 1])
14026 {
14027 char *saved_input = input_line_pointer;
14028 char sp[][4] = {"esp", "rsp"};
14029 expressionS exp;
14030
14031 input_line_pointer = sp[flag_code >> 1];
14032 tc_x86_parse_to_dw2regnum (&exp);
14033 gas_assert (exp.X_op == O_constant);
14034 sp_regno[flag_code >> 1] = exp.X_add_number;
14035 input_line_pointer = saved_input;
14036 }
14037
14038 cfi_add_CFA_def_cfa (sp_regno[flag_code >> 1], -x86_cie_data_alignment);
14039 cfi_add_CFA_offset (x86_dwarf2_return_column, x86_cie_data_alignment);
14040 }
14041
14042 int
14043 x86_dwarf2_addr_size (void)
14044 {
14045 #if defined (OBJ_MAYBE_ELF) || defined (OBJ_ELF)
14046 if (x86_elf_abi == X86_64_X32_ABI)
14047 return 4;
14048 #endif
14049 return bfd_arch_bits_per_address (stdoutput) / 8;
14050 }
14051
14052 int
14053 i386_elf_section_type (const char *str, size_t len)
14054 {
14055 if (flag_code == CODE_64BIT
14056 && len == sizeof ("unwind") - 1
14057 && strncmp (str, "unwind", 6) == 0)
14058 return SHT_X86_64_UNWIND;
14059
14060 return -1;
14061 }
14062
14063 #ifdef TE_SOLARIS
14064 void
14065 i386_solaris_fix_up_eh_frame (segT sec)
14066 {
14067 if (flag_code == CODE_64BIT)
14068 elf_section_type (sec) = SHT_X86_64_UNWIND;
14069 }
14070 #endif
14071
14072 #ifdef TE_PE
14073 void
14074 tc_pe_dwarf2_emit_offset (symbolS *symbol, unsigned int size)
14075 {
14076 expressionS exp;
14077
14078 exp.X_op = O_secrel;
14079 exp.X_add_symbol = symbol;
14080 exp.X_add_number = 0;
14081 emit_expr (&exp, size);
14082 }
14083 #endif
14084
14085 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
14086 /* For ELF on x86-64, add support for SHF_X86_64_LARGE. */
14087
14088 bfd_vma
14089 x86_64_section_letter (int letter, const char **ptr_msg)
14090 {
14091 if (flag_code == CODE_64BIT)
14092 {
14093 if (letter == 'l')
14094 return SHF_X86_64_LARGE;
14095
14096 *ptr_msg = _("bad .section directive: want a,l,w,x,M,S,G,T in string");
14097 }
14098 else
14099 *ptr_msg = _("bad .section directive: want a,w,x,M,S,G,T in string");
14100 return -1;
14101 }
14102
14103 bfd_vma
14104 x86_64_section_word (char *str, size_t len)
14105 {
14106 if (len == 5 && flag_code == CODE_64BIT && CONST_STRNEQ (str, "large"))
14107 return SHF_X86_64_LARGE;
14108
14109 return -1;
14110 }
14111
14112 static void
14113 handle_large_common (int small ATTRIBUTE_UNUSED)
14114 {
14115 if (flag_code != CODE_64BIT)
14116 {
14117 s_comm_internal (0, elf_common_parse);
14118 as_warn (_(".largecomm supported only in 64bit mode, producing .comm"));
14119 }
14120 else
14121 {
14122 static segT lbss_section;
14123 asection *saved_com_section_ptr = elf_com_section_ptr;
14124 asection *saved_bss_section = bss_section;
14125
14126 if (lbss_section == NULL)
14127 {
14128 flagword applicable;
14129 segT seg = now_seg;
14130 subsegT subseg = now_subseg;
14131
14132 /* The .lbss section is for local .largecomm symbols. */
14133 lbss_section = subseg_new (".lbss", 0);
14134 applicable = bfd_applicable_section_flags (stdoutput);
14135 bfd_set_section_flags (lbss_section, applicable & SEC_ALLOC);
14136 seg_info (lbss_section)->bss = 1;
14137
14138 subseg_set (seg, subseg);
14139 }
14140
14141 elf_com_section_ptr = &_bfd_elf_large_com_section;
14142 bss_section = lbss_section;
14143
14144 s_comm_internal (0, elf_common_parse);
14145
14146 elf_com_section_ptr = saved_com_section_ptr;
14147 bss_section = saved_bss_section;
14148 }
14149 }
14150 #endif /* OBJ_ELF || OBJ_MAYBE_ELF */
This page took 0.349091 seconds and 5 git commands to generate.