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