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