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