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