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