OpenCores
URL https://opencores.org/ocsvn/open8_urisc/open8_urisc/trunk

Subversion Repositories open8_urisc

[/] [open8_urisc/] [trunk/] [gnu/] [binutils/] [gas/] [config/] [tc-i386.c] - Blame information for rev 84

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.