2001-01-16 Kazu Hirata <kazu@hxi.com>
[binutils-gdb.git] / gas / config / tc-i386.c
1 /* i386.c -- Assemble code for the Intel 80386
2 Copyright (C) 1989, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001
3 Free Software Foundation, Inc.
4
5 This file is part of GAS, the GNU Assembler.
6
7 GAS is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GAS is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GAS; see the file COPYING. If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA. */
21
22 /* Intel 80386 machine specific gas.
23 Written by Eliot Dresselhaus (eliot@mgm.mit.edu).
24 x86_64 support by Jan Hubicka (jh@suse.cz)
25 Bugs & suggestions are completely welcome. This is free software.
26 Please help us make it better. */
27
28 #include <ctype.h>
29
30 #include "as.h"
31 #include "subsegs.h"
32 #include "dwarf2dbg.h"
33 #include "opcode/i386.h"
34
35 #ifndef REGISTER_WARNINGS
36 #define REGISTER_WARNINGS 1
37 #endif
38
39 #ifndef INFER_ADDR_PREFIX
40 #define INFER_ADDR_PREFIX 1
41 #endif
42
43 #ifndef SCALE1_WHEN_NO_INDEX
44 /* Specifying a scale factor besides 1 when there is no index is
45 futile. eg. `mov (%ebx,2),%al' does exactly the same as
46 `mov (%ebx),%al'. To slavishly follow what the programmer
47 specified, set SCALE1_WHEN_NO_INDEX to 0. */
48 #define SCALE1_WHEN_NO_INDEX 1
49 #endif
50
51 #define true 1
52 #define false 0
53
54 static unsigned int mode_from_disp_size PARAMS ((unsigned int));
55 static int fits_in_signed_byte PARAMS ((offsetT));
56 static int fits_in_unsigned_byte PARAMS ((offsetT));
57 static int fits_in_unsigned_word PARAMS ((offsetT));
58 static int fits_in_signed_word PARAMS ((offsetT));
59 static int fits_in_unsigned_long PARAMS ((offsetT));
60 static int fits_in_signed_long PARAMS ((offsetT));
61 static int smallest_imm_type PARAMS ((offsetT));
62 static offsetT offset_in_range PARAMS ((offsetT, int));
63 static int add_prefix PARAMS ((unsigned int));
64 static void set_code_flag PARAMS ((int));
65 static void set_16bit_gcc_code_flag PARAMS ((int));
66 static void set_intel_syntax PARAMS ((int));
67 static void set_cpu_arch PARAMS ((int));
68
69 #ifdef BFD_ASSEMBLER
70 static bfd_reloc_code_real_type reloc
71 PARAMS ((int, int, int, bfd_reloc_code_real_type));
72 #endif
73
74 #ifndef DEFAULT_ARCH
75 #define DEFAULT_ARCH "i386"
76 #endif
77 static char *default_arch = DEFAULT_ARCH;
78
79 /* 'md_assemble ()' gathers together information and puts it into a
80 i386_insn. */
81
82 union i386_op
83 {
84 expressionS *disps;
85 expressionS *imms;
86 const reg_entry *regs;
87 };
88
89 struct _i386_insn
90 {
91 /* TM holds the template for the insn were currently assembling. */
92 template tm;
93
94 /* SUFFIX holds the instruction mnemonic suffix if given.
95 (e.g. 'l' for 'movl') */
96 char suffix;
97
98 /* OPERANDS gives the number of given operands. */
99 unsigned int operands;
100
101 /* REG_OPERANDS, DISP_OPERANDS, MEM_OPERANDS, IMM_OPERANDS give the number
102 of given register, displacement, memory operands and immediate
103 operands. */
104 unsigned int reg_operands, disp_operands, mem_operands, imm_operands;
105
106 /* TYPES [i] is the type (see above #defines) which tells us how to
107 use OP[i] for the corresponding operand. */
108 unsigned int types[MAX_OPERANDS];
109
110 /* Displacement expression, immediate expression, or register for each
111 operand. */
112 union i386_op op[MAX_OPERANDS];
113
114 /* Flags for operands. */
115 unsigned int flags[MAX_OPERANDS];
116 #define Operand_PCrel 1
117
118 /* Relocation type for operand */
119 #ifdef BFD_ASSEMBLER
120 enum bfd_reloc_code_real disp_reloc[MAX_OPERANDS];
121 #else
122 int disp_reloc[MAX_OPERANDS];
123 #endif
124
125 /* BASE_REG, INDEX_REG, and LOG2_SCALE_FACTOR are used to encode
126 the base index byte below. */
127 const reg_entry *base_reg;
128 const reg_entry *index_reg;
129 unsigned int log2_scale_factor;
130
131 /* SEG gives the seg_entries of this insn. They are zero unless
132 explicit segment overrides are given. */
133 const seg_entry *seg[2];
134
135 /* PREFIX holds all the given prefix opcodes (usually null).
136 PREFIXES is the number of prefix opcodes. */
137 unsigned int prefixes;
138 unsigned char prefix[MAX_PREFIXES];
139
140 /* RM and SIB are the modrm byte and the sib byte where the
141 addressing modes of this insn are encoded. */
142
143 modrm_byte rm;
144 rex_byte rex;
145 sib_byte sib;
146 };
147
148 typedef struct _i386_insn i386_insn;
149
150 /* List of chars besides those in app.c:symbol_chars that can start an
151 operand. Used to prevent the scrubber eating vital white-space. */
152 #ifdef LEX_AT
153 const char extra_symbol_chars[] = "*%-(@";
154 #else
155 const char extra_symbol_chars[] = "*%-(";
156 #endif
157
158 /* This array holds the chars that always start a comment. If the
159 pre-processor is disabled, these aren't very useful. */
160 #if defined (TE_I386AIX) || ((defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)) && ! defined (TE_LINUX) && !defined(TE_FreeBSD))
161 /* Putting '/' here makes it impossible to use the divide operator.
162 However, we need it for compatibility with SVR4 systems. */
163 const char comment_chars[] = "#/";
164 #define PREFIX_SEPARATOR '\\'
165 #else
166 const char comment_chars[] = "#";
167 #define PREFIX_SEPARATOR '/'
168 #endif
169
170 /* This array holds the chars that only start a comment at the beginning of
171 a line. If the line seems to have the form '# 123 filename'
172 .line and .file directives will appear in the pre-processed output.
173 Note that input_file.c hand checks for '#' at the beginning of the
174 first line of the input file. This is because the compiler outputs
175 #NO_APP at the beginning of its output.
176 Also note that comments started like this one will always work if
177 '/' isn't otherwise defined. */
178 #if defined (TE_I386AIX) || ((defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)) && ! defined (TE_LINUX) && !defined(TE_FreeBSD))
179 const char line_comment_chars[] = "";
180 #else
181 const char line_comment_chars[] = "/";
182 #endif
183
184 const char line_separator_chars[] = ";";
185
186 /* Chars that can be used to separate mant from exp in floating point
187 nums. */
188 const char EXP_CHARS[] = "eE";
189
190 /* Chars that mean this number is a floating point constant
191 As in 0f12.456
192 or 0d1.2345e12. */
193 const char FLT_CHARS[] = "fFdDxX";
194
195 /* Tables for lexical analysis. */
196 static char mnemonic_chars[256];
197 static char register_chars[256];
198 static char operand_chars[256];
199 static char identifier_chars[256];
200 static char digit_chars[256];
201
202 /* Lexical macros. */
203 #define is_mnemonic_char(x) (mnemonic_chars[(unsigned char) x])
204 #define is_operand_char(x) (operand_chars[(unsigned char) x])
205 #define is_register_char(x) (register_chars[(unsigned char) x])
206 #define is_space_char(x) ((x) == ' ')
207 #define is_identifier_char(x) (identifier_chars[(unsigned char) x])
208 #define is_digit_char(x) (digit_chars[(unsigned char) x])
209
210 /* All non-digit non-letter charcters that may occur in an operand. */
211 static char operand_special_chars[] = "%$-+(,)*._~/<>|&^!:[@]";
212
213 /* md_assemble() always leaves the strings it's passed unaltered. To
214 effect this we maintain a stack of saved characters that we've smashed
215 with '\0's (indicating end of strings for various sub-fields of the
216 assembler instruction). */
217 static char save_stack[32];
218 static char *save_stack_p;
219 #define END_STRING_AND_SAVE(s) \
220 do { *save_stack_p++ = *(s); *(s) = '\0'; } while (0)
221 #define RESTORE_END_STRING(s) \
222 do { *(s) = *--save_stack_p; } while (0)
223
224 /* The instruction we're assembling. */
225 static i386_insn i;
226
227 /* Possible templates for current insn. */
228 static const templates *current_templates;
229
230 /* Per instruction expressionS buffers: 2 displacements & 2 immediate max. */
231 static expressionS disp_expressions[2], im_expressions[2];
232
233 /* Current operand we are working on. */
234 static int this_operand;
235
236 /* We support four different modes. FLAG_CODE variable is used to distinguish
237 these. */
238
239 enum flag_code {
240 CODE_32BIT,
241 CODE_16BIT,
242 CODE_64BIT };
243
244 static enum flag_code flag_code;
245 static int use_rela_relocations = 0;
246
247 /* The names used to print error messages. */
248 static const char *flag_code_names[] =
249 {
250 "32",
251 "16",
252 "64"
253 };
254
255 /* 1 for intel syntax,
256 0 if att syntax. */
257 static int intel_syntax = 0;
258
259 /* 1 if register prefix % not required. */
260 static int allow_naked_reg = 0;
261
262 /* Used in 16 bit gcc mode to add an l suffix to call, ret, enter,
263 leave, push, and pop instructions so that gcc has the same stack
264 frame as in 32 bit mode. */
265 static char stackop_size = '\0';
266
267 /* Non-zero to quieten some warnings. */
268 static int quiet_warnings = 0;
269
270 /* CPU name. */
271 static const char *cpu_arch_name = NULL;
272
273 /* CPU feature flags. */
274 static unsigned int cpu_arch_flags = CpuUnknownFlags|CpuNo64;
275
276 /* Interface to relax_segment.
277 There are 2 relax states for 386 jump insns: one for conditional &
278 one for unconditional jumps. This is because these two types of
279 jumps add different sizes to frags when we're figuring out what
280 sort of jump to choose to reach a given label. */
281
282 /* Types. */
283 #define COND_JUMP 1
284 #define UNCOND_JUMP 2
285 /* Sizes. */
286 #define CODE16 1
287 #define SMALL 0
288 #define SMALL16 (SMALL|CODE16)
289 #define BIG 2
290 #define BIG16 (BIG|CODE16)
291
292 #ifndef INLINE
293 #ifdef __GNUC__
294 #define INLINE __inline__
295 #else
296 #define INLINE
297 #endif
298 #endif
299
300 #define ENCODE_RELAX_STATE(type,size) \
301 ((relax_substateT) ((type<<2) | (size)))
302 #define SIZE_FROM_RELAX_STATE(s) \
303 ( (((s) & 0x3) == BIG ? 4 : (((s) & 0x3) == BIG16 ? 2 : 1)) )
304
305 /* This table is used by relax_frag to promote short jumps to long
306 ones where necessary. SMALL (short) jumps may be promoted to BIG
307 (32 bit long) ones, and SMALL16 jumps to BIG16 (16 bit long). We
308 don't allow a short jump in a 32 bit code segment to be promoted to
309 a 16 bit offset jump because it's slower (requires data size
310 prefix), and doesn't work, unless the destination is in the bottom
311 64k of the code segment (The top 16 bits of eip are zeroed). */
312
313 const relax_typeS md_relax_table[] =
314 {
315 /* The fields are:
316 1) most positive reach of this state,
317 2) most negative reach of this state,
318 3) how many bytes this mode will add to the size of the current frag
319 4) which index into the table to try if we can't fit into this one. */
320 {1, 1, 0, 0},
321 {1, 1, 0, 0},
322 {1, 1, 0, 0},
323 {1, 1, 0, 0},
324
325 {127 + 1, -128 + 1, 0, ENCODE_RELAX_STATE (COND_JUMP, BIG)},
326 {127 + 1, -128 + 1, 0, ENCODE_RELAX_STATE (COND_JUMP, BIG16)},
327 /* dword conditionals adds 4 bytes to frag:
328 1 extra opcode byte, 3 extra displacement bytes. */
329 {0, 0, 4, 0},
330 /* word conditionals add 2 bytes to frag:
331 1 extra opcode byte, 1 extra displacement byte. */
332 {0, 0, 2, 0},
333
334 {127 + 1, -128 + 1, 0, ENCODE_RELAX_STATE (UNCOND_JUMP, BIG)},
335 {127 + 1, -128 + 1, 0, ENCODE_RELAX_STATE (UNCOND_JUMP, BIG16)},
336 /* dword jmp adds 3 bytes to frag:
337 0 extra opcode bytes, 3 extra displacement bytes. */
338 {0, 0, 3, 0},
339 /* word jmp adds 1 byte to frag:
340 0 extra opcode bytes, 1 extra displacement byte. */
341 {0, 0, 1, 0}
342
343 };
344
345 static const arch_entry cpu_arch[] = {
346 {"i8086", Cpu086 },
347 {"i186", Cpu086|Cpu186 },
348 {"i286", Cpu086|Cpu186|Cpu286 },
349 {"i386", Cpu086|Cpu186|Cpu286|Cpu386 },
350 {"i486", Cpu086|Cpu186|Cpu286|Cpu386|Cpu486 },
351 {"i586", Cpu086|Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|CpuMMX },
352 {"i686", Cpu086|Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuMMX|CpuSSE },
353 {"pentium", Cpu086|Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|CpuMMX },
354 {"pentiumpro",Cpu086|Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuMMX|CpuSSE },
355 {"pentium4", Cpu086|Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuP4|CpuMMX|CpuSSE|CpuSSE2 },
356 {"k6", Cpu086|Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|CpuK6|CpuMMX|Cpu3dnow },
357 {"athlon", Cpu086|Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuK6|CpuAthlon|CpuMMX|Cpu3dnow },
358 {"sledgehammer",Cpu086|Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686|CpuK6|CpuAthlon|CpuSledgehammer|CpuMMX|Cpu3dnow|CpuSSE|CpuSSE2 },
359 {NULL, 0 }
360 };
361
362 void
363 i386_align_code (fragP, count)
364 fragS *fragP;
365 int count;
366 {
367 /* Various efficient no-op patterns for aligning code labels.
368 Note: Don't try to assemble the instructions in the comments.
369 0L and 0w are not legal. */
370 static const char f32_1[] =
371 {0x90}; /* nop */
372 static const char f32_2[] =
373 {0x89,0xf6}; /* movl %esi,%esi */
374 static const char f32_3[] =
375 {0x8d,0x76,0x00}; /* leal 0(%esi),%esi */
376 static const char f32_4[] =
377 {0x8d,0x74,0x26,0x00}; /* leal 0(%esi,1),%esi */
378 static const char f32_5[] =
379 {0x90, /* nop */
380 0x8d,0x74,0x26,0x00}; /* leal 0(%esi,1),%esi */
381 static const char f32_6[] =
382 {0x8d,0xb6,0x00,0x00,0x00,0x00}; /* leal 0L(%esi),%esi */
383 static const char f32_7[] =
384 {0x8d,0xb4,0x26,0x00,0x00,0x00,0x00}; /* leal 0L(%esi,1),%esi */
385 static const char f32_8[] =
386 {0x90, /* nop */
387 0x8d,0xb4,0x26,0x00,0x00,0x00,0x00}; /* leal 0L(%esi,1),%esi */
388 static const char f32_9[] =
389 {0x89,0xf6, /* movl %esi,%esi */
390 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
391 static const char f32_10[] =
392 {0x8d,0x76,0x00, /* leal 0(%esi),%esi */
393 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
394 static const char f32_11[] =
395 {0x8d,0x74,0x26,0x00, /* leal 0(%esi,1),%esi */
396 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
397 static const char f32_12[] =
398 {0x8d,0xb6,0x00,0x00,0x00,0x00, /* leal 0L(%esi),%esi */
399 0x8d,0xbf,0x00,0x00,0x00,0x00}; /* leal 0L(%edi),%edi */
400 static const char f32_13[] =
401 {0x8d,0xb6,0x00,0x00,0x00,0x00, /* leal 0L(%esi),%esi */
402 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
403 static const char f32_14[] =
404 {0x8d,0xb4,0x26,0x00,0x00,0x00,0x00, /* leal 0L(%esi,1),%esi */
405 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
406 static const char f32_15[] =
407 {0xeb,0x0d,0x90,0x90,0x90,0x90,0x90, /* jmp .+15; lotsa nops */
408 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90};
409 static const char f16_3[] =
410 {0x8d,0x74,0x00}; /* lea 0(%esi),%esi */
411 static const char f16_4[] =
412 {0x8d,0xb4,0x00,0x00}; /* lea 0w(%si),%si */
413 static const char f16_5[] =
414 {0x90, /* nop */
415 0x8d,0xb4,0x00,0x00}; /* lea 0w(%si),%si */
416 static const char f16_6[] =
417 {0x89,0xf6, /* mov %si,%si */
418 0x8d,0xbd,0x00,0x00}; /* lea 0w(%di),%di */
419 static const char f16_7[] =
420 {0x8d,0x74,0x00, /* lea 0(%si),%si */
421 0x8d,0xbd,0x00,0x00}; /* lea 0w(%di),%di */
422 static const char f16_8[] =
423 {0x8d,0xb4,0x00,0x00, /* lea 0w(%si),%si */
424 0x8d,0xbd,0x00,0x00}; /* lea 0w(%di),%di */
425 static const char *const f32_patt[] = {
426 f32_1, f32_2, f32_3, f32_4, f32_5, f32_6, f32_7, f32_8,
427 f32_9, f32_10, f32_11, f32_12, f32_13, f32_14, f32_15
428 };
429 static const char *const f16_patt[] = {
430 f32_1, f32_2, f16_3, f16_4, f16_5, f16_6, f16_7, f16_8,
431 f32_15, f32_15, f32_15, f32_15, f32_15, f32_15, f32_15
432 };
433
434 /* ??? We can't use these fillers for x86_64, since they often kills the
435 upper halves. Solve later. */
436 if (flag_code == CODE_64BIT)
437 count = 1;
438
439 if (count > 0 && count <= 15)
440 {
441 if (flag_code == CODE_16BIT)
442 {
443 memcpy (fragP->fr_literal + fragP->fr_fix,
444 f16_patt[count - 1], count);
445 if (count > 8)
446 /* Adjust jump offset. */
447 fragP->fr_literal[fragP->fr_fix + 1] = count - 2;
448 }
449 else
450 memcpy (fragP->fr_literal + fragP->fr_fix,
451 f32_patt[count - 1], count);
452 fragP->fr_var = count;
453 }
454 }
455
456 static char *output_invalid PARAMS ((int c));
457 static int i386_operand PARAMS ((char *operand_string));
458 static int i386_intel_operand PARAMS ((char *operand_string, int got_a_float));
459 static const reg_entry *parse_register PARAMS ((char *reg_string,
460 char **end_op));
461
462 #ifndef I386COFF
463 static void s_bss PARAMS ((int));
464 #endif
465
466 symbolS *GOT_symbol; /* Pre-defined "_GLOBAL_OFFSET_TABLE_". */
467
468 static INLINE unsigned int
469 mode_from_disp_size (t)
470 unsigned int t;
471 {
472 return (t & Disp8) ? 1 : (t & (Disp16 | Disp32 | Disp32S)) ? 2 : 0;
473 }
474
475 static INLINE int
476 fits_in_signed_byte (num)
477 offsetT num;
478 {
479 return (num >= -128) && (num <= 127);
480 }
481
482 static INLINE int
483 fits_in_unsigned_byte (num)
484 offsetT num;
485 {
486 return (num & 0xff) == num;
487 }
488
489 static INLINE int
490 fits_in_unsigned_word (num)
491 offsetT num;
492 {
493 return (num & 0xffff) == num;
494 }
495
496 static INLINE int
497 fits_in_signed_word (num)
498 offsetT num;
499 {
500 return (-32768 <= num) && (num <= 32767);
501 }
502 static INLINE int
503 fits_in_signed_long (num)
504 offsetT num ATTRIBUTE_UNUSED;
505 {
506 #ifndef BFD64
507 return 1;
508 #else
509 return (!(((offsetT) -1 << 31) & num)
510 || (((offsetT) -1 << 31) & num) == ((offsetT) -1 << 31));
511 #endif
512 } /* fits_in_signed_long() */
513 static INLINE int
514 fits_in_unsigned_long (num)
515 offsetT num ATTRIBUTE_UNUSED;
516 {
517 #ifndef BFD64
518 return 1;
519 #else
520 return (num & (((offsetT) 2 << 31) - 1)) == num;
521 #endif
522 } /* fits_in_unsigned_long() */
523
524 static int
525 smallest_imm_type (num)
526 offsetT num;
527 {
528 if (cpu_arch_flags != (Cpu086 | Cpu186 | Cpu286 | Cpu386 | Cpu486 | CpuNo64)
529 && !(cpu_arch_flags & (CpuUnknown)))
530 {
531 /* This code is disabled on the 486 because all the Imm1 forms
532 in the opcode table are slower on the i486. They're the
533 versions with the implicitly specified single-position
534 displacement, which has another syntax if you really want to
535 use that form. */
536 if (num == 1)
537 return Imm1 | Imm8 | Imm8S | Imm16 | Imm32 | Imm32S | Imm64;
538 }
539 return (fits_in_signed_byte (num)
540 ? (Imm8S | Imm8 | Imm16 | Imm32 | Imm32S | Imm64)
541 : fits_in_unsigned_byte (num)
542 ? (Imm8 | Imm16 | Imm32 | Imm32S | Imm64)
543 : (fits_in_signed_word (num) || fits_in_unsigned_word (num))
544 ? (Imm16 | Imm32 | Imm32S | Imm64)
545 : fits_in_signed_long (num)
546 ? (Imm32 | Imm32S | Imm64)
547 : fits_in_unsigned_long (num)
548 ? (Imm32 | Imm64)
549 : Imm64);
550 }
551
552 static offsetT
553 offset_in_range (val, size)
554 offsetT val;
555 int size;
556 {
557 addressT mask;
558
559 switch (size)
560 {
561 case 1: mask = ((addressT) 1 << 8) - 1; break;
562 case 2: mask = ((addressT) 1 << 16) - 1; break;
563 case 4: mask = ((addressT) 2 << 31) - 1; break;
564 #ifdef BFD64
565 case 8: mask = ((addressT) 2 << 63) - 1; break;
566 #endif
567 default: abort ();
568 }
569
570 /* If BFD64, sign extend val. */
571 if (!use_rela_relocations)
572 if ((val & ~(((addressT) 2 << 31) - 1)) == 0)
573 val = (val ^ ((addressT) 1 << 31)) - ((addressT) 1 << 31);
574
575 if ((val & ~mask) != 0 && (val & ~mask) != ~mask)
576 {
577 char buf1[40], buf2[40];
578
579 sprint_value (buf1, val);
580 sprint_value (buf2, val & mask);
581 as_warn (_("%s shortened to %s"), buf1, buf2);
582 }
583 return val & mask;
584 }
585
586 /* Returns 0 if attempting to add a prefix where one from the same
587 class already exists, 1 if non rep/repne added, 2 if rep/repne
588 added. */
589 static int
590 add_prefix (prefix)
591 unsigned int prefix;
592 {
593 int ret = 1;
594 int q;
595
596 if (prefix >= 0x40 && prefix < 0x50 && flag_code == CODE_64BIT)
597 q = REX_PREFIX;
598 else
599 switch (prefix)
600 {
601 default:
602 abort ();
603
604 case CS_PREFIX_OPCODE:
605 case DS_PREFIX_OPCODE:
606 case ES_PREFIX_OPCODE:
607 case FS_PREFIX_OPCODE:
608 case GS_PREFIX_OPCODE:
609 case SS_PREFIX_OPCODE:
610 q = SEG_PREFIX;
611 break;
612
613 case REPNE_PREFIX_OPCODE:
614 case REPE_PREFIX_OPCODE:
615 ret = 2;
616 /* fall thru */
617 case LOCK_PREFIX_OPCODE:
618 q = LOCKREP_PREFIX;
619 break;
620
621 case FWAIT_OPCODE:
622 q = WAIT_PREFIX;
623 break;
624
625 case ADDR_PREFIX_OPCODE:
626 q = ADDR_PREFIX;
627 break;
628
629 case DATA_PREFIX_OPCODE:
630 q = DATA_PREFIX;
631 break;
632 }
633
634 if (i.prefix[q])
635 {
636 as_bad (_("same type of prefix used twice"));
637 return 0;
638 }
639
640 i.prefixes += 1;
641 i.prefix[q] = prefix;
642 return ret;
643 }
644
645 static void
646 set_code_flag (value)
647 int value;
648 {
649 flag_code = value;
650 cpu_arch_flags &= ~(Cpu64 | CpuNo64);
651 cpu_arch_flags |= (flag_code == CODE_64BIT ? Cpu64 : CpuNo64);
652 if (value == CODE_64BIT && !(cpu_arch_flags & CpuSledgehammer))
653 {
654 as_bad (_("64bit mode not supported on this CPU."));
655 }
656 if (value == CODE_32BIT && !(cpu_arch_flags & Cpu386))
657 {
658 as_bad (_("32bit mode not supported on this CPU."));
659 }
660 stackop_size = '\0';
661 }
662
663 static void
664 set_16bit_gcc_code_flag (new_code_flag)
665 int new_code_flag;
666 {
667 flag_code = new_code_flag;
668 cpu_arch_flags &= ~(Cpu64 | CpuNo64);
669 cpu_arch_flags |= (flag_code == CODE_64BIT ? Cpu64 : CpuNo64);
670 stackop_size = 'l';
671 }
672
673 static void
674 set_intel_syntax (syntax_flag)
675 int syntax_flag;
676 {
677 /* Find out if register prefixing is specified. */
678 int ask_naked_reg = 0;
679
680 SKIP_WHITESPACE ();
681 if (! is_end_of_line[(unsigned char) *input_line_pointer])
682 {
683 char *string = input_line_pointer;
684 int e = get_symbol_end ();
685
686 if (strcmp (string, "prefix") == 0)
687 ask_naked_reg = 1;
688 else if (strcmp (string, "noprefix") == 0)
689 ask_naked_reg = -1;
690 else
691 as_bad (_("bad argument to syntax directive."));
692 *input_line_pointer = e;
693 }
694 demand_empty_rest_of_line ();
695
696 intel_syntax = syntax_flag;
697
698 if (ask_naked_reg == 0)
699 {
700 #ifdef BFD_ASSEMBLER
701 allow_naked_reg = (intel_syntax
702 && (bfd_get_symbol_leading_char (stdoutput) != '\0'));
703 #else
704 /* Conservative default. */
705 allow_naked_reg = 0;
706 #endif
707 }
708 else
709 allow_naked_reg = (ask_naked_reg < 0);
710 }
711
712 static void
713 set_cpu_arch (dummy)
714 int dummy ATTRIBUTE_UNUSED;
715 {
716 SKIP_WHITESPACE ();
717
718 if (! is_end_of_line[(unsigned char) *input_line_pointer])
719 {
720 char *string = input_line_pointer;
721 int e = get_symbol_end ();
722 int i;
723
724 for (i = 0; cpu_arch[i].name; i++)
725 {
726 if (strcmp (string, cpu_arch[i].name) == 0)
727 {
728 cpu_arch_name = cpu_arch[i].name;
729 cpu_arch_flags = cpu_arch[i].flags | (flag_code == CODE_64BIT ? Cpu64 : CpuNo64);
730 break;
731 }
732 }
733 if (!cpu_arch[i].name)
734 as_bad (_("no such architecture: `%s'"), string);
735
736 *input_line_pointer = e;
737 }
738 else
739 as_bad (_("missing cpu architecture"));
740
741 demand_empty_rest_of_line ();
742 }
743
744 const pseudo_typeS md_pseudo_table[] =
745 {
746 #if !defined(OBJ_AOUT) && !defined(USE_ALIGN_PTWO)
747 {"align", s_align_bytes, 0},
748 #else
749 {"align", s_align_ptwo, 0},
750 #endif
751 {"arch", set_cpu_arch, 0},
752 #ifndef I386COFF
753 {"bss", s_bss, 0},
754 #endif
755 {"ffloat", float_cons, 'f'},
756 {"dfloat", float_cons, 'd'},
757 {"tfloat", float_cons, 'x'},
758 {"value", cons, 2},
759 {"noopt", s_ignore, 0},
760 {"optim", s_ignore, 0},
761 {"code16gcc", set_16bit_gcc_code_flag, CODE_16BIT},
762 {"code16", set_code_flag, CODE_16BIT},
763 {"code32", set_code_flag, CODE_32BIT},
764 {"code64", set_code_flag, CODE_64BIT},
765 {"intel_syntax", set_intel_syntax, 1},
766 {"att_syntax", set_intel_syntax, 0},
767 {"file", dwarf2_directive_file, 0},
768 {"loc", dwarf2_directive_loc, 0},
769 {0, 0, 0}
770 };
771
772 /* For interface with expression (). */
773 extern char *input_line_pointer;
774
775 /* Hash table for instruction mnemonic lookup. */
776 static struct hash_control *op_hash;
777
778 /* Hash table for register lookup. */
779 static struct hash_control *reg_hash;
780 \f
781 #ifdef BFD_ASSEMBLER
782 unsigned long
783 i386_mach ()
784 {
785 if (!strcmp (default_arch, "x86_64"))
786 return bfd_mach_x86_64;
787 else if (!strcmp (default_arch, "i386"))
788 return bfd_mach_i386_i386;
789 else
790 as_fatal (_("Unknown architecture"));
791 }
792 #endif
793 \f
794 void
795 md_begin ()
796 {
797 const char *hash_err;
798
799 /* Initialize op_hash hash table. */
800 op_hash = hash_new ();
801
802 {
803 register const template *optab;
804 register templates *core_optab;
805
806 /* Setup for loop. */
807 optab = i386_optab;
808 core_optab = (templates *) xmalloc (sizeof (templates));
809 core_optab->start = optab;
810
811 while (1)
812 {
813 ++optab;
814 if (optab->name == NULL
815 || strcmp (optab->name, (optab - 1)->name) != 0)
816 {
817 /* different name --> ship out current template list;
818 add to hash table; & begin anew. */
819 core_optab->end = optab;
820 hash_err = hash_insert (op_hash,
821 (optab - 1)->name,
822 (PTR) core_optab);
823 if (hash_err)
824 {
825 as_fatal (_("Internal Error: Can't hash %s: %s"),
826 (optab - 1)->name,
827 hash_err);
828 }
829 if (optab->name == NULL)
830 break;
831 core_optab = (templates *) xmalloc (sizeof (templates));
832 core_optab->start = optab;
833 }
834 }
835 }
836
837 /* Initialize reg_hash hash table. */
838 reg_hash = hash_new ();
839 {
840 register const reg_entry *regtab;
841
842 for (regtab = i386_regtab;
843 regtab < i386_regtab + sizeof (i386_regtab) / sizeof (i386_regtab[0]);
844 regtab++)
845 {
846 hash_err = hash_insert (reg_hash, regtab->reg_name, (PTR) regtab);
847 if (hash_err)
848 as_fatal (_("Internal Error: Can't hash %s: %s"),
849 regtab->reg_name,
850 hash_err);
851 }
852 }
853
854 /* Fill in lexical tables: mnemonic_chars, operand_chars. */
855 {
856 register int c;
857 register char *p;
858
859 for (c = 0; c < 256; c++)
860 {
861 if (isdigit (c))
862 {
863 digit_chars[c] = c;
864 mnemonic_chars[c] = c;
865 register_chars[c] = c;
866 operand_chars[c] = c;
867 }
868 else if (islower (c))
869 {
870 mnemonic_chars[c] = c;
871 register_chars[c] = c;
872 operand_chars[c] = c;
873 }
874 else if (isupper (c))
875 {
876 mnemonic_chars[c] = tolower (c);
877 register_chars[c] = mnemonic_chars[c];
878 operand_chars[c] = c;
879 }
880
881 if (isalpha (c) || isdigit (c))
882 identifier_chars[c] = c;
883 else if (c >= 128)
884 {
885 identifier_chars[c] = c;
886 operand_chars[c] = c;
887 }
888 }
889
890 #ifdef LEX_AT
891 identifier_chars['@'] = '@';
892 #endif
893 digit_chars['-'] = '-';
894 identifier_chars['_'] = '_';
895 identifier_chars['.'] = '.';
896
897 for (p = operand_special_chars; *p != '\0'; p++)
898 operand_chars[(unsigned char) *p] = *p;
899 }
900
901 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
902 if (OUTPUT_FLAVOR == bfd_target_elf_flavour)
903 {
904 record_alignment (text_section, 2);
905 record_alignment (data_section, 2);
906 record_alignment (bss_section, 2);
907 }
908 #endif
909 }
910
911 void
912 i386_print_statistics (file)
913 FILE *file;
914 {
915 hash_print_statistics (file, "i386 opcode", op_hash);
916 hash_print_statistics (file, "i386 register", reg_hash);
917 }
918 \f
919 #ifdef DEBUG386
920
921 /* Debugging routines for md_assemble. */
922 static void pi PARAMS ((char *, i386_insn *));
923 static void pte PARAMS ((template *));
924 static void pt PARAMS ((unsigned int));
925 static void pe PARAMS ((expressionS *));
926 static void ps PARAMS ((symbolS *));
927
928 static void
929 pi (line, x)
930 char *line;
931 i386_insn *x;
932 {
933 unsigned int i;
934
935 fprintf (stdout, "%s: template ", line);
936 pte (&x->tm);
937 fprintf (stdout, " address: base %s index %s scale %x\n",
938 x->base_reg ? x->base_reg->reg_name : "none",
939 x->index_reg ? x->index_reg->reg_name : "none",
940 x->log2_scale_factor);
941 fprintf (stdout, " modrm: mode %x reg %x reg/mem %x\n",
942 x->rm.mode, x->rm.reg, x->rm.regmem);
943 fprintf (stdout, " sib: base %x index %x scale %x\n",
944 x->sib.base, x->sib.index, x->sib.scale);
945 fprintf (stdout, " rex: 64bit %x extX %x extY %x extZ %x\n",
946 x->rex.mode64, x->rex.extX, x->rex.extY, x->rex.extZ);
947 for (i = 0; i < x->operands; i++)
948 {
949 fprintf (stdout, " #%d: ", i + 1);
950 pt (x->types[i]);
951 fprintf (stdout, "\n");
952 if (x->types[i]
953 & (Reg | SReg2 | SReg3 | Control | Debug | Test | RegMMX | RegXMM))
954 fprintf (stdout, "%s\n", x->op[i].regs->reg_name);
955 if (x->types[i] & Imm)
956 pe (x->op[i].imms);
957 if (x->types[i] & Disp)
958 pe (x->op[i].disps);
959 }
960 }
961
962 static void
963 pte (t)
964 template *t;
965 {
966 unsigned int i;
967 fprintf (stdout, " %d operands ", t->operands);
968 fprintf (stdout, "opcode %x ", t->base_opcode);
969 if (t->extension_opcode != None)
970 fprintf (stdout, "ext %x ", t->extension_opcode);
971 if (t->opcode_modifier & D)
972 fprintf (stdout, "D");
973 if (t->opcode_modifier & W)
974 fprintf (stdout, "W");
975 fprintf (stdout, "\n");
976 for (i = 0; i < t->operands; i++)
977 {
978 fprintf (stdout, " #%d type ", i + 1);
979 pt (t->operand_types[i]);
980 fprintf (stdout, "\n");
981 }
982 }
983
984 static void
985 pe (e)
986 expressionS *e;
987 {
988 fprintf (stdout, " operation %d\n", e->X_op);
989 fprintf (stdout, " add_number %ld (%lx)\n",
990 (long) e->X_add_number, (long) e->X_add_number);
991 if (e->X_add_symbol)
992 {
993 fprintf (stdout, " add_symbol ");
994 ps (e->X_add_symbol);
995 fprintf (stdout, "\n");
996 }
997 if (e->X_op_symbol)
998 {
999 fprintf (stdout, " op_symbol ");
1000 ps (e->X_op_symbol);
1001 fprintf (stdout, "\n");
1002 }
1003 }
1004
1005 static void
1006 ps (s)
1007 symbolS *s;
1008 {
1009 fprintf (stdout, "%s type %s%s",
1010 S_GET_NAME (s),
1011 S_IS_EXTERNAL (s) ? "EXTERNAL " : "",
1012 segment_name (S_GET_SEGMENT (s)));
1013 }
1014
1015 struct type_name
1016 {
1017 unsigned int mask;
1018 char *tname;
1019 }
1020
1021 type_names[] =
1022 {
1023 { Reg8, "r8" },
1024 { Reg16, "r16" },
1025 { Reg32, "r32" },
1026 { Reg64, "r64" },
1027 { Imm8, "i8" },
1028 { Imm8S, "i8s" },
1029 { Imm16, "i16" },
1030 { Imm32, "i32" },
1031 { Imm32S, "i32s" },
1032 { Imm64, "i64" },
1033 { Imm1, "i1" },
1034 { BaseIndex, "BaseIndex" },
1035 { Disp8, "d8" },
1036 { Disp16, "d16" },
1037 { Disp32, "d32" },
1038 { Disp32S, "d32s" },
1039 { Disp64, "d64" },
1040 { InOutPortReg, "InOutPortReg" },
1041 { ShiftCount, "ShiftCount" },
1042 { Control, "control reg" },
1043 { Test, "test reg" },
1044 { Debug, "debug reg" },
1045 { FloatReg, "FReg" },
1046 { FloatAcc, "FAcc" },
1047 { SReg2, "SReg2" },
1048 { SReg3, "SReg3" },
1049 { Acc, "Acc" },
1050 { JumpAbsolute, "Jump Absolute" },
1051 { RegMMX, "rMMX" },
1052 { RegXMM, "rXMM" },
1053 { EsSeg, "es" },
1054 { 0, "" }
1055 };
1056
1057 static void
1058 pt (t)
1059 unsigned int t;
1060 {
1061 register struct type_name *ty;
1062
1063 for (ty = type_names; ty->mask; ty++)
1064 if (t & ty->mask)
1065 fprintf (stdout, "%s, ", ty->tname);
1066 fflush (stdout);
1067 }
1068
1069 #endif /* DEBUG386 */
1070 \f
1071 int
1072 tc_i386_force_relocation (fixp)
1073 struct fix *fixp;
1074 {
1075 #ifdef BFD_ASSEMBLER
1076 if (fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT
1077 || fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
1078 return 1;
1079 return 0;
1080 #else
1081 /* For COFF. */
1082 return fixp->fx_r_type == 7;
1083 #endif
1084 }
1085
1086 #ifdef BFD_ASSEMBLER
1087
1088 static bfd_reloc_code_real_type
1089 reloc (size, pcrel, sign, other)
1090 int size;
1091 int pcrel;
1092 int sign;
1093 bfd_reloc_code_real_type other;
1094 {
1095 if (other != NO_RELOC)
1096 return other;
1097
1098 if (pcrel)
1099 {
1100 if (!sign)
1101 as_bad (_("There are no unsigned pc-relative relocations"));
1102 switch (size)
1103 {
1104 case 1: return BFD_RELOC_8_PCREL;
1105 case 2: return BFD_RELOC_16_PCREL;
1106 case 4: return BFD_RELOC_32_PCREL;
1107 }
1108 as_bad (_("can not do %d byte pc-relative relocation"), size);
1109 }
1110 else
1111 {
1112 if (sign)
1113 switch (size)
1114 {
1115 case 4: return BFD_RELOC_X86_64_32S;
1116 }
1117 else
1118 switch (size)
1119 {
1120 case 1: return BFD_RELOC_8;
1121 case 2: return BFD_RELOC_16;
1122 case 4: return BFD_RELOC_32;
1123 case 8: return BFD_RELOC_64;
1124 }
1125 as_bad (_("can not do %s %d byte relocation"),
1126 sign ? "signed" : "unsigned", size);
1127 }
1128
1129 abort ();
1130 return BFD_RELOC_NONE;
1131 }
1132
1133 /* Here we decide which fixups can be adjusted to make them relative to
1134 the beginning of the section instead of the symbol. Basically we need
1135 to make sure that the dynamic relocations are done correctly, so in
1136 some cases we force the original symbol to be used. */
1137
1138 int
1139 tc_i386_fix_adjustable (fixP)
1140 fixS *fixP;
1141 {
1142 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
1143 /* Prevent all adjustments to global symbols, or else dynamic
1144 linking will not work correctly. */
1145 if (S_IS_EXTERNAL (fixP->fx_addsy)
1146 || S_IS_WEAK (fixP->fx_addsy))
1147 return 0;
1148 #endif
1149 /* adjust_reloc_syms doesn't know about the GOT. */
1150 if (fixP->fx_r_type == BFD_RELOC_386_GOTOFF
1151 || fixP->fx_r_type == BFD_RELOC_386_PLT32
1152 || fixP->fx_r_type == BFD_RELOC_386_GOT32
1153 || fixP->fx_r_type == BFD_RELOC_X86_64_PLT32
1154 || fixP->fx_r_type == BFD_RELOC_X86_64_GOT32
1155 || fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
1156 || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
1157 return 0;
1158 return 1;
1159 }
1160 #else
1161 #define reloc(SIZE,PCREL,SIGN,OTHER) 0
1162 #define BFD_RELOC_16 0
1163 #define BFD_RELOC_32 0
1164 #define BFD_RELOC_16_PCREL 0
1165 #define BFD_RELOC_32_PCREL 0
1166 #define BFD_RELOC_386_PLT32 0
1167 #define BFD_RELOC_386_GOT32 0
1168 #define BFD_RELOC_386_GOTOFF 0
1169 #define BFD_RELOC_X86_64_PLT32 0
1170 #define BFD_RELOC_X86_64_GOT32 0
1171 #define BFD_RELOC_X86_64_GOTPCREL 0
1172 #endif
1173
1174 static int intel_float_operand PARAMS ((char *mnemonic));
1175
1176 static int
1177 intel_float_operand (mnemonic)
1178 char *mnemonic;
1179 {
1180 if (mnemonic[0] == 'f' && mnemonic[1] == 'i')
1181 return 2;
1182
1183 if (mnemonic[0] == 'f')
1184 return 1;
1185
1186 return 0;
1187 }
1188
1189 /* This is the guts of the machine-dependent assembler. LINE points to a
1190 machine dependent instruction. This function is supposed to emit
1191 the frags/bytes it assembles to. */
1192
1193 void
1194 md_assemble (line)
1195 char *line;
1196 {
1197 /* Points to template once we've found it. */
1198 const template *t;
1199
1200 /* Count the size of the instruction generated. */
1201 int insn_size = 0;
1202
1203 int j;
1204
1205 char mnemonic[MAX_MNEM_SIZE];
1206
1207 /* Initialize globals. */
1208 memset (&i, '\0', sizeof (i));
1209 for (j = 0; j < MAX_OPERANDS; j++)
1210 i.disp_reloc[j] = NO_RELOC;
1211 memset (disp_expressions, '\0', sizeof (disp_expressions));
1212 memset (im_expressions, '\0', sizeof (im_expressions));
1213 save_stack_p = save_stack;
1214
1215 /* First parse an instruction mnemonic & call i386_operand for the operands.
1216 We assume that the scrubber has arranged it so that line[0] is the valid
1217 start of a (possibly prefixed) mnemonic. */
1218 {
1219 char *l = line;
1220 char *token_start = l;
1221 char *mnem_p;
1222
1223 /* Non-zero if we found a prefix only acceptable with string insns. */
1224 const char *expecting_string_instruction = NULL;
1225
1226 while (1)
1227 {
1228 mnem_p = mnemonic;
1229 while ((*mnem_p = mnemonic_chars[(unsigned char) *l]) != 0)
1230 {
1231 mnem_p++;
1232 if (mnem_p >= mnemonic + sizeof (mnemonic))
1233 {
1234 as_bad (_("no such instruction: `%s'"), token_start);
1235 return;
1236 }
1237 l++;
1238 }
1239 if (!is_space_char (*l)
1240 && *l != END_OF_INSN
1241 && *l != PREFIX_SEPARATOR)
1242 {
1243 as_bad (_("invalid character %s in mnemonic"),
1244 output_invalid (*l));
1245 return;
1246 }
1247 if (token_start == l)
1248 {
1249 if (*l == PREFIX_SEPARATOR)
1250 as_bad (_("expecting prefix; got nothing"));
1251 else
1252 as_bad (_("expecting mnemonic; got nothing"));
1253 return;
1254 }
1255
1256 /* Look up instruction (or prefix) via hash table. */
1257 current_templates = hash_find (op_hash, mnemonic);
1258
1259 if (*l != END_OF_INSN
1260 && (! is_space_char (*l) || l[1] != END_OF_INSN)
1261 && current_templates
1262 && (current_templates->start->opcode_modifier & IsPrefix))
1263 {
1264 /* If we are in 16-bit mode, do not allow addr16 or data16.
1265 Similarly, in 32-bit mode, do not allow addr32 or data32. */
1266 if ((current_templates->start->opcode_modifier & (Size16 | Size32))
1267 && (((current_templates->start->opcode_modifier & Size32) != 0)
1268 ^ (flag_code == CODE_16BIT)))
1269 {
1270 as_bad (_("redundant %s prefix"),
1271 current_templates->start->name);
1272 return;
1273 }
1274 /* Add prefix, checking for repeated prefixes. */
1275 switch (add_prefix (current_templates->start->base_opcode))
1276 {
1277 case 0:
1278 return;
1279 case 2:
1280 expecting_string_instruction = current_templates->start->name;
1281 break;
1282 }
1283 /* Skip past PREFIX_SEPARATOR and reset token_start. */
1284 token_start = ++l;
1285 }
1286 else
1287 break;
1288 }
1289
1290 if (!current_templates)
1291 {
1292 /* See if we can get a match by trimming off a suffix. */
1293 switch (mnem_p[-1])
1294 {
1295 case WORD_MNEM_SUFFIX:
1296 case BYTE_MNEM_SUFFIX:
1297 case QWORD_MNEM_SUFFIX:
1298 i.suffix = mnem_p[-1];
1299 mnem_p[-1] = '\0';
1300 current_templates = hash_find (op_hash, mnemonic);
1301 break;
1302 case SHORT_MNEM_SUFFIX:
1303 case LONG_MNEM_SUFFIX:
1304 if (!intel_syntax)
1305 {
1306 i.suffix = mnem_p[-1];
1307 mnem_p[-1] = '\0';
1308 current_templates = hash_find (op_hash, mnemonic);
1309 }
1310 break;
1311
1312 /* Intel Syntax. */
1313 case 'd':
1314 if (intel_syntax)
1315 {
1316 if (intel_float_operand (mnemonic))
1317 i.suffix = SHORT_MNEM_SUFFIX;
1318 else
1319 i.suffix = LONG_MNEM_SUFFIX;
1320 mnem_p[-1] = '\0';
1321 current_templates = hash_find (op_hash, mnemonic);
1322 }
1323 break;
1324 }
1325 if (!current_templates)
1326 {
1327 as_bad (_("no such instruction: `%s'"), token_start);
1328 return;
1329 }
1330 }
1331
1332 /* Check if instruction is supported on specified architecture. */
1333 if (cpu_arch_flags != 0)
1334 {
1335 if ((current_templates->start->cpu_flags & ~(Cpu64 | CpuNo64))
1336 & ~(cpu_arch_flags & ~(Cpu64 | CpuNo64)))
1337 {
1338 as_warn (_("`%s' is not supported on `%s'"),
1339 current_templates->start->name, cpu_arch_name);
1340 }
1341 else if ((Cpu386 & ~cpu_arch_flags) && (flag_code != CODE_16BIT))
1342 {
1343 as_warn (_("use .code16 to ensure correct addressing mode"));
1344 }
1345 }
1346
1347 /* Check for rep/repne without a string instruction. */
1348 if (expecting_string_instruction
1349 && !(current_templates->start->opcode_modifier & IsString))
1350 {
1351 as_bad (_("expecting string instruction after `%s'"),
1352 expecting_string_instruction);
1353 return;
1354 }
1355
1356 /* There may be operands to parse. */
1357 if (*l != END_OF_INSN)
1358 {
1359 /* 1 if operand is pending after ','. */
1360 unsigned int expecting_operand = 0;
1361
1362 /* Non-zero if operand parens not balanced. */
1363 unsigned int paren_not_balanced;
1364
1365 do
1366 {
1367 /* Skip optional white space before operand. */
1368 if (is_space_char (*l))
1369 ++l;
1370 if (!is_operand_char (*l) && *l != END_OF_INSN)
1371 {
1372 as_bad (_("invalid character %s before operand %d"),
1373 output_invalid (*l),
1374 i.operands + 1);
1375 return;
1376 }
1377 token_start = l; /* after white space */
1378 paren_not_balanced = 0;
1379 while (paren_not_balanced || *l != ',')
1380 {
1381 if (*l == END_OF_INSN)
1382 {
1383 if (paren_not_balanced)
1384 {
1385 if (!intel_syntax)
1386 as_bad (_("unbalanced parenthesis in operand %d."),
1387 i.operands + 1);
1388 else
1389 as_bad (_("unbalanced brackets in operand %d."),
1390 i.operands + 1);
1391 return;
1392 }
1393 else
1394 break; /* we are done */
1395 }
1396 else if (!is_operand_char (*l) && !is_space_char (*l))
1397 {
1398 as_bad (_("invalid character %s in operand %d"),
1399 output_invalid (*l),
1400 i.operands + 1);
1401 return;
1402 }
1403 if (!intel_syntax)
1404 {
1405 if (*l == '(')
1406 ++paren_not_balanced;
1407 if (*l == ')')
1408 --paren_not_balanced;
1409 }
1410 else
1411 {
1412 if (*l == '[')
1413 ++paren_not_balanced;
1414 if (*l == ']')
1415 --paren_not_balanced;
1416 }
1417 l++;
1418 }
1419 if (l != token_start)
1420 { /* Yes, we've read in another operand. */
1421 unsigned int operand_ok;
1422 this_operand = i.operands++;
1423 if (i.operands > MAX_OPERANDS)
1424 {
1425 as_bad (_("spurious operands; (%d operands/instruction max)"),
1426 MAX_OPERANDS);
1427 return;
1428 }
1429 /* Now parse operand adding info to 'i' as we go along. */
1430 END_STRING_AND_SAVE (l);
1431
1432 if (intel_syntax)
1433 operand_ok =
1434 i386_intel_operand (token_start,
1435 intel_float_operand (mnemonic));
1436 else
1437 operand_ok = i386_operand (token_start);
1438
1439 RESTORE_END_STRING (l);
1440 if (!operand_ok)
1441 return;
1442 }
1443 else
1444 {
1445 if (expecting_operand)
1446 {
1447 expecting_operand_after_comma:
1448 as_bad (_("expecting operand after ','; got nothing"));
1449 return;
1450 }
1451 if (*l == ',')
1452 {
1453 as_bad (_("expecting operand before ','; got nothing"));
1454 return;
1455 }
1456 }
1457
1458 /* Now *l must be either ',' or END_OF_INSN. */
1459 if (*l == ',')
1460 {
1461 if (*++l == END_OF_INSN)
1462 {
1463 /* Just skip it, if it's \n complain. */
1464 goto expecting_operand_after_comma;
1465 }
1466 expecting_operand = 1;
1467 }
1468 }
1469 while (*l != END_OF_INSN);
1470 }
1471 }
1472
1473 /* Now we've parsed the mnemonic into a set of templates, and have the
1474 operands at hand.
1475
1476 Next, we find a template that matches the given insn,
1477 making sure the overlap of the given operands types is consistent
1478 with the template operand types. */
1479
1480 #define MATCH(overlap, given, template) \
1481 ((overlap & ~JumpAbsolute) \
1482 && ((given) & (BaseIndex|JumpAbsolute)) == ((overlap) & (BaseIndex|JumpAbsolute)))
1483
1484 /* If given types r0 and r1 are registers they must be of the same type
1485 unless the expected operand type register overlap is null.
1486 Note that Acc in a template matches every size of reg. */
1487 #define CONSISTENT_REGISTER_MATCH(m0, g0, t0, m1, g1, t1) \
1488 ( ((g0) & Reg) == 0 || ((g1) & Reg) == 0 || \
1489 ((g0) & Reg) == ((g1) & Reg) || \
1490 ((((m0) & Acc) ? Reg : (t0)) & (((m1) & Acc) ? Reg : (t1)) & Reg) == 0 )
1491
1492 {
1493 register unsigned int overlap0, overlap1;
1494 unsigned int overlap2;
1495 unsigned int found_reverse_match;
1496 int suffix_check;
1497
1498 /* All intel opcodes have reversed operands except for "bound" and
1499 "enter". We also don't reverse intersegment "jmp" and "call"
1500 instructions with 2 immediate operands so that the immediate segment
1501 precedes the offset, as it does when in AT&T mode. "enter" and the
1502 intersegment "jmp" and "call" instructions are the only ones that
1503 have two immediate operands. */
1504 if (intel_syntax && i.operands > 1
1505 && (strcmp (mnemonic, "bound") != 0)
1506 && !((i.types[0] & Imm) && (i.types[1] & Imm)))
1507 {
1508 union i386_op temp_op;
1509 unsigned int temp_type;
1510 #ifdef BFD_ASSEMBLER
1511 enum bfd_reloc_code_real temp_reloc;
1512 #else
1513 int temp_reloc;
1514 #endif
1515 int xchg1 = 0;
1516 int xchg2 = 0;
1517
1518 if (i.operands == 2)
1519 {
1520 xchg1 = 0;
1521 xchg2 = 1;
1522 }
1523 else if (i.operands == 3)
1524 {
1525 xchg1 = 0;
1526 xchg2 = 2;
1527 }
1528 temp_type = i.types[xchg2];
1529 i.types[xchg2] = i.types[xchg1];
1530 i.types[xchg1] = temp_type;
1531 temp_op = i.op[xchg2];
1532 i.op[xchg2] = i.op[xchg1];
1533 i.op[xchg1] = temp_op;
1534 temp_reloc = i.disp_reloc[xchg2];
1535 i.disp_reloc[xchg2] = i.disp_reloc[xchg1];
1536 i.disp_reloc[xchg1] = temp_reloc;
1537
1538 if (i.mem_operands == 2)
1539 {
1540 const seg_entry *temp_seg;
1541 temp_seg = i.seg[0];
1542 i.seg[0] = i.seg[1];
1543 i.seg[1] = temp_seg;
1544 }
1545 }
1546
1547 if (i.imm_operands)
1548 {
1549 /* Try to ensure constant immediates are represented in the smallest
1550 opcode possible. */
1551 char guess_suffix = 0;
1552 int op;
1553
1554 if (i.suffix)
1555 guess_suffix = i.suffix;
1556 else if (i.reg_operands)
1557 {
1558 /* Figure out a suffix from the last register operand specified.
1559 We can't do this properly yet, ie. excluding InOutPortReg,
1560 but the following works for instructions with immediates.
1561 In any case, we can't set i.suffix yet. */
1562 for (op = i.operands; --op >= 0;)
1563 if (i.types[op] & Reg)
1564 {
1565 if (i.types[op] & Reg8)
1566 guess_suffix = BYTE_MNEM_SUFFIX;
1567 else if (i.types[op] & Reg16)
1568 guess_suffix = WORD_MNEM_SUFFIX;
1569 else if (i.types[op] & Reg32)
1570 guess_suffix = LONG_MNEM_SUFFIX;
1571 else if (i.types[op] & Reg64)
1572 guess_suffix = QWORD_MNEM_SUFFIX;
1573 break;
1574 }
1575 }
1576 else if ((flag_code == CODE_16BIT) ^ (i.prefix[DATA_PREFIX] != 0))
1577 guess_suffix = WORD_MNEM_SUFFIX;
1578
1579 for (op = i.operands; --op >= 0;)
1580 if (i.types[op] & Imm)
1581 {
1582 switch (i.op[op].imms->X_op)
1583 {
1584 case O_constant:
1585 /* If a suffix is given, this operand may be shortened. */
1586 switch (guess_suffix)
1587 {
1588 case LONG_MNEM_SUFFIX:
1589 i.types[op] |= Imm32 | Imm64;
1590 break;
1591 case WORD_MNEM_SUFFIX:
1592 i.types[op] |= Imm16 | Imm32S | Imm32 | Imm64;
1593 break;
1594 case BYTE_MNEM_SUFFIX:
1595 i.types[op] |= Imm16 | Imm8 | Imm8S | Imm32S | Imm32 | Imm64;
1596 break;
1597 }
1598
1599 /* If this operand is at most 16 bits, convert it
1600 to a signed 16 bit number before trying to see
1601 whether it will fit in an even smaller size.
1602 This allows a 16-bit operand such as $0xffe0 to
1603 be recognised as within Imm8S range. */
1604 if ((i.types[op] & Imm16)
1605 && (i.op[op].imms->X_add_number & ~(offsetT) 0xffff) == 0)
1606 {
1607 i.op[op].imms->X_add_number =
1608 (((i.op[op].imms->X_add_number & 0xffff) ^ 0x8000) - 0x8000);
1609 }
1610 if ((i.types[op] & Imm32)
1611 && (i.op[op].imms->X_add_number & ~(((offsetT) 2 << 31) - 1)) == 0)
1612 {
1613 i.op[op].imms->X_add_number =
1614 (i.op[op].imms->X_add_number ^ ((offsetT) 1 << 31)) - ((addressT) 1 << 31);
1615 }
1616 i.types[op] |= smallest_imm_type (i.op[op].imms->X_add_number);
1617 /* We must avoid matching of Imm32 templates when 64bit only immediate is available. */
1618 if (guess_suffix == QWORD_MNEM_SUFFIX)
1619 i.types[op] &= ~Imm32;
1620 break;
1621 case O_absent:
1622 case O_register:
1623 abort ();
1624 /* Symbols and expressions. */
1625 default:
1626 /* Convert symbolic operand to proper sizes for matching. */
1627 switch (guess_suffix)
1628 {
1629 case QWORD_MNEM_SUFFIX:
1630 i.types[op] = Imm64 | Imm32S;
1631 break;
1632 case LONG_MNEM_SUFFIX:
1633 i.types[op] = Imm32 | Imm64;
1634 break;
1635 case WORD_MNEM_SUFFIX:
1636 i.types[op] = Imm16 | Imm32 | Imm64;
1637 break;
1638 break;
1639 case BYTE_MNEM_SUFFIX:
1640 i.types[op] = Imm8 | Imm8S | Imm16 | Imm32S | Imm32;
1641 break;
1642 break;
1643 }
1644 break;
1645 }
1646 }
1647 }
1648
1649 if (i.disp_operands)
1650 {
1651 /* Try to use the smallest displacement type too. */
1652 int op;
1653
1654 for (op = i.operands; --op >= 0;)
1655 if ((i.types[op] & Disp)
1656 && i.op[op].imms->X_op == O_constant)
1657 {
1658 offsetT disp = i.op[op].disps->X_add_number;
1659
1660 if (i.types[op] & Disp16)
1661 {
1662 /* We know this operand is at most 16 bits, so
1663 convert to a signed 16 bit number before trying
1664 to see whether it will fit in an even smaller
1665 size. */
1666
1667 disp = (((disp & 0xffff) ^ 0x8000) - 0x8000);
1668 }
1669 else if (i.types[op] & Disp32)
1670 {
1671 /* We know this operand is at most 32 bits, so convert to a
1672 signed 32 bit number before trying to see whether it will
1673 fit in an even smaller size. */
1674 disp &= (((offsetT) 2 << 31) - 1);
1675 disp = (disp ^ ((offsetT) 1 << 31)) - ((addressT) 1 << 31);
1676 }
1677 if (flag_code == CODE_64BIT)
1678 {
1679 if (fits_in_signed_long (disp))
1680 i.types[op] |= Disp32S;
1681 if (fits_in_unsigned_long (disp))
1682 i.types[op] |= Disp32;
1683 }
1684 if ((i.types[op] & (Disp32 | Disp32S | Disp16))
1685 && fits_in_signed_byte (disp))
1686 i.types[op] |= Disp8;
1687 }
1688 }
1689
1690 overlap0 = 0;
1691 overlap1 = 0;
1692 overlap2 = 0;
1693 found_reverse_match = 0;
1694 suffix_check = (i.suffix == BYTE_MNEM_SUFFIX
1695 ? No_bSuf
1696 : (i.suffix == WORD_MNEM_SUFFIX
1697 ? No_wSuf
1698 : (i.suffix == SHORT_MNEM_SUFFIX
1699 ? No_sSuf
1700 : (i.suffix == LONG_MNEM_SUFFIX
1701 ? No_lSuf
1702 : (i.suffix == QWORD_MNEM_SUFFIX
1703 ? No_qSuf
1704 : (i.suffix == LONG_DOUBLE_MNEM_SUFFIX ? No_xSuf : 0))))));
1705
1706 for (t = current_templates->start;
1707 t < current_templates->end;
1708 t++)
1709 {
1710 /* Must have right number of operands. */
1711 if (i.operands != t->operands)
1712 continue;
1713
1714 /* Check the suffix, except for some instructions in intel mode. */
1715 if ((t->opcode_modifier & suffix_check)
1716 && !(intel_syntax
1717 && (t->opcode_modifier & IgnoreSize))
1718 && !(intel_syntax
1719 && t->base_opcode == 0xd9
1720 && (t->extension_opcode == 5 /* 0xd9,5 "fldcw" */
1721 || t->extension_opcode == 7))) /* 0xd9,7 "f{n}stcw" */
1722 continue;
1723
1724 /* Do not verify operands when there are none. */
1725 else if (!t->operands)
1726 {
1727 if (t->cpu_flags & ~cpu_arch_flags)
1728 continue;
1729 /* We've found a match; break out of loop. */
1730 break;
1731 }
1732
1733 overlap0 = i.types[0] & t->operand_types[0];
1734 switch (t->operands)
1735 {
1736 case 1:
1737 if (!MATCH (overlap0, i.types[0], t->operand_types[0]))
1738 continue;
1739 break;
1740 case 2:
1741 case 3:
1742 overlap1 = i.types[1] & t->operand_types[1];
1743 if (!MATCH (overlap0, i.types[0], t->operand_types[0])
1744 || !MATCH (overlap1, i.types[1], t->operand_types[1])
1745 || !CONSISTENT_REGISTER_MATCH (overlap0, i.types[0],
1746 t->operand_types[0],
1747 overlap1, i.types[1],
1748 t->operand_types[1]))
1749 {
1750 /* Check if other direction is valid ... */
1751 if ((t->opcode_modifier & (D|FloatD)) == 0)
1752 continue;
1753
1754 /* Try reversing direction of operands. */
1755 overlap0 = i.types[0] & t->operand_types[1];
1756 overlap1 = i.types[1] & t->operand_types[0];
1757 if (!MATCH (overlap0, i.types[0], t->operand_types[1])
1758 || !MATCH (overlap1, i.types[1], t->operand_types[0])
1759 || !CONSISTENT_REGISTER_MATCH (overlap0, i.types[0],
1760 t->operand_types[1],
1761 overlap1, i.types[1],
1762 t->operand_types[0]))
1763 {
1764 /* Does not match either direction. */
1765 continue;
1766 }
1767 /* found_reverse_match holds which of D or FloatDR
1768 we've found. */
1769 found_reverse_match = t->opcode_modifier & (D|FloatDR);
1770 }
1771 /* Found a forward 2 operand match here. */
1772 else if (t->operands == 3)
1773 {
1774 /* Here we make use of the fact that there are no
1775 reverse match 3 operand instructions, and all 3
1776 operand instructions only need to be checked for
1777 register consistency between operands 2 and 3. */
1778 overlap2 = i.types[2] & t->operand_types[2];
1779 if (!MATCH (overlap2, i.types[2], t->operand_types[2])
1780 || !CONSISTENT_REGISTER_MATCH (overlap1, i.types[1],
1781 t->operand_types[1],
1782 overlap2, i.types[2],
1783 t->operand_types[2]))
1784
1785 continue;
1786 }
1787 /* Found either forward/reverse 2 or 3 operand match here:
1788 slip through to break. */
1789 }
1790 if (t->cpu_flags & ~cpu_arch_flags)
1791 {
1792 found_reverse_match = 0;
1793 continue;
1794 }
1795 /* We've found a match; break out of loop. */
1796 break;
1797 }
1798 if (t == current_templates->end)
1799 {
1800 /* We found no match. */
1801 as_bad (_("suffix or operands invalid for `%s'"),
1802 current_templates->start->name);
1803 return;
1804 }
1805
1806 if (!quiet_warnings)
1807 {
1808 if (!intel_syntax
1809 && ((i.types[0] & JumpAbsolute)
1810 != (t->operand_types[0] & JumpAbsolute)))
1811 {
1812 as_warn (_("indirect %s without `*'"), t->name);
1813 }
1814
1815 if ((t->opcode_modifier & (IsPrefix|IgnoreSize))
1816 == (IsPrefix|IgnoreSize))
1817 {
1818 /* Warn them that a data or address size prefix doesn't
1819 affect assembly of the next line of code. */
1820 as_warn (_("stand-alone `%s' prefix"), t->name);
1821 }
1822 }
1823
1824 /* Copy the template we found. */
1825 i.tm = *t;
1826 if (found_reverse_match)
1827 {
1828 /* If we found a reverse match we must alter the opcode
1829 direction bit. found_reverse_match holds bits to change
1830 (different for int & float insns). */
1831
1832 i.tm.base_opcode ^= found_reverse_match;
1833
1834 i.tm.operand_types[0] = t->operand_types[1];
1835 i.tm.operand_types[1] = t->operand_types[0];
1836 }
1837
1838 /* Undo SYSV386_COMPAT brokenness when in Intel mode. See i386.h */
1839 if (SYSV386_COMPAT
1840 && intel_syntax
1841 && (i.tm.base_opcode & 0xfffffde0) == 0xdce0)
1842 i.tm.base_opcode ^= FloatR;
1843
1844 if (i.tm.opcode_modifier & FWait)
1845 if (! add_prefix (FWAIT_OPCODE))
1846 return;
1847
1848 /* Check string instruction segment overrides. */
1849 if ((i.tm.opcode_modifier & IsString) != 0 && i.mem_operands != 0)
1850 {
1851 int mem_op = (i.types[0] & AnyMem) ? 0 : 1;
1852 if ((i.tm.operand_types[mem_op] & EsSeg) != 0)
1853 {
1854 if (i.seg[0] != NULL && i.seg[0] != &es)
1855 {
1856 as_bad (_("`%s' operand %d must use `%%es' segment"),
1857 i.tm.name,
1858 mem_op + 1);
1859 return;
1860 }
1861 /* There's only ever one segment override allowed per instruction.
1862 This instruction possibly has a legal segment override on the
1863 second operand, so copy the segment to where non-string
1864 instructions store it, allowing common code. */
1865 i.seg[0] = i.seg[1];
1866 }
1867 else if ((i.tm.operand_types[mem_op + 1] & EsSeg) != 0)
1868 {
1869 if (i.seg[1] != NULL && i.seg[1] != &es)
1870 {
1871 as_bad (_("`%s' operand %d must use `%%es' segment"),
1872 i.tm.name,
1873 mem_op + 2);
1874 return;
1875 }
1876 }
1877 }
1878
1879 if (i.reg_operands && flag_code < CODE_64BIT)
1880 {
1881 int op;
1882 for (op = i.operands; --op >= 0;)
1883 if ((i.types[op] & Reg)
1884 && (i.op[op].regs->reg_flags & (RegRex64|RegRex)))
1885 {
1886 as_bad (_("Extended register `%%%s' available only in 64bit mode."),
1887 i.op[op].regs->reg_name);
1888 return;
1889 }
1890 }
1891
1892 /* If matched instruction specifies an explicit instruction mnemonic
1893 suffix, use it. */
1894 if (i.tm.opcode_modifier & (Size16 | Size32 | Size64))
1895 {
1896 if (i.tm.opcode_modifier & Size16)
1897 i.suffix = WORD_MNEM_SUFFIX;
1898 else if (i.tm.opcode_modifier & Size64)
1899 i.suffix = QWORD_MNEM_SUFFIX;
1900 else
1901 i.suffix = LONG_MNEM_SUFFIX;
1902 }
1903 else if (i.reg_operands)
1904 {
1905 /* If there's no instruction mnemonic suffix we try to invent one
1906 based on register operands. */
1907 if (!i.suffix)
1908 {
1909 /* We take i.suffix from the last register operand specified,
1910 Destination register type is more significant than source
1911 register type. */
1912 int op;
1913 for (op = i.operands; --op >= 0;)
1914 if ((i.types[op] & Reg)
1915 && !(i.tm.operand_types[op] & InOutPortReg))
1916 {
1917 i.suffix = ((i.types[op] & Reg8) ? BYTE_MNEM_SUFFIX :
1918 (i.types[op] & Reg16) ? WORD_MNEM_SUFFIX :
1919 (i.types[op] & Reg64) ? QWORD_MNEM_SUFFIX :
1920 LONG_MNEM_SUFFIX);
1921 break;
1922 }
1923 }
1924 else if (i.suffix == BYTE_MNEM_SUFFIX)
1925 {
1926 int op;
1927 for (op = i.operands; --op >= 0;)
1928 {
1929 /* If this is an eight bit register, it's OK. If it's
1930 the 16 or 32 bit version of an eight bit register,
1931 we will just use the low portion, and that's OK too. */
1932 if (i.types[op] & Reg8)
1933 continue;
1934
1935 /* movzx and movsx should not generate this warning. */
1936 if (intel_syntax
1937 && (i.tm.base_opcode == 0xfb7
1938 || i.tm.base_opcode == 0xfb6
1939 || i.tm.base_opcode == 0x63
1940 || i.tm.base_opcode == 0xfbe
1941 || i.tm.base_opcode == 0xfbf))
1942 continue;
1943
1944 if ((i.types[op] & WordReg) && i.op[op].regs->reg_num < 4
1945 #if 0
1946 /* Check that the template allows eight bit regs
1947 This kills insns such as `orb $1,%edx', which
1948 maybe should be allowed. */
1949 && (i.tm.operand_types[op] & (Reg8|InOutPortReg))
1950 #endif
1951 )
1952 {
1953 /* Prohibit these changes in the 64bit mode, since
1954 the lowering is more complicated. */
1955 if (flag_code == CODE_64BIT
1956 && (i.tm.operand_types[op] & InOutPortReg) == 0)
1957 as_bad (_("Incorrect register `%%%s' used with`%c' suffix"),
1958 i.op[op].regs->reg_name,
1959 i.suffix);
1960 #if REGISTER_WARNINGS
1961 if (!quiet_warnings
1962 && (i.tm.operand_types[op] & InOutPortReg) == 0)
1963 as_warn (_("using `%%%s' instead of `%%%s' due to `%c' suffix"),
1964 (i.op[op].regs - (i.types[op] & Reg16 ? 8 : 16))->reg_name,
1965 i.op[op].regs->reg_name,
1966 i.suffix);
1967 #endif
1968 continue;
1969 }
1970 /* Any other register is bad. */
1971 if (i.types[op] & (Reg | RegMMX | RegXMM
1972 | SReg2 | SReg3
1973 | Control | Debug | Test
1974 | FloatReg | FloatAcc))
1975 {
1976 as_bad (_("`%%%s' not allowed with `%s%c'"),
1977 i.op[op].regs->reg_name,
1978 i.tm.name,
1979 i.suffix);
1980 return;
1981 }
1982 }
1983 }
1984 else if (i.suffix == LONG_MNEM_SUFFIX)
1985 {
1986 int op;
1987
1988 for (op = i.operands; --op >= 0;)
1989 /* Reject eight bit registers, except where the template
1990 requires them. (eg. movzb) */
1991 if ((i.types[op] & Reg8) != 0
1992 && (i.tm.operand_types[op] & (Reg16 | Reg32 | Acc)) != 0)
1993 {
1994 as_bad (_("`%%%s' not allowed with `%s%c'"),
1995 i.op[op].regs->reg_name,
1996 i.tm.name,
1997 i.suffix);
1998 return;
1999 }
2000 /* Warn if the e prefix on a general reg is missing. */
2001 else if ((!quiet_warnings || flag_code == CODE_64BIT)
2002 && (i.types[op] & Reg16) != 0
2003 && (i.tm.operand_types[op] & (Reg32|Acc)) != 0)
2004 {
2005 /* Prohibit these changes in the 64bit mode, since
2006 the lowering is more complicated. */
2007 if (flag_code == CODE_64BIT)
2008 as_bad (_("Incorrect register `%%%s' used with`%c' suffix"),
2009 i.op[op].regs->reg_name,
2010 i.suffix);
2011 #if REGISTER_WARNINGS
2012 else
2013 as_warn (_("using `%%%s' instead of `%%%s' due to `%c' suffix"),
2014 (i.op[op].regs + 8)->reg_name,
2015 i.op[op].regs->reg_name,
2016 i.suffix);
2017 #endif
2018 }
2019 /* Warn if the r prefix on a general reg is missing. */
2020 else if ((i.types[op] & Reg64) != 0
2021 && (i.tm.operand_types[op] & (Reg32|Acc)) != 0)
2022 {
2023 as_bad (_("Incorrect register `%%%s' used with`%c' suffix"),
2024 i.op[op].regs->reg_name,
2025 i.suffix);
2026 }
2027 }
2028 else if (i.suffix == QWORD_MNEM_SUFFIX)
2029 {
2030 int op;
2031
2032 for (op = i.operands; --op >= 0; )
2033 /* Reject eight bit registers, except where the template
2034 requires them. (eg. movzb) */
2035 if ((i.types[op] & Reg8) != 0
2036 && (i.tm.operand_types[op] & (Reg16|Reg32|Acc)) != 0)
2037 {
2038 as_bad (_("`%%%s' not allowed with `%s%c'"),
2039 i.op[op].regs->reg_name,
2040 i.tm.name,
2041 i.suffix);
2042 return;
2043 }
2044 /* Warn if the e prefix on a general reg is missing. */
2045 else if (((i.types[op] & Reg16) != 0
2046 || (i.types[op] & Reg32) != 0)
2047 && (i.tm.operand_types[op] & (Reg32|Acc)) != 0)
2048 {
2049 /* Prohibit these changes in the 64bit mode, since
2050 the lowering is more complicated. */
2051 as_bad (_("Incorrect register `%%%s' used with`%c' suffix"),
2052 i.op[op].regs->reg_name,
2053 i.suffix);
2054 }
2055 }
2056 else if (i.suffix == WORD_MNEM_SUFFIX)
2057 {
2058 int op;
2059 for (op = i.operands; --op >= 0;)
2060 /* Reject eight bit registers, except where the template
2061 requires them. (eg. movzb) */
2062 if ((i.types[op] & Reg8) != 0
2063 && (i.tm.operand_types[op] & (Reg16|Reg32|Acc)) != 0)
2064 {
2065 as_bad (_("`%%%s' not allowed with `%s%c'"),
2066 i.op[op].regs->reg_name,
2067 i.tm.name,
2068 i.suffix);
2069 return;
2070 }
2071 /* Warn if the e prefix on a general reg is present. */
2072 else if ((!quiet_warnings || flag_code == CODE_64BIT)
2073 && (i.types[op] & Reg32) != 0
2074 && (i.tm.operand_types[op] & (Reg16|Acc)) != 0)
2075 {
2076 /* Prohibit these changes in the 64bit mode, since
2077 the lowering is more complicated. */
2078 if (flag_code == CODE_64BIT)
2079 as_bad (_("Incorrect register `%%%s' used with`%c' suffix"),
2080 i.op[op].regs->reg_name,
2081 i.suffix);
2082 else
2083 #if REGISTER_WARNINGS
2084 as_warn (_("using `%%%s' instead of `%%%s' due to `%c' suffix"),
2085 (i.op[op].regs - 8)->reg_name,
2086 i.op[op].regs->reg_name,
2087 i.suffix);
2088 #endif
2089 }
2090 }
2091 else if (intel_syntax && (i.tm.opcode_modifier & IgnoreSize))
2092 /* Do nothing if the instruction is going to ignore the prefix. */
2093 ;
2094 else
2095 abort ();
2096 }
2097 else if ((i.tm.opcode_modifier & DefaultSize) && !i.suffix)
2098 {
2099 i.suffix = stackop_size;
2100 }
2101 /* Make still unresolved immediate matches conform to size of immediate
2102 given in i.suffix. Note: overlap2 cannot be an immediate! */
2103 if ((overlap0 & (Imm8 | Imm8S | Imm16 | Imm32 | Imm32S))
2104 && overlap0 != Imm8 && overlap0 != Imm8S
2105 && overlap0 != Imm16 && overlap0 != Imm32S
2106 && overlap0 != Imm32 && overlap0 != Imm64)
2107 {
2108 if (i.suffix)
2109 {
2110 overlap0 &= (i.suffix == BYTE_MNEM_SUFFIX ? (Imm8 | Imm8S) :
2111 (i.suffix == WORD_MNEM_SUFFIX ? Imm16 :
2112 (i.suffix == QWORD_MNEM_SUFFIX ? Imm64 | Imm32S : Imm32)));
2113 }
2114 else if (overlap0 == (Imm16 | Imm32S | Imm32)
2115 || overlap0 == (Imm16 | Imm32)
2116 || overlap0 == (Imm16 | Imm32S))
2117 {
2118 overlap0 =
2119 ((flag_code == CODE_16BIT) ^ (i.prefix[DATA_PREFIX] != 0)) ? Imm16 : Imm32S;
2120 }
2121 if (overlap0 != Imm8 && overlap0 != Imm8S
2122 && overlap0 != Imm16 && overlap0 != Imm32S
2123 && overlap0 != Imm32 && overlap0 != Imm64)
2124 {
2125 as_bad (_("no instruction mnemonic suffix given; can't determine immediate size"));
2126 return;
2127 }
2128 }
2129 if ((overlap1 & (Imm8 | Imm8S | Imm16 | Imm32S | Imm32))
2130 && overlap1 != Imm8 && overlap1 != Imm8S
2131 && overlap1 != Imm16 && overlap1 != Imm32S
2132 && overlap1 != Imm32 && overlap1 != Imm64)
2133 {
2134 if (i.suffix)
2135 {
2136 overlap1 &= (i.suffix == BYTE_MNEM_SUFFIX ? (Imm8 | Imm8S) :
2137 (i.suffix == WORD_MNEM_SUFFIX ? Imm16 :
2138 (i.suffix == QWORD_MNEM_SUFFIX ? Imm64 | Imm32S : Imm32)));
2139 }
2140 else if (overlap1 == (Imm16 | Imm32 | Imm32S)
2141 || overlap1 == (Imm16 | Imm32)
2142 || overlap1 == (Imm16 | Imm32S))
2143 {
2144 overlap1 =
2145 ((flag_code == CODE_16BIT) ^ (i.prefix[DATA_PREFIX] != 0)) ? Imm16 : Imm32S;
2146 }
2147 if (overlap1 != Imm8 && overlap1 != Imm8S
2148 && overlap1 != Imm16 && overlap1 != Imm32S
2149 && overlap1 != Imm32 && overlap1 != Imm64)
2150 {
2151 as_bad (_("no instruction mnemonic suffix given; can't determine immediate size %x %c"),overlap1, i.suffix);
2152 return;
2153 }
2154 }
2155 assert ((overlap2 & Imm) == 0);
2156
2157 i.types[0] = overlap0;
2158 if (overlap0 & ImplicitRegister)
2159 i.reg_operands--;
2160 if (overlap0 & Imm1)
2161 i.imm_operands = 0; /* kludge for shift insns. */
2162
2163 i.types[1] = overlap1;
2164 if (overlap1 & ImplicitRegister)
2165 i.reg_operands--;
2166
2167 i.types[2] = overlap2;
2168 if (overlap2 & ImplicitRegister)
2169 i.reg_operands--;
2170
2171 /* Finalize opcode. First, we change the opcode based on the operand
2172 size given by i.suffix: We need not change things for byte insns. */
2173
2174 if (!i.suffix && (i.tm.opcode_modifier & W))
2175 {
2176 as_bad (_("no instruction mnemonic suffix given and no register operands; can't size instruction"));
2177 return;
2178 }
2179
2180 /* For movzx and movsx, need to check the register type. */
2181 if (intel_syntax
2182 && (i.tm.base_opcode == 0xfb6 || i.tm.base_opcode == 0xfbe))
2183 if (i.suffix && i.suffix == BYTE_MNEM_SUFFIX)
2184 {
2185 unsigned int prefix = DATA_PREFIX_OPCODE;
2186
2187 if ((i.op[1].regs->reg_type & Reg16) != 0)
2188 if (!add_prefix (prefix))
2189 return;
2190 }
2191
2192 if (i.suffix && i.suffix != BYTE_MNEM_SUFFIX)
2193 {
2194 /* It's not a byte, select word/dword operation. */
2195 if (i.tm.opcode_modifier & W)
2196 {
2197 if (i.tm.opcode_modifier & ShortForm)
2198 i.tm.base_opcode |= 8;
2199 else
2200 i.tm.base_opcode |= 1;
2201 }
2202 /* Now select between word & dword operations via the operand
2203 size prefix, except for instructions that will ignore this
2204 prefix anyway. */
2205 if (i.suffix != QWORD_MNEM_SUFFIX
2206 && (i.suffix == LONG_MNEM_SUFFIX) == (flag_code == CODE_16BIT)
2207 && !(i.tm.opcode_modifier & IgnoreSize))
2208 {
2209 unsigned int prefix = DATA_PREFIX_OPCODE;
2210 if (i.tm.opcode_modifier & JumpByte) /* jcxz, loop */
2211 prefix = ADDR_PREFIX_OPCODE;
2212
2213 if (! add_prefix (prefix))
2214 return;
2215 }
2216
2217 /* Set mode64 for an operand. */
2218 if (i.suffix == QWORD_MNEM_SUFFIX
2219 && !(i.tm.opcode_modifier & NoRex64))
2220 {
2221 i.rex.mode64 = 1;
2222 if (flag_code < CODE_64BIT)
2223 {
2224 as_bad (_("64bit operations available only in 64bit modes."));
2225 return;
2226 }
2227 }
2228
2229 /* Size floating point instruction. */
2230 if (i.suffix == LONG_MNEM_SUFFIX)
2231 {
2232 if (i.tm.opcode_modifier & FloatMF)
2233 i.tm.base_opcode ^= 4;
2234 }
2235 }
2236
2237 if (i.tm.opcode_modifier & ImmExt)
2238 {
2239 /* These AMD 3DNow! and Intel Katmai New Instructions have an
2240 opcode suffix which is coded in the same place as an 8-bit
2241 immediate field would be. Here we fake an 8-bit immediate
2242 operand from the opcode suffix stored in tm.extension_opcode. */
2243
2244 expressionS *exp;
2245
2246 assert (i.imm_operands == 0 && i.operands <= 2 && 2 < MAX_OPERANDS);
2247
2248 exp = &im_expressions[i.imm_operands++];
2249 i.op[i.operands].imms = exp;
2250 i.types[i.operands++] = Imm8;
2251 exp->X_op = O_constant;
2252 exp->X_add_number = i.tm.extension_opcode;
2253 i.tm.extension_opcode = None;
2254 }
2255
2256 /* For insns with operands there are more diddles to do to the opcode. */
2257 if (i.operands)
2258 {
2259 /* Default segment register this instruction will use
2260 for memory accesses. 0 means unknown.
2261 This is only for optimizing out unnecessary segment overrides. */
2262 const seg_entry *default_seg = 0;
2263
2264 /* The imul $imm, %reg instruction is converted into
2265 imul $imm, %reg, %reg, and the clr %reg instruction
2266 is converted into xor %reg, %reg. */
2267 if (i.tm.opcode_modifier & regKludge)
2268 {
2269 unsigned int first_reg_op = (i.types[0] & Reg) ? 0 : 1;
2270 /* Pretend we saw the extra register operand. */
2271 assert (i.op[first_reg_op + 1].regs == 0);
2272 i.op[first_reg_op + 1].regs = i.op[first_reg_op].regs;
2273 i.types[first_reg_op + 1] = i.types[first_reg_op];
2274 i.reg_operands = 2;
2275 }
2276
2277 if (i.tm.opcode_modifier & ShortForm)
2278 {
2279 /* The register or float register operand is in operand 0 or 1. */
2280 unsigned int op = (i.types[0] & (Reg | FloatReg)) ? 0 : 1;
2281 /* Register goes in low 3 bits of opcode. */
2282 i.tm.base_opcode |= i.op[op].regs->reg_num;
2283 if (i.op[op].regs->reg_flags & RegRex)
2284 i.rex.extZ = 1;
2285 if (!quiet_warnings && (i.tm.opcode_modifier & Ugh) != 0)
2286 {
2287 /* Warn about some common errors, but press on regardless.
2288 The first case can be generated by gcc (<= 2.8.1). */
2289 if (i.operands == 2)
2290 {
2291 /* Reversed arguments on faddp, fsubp, etc. */
2292 as_warn (_("translating to `%s %%%s,%%%s'"), i.tm.name,
2293 i.op[1].regs->reg_name,
2294 i.op[0].regs->reg_name);
2295 }
2296 else
2297 {
2298 /* Extraneous `l' suffix on fp insn. */
2299 as_warn (_("translating to `%s %%%s'"), i.tm.name,
2300 i.op[0].regs->reg_name);
2301 }
2302 }
2303 }
2304 else if (i.tm.opcode_modifier & Modrm)
2305 {
2306 /* The opcode is completed (modulo i.tm.extension_opcode which
2307 must be put into the modrm byte).
2308 Now, we make the modrm & index base bytes based on all the
2309 info we've collected. */
2310
2311 /* i.reg_operands MUST be the number of real register operands;
2312 implicit registers do not count. */
2313 if (i.reg_operands == 2)
2314 {
2315 unsigned int source, dest;
2316 source = ((i.types[0]
2317 & (Reg | RegMMX | RegXMM
2318 | SReg2 | SReg3
2319 | Control | Debug | Test))
2320 ? 0 : 1);
2321 dest = source + 1;
2322
2323 i.rm.mode = 3;
2324 /* One of the register operands will be encoded in the
2325 i.tm.reg field, the other in the combined i.tm.mode
2326 and i.tm.regmem fields. If no form of this
2327 instruction supports a memory destination operand,
2328 then we assume the source operand may sometimes be
2329 a memory operand and so we need to store the
2330 destination in the i.rm.reg field. */
2331 if ((i.tm.operand_types[dest] & AnyMem) == 0)
2332 {
2333 i.rm.reg = i.op[dest].regs->reg_num;
2334 i.rm.regmem = i.op[source].regs->reg_num;
2335 if (i.op[dest].regs->reg_flags & RegRex)
2336 i.rex.extX = 1;
2337 if (i.op[source].regs->reg_flags & RegRex)
2338 i.rex.extZ = 1;
2339 }
2340 else
2341 {
2342 i.rm.reg = i.op[source].regs->reg_num;
2343 i.rm.regmem = i.op[dest].regs->reg_num;
2344 if (i.op[dest].regs->reg_flags & RegRex)
2345 i.rex.extZ = 1;
2346 if (i.op[source].regs->reg_flags & RegRex)
2347 i.rex.extX = 1;
2348 }
2349 }
2350 else
2351 { /* If it's not 2 reg operands... */
2352 if (i.mem_operands)
2353 {
2354 unsigned int fake_zero_displacement = 0;
2355 unsigned int op = ((i.types[0] & AnyMem)
2356 ? 0
2357 : (i.types[1] & AnyMem) ? 1 : 2);
2358
2359 default_seg = &ds;
2360
2361 if (! i.base_reg)
2362 {
2363 i.rm.mode = 0;
2364 if (! i.disp_operands)
2365 fake_zero_displacement = 1;
2366 if (! i.index_reg)
2367 {
2368 /* Operand is just <disp> */
2369 if ((flag_code == CODE_16BIT) ^ (i.prefix[ADDR_PREFIX] != 0))
2370 {
2371 i.rm.regmem = NO_BASE_REGISTER_16;
2372 i.types[op] &= ~Disp;
2373 i.types[op] |= Disp16;
2374 }
2375 else if (flag_code != CODE_64BIT)
2376 {
2377 i.rm.regmem = NO_BASE_REGISTER;
2378 i.types[op] &= ~Disp;
2379 i.types[op] |= Disp32;
2380 }
2381 else
2382 {
2383 /* 64bit mode overwrites the 32bit
2384 absolute addressing by RIP relative
2385 addressing and absolute addressing
2386 is encoded by one of the redundant
2387 SIB forms. */
2388
2389 i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
2390 i.sib.base = NO_BASE_REGISTER;
2391 i.sib.index = NO_INDEX_REGISTER;
2392 i.types[op] &= ~Disp;
2393 i.types[op] |= Disp32S;
2394 }
2395 }
2396 else /* ! i.base_reg && i.index_reg */
2397 {
2398 i.sib.index = i.index_reg->reg_num;
2399 i.sib.base = NO_BASE_REGISTER;
2400 i.sib.scale = i.log2_scale_factor;
2401 i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
2402 i.types[op] &= ~Disp;
2403 if (flag_code != CODE_64BIT)
2404 i.types[op] |= Disp32; /* Must be 32 bit */
2405 else
2406 i.types[op] |= Disp32S;
2407 if (i.index_reg->reg_flags & RegRex)
2408 i.rex.extY = 1;
2409 }
2410 }
2411 /* RIP addressing for 64bit mode. */
2412 else if (i.base_reg->reg_type == BaseIndex)
2413 {
2414 i.rm.regmem = NO_BASE_REGISTER;
2415 i.types[op] &= ~Disp;
2416 i.types[op] |= Disp32S;
2417 i.flags[op] = Operand_PCrel;
2418 }
2419 else if (i.base_reg->reg_type & Reg16)
2420 {
2421 switch (i.base_reg->reg_num)
2422 {
2423 case 3: /* (%bx) */
2424 if (! i.index_reg)
2425 i.rm.regmem = 7;
2426 else /* (%bx,%si) -> 0, or (%bx,%di) -> 1 */
2427 i.rm.regmem = i.index_reg->reg_num - 6;
2428 break;
2429 case 5: /* (%bp) */
2430 default_seg = &ss;
2431 if (! i.index_reg)
2432 {
2433 i.rm.regmem = 6;
2434 if ((i.types[op] & Disp) == 0)
2435 {
2436 /* fake (%bp) into 0(%bp) */
2437 i.types[op] |= Disp8;
2438 fake_zero_displacement = 1;
2439 }
2440 }
2441 else /* (%bp,%si) -> 2, or (%bp,%di) -> 3 */
2442 i.rm.regmem = i.index_reg->reg_num - 6 + 2;
2443 break;
2444 default: /* (%si) -> 4 or (%di) -> 5 */
2445 i.rm.regmem = i.base_reg->reg_num - 6 + 4;
2446 }
2447 i.rm.mode = mode_from_disp_size (i.types[op]);
2448 }
2449 else /* i.base_reg and 32/64 bit mode */
2450 {
2451 if (flag_code == CODE_64BIT
2452 && (i.types[op] & Disp))
2453 {
2454 if (i.types[op] & Disp8)
2455 i.types[op] = Disp8 | Disp32S;
2456 else
2457 i.types[op] = Disp32S;
2458 }
2459 i.rm.regmem = i.base_reg->reg_num;
2460 if (i.base_reg->reg_flags & RegRex)
2461 i.rex.extZ = 1;
2462 i.sib.base = i.base_reg->reg_num;
2463 /* x86-64 ignores REX prefix bit here to avoid
2464 decoder complications. */
2465 if ((i.base_reg->reg_num & 7) == EBP_REG_NUM)
2466 {
2467 default_seg = &ss;
2468 if (i.disp_operands == 0)
2469 {
2470 fake_zero_displacement = 1;
2471 i.types[op] |= Disp8;
2472 }
2473 }
2474 else if (i.base_reg->reg_num == ESP_REG_NUM)
2475 {
2476 default_seg = &ss;
2477 }
2478 i.sib.scale = i.log2_scale_factor;
2479 if (! i.index_reg)
2480 {
2481 /* <disp>(%esp) becomes two byte modrm
2482 with no index register. We've already
2483 stored the code for esp in i.rm.regmem
2484 ie. ESCAPE_TO_TWO_BYTE_ADDRESSING. Any
2485 base register besides %esp will not use
2486 the extra modrm byte. */
2487 i.sib.index = NO_INDEX_REGISTER;
2488 #if ! SCALE1_WHEN_NO_INDEX
2489 /* Another case where we force the second
2490 modrm byte. */
2491 if (i.log2_scale_factor)
2492 i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
2493 #endif
2494 }
2495 else
2496 {
2497 i.sib.index = i.index_reg->reg_num;
2498 i.rm.regmem = ESCAPE_TO_TWO_BYTE_ADDRESSING;
2499 if (i.index_reg->reg_flags & RegRex)
2500 i.rex.extY = 1;
2501 }
2502 i.rm.mode = mode_from_disp_size (i.types[op]);
2503 }
2504
2505 if (fake_zero_displacement)
2506 {
2507 /* Fakes a zero displacement assuming that i.types[op]
2508 holds the correct displacement size. */
2509 expressionS *exp;
2510
2511 assert (i.op[op].disps == 0);
2512 exp = &disp_expressions[i.disp_operands++];
2513 i.op[op].disps = exp;
2514 exp->X_op = O_constant;
2515 exp->X_add_number = 0;
2516 exp->X_add_symbol = (symbolS *) 0;
2517 exp->X_op_symbol = (symbolS *) 0;
2518 }
2519 }
2520
2521 /* Fill in i.rm.reg or i.rm.regmem field with register
2522 operand (if any) based on i.tm.extension_opcode.
2523 Again, we must be careful to make sure that
2524 segment/control/debug/test/MMX registers are coded
2525 into the i.rm.reg field. */
2526 if (i.reg_operands)
2527 {
2528 unsigned int op =
2529 ((i.types[0]
2530 & (Reg | RegMMX | RegXMM
2531 | SReg2 | SReg3
2532 | Control | Debug | Test))
2533 ? 0
2534 : ((i.types[1]
2535 & (Reg | RegMMX | RegXMM
2536 | SReg2 | SReg3
2537 | Control | Debug | Test))
2538 ? 1
2539 : 2));
2540 /* If there is an extension opcode to put here, the
2541 register number must be put into the regmem field. */
2542 if (i.tm.extension_opcode != None)
2543 {
2544 i.rm.regmem = i.op[op].regs->reg_num;
2545 if (i.op[op].regs->reg_flags & RegRex)
2546 i.rex.extZ = 1;
2547 }
2548 else
2549 {
2550 i.rm.reg = i.op[op].regs->reg_num;
2551 if (i.op[op].regs->reg_flags & RegRex)
2552 i.rex.extX = 1;
2553 }
2554
2555 /* Now, if no memory operand has set i.rm.mode = 0, 1, 2
2556 we must set it to 3 to indicate this is a register
2557 operand in the regmem field. */
2558 if (!i.mem_operands)
2559 i.rm.mode = 3;
2560 }
2561
2562 /* Fill in i.rm.reg field with extension opcode (if any). */
2563 if (i.tm.extension_opcode != None)
2564 i.rm.reg = i.tm.extension_opcode;
2565 }
2566 }
2567 else if (i.tm.opcode_modifier & (Seg2ShortForm | Seg3ShortForm))
2568 {
2569 if (i.tm.base_opcode == POP_SEG_SHORT
2570 && i.op[0].regs->reg_num == 1)
2571 {
2572 as_bad (_("you can't `pop %%cs'"));
2573 return;
2574 }
2575 i.tm.base_opcode |= (i.op[0].regs->reg_num << 3);
2576 if (i.op[0].regs->reg_flags & RegRex)
2577 i.rex.extZ = 1;
2578 }
2579 else if ((i.tm.base_opcode & ~(D|W)) == MOV_AX_DISP32)
2580 {
2581 default_seg = &ds;
2582 }
2583 else if ((i.tm.opcode_modifier & IsString) != 0)
2584 {
2585 /* For the string instructions that allow a segment override
2586 on one of their operands, the default segment is ds. */
2587 default_seg = &ds;
2588 }
2589
2590 /* If a segment was explicitly specified,
2591 and the specified segment is not the default,
2592 use an opcode prefix to select it.
2593 If we never figured out what the default segment is,
2594 then default_seg will be zero at this point,
2595 and the specified segment prefix will always be used. */
2596 if ((i.seg[0]) && (i.seg[0] != default_seg))
2597 {
2598 if (! add_prefix (i.seg[0]->seg_prefix))
2599 return;
2600 }
2601 }
2602 else if (!quiet_warnings && (i.tm.opcode_modifier & Ugh) != 0)
2603 {
2604 /* UnixWare fsub no args is alias for fsubp, fadd -> faddp, etc. */
2605 as_warn (_("translating to `%sp'"), i.tm.name);
2606 }
2607 }
2608
2609 /* Handle conversion of 'int $3' --> special int3 insn. */
2610 if (i.tm.base_opcode == INT_OPCODE && i.op[0].imms->X_add_number == 3)
2611 {
2612 i.tm.base_opcode = INT3_OPCODE;
2613 i.imm_operands = 0;
2614 }
2615
2616 if ((i.tm.opcode_modifier & (Jump | JumpByte | JumpDword))
2617 && i.op[0].disps->X_op == O_constant)
2618 {
2619 /* Convert "jmp constant" (and "call constant") to a jump (call) to
2620 the absolute address given by the constant. Since ix86 jumps and
2621 calls are pc relative, we need to generate a reloc. */
2622 i.op[0].disps->X_add_symbol = &abs_symbol;
2623 i.op[0].disps->X_op = O_symbol;
2624 }
2625
2626 if (i.tm.opcode_modifier & Rex64)
2627 i.rex.mode64 = 1;
2628
2629 /* For 8bit registers we would need an empty rex prefix.
2630 Also in the case instruction is already having prefix,
2631 we need to convert old registers to new ones. */
2632
2633 if (((i.types[0] & Reg8) && (i.op[0].regs->reg_flags & RegRex64))
2634 || ((i.types[1] & Reg8) && (i.op[1].regs->reg_flags & RegRex64))
2635 || ((i.rex.mode64 || i.rex.extX || i.rex.extY || i.rex.extZ || i.rex.empty)
2636 && ((i.types[0] & Reg8) || (i.types[1] & Reg8))))
2637 {
2638 int x;
2639 i.rex.empty = 1;
2640 for (x = 0; x < 2; x++)
2641 {
2642 /* Look for 8bit operand that does use old registers. */
2643 if (i.types[x] & Reg8
2644 && !(i.op[x].regs->reg_flags & RegRex64))
2645 {
2646 /* In case it is "hi" register, give up. */
2647 if (i.op[x].regs->reg_num > 3)
2648 as_bad (_("Can't encode registers '%%%s' in the instruction requiring REX prefix.\n"),
2649 i.op[x].regs->reg_name);
2650
2651 /* Otherwise it is equivalent to the extended register.
2652 Since the encoding don't change this is merely cosmetical
2653 cleanup for debug output. */
2654
2655 i.op[x].regs = i.op[x].regs + 8;
2656 }
2657 }
2658 }
2659
2660 if (i.rex.mode64 || i.rex.extX || i.rex.extY || i.rex.extZ || i.rex.empty)
2661 add_prefix (0x40
2662 | (i.rex.mode64 ? 8 : 0)
2663 | (i.rex.extX ? 4 : 0)
2664 | (i.rex.extY ? 2 : 0)
2665 | (i.rex.extZ ? 1 : 0));
2666
2667 /* We are ready to output the insn. */
2668 {
2669 register char *p;
2670
2671 /* Output jumps. */
2672 if (i.tm.opcode_modifier & Jump)
2673 {
2674 int size;
2675 int code16;
2676 int prefix;
2677
2678 code16 = 0;
2679 if (flag_code == CODE_16BIT)
2680 code16 = CODE16;
2681
2682 prefix = 0;
2683 if (i.prefix[DATA_PREFIX])
2684 {
2685 prefix = 1;
2686 i.prefixes -= 1;
2687 code16 ^= CODE16;
2688 }
2689 if (i.prefix[REX_PREFIX])
2690 {
2691 prefix++;
2692 i.prefixes--;
2693 }
2694
2695 size = 4;
2696 if (code16)
2697 size = 2;
2698
2699 if (i.prefixes != 0 && !intel_syntax)
2700 as_warn (_("skipping prefixes on this instruction"));
2701
2702 /* It's always a symbol; End frag & setup for relax.
2703 Make sure there is enough room in this frag for the largest
2704 instruction we may generate in md_convert_frag. This is 2
2705 bytes for the opcode and room for the prefix and largest
2706 displacement. */
2707 frag_grow (prefix + 2 + size);
2708 insn_size += prefix + 1;
2709 /* Prefix and 1 opcode byte go in fr_fix. */
2710 p = frag_more (prefix + 1);
2711 if (i.prefix[DATA_PREFIX])
2712 *p++ = DATA_PREFIX_OPCODE;
2713 if (i.prefix[REX_PREFIX])
2714 *p++ = i.prefix[REX_PREFIX];
2715 *p = i.tm.base_opcode;
2716 /* 1 possible extra opcode + displacement go in var part.
2717 Pass reloc in fr_var. */
2718 frag_var (rs_machine_dependent,
2719 1 + size,
2720 i.disp_reloc[0],
2721 ((unsigned char) *p == JUMP_PC_RELATIVE
2722 ? ENCODE_RELAX_STATE (UNCOND_JUMP, SMALL) | code16
2723 : ENCODE_RELAX_STATE (COND_JUMP, SMALL) | code16),
2724 i.op[0].disps->X_add_symbol,
2725 i.op[0].disps->X_add_number,
2726 p);
2727 }
2728 else if (i.tm.opcode_modifier & (JumpByte | JumpDword))
2729 {
2730 int size;
2731
2732 if (i.tm.opcode_modifier & JumpByte)
2733 {
2734 /* This is a loop or jecxz type instruction. */
2735 size = 1;
2736 if (i.prefix[ADDR_PREFIX])
2737 {
2738 insn_size += 1;
2739 FRAG_APPEND_1_CHAR (ADDR_PREFIX_OPCODE);
2740 i.prefixes -= 1;
2741 }
2742 }
2743 else
2744 {
2745 int code16;
2746
2747 code16 = 0;
2748 if (flag_code == CODE_16BIT)
2749 code16 = CODE16;
2750
2751 if (i.prefix[DATA_PREFIX])
2752 {
2753 insn_size += 1;
2754 FRAG_APPEND_1_CHAR (DATA_PREFIX_OPCODE);
2755 i.prefixes -= 1;
2756 code16 ^= CODE16;
2757 }
2758
2759 size = 4;
2760 if (code16)
2761 size = 2;
2762 }
2763
2764 if (i.prefix[REX_PREFIX])
2765 {
2766 FRAG_APPEND_1_CHAR (i.prefix[REX_PREFIX]);
2767 insn_size++;
2768 i.prefixes -= 1;
2769 }
2770
2771 if (i.prefixes != 0 && !intel_syntax)
2772 as_warn (_("skipping prefixes on this instruction"));
2773
2774 if (fits_in_unsigned_byte (i.tm.base_opcode))
2775 {
2776 insn_size += 1 + size;
2777 p = frag_more (1 + size);
2778 }
2779 else
2780 {
2781 /* Opcode can be at most two bytes. */
2782 insn_size += 2 + size;
2783 p = frag_more (2 + size);
2784 *p++ = (i.tm.base_opcode >> 8) & 0xff;
2785 }
2786 *p++ = i.tm.base_opcode & 0xff;
2787
2788 fix_new_exp (frag_now, p - frag_now->fr_literal, size,
2789 i.op[0].disps, 1, reloc (size, 1, 1, i.disp_reloc[0]));
2790 }
2791 else if (i.tm.opcode_modifier & JumpInterSegment)
2792 {
2793 int size;
2794 int prefix;
2795 int code16;
2796
2797 code16 = 0;
2798 if (flag_code == CODE_16BIT)
2799 code16 = CODE16;
2800
2801 prefix = 0;
2802 if (i.prefix[DATA_PREFIX])
2803 {
2804 prefix = 1;
2805 i.prefixes -= 1;
2806 code16 ^= CODE16;
2807 }
2808 if (i.prefix[REX_PREFIX])
2809 {
2810 prefix++;
2811 i.prefixes -= 1;
2812 }
2813
2814 size = 4;
2815 if (code16)
2816 size = 2;
2817
2818 if (i.prefixes != 0 && !intel_syntax)
2819 as_warn (_("skipping prefixes on this instruction"));
2820
2821 /* 1 opcode; 2 segment; offset */
2822 insn_size += prefix + 1 + 2 + size;
2823 p = frag_more (prefix + 1 + 2 + size);
2824
2825 if (i.prefix[DATA_PREFIX])
2826 *p++ = DATA_PREFIX_OPCODE;
2827
2828 if (i.prefix[REX_PREFIX])
2829 *p++ = i.prefix[REX_PREFIX];
2830
2831 *p++ = i.tm.base_opcode;
2832 if (i.op[1].imms->X_op == O_constant)
2833 {
2834 offsetT n = i.op[1].imms->X_add_number;
2835
2836 if (size == 2
2837 && !fits_in_unsigned_word (n)
2838 && !fits_in_signed_word (n))
2839 {
2840 as_bad (_("16-bit jump out of range"));
2841 return;
2842 }
2843 md_number_to_chars (p, n, size);
2844 }
2845 else
2846 fix_new_exp (frag_now, p - frag_now->fr_literal, size,
2847 i.op[1].imms, 0, reloc (size, 0, 0, i.disp_reloc[0]));
2848 if (i.op[0].imms->X_op != O_constant)
2849 as_bad (_("can't handle non absolute segment in `%s'"),
2850 i.tm.name);
2851 md_number_to_chars (p + size, (valueT) i.op[0].imms->X_add_number, 2);
2852 }
2853 else
2854 {
2855 /* Output normal instructions here. */
2856 unsigned char *q;
2857
2858 /* All opcodes on i386 have eighter 1 or 2 bytes. We may use third
2859 byte for the SSE instructions to specify prefix they require. */
2860 if (i.tm.base_opcode & 0xff0000)
2861 add_prefix ((i.tm.base_opcode >> 16) & 0xff);
2862
2863 /* The prefix bytes. */
2864 for (q = i.prefix;
2865 q < i.prefix + sizeof (i.prefix) / sizeof (i.prefix[0]);
2866 q++)
2867 {
2868 if (*q)
2869 {
2870 insn_size += 1;
2871 p = frag_more (1);
2872 md_number_to_chars (p, (valueT) *q, 1);
2873 }
2874 }
2875
2876 /* Now the opcode; be careful about word order here! */
2877 if (fits_in_unsigned_byte (i.tm.base_opcode))
2878 {
2879 insn_size += 1;
2880 FRAG_APPEND_1_CHAR (i.tm.base_opcode);
2881 }
2882 else
2883 {
2884 insn_size += 2;
2885 p = frag_more (2);
2886 /* Put out high byte first: can't use md_number_to_chars! */
2887 *p++ = (i.tm.base_opcode >> 8) & 0xff;
2888 *p = i.tm.base_opcode & 0xff;
2889 }
2890
2891 /* Now the modrm byte and sib byte (if present). */
2892 if (i.tm.opcode_modifier & Modrm)
2893 {
2894 insn_size += 1;
2895 p = frag_more (1);
2896 md_number_to_chars (p,
2897 (valueT) (i.rm.regmem << 0
2898 | i.rm.reg << 3
2899 | i.rm.mode << 6),
2900 1);
2901 /* If i.rm.regmem == ESP (4)
2902 && i.rm.mode != (Register mode)
2903 && not 16 bit
2904 ==> need second modrm byte. */
2905 if (i.rm.regmem == ESCAPE_TO_TWO_BYTE_ADDRESSING
2906 && i.rm.mode != 3
2907 && !(i.base_reg && (i.base_reg->reg_type & Reg16) != 0))
2908 {
2909 insn_size += 1;
2910 p = frag_more (1);
2911 md_number_to_chars (p,
2912 (valueT) (i.sib.base << 0
2913 | i.sib.index << 3
2914 | i.sib.scale << 6),
2915 1);
2916 }
2917 }
2918
2919 if (i.disp_operands)
2920 {
2921 register unsigned int n;
2922
2923 for (n = 0; n < i.operands; n++)
2924 {
2925 if (i.types[n] & Disp)
2926 {
2927 if (i.op[n].disps->X_op == O_constant)
2928 {
2929 int size;
2930 offsetT val;
2931
2932 size = 4;
2933 if (i.types[n] & (Disp8 | Disp16 | Disp64))
2934 {
2935 size = 2;
2936 if (i.types[n] & Disp8)
2937 size = 1;
2938 if (i.types[n] & Disp64)
2939 size = 8;
2940 }
2941 val = offset_in_range (i.op[n].disps->X_add_number,
2942 size);
2943 insn_size += size;
2944 p = frag_more (size);
2945 md_number_to_chars (p, val, size);
2946 }
2947 else
2948 {
2949 int size = 4;
2950 int sign = 0;
2951 int pcrel = (i.flags[n] & Operand_PCrel) != 0;
2952
2953 /* The PC relative address is computed relative
2954 to the instruction boundary, so in case immediate
2955 fields follows, we need to adjust the value. */
2956 if (pcrel && i.imm_operands)
2957 {
2958 int imm_size = 4;
2959 register unsigned int n1;
2960
2961 for (n1 = 0; n1 < i.operands; n1++)
2962 if (i.types[n1] & Imm)
2963 {
2964 if (i.types[n1] & (Imm8 | Imm8S | Imm16 | Imm64))
2965 {
2966 imm_size = 2;
2967 if (i.types[n1] & (Imm8 | Imm8S))
2968 imm_size = 1;
2969 if (i.types[n1] & Imm64)
2970 imm_size = 8;
2971 }
2972 break;
2973 }
2974 /* We should find the immediate. */
2975 if (n1 == i.operands)
2976 abort ();
2977 i.op[n].disps->X_add_number -= imm_size;
2978 }
2979
2980 if (i.types[n] & Disp32S)
2981 sign = 1;
2982
2983 if (i.types[n] & (Disp16 | Disp64))
2984 {
2985 size = 2;
2986 if (i.types[n] & Disp64)
2987 size = 8;
2988 }
2989
2990 insn_size += size;
2991 p = frag_more (size);
2992 fix_new_exp (frag_now, p - frag_now->fr_literal, size,
2993 i.op[n].disps, pcrel,
2994 reloc (size, pcrel, sign, i.disp_reloc[n]));
2995 }
2996 }
2997 }
2998 }
2999
3000 /* Output immediate. */
3001 if (i.imm_operands)
3002 {
3003 register unsigned int n;
3004
3005 for (n = 0; n < i.operands; n++)
3006 {
3007 if (i.types[n] & Imm)
3008 {
3009 if (i.op[n].imms->X_op == O_constant)
3010 {
3011 int size;
3012 offsetT val;
3013
3014 size = 4;
3015 if (i.types[n] & (Imm8 | Imm8S | Imm16 | Imm64))
3016 {
3017 size = 2;
3018 if (i.types[n] & (Imm8 | Imm8S))
3019 size = 1;
3020 else if (i.types[n] & Imm64)
3021 size = 8;
3022 }
3023 val = offset_in_range (i.op[n].imms->X_add_number,
3024 size);
3025 insn_size += size;
3026 p = frag_more (size);
3027 md_number_to_chars (p, val, size);
3028 }
3029 else
3030 {
3031 /* Not absolute_section.
3032 Need a 32-bit fixup (don't support 8bit
3033 non-absolute imms). Try to support other
3034 sizes ... */
3035 #ifdef BFD_ASSEMBLER
3036 enum bfd_reloc_code_real reloc_type;
3037 #else
3038 int reloc_type;
3039 #endif
3040 int size = 4;
3041 int sign = 0;
3042
3043 if ((i.types[n] & (Imm32S))
3044 && i.suffix == QWORD_MNEM_SUFFIX)
3045 sign = 1;
3046 if (i.types[n] & (Imm8 | Imm8S | Imm16 | Imm64))
3047 {
3048 size = 2;
3049 if (i.types[n] & (Imm8 | Imm8S))
3050 size = 1;
3051 if (i.types[n] & Imm64)
3052 size = 8;
3053 }
3054
3055 insn_size += size;
3056 p = frag_more (size);
3057 reloc_type = reloc (size, 0, sign, i.disp_reloc[0]);
3058 #ifdef BFD_ASSEMBLER
3059 if (reloc_type == BFD_RELOC_32
3060 && GOT_symbol
3061 && GOT_symbol == i.op[n].imms->X_add_symbol
3062 && (i.op[n].imms->X_op == O_symbol
3063 || (i.op[n].imms->X_op == O_add
3064 && ((symbol_get_value_expression
3065 (i.op[n].imms->X_op_symbol)->X_op)
3066 == O_subtract))))
3067 {
3068 /* We don't support dynamic linking on x86-64 yet. */
3069 if (flag_code == CODE_64BIT)
3070 abort ();
3071 reloc_type = BFD_RELOC_386_GOTPC;
3072 i.op[n].imms->X_add_number += 3;
3073 }
3074 #endif
3075 fix_new_exp (frag_now, p - frag_now->fr_literal, size,
3076 i.op[n].imms, 0, reloc_type);
3077 }
3078 }
3079 }
3080 }
3081 }
3082
3083 dwarf2_emit_insn (insn_size);
3084
3085 #ifdef DEBUG386
3086 if (flag_debug)
3087 {
3088 pi (line, &i);
3089 }
3090 #endif /* DEBUG386 */
3091 }
3092 }
3093 \f
3094 static int i386_immediate PARAMS ((char *));
3095
3096 static int
3097 i386_immediate (imm_start)
3098 char *imm_start;
3099 {
3100 char *save_input_line_pointer;
3101 segT exp_seg = 0;
3102 expressionS *exp;
3103
3104 if (i.imm_operands == MAX_IMMEDIATE_OPERANDS)
3105 {
3106 as_bad (_("only 1 or 2 immediate operands are allowed"));
3107 return 0;
3108 }
3109
3110 exp = &im_expressions[i.imm_operands++];
3111 i.op[this_operand].imms = exp;
3112
3113 if (is_space_char (*imm_start))
3114 ++imm_start;
3115
3116 save_input_line_pointer = input_line_pointer;
3117 input_line_pointer = imm_start;
3118
3119 #ifndef LEX_AT
3120 {
3121 /* We can have operands of the form
3122 <symbol>@GOTOFF+<nnn>
3123 Take the easy way out here and copy everything
3124 into a temporary buffer... */
3125 register char *cp;
3126
3127 cp = strchr (input_line_pointer, '@');
3128 if (cp != NULL)
3129 {
3130 char *tmpbuf;
3131 int len = 0;
3132 int first;
3133
3134 /* GOT relocations are not supported in 16 bit mode. */
3135 if (flag_code == CODE_16BIT)
3136 as_bad (_("GOT relocations not supported in 16 bit mode"));
3137
3138 if (GOT_symbol == NULL)
3139 GOT_symbol = symbol_find_or_make (GLOBAL_OFFSET_TABLE_NAME);
3140
3141 if (strncmp (cp + 1, "PLT", 3) == 0)
3142 {
3143 if (flag_code == CODE_64BIT)
3144 i.disp_reloc[this_operand] = BFD_RELOC_X86_64_PLT32;
3145 else
3146 i.disp_reloc[this_operand] = BFD_RELOC_386_PLT32;
3147 len = 3;
3148 }
3149 else if (strncmp (cp + 1, "GOTOFF", 6) == 0)
3150 {
3151 if (flag_code == CODE_64BIT)
3152 as_bad ("GOTOFF relocations are unsupported in 64bit mode.");
3153 i.disp_reloc[this_operand] = BFD_RELOC_386_GOTOFF;
3154 len = 6;
3155 }
3156 else if (strncmp (cp + 1, "GOTPCREL", 8) == 0)
3157 {
3158 if (flag_code == CODE_64BIT)
3159 i.disp_reloc[this_operand] = BFD_RELOC_X86_64_GOTPCREL;
3160 else
3161 as_bad ("GOTPCREL relocations are supported only in 64bit mode.");
3162 len = 8;
3163 }
3164 else if (strncmp (cp + 1, "GOT", 3) == 0)
3165 {
3166 if (flag_code == CODE_64BIT)
3167 i.disp_reloc[this_operand] = BFD_RELOC_X86_64_GOT32;
3168 else
3169 i.disp_reloc[this_operand] = BFD_RELOC_386_GOT32;
3170 len = 3;
3171 }
3172 else
3173 as_bad (_("bad reloc specifier in expression"));
3174
3175 /* Replace the relocation token with ' ', so that errors like
3176 foo@GOTOFF1 will be detected. */
3177 first = cp - input_line_pointer;
3178 tmpbuf = (char *) alloca (strlen (input_line_pointer));
3179 memcpy (tmpbuf, input_line_pointer, first);
3180 tmpbuf[first] = ' ';
3181 strcpy (tmpbuf + first + 1, cp + 1 + len);
3182 input_line_pointer = tmpbuf;
3183 }
3184 }
3185 #endif
3186
3187 exp_seg = expression (exp);
3188
3189 SKIP_WHITESPACE ();
3190 if (*input_line_pointer)
3191 as_bad (_("ignoring junk `%s' after expression"), input_line_pointer);
3192
3193 input_line_pointer = save_input_line_pointer;
3194
3195 if (exp->X_op == O_absent || exp->X_op == O_big)
3196 {
3197 /* Missing or bad expr becomes absolute 0. */
3198 as_bad (_("missing or invalid immediate expression `%s' taken as 0"),
3199 imm_start);
3200 exp->X_op = O_constant;
3201 exp->X_add_number = 0;
3202 exp->X_add_symbol = (symbolS *) 0;
3203 exp->X_op_symbol = (symbolS *) 0;
3204 }
3205 else if (exp->X_op == O_constant)
3206 {
3207 /* Size it properly later. */
3208 i.types[this_operand] |= Imm64;
3209 /* If BFD64, sign extend val. */
3210 if (!use_rela_relocations)
3211 if ((exp->X_add_number & ~(((addressT) 2 << 31) - 1)) == 0)
3212 exp->X_add_number = (exp->X_add_number ^ ((addressT) 1 << 31)) - ((addressT) 1 << 31);
3213 }
3214 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
3215 else if (1
3216 #ifdef BFD_ASSEMBLER
3217 && OUTPUT_FLAVOR == bfd_target_aout_flavour
3218 #endif
3219 && exp_seg != text_section
3220 && exp_seg != data_section
3221 && exp_seg != bss_section
3222 && exp_seg != undefined_section
3223 #ifdef BFD_ASSEMBLER
3224 && !bfd_is_com_section (exp_seg)
3225 #endif
3226 )
3227 {
3228 #ifdef BFD_ASSEMBLER
3229 as_bad (_("unimplemented segment %s in operand"), exp_seg->name);
3230 #else
3231 as_bad (_("unimplemented segment type %d in operand"), exp_seg);
3232 #endif
3233 return 0;
3234 }
3235 #endif
3236 else
3237 {
3238 /* This is an address. The size of the address will be
3239 determined later, depending on destination register,
3240 suffix, or the default for the section. */
3241 i.types[this_operand] |= Imm8 | Imm16 | Imm32 | Imm32S | Imm64;
3242 }
3243
3244 return 1;
3245 }
3246
3247 static int i386_scale PARAMS ((char *));
3248
3249 static int
3250 i386_scale (scale)
3251 char *scale;
3252 {
3253 if (!isdigit (*scale))
3254 goto bad_scale;
3255
3256 switch (*scale)
3257 {
3258 case '0':
3259 case '1':
3260 i.log2_scale_factor = 0;
3261 break;
3262 case '2':
3263 i.log2_scale_factor = 1;
3264 break;
3265 case '4':
3266 i.log2_scale_factor = 2;
3267 break;
3268 case '8':
3269 i.log2_scale_factor = 3;
3270 break;
3271 default:
3272 bad_scale:
3273 as_bad (_("expecting scale factor of 1, 2, 4, or 8: got `%s'"),
3274 scale);
3275 return 0;
3276 }
3277 if (i.log2_scale_factor != 0 && ! i.index_reg)
3278 {
3279 as_warn (_("scale factor of %d without an index register"),
3280 1 << i.log2_scale_factor);
3281 #if SCALE1_WHEN_NO_INDEX
3282 i.log2_scale_factor = 0;
3283 #endif
3284 }
3285 return 1;
3286 }
3287
3288 static int i386_displacement PARAMS ((char *, char *));
3289
3290 static int
3291 i386_displacement (disp_start, disp_end)
3292 char *disp_start;
3293 char *disp_end;
3294 {
3295 register expressionS *exp;
3296 segT exp_seg = 0;
3297 char *save_input_line_pointer;
3298 int bigdisp = Disp32;
3299
3300 if ((flag_code == CODE_16BIT) ^ (i.prefix[ADDR_PREFIX] != 0))
3301 bigdisp = Disp16;
3302 if (flag_code == CODE_64BIT)
3303 bigdisp = Disp64;
3304 i.types[this_operand] |= bigdisp;
3305
3306 exp = &disp_expressions[i.disp_operands];
3307 i.op[this_operand].disps = exp;
3308 i.disp_operands++;
3309 save_input_line_pointer = input_line_pointer;
3310 input_line_pointer = disp_start;
3311 END_STRING_AND_SAVE (disp_end);
3312
3313 #ifndef GCC_ASM_O_HACK
3314 #define GCC_ASM_O_HACK 0
3315 #endif
3316 #if GCC_ASM_O_HACK
3317 END_STRING_AND_SAVE (disp_end + 1);
3318 if ((i.types[this_operand] & BaseIndex) != 0
3319 && displacement_string_end[-1] == '+')
3320 {
3321 /* This hack is to avoid a warning when using the "o"
3322 constraint within gcc asm statements.
3323 For instance:
3324
3325 #define _set_tssldt_desc(n,addr,limit,type) \
3326 __asm__ __volatile__ ( \
3327 "movw %w2,%0\n\t" \
3328 "movw %w1,2+%0\n\t" \
3329 "rorl $16,%1\n\t" \
3330 "movb %b1,4+%0\n\t" \
3331 "movb %4,5+%0\n\t" \
3332 "movb $0,6+%0\n\t" \
3333 "movb %h1,7+%0\n\t" \
3334 "rorl $16,%1" \
3335 : "=o"(*(n)) : "q" (addr), "ri"(limit), "i"(type))
3336
3337 This works great except that the output assembler ends
3338 up looking a bit weird if it turns out that there is
3339 no offset. You end up producing code that looks like:
3340
3341 #APP
3342 movw $235,(%eax)
3343 movw %dx,2+(%eax)
3344 rorl $16,%edx
3345 movb %dl,4+(%eax)
3346 movb $137,5+(%eax)
3347 movb $0,6+(%eax)
3348 movb %dh,7+(%eax)
3349 rorl $16,%edx
3350 #NO_APP
3351
3352 So here we provide the missing zero. */
3353
3354 *displacement_string_end = '0';
3355 }
3356 #endif
3357 #ifndef LEX_AT
3358 {
3359 /* We can have operands of the form
3360 <symbol>@GOTOFF+<nnn>
3361 Take the easy way out here and copy everything
3362 into a temporary buffer... */
3363 register char *cp;
3364
3365 cp = strchr (input_line_pointer, '@');
3366 if (cp != NULL)
3367 {
3368 char *tmpbuf;
3369 int len = 0;
3370 int first;
3371
3372 /* GOT relocations are not supported in 16 bit mode. */
3373 if (flag_code == CODE_16BIT)
3374 as_bad (_("GOT relocations not supported in 16 bit mode"));
3375
3376 if (GOT_symbol == NULL)
3377 GOT_symbol = symbol_find_or_make (GLOBAL_OFFSET_TABLE_NAME);
3378
3379 if (strncmp (cp + 1, "PLT", 3) == 0)
3380 {
3381 if (flag_code == CODE_64BIT)
3382 i.disp_reloc[this_operand] = BFD_RELOC_X86_64_PLT32;
3383 else
3384 i.disp_reloc[this_operand] = BFD_RELOC_386_PLT32;
3385 len = 3;
3386 }
3387 else if (strncmp (cp + 1, "GOTOFF", 6) == 0)
3388 {
3389 if (flag_code == CODE_64BIT)
3390 as_bad ("GOTOFF relocation is not supported in 64bit mode.");
3391 i.disp_reloc[this_operand] = BFD_RELOC_386_GOTOFF;
3392 len = 6;
3393 }
3394 else if (strncmp (cp + 1, "GOTPCREL", 8) == 0)
3395 {
3396 if (flag_code != CODE_64BIT)
3397 as_bad ("GOTPCREL relocation is supported only in 64bit mode.");
3398 i.disp_reloc[this_operand] = BFD_RELOC_X86_64_GOTPCREL;
3399 len = 8;
3400 }
3401 else if (strncmp (cp + 1, "GOT", 3) == 0)
3402 {
3403 if (flag_code == CODE_64BIT)
3404 i.disp_reloc[this_operand] = BFD_RELOC_X86_64_GOT32;
3405 else
3406 i.disp_reloc[this_operand] = BFD_RELOC_386_GOT32;
3407 len = 3;
3408 }
3409 else
3410 as_bad (_("bad reloc specifier in expression"));
3411
3412 /* Replace the relocation token with ' ', so that errors like
3413 foo@GOTOFF1 will be detected. */
3414 first = cp - input_line_pointer;
3415 tmpbuf = (char *) alloca (strlen (input_line_pointer));
3416 memcpy (tmpbuf, input_line_pointer, first);
3417 tmpbuf[first] = ' ';
3418 strcpy (tmpbuf + first + 1, cp + 1 + len);
3419 input_line_pointer = tmpbuf;
3420 }
3421 }
3422 #endif
3423
3424 exp_seg = expression (exp);
3425
3426 #ifdef BFD_ASSEMBLER
3427 /* We do this to make sure that the section symbol is in
3428 the symbol table. We will ultimately change the relocation
3429 to be relative to the beginning of the section. */
3430 if (i.disp_reloc[this_operand] == BFD_RELOC_386_GOTOFF
3431 || i.disp_reloc[this_operand] == BFD_RELOC_X86_64_GOTPCREL)
3432 {
3433 if (S_IS_LOCAL (exp->X_add_symbol)
3434 && S_GET_SEGMENT (exp->X_add_symbol) != undefined_section)
3435 section_symbol (S_GET_SEGMENT (exp->X_add_symbol));
3436 assert (exp->X_op == O_symbol);
3437 exp->X_op = O_subtract;
3438 exp->X_op_symbol = GOT_symbol;
3439 i.disp_reloc[this_operand] = BFD_RELOC_32;
3440 }
3441 #endif
3442
3443 SKIP_WHITESPACE ();
3444 if (*input_line_pointer)
3445 as_bad (_("ignoring junk `%s' after expression"),
3446 input_line_pointer);
3447 #if GCC_ASM_O_HACK
3448 RESTORE_END_STRING (disp_end + 1);
3449 #endif
3450 RESTORE_END_STRING (disp_end);
3451 input_line_pointer = save_input_line_pointer;
3452
3453 if (exp->X_op == O_absent || exp->X_op == O_big)
3454 {
3455 /* Missing or bad expr becomes absolute 0. */
3456 as_bad (_("missing or invalid displacement expression `%s' taken as 0"),
3457 disp_start);
3458 exp->X_op = O_constant;
3459 exp->X_add_number = 0;
3460 exp->X_add_symbol = (symbolS *) 0;
3461 exp->X_op_symbol = (symbolS *) 0;
3462 }
3463
3464 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
3465 if (exp->X_op != O_constant
3466 #ifdef BFD_ASSEMBLER
3467 && OUTPUT_FLAVOR == bfd_target_aout_flavour
3468 #endif
3469 && exp_seg != text_section
3470 && exp_seg != data_section
3471 && exp_seg != bss_section
3472 && exp_seg != undefined_section)
3473 {
3474 #ifdef BFD_ASSEMBLER
3475 as_bad (_("unimplemented segment %s in operand"), exp_seg->name);
3476 #else
3477 as_bad (_("unimplemented segment type %d in operand"), exp_seg);
3478 #endif
3479 return 0;
3480 }
3481 #endif
3482 else if (flag_code == CODE_64BIT)
3483 i.types[this_operand] |= Disp32S | Disp32;
3484 return 1;
3485 }
3486
3487 static int i386_index_check PARAMS ((const char *));
3488
3489 /* Make sure the memory operand we've been dealt is valid.
3490 Return 1 on success, 0 on a failure. */
3491
3492 static int
3493 i386_index_check (operand_string)
3494 const char *operand_string;
3495 {
3496 int ok;
3497 #if INFER_ADDR_PREFIX
3498 int fudged = 0;
3499
3500 tryprefix:
3501 #endif
3502 ok = 1;
3503 if (flag_code == CODE_64BIT)
3504 {
3505 /* 64bit checks. */
3506 if ((i.base_reg
3507 && ((i.base_reg->reg_type & Reg64) == 0)
3508 && (i.base_reg->reg_type != BaseIndex
3509 || i.index_reg))
3510 || (i.index_reg
3511 && ((i.index_reg->reg_type & (Reg64|BaseIndex))
3512 != (Reg64|BaseIndex))))
3513 ok = 0;
3514 }
3515 else
3516 {
3517 if ((flag_code == CODE_16BIT) ^ (i.prefix[ADDR_PREFIX] != 0))
3518 {
3519 /* 16bit checks. */
3520 if ((i.base_reg
3521 && ((i.base_reg->reg_type & (Reg16|BaseIndex|RegRex))
3522 != (Reg16|BaseIndex)))
3523 || (i.index_reg
3524 && (((i.index_reg->reg_type & (Reg16|BaseIndex))
3525 != (Reg16|BaseIndex))
3526 || ! (i.base_reg
3527 && i.base_reg->reg_num < 6
3528 && i.index_reg->reg_num >= 6
3529 && i.log2_scale_factor == 0))))
3530 ok = 0;
3531 }
3532 else
3533 {
3534 /* 32bit checks. */
3535 if ((i.base_reg
3536 && (i.base_reg->reg_type & (Reg32 | RegRex)) != Reg32)
3537 || (i.index_reg
3538 && ((i.index_reg->reg_type & (Reg32|BaseIndex|RegRex))
3539 != (Reg32|BaseIndex))))
3540 ok = 0;
3541 }
3542 }
3543 if (!ok)
3544 {
3545 #if INFER_ADDR_PREFIX
3546 if (flag_code != CODE_64BIT
3547 && i.prefix[ADDR_PREFIX] == 0 && stackop_size != '\0')
3548 {
3549 i.prefix[ADDR_PREFIX] = ADDR_PREFIX_OPCODE;
3550 i.prefixes += 1;
3551 /* Change the size of any displacement too. At most one of
3552 Disp16 or Disp32 is set.
3553 FIXME. There doesn't seem to be any real need for separate
3554 Disp16 and Disp32 flags. The same goes for Imm16 and Imm32.
3555 Removing them would probably clean up the code quite a lot. */
3556 if (i.types[this_operand] & (Disp16|Disp32))
3557 i.types[this_operand] ^= (Disp16|Disp32);
3558 fudged = 1;
3559 goto tryprefix;
3560 }
3561 if (fudged)
3562 as_bad (_("`%s' is not a valid base/index expression"),
3563 operand_string);
3564 else
3565 #endif
3566 as_bad (_("`%s' is not a valid %s bit base/index expression"),
3567 operand_string,
3568 flag_code_names[flag_code]);
3569 return 0;
3570 }
3571 return 1;
3572 }
3573
3574 /* Parse OPERAND_STRING into the i386_insn structure I. Returns non-zero
3575 on error. */
3576
3577 static int
3578 i386_operand (operand_string)
3579 char *operand_string;
3580 {
3581 const reg_entry *r;
3582 char *end_op;
3583 char *op_string = operand_string;
3584
3585 if (is_space_char (*op_string))
3586 ++op_string;
3587
3588 /* We check for an absolute prefix (differentiating,
3589 for example, 'jmp pc_relative_label' from 'jmp *absolute_label'. */
3590 if (*op_string == ABSOLUTE_PREFIX)
3591 {
3592 ++op_string;
3593 if (is_space_char (*op_string))
3594 ++op_string;
3595 i.types[this_operand] |= JumpAbsolute;
3596 }
3597
3598 /* Check if operand is a register. */
3599 if ((*op_string == REGISTER_PREFIX || allow_naked_reg)
3600 && (r = parse_register (op_string, &end_op)) != NULL)
3601 {
3602 /* Check for a segment override by searching for ':' after a
3603 segment register. */
3604 op_string = end_op;
3605 if (is_space_char (*op_string))
3606 ++op_string;
3607 if (*op_string == ':' && (r->reg_type & (SReg2 | SReg3)))
3608 {
3609 switch (r->reg_num)
3610 {
3611 case 0:
3612 i.seg[i.mem_operands] = &es;
3613 break;
3614 case 1:
3615 i.seg[i.mem_operands] = &cs;
3616 break;
3617 case 2:
3618 i.seg[i.mem_operands] = &ss;
3619 break;
3620 case 3:
3621 i.seg[i.mem_operands] = &ds;
3622 break;
3623 case 4:
3624 i.seg[i.mem_operands] = &fs;
3625 break;
3626 case 5:
3627 i.seg[i.mem_operands] = &gs;
3628 break;
3629 }
3630
3631 /* Skip the ':' and whitespace. */
3632 ++op_string;
3633 if (is_space_char (*op_string))
3634 ++op_string;
3635
3636 if (!is_digit_char (*op_string)
3637 && !is_identifier_char (*op_string)
3638 && *op_string != '('
3639 && *op_string != ABSOLUTE_PREFIX)
3640 {
3641 as_bad (_("bad memory operand `%s'"), op_string);
3642 return 0;
3643 }
3644 /* Handle case of %es:*foo. */
3645 if (*op_string == ABSOLUTE_PREFIX)
3646 {
3647 ++op_string;
3648 if (is_space_char (*op_string))
3649 ++op_string;
3650 i.types[this_operand] |= JumpAbsolute;
3651 }
3652 goto do_memory_reference;
3653 }
3654 if (*op_string)
3655 {
3656 as_bad (_("junk `%s' after register"), op_string);
3657 return 0;
3658 }
3659 i.types[this_operand] |= r->reg_type & ~BaseIndex;
3660 i.op[this_operand].regs = r;
3661 i.reg_operands++;
3662 }
3663 else if (*op_string == REGISTER_PREFIX)
3664 {
3665 as_bad (_("bad register name `%s'"), op_string);
3666 return 0;
3667 }
3668 else if (*op_string == IMMEDIATE_PREFIX)
3669 {
3670 ++op_string;
3671 if (i.types[this_operand] & JumpAbsolute)
3672 {
3673 as_bad (_("immediate operand illegal with absolute jump"));
3674 return 0;
3675 }
3676 if (!i386_immediate (op_string))
3677 return 0;
3678 }
3679 else if (is_digit_char (*op_string)
3680 || is_identifier_char (*op_string)
3681 || *op_string == '(')
3682 {
3683 /* This is a memory reference of some sort. */
3684 char *base_string;
3685
3686 /* Start and end of displacement string expression (if found). */
3687 char *displacement_string_start;
3688 char *displacement_string_end;
3689
3690 do_memory_reference:
3691 if ((i.mem_operands == 1
3692 && (current_templates->start->opcode_modifier & IsString) == 0)
3693 || i.mem_operands == 2)
3694 {
3695 as_bad (_("too many memory references for `%s'"),
3696 current_templates->start->name);
3697 return 0;
3698 }
3699
3700 /* Check for base index form. We detect the base index form by
3701 looking for an ')' at the end of the operand, searching
3702 for the '(' matching it, and finding a REGISTER_PREFIX or ','
3703 after the '('. */
3704 base_string = op_string + strlen (op_string);
3705
3706 --base_string;
3707 if (is_space_char (*base_string))
3708 --base_string;
3709
3710 /* If we only have a displacement, set-up for it to be parsed later. */
3711 displacement_string_start = op_string;
3712 displacement_string_end = base_string + 1;
3713
3714 if (*base_string == ')')
3715 {
3716 char *temp_string;
3717 unsigned int parens_balanced = 1;
3718 /* We've already checked that the number of left & right ()'s are
3719 equal, so this loop will not be infinite. */
3720 do
3721 {
3722 base_string--;
3723 if (*base_string == ')')
3724 parens_balanced++;
3725 if (*base_string == '(')
3726 parens_balanced--;
3727 }
3728 while (parens_balanced);
3729
3730 temp_string = base_string;
3731
3732 /* Skip past '(' and whitespace. */
3733 ++base_string;
3734 if (is_space_char (*base_string))
3735 ++base_string;
3736
3737 if (*base_string == ','
3738 || ((*base_string == REGISTER_PREFIX || allow_naked_reg)
3739 && (i.base_reg = parse_register (base_string, &end_op)) != NULL))
3740 {
3741 displacement_string_end = temp_string;
3742
3743 i.types[this_operand] |= BaseIndex;
3744
3745 if (i.base_reg)
3746 {
3747 base_string = end_op;
3748 if (is_space_char (*base_string))
3749 ++base_string;
3750 }
3751
3752 /* There may be an index reg or scale factor here. */
3753 if (*base_string == ',')
3754 {
3755 ++base_string;
3756 if (is_space_char (*base_string))
3757 ++base_string;
3758
3759 if ((*base_string == REGISTER_PREFIX || allow_naked_reg)
3760 && (i.index_reg = parse_register (base_string, &end_op)) != NULL)
3761 {
3762 base_string = end_op;
3763 if (is_space_char (*base_string))
3764 ++base_string;
3765 if (*base_string == ',')
3766 {
3767 ++base_string;
3768 if (is_space_char (*base_string))
3769 ++base_string;
3770 }
3771 else if (*base_string != ')')
3772 {
3773 as_bad (_("expecting `,' or `)' after index register in `%s'"),
3774 operand_string);
3775 return 0;
3776 }
3777 }
3778 else if (*base_string == REGISTER_PREFIX)
3779 {
3780 as_bad (_("bad register name `%s'"), base_string);
3781 return 0;
3782 }
3783
3784 /* Check for scale factor. */
3785 if (isdigit ((unsigned char) *base_string))
3786 {
3787 if (!i386_scale (base_string))
3788 return 0;
3789
3790 ++base_string;
3791 if (is_space_char (*base_string))
3792 ++base_string;
3793 if (*base_string != ')')
3794 {
3795 as_bad (_("expecting `)' after scale factor in `%s'"),
3796 operand_string);
3797 return 0;
3798 }
3799 }
3800 else if (!i.index_reg)
3801 {
3802 as_bad (_("expecting index register or scale factor after `,'; got '%c'"),
3803 *base_string);
3804 return 0;
3805 }
3806 }
3807 else if (*base_string != ')')
3808 {
3809 as_bad (_("expecting `,' or `)' after base register in `%s'"),
3810 operand_string);
3811 return 0;
3812 }
3813 }
3814 else if (*base_string == REGISTER_PREFIX)
3815 {
3816 as_bad (_("bad register name `%s'"), base_string);
3817 return 0;
3818 }
3819 }
3820
3821 /* If there's an expression beginning the operand, parse it,
3822 assuming displacement_string_start and
3823 displacement_string_end are meaningful. */
3824 if (displacement_string_start != displacement_string_end)
3825 {
3826 if (!i386_displacement (displacement_string_start,
3827 displacement_string_end))
3828 return 0;
3829 }
3830
3831 /* Special case for (%dx) while doing input/output op. */
3832 if (i.base_reg
3833 && i.base_reg->reg_type == (Reg16 | InOutPortReg)
3834 && i.index_reg == 0
3835 && i.log2_scale_factor == 0
3836 && i.seg[i.mem_operands] == 0
3837 && (i.types[this_operand] & Disp) == 0)
3838 {
3839 i.types[this_operand] = InOutPortReg;
3840 return 1;
3841 }
3842
3843 if (i386_index_check (operand_string) == 0)
3844 return 0;
3845 i.mem_operands++;
3846 }
3847 else
3848 {
3849 /* It's not a memory operand; argh! */
3850 as_bad (_("invalid char %s beginning operand %d `%s'"),
3851 output_invalid (*op_string),
3852 this_operand + 1,
3853 op_string);
3854 return 0;
3855 }
3856 return 1; /* Normal return. */
3857 }
3858 \f
3859 /* md_estimate_size_before_relax()
3860
3861 Called just before relax() for rs_machine_dependent frags. The x86
3862 assembler uses these frags to handle variable size jump
3863 instructions.
3864
3865 Any symbol that is now undefined will not become defined.
3866 Return the correct fr_subtype in the frag.
3867 Return the initial "guess for variable size of frag" to caller.
3868 The guess is actually the growth beyond the fixed part. Whatever
3869 we do to grow the fixed or variable part contributes to our
3870 returned value. */
3871
3872 int
3873 md_estimate_size_before_relax (fragP, segment)
3874 register fragS *fragP;
3875 register segT segment;
3876 {
3877 /* We've already got fragP->fr_subtype right; all we have to do is
3878 check for un-relaxable symbols. On an ELF system, we can't relax
3879 an externally visible symbol, because it may be overridden by a
3880 shared library. */
3881 if (S_GET_SEGMENT (fragP->fr_symbol) != segment
3882 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
3883 || S_IS_EXTERNAL (fragP->fr_symbol)
3884 || S_IS_WEAK (fragP->fr_symbol)
3885 #endif
3886 )
3887 {
3888 /* Symbol is undefined in this segment, or we need to keep a
3889 reloc so that weak symbols can be overridden. */
3890 int size = (fragP->fr_subtype & CODE16) ? 2 : 4;
3891 #ifdef BFD_ASSEMBLER
3892 enum bfd_reloc_code_real reloc_type;
3893 #else
3894 int reloc_type;
3895 #endif
3896 unsigned char *opcode;
3897 int old_fr_fix;
3898
3899 if (fragP->fr_var != NO_RELOC)
3900 reloc_type = fragP->fr_var;
3901 else if (size == 2)
3902 reloc_type = BFD_RELOC_16_PCREL;
3903 else
3904 reloc_type = BFD_RELOC_32_PCREL;
3905
3906 old_fr_fix = fragP->fr_fix;
3907 opcode = (unsigned char *) fragP->fr_opcode;
3908
3909 switch (opcode[0])
3910 {
3911 case JUMP_PC_RELATIVE:
3912 /* Make jmp (0xeb) a dword displacement jump. */
3913 opcode[0] = 0xe9;
3914 fragP->fr_fix += size;
3915 fix_new (fragP, old_fr_fix, size,
3916 fragP->fr_symbol,
3917 fragP->fr_offset, 1,
3918 reloc_type);
3919 break;
3920
3921 default:
3922 /* This changes the byte-displacement jump 0x7N
3923 to the dword-displacement jump 0x0f,0x8N. */
3924 opcode[1] = opcode[0] + 0x10;
3925 opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
3926 /* We've added an opcode byte. */
3927 fragP->fr_fix += 1 + size;
3928 fix_new (fragP, old_fr_fix + 1, size,
3929 fragP->fr_symbol,
3930 fragP->fr_offset, 1,
3931 reloc_type);
3932 break;
3933 }
3934 frag_wane (fragP);
3935 return fragP->fr_fix - old_fr_fix;
3936 }
3937 /* Guess a short jump. */
3938 return 1;
3939 }
3940
3941 /* Called after relax() is finished.
3942
3943 In: Address of frag.
3944 fr_type == rs_machine_dependent.
3945 fr_subtype is what the address relaxed to.
3946
3947 Out: Any fixSs and constants are set up.
3948 Caller will turn frag into a ".space 0". */
3949
3950 #ifndef BFD_ASSEMBLER
3951 void
3952 md_convert_frag (headers, sec, fragP)
3953 object_headers *headers ATTRIBUTE_UNUSED;
3954 segT sec ATTRIBUTE_UNUSED;
3955 register fragS *fragP;
3956 #else
3957 void
3958 md_convert_frag (abfd, sec, fragP)
3959 bfd *abfd ATTRIBUTE_UNUSED;
3960 segT sec ATTRIBUTE_UNUSED;
3961 register fragS *fragP;
3962 #endif
3963 {
3964 register unsigned char *opcode;
3965 unsigned char *where_to_put_displacement = NULL;
3966 offsetT target_address;
3967 offsetT opcode_address;
3968 unsigned int extension = 0;
3969 offsetT displacement_from_opcode_start;
3970
3971 opcode = (unsigned char *) fragP->fr_opcode;
3972
3973 /* Address we want to reach in file space. */
3974 target_address = S_GET_VALUE (fragP->fr_symbol) + fragP->fr_offset;
3975 #ifdef BFD_ASSEMBLER
3976 /* Not needed otherwise? */
3977 target_address += symbol_get_frag (fragP->fr_symbol)->fr_address;
3978 #endif
3979
3980 /* Address opcode resides at in file space. */
3981 opcode_address = fragP->fr_address + fragP->fr_fix;
3982
3983 /* Displacement from opcode start to fill into instruction. */
3984 displacement_from_opcode_start = target_address - opcode_address;
3985
3986 switch (fragP->fr_subtype)
3987 {
3988 case ENCODE_RELAX_STATE (COND_JUMP, SMALL):
3989 case ENCODE_RELAX_STATE (COND_JUMP, SMALL16):
3990 case ENCODE_RELAX_STATE (UNCOND_JUMP, SMALL):
3991 case ENCODE_RELAX_STATE (UNCOND_JUMP, SMALL16):
3992 /* Don't have to change opcode. */
3993 extension = 1; /* 1 opcode + 1 displacement */
3994 where_to_put_displacement = &opcode[1];
3995 break;
3996
3997 case ENCODE_RELAX_STATE (COND_JUMP, BIG):
3998 extension = 5; /* 2 opcode + 4 displacement */
3999 opcode[1] = opcode[0] + 0x10;
4000 opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
4001 where_to_put_displacement = &opcode[2];
4002 break;
4003
4004 case ENCODE_RELAX_STATE (UNCOND_JUMP, BIG):
4005 extension = 4; /* 1 opcode + 4 displacement */
4006 opcode[0] = 0xe9;
4007 where_to_put_displacement = &opcode[1];
4008 break;
4009
4010 case ENCODE_RELAX_STATE (COND_JUMP, BIG16):
4011 extension = 3; /* 2 opcode + 2 displacement */
4012 opcode[1] = opcode[0] + 0x10;
4013 opcode[0] = TWO_BYTE_OPCODE_ESCAPE;
4014 where_to_put_displacement = &opcode[2];
4015 break;
4016
4017 case ENCODE_RELAX_STATE (UNCOND_JUMP, BIG16):
4018 extension = 2; /* 1 opcode + 2 displacement */
4019 opcode[0] = 0xe9;
4020 where_to_put_displacement = &opcode[1];
4021 break;
4022
4023 default:
4024 BAD_CASE (fragP->fr_subtype);
4025 break;
4026 }
4027 /* Now put displacement after opcode. */
4028 md_number_to_chars ((char *) where_to_put_displacement,
4029 (valueT) (displacement_from_opcode_start - extension),
4030 SIZE_FROM_RELAX_STATE (fragP->fr_subtype));
4031 fragP->fr_fix += extension;
4032 }
4033 \f
4034 /* Size of byte displacement jmp. */
4035 int md_short_jump_size = 2;
4036
4037 /* Size of dword displacement jmp. */
4038 int md_long_jump_size = 5;
4039
4040 /* Size of relocation record. */
4041 const int md_reloc_size = 8;
4042
4043 void
4044 md_create_short_jump (ptr, from_addr, to_addr, frag, to_symbol)
4045 char *ptr;
4046 addressT from_addr, to_addr;
4047 fragS *frag ATTRIBUTE_UNUSED;
4048 symbolS *to_symbol ATTRIBUTE_UNUSED;
4049 {
4050 offsetT offset;
4051
4052 offset = to_addr - (from_addr + 2);
4053 /* Opcode for byte-disp jump. */
4054 md_number_to_chars (ptr, (valueT) 0xeb, 1);
4055 md_number_to_chars (ptr + 1, (valueT) offset, 1);
4056 }
4057
4058 void
4059 md_create_long_jump (ptr, from_addr, to_addr, frag, to_symbol)
4060 char *ptr;
4061 addressT from_addr, to_addr;
4062 fragS *frag ATTRIBUTE_UNUSED;
4063 symbolS *to_symbol ATTRIBUTE_UNUSED;
4064 {
4065 offsetT offset;
4066
4067 offset = to_addr - (from_addr + 5);
4068 md_number_to_chars (ptr, (valueT) 0xe9, 1);
4069 md_number_to_chars (ptr + 1, (valueT) offset, 4);
4070 }
4071 \f
4072 /* Apply a fixup (fixS) to segment data, once it has been determined
4073 by our caller that we have all the info we need to fix it up.
4074
4075 On the 386, immediates, displacements, and data pointers are all in
4076 the same (little-endian) format, so we don't need to care about which
4077 we are handling. */
4078
4079 int
4080 md_apply_fix3 (fixP, valp, seg)
4081 /* The fix we're to put in. */
4082 fixS *fixP;
4083
4084 /* Pointer to the value of the bits. */
4085 valueT *valp;
4086
4087 /* Segment fix is from. */
4088 segT seg ATTRIBUTE_UNUSED;
4089 {
4090 register char *p = fixP->fx_where + fixP->fx_frag->fr_literal;
4091 valueT value = *valp;
4092
4093 #if defined (BFD_ASSEMBLER) && !defined (TE_Mach)
4094 if (fixP->fx_pcrel)
4095 {
4096 switch (fixP->fx_r_type)
4097 {
4098 default:
4099 break;
4100
4101 case BFD_RELOC_32:
4102 fixP->fx_r_type = BFD_RELOC_32_PCREL;
4103 break;
4104 case BFD_RELOC_16:
4105 fixP->fx_r_type = BFD_RELOC_16_PCREL;
4106 break;
4107 case BFD_RELOC_8:
4108 fixP->fx_r_type = BFD_RELOC_8_PCREL;
4109 break;
4110 }
4111 }
4112
4113 /* This is a hack. There should be a better way to handle this.
4114 This covers for the fact that bfd_install_relocation will
4115 subtract the current location (for partial_inplace, PC relative
4116 relocations); see more below. */
4117 if ((fixP->fx_r_type == BFD_RELOC_32_PCREL
4118 || fixP->fx_r_type == BFD_RELOC_16_PCREL
4119 || fixP->fx_r_type == BFD_RELOC_8_PCREL)
4120 && fixP->fx_addsy)
4121 {
4122 #ifndef OBJ_AOUT
4123 if (OUTPUT_FLAVOR == bfd_target_elf_flavour
4124 #ifdef TE_PE
4125 || OUTPUT_FLAVOR == bfd_target_coff_flavour
4126 #endif
4127 )
4128 value += fixP->fx_where + fixP->fx_frag->fr_address;
4129 #endif
4130 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
4131 if (OUTPUT_FLAVOR == bfd_target_elf_flavour)
4132 {
4133 segT fseg = S_GET_SEGMENT (fixP->fx_addsy);
4134
4135 if ((fseg == seg
4136 || (symbol_section_p (fixP->fx_addsy)
4137 && fseg != absolute_section))
4138 && ! S_IS_EXTERNAL (fixP->fx_addsy)
4139 && ! S_IS_WEAK (fixP->fx_addsy)
4140 && S_IS_DEFINED (fixP->fx_addsy)
4141 && ! S_IS_COMMON (fixP->fx_addsy))
4142 {
4143 /* Yes, we add the values in twice. This is because
4144 bfd_perform_relocation subtracts them out again. I think
4145 bfd_perform_relocation is broken, but I don't dare change
4146 it. FIXME. */
4147 value += fixP->fx_where + fixP->fx_frag->fr_address;
4148 }
4149 }
4150 #endif
4151 #if defined (OBJ_COFF) && defined (TE_PE)
4152 /* For some reason, the PE format does not store a section
4153 address offset for a PC relative symbol. */
4154 if (S_GET_SEGMENT (fixP->fx_addsy) != seg)
4155 value += md_pcrel_from (fixP);
4156 #endif
4157 }
4158
4159 /* Fix a few things - the dynamic linker expects certain values here,
4160 and we must not dissappoint it. */
4161 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
4162 if (OUTPUT_FLAVOR == bfd_target_elf_flavour
4163 && fixP->fx_addsy)
4164 switch (fixP->fx_r_type)
4165 {
4166 case BFD_RELOC_386_PLT32:
4167 case BFD_RELOC_X86_64_PLT32:
4168 /* Make the jump instruction point to the address of the operand. At
4169 runtime we merely add the offset to the actual PLT entry. */
4170 value = -4;
4171 break;
4172 case BFD_RELOC_386_GOTPC:
4173
4174 /* This is tough to explain. We end up with this one if we have
4175 * operands that look like "_GLOBAL_OFFSET_TABLE_+[.-.L284]". The goal
4176 * here is to obtain the absolute address of the GOT, and it is strongly
4177 * preferable from a performance point of view to avoid using a runtime
4178 * relocation for this. The actual sequence of instructions often look
4179 * something like:
4180 *
4181 * call .L66
4182 * .L66:
4183 * popl %ebx
4184 * addl $_GLOBAL_OFFSET_TABLE_+[.-.L66],%ebx
4185 *
4186 * The call and pop essentially return the absolute address of
4187 * the label .L66 and store it in %ebx. The linker itself will
4188 * ultimately change the first operand of the addl so that %ebx points to
4189 * the GOT, but to keep things simple, the .o file must have this operand
4190 * set so that it generates not the absolute address of .L66, but the
4191 * absolute address of itself. This allows the linker itself simply
4192 * treat a GOTPC relocation as asking for a pcrel offset to the GOT to be
4193 * added in, and the addend of the relocation is stored in the operand
4194 * field for the instruction itself.
4195 *
4196 * Our job here is to fix the operand so that it would add the correct
4197 * offset so that %ebx would point to itself. The thing that is tricky is
4198 * that .-.L66 will point to the beginning of the instruction, so we need
4199 * to further modify the operand so that it will point to itself.
4200 * There are other cases where you have something like:
4201 *
4202 * .long $_GLOBAL_OFFSET_TABLE_+[.-.L66]
4203 *
4204 * and here no correction would be required. Internally in the assembler
4205 * we treat operands of this form as not being pcrel since the '.' is
4206 * explicitly mentioned, and I wonder whether it would simplify matters
4207 * to do it this way. Who knows. In earlier versions of the PIC patches,
4208 * the pcrel_adjust field was used to store the correction, but since the
4209 * expression is not pcrel, I felt it would be confusing to do it this
4210 * way. */
4211
4212 value -= 1;
4213 break;
4214 case BFD_RELOC_386_GOT32:
4215 case BFD_RELOC_X86_64_GOT32:
4216 value = 0; /* Fully resolved at runtime. No addend. */
4217 break;
4218 case BFD_RELOC_386_GOTOFF:
4219 case BFD_RELOC_X86_64_GOTPCREL:
4220 break;
4221
4222 case BFD_RELOC_VTABLE_INHERIT:
4223 case BFD_RELOC_VTABLE_ENTRY:
4224 fixP->fx_done = 0;
4225 return 1;
4226
4227 default:
4228 break;
4229 }
4230 #endif /* defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) */
4231 *valp = value;
4232 #endif /* defined (BFD_ASSEMBLER) && !defined (TE_Mach) */
4233
4234 #ifndef BFD_ASSEMBLER
4235 md_number_to_chars (p, value, fixP->fx_size);
4236 #else
4237 /* Are we finished with this relocation now? */
4238 if (fixP->fx_addsy == 0 && fixP->fx_pcrel == 0)
4239 fixP->fx_done = 1;
4240 else if (use_rela_relocations)
4241 {
4242 fixP->fx_no_overflow = 1;
4243 value = 0;
4244 }
4245 md_number_to_chars (p, value, fixP->fx_size);
4246 #endif
4247
4248 return 1;
4249 }
4250 \f
4251 #define MAX_LITTLENUMS 6
4252
4253 /* Turn the string pointed to by litP into a floating point constant
4254 of type TYPE, and emit the appropriate bytes. The number of
4255 LITTLENUMS emitted is stored in *SIZEP. An error message is
4256 returned, or NULL on OK. */
4257
4258 char *
4259 md_atof (type, litP, sizeP)
4260 int type;
4261 char *litP;
4262 int *sizeP;
4263 {
4264 int prec;
4265 LITTLENUM_TYPE words[MAX_LITTLENUMS];
4266 LITTLENUM_TYPE *wordP;
4267 char *t;
4268
4269 switch (type)
4270 {
4271 case 'f':
4272 case 'F':
4273 prec = 2;
4274 break;
4275
4276 case 'd':
4277 case 'D':
4278 prec = 4;
4279 break;
4280
4281 case 'x':
4282 case 'X':
4283 prec = 5;
4284 break;
4285
4286 default:
4287 *sizeP = 0;
4288 return _("Bad call to md_atof ()");
4289 }
4290 t = atof_ieee (input_line_pointer, type, words);
4291 if (t)
4292 input_line_pointer = t;
4293
4294 *sizeP = prec * sizeof (LITTLENUM_TYPE);
4295 /* This loops outputs the LITTLENUMs in REVERSE order; in accord with
4296 the bigendian 386. */
4297 for (wordP = words + prec - 1; prec--;)
4298 {
4299 md_number_to_chars (litP, (valueT) (*wordP--), sizeof (LITTLENUM_TYPE));
4300 litP += sizeof (LITTLENUM_TYPE);
4301 }
4302 return 0;
4303 }
4304 \f
4305 char output_invalid_buf[8];
4306
4307 static char *
4308 output_invalid (c)
4309 int c;
4310 {
4311 if (isprint (c))
4312 sprintf (output_invalid_buf, "'%c'", c);
4313 else
4314 sprintf (output_invalid_buf, "(0x%x)", (unsigned) c);
4315 return output_invalid_buf;
4316 }
4317
4318 /* REG_STRING starts *before* REGISTER_PREFIX. */
4319
4320 static const reg_entry *
4321 parse_register (reg_string, end_op)
4322 char *reg_string;
4323 char **end_op;
4324 {
4325 char *s = reg_string;
4326 char *p;
4327 char reg_name_given[MAX_REG_NAME_SIZE + 1];
4328 const reg_entry *r;
4329
4330 /* Skip possible REGISTER_PREFIX and possible whitespace. */
4331 if (*s == REGISTER_PREFIX)
4332 ++s;
4333
4334 if (is_space_char (*s))
4335 ++s;
4336
4337 p = reg_name_given;
4338 while ((*p++ = register_chars[(unsigned char) *s]) != '\0')
4339 {
4340 if (p >= reg_name_given + MAX_REG_NAME_SIZE)
4341 return (const reg_entry *) NULL;
4342 s++;
4343 }
4344
4345 /* For naked regs, make sure that we are not dealing with an identifier.
4346 This prevents confusing an identifier like `eax_var' with register
4347 `eax'. */
4348 if (allow_naked_reg && identifier_chars[(unsigned char) *s])
4349 return (const reg_entry *) NULL;
4350
4351 *end_op = s;
4352
4353 r = (const reg_entry *) hash_find (reg_hash, reg_name_given);
4354
4355 /* Handle floating point regs, allowing spaces in the (i) part. */
4356 if (r == i386_regtab /* %st is first entry of table */)
4357 {
4358 if (is_space_char (*s))
4359 ++s;
4360 if (*s == '(')
4361 {
4362 ++s;
4363 if (is_space_char (*s))
4364 ++s;
4365 if (*s >= '0' && *s <= '7')
4366 {
4367 r = &i386_float_regtab[*s - '0'];
4368 ++s;
4369 if (is_space_char (*s))
4370 ++s;
4371 if (*s == ')')
4372 {
4373 *end_op = s + 1;
4374 return r;
4375 }
4376 }
4377 /* We have "%st(" then garbage. */
4378 return (const reg_entry *) NULL;
4379 }
4380 }
4381
4382 return r;
4383 }
4384 \f
4385 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
4386 const char *md_shortopts = "kVQ:sq";
4387 #else
4388 const char *md_shortopts = "q";
4389 #endif
4390
4391 struct option md_longopts[] = {
4392 #define OPTION_32 (OPTION_MD_BASE + 0)
4393 {"32", no_argument, NULL, OPTION_32},
4394 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
4395 #define OPTION_64 (OPTION_MD_BASE + 1)
4396 {"64", no_argument, NULL, OPTION_64},
4397 #endif
4398 {NULL, no_argument, NULL, 0}
4399 };
4400 size_t md_longopts_size = sizeof (md_longopts);
4401
4402 int
4403 md_parse_option (c, arg)
4404 int c;
4405 char *arg ATTRIBUTE_UNUSED;
4406 {
4407 switch (c)
4408 {
4409 case 'q':
4410 quiet_warnings = 1;
4411 break;
4412
4413 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
4414 /* -Qy, -Qn: SVR4 arguments controlling whether a .comment section
4415 should be emitted or not. FIXME: Not implemented. */
4416 case 'Q':
4417 break;
4418
4419 /* -V: SVR4 argument to print version ID. */
4420 case 'V':
4421 print_version_id ();
4422 break;
4423
4424 /* -k: Ignore for FreeBSD compatibility. */
4425 case 'k':
4426 break;
4427
4428 case 's':
4429 /* -s: On i386 Solaris, this tells the native assembler to use
4430 .stab instead of .stab.excl. We always use .stab anyhow. */
4431 break;
4432
4433 case OPTION_64:
4434 {
4435 const char **list, **l;
4436
4437 list = bfd_target_list ();
4438 for (l = list; *l != NULL; l++)
4439 if (strcmp (*l, "elf64-x86-64") == 0)
4440 {
4441 default_arch = "x86_64";
4442 break;
4443 }
4444 if (*l == NULL)
4445 as_fatal (_("No compiled in support for x86_64"));
4446 free (list);
4447 }
4448 break;
4449 #endif
4450
4451 case OPTION_32:
4452 default_arch = "i386";
4453 break;
4454
4455 default:
4456 return 0;
4457 }
4458 return 1;
4459 }
4460
4461 void
4462 md_show_usage (stream)
4463 FILE *stream;
4464 {
4465 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
4466 fprintf (stream, _("\
4467 -Q ignored\n\
4468 -V print assembler version number\n\
4469 -k ignored\n\
4470 -q quieten some warnings\n\
4471 -s ignored\n"));
4472 #else
4473 fprintf (stream, _("\
4474 -q quieten some warnings\n"));
4475 #endif
4476 }
4477
4478 #ifdef BFD_ASSEMBLER
4479 #if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \
4480 || defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF))
4481
4482 /* Pick the target format to use. */
4483
4484 const char *
4485 i386_target_format ()
4486 {
4487 if (!strcmp (default_arch, "x86_64"))
4488 set_code_flag (CODE_64BIT);
4489 else if (!strcmp (default_arch, "i386"))
4490 set_code_flag (CODE_32BIT);
4491 else
4492 as_fatal (_("Unknown architecture"));
4493 switch (OUTPUT_FLAVOR)
4494 {
4495 #ifdef OBJ_MAYBE_AOUT
4496 case bfd_target_aout_flavour:
4497 return AOUT_TARGET_FORMAT;
4498 #endif
4499 #ifdef OBJ_MAYBE_COFF
4500 case bfd_target_coff_flavour:
4501 return "coff-i386";
4502 #endif
4503 #if defined (OBJ_MAYBE_ELF) || defined (OBJ_ELF)
4504 case bfd_target_elf_flavour:
4505 {
4506 if (flag_code == CODE_64BIT)
4507 use_rela_relocations = 1;
4508 return flag_code == CODE_64BIT ? "elf64-x86-64" : "elf32-i386";
4509 }
4510 #endif
4511 default:
4512 abort ();
4513 return NULL;
4514 }
4515 }
4516
4517 #endif /* OBJ_MAYBE_ more than one */
4518 #endif /* BFD_ASSEMBLER */
4519 \f
4520 symbolS *
4521 md_undefined_symbol (name)
4522 char *name;
4523 {
4524 if (name[0] == GLOBAL_OFFSET_TABLE_NAME[0]
4525 && name[1] == GLOBAL_OFFSET_TABLE_NAME[1]
4526 && name[2] == GLOBAL_OFFSET_TABLE_NAME[2]
4527 && strcmp (name, GLOBAL_OFFSET_TABLE_NAME) == 0)
4528 {
4529 if (!GOT_symbol)
4530 {
4531 if (symbol_find (name))
4532 as_bad (_("GOT already in symbol table"));
4533 GOT_symbol = symbol_new (name, undefined_section,
4534 (valueT) 0, &zero_address_frag);
4535 };
4536 return GOT_symbol;
4537 }
4538 return 0;
4539 }
4540
4541 /* Round up a section size to the appropriate boundary. */
4542
4543 valueT
4544 md_section_align (segment, size)
4545 segT segment ATTRIBUTE_UNUSED;
4546 valueT size;
4547 {
4548 #ifdef BFD_ASSEMBLER
4549 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
4550 if (OUTPUT_FLAVOR == bfd_target_aout_flavour)
4551 {
4552 /* For a.out, force the section size to be aligned. If we don't do
4553 this, BFD will align it for us, but it will not write out the
4554 final bytes of the section. This may be a bug in BFD, but it is
4555 easier to fix it here since that is how the other a.out targets
4556 work. */
4557 int align;
4558
4559 align = bfd_get_section_alignment (stdoutput, segment);
4560 size = ((size + (1 << align) - 1) & ((valueT) -1 << align));
4561 }
4562 #endif
4563 #endif
4564
4565 return size;
4566 }
4567
4568 /* On the i386, PC-relative offsets are relative to the start of the
4569 next instruction. That is, the address of the offset, plus its
4570 size, since the offset is always the last part of the insn. */
4571
4572 long
4573 md_pcrel_from (fixP)
4574 fixS *fixP;
4575 {
4576 return fixP->fx_size + fixP->fx_where + fixP->fx_frag->fr_address;
4577 }
4578
4579 #ifndef I386COFF
4580
4581 static void
4582 s_bss (ignore)
4583 int ignore ATTRIBUTE_UNUSED;
4584 {
4585 register int temp;
4586
4587 temp = get_absolute_expression ();
4588 subseg_set (bss_section, (subsegT) temp);
4589 demand_empty_rest_of_line ();
4590 }
4591
4592 #endif
4593
4594 #ifdef BFD_ASSEMBLER
4595
4596 void
4597 i386_validate_fix (fixp)
4598 fixS *fixp;
4599 {
4600 if (fixp->fx_subsy && fixp->fx_subsy == GOT_symbol)
4601 {
4602 /* GOTOFF relocation are nonsense in 64bit mode. */
4603 if (flag_code == CODE_64BIT)
4604 abort ();
4605 fixp->fx_r_type = BFD_RELOC_386_GOTOFF;
4606 fixp->fx_subsy = 0;
4607 }
4608 }
4609
4610 arelent *
4611 tc_gen_reloc (section, fixp)
4612 asection *section ATTRIBUTE_UNUSED;
4613 fixS *fixp;
4614 {
4615 arelent *rel;
4616 bfd_reloc_code_real_type code;
4617
4618 switch (fixp->fx_r_type)
4619 {
4620 case BFD_RELOC_X86_64_PLT32:
4621 case BFD_RELOC_X86_64_GOT32:
4622 case BFD_RELOC_X86_64_GOTPCREL:
4623 case BFD_RELOC_386_PLT32:
4624 case BFD_RELOC_386_GOT32:
4625 case BFD_RELOC_386_GOTOFF:
4626 case BFD_RELOC_386_GOTPC:
4627 case BFD_RELOC_X86_64_32S:
4628 case BFD_RELOC_RVA:
4629 case BFD_RELOC_VTABLE_ENTRY:
4630 case BFD_RELOC_VTABLE_INHERIT:
4631 code = fixp->fx_r_type;
4632 break;
4633 default:
4634 if (fixp->fx_pcrel)
4635 {
4636 switch (fixp->fx_size)
4637 {
4638 default:
4639 as_bad (_("can not do %d byte pc-relative relocation"),
4640 fixp->fx_size);
4641 code = BFD_RELOC_32_PCREL;
4642 break;
4643 case 1: code = BFD_RELOC_8_PCREL; break;
4644 case 2: code = BFD_RELOC_16_PCREL; break;
4645 case 4: code = BFD_RELOC_32_PCREL; break;
4646 }
4647 }
4648 else
4649 {
4650 switch (fixp->fx_size)
4651 {
4652 default:
4653 as_bad (_("can not do %d byte relocation"), fixp->fx_size);
4654 code = BFD_RELOC_32;
4655 break;
4656 case 1: code = BFD_RELOC_8; break;
4657 case 2: code = BFD_RELOC_16; break;
4658 case 4: code = BFD_RELOC_32; break;
4659 case 8: code = BFD_RELOC_64; break;
4660 }
4661 }
4662 break;
4663 }
4664
4665 if (code == BFD_RELOC_32
4666 && GOT_symbol
4667 && fixp->fx_addsy == GOT_symbol)
4668 {
4669 /* We don't support GOTPC on 64bit targets. */
4670 if (flag_code == CODE_64BIT)
4671 abort ();
4672 code = BFD_RELOC_386_GOTPC;
4673 }
4674
4675 rel = (arelent *) xmalloc (sizeof (arelent));
4676 rel->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
4677 *rel->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
4678
4679 rel->address = fixp->fx_frag->fr_address + fixp->fx_where;
4680 if (!use_rela_relocations)
4681 {
4682 /* HACK: Since i386 ELF uses Rel instead of Rela, encode the
4683 vtable entry to be used in the relocation's section offset. */
4684 if (fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
4685 rel->address = fixp->fx_offset;
4686
4687 if (fixp->fx_pcrel)
4688 rel->addend = fixp->fx_addnumber;
4689 else
4690 rel->addend = 0;
4691 }
4692 /* Use the rela in 64bit mode. */
4693 else
4694 {
4695 rel->addend = fixp->fx_offset;
4696 #ifdef OBJ_ELF
4697 /* Ohhh, this is ugly. The problem is that if this is a local global
4698 symbol, the relocation will entirely be performed at link time, not
4699 at assembly time. bfd_perform_reloc doesn't know about this sort
4700 of thing, and as a result we need to fake it out here. */
4701 if ((S_IS_EXTERN (fixp->fx_addsy) || S_IS_WEAK (fixp->fx_addsy))
4702 && !S_IS_COMMON (fixp->fx_addsy))
4703 rel->addend -= symbol_get_bfdsym (fixp->fx_addsy)->value;
4704 #endif
4705 if (fixp->fx_pcrel)
4706 rel->addend -= fixp->fx_size;
4707 }
4708
4709 rel->howto = bfd_reloc_type_lookup (stdoutput, code);
4710 if (rel->howto == NULL)
4711 {
4712 as_bad_where (fixp->fx_file, fixp->fx_line,
4713 _("cannot represent relocation type %s"),
4714 bfd_get_reloc_code_name (code));
4715 /* Set howto to a garbage value so that we can keep going. */
4716 rel->howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_32);
4717 assert (rel->howto != NULL);
4718 }
4719
4720 return rel;
4721 }
4722
4723 #else /* ! BFD_ASSEMBLER */
4724
4725 #if (defined(OBJ_AOUT) | defined(OBJ_BOUT))
4726 void
4727 tc_aout_fix_to_chars (where, fixP, segment_address_in_file)
4728 char *where;
4729 fixS *fixP;
4730 relax_addressT segment_address_in_file;
4731 {
4732 /* In: length of relocation (or of address) in chars: 1, 2 or 4.
4733 Out: GNU LD relocation length code: 0, 1, or 2. */
4734
4735 static const unsigned char nbytes_r_length[] = { 42, 0, 1, 42, 2 };
4736 long r_symbolnum;
4737
4738 know (fixP->fx_addsy != NULL);
4739
4740 md_number_to_chars (where,
4741 (valueT) (fixP->fx_frag->fr_address
4742 + fixP->fx_where - segment_address_in_file),
4743 4);
4744
4745 r_symbolnum = (S_IS_DEFINED (fixP->fx_addsy)
4746 ? S_GET_TYPE (fixP->fx_addsy)
4747 : fixP->fx_addsy->sy_number);
4748
4749 where[6] = (r_symbolnum >> 16) & 0x0ff;
4750 where[5] = (r_symbolnum >> 8) & 0x0ff;
4751 where[4] = r_symbolnum & 0x0ff;
4752 where[7] = ((((!S_IS_DEFINED (fixP->fx_addsy)) << 3) & 0x08)
4753 | ((nbytes_r_length[fixP->fx_size] << 1) & 0x06)
4754 | (((fixP->fx_pcrel << 0) & 0x01) & 0x0f));
4755 }
4756
4757 #endif /* OBJ_AOUT or OBJ_BOUT. */
4758
4759 #if defined (I386COFF)
4760
4761 short
4762 tc_coff_fix2rtype (fixP)
4763 fixS *fixP;
4764 {
4765 if (fixP->fx_r_type == R_IMAGEBASE)
4766 return R_IMAGEBASE;
4767
4768 return (fixP->fx_pcrel ?
4769 (fixP->fx_size == 1 ? R_PCRBYTE :
4770 fixP->fx_size == 2 ? R_PCRWORD :
4771 R_PCRLONG) :
4772 (fixP->fx_size == 1 ? R_RELBYTE :
4773 fixP->fx_size == 2 ? R_RELWORD :
4774 R_DIR32));
4775 }
4776
4777 int
4778 tc_coff_sizemachdep (frag)
4779 fragS *frag;
4780 {
4781 if (frag->fr_next)
4782 return (frag->fr_next->fr_address - frag->fr_address);
4783 else
4784 return 0;
4785 }
4786
4787 #endif /* I386COFF */
4788
4789 #endif /* ! BFD_ASSEMBLER */
4790 \f
4791 /* Parse operands using Intel syntax. This implements a recursive descent
4792 parser based on the BNF grammar published in Appendix B of the MASM 6.1
4793 Programmer's Guide.
4794
4795 FIXME: We do not recognize the full operand grammar defined in the MASM
4796 documentation. In particular, all the structure/union and
4797 high-level macro operands are missing.
4798
4799 Uppercase words are terminals, lower case words are non-terminals.
4800 Objects surrounded by double brackets '[[' ']]' are optional. Vertical
4801 bars '|' denote choices. Most grammar productions are implemented in
4802 functions called 'intel_<production>'.
4803
4804 Initial production is 'expr'.
4805
4806 addOp + | -
4807
4808 alpha [a-zA-Z]
4809
4810 byteRegister AL | AH | BL | BH | CL | CH | DL | DH
4811
4812 constant digits [[ radixOverride ]]
4813
4814 dataType BYTE | WORD | DWORD | QWORD | XWORD
4815
4816 digits decdigit
4817 | digits decdigit
4818 | digits hexdigit
4819
4820 decdigit [0-9]
4821
4822 e05 e05 addOp e06
4823 | e06
4824
4825 e06 e06 mulOp e09
4826 | e09
4827
4828 e09 OFFSET e10
4829 | e09 PTR e10
4830 | e09 : e10
4831 | e10
4832
4833 e10 e10 [ expr ]
4834 | e11
4835
4836 e11 ( expr )
4837 | [ expr ]
4838 | constant
4839 | dataType
4840 | id
4841 | $
4842 | register
4843
4844 => expr SHORT e05
4845 | e05
4846
4847 gpRegister AX | EAX | BX | EBX | CX | ECX | DX | EDX
4848 | BP | EBP | SP | ESP | DI | EDI | SI | ESI
4849
4850 hexdigit a | b | c | d | e | f
4851 | A | B | C | D | E | F
4852
4853 id alpha
4854 | id alpha
4855 | id decdigit
4856
4857 mulOp * | / | MOD
4858
4859 quote " | '
4860
4861 register specialRegister
4862 | gpRegister
4863 | byteRegister
4864
4865 segmentRegister CS | DS | ES | FS | GS | SS
4866
4867 specialRegister CR0 | CR2 | CR3
4868 | DR0 | DR1 | DR2 | DR3 | DR6 | DR7
4869 | TR3 | TR4 | TR5 | TR6 | TR7
4870
4871 We simplify the grammar in obvious places (e.g., register parsing is
4872 done by calling parse_register) and eliminate immediate left recursion
4873 to implement a recursive-descent parser.
4874
4875 expr SHORT e05
4876 | e05
4877
4878 e05 e06 e05'
4879
4880 e05' addOp e06 e05'
4881 | Empty
4882
4883 e06 e09 e06'
4884
4885 e06' mulOp e09 e06'
4886 | Empty
4887
4888 e09 OFFSET e10 e09'
4889 | e10 e09'
4890
4891 e09' PTR e10 e09'
4892 | : e10 e09'
4893 | Empty
4894
4895 e10 e11 e10'
4896
4897 e10' [ expr ] e10'
4898 | Empty
4899
4900 e11 ( expr )
4901 | [ expr ]
4902 | BYTE
4903 | WORD
4904 | DWORD
4905 | QWORD
4906 | XWORD
4907 | .
4908 | $
4909 | register
4910 | id
4911 | constant */
4912
4913 /* Parsing structure for the intel syntax parser. Used to implement the
4914 semantic actions for the operand grammar. */
4915 struct intel_parser_s
4916 {
4917 char *op_string; /* The string being parsed. */
4918 int got_a_float; /* Whether the operand is a float. */
4919 int op_modifier; /* Operand modifier. */
4920 int is_mem; /* 1 if operand is memory reference. */
4921 const reg_entry *reg; /* Last register reference found. */
4922 char *disp; /* Displacement string being built. */
4923 };
4924
4925 static struct intel_parser_s intel_parser;
4926
4927 /* Token structure for parsing intel syntax. */
4928 struct intel_token
4929 {
4930 int code; /* Token code. */
4931 const reg_entry *reg; /* Register entry for register tokens. */
4932 char *str; /* String representation. */
4933 };
4934
4935 static struct intel_token cur_token, prev_token;
4936
4937 /* Token codes for the intel parser. Since T_SHORT is already used
4938 by COFF, undefine it first to prevent a warning. */
4939 #define T_NIL -1
4940 #define T_CONST 1
4941 #define T_REG 2
4942 #define T_BYTE 3
4943 #define T_WORD 4
4944 #define T_DWORD 5
4945 #define T_QWORD 6
4946 #define T_XWORD 7
4947 #undef T_SHORT
4948 #define T_SHORT 8
4949 #define T_OFFSET 9
4950 #define T_PTR 10
4951 #define T_ID 11
4952
4953 /* Prototypes for intel parser functions. */
4954 static int intel_match_token PARAMS ((int code));
4955 static void intel_get_token PARAMS ((void));
4956 static void intel_putback_token PARAMS ((void));
4957 static int intel_expr PARAMS ((void));
4958 static int intel_e05 PARAMS ((void));
4959 static int intel_e05_1 PARAMS ((void));
4960 static int intel_e06 PARAMS ((void));
4961 static int intel_e06_1 PARAMS ((void));
4962 static int intel_e09 PARAMS ((void));
4963 static int intel_e09_1 PARAMS ((void));
4964 static int intel_e10 PARAMS ((void));
4965 static int intel_e10_1 PARAMS ((void));
4966 static int intel_e11 PARAMS ((void));
4967
4968 static int
4969 i386_intel_operand (operand_string, got_a_float)
4970 char *operand_string;
4971 int got_a_float;
4972 {
4973 int ret;
4974 char *p;
4975
4976 /* Initialize token holders. */
4977 cur_token.code = prev_token.code = T_NIL;
4978 cur_token.reg = prev_token.reg = NULL;
4979 cur_token.str = prev_token.str = NULL;
4980
4981 /* Initialize parser structure. */
4982 p = intel_parser.op_string = (char *) malloc (strlen (operand_string) + 1);
4983 if (p == NULL)
4984 abort ();
4985 strcpy (intel_parser.op_string, operand_string);
4986 intel_parser.got_a_float = got_a_float;
4987 intel_parser.op_modifier = -1;
4988 intel_parser.is_mem = 0;
4989 intel_parser.reg = NULL;
4990 intel_parser.disp = (char *) malloc (strlen (operand_string) + 1);
4991 if (intel_parser.disp == NULL)
4992 abort ();
4993 intel_parser.disp[0] = '\0';
4994
4995 /* Read the first token and start the parser. */
4996 intel_get_token ();
4997 ret = intel_expr ();
4998
4999 if (ret)
5000 {
5001 /* If we found a memory reference, hand it over to i386_displacement
5002 to fill in the rest of the operand fields. */
5003 if (intel_parser.is_mem)
5004 {
5005 if ((i.mem_operands == 1
5006 && (current_templates->start->opcode_modifier & IsString) == 0)
5007 || i.mem_operands == 2)
5008 {
5009 as_bad (_("too many memory references for '%s'"),
5010 current_templates->start->name);
5011 ret = 0;
5012 }
5013 else
5014 {
5015 char *s = intel_parser.disp;
5016 i.mem_operands++;
5017
5018 /* Add the displacement expression. */
5019 if (*s != '\0')
5020 ret = i386_displacement (s, s + strlen (s))
5021 && i386_index_check (s);
5022 }
5023 }
5024
5025 /* Constant and OFFSET expressions are handled by i386_immediate. */
5026 else if (intel_parser.op_modifier == OFFSET_FLAT
5027 || intel_parser.reg == NULL)
5028 ret = i386_immediate (intel_parser.disp);
5029 }
5030
5031 free (p);
5032 free (intel_parser.disp);
5033
5034 return ret;
5035 }
5036
5037 /* expr SHORT e05
5038 | e05 */
5039 static int
5040 intel_expr ()
5041 {
5042 /* expr SHORT e05 */
5043 if (cur_token.code == T_SHORT)
5044 {
5045 intel_parser.op_modifier = SHORT;
5046 intel_match_token (T_SHORT);
5047
5048 return (intel_e05 ());
5049 }
5050
5051 /* expr e05 */
5052 else
5053 return intel_e05 ();
5054 }
5055
5056 /* e05 e06 e05'
5057
5058 e05' addOp e06 e05'
5059 | Empty */
5060 static int
5061 intel_e05 ()
5062 {
5063 return (intel_e06 () && intel_e05_1 ());
5064 }
5065
5066 static int
5067 intel_e05_1 ()
5068 {
5069 /* e05' addOp e06 e05' */
5070 if (cur_token.code == '+' || cur_token.code == '-')
5071 {
5072 strcat (intel_parser.disp, cur_token.str);
5073 intel_match_token (cur_token.code);
5074
5075 return (intel_e06 () && intel_e05_1 ());
5076 }
5077
5078 /* e05' Empty */
5079 else
5080 return 1;
5081 }
5082
5083 /* e06 e09 e06'
5084
5085 e06' mulOp e09 e06'
5086 | Empty */
5087 static int
5088 intel_e06 ()
5089 {
5090 return (intel_e09 () && intel_e06_1 ());
5091 }
5092
5093 static int
5094 intel_e06_1 ()
5095 {
5096 /* e06' mulOp e09 e06' */
5097 if (cur_token.code == '*' || cur_token.code == '/')
5098 {
5099 strcat (intel_parser.disp, cur_token.str);
5100 intel_match_token (cur_token.code);
5101
5102 return (intel_e09 () && intel_e06_1 ());
5103 }
5104
5105 /* e06' Empty */
5106 else
5107 return 1;
5108 }
5109
5110 /* e09 OFFSET e10 e09'
5111 | e10 e09'
5112
5113 e09' PTR e10 e09'
5114 | : e10 e09'
5115 | Empty */
5116 static int
5117 intel_e09 ()
5118 {
5119 /* e09 OFFSET e10 e09' */
5120 if (cur_token.code == T_OFFSET)
5121 {
5122 intel_parser.is_mem = 0;
5123 intel_parser.op_modifier = OFFSET_FLAT;
5124 intel_match_token (T_OFFSET);
5125
5126 return (intel_e10 () && intel_e09_1 ());
5127 }
5128
5129 /* e09 e10 e09' */
5130 else
5131 return (intel_e10 () && intel_e09_1 ());
5132 }
5133
5134 static int
5135 intel_e09_1 ()
5136 {
5137 /* e09' PTR e10 e09' */
5138 if (cur_token.code == T_PTR)
5139 {
5140 if (prev_token.code == T_BYTE)
5141 i.suffix = BYTE_MNEM_SUFFIX;
5142
5143 else if (prev_token.code == T_WORD)
5144 {
5145 if (intel_parser.got_a_float == 2) /* "fi..." */
5146 i.suffix = SHORT_MNEM_SUFFIX;
5147 else
5148 i.suffix = WORD_MNEM_SUFFIX;
5149 }
5150
5151 else if (prev_token.code == T_DWORD)
5152 {
5153 if (intel_parser.got_a_float == 1) /* "f..." */
5154 i.suffix = SHORT_MNEM_SUFFIX;
5155 else
5156 i.suffix = LONG_MNEM_SUFFIX;
5157 }
5158
5159 else if (prev_token.code == T_QWORD)
5160 {
5161 if (intel_parser.got_a_float == 1) /* "f..." */
5162 i.suffix = LONG_MNEM_SUFFIX;
5163 else
5164 i.suffix = QWORD_MNEM_SUFFIX;
5165 }
5166
5167 else if (prev_token.code == T_XWORD)
5168 i.suffix = LONG_DOUBLE_MNEM_SUFFIX;
5169
5170 else
5171 {
5172 as_bad (_("Unknown operand modifier `%s'\n"), prev_token.str);
5173 return 0;
5174 }
5175
5176 intel_match_token (T_PTR);
5177
5178 return (intel_e10 () && intel_e09_1 ());
5179 }
5180
5181 /* e09 : e10 e09' */
5182 else if (cur_token.code == ':')
5183 {
5184 /* Mark as a memory operand only if it's not already known to be an
5185 offset expression. */
5186 if (intel_parser.op_modifier != OFFSET_FLAT)
5187 intel_parser.is_mem = 1;
5188
5189 return (intel_match_token (':') && intel_e10 () && intel_e09_1 ());
5190 }
5191
5192 /* e09' Empty */
5193 else
5194 return 1;
5195 }
5196
5197 /* e10 e11 e10'
5198
5199 e10' [ expr ] e10'
5200 | Empty */
5201 static int
5202 intel_e10 ()
5203 {
5204 return (intel_e11 () && intel_e10_1 ());
5205 }
5206
5207 static int
5208 intel_e10_1 ()
5209 {
5210 /* e10' [ expr ] e10' */
5211 if (cur_token.code == '[')
5212 {
5213 intel_match_token ('[');
5214
5215 /* Mark as a memory operand only if it's not already known to be an
5216 offset expression. If it's an offset expression, we need to keep
5217 the brace in. */
5218 if (intel_parser.op_modifier != OFFSET_FLAT)
5219 intel_parser.is_mem = 1;
5220 else
5221 strcat (intel_parser.disp, "[");
5222
5223 /* Add a '+' to the displacement string if necessary. */
5224 if (*intel_parser.disp != '\0'
5225 && *(intel_parser.disp + strlen (intel_parser.disp) - 1) != '+')
5226 strcat (intel_parser.disp, "+");
5227
5228 if (intel_expr () && intel_match_token (']'))
5229 {
5230 /* Preserve brackets when the operand is an offset expression. */
5231 if (intel_parser.op_modifier == OFFSET_FLAT)
5232 strcat (intel_parser.disp, "]");
5233
5234 return intel_e10_1 ();
5235 }
5236 else
5237 return 0;
5238 }
5239
5240 /* e10' Empty */
5241 else
5242 return 1;
5243 }
5244
5245 /* e11 ( expr )
5246 | [ expr ]
5247 | BYTE
5248 | WORD
5249 | DWORD
5250 | QWORD
5251 | XWORD
5252 | $
5253 | .
5254 | register
5255 | id
5256 | constant */
5257 static int
5258 intel_e11 ()
5259 {
5260 /* e11 ( expr ) */
5261 if (cur_token.code == '(')
5262 {
5263 intel_match_token ('(');
5264 strcat (intel_parser.disp, "(");
5265
5266 if (intel_expr () && intel_match_token (')'))
5267 {
5268 strcat (intel_parser.disp, ")");
5269 return 1;
5270 }
5271 else
5272 return 0;
5273 }
5274
5275 /* e11 [ expr ] */
5276 else if (cur_token.code == '[')
5277 {
5278 intel_match_token ('[');
5279
5280 /* Mark as a memory operand only if it's not already known to be an
5281 offset expression. If it's an offset expression, we need to keep
5282 the brace in. */
5283 if (intel_parser.op_modifier != OFFSET_FLAT)
5284 intel_parser.is_mem = 1;
5285 else
5286 strcat (intel_parser.disp, "[");
5287
5288 /* Operands for jump/call inside brackets denote absolute addresses. */
5289 if (current_templates->start->opcode_modifier & Jump
5290 || current_templates->start->opcode_modifier & JumpDword
5291 || current_templates->start->opcode_modifier & JumpByte
5292 || current_templates->start->opcode_modifier & JumpInterSegment)
5293 i.types[this_operand] |= JumpAbsolute;
5294
5295 /* Add a '+' to the displacement string if necessary. */
5296 if (*intel_parser.disp != '\0'
5297 && *(intel_parser.disp + strlen (intel_parser.disp) - 1) != '+')
5298 strcat (intel_parser.disp, "+");
5299
5300 if (intel_expr () && intel_match_token (']'))
5301 {
5302 /* Preserve brackets when the operand is an offset expression. */
5303 if (intel_parser.op_modifier == OFFSET_FLAT)
5304 strcat (intel_parser.disp, "]");
5305
5306 return 1;
5307 }
5308 else
5309 return 0;
5310 }
5311
5312 /* e11 BYTE
5313 | WORD
5314 | DWORD
5315 | QWORD
5316 | XWORD */
5317 else if (cur_token.code == T_BYTE
5318 || cur_token.code == T_WORD
5319 || cur_token.code == T_DWORD
5320 || cur_token.code == T_QWORD
5321 || cur_token.code == T_XWORD)
5322 {
5323 intel_match_token (cur_token.code);
5324
5325 return 1;
5326 }
5327
5328 /* e11 $
5329 | . */
5330 else if (cur_token.code == '$' || cur_token.code == '.')
5331 {
5332 strcat (intel_parser.disp, cur_token.str);
5333 intel_match_token (cur_token.code);
5334
5335 /* Mark as a memory operand only if it's not already known to be an
5336 offset expression. */
5337 if (intel_parser.op_modifier != OFFSET_FLAT)
5338 intel_parser.is_mem = 1;
5339
5340 return 1;
5341 }
5342
5343 /* e11 register */
5344 else if (cur_token.code == T_REG)
5345 {
5346 const reg_entry *reg = intel_parser.reg = cur_token.reg;
5347
5348 intel_match_token (T_REG);
5349
5350 /* Check for segment change. */
5351 if (cur_token.code == ':')
5352 {
5353 if (reg->reg_type & (SReg2 | SReg3))
5354 {
5355 switch (reg->reg_num)
5356 {
5357 case 0:
5358 i.seg[i.mem_operands] = &es;
5359 break;
5360 case 1:
5361 i.seg[i.mem_operands] = &cs;
5362 break;
5363 case 2:
5364 i.seg[i.mem_operands] = &ss;
5365 break;
5366 case 3:
5367 i.seg[i.mem_operands] = &ds;
5368 break;
5369 case 4:
5370 i.seg[i.mem_operands] = &fs;
5371 break;
5372 case 5:
5373 i.seg[i.mem_operands] = &gs;
5374 break;
5375 }
5376 }
5377 else
5378 {
5379 as_bad (_("`%s' is not a valid segment register"), reg->reg_name);
5380 return 0;
5381 }
5382 }
5383
5384 /* Not a segment register. Check for register scaling. */
5385 else if (cur_token.code == '*')
5386 {
5387 if (!intel_parser.is_mem)
5388 {
5389 as_bad (_("Register scaling only allowed in memory operands."));
5390 return 0;
5391 }
5392
5393 /* What follows must be a valid scale. */
5394 if (intel_match_token ('*')
5395 && strchr ("01248", *cur_token.str))
5396 {
5397 i.index_reg = reg;
5398 i.types[this_operand] |= BaseIndex;
5399
5400 /* Set the scale after setting the register (otherwise,
5401 i386_scale will complain) */
5402 i386_scale (cur_token.str);
5403 intel_match_token (T_CONST);
5404 }
5405 else
5406 {
5407 as_bad (_("expecting scale factor of 1, 2, 4, or 8: got `%s'"),
5408 cur_token.str);
5409 return 0;
5410 }
5411 }
5412
5413 /* No scaling. If this is a memory operand, the register is either a
5414 base register (first occurrence) or an index register (second
5415 occurrence). */
5416 else if (intel_parser.is_mem && !(reg->reg_type & (SReg2 | SReg3)))
5417 {
5418 if (i.base_reg && i.index_reg)
5419 {
5420 as_bad (_("Too many register references in memory operand.\n"));
5421 return 0;
5422 }
5423
5424 if (i.base_reg == NULL)
5425 i.base_reg = reg;
5426 else
5427 i.index_reg = reg;
5428
5429 i.types[this_operand] |= BaseIndex;
5430 }
5431
5432 /* Offset modifier. Add the register to the displacement string to be
5433 parsed as an immediate expression after we're done. */
5434 else if (intel_parser.op_modifier == OFFSET_FLAT)
5435 strcat (intel_parser.disp, reg->reg_name);
5436
5437 /* It's neither base nor index nor offset. */
5438 else
5439 {
5440 i.types[this_operand] |= reg->reg_type & ~BaseIndex;
5441 i.op[this_operand].regs = reg;
5442 i.reg_operands++;
5443 }
5444
5445 /* Since registers are not part of the displacement string (except
5446 when we're parsing offset operands), we may need to remove any
5447 preceding '+' from the displacement string. */
5448 if (*intel_parser.disp != '\0'
5449 && intel_parser.op_modifier != OFFSET_FLAT)
5450 {
5451 char *s = intel_parser.disp;
5452 s += strlen (s) - 1;
5453 if (*s == '+')
5454 *s = '\0';
5455 }
5456
5457 return 1;
5458 }
5459
5460 /* e11 id */
5461 else if (cur_token.code == T_ID)
5462 {
5463 /* Add the identifier to the displacement string. */
5464 strcat (intel_parser.disp, cur_token.str);
5465 intel_match_token (T_ID);
5466
5467 /* The identifier represents a memory reference only if it's not
5468 preceded by an offset modifier. */
5469 if (intel_parser.op_modifier != OFFSET_FLAT)
5470 intel_parser.is_mem = 1;
5471
5472 return 1;
5473 }
5474
5475 /* e11 constant */
5476 else if (cur_token.code == T_CONST
5477 || cur_token.code == '-'
5478 || cur_token.code == '+')
5479 {
5480 char *save_str;
5481
5482 /* Allow constants that start with `+' or `-'. */
5483 if (cur_token.code == '-' || cur_token.code == '+')
5484 {
5485 strcat (intel_parser.disp, cur_token.str);
5486 intel_match_token (cur_token.code);
5487 if (cur_token.code != T_CONST)
5488 {
5489 as_bad (_("Syntax error. Expecting a constant. Got `%s'.\n"),
5490 cur_token.str);
5491 return 0;
5492 }
5493 }
5494
5495 save_str = (char *) malloc (strlen (cur_token.str) + 1);
5496 if (save_str == NULL)
5497 abort ();
5498 strcpy (save_str, cur_token.str);
5499
5500 /* Get the next token to check for register scaling. */
5501 intel_match_token (cur_token.code);
5502
5503 /* Check if this constant is a scaling factor for an index register. */
5504 if (cur_token.code == '*')
5505 {
5506 if (intel_match_token ('*') && cur_token.code == T_REG)
5507 {
5508 if (!intel_parser.is_mem)
5509 {
5510 as_bad (_("Register scaling only allowed in memory operands."));
5511 return 0;
5512 }
5513
5514 /* The constant is followed by `* reg', so it must be
5515 a valid scale. */
5516 if (strchr ("01248", *save_str))
5517 {
5518 i.index_reg = cur_token.reg;
5519 i.types[this_operand] |= BaseIndex;
5520
5521 /* Set the scale after setting the register (otherwise,
5522 i386_scale will complain) */
5523 i386_scale (save_str);
5524 intel_match_token (T_REG);
5525
5526 /* Since registers are not part of the displacement
5527 string, we may need to remove any preceding '+' from
5528 the displacement string. */
5529 if (*intel_parser.disp != '\0')
5530 {
5531 char *s = intel_parser.disp;
5532 s += strlen (s) - 1;
5533 if (*s == '+')
5534 *s = '\0';
5535 }
5536
5537 free (save_str);
5538
5539 return 1;
5540 }
5541 else
5542 return 0;
5543 }
5544
5545 /* The constant was not used for register scaling. Since we have
5546 already consumed the token following `*' we now need to put it
5547 back in the stream. */
5548 else
5549 intel_putback_token ();
5550 }
5551
5552 /* Add the constant to the displacement string. */
5553 strcat (intel_parser.disp, save_str);
5554 free (save_str);
5555
5556 return 1;
5557 }
5558
5559 as_bad (_("Unrecognized token '%s'"), cur_token.str);
5560 return 0;
5561 }
5562
5563 /* Match the given token against cur_token. If they match, read the next
5564 token from the operand string. */
5565 static int
5566 intel_match_token (code)
5567 int code;
5568 {
5569 if (cur_token.code == code)
5570 {
5571 intel_get_token ();
5572 return 1;
5573 }
5574 else
5575 {
5576 as_bad (_("Unexpected token `%s'\n"), cur_token.str);
5577 return 0;
5578 }
5579 }
5580
5581 /* Read a new token from intel_parser.op_string and store it in cur_token. */
5582 static void
5583 intel_get_token ()
5584 {
5585 char *end_op;
5586 const reg_entry *reg;
5587 struct intel_token new_token;
5588
5589 new_token.code = T_NIL;
5590 new_token.reg = NULL;
5591 new_token.str = NULL;
5592
5593 /* Free the memory allocated to the previous token and move
5594 cur_token to prev_token. */
5595 if (prev_token.str)
5596 free (prev_token.str);
5597
5598 prev_token = cur_token;
5599
5600 /* Skip whitespace. */
5601 while (is_space_char (*intel_parser.op_string))
5602 intel_parser.op_string++;
5603
5604 /* Return an empty token if we find nothing else on the line. */
5605 if (*intel_parser.op_string == '\0')
5606 {
5607 cur_token = new_token;
5608 return;
5609 }
5610
5611 /* The new token cannot be larger than the remainder of the operand
5612 string. */
5613 new_token.str = (char *) malloc (strlen (intel_parser.op_string) + 1);
5614 if (new_token.str == NULL)
5615 abort ();
5616 new_token.str[0] = '\0';
5617
5618 if (strchr ("0123456789", *intel_parser.op_string))
5619 {
5620 char *p = new_token.str;
5621 char *q = intel_parser.op_string;
5622 new_token.code = T_CONST;
5623
5624 /* Allow any kind of identifier char to encompass floating point and
5625 hexadecimal numbers. */
5626 while (is_identifier_char (*q))
5627 *p++ = *q++;
5628 *p = '\0';
5629
5630 /* Recognize special symbol names [0-9][bf]. */
5631 if (strlen (intel_parser.op_string) == 2
5632 && (intel_parser.op_string[1] == 'b'
5633 || intel_parser.op_string[1] == 'f'))
5634 new_token.code = T_ID;
5635 }
5636
5637 else if (strchr ("+-/*:[]()", *intel_parser.op_string))
5638 {
5639 new_token.code = *intel_parser.op_string;
5640 new_token.str[0] = *intel_parser.op_string;
5641 new_token.str[1] = '\0';
5642 }
5643
5644 else if ((*intel_parser.op_string == REGISTER_PREFIX || allow_naked_reg)
5645 && ((reg = parse_register (intel_parser.op_string, &end_op)) != NULL))
5646 {
5647 new_token.code = T_REG;
5648 new_token.reg = reg;
5649
5650 if (*intel_parser.op_string == REGISTER_PREFIX)
5651 {
5652 new_token.str[0] = REGISTER_PREFIX;
5653 new_token.str[1] = '\0';
5654 }
5655
5656 strcat (new_token.str, reg->reg_name);
5657 }
5658
5659 else if (is_identifier_char (*intel_parser.op_string))
5660 {
5661 char *p = new_token.str;
5662 char *q = intel_parser.op_string;
5663
5664 /* A '.' or '$' followed by an identifier char is an identifier.
5665 Otherwise, it's operator '.' followed by an expression. */
5666 if ((*q == '.' || *q == '$') && !is_identifier_char (*(q + 1)))
5667 {
5668 new_token.code = *q;
5669 new_token.str[0] = *q;
5670 new_token.str[1] = '\0';
5671 }
5672 else
5673 {
5674 while (is_identifier_char (*q) || *q == '@')
5675 *p++ = *q++;
5676 *p = '\0';
5677
5678 if (strcasecmp (new_token.str, "BYTE") == 0)
5679 new_token.code = T_BYTE;
5680
5681 else if (strcasecmp (new_token.str, "WORD") == 0)
5682 new_token.code = T_WORD;
5683
5684 else if (strcasecmp (new_token.str, "DWORD") == 0)
5685 new_token.code = T_DWORD;
5686
5687 else if (strcasecmp (new_token.str, "QWORD") == 0)
5688 new_token.code = T_QWORD;
5689
5690 else if (strcasecmp (new_token.str, "XWORD") == 0)
5691 new_token.code = T_XWORD;
5692
5693 else if (strcasecmp (new_token.str, "PTR") == 0)
5694 new_token.code = T_PTR;
5695
5696 else if (strcasecmp (new_token.str, "SHORT") == 0)
5697 new_token.code = T_SHORT;
5698
5699 else if (strcasecmp (new_token.str, "OFFSET") == 0)
5700 {
5701 new_token.code = T_OFFSET;
5702
5703 /* ??? This is not mentioned in the MASM grammar but gcc
5704 makes use of it with -mintel-syntax. OFFSET may be
5705 followed by FLAT: */
5706 if (strncasecmp (q, " FLAT:", 6) == 0)
5707 strcat (new_token.str, " FLAT:");
5708 }
5709
5710 /* ??? This is not mentioned in the MASM grammar. */
5711 else if (strcasecmp (new_token.str, "FLAT") == 0)
5712 new_token.code = T_OFFSET;
5713
5714 else
5715 new_token.code = T_ID;
5716 }
5717 }
5718
5719 else
5720 as_bad (_("Unrecognized token `%s'\n"), intel_parser.op_string);
5721
5722 intel_parser.op_string += strlen (new_token.str);
5723 cur_token = new_token;
5724 }
5725
5726 /* Put cur_token back into the token stream and make cur_token point to
5727 prev_token. */
5728 static void
5729 intel_putback_token ()
5730 {
5731 intel_parser.op_string -= strlen (cur_token.str);
5732 free (cur_token.str);
5733 cur_token = prev_token;
5734
5735 /* Forget prev_token. */
5736 prev_token.code = T_NIL;
5737 prev_token.reg = NULL;
5738 prev_token.str = NULL;
5739 }